Author: Michele Bologna

  • Geek e nerd: facciamo chiarezza sulle definizioni

    Ho sempre sentito inesattezze riguardo alla definizione di nerd e geek (e spesso ho usato anch’io impropriamente il termine). Fortunatamente, greatwhiteshark ha realizzato un diagramma di Venn molto esplicativo che ci permetterà di non sbagliare più.

    Voi a quale insieme appartenete?

  • Munin e phpSysInfo: monitorare server remoti tramite un’interfaccia web

    Monitorare dei server remoti è un’attività che richiede tempo, capacità e gli strumenti corretti. Per monitorare quotidianamente alcuni server aziendali che amministro, ho recentemente scoperto due comodi strumenti a cui si accede tramite interfaccia web (e di conseguenza molto comodi): si tratta di phpSysInfo e di munin.

    Come si evince dal nome, phpSysInfo si basa su PHP (e quindi vi obbligherà ad utilizzare apache-prefork anziché il più performante apache-mdm-worker). L’interfaccia di phpSysInfo è molto semplice e riassuntiva, presentando le informazioni principali del sistema (CPU, RAM utilizzata, occupazione dei vari file-system) in una schermata pulita e ordinata.

    munin invece è più complesso, ma anche più potente: si presenta come una serie di grafici che rappresentano il comportamento di tutti i principali componenti di sistema e le grandezze di sistema (numero di processi attivi, % dei processi attivi e sleeping, etc.). Ogni quantità viene rappresentata su un grafico giornaliero e su un grafico settimanale. Munin è scritto in Perl, ed è sicuramente più dettagliato ed approfondito. Inoltre, è possibile estendere le funzionalità di munin grazie ai plugin.

    In caso di problemi, però, non è possibile sfruttare nessuna delle due interfacce qui esposte: dovremo quindi ricorrere ad uno strumento “attivo” (come ssh, vnc, o Teamviewer) per apportare le modifiche necessarie.

    munin e phpSysInfo sono disponibili per tutte le distribuzioni Linux.

  • Ninite: installare (o aggiornare) velocemente tutti i programmi che vi servono (su Windows e Linux)

    Se siete alle prese con la desolante frustrazione di avere appena reinstallato il sistema operativo e non avere programmi per fare quello che vi serve, date un’occhiata a Ninite: con pochi click si selezionano i programmi che ci interessano e si scarica un file eseguibile che si occuperà di installare tutti i programmi che abbiamo selezionato, senza alcun intervento da parte nostra.

    ninite

    Il procedimento è analogo per aggiornare i programmi che avete già installato. E funziona anche con Linux!

  • Stampare da iPhone/iPad tramite AirPrint (su una stampante condivisa da Windows)

    Con le ultime release di iOS, Apple permette ai possessori di iPhone e di iPad di stampare qualsiasi documento utilizzando il dispositivo Apple e una stampante compatibile con le specifiche di AirPrint, senza l’ausilio di un computer. Per chi invece ha già una stampante condivisa da Windows, è possibile fare in modo che la stampante sia compatibile con AirPrint seguendo dei semplici passi:

    1. Installate iTunes;
    2. Scaricate AirPrint.zip e scompattatelo in C:\Programmi
    3. Avviare il servizio AirPrint tra i servizi di sistema:

      sc.exe create AirPrint binPath= “C:\Program Files\AirPrint\airprint.exe -s” depend= “Bonjour Service” start= auto
      sc.exe start AirPrint

    4. Stampare il documento (usate la stampante che si trova sulla stessa rete wireless del vostro iPad/iPhone)
  • AJAX per applicazioni web: la mia recensione

    ajax_applicazioni_web

    Nell’epoca del Web 3.0 ho letto questo libro che tratta (a grandi linee, come vi spiegherò tra poco) di AJAX, la enabling technology del Web 2.0.

    Ma cos’è AJAX? È un insieme di tecnologie (tra cui Javascript e XML) che permettono lo scambio di dati tra client e server in modo asincrono, permettendo di realizzare le cosiddette RIA (Rich Internet Applications, come Gmail).

    Il libro è molto compatto (342 pagine) ed è composto da 12 capitoli. A mio avviso il libro è fin troppo generico e discorsivo; si dilunga infatti un po’ troppo sulla teoria tralasciando la parte pratica, a volte presentando listati di codice senza nemmeno spiegarli. Inoltre, ci sono alcuni capitoli in cui si assiste ad alcune divagazioni discorsive che non portano da nessuna parte (si introducono Python, Django, Ruby, Rails e PHP ma non vengono poi utilizzati). Solo nel capitolo introduttivo viene spiegato il funzionamento di xmlHttpRequest e come utilizzarlo: dopodiché, nel libro, non verrà quasi più menzionato.

    Il libro è utile a chi vuole ottenere una panoramica teorica delle tecnologie utilizzate per lo sviluppo web, ma non di più.

  • iTunes: come ascoltare tutti i podcast senza interruzioni

    A differenza di quanto accade su iOS, iTunes (OSX) non esegue un ascolto continuo dei podcast disponibili: al termine del podcast che si sta ascoltando, bisogna manualmente fare il play del prossimo episodio. Questa limitazione si può risolvere creando una smart playlist con le seguenti caratteristiche:

    • Media kind: Podcast
    • Play count: 0

    itunes_podcast

    Il risultato è una playlist di tutti i podcast non ancora ascoltati che potremo ascoltare senza interruzioni. Ovviamente potete customizzare la lista ordinandola per data di pubblicazione, come ho fatto io nell’immagine.
  • Linguaggio C, seconda edizione (K&R): la mia recensione

    In pochi giorni ho letto una pietra miliare dei libri della programmazione, il famoso K&R (dagli autori Kernighan & Ritchie); si tratta del libro più famoso per quanto riguarda la programmazione C.

    linguaggio_C

    In libro è molto breve (in totale 340 pagine, ma le ultime ~100 pagine di appendice sono una reference manual condensata). Il libro è adatto a chi ha già una buona base di programmazione, perché vengono presentati e implementati concetti non banali usando puntatori e struct. Tutti i concetti e i paradigmi del C sono sviscerati e spiegati all’utente. Nella parte finale del libro, vengono presentate anche le basi della programmazione C in ambiente UNIX.

    I due autori sono molto chiari e spiegano in modo molto approfondito le scelte tecniche e i paradigmi utilizzati.

    In definitiva, essendo un pilastro della programmazione, consiglio la lettura a tutti i programmatori: a mio avviso è un libro è indispensabile nella libreria di ogni programmatore.

  • DuckDuckGo: il mio motore di ricerca di default

    Da un po’ di tempo ho cambiato il motore di ricerca che utilizzo su Chrome: sono passato da Google a DuckDuckGo. DuckDuckGo è semplice e veloce come Google, ma in più offre alcune funzionalità interessanti. Vi presento quelle che mi hanno convinto ad utilizzare DuckDuckGo come motore di ricerca di default:

    • La possibilità di avere una panoramica introduttiva (dictionary) su qualsiasi termine viene introdotto (vedi l’esempio in figura). Inoltre vengono anche presentate le search ideas, ovvero alcuni termini correlati alla ricerca che abbiamo fatto. Come vedete, il layout è molto semplice ma al tempo stesso efficace.Define
    • La possibilità di effettuare ricerche ristrette ad un singolo campo: ad esempio, utilizzando la chiave di ricerca “!ruby filter” si viene portati sulla pagina di ricerca di ruby-lang.org per la chiave di ricerca specificata (in questo caso vediamo l’help che ci suggerisce di utilizzare questa funzionalità, detta bang syntax). I siti disponibili usando la bang syntax sono moltissimi, e comprendono la maggior parte dei siti che utilizzo quotidianamente.Ruby search

    Provarlo non costa niente, e iniziare non vi obbliga a cambiare la configurazione del vostro browser. Senza dimenticare che proprio quest’anno, il motore di ricerca di DuckDuckGo è stato inserito da TIME nella lista dei 50 siti più interessanti del 2011.

  • require_relative in ruby 1.9 e la retrocompatibilità con ruby 1.8

    A partire da ruby 1.9 è obbligatorio utilizzare l’istruzione:

    require_relative 'pkg'

    affinché venga importato il modulo ‘pkg’ presente nella stessa directory in cui è presente il modulo che stiamo scrivendo. Mi spiego meglio: dato un modulo ruby detto ‘pkg’, se vogliamo importarlo in un altro file (chiamiamolo ‘foo’ per semplicità), dobbiamo scrivere:

    • in ruby 1.8: require 'pkg'
    • in ruby 1.9: require_relative 'pkg'
    Questo accorgimento è utilizzato per aumentare la security di chi scrive e soprattutto di chi utilizza programmi: nel caso in cui siano definiti più moduli ‘pkg’ (uno in gems e uno locale), quale dovrebbe importare l’interprete?
    La soluzione è assolutamente valida, ma richiede un po’ di manutenzione per garantire la retrocompatibilità con ruby 1.8. Infatti, per permettere a ruby 1.8 di interpretare correttamente l’istruzione ‘require_relative’ dobbiamo procedere ad un workaround dichiarando l’implementazione di tale istruzione:
    unless Kernel.respond_to?(:require_relative)
      module Kernel
        def require_relative(path)
          require File.join(File.dirname(caller[0]), path.to_str)
        end
      end
    end
    

    A questo punto è sufficiente utilizzare require_relative anche in ruby 1.8 per non avere più problemi.

  • gitignore: un filtro per escludere i file da non versionare in un repository git

    Prima di fare un push su un repository git è importante avere configurato il gitignore, ovvero specificare quali files non devono essere versionati in un repository git. A titolo di esempio: i file .pyc, o più in generale i prodotti della compilazione di un qualsiasi file di sorgente; versionare questi files, infatti, non ha senso.

    Per fare in modo che git eviti di versionare certi tipi di files, creiamo un file .gitignore dentro la nostra $HOME, ed  il gioco è fatto. Se volete partire da un esempio già realizzato, includo qui il mio gitignore.

    michele@delta:~ % cat ~/.gitignore
    # Compiled source #
    ###################
    *.com
    *.class
    *.dll
    *.exe
    *.o
    *.so

    # Packages #
    ############
    # it’s better to unpack these files and commit the raw source
    # git has its own built in compression methods
    *.7z
    *.dmg
    *.gz
    *.iso
    *.jar
    *.rar
    *.tar
    *.zip

    # Logs and databases #
    ######################
    *.log
    *.sql
    *.sqlite

    # OS generated files #
    ######################
    .DS_Store*
    ehthumbs.db
    Icon?
    Thumbs.db