Blog

  • WordPress plugin: Chap Secure Login

    Ho recentemente installato Chap Secure Login, un plugin molto utile per WordPress che risolve un problema da non sottovalutare: l’autenticazione su un canale non cifrato quale HTTP (è buona norma usare HTTPS quando si effettua uno scambio di informazioni riservate, quali password, numeri di carta di credito, etc. per evitare che eventuali eavesdropper possano carpire le informazioni scambiate ed utilizzarle a vostro svantaggio).

    Essendo il problema molto interessante, e risolto dal plugin in modo brillante, ho deciso di interessarmi al suo funzionamento. Partiamo dal presupposto: dovete fare un login tramite HTTP e non volete che la vostra password passi in chiaro. Come procedere?

    Il plugin modifica il processo di login, trasmettendo in chiaro (tra server e client) solo l’username, mentre per la password adotta un meccanismo CHAP per trasmettere in modo sicuro la password (in particolare: il processo di login andrà in errore la prima volta, mentre la seconda funzionerà correttamente). In particolare, la login si traduce prima in uno scambio di chiave di sessione al primo login, dopodiché il client userà la chiave segreta per cifrare la password e trasmettere il risultato al server. A questo punto il server confronta il valore ottenuto con la password dell’utente, e procederà all’autenticazione se la password è corretta.

  • Cercare un file dentro un backup di Time Machine

    Time Machine è il software di backup semi-automatico incluso in MacOSX; sono recentemente passato a Time Machine su consiglio di un amico, e devo assolutamente ringraziare entrambi: Time Machine mi ha salvato in ben 2 occasioni.

    Una funzionalità che però non ho trovato intuitiva è quella di ricerca di un file/directory per name dentro gli archivi di Time Machine. Per cercare un pattern, infatti, bisogna aprire Time Machine e scrivere ciò che si sta cercando nell’apposito riquadro del Finder, e poi precedere ad utilizzare lo slider temporale per andare più avanti (o indietro) nel tempo.

  • jVisualVM: il profiler Java incluso nella JDK

    Mi sono recentemente trovato a dover fare del profiling di prestazioni di un software Java SE. Tra le varie opzioni che avevo a disposizione per il profiling in ambito Java, ho scelto jVisualVM inizialmente perché già incluso nella JVM (a partire dalla versione 1.6, tutte le Sun Java JDK includono il profiler).

    L’esperienza con jVisualVM è stata davvero ottima: il profiler è semplice, facile e completo. Partiamo dall’avvio, molto semplice: da linea di comando si lancia jvisualvm. Ma niente paura, apparirà subito la finestra di profiling, che vi permetterà di fare un attach ai processi Java attualmente attivi sul vostro sistema e che volete monitorare:

    Una volta selezionato il processo che vogliamo monitorare, passeremo al dettaglio e potremo visualizzare l’uso di CPU e heap, nonché il numero di thread allocati dal programma. Possiamo anche fare un sempling del processo, raccogliendo in tempo reale informazioni sull’utilizzo di CPU e heap:

    In generale, jVisualVM è un ottimo profiler per programmi Java: presenta le informazioni in modo semplice e completo; grazie a queste informazioni sono riuscito a diagnosticare (e risolvere) i problemi di performance del programma che stavo analizzando. Non è da sottovalutare, inoltre, che jVisualVM è praticamente disponibile per tutte le piattaforme su cui gira la JVM.

    Vi segnalo infine che è anche possibile integrare anche il profiler con Eclipse.

  • Installare ed utilizzare Mosh (mobile-shell) su Ubuntu e MacOSX

    Per le sessioni semi-perpetue di ssh che contraddistinguono il mio setup, utilizzo una combinazione di autossh e tmux/screen (wrappato da byobu). Ultimamente ho scoperto mobile-shell (Mosh): proveniente dal MIT, si tratta di un ssh killer perché, a differenza di ssh:

    • ristabilisce automaticamente la connessione dopo un certo timeout (problema risolto in precedenza da autossh);
    • utilizza un eco locale (addio lag ssh su connessioni lente!);
    • mosh e mosh-server possono essere avviati da utenti non privilegiati
    • supporta solo UTF-8!

    Da Ubuntu 12.04, mosh è presente nei repo ufficiali di Ubuntu (per le versioni precedenti, è presente anche un ppa). Per MacOSX, si può usare compilare il pacchetto usando homebrew o scaricare il dmg già pronto dal sito di riferimento.

    Provarlo è molto semplice: supponiamo di avere un server Linux e un client MacOSX. Installatelo su Linux tramite apt-get e scaricate il pkg per MacOSX. Una volta installato, per connettersi da MacOSX ho dovuto dichiarare un locale (ho scoperto che, sfortunatamente, MacOSX non dichiara alcun locale). Per cui, controllate il locale in uso sul server remoto e dichiarate lo stesso locale su MacOSX (eventualmente modificate anche il file rc relativo alla vostra shell di riferimento):

    michele@delta:~ % locale                                             
    LANG=
    LC_COLLATE="C"
    LC_CTYPE="C"
    LC_MESSAGES="C"
    LC_MONETARY="C"
    LC_NUMERIC="C"
    LC_TIME="C"
    LC_ALL=
    michele@delta:~ % export LANG="en_US.UTF-8"
    michele@delta:~ % mosh server
  • Installare Oracle JDK Java 7 su MacOSX

    Abbiamo già visto come installare la Oracle JDK 7 su Ubuntu (e Linux), ed oggi faremo la stessa cosa su MacOSX. Su OSX il processo è molto più semplice: basta infatti scaricare il dmg (l’unico disponibile per MacOSX, ovvero quello a 64bit) dall’indirizzo ufficiale di Oracle e procedere all’installazione (system-wide).

    Dopo l’installazione, aprite le Java Preferences.app (le trovate in /Applications) e trascinate Java SE 7 in cima alla lista.

    Chiudete, aprite un Terminal.app e digitate java -version. L’output che ne ottenete dovrebbe essere quello della nuova JVM come in figura.

    A titolo informativo, la JVM viene installata in

    /Library/Java/JavaVirtualMachines/1.7.0.jdk

    Tenetelo presente, vi servirà se dovrete impostare Eclipse (o qualche altro applicativo) per recuperare correttamente la JAVA_HOME della JVM appena installata [a breve arriverà un post a riguardo].

    Se volete invece affidarvi a OpenJDK (che è la reference implementation per Java 7), esistono dei pacchetti precompilati che potrete installare scaricandoli dal sito openjdk-osx-build.

  • Evitare riavvii e shutdown remoti su Ubuntu con molly-guard

    Non mi è mai capitato ma potrebbe essere molto utile ai sysadmin più distratti: molly-guard è un pacchetto presente su Ubuntu/Debian che vi permette di evitare un riavvio/shutdown di una macchina remota a cui siete collegati tramite ssh.

    Se, per esempio, tentate di eseguire uno shutdown di una macchina remota a cui siete collegati tramite ssh, molly-guard vi chiede di scrivere per intero l’hostname della macchina che volete riavviare/spegnere.

    Il pacchetto è incluso nei repository ed è molto semplice da installare (basta un apt-get) ed è davvero molto utile: ho provveduto ad installarlo su tutte le macchine che gestisco.

    Per i più curiosi, il nome molly-guard deriva da una “divertente” vicenda.

  • MacOSX Lion: un po’ di customizzazione

    OSX offre alcune opzioni “nascoste” che sono modificabili tramite linea di comando (aprite Terminal.app). Ne ho già condivisa qualcuna, ma dopo aver letto “Mac Kung Fu” e ispirandomi ad un gist, ho deciso di condividere tutte le customizzazioni di OSX che uso (dove non presente ho deciso di introdurre un commento in inglese, sulla falsariga di quanto già fatto nel gist):

    echo “Enable iTunes track notifications in the Dock”
    defaults write com.apple.dock itunes-notifications -bool true
    echo “Disable iTunes Store links in iTunes”
    defaults write com.apple.iTunes invertStoreLinks -bool YES
    echo “Disable the Ping sidebar in iTunes”
    defaults write com.apple.iTunes disablePingSidebar -bool true
    echo “Disable all the other Ping stuff in iTunes”
    defaults write com.apple.iTunes disablePing -bool true
    echo “Make ⌘ + F focus the search input in iTunes”
    defaults write com.apple.iTunes NSUserKeyEquivalents -dict-add “Target Search Field” “@F”

    echo “Disable the “reopen windows when logging back in” option”
    defaults write com.apple.Preview NSQuitAlwaysKeepsWindows -bool false
    defaults write com.apple.QuickTimePlayerX NSQuitAlwaysKeepsWindows -bool false
    defaults write com.apple.loginwindow TALLogoutSavesState -bool false
    defaults write com.apple.loginwindow LoginwindowLaunchesRelaunchApps -bool false

    echo “Enable full keyboard access for all controls (e.g. enable Tab in modal dialogs)”
    defaults write NSGlobalDomain AppleKeyboardUIMode -int 3

    echo “Show all filename extensions in Finder”
    defaults write NSGlobalDomain AppleShowAllExtensions -bool true

    echo “Show Status bar in Finder”
    defaults write com.apple.finder ShowStatusBar -bool true
    defaults write com.apple.finder PathBarRootAtHome -bool TRUE

    echo “Expand save panel by default”
    defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
    echo “Enable Safari’s debug menu”
    defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
    echo “Only use UTF-8 in Terminal.app”
    defaults write com.apple.terminal StringEncodings -array 4

    echo “Popup don’t have to steal focus”
    defaults write -g NSAutomaticWindowAnimationsEnabled -bool FALSE

    echo “Add a stack with Recent Applications/Recent items on the Dock”
    defaults write com.apple.dock persistent-others -array-add ‘{ “tile-data” = { “list-type” = 1; }; “tile-type” = “recents-tile”;}’
    echo “Show the ~/Library folder”
    chflags nohidden ~/Library
    echo “Show host info on the login screen”
    sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo 1

    Dopo aver applicato queste modifiche, consiglio un riavvio della macchina.

  • Aggiornare tutte le Ruby gems installate

    Per aggiornare le gem installate suggerisco di:

    1. Aggiornare la versione di RubyGems installata:gem update --system
    2. Aggiornare tutte le gemme installate: gem update
    3. Rimuovere la versione “obsoleta” delle gemme installate: gem cleanup

    Può capitare che ci siano dei problemi di dipendenze durante la fase di cleanup:

    michele@delta:~ % gem cleanup [ 7:00PM]
    Cleaning up installed gems…
    Attempting to uninstall sprockets-2.1.2

    You have requested to uninstall the gem:
    sprockets-2.1.2
    actionpack-3.2.3 depends on [sprockets (~> 2.1.2)]
    If you remove this gems, one or more dependencies will not be met.
    Continue with Uninstall? [Yn]

    In questi casi vi sconsiglio di rimuovere la gem in questione in modo da non violare la dipendenza.

  • Aggiornare tutti i package Python installati con pip

    Per aggiornare tutti i package Python installati, suggerisco di usare pip nel seguente modo:

    1. Aggiorno pip all’ultima versione (suppongo di avere easy_install): easy_install -U pip
    2. Estraggo la lista dei pkg installati e li aggiorno uno per uno: pip freeze --local | cut -d = -f 1 | xargs pip install -U
  • RescueTime: il modo migliore per visualizzare dove “spendiamo” il nostro tempo

    RescueTime: il modo migliore per visualizzare dove “spendiamo” il nostro tempo

    Ricordarsi dove si “spende” la maggior parte del proprio tempo al computer è un’attività davvero difficile, soprattutto per chi con i computer ci lavora! Proprio per questo motivo ci viene in aiuto RescueTime: una volta installato vi verrà proposto di installare un programma che se ne starà in background e che monitorerà non invasivamente quello che fate al vostro computer, per produrre poi un report delle attività che svolgete al vostro computer, contabilizzando le ore che spendete in ogni applicazione; il tutto, automaticamente!

    Una volta installato, RescueTime vi fa alcune semplici domande per capire quali sono, a vostro giudizio, i programmi che ritenete più produttivi e quali, invece, perdite di tempo. Ogni volta che RescueTime vi invierà un report delle vostre attività, con dei semplici e chiari grafici come quello qui sopra, vi dirà se siete stati produttivi o meno proprio secondo le regole che voi stessi avete dichiarato.

    Come funziona? Dopo un po’ di investigazione, ho scoperto che RescueTime memorizza solamente il titolo dell’applicazione in foreground e per quanto tempo viene utilizzata (per il browser: anche il sito visitato). Questi sono i dati memorizzati da RescueTime, per cui, se siete preoccupati per la vostra privacy, potete decidere in autonomia se installare RescueTime.

    In generale trovo RescueTime davvero utile, proprio perché mi aiuta a capire dove spendo la maggior parte del mio tempo e, nel caso in cui le attività siano distrazioni, a potermi meglio regolare in futuro. Inoltre, funziona anche come un pratico “cronometro” per progetti: spesso mi aiuta a capire qual è l’elapsed vero di un progetto a cui sto lavorando.

    RescueTime è gratuito nella versione base per Windows, Linux e MacOSX ed offre anche una versione a pagamento che vi offre informazioni ancora più dettagliate e alcune funzionalità per restare nella “zone” bloccando le attività che vi distraggono.