OS X e iOS

Eseguire azioni in automatico su OSX: usare Launchd

Quante volte vi siete trovati a desiderare che il vostro computer eseguisse certe azioni in automatico, senza che voi non dobbiate preoccuparvi di nulla? Insomma, il nostro pc fa tantissima roba senza che noi ce ne accorgiamo, perché in mezzo a questa roba non possiamo metterci anche qualcosa che faccia comodo a noi?

Se usate Windows

Potete cambiare sistema operativo, dopodiché continuare a leggere questo articolo. Penso ci sia un metodo per automatizzare le cose anche nel sistema operativo di Microsoft, ma cambiando sistema avrete mille altri vantaggi, mi ringrazierete!

Se usate Linux

Ci viene fornito lo strumento cron. Di cui non parlerò in questo articolo (magari in uno dei prossimi, chi lo sa?) perché non l’ho mai usato, ma se cercate con Google troverete un sacco di materiale a riguardo.

Se usate OSX

Anche OSX ci fornisce cron, come se fossimo su Linux. Ma ho detto che in questo articolo non parlerà di cron e non mi sono mai occupato di altri sistemi operativi che non ho ancora citato, dunque dove sta l’inghippo?

Apple ci fornisce uno strumento un po’ meno immediato di cron, ma altrettanto utile per schedulare azioni nel nostro sistema operativo: di chiama Launchd e io vi spiegherò come cominciare a usarlo.

Condizioni iniziali

Io vi farò un esempio particolare per spiegarvi l’uso di questo strumento, poi sarete voi a dovervi inventare un utilizzo che sia intelligente per voi, eventualmente cercando altre funzioni di Launchd che io non ho trattato in questo articolo per pigrizia o perché non le ho cercate/trovate, probabilmente perché non mi servono oppure di nuovo per pigrizia.

Nello scorso articolo vi ho raccontato che ho scritto uno script bash per effettuare il backup che utilizzo per effettuare il backup di un disco esterno. Mi piacerebbe adesso che questo script venisse eseguito in automatico a intervalli regolari, in modo che io non mi debba interessare più di tanto alla faccenda e non debba lanciare lo script a mano.

Dunque abbiamo uno script bash, la volontà di eseguirlo in automatico a intervalli regolari e uno strumento per farlo. Una volta imparato a usare lo strumento dovremmo essere a posto, no?

Il file .plist

Per prima cosa dobbiamo scrivere un file con estensione .plist. Questo file conterrà le informazioni da dare a Launchd, per esempio qual è lo script che vogliamo eseguire e quanto spesso. Il nome di questo file di solito somiglia a un URL web scritto al contrario. Il nome del mio somiglia a it.nomeHost.smartBackup.plist; io non so se questa cosa sia una regola da seguire assolutamente, immagino di no, ma ho visto che tutti utilizzano questo metodo dunque immagino ci sia un motivo, fosse anche solo il sentirsi fighi per chiamare i files come gli sviluppatori veri. Vi incollo il file che ho utilizzato io che poi potete copiare e modificare a vostro piacimento (dopo lo commenteremo assieme).

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

<dict>
<!-- Contains a unique string that identifies your daemon to launched. This key is required. -->
<key>Label</key>
<string>it.hostname.smartBackup</string>
<!-- Contains the arguments [to exec()] used to launch your daemon. This key is required.  -->
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/username/bin/smartBackup.sh</string>
</array>
<!-- This optional key specifies the user to run the job as. This key is only applicable when launchd is running as root. -->
<!-- <key>UserName</key>
<string>username</string> -->
<!-- When to run -->
<!-- <key>StartInterval</key>
<integer>43200</integer> -->
<key>StartCalendarInterval</key>

<dict>
<key>Minute</key>
<integer>05</integer>
<key>Hour</key>
<integer>20</integer>
</dict>
</dict>
</plist>

Secondo me questo linguaggio somiglia molto all’XML se proprio non è lui (non conosco l’XML dunque non mi azzardo a dire che non sia un qualcosa di strano che ci somiglia molto). Dunque possiamo dire che se conoscete l’XML siete avvantaggiati, se non lo conoscete ma decidete di leggere queste poche righe di codice vedrete che non è così difficile capire dove stiamo andando a parare.

Ora commentiamo le diverse sezioni del file.

Dopo un po’ di header che lasciamo perdere c’è la label dove possiamo scrivere il nome del nostro servizio. Dopodiché dobbiamo inserire il percorso dove Launchd deve andarsi a prendere lo script da eseguire. Usiamo il percorso assoluto, dopo vedremo il perché.

Dopo aver scritto il cosa è il momento di scrivere il quando. Nella sezione StartCalendarInterval possiamo inserire l’ora e il minuto in cui vogliamo che ogni giorno sia eseguito il nostro script. Per altre opzioni vedere le varie guide reperibili online. Come per esempio QUESTA.

Fatto tutto ciò salviamo il nostro file e chiudiamo l’editor. Il più è fatto.

Far eseguire le azioni

Perché il sistema operativo esegua queste nostre istruzioni dobbiamo copiare questo file .plist in una specifica cartella. In realtà le cartelle sono due e sono:

$HOME/Library/LaunchAgents/

oppure

/Library/LaunchAgents

questo perché possiamo decidere se eseguire l’azione solo quando è loggato il nostro utente oppure se eseguirlo per tutti gli utenti del sistema.

A questo punto basterà un reboot del sistema per avere il nostro servizio attivo! Buon divertimento e lasciatemi nei commenti l’azione che avete automatizzato usando questa mia guida perché le possibilità di utilizzo di questo servizio hanno i limiti solamente della nostra fantasia!

Perché Launchd e non cron?

Un’ultima nota: all’inizio dell’articolo ho detto che anche OSX ci mette a disposizione cron, dunque perché utilizzare qualcosa d’altro? Me lo sono chiesto anche io e cercando in rete pare che Launchd sia progettato per eseguire le azioni programmate anche quando il Mac è in stato di sleep (non so se corrisponda allo stato di stop, ma credo di no) e inoltre se il computer è spento al momento di eseguire l’azione questa viene eseguita nonappena il computer viene acceso. Detto ciò vedete voi se utilizzare Launchd che funziona solamente sui sistemi Apple oppure se imparare a usare cron in modo da fare il lavoro una volta sola per quando utilizzerete Linux (sempre che già non lo facciate).

Annunci
Standard
Linux e Android, OS X e iOS, Progetti e iniziative

Usare uno script bash per un backup intelligente

Sotto Natale di fanno acquisti. Io ho acquistato un nuovo disco esterno per fare il backup dei miei dati (se ci tenete a saperlo un WD MyBook da 2Tb, bellissimo anche a vedersi). Su questo disco faccio il backup sia del mio portatile (che è un MacBookPro, dunque gestisco il backup con TimeMachine, una delle invenzioni più riuscite di tutta la storia di Apple), sia del disco esterno che utilizzo come magazzino per i dati ad accesso infrequente (documenti da tenere nell’archivio virtuale, ma che probabilmente non serviranno mai più), oppure i file originali delle fotografie che scatto (che essendo file RAW occupano un sacco di spazio); insomma, uso il mio disco esterno come una persona normale ed è bene che questo disco abbia un backup.

Per eseguire il backup di questo disco ho scritto uno script bash (che prende più che ampiamente spunto da questo) da far girare all’occorrenza (eventualmente in automatico) in modo che effettui una sincronizzazione dei dati tra i due dischi.

Per farlo funzionare a dovere bisognerà scrivere i percorsi dei dischi di cui effettuare il backup e di quello che ospiterà il backup (per esempio, su un sistema OSX di solito è /Volumes/nomeDelDisco/), inserire la lista delle cartelle presenti sul disco di cui effettuare il backup (per esempio, Musica, Immagini, ecc…) e dopodiché basterà lanciare lo script.

Per dare il permesso di esecuzione allo script digitate il comando:

chmod u+rx nomeScript.sh

dopodiché potrete lanciarlo così:

./nomeScript.sh

Lo script gestisce anche il restore dei dati basterà lanciarlo dandogli come argomento la parola restore. Esempio:

./nomeScript.sh restore

Ovviamente inserendo i percorsi corretti funziona non solo per backuppare dischi esterni, ma per fare il backup di qualsiasi directory presente sul vostro computer!

Ah, un’ultima cosa, forse la più importante: lo script potete scaricarlo da QUA. Una sola raccomandazione: lo script sincronizza le cartelle dunque se cancellate qualcosa per errore sul disco “sorgente” verrà eliminato anche sul disco di backup. Eliminare questo comportamento non è affatto complicato, ma vi invito a leggere il manuale di rsync (che è il programma su cui si basa lo script per fare il suo lavoro) per scoprire come fare modificando (di pochissimo) il codice dello script.

Buon divertimento e non dimenticate di fare il backup dei vostri dati! Sempre!

Standard
Linux e Android, Progetti e iniziative

Linux Day 2013 – i video

Poco piu` di un mese fa si e` svolto il Linux Day in tutta Italia. Io ho partecipato all’organizzazione dell’edizione Torinese della manifestazione e ho anche tenuto un talk.

I talk della giornata sono stati registrati e ora sono disponibili su Youtube presso il canale dell’organizzazione torinese.

Incorporo qua sotto il video del mio talk dal titolo Il terminale per tutti.

Buona visione!

Standard
Linux e Android

#! Crunchbang Linux – Recensione

crunchbang-logo300Oggi non voglio recensire l’ennesima derivata ufficiale oppure l’ennesima release di Ubuntu, come oramai da troppo tempo stavo facendo. Oggi ricominciamo a scoprire cose nuove parlando di una distribuzione totalmente differente e che mi piace davvero molto!

Questa distribuzione di chiama Crunchbang Linux e i più smaliziati tra di voi capiranno molte cose sulla “vocazione” di questa distribuzione osservandone il logo qui di fianco.

In questo articolo parlerò della release 11 “Waldorf”.

Una distribuzione senza fronzoli

Questa distribuzione è fatta per dare nuova vita a computer datati, visto che, una volta avviata, occupa solamente 80Mb di RAM e come requisito minimo ne richiede 256Mb, requisito consigliato 512Mb. Quindi possiamo divertirci a usarla anche su computer non proprio nuovissimi. Però si può sicuramente installare anche su macchine più recenti ottenendo grandissime prestazioni e un’ambiente dove è piacevole lavorare.

Crunchbang è basata sulla release stabile di Debian con cui condivide tutti i repository tranne uno, che serve agli sviluppatori di Crunchbang per tenere aggiornati certi pacchetti che nel ramo stabile di Debian diventano vecchiotti abbastanza in fretta (per esempio: il kernel).

Parlavamo del logo: quel simbolo è il cosiddetto shebang, il simbolo da anteporre alla direttiva di interpretazione degli script bash. Non avete capito quest’ultima cosa? Non importa.

In questa distribuzione tutto è uno script: al primo avvio dopo l’installazione si avvia uno script che permette di aggiornate totalmente il sistema e che chiede di installare il supporto per la stampa, per esempio.

Installazione facile facile

L’installazione guidata è molto facile, anche perché l’installer dovrebbe essere quello di LinuxMint che a sua volta deriva da quello di Ubuntu, due distribuzioni che hanno fatto della semplicità di utilizzo per l’utente non esperto la loro bandiera.

Addirittura nella classica scelta di partizionamento del disco “Guidato – usa l’intero disco” (chi ha fatto almeno una volta un’installazione di Ubuntu sa di cosa sto parlando, per tutti gli altri: non importa) c’è la possibilità di scegliere di creare una partizione separata per le home directories degli utenti. E questa cosa mi piace parecchio!

Una nota negativa? L’immagine di installazione non sta su un CD-ROM, c’è bisogno di un DVD.

Al primo avvio

Al primo avvio, dopo lo script post-installazione, ci troveremo di fronte a un desktop nero con delle informazioni in alto a destra. Ci sarà anche una barra in alto con l’orologio, la gestione della connettività e poco altro. Il windows manager che stiamo utilizzando è il famosissimo Openbox, leggero e senza fronzoli. Sulla destra è presente la Conky, uno strumento che, se ben configurato, fornisce un sacco di informazioni utili sul sistema, addirittura c’è chi la utilizza per ascoltare la musica! In questo caso ci fornisce il carico della CPU, la RAM utilizzata al momento e poi qualche utile scorciatoia da tastiera.

Cliccando il tasto destro del nostro mouse in un qualsiasi punto del desktop apparirà il menu, quello di Openbox. C’è tutto ciò di cui abbiamo bisogno, Crunchbang viene già installata con i codec audio e video per i maggiori formati e con player è presente VLC; cosa volete di più?

Nel menu sono presenti inoltre alcune voci che si chiamano Install <nomeProgramma>. Queste voci corrispondono a programmi non installati, ma che l’utente potrebbe voler installare e per cui gli sviluppatori di Crunchbang hanno messo a punto uno script di installazione che verrà richiamato dalla voce nel menu. Geniale, vero? Questo aiuta i nuovi utenti a non trovarsi spaesati di fronte a una distribuzione minimale e votata pesantemente all’hacking.

Una distribuzione non per tutti

Io sto facendo un’esperimento: aspettando un nuovo giocattolino (e tentando di aggiustarne un altro), l’ho installata sul computer di una persona che se riesce a usarla lui, allora la possono usare tutti, ma secondo me non è una distribuzione adatta a tutti quanti.

Sono pochi i tools grafici (anche se qualcuno viene fornito, cercate nei menu!) e, anche se all’inizio gli sviluppatori ci sono venuti incontro includendo molto software e gli script per installare quelli più famosi (per esempio, Libre Office o Google Chrome) però se si vuole andare oltre bisogna utilizzare il vecchio gestore di pacchetti Synaptic oppure il terminale.

In ogni caso è una distribuzione ben fatta, molto leggera e credo proprio che la adotterò come la mia distribuzione, lasciando Ubuntu e derivate che mi erano venute un po’ a noia, sinceramente (evito i motivi perché la situazione di Ubuntu non è argomento di questo articolo, ma ce ne sarebbe da dire!).

Dove trovarla

Per qualunque cosa vogliate sappiare in più su Crunchbang e per scaricare l’immagine fate riferimento al sito ufficiale, crunchbang.org.

Standard
Linux e Android, OS X e iOS, Progetti e iniziative

dat2LaTeX – Creare tabelle LaTeX da file di dati in modo automatico

23/6/2013: script e articolo aggiornati!

Ultimamente sto scrivendo moltissime relazioni per l’universita` (i cui impegni mi tengono, purtroppo, un po’ lontano dal blog) e in ogni relazione di argomento scientifico che si rispetti si avra` a che fare con dei dati e delle tabelle da inserire nelle relazioni.

Quando le tabelle sono molte i dati da inserire nelle stesse pure, a un certo punto viene a noia scrivere centinaia, se non migliaia di “&”, di “\hline”, eccetera.

Ora, visto che io ho l’abitudine di salvare i miei dati in files di testo semplice (non li processo mai con fogli di calcolo, a meno di non dover fare analisi piu` che banali) per darli in pasto a qualche programma C++ scritto ad-hoc, ho cercato dei modi “intelligenti” per convertire questi files in tabelle .tex. Ne ho trovati due: il primo l’ho escluso visto che prevede il passaggio da Excel (oltre a non amare moltissimo i prodotti Microsoft mi sembra uno spreco di risorse e di tempo passare attraverso Excel per convertire un file di testo in un altro file di testo) l’altro non sono riuscito a farlo funzionare (almeno non subito e stavo facendo questa cosa di sera, con tutte le buone intenzioni di andarmene a dormire il piu` presto possibile).

Allora mi sono armato del mio fedele Emacs su OSX e ho scritto uno script bash per convertire il file dei dati in un file sorgente .tex da includere nella mia relazione.

E` nato quindi dat2LaTeX e ho deciso di condividerlo con voi perche`, magari, anche qualcun altro puo` aver bisogno di fare questa cosa in modo semplice e veloce senza impazzire.

Lo script prende 5 argomenti:

  1. numero di colonne della tabella
  2. stile delle righe orizzontali (presenti oppure no)
  3. stile delle righe verticali
  4. file di dati da leggere
  5. file .tex da scrivere

Un esempio di generazione di tabella con due colonne con righe orizzontali tra le righe e righe verticali tra le colonne:

dat2LateX.sh 2 '\hline' '{|c|c|}' fileDati.dat fileTex.tex

ora un esempio per una tabella con due colonne senza righe orizzontali:

dat2LateX.sh 2 '' '{|c|c|}' fileDati.dat fileTex.tex

giusto per farvi notare la necessita` di inserire i due singoli apici per dare un argomento vuoto al posto del comando tex \hline. Insomma, non esistono (per ora) controlli sugli argomenti passati: bisogna sempre passarne 5 e devono essere “acconci” a seconda del risultato che si vuole ottenere.

Il file .tex ottenuto cosi` si deve inserire in un documento LateX con questa sintassi:

\begin{table}
\input{fileTex.tex}
\end{table}

Detto cio`, potete scaricare lo script da QUA e dargli i permessi di esecuzione con il comado:

chmod u+rx dat2LateX.sh

Lo script funziona sia su Linux che su OSX.

Aggiornamento del 23/6/2013

Ora lo script si è arricchito di qualche controllo sulle opzioni e di un help. Il link per il download è sempre valido, così come le piccole istruzioni per includere il file .tex nel documento principale. La guida per lo script, però è cambiata e al posto di riscriverla, vi inserisco uno screenshot dell’help che ho inserito.

usage

Standard