<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Unix on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/unix/</link>
    <description>Recent content in Unix on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Wed, 03 May 2023 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/unix/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Come controllare lo spazio occupato sul Mac con il Terminale</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2023/05/03/come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/</link>
      <pubDate>Wed, 03 May 2023 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2023/05/03/come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/</guid>
      <description>&lt;p&gt;Il Terminale di macOS è l&amp;rsquo;applicazione installata di default su &lt;a href=&#34;https://setapp.com/how-to/full-list-of-all-macos-versions&#34;&gt;tutte le versioni di macOS&lt;/a&gt; per accedere alla &lt;a href=&#34;https://melabit.com/it/le-parole-per-dirlo/&#34;&gt;shell&lt;/a&gt;, l&amp;rsquo;interfaccia a linea di comando del sistema operativo. La maggior parte dei comandi della shell è identica in tutti i sistema operativi basati su UNIX, che oggi sono principalmente Linux e macOS. Una cosa che ci permette di usare gli stessi comandi su questi due sistemi operativi, così come sulle &lt;a href=&#34;https://www.freebsd.org/&#34;&gt;varie&lt;/a&gt; &lt;a href=&#34;https://www.netbsd.org/&#34;&gt;incarnazioni&lt;/a&gt; &lt;a href=&#34;https://www.openbsd.org/&#34;&gt;disponibili&lt;/a&gt; di BSD Unix e perfino su Windows, almeno dopo aver installato il &lt;a href=&#34;https://learn.microsoft.com/en-us/windows/wsl/about&#34;&gt;Windows Subsystem for Linux&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Del Terminale di macOS ho scritto parecchie volte su questo blog. Riguardando i vecchi post ho ritrovato  questa &lt;a href=&#34;https://melabit.com/it/2019/01/30/script-per-tutti-i-giorni-ricapitoliamo/&#34;&gt;introduzione all&amp;rsquo;uso del Terminale&lt;/a&gt; e ai suoi comandi principali che mi pare ancora attuale, a parte il fatto che nel frattempo la &lt;a href=&#34;https://melabit.com/it/le-parole-per-dirlo/&#34;&gt;shell&lt;/a&gt; di default di macOS è diventata &lt;code&gt;zsh&lt;/code&gt; al posto di &lt;code&gt;bash&lt;/code&gt;. Ma questo cambiamento dovrebbe essere quasi trasparente per l&amp;rsquo;utente finale, dato che &lt;code&gt;zsh&lt;/code&gt; è una versione estesa e compatibile quasi al 100% di &lt;code&gt;bash&lt;/code&gt; (le principali differenze fra le due shell sono &lt;a href=&#34;https://www.fosslinux.com/58416/bash-vs-zsh-differences.htm&#34;&gt;elencate qui&lt;/a&gt; e, in termini più tecnici, &lt;a href=&#34;https://apple.stackexchange.com/questions/361870/what-are-the-practical-differences-between-bash-and-zsh&#34;&gt;anche qui&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Oggi però voglio andare oltre i soliti, un po&amp;rsquo; noiosi, comandi di base e proporre un comando poco conosciuto ma che può fare comodo nella gestione giornaliera del Mac.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Una premessa&lt;/strong&gt;: tanti utenti del Mac sono spaventati dal Terminale, magari vorrebbero usarlo ma temono di far danni. Non è il caso di questo comando, che al massimo può produrre delle lunghe liste di file, ma non può in nessun modo danneggiare il sistema (in ogni caso, per danneggiare un sistema operativo come macOS bisogna usare il Terminale in modo davvero scriteriato).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Altra premessa&lt;/strong&gt;: per non rendere l&amp;rsquo;esposizione troppo pesante suppongo che chi legge sappia cos&amp;rsquo;è una &lt;code&gt;shell&lt;/code&gt; o qual è la cartella &lt;code&gt;Home&lt;/code&gt; (o &lt;code&gt;Inizio&lt;/code&gt;) di un utente. Chi ha bisogno di un ripasso, può &lt;a href=&#34;https://melabit.com/it/le-parole-per-dirlo/&#34;&gt;trovare qui&lt;/a&gt; una breve spiegazione dei concetti principali relativi a macOS e al Terminale.&lt;/p&gt;&#xA;&lt;h4 id=&#34;quanto-spazio-occupano-i-miei-file&#34;&gt;Quanto spazio occupano i miei file?&lt;/h4&gt;&#xA;&lt;p&gt;Questa è una preoccupazione ricorrente in chi ha un disco di capacità ridotta (i 256 GB di spazio sui modelli base di MacBook Air/Pro e Mini sono davvero troppo pochi), oppure un disco grande ma ormai pieno di file.&lt;/p&gt;&#xA;&lt;p&gt;Il comando base per sapere quanto spazio occupano i file presenti sul Mac è &lt;code&gt;du&lt;/code&gt; (ovvero &lt;em&gt;disk usage&lt;/em&gt;), che riporta la dimensione (in blocchi) della cartella corrente e di tutte le cartelle contenute al suo interno.&lt;/p&gt;&#xA;&lt;p&gt;Ad esempio, se voglio vedere quanto spazio occupano i sorgenti in Markdown di tutti i post di questo blog, mi sposto con &lt;code&gt;cd&lt;/code&gt; nella cartella &lt;code&gt;~/Documents/Articoli\ Mac/Blog/posts&lt;/code&gt; del mio Mac (&lt;code&gt;zsh&lt;/code&gt; riporta il nome della cartella corrente immediatamente prima del simbolo del prompt &lt;code&gt;%&lt;/code&gt;) ed eseguo &lt;code&gt;du&lt;/code&gt;, ottenendo&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;dove il &lt;code&gt;.&lt;/code&gt; indica per convenzione la cartella corrente, che a sua volta contiene la cartella &lt;code&gt;TODO&lt;/code&gt; dove, come è facilmente immaginabile, conservo i post in lavorazione. La dimensione totale occupata dai miei post è di 7080 blocchi, di cui 160 blocchi sono utilizzati da TODO.&lt;/p&gt;&#xA;&lt;h4 id=&#34;comandi-e-interruttori&#34;&gt;Comandi e interruttori&lt;/h4&gt;&#xA;&lt;p&gt;Usare &lt;code&gt;du&lt;/code&gt; così com&amp;rsquo;è ha poco senso, perché la dimensione in blocchi può essere significativa per un esperto di hardware ma non è facilmente comprensibile per la maggior parte degli utenti, abituati a ragionare in termini di kilobyte, megabyte e gigabyte.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Meglio quindi aggiungere a &lt;code&gt;du&lt;/code&gt; lo switch &lt;code&gt;--si&lt;/code&gt;, con il quale &lt;code&gt;du&lt;/code&gt; riporta le dimensioni delle cartelle in kB, MB o GB, scegliendo l&amp;rsquo;unità migliore in base alle dimensioni di ciascuna cartella. Con &lt;code&gt;--si&lt;/code&gt;, 1 kB equivale a 1000 byte, 1 MB a 1000 kB e così via, proprio come fa il Finder.  Se vogliamo che le dimensioni siano espresse utilizzando i tradizionali multipli di 1024 dobbiamo utilizzare lo switch &lt;code&gt;-h&lt;/code&gt; al posto di &lt;code&gt;--si&lt;/code&gt;, ma sul Mac non ha molto senso.&lt;/p&gt;&#xA;&lt;p&gt;Se eseguo il comando &lt;code&gt;du --si&lt;/code&gt; nella cartella &lt;code&gt;~/Documents/Articoli\ Mac/Blog/posts&lt;/code&gt; ora ottengo,&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-better-units.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;da cui si nota che i quasi 450 file Markdown contenuti in questa cartella occupano appena 3.6 MB e potrebbero stare tranquillamente in 3 floppy disk (eh sì, usare un formato testo per scrivere documenti è sempre molto efficiente).&lt;/p&gt;&#xA;&lt;div markdown=&#34;1&#34; style = &#34;border-style: solid; border-width: 0px 0px 0px 12px; border-color: #03a87c; background-color: #defef6; padding: 1em; color:black; font-size:100%;&#34;&gt;&#xA;I comandi del Terminale includono spesso uno o più _switch_, cioè delle opzioni che modificano il comportamento del comando per adattarlo alle necessità dell&#39;utente. Gli switch sono indicati da un trattino seguito da una lettera e, a volte, da un parametro che può essere un numero o una stringa. Ad esempio, il comando `ls -a` mostrerà anche i file nascosti, mentre il comando `shutdown -r now` riavvierà immediatamente il computer. &#xA;Nel caso in cui si debbano utilizzare più di uno switch, è possibile definirli singolarmente, come ad esempio in `ls -a -l`, oppure inserirli tutti insieme dopo il trattino, come in `ls -al`. &#xA;Gli switch più complessi possono essere indicati anche da due trattini seguiti da una stringa e dagli eventuali parametri, come lo switch `--si` appena visto.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Altri switch utili del comando &lt;code&gt;du&lt;/code&gt; sono:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;-a&lt;/code&gt;: calcola lo spazio occupato non solo dalle cartelle ma anche dai file contenuti al loro interno.&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-with-files.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;Ad esempio, se provo ad eseguire &lt;code&gt;du&lt;/code&gt; a partire dalla mia &lt;code&gt;Home&lt;/code&gt; ottengo una lista di più di 60.000 cartelle, ma se uso &lt;code&gt;du -a&lt;/code&gt; la lista cresce fino a comprendere quasi mezzo milione di file e cartelle (del comando collegato &lt;code&gt;wc&lt;/code&gt; &lt;a href=&#34;https://melabit.com/it/2016/07/05/duecento/&#34;&gt;ho già scritto&lt;/a&gt; un bel po&amp;rsquo; di tempo fa, qui serve a contare il numero di righe riportate da &lt;code&gt;du&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-home-basic.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;-d&lt;/code&gt; seguito da un numero: definisce il livello di visualizzazione delle cartelle tramite il numero associato allo switch. Ad esempio, &lt;code&gt;-d 1&lt;/code&gt; mostrerà  solo le cartelle di primo livello, cioè quelle contenute nella cartella di partenza, mentre &lt;code&gt;-d 2&lt;/code&gt; mostrerà anche le cartelle contenute all&amp;rsquo;interno delle cartelle di primo livello, e così via.&lt;/p&gt;&#xA;&lt;p&gt;Se provo ad eseguire &lt;code&gt;du -d 1&lt;/code&gt; nella mia &lt;code&gt;Home&lt;/code&gt; ottengo,&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-home-advanced.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;da cui si capisce immediatamente che le cartelle che occupano più spazio sono &lt;code&gt;Music&lt;/code&gt; e &lt;code&gt;Library&lt;/code&gt; (c&amp;rsquo;è da dire che la mia &lt;code&gt;Home&lt;/code&gt; è molto più grande, perché la maggior parte dei file si trova su un disco esterno collegato alla &lt;code&gt;Home&lt;/code&gt; &lt;a href=&#34;https://melabit.com/it/2020/08/05/ssd-o-dischi-meccanici-perche-non-tutti-e-due-prima-parte/&#34;&gt;tramite dei collegamenti simbolici&lt;/a&gt;, ma questa è un&amp;rsquo;altra storia). Se avessi bisogno di fare spazio sul disco saprei subito dove concentrarmi, invece di perdere tempo ad esaminare minuziosamente tutte le cartelle elencate di default da &lt;code&gt;du&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;-t&lt;/code&gt; seguito da un numero: definisce la dimensione minima che deve avere una cartella per essere visualizzata.  Non è comodissimo, perché la dimensione va specificata in byte, però permette di filtrare rapidamente le cartelle più grandi, come in questo caso in cui ho scelto di visualizzare solo le cartelle più grandi di 1 MB (ovvero 1000000 byte).&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-home-threshold.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;-I&lt;/code&gt; seguito dal percorso di una cartella fra virgolette: permette di escludere la cartella specificata dal conteggio dello spazio occupato. È possibile usare una espressione regolare per escludere più cartelle in un solo colpo.&lt;/p&gt;&#xA;&lt;p&gt;Ad esempio, &lt;code&gt;-I &amp;quot;Library&amp;quot;&lt;/code&gt;, esclude la sola cartella &lt;code&gt;Library&lt;/code&gt;, oppure &lt;code&gt;-I &amp;quot;D*&amp;quot;&lt;/code&gt; esclude tutte le cartelle che iniziano con il punto o infine, come è mostrato qui sotto, &lt;code&gt;-I &amp;quot;.[a-z]&amp;quot;&lt;/code&gt; che esclude dalla visualizzazione tutte le cartelle il cui nome inizia con il punto seguito da una lettera maiuscola o minuscola (sono le cosiddette cartelle nascoste che contengono i file di configurazione di certe applicazioni e che in genere non sono molto grandi).&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-home-exclude.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;-k&lt;/code&gt;, &lt;code&gt;-m&lt;/code&gt;, &lt;code&gt;-g&lt;/code&gt;: forzano &lt;code&gt;du&lt;/code&gt; a riportare tutte le dimensioni rispettivamente in kB, MB o GB. Analogamente ad &lt;code&gt;-h&lt;/code&gt;, le dimensioni sono espresse in multipli di 1024. Se sulla stessa riga di comando si inserisce più di uno switch &lt;em&gt;dimensionale&lt;/em&gt;, &lt;code&gt;-g&lt;/code&gt;, &lt;code&gt;-h&lt;/code&gt;, &lt;code&gt;-k&lt;/code&gt;, &lt;code&gt;-m&lt;/code&gt; e &lt;code&gt;--si&lt;/code&gt;, viene utilizzato solo l&amp;rsquo;ultimo specificato.&lt;/p&gt;&#xA;&lt;p&gt;Questi switch servono soprattutto quando si vogliono ordinare le directory in base alle dimensioni, inviando l&amp;rsquo;output di &lt;code&gt;du&lt;/code&gt; al comando &lt;code&gt;sort -n -r&lt;/code&gt;, come nell&amp;rsquo;esempio qui sotto (dato che con questi switch 1 GB corrisponde a 1024 MB, i valori riportati qui sotto sono leggermente diversi rispetto a quelli dell&amp;rsquo;immagine precedente che usa &lt;code&gt;--si&lt;/code&gt;, e quindi i multipli di 1000).&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-home-sort.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;ma-ne-vale-la-pena&#34;&gt;Ma ne vale la pena?&lt;/h4&gt;&#xA;&lt;p&gt;Ma perché usare &lt;code&gt;du&lt;/code&gt; quando abbiamo a disposizione  il Finder? Prima di tutto perché il Terminale è molto più efficiente, con il Finder possiamo esaminare una sola cartella alla volta, il Terminale invece ci permette di analizzare lo stato un gran numero di cartelle tutte insieme, spostandosi molto più velocemente fra una cartella e l&amp;rsquo;altra rispetto a quanto sia possibile fare con il Finder.&lt;/p&gt;&#xA;&lt;p&gt;Un altro vantaggio non da poco è la possibilità di salvare su un file l&amp;rsquo;output del comando &lt;code&gt;du&lt;/code&gt;, in modo da poterlo esaminare con calma in un editor di testo, o magari perché vogliamo tenere traccia dello stato delle cartelle nel corso del tempo. Ad esempio potrei salvare nel file &lt;code&gt;du.txt&lt;/code&gt; sul Desktop l&amp;rsquo;elenco completo delle cartelle contenute in &lt;code&gt;Home&lt;/code&gt;,&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/du-home-file.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;per poi esaminarlo con calma con TextMate o BBEdit, oppure direttamente nel Terminale a colpi di &lt;code&gt;awk&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt; e &lt;code&gt;sed&lt;/code&gt; e di espressioni regolari (ma questo richiederebbe almeno un articolo a sé stante).&lt;/p&gt;&#xA;&lt;p&gt;Infine, abbiamo appena scoperto che il Finder &lt;a href=&#34;https://eclecticlight.co/2023/04/17/the-finder-confuses-with-wildly-inaccurate-figures-for-available-space/&#34;&gt;non è molto affidabile&lt;/a&gt; quando si tratta di calcolare lo spazio occupato in un disco formattato in APFS, per cui meglio sentire un&amp;rsquo;altra campana. In questo caso specifico, il Finder mi dice che la mia &lt;code&gt;Home&lt;/code&gt; occupa 130.7 GB&lt;/p&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2023-05-03-come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale/finder-home-size.png&#34; alt=&#34;&#34;&gt;&lt;p&gt;mentre secondo &lt;code&gt;du&lt;/code&gt; sono solo 128 GB. Non è una grande differenza, però c&amp;rsquo;è da chiedersi chi ha ragione.&lt;/p&gt;&#xA;&lt;p&gt;Se queste considerazioni non bastano a convincervi, nel &lt;a href=&#34;https://melabit.com/it/2023/05/16/come-controllare-lo-spazio-occupato-sul-mac-con-il-terminale-gli-strumenti-grafici/&#34;&gt;prossimo post&lt;/a&gt; troverete delle soluzioni alternative utili a visualizzare rapidamente lo spazio occupato sul vostro disco. A presto!&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Inoltre, il numero di blocchi riportati da &lt;code&gt;du&lt;/code&gt; varia a seconda del sistema operativo e della configurazione del file system, rendendo ancora più difficile la comprensione della dimensione effettiva dei file.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Compleanno con permessi</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2016/12/18/compleanno-con-permessi/</link>
      <pubDate>Sun, 18 Dec 2016 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2016/12/18/compleanno-con-permessi/</guid>
      <description>&lt;p&gt;Oggi &lt;a href=&#34;https://melabit.wordpress.com/&#34;&gt;melabit&lt;/a&gt; compie tre anni. Per l&amp;rsquo;occasione ho chiesto all&amp;rsquo;amico Lux il permesso di ripubblicare un mio vecchio intervento sul suo (bellissimo) blog &lt;a href=&#34;http://web.archive.org/web/20120102191652/http://www.macworld.it/ping&#34;&gt;Ping&lt;/a&gt;, chiuso purtroppo con la cessazione della pubblicazione dell&amp;rsquo;edizione italiana di Macworld.&lt;/p&gt;&#xA;&lt;p&gt;Perché pubblicare di nuovo questo articolo dopo più di sei anni?&lt;/p&gt;&#xA;&lt;p&gt;Innanzi tutto perché quello che c&amp;rsquo;è scritto è ancora attuale e, come ha scritto a suo tempo Lux con il suo stile inimitabile, può essere utile per &amp;ldquo;&lt;em&gt;avvicinarsi agli incantesimi Unix che danno vita al mondo magico di Mac OS X&lt;/em&gt;&amp;rdquo;, una cosa a cui tengo sempre moltissimo. Magari oggi &lt;a href=&#34;https://melabit.wordpress.com/2015/04/28/automatizzare-il-mac-dal-terminale-ancora-launchd/&#34;&gt;proporrei di usare sul Mac&lt;/a&gt; &lt;code&gt;launchd&lt;/code&gt; al posto di &lt;code&gt;cron&lt;/code&gt;, anche se quest&amp;rsquo;ultimo rimane la soluzione più generica, valida su un qualunque sistema Unix.&lt;/p&gt;&#xA;&lt;p&gt;C&amp;rsquo;è poi un motivo più personale: proprio dopo questo intervento ho cominciato a pensare che tenere un blog non fosse un&amp;rsquo;idea proprio fuori dal mondo. Ci ho messo un po&amp;rsquo; (come sempre!) a realizzarla, ma dopo tre anni devo ammettere che è stata un&amp;rsquo;ottima decisione, le soddisfazioni non sono mancate.&lt;/p&gt;&#xA;&lt;h4 id=&#34;introduzione&#34;&gt;Introduzione&lt;/h4&gt;&#xA;&lt;p&gt;L&amp;rsquo;articolo rispondeva all&amp;rsquo;esigenza di un lettore di Ping di cambiare automaticamente i permessi di determinati tipi di file contenuti in una cartella del Mac. Cosa ci può essere di meglio del Terminale per fare queste cose?&lt;/p&gt;&#xA;&lt;p&gt;Ho lasciato praticamente inalterato il testo originale, limitandomi a correggere alcune imprecisioni e ad aggiungere qualche dettaglio qui e là.&lt;/p&gt;&#xA;&lt;h4 id=&#34;me-li-do-io-i-permessi&#34;&gt;Me li do io i permessi&lt;/h4&gt;&#xA;&lt;p&gt;&lt;strong&gt;Premessa #1&lt;/strong&gt;: il Terminale in Mac OS X si trova in &lt;code&gt;Applicazioni &amp;amp;#062; Utility&lt;/code&gt;. Una volta lanciato può essere configurato in molti modi (tramite le Preferenze) perdendo quell’aspetto un po&amp;rsquo; triste e troppo serioso che spaventa l’utente normale.&lt;/p&gt;&#xA;&lt;p&gt;Dopo l&amp;rsquo;avvio, il Terminale presenta il cosiddetto &lt;em&gt;prompt&lt;/em&gt;, che su OS X mostra tipicamente il nome del computer, la cartella dove ci si trova e il nome dell’utente. L’ultimo carattere del prompt è normalmente il &lt;code&gt;$&lt;/code&gt;. Nel Terminale i comandi vengono inseriti dopo il simbolo &lt;code&gt;$&lt;/code&gt; su quella che viene definita la &lt;em&gt;riga di comando&lt;/em&gt; e si eseguono premendo il tasto &lt;code&gt;Invio&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Il Terminale di OS X esegue di default la cosiddetta &lt;a href=&#34;https://tiswww.case.edu/php/chet/bash/bashref.html#Introduction&#34;&gt;&lt;em&gt;shell&lt;/em&gt; &lt;code&gt;bash&lt;/code&gt;&lt;/a&gt;, uno strumento potentissimo per interagire con il sistema operativo. La shell &lt;code&gt;bash&lt;/code&gt; può essere usata direttamente, scrivendo i comandi uno ad uno sulla riga di comando e leggendone il risultato direttamente nel Terminale.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://melabit.files.wordpress.com/2016/12/terminal.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2016/12/terminal.png&#34; alt=&#34;Il Terminale di OS X&#34; class=&#34;aligncenter&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Oppure si possono scrivere degli &lt;code&gt;script&lt;/code&gt;, piccoli programmi nel linguaggio di &lt;code&gt;bash&lt;/code&gt; nei quali si inseriscono in sequenza i comandi da far eseguire alla shell, che si dimostrano molto utili per automatizzare delle operazioni che eseguiamo ripetutamente sul Mac.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Premessa #2&lt;/strong&gt;: perché usare i comandi di &lt;code&gt;bash&lt;/code&gt; invece di Automator o di AppleScript? Beh, innanzitutto perché &lt;code&gt;bash&lt;/code&gt; è multipiattaforma e quindi funziona su Linux e, volendo, anche su Windows. E poi semplicemente perché &lt;code&gt;bash&lt;/code&gt; mi piace!&lt;/p&gt;&#xA;&lt;p&gt;Lanciamo quindi il Terminale (magari configurandolo prima, io consiglio almeno di aumentare le dimensioni della finestra a circa 100×40 per stare comodi e di scegliere un tema grafico più accattivante di quello bianco e un po&amp;rsquo; spento di default) e iniziamo a lavorare.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://melabit.files.wordpress.com/2016/12/bash_profiles.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2016/12/bash_profiles.png&#34; alt=&#34;Configurazione di bash&#34; class=&#34;aligncenter&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Creiamo innanzi tutto una cartella &lt;code&gt;~/bin&lt;/code&gt;, dove il carattere &lt;code&gt;~&lt;/code&gt; (tilde, ALT+5) indica per convenzione sui sistemi basati su Unix la cartella &lt;code&gt;Inizio&lt;/code&gt; (detta anche &lt;code&gt;Home&lt;/code&gt;) dell’utente che sta usando il computer in questo momento. Per farlo da Terminale, digitiamo (ATTENZIONE, come già detto &lt;code&gt;$&lt;/code&gt; indica solo l’ultimo carattere del prompt e &lt;strong&gt;NON&lt;/strong&gt; va mai inserito nei comandi seguenti):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ chflags hidden bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il primo comando serve per essere sicuri di partire dalla &lt;code&gt;Home&lt;/code&gt;, il secondo crea una nuova cartella &lt;code&gt;bin&lt;/code&gt; nella &lt;code&gt;Home&lt;/code&gt;, il terzo la nasconde al Finder e l’ultimo comando ci fa spostare nella cartella &lt;code&gt;bin&lt;/code&gt; appena creata.&lt;/p&gt;&#xA;&lt;p&gt;In teoria siamo liberi di salvare i nostri comandi &lt;code&gt;bash&lt;/code&gt; in una qualunque cartella del Mac e possiamo anche usarne una già esistente. Ma usare la cartella &lt;code&gt;bin&lt;/code&gt; nella nostra &lt;code&gt;Home&lt;/code&gt; rispetta le convenzioni dei sistemi Unix e mi sembra preferibile.&lt;/p&gt;&#xA;&lt;p&gt;A questo punto usiamo &lt;code&gt;nano&lt;/code&gt; (un editor testuale molto semplice installato di default sul Mac) per editare lo &lt;em&gt;script&lt;/em&gt; &lt;code&gt;bash&lt;/code&gt; &lt;code&gt;cambia_permessi&lt;/code&gt;, nel quale inseriremo i comandi veri e propri che ci servono per cambiare i permessi dei file contenuti nella cartella nella quale verrà eseguito lo script:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nano cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Non preoccupatevi per l’interfaccia un po&amp;rsquo; ostica di &lt;code&gt;nano&lt;/code&gt;, qui ci basta usare solo due comandi, &lt;code&gt;CTRL+O&lt;/code&gt; per salvare il file editato e &lt;code&gt;CTRL+X&lt;/code&gt; per uscire da nano. Dimenticavo: &lt;code&gt;CTRL+O&lt;/code&gt; significa premere contemporaneamente il tasto &lt;code&gt;CTRL&lt;/code&gt;, l’ultimo in basso a sinistra sulle tastiere Mac (nei portatili è a fianco di fn), e il tasto &lt;code&gt;O&lt;/code&gt;. Analogamente per &lt;code&gt;CTRL+X&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Torniamo al nostro file &lt;code&gt;cambia_permessi&lt;/code&gt;. A questo punto bisognerebbe copiare a mano le linee mostrate qui sotto. Ma OS X è furbo e il copia e incolla funziona anche nella finestra del Terminale, per cui è sufficiente selezionare tutte le linee mostrate qui sotto, copiarle e poi incollarle nella finestra del Terminale dove è attivo &lt;code&gt;nano&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/bin/bash&#xA;#&#xA;DIR=~/scansioni/&#xA;FILES=*&#xA;PERM=u+rw&#xA;#&#xA;if [ -d $DIR ]; then&#xA;&#x9;cd $DIR&#xA;&#x9;chmod -R $PERM $FILES&#xA;&#x9;cd&#xA;fi&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Salviamo lo script premendo &lt;code&gt;CTRL+O&lt;/code&gt; ed usciamo da &lt;code&gt;nano&lt;/code&gt; con &lt;code&gt;CTRL+X&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cosa significano questi comandi? Il più importante è &lt;code&gt;chmod&lt;/code&gt;, che cambia i permessi di tutti i file contenuti nella cartella ``~/scansioni/` in modo che siano leggibili e scrivibili dall&amp;rsquo;utente attuale del Mac. Il resto è solo roba di contorno.&lt;/p&gt;&#xA;&lt;p&gt;Quello che è ancora più importante è che lo script è totalmente parametrico: basta cambiare i valori di &lt;code&gt;DIR&lt;/code&gt;, &lt;code&gt;FILES&lt;/code&gt; e &lt;code&gt;PERM&lt;/code&gt; per adattarlo alle proprie esigenze.&lt;/p&gt;&#xA;&lt;p&gt;Per esempio, se la cartella &lt;code&gt;~/scansioni/&lt;/code&gt; contenesse vari tipi di file e si volessero cambiare i permessi dei soli file &lt;code&gt;pdf&lt;/code&gt; lasciando gli altri file invariati, la riga &lt;code&gt;FILES=*&lt;/code&gt; diventerebbe &lt;code&gt;FILES=*.pdf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Non è finita. Controlliamo prima di tutto di avere veramente fatto tutto bene con il comando:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cat cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;che dovrebbe mostrare sullo schermo lo script appena inserito.&lt;/p&gt;&#xA;&lt;p&gt;Per semplificarci la vita, rendiamo lo script eseguibile con il comando:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ chmod u+x cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bisogna notare che con questo comando abbiamo reso eseguibile lo script solo per l’utente attuale del Mac. I motivi li tralascio per brevità, ma credetemi, è decisamente meglio fare così.&lt;/p&gt;&#xA;&lt;p&gt;Un ultimo passo necessario. In questo momento, per cambiare i permessi dei file nella cartella &lt;code&gt;~/scansioni/&lt;/code&gt; bisogna eseguire a mano il comando dal Terminale:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ~/bin/cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(anche se, per come è configurato di default OS X, usare soltanto &lt;code&gt;$ cambia_permessi&lt;/code&gt;, senza scrivere esplicitamente il percorso dove è salvato lo script basta e avanza).&lt;/p&gt;&#xA;&lt;p&gt;Ciò è sicuramente molto più comodo di cambiare uno ad uno i permessi dei file, ma si può fare di meglio.&lt;/p&gt;&#xA;&lt;p&gt;Qui entra in gioco &lt;code&gt;cron&lt;/code&gt;, uno strumento che esegue dei comandi stabiliti dall’utente a intervalli di tempo predefiniti. Sembra una cosa un po&amp;rsquo; cretina, ma in realtà permette di far fare al computer un mare di cose automaticamente. Purtoppo la sintassi di cron è orrenda. E questo post sta diventando troppo lungo.&lt;/p&gt;&#xA;&lt;p&gt;Cercherò di sintetizzare ma se qualcuno è interessato posso scrivere qualcosa in proposito. (Nel frattempo l&amp;rsquo;ho fatto, chi fosse interessato può leggere questo &lt;a href=&#34;https://melabit.wordpress.com/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/&#34;&gt;articolo dettagliato su cron&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Diciamo che vogliamo che ogni cinque minuti lo script &lt;code&gt;cambia_permessi&lt;/code&gt; venga eseguito automaticamente. Dal solito Terminale dobbiamo allora eseguire i comandi:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ export EDITOR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/bin/nano&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ crontab -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La prima riga serve ad evitare di usare l’editor preimpostato, &lt;code&gt;vi&lt;/code&gt;, vn vero reperto archeologico che sarebbe bene dimenticare una volta per tutte. Dovrebbe invece aprirsi il solito &lt;code&gt;nano&lt;/code&gt;, in cui dobbiamo incollare &lt;strong&gt;esattamente&lt;/strong&gt; la riga seguente:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/5 * * * * ~/bin/cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(prima e dopo ciascun asterisco è presente una tabulazione), eventualmente aggiungendola in coda ai comandi già presenti.&lt;/p&gt;&#xA;&lt;p&gt;Salviamo con &lt;code&gt;CTRL+O&lt;/code&gt; e usciamo da &lt;code&gt;crontab&lt;/code&gt; con &lt;code&gt;CTRL+X&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ovviamente se vogliamo che lo script venga eseguito più o meno frequentemente, basta cambiare il valore &lt;code&gt;*/5&lt;/code&gt; in, diciamo, &lt;code&gt;*/2&lt;/code&gt; o &lt;code&gt;*/15&lt;/code&gt; (per eseguire lo script ogni 2 o 15 minuti). Per casi più complicati &lt;a href=&#34;https://melabit.wordpress.com/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/&#34;&gt;basta leggere qui&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Abbiamo finito. Sembra complicato, ma credetemi, è molto più lungo da leggere (e da scrivere!) che da mettere in pratica.&lt;/p&gt;&#xA;&lt;h4 id=&#34;nota-finale&#34;&gt;Nota finale&lt;/h4&gt;&#xA;&lt;p&gt;Per chi ha paura del Terminale e soprattutto di &lt;code&gt;cron&lt;/code&gt;, un programma potente ma, bisogna ammetterlo, ben poco &lt;em&gt;user-friendly&lt;/em&gt;, ecco una soluzione aggiuntiva, farina di Lux.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Aggiungo solo una piccola nota per gli inesperti di Terminale che si scontrano con &lt;code&gt;cron&lt;/code&gt; (e, su Snow Leopard, con &lt;code&gt;launchd&lt;/code&gt;). Una scorciatoia artigianale consiste nel definire un evento ricorrente dentro iCal e, nelle informazioni relative, stabilire che in occasione dell’evento va eseguito uno script.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Molto pratica se si ha bisogno di ripetere uno &lt;em&gt;script&lt;/em&gt; una o due volte al giorno al massimo, in tutti gli altri casi temo che finirebbe per riempire all&amp;rsquo;inverosimile il proprio Calendario, con conseguenze che francamente mi sfuggono.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Un anno, cento post</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/12/18/un-anno-cento-post/</link>
      <pubDate>Thu, 18 Dec 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/12/18/un-anno-cento-post/</guid>
      <description>&lt;p&gt;Questo blog spegne oggi la sua prima candelina virtuale con il centesimo post. Una coincidenza non casuale ma niente affatto pianificata.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Un anno fa non avrei mai potuto pensare di riuscire a scrivere tanto. È stata una bella fatica, ma allo stesso tempo una sfida divertente. Che ha messo a dura, durissima, prova la mia capacità di spiegare qualcosa in modo comprensibile. Spero qualche volta di esserci riuscito.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;In effetti qualche giorno fa mi sono accorto di essere arrivato quasi a cento e ho anticipato la pubblicazione di un paio di articoli per far coincidere le due date.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Automatizzare il Mac dal Terminale - Una soluzione targata Apple</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/12/11/automatizzare-il-mac-dal-terminale-una-soluzione-targata-apple/</link>
      <pubDate>Thu, 11 Dec 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/12/11/automatizzare-il-mac-dal-terminale-una-soluzione-targata-apple/</guid>
      <description>&lt;p&gt;Dopo i programmi di derivazione Unix, &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;&lt;code&gt;at&lt;/code&gt;&lt;/a&gt; e &lt;a href=&#34;https://melabit.wordpress.com/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/&#34;&gt;&lt;code&gt;cron&lt;/code&gt;&lt;/a&gt;, è la volta di parlare di &lt;a href=&#34;http://launchd.info&#34;&gt;&lt;code&gt;launchd&lt;/code&gt;&lt;/a&gt;, una soluzione sviluppata dalla Apple per OS X.&lt;/p&gt;&#xA;&lt;h4 id=&#34;launchd&#34;&gt;Launchd&lt;/h4&gt;&#xA;&lt;p&gt;Launchd è il programma che, a partire dalla versione 10.4 (Tiger) di OS X, esegue tutti &lt;a href=&#34;http://en.wikipedia.org/wiki/Launchd&#34;&gt;i processi di avvio del sistema operativo&lt;/a&gt; e che, come se non bastasse, può anche svolgere i compiti eseguiti da cron.&lt;/p&gt;&#xA;&lt;p&gt;Launchd è stato sviluppato dalla Apple e, dopo qualche incomprensione, è stato rilasciato sotto la licenza open source Apache, con l&amp;rsquo;intento di promuoverne l&amp;rsquo;adozione anche sotto &lt;a href=&#34;https://github.com/freebsd/openlaunchd&#34;&gt;Linux e BSD&lt;/a&gt;.&#xA;Finora però &lt;a href=&#34;http://lwn.net/Articles/202779/&#34;&gt;l&amp;rsquo;accoglienza al di fuori di OS X&lt;/a&gt; è stata tiepida, se non peggio, e quindi al momento launchd rimane confinato al solo Mac.&lt;/p&gt;&#xA;&lt;p&gt;La cosa non mi stupisce.&lt;/p&gt;&#xA;&lt;p&gt;Al di là degli &lt;a href=&#34;http://www.reddit.com/r/debian/comments/1vm9ng/if_systemd_for_linux_why_not_launchd_for_kfreebsd/&#34;&gt;aspetti tecnici&lt;/a&gt; relativi al porting su altre piattaforme e focalizzando l&amp;rsquo;attenzione solo sull&amp;rsquo;utilizzo di launchd al posto di cron, sono perfettamente d&amp;rsquo;accordo con quanto è stato scritto tempo fa su &lt;a href=&#34;http://lowendmac.com&#34;&gt;Low End Mac&lt;/a&gt;, con il titolo significativo &lt;a href=&#34;http://lowendmac.com/2010/apples-launchd-is-anti-unix/&#34;&gt;Apple’s launchd Is Anti-Unix&lt;/a&gt; (&lt;em&gt;Launchd di Apple è anti-Unix&lt;/em&gt;).&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;One of the great things about Unix-like systems is that most of your skills, programs, dot files, and highly polished shell scripts are portable. I brought them with me to OS X after dragging them through a dozen or so Linux distributions…&lt;br&gt;&#xA;Consequently, I was distressed when launchd emerged from the dark side of One Infinite Loop…&lt;br&gt;&#xA;Merging periodically run jobs into the main system process doesn’t make sense. Replacing a simple /etc/crontab text file with multiple, awkwardly named XML plist files scattered among no less than four different directories is taking two big steps toward complexity.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Credo sia abbastanza chiaro anche così, ma lo traduco qui sotto perché ne condivido ogni parola.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Una delle cose migliori dei sistemi Unix è che la maggior parte delle competenze, dei programmi sviluppati, dei file di configurazione [detti &amp;ldquo;dot file&amp;rdquo; perché il nome di questi file inizia in genere con un punto] e degli &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;script di shell&lt;/a&gt; sono portatili [su piattaforme differenti]. Io me li sono portati dietro su OS X dopo averli fatti transitare per una dozzina di distribuzioni diverse di Linux&amp;hellip;&lt;br&gt;&#xA;Di conseguenza mi preoccupa vedere launchd emergere dalla faccia oscura di &lt;a href=&#34;https://www.google.it/maps/place/Infinite&amp;#43;Loop,&amp;#43;Cupertino,&amp;#43;CA&amp;#43;95014,&amp;#43;Stati&amp;#43;Uniti/data=!4m2!3m1!1s0x808fb5b6e7b4b9fb:0x697a4332574f50d9?sa=X&amp;amp;ei=wb-GVK_rBYbAOazIgXA&amp;amp;ved=0CCcQ8gEwAA&#34;&gt;One Infinite Loop&lt;/a&gt; [l&amp;rsquo;indirizzo della Apple]&amp;hellip;&lt;br&gt;&#xA;Non ha senso mescolare processi eseguiti periodicamente con il processo principale [di inizializzazione] del sistema operativo. Sostituire un semplice file di testo /etc/crontab con una serie di file plist in formato XML con nomi assurdi e distribuiti su almeno quattro directory diverse è un bel passo avanti [sarebbero due, ma in italiano non viene bene] verso la complessità&amp;hellip;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h4 id=&#34;launchd-contro-cron&#34;&gt;Launchd contro cron&lt;/h4&gt;&#xA;&lt;p&gt;Se consideriamo il semplice obiettivo di rendere automatiche certe attività ripetitive sul Mac, la chiave del discorso sta proprio nell&amp;rsquo;ultima frase citata:&#xA;&amp;ldquo;&lt;em&gt;Sostituire un semplice file di testo /etc/crontab con una serie di file plist in formato XML con nomi assurdi, distribuiti su almeno quattro directory diverse è un bel passo avanti verso la complessità&lt;/em&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Launchd è molto più complicato di cron, inutilmente più complicato. Basta usarlo un po&amp;rsquo; per accorgersene.&lt;/p&gt;&#xA;&lt;p&gt;Proviamo a sostituire launchd a cron per eseguire lo script &lt;code&gt;~/bin/makeblog&lt;/code&gt; e &lt;a href=&#34;http://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;rigenerare automaticamente il blog&lt;/a&gt; &amp;ldquo;Pazzi per la mela&amp;rdquo; alle 2:00 di ogni notte.&lt;/p&gt;&#xA;&lt;p&gt;Con cron basta solo aggiungere &lt;a href=&#34;https://melabit.wordpress.com/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/&#34;&gt;al file crontab&lt;/a&gt; la riga seguente&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;02&#x9;*&#x9;*&#x9;*&#x9;~/bin/makeblog&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Se invece si vuole utilizzare launchd, bisogna creare un &lt;a href=&#34;http://en.wikipedia.org/wiki/Property_list&#34;&gt;file plist&lt;/a&gt; di configurazione in &lt;a href=&#34;http://en.wikipedia.org/wiki/XML&#34;&gt;linguaggio XML&lt;/a&gt; più o meno come questo,&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!DOCTYPE plist PUBLIC &amp;#34;-//Apple//DTD PLIST 1.0//EN&amp;#34; &amp;#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;plist&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;version=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;Label&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;it.pazziperlamela.makeblog&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;ProgramArguments&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;array&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;/Users/utente/bin/makeblog&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/array&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;StartCalendarInterval&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;dict&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;Hour&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;integer&amp;gt;&lt;/span&gt;02&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/integer&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;Minute&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;integer&amp;gt;&lt;/span&gt;00&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/integer&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;StandardOutPath&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;/Users/utente/Documenti/makeblog.log&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;StandardErrorPath&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;/Users/utente/Documenti/makeblog.err&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/string&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;key&amp;gt;&lt;/span&gt;RunAtLoad&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/key&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;false/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/dict&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/plist&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;salvarlo nella directory &lt;code&gt;~/Library/LaunchAgents/&lt;/code&gt; del proprio account (&lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;la &lt;code&gt;~&lt;/code&gt; indica la cartella &lt;code&gt;Inizio&lt;/code&gt;&lt;/a&gt; o &lt;code&gt;home&lt;/code&gt; dell&amp;rsquo;utente che sta usando il Mac) usando obbligatoriamente il nome &lt;code&gt;it.pazziperlamela.makeblog.plist&lt;/code&gt; (il nome del file deve essere uguale a quello senza estensione utilizzato alla riga 6 del file plist), e infine eseguirlo una prima volta dal Terminale con il comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ launchctl load it.pazziperlamela.makeblog.plist&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Per fortuna ai successivi riavvii ci pensa il sistema operativo ad eseguire periodicamente lo script.&lt;/p&gt;&#xA;&lt;h4 id=&#34;un-brevissimo-tutorial&#34;&gt;Un brevissimo tutorial&lt;/h4&gt;&#xA;&lt;p&gt;Può essere utile descrivere brevemente le informazioni essenziali da inserire nel file plist di configurazione, in modo che il processo automatico gestito da launchd funzioni correttamente. Per ulteriori informazioni, consiglio la lettura di &lt;a href=&#34;http://launchd.info&#34;&gt;quest&amp;rsquo;ottimo tutorial&lt;/a&gt; e delle specifiche dettagliate &lt;a href=&#34;https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html&#34;&gt;del formato del file plist&lt;/a&gt; usato da launchd.&lt;/p&gt;&#xA;&lt;p&gt;Le prime tre righe del file specificano tipo e versione dei formati xml e plist utilizzati, e vanno copiate esattamente come sono scritte nell&amp;rsquo;esempio precedente.&lt;/p&gt;&#xA;&lt;p&gt;Il file plist deve contenere tre chiavi obbligatorie. La prima, &lt;code&gt;Label&lt;/code&gt; (riga 5), serve per specificare il nome del file plist stesso, senza estensione. Nel nostro caso il nome del file è &lt;code&gt;it.pazziperlamela.makeblog&lt;/code&gt; (riga 6).&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;La chiave &lt;code&gt;ProgramArguments&lt;/code&gt; (riga 8) serve invece per specificare il percorso e il nome dello script di shell da eseguire. Qui è &lt;code&gt;/Users/utente/bin/makeblog&lt;/code&gt;, dove al posto di &lt;code&gt;utente&lt;/code&gt; bisogna sostituire il nome breve del proprio account. Il modo più semplice per ottenere il proprio nome breve è eseguire da Terminale il comando &lt;code&gt;whoami&lt;/code&gt; (oppure &lt;code&gt;id -un&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;ultima chiave obbligatoria, &lt;code&gt;StartCalendarInterval&lt;/code&gt; (riga 13), definisce ora e minuto (oltre che eventualmente giorno della settimana, giorno e mese) in cui launchd deve eseguire lo script di shell. In alternativa si può usare la chiave &lt;code&gt;StartInterval&lt;/code&gt;, che lancia invece lo script ogni certo numero di secondi, a partire dalla prima esecuzione del processo tramite launchctl.&lt;/p&gt;&#xA;&lt;p&gt;Due ulteriori chiavi opzionali, &lt;code&gt;StandardOutPath&lt;/code&gt; e &lt;code&gt;StandardErrorPath&lt;/code&gt; (righe 21 e 24), definiscono rispettivamente il percorso dei file da usare per salvare l&amp;rsquo;output completo generato dal comando e gli eventuali messaggi di errore. Anche in questo caso bisogna sostituire nel percorso dei file il proprio nome breve al posto dell&amp;rsquo;&lt;code&gt;utente&lt;/code&gt; generico.&lt;/p&gt;&#xA;&lt;p&gt;Un&amp;rsquo;altra utile chiave opzionale è &lt;code&gt;RunAtLoad&lt;/code&gt; (riga 27), che specifica se lo script di shell deve essere eseguito al momento del caricamento da parte di launchctl.&#xA;Questa opzione è inutile se, come in questo caso, si definiscono esattamente gli orari di esecuzione del processo tramite la chiave &lt;code&gt;StartCalendarInterval&lt;/code&gt;.&#xA;Se invece si usa la chiave &lt;code&gt;StartInterval&lt;/code&gt;, bisogna impostare&#xA;&lt;code&gt;RunAtLoad&lt;/code&gt; al valore &lt;code&gt;true/&lt;/code&gt;, in modo da fissare il tempo iniziale da cui far partire il conteggio dei secondi.&lt;/p&gt;&#xA;&lt;h4 id=&#34;due-comandi-utili&#34;&gt;Due comandi utili&lt;/h4&gt;&#xA;&lt;p&gt;Per elencare tutti i processi gestiti da launchd in un dato momento si esegue da Terminale il comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ launchctl list&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Il Mac su cui sto scrivendo questo post elenca ben 294 processi, considerando sia i processi attivi che quelli ormai terminati.&lt;/p&gt;&#xA;&lt;p&gt;Per smettere di eseguire automaticamente lo script &lt;code&gt; it.pazziperlamela.makeblog.plist&lt;/code&gt;, si deve eseguire il comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ launchctl unload ~/Library/LaunchAgents/it.pazziperlamela.makeblog.plist&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;e poi cancellare (o spostare) il file &lt;code&gt;it.pazziperlamela.makeblog.plist&lt;/code&gt; dalla directory &lt;code&gt;~/Library/LaunchAgents/&lt;/code&gt;. In caso contrario, lo script tornerà ad essere lanciato automaticamente al prossimo riavvio.&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;È evidente che non mi piace l&amp;rsquo;idea di usare launchd al posto di cron. Troppo complicato e troppo proprietario. Una vera pugnalata ad uno dei principi cardini di Unix (e del software ben fatto): fare una cosa sola ma farla bene e in modo efficiente.&lt;/p&gt;&#xA;&lt;p&gt;Intendiamoci, launchd va benissimo per gestire l&amp;rsquo;avvio del sistema e i servizi automatici (i &lt;em&gt;demoni&lt;/em&gt;) gestiti dal sistema operativo e dalla sua introduzione in (Mac) OS X 10.4/Tiger ha reso molto più veloce il processo di avvio di OS X. Ma sostituire launchd a cron introduce un livello di complessità inutile ed insensato.&lt;/p&gt;&#xA;&lt;p&gt;Nonostante tutto c&amp;rsquo;è &lt;a href=&#34;http://paul.annesley.cc/2012/09/mac-os-x-launchd-is-cool/&#34;&gt;qualcuno a cui launchd piace&lt;/a&gt; anche per questo scopo. Contento lui, io finché posso preferisco tenermi stretto il buon vecchio cron.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Il formato consigliato per il nome del file plist è il cosiddetto &lt;a href=&#34;https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html&#34;&gt;&lt;code&gt;Uniform Type Identifier&lt;/code&gt; (UTI)&lt;/a&gt;, una struttura simile a quella di un &lt;a href=&#34;http://it.wikipedia.org/wiki/Domain_Name_System&#34;&gt;dominio web&lt;/a&gt; inverso. In questo caso è stato preso il nome dello script da eseguire &lt;code&gt;makeblog&lt;/code&gt;, lo si è aggiunto all&amp;rsquo;indirizzo del (presunto) sito web del progetto &lt;code&gt;pazziperlamela.it&lt;/code&gt;, e infine si è invertito l&amp;rsquo;ordine della stringa risultante, &lt;code&gt;makeblog.pazziperlamela.it&lt;/code&gt;, ottenendo il nome del file plist.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Automatizzare il Mac dal Terminale - Sua maestà cron</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/</link>
      <pubDate>Sat, 22 Nov 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/</guid>
      <description>&lt;p&gt;Nella &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;prima parte di questa serie&lt;/a&gt; abbiamo visto come usare il comando &lt;code&gt;at&lt;/code&gt; per automatizzare determinate attività sul Mac dal Terminale.&lt;/p&gt;&#xA;&lt;p&gt;At è utile ogni volta che si vuole eseguire un comando automaticamente una sola volta e in un momento ben definito&lt;/p&gt;&#xA;&lt;p&gt;Ma at ha anche parecchi limiti e non è adatto a svolgere una attività periodica in modo trasparente, come richiesto da Lucio Bragagnolo nel &lt;a href=&#34;http://macintelligence.org/blog/2014/10/11/facciamo-finta-che/&#34;&gt;post da cui ha preso spunto questa serie&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;un-demone-chiamato-cron&#34;&gt;Un demone chiamato cron&lt;/h4&gt;&#xA;&lt;p&gt;Lo strumento più adatto a questo scopo è &lt;code&gt;cron&lt;/code&gt;, il cui nome deriva dal greco &lt;code&gt;chronos&lt;/code&gt; (tempo). Cron permette di eseguire comandi singoli o &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;interi script&lt;/a&gt;, in modo automatico ad una data e ora stabilita, con una precisione che arriva fino al minuto.&lt;/p&gt;&#xA;&lt;p&gt;Cron è nel gergo di Unix un &lt;code&gt;demone&lt;/code&gt;, un comando eseguito automaticamente all&amp;rsquo;avvio di OS X (o di Linux) che rimane sempre attivo in sottofondo e agisce senza necessità di alcun intervento da parte dell&amp;rsquo;utente.&#xA;Cron si attiva ogni minuto ed esegue (quando serve) i comandi contenuti nel file &lt;code&gt;crontab&lt;/code&gt; di configurazione.&lt;/p&gt;&#xA;&lt;p&gt;Ogni utente del Mac ha a disposizione un proprio file crontab, ma esiste anche un file crontab di sistema gestito dall&amp;rsquo;amministratore, normalmente il primo utente creato al momento della installazione di OS X. I file crontab degli utenti sono contenuti nella directory &lt;code&gt;/usr/lib/cron/tabs/&lt;/code&gt; e si chiamano con il &lt;a href=&#34;http://www.macitynet.it/modificare-il-nome-dellaccount-utente-di-os-x-o-della-cartella-inizio/&#34;&gt;nome account (o nome breve) dell&amp;rsquo;utente&lt;/a&gt;, quello di sistema è &lt;code&gt;/etc/crontab&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Non c&amp;rsquo;è bisogno di precipitarsi a controllare, nelle nuove versioni di OS X il file &lt;code&gt;/etc/crontab&lt;/code&gt; non esiste più, come vedremo la prossima volta.&lt;/p&gt;&#xA;&lt;p&gt;Dal Terminale, si può visualizzare il contenuto del proprio file crontab con il comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ crontab -l&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;mentre per modificarlo bisogna &lt;em&gt;necessariamente&lt;/em&gt; usare&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ crontab -e&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;e mai un editor di testo (cosa fra l&amp;rsquo;altro impossibile senza essere amministratore del Mac).&lt;/p&gt;&#xA;&lt;p&gt;Infine il comando per cancellare il proprio file crontab è&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ crontab -r&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;comè-fatto-crontab&#34;&gt;Com&amp;rsquo;è fatto crontab&lt;/h4&gt;&#xA;&lt;p&gt;Ma come è fatto un file crontab? È piuttosto semplice: un file crontab è composto da una o più righe contenenti ciascuna sei campi (colonne) separati da spazi&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*&#x9;*&#x9;*&#x9;*&#x9;*&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Nei primi cinque campi si inseriscono le indicazioni di data ed ora, sostituendole agli asterischi, nell&amp;rsquo;ultimo campo il comando o il nome dello script da eseguire. Ad esempio,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;05&#x9;*&#x9;*&#x9;*&#x9;*&#x9;echo &amp;quot;Tanti saluti da cron!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;stamperà sul Terminale al quinto minuto di ogni ora la stringa &amp;ldquo;Tanti saluti da cron!&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;In realtà sul Terminale non viene mai stampato nulla. Infatti, &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;analogamente ad  at&lt;/a&gt;, ogni volta che cron esegue un comando definito nel file crontab di un utente, provvede ad inviargli una email con l&amp;rsquo;output completo generato dal comando stesso, email che può essere letta dal Terminale con (chi ci avrebbe mai pensato!) &lt;code&gt;mail&lt;/code&gt;.&#xA;La ragione è semplice: cron potrebbe agire dietro le quinte per mesi od anni, effettuando azioni periodiche come il backup in rete di determinate directory o la pulizia del sistema da certi file inutili. È più razionale inviare all&amp;rsquo;utente interessato una email che gli permetta di controllare, quando ne ha tempo e voglia, che tutto vada bene, invece di disturbarlo periodicamente mentre sta usando il Terminale con l&amp;rsquo;output delle azioni eseguite da cron.&lt;/p&gt;&#xA;&lt;p&gt;Per disabilitare l&amp;rsquo;invio della email mandando l&amp;rsquo;output del comando eseguito da cron sul file &lt;code&gt;output.txt&lt;/code&gt; sul Desktop, si può utilizzare la tecnica standard di Unix di redirezione dell&amp;rsquo;output&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&lt;pre&gt;&#xA;05&#x9;*&#x9;*&#x9;*&#x9;*&#x9;echo &amp;ldquo;Tanti saluti da cron!&amp;rdquo; &amp;raquo; ~/Desktop/output.txt&#xA;&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;dove il simbolo &lt;code&gt;&amp;raquo;&lt;/code&gt; aggiunge l&amp;rsquo;output del comando eseguito da cron alla fine del file &lt;code&gt;output.txt&lt;/code&gt; (usando un solo &lt;code&gt;&amp;gt;&lt;/code&gt; si sovrascrive ogni volta il contenuto precedente del file).&lt;/p&gt;&#xA;&lt;h4 id=&#34;data-e-ora-in-cron&#34;&gt;Data e ora in cron&lt;/h4&gt;&#xA;&lt;p&gt;Rimane da definire come sono codificate le indicazioni della data e dell&amp;rsquo;ora a cui eseguire cron. Non è molto difficile, almeno se ci si limita ai casi più comuni. La figura seguente mostra il significato dei campi del file crontab.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1418&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;500&amp;rdquo;]&lt;img src=&#34;https://melabit.files.wordpress.com/2014/11/cron1.png&#34; alt=&#34;Significato dei campi di una riga del file crontab.&#34; width=&#34;500&#34; /&gt; Significato dei campi di una riga del file crontab.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Quindi per eseguire un comando al quindicesimo minuto di ogni ora bisogna inserire la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;15&#x9;*&#x9;*&#x9;*&#x9;*&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;mentre per farlo alle 2:00 di ogni lunedì&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;02&#x9;*&#x9;*&#x9;1&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Alcuni simboli permettono di specificare dei valori multipli in un campo. Il trattino &amp;ldquo;-&amp;rdquo; indica un intervallo, per cui la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;30 07&#x9;*&#x9;*&#x9;1-5&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;esegue il comando alle 7:30 dal lunedì al venerdì.&lt;/p&gt;&#xA;&lt;p&gt;La virgola &amp;ldquo;,&amp;rdquo; indica una lista di valori. Quindi&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;08&#x9;1,15,30&#x9;&#x9;*&#x9;*&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;esegue il comando specificato il giorno 1, 15 e 30 di ogni mese.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;asterisco equivale a selezionare tutti i valori consentiti per il campo a cui si riferisce. Una riga come questa&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*&#x9;*&#x9;*&#x9;*&#x9;*&#x9;echo &amp;quot;Tanti saluti da cron!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;istruisce cron ad eseguire il comando &lt;code&gt;echo &amp;quot;Tanti saluti da cron!&amp;quot;&lt;/code&gt; una volta al minuto e per sempre!&lt;/p&gt;&#xA;&lt;p&gt;Infine la barra &amp;ldquo;/&amp;rdquo; indica l&amp;rsquo;incremento del campo numerico, per cui&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*&#x9;*/3&#x9;*&#x9;*&#x9;*&#x9;echo &amp;quot;Tanti saluti da cron!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;equivale a far eseguire il comando ogni 3 ore.&lt;/p&gt;&#xA;&lt;p&gt;Tutto qui. Ci sono delle finezze ulteriori, ma chi fosse interessato può leggere qualche articolo specifico su cron, come &lt;a href=&#34;http://en.wikipedia.org/wiki/Cron&#34;&gt;questa pagina su Wikipedia&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, o &lt;a href=&#34;https://help.ubuntu.com/community/CronHowto&#34;&gt;questo tutorial molto dettagliato&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;cron-online&#34;&gt;Cron online&lt;/h4&gt;&#xA;&lt;p&gt;Per i più pigri esiste un servizio online che &lt;a href=&#34;http://crontab-generator.org/&#34;&gt;genera automaticamente la riga del file crontab&lt;/a&gt; corrispondente alle date e ore specificate tramite l&amp;rsquo;interfaccia web. Ma si fa prima ad imparare la sintassi di cron che ad orientarsi nella miriade di opzioni del servizio.&lt;/p&gt;&#xA;&lt;p&gt;Molto più utile mi sembra il &lt;a href=&#34;http://www.cronsandbox.com/&#34;&gt;Cron Sandbox&lt;/a&gt;, un altro servizio online che consente di verificare che la lista di date e ore generate da una particolare riga del file crontab corrisponda a quanto ci si attende.&lt;/p&gt;&#xA;&lt;h4 id=&#34;al-lavoro&#34;&gt;Al lavoro&lt;/h4&gt;&#xA;&lt;p&gt;Se vogliamo usare il comando cron per &lt;a href=&#34;http://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;eseguire lo script &lt;code&gt;~/bin/makeblog&lt;/code&gt;&lt;/a&gt; e rigenerare automaticamente il blog &amp;ldquo;Pazzi per la mela&amp;rdquo; alle 2:00 di ogni notte, dobbiamo inserire nel file crontab la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;02&#x9;*&#x9;*&#x9;*&#x9;~/bin/makeblog&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;e dimenticarci subito dopo della sua stessa esistenza. Cron lavorerà per noi ogni notte, preciso ed instancabile senza infastidirci, a meno che non decidiamo di andare a controllare quello che sta combinando.&lt;/p&gt;&#xA;&lt;h4 id=&#34;e-lux&#34;&gt;E Lux?&lt;/h4&gt;&#xA;&lt;p&gt;Non mi sono dimenticato di Lux. &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;Come già ricordato la volta scorsa&lt;/a&gt;, Lux vorrebbe poter scrivere i post &lt;a href=&#34;http://macintelligence.org&#34;&gt;del suo blog&lt;/a&gt; lasciando al sistema il compito di aggiornare i file html e di trasferirli sul server per la pubblicazione online. E vuole farlo indifferentemente dal Mac o dall&amp;rsquo;iPad (e perché no, anche dall&amp;rsquo;iPhone).&lt;/p&gt;&#xA;&lt;p&gt;Con cron è semplice. Basterà mettere la directory contenente i vari &lt;em&gt;pezzi&lt;/em&gt; del blog &lt;a href=&#34;http://octopress.org/&#34;&gt;Octopress&lt;/a&gt; dentro la cartella di &lt;a href=&#34;http://www.dropbox.com&#34;&gt;Dropbox&lt;/a&gt; del Mac &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; e creare lo script &lt;code&gt;makeblog&lt;/code&gt;, configurando cron in modo da eseguirlo automaticamente all&amp;rsquo;ora desiderata.&lt;/p&gt;&#xA;&lt;p&gt;Se Lux volesse poter aggiornare il blog quattro volte al giorno (esagerato!) alle ore 0, 6, 12 e 18, dovrebbe inserire in crontab la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;*/6&#x9;*&#x9;*&#x9;*&#x9;~/bin/makeblog&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;oppure qualcosa di più &lt;em&gt;specifico&lt;/em&gt; come&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;30&#x9;1,5,12,19&#x9;*&#x9;*&#x9;*&#x9;~/bin/makeblog&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;adattando così gli orari di aggiornamento ai propri ritmi di lavoro.&lt;/p&gt;&#xA;&lt;p&gt;Ogni volta che Lux scrive un nuovo post con il Mac non dovrà fare altro che salvarlo nella directory &lt;em&gt;giusta&lt;/em&gt; della sua installazione di Octopress, né più né meno di come fa già ora. Se invece usa l&amp;rsquo;iPad o l&amp;rsquo;iPhone, deve solo ricordarsi di inviare il post a Dropbox, scegliendo la stessa directory che usa sul Mac.  Appena l&amp;rsquo;iPad si troverà connesso ad una rete, invierà il nuovo file a Dropbox, che lo spedirà a sua volta al Mac.&lt;/p&gt;&#xA;&lt;p&gt;Tutto automatico, senza Apple Script, Azioni Cartelle, e mal di testa.&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;Con cron &lt;em&gt;the sky is the limit&lt;/em&gt;, o quasi. Io per anni ho fatto fare a cron il backup completo del contenuto di un sito web &lt;em&gt;professionale&lt;/em&gt;, contenente centinaia di documenti e di programmi da distribuire agli utenti registrati, e del relativo database MySQL. Una volta scritto lo script che eseguiva il backup vero e proprio (questa è stata la cosa veramente complicata, visto che volevo mantenere backup multipli orari, giornalieri e mensili), ho lasciato fare a cron e&amp;hellip; me ne sono letteralmente dimenticato.&lt;/p&gt;&#xA;&lt;p&gt;Ma non finisce qui. La prossima volta mi toccherà parlare di &lt;code&gt;launchd&lt;/code&gt;. Come potrei evitarlo, visto che questo blog è focalizzato (più o meno) sul Mac?&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Poteva mai mancare un riferimento ad una pagina di Wikipedia? MA non è certo colpa mia se Wikipedia è una delle cose migliori del web e che tante pagine sono fatte veramente bene.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Si potrebbe anche &lt;a href=&#34;http://melabit.wordpress.com/2014/03/21/come-mettere-un-piolo-quadrato-in-un-buco-rotondo/&#34;&gt;usare un collegamento simbolico&lt;/a&gt; o un altro servizio di condivisione dei file, ma non generalizziamo troppo.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Automatizzare il Mac dal Terminale - Il comando at</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/</link>
      <pubDate>Thu, 06 Nov 2014 06:05:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/</guid>
      <description>&lt;p&gt;Qualche giorno fa Lucio &amp;ldquo;Lux&amp;rdquo; Bragagnolo ha pubblicato &lt;a href=&#34;http://macintelligence.org&#34;&gt;sul suo interessantissimo blog&lt;/a&gt; (da seguire assolutamente ogni giorno!), un post in cui poneva una domanda molto stimolante.&#xA;&lt;a href=&#34;http://macintelligence.org/blog/2014/10/11/facciamo-finta-che/&#34;&gt;Lascio a lui la parola&lt;/a&gt; per descrivere il problema:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Octopress &amp;ndash; il motore di questo blog &amp;ndash; si basa su una cartella che risiede nel Mac. La cartella contiene sottocartelle varie che ospitano i pezzi del blog.  Pubblicare questo articolo significa creare un file e metterlo nella giusta cartella, per poi dare un comando di Terminale che genera una edizione aggiornata del blog e un altro comando di Terminale che deposita una copia dell’edizione dentro il server di pubblicazione.&lt;br&gt;&#xA;Spesso mi trovo a scrivere pezzi per il blog su iPad, lontano da Mac. Facciamo finta che il Mac rimanga irraggiungibile fisicamente per tutta la giornata. Qual è la strategia che richiede meno lavoro in assoluto per pubblicare il pezzo?&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Detto in modo più generale, la domanda di Lux è:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;quali strumenti possono essere usati sul Mac per automatizzare determinate attività nel modo più semplice e veloce possibile?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Nella discussione che è seguita sul blog il mio incontrollabile alter ego virtuale ha proposto velocemente due o tre possibili soluzioni, promettendo anche di approfondirle appena possibile.&lt;/p&gt;&#xA;&lt;p&gt;Credo che questo sia lo spazio migliore per farlo, tornando finalmente a discutere di argomenti connessi alla programmazione e alla amministrazione del Mac, dopo parecchio (troppo!) tempo dedicato a divagazioni più o meno lontane dal target principale del blog.&lt;/p&gt;&#xA;&lt;h4 id=&#34;introduzione&#34;&gt;Introduzione&lt;/h4&gt;&#xA;&lt;p&gt;Sul Mac sono disponibili diversi strumenti che permettono di automatizzare le operazioni effettuate sul sistema. Mi concentrerò qui sui comandi di derivazione Unix presenti di default in OS X, perché sono strumenti ben testati ed affidabili e sono utilizzabili anche su piattaforme diverse dal Mac.&lt;/p&gt;&#xA;&lt;p&gt;Avrei voluto concentrare la discussione in un unico post, ma mi sono accorto che raggiunto una lunghezza eccessiva e difficile da digerire in una sola volta.&lt;/p&gt;&#xA;&lt;p&gt;Ho deciso quindi di dividere la trattazione in più parti distinte. In questa prima parte mostrerò l&amp;rsquo;uso di &lt;code&gt;at&lt;/code&gt;, il comando più semplice disponibile su OS X per questo scopo.&lt;/p&gt;&#xA;&lt;p&gt;Nei prossimi post mostrerò l&amp;rsquo;utilizzo di strumenti più avanzati come &lt;code&gt;cron&lt;/code&gt; e &lt;code&gt;launchd&lt;/code&gt;. Cercherò poi di descrivere ulteriori prodotti di terze parti ed eventualmente anche una soluzione basata su Automator (ammesso che questa sia in grado di fare al meglio quanto richiesto, cosa di cui non sono troppo sicuro in questo momento).&lt;/p&gt;&#xA;&lt;p&gt;Per evitare di essere troppo vago cercherò di circoscrivere il problema, basandomi strettamente su quanto richiesto da Lux, ma provando anche a rendere facile l&amp;rsquo;estensione di quanto descritto a casi più generali.&lt;/p&gt;&#xA;&lt;h4 id=&#34;pazzi-per-la-mela&#34;&gt;Pazzi per la mela&lt;/h4&gt;&#xA;&lt;p&gt;Supponiamo di voler automatizzare la pubblicazioni dei nuovi post sul blog &amp;ldquo;Pazzi per la mela&amp;rdquo;, raggiungibile all&amp;rsquo;indirizzo IP &lt;a href=&#34;http://melabit.wordpress.com/pazzi-per-la-mela&#34;&gt;http://pazziperlamela.it&lt;/a&gt; (inutile cliccare sul link, il blog non esiste).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://melabit.wordpress.com/pazzi-per-la-mela&#34;&gt;Pazzi per la mela&lt;/a&gt; utilizza &lt;a href=&#34;http://octopress.org&#34;&gt;Octopress&lt;/a&gt; per convertire i file di testo che costituiscono ciascun post in pagine html statiche, che devono essere poi copiate sul server remoto che gestisce il sito web del blog.&lt;/p&gt;&#xA;&lt;p&gt;Sul Mac, tutti i testi dei post e i file di configurazione del blog si trovano nella cartella &lt;code&gt;~/Documenti/pazziperlamela/&lt;/code&gt;, dove &lt;code&gt;~&lt;/code&gt; indica per convenzione la cartella &lt;code&gt;Inizio&lt;/code&gt; (o &lt;code&gt;home&lt;/code&gt;) dell&amp;rsquo;utente del Mac, identificata nel Finder dall&amp;rsquo;icona di una casetta.&lt;/p&gt;&#xA;&lt;p&gt;Ogni volta che si aggiungono nuovi post o si modificano quelli già esistenti, bisogna rigenerare le pagine html, eseguendo dal Terminale i comandi&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ cd Documenti/pazziperlamela/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;per posizionarsi all&amp;rsquo;interno della cartella del blog, e poi&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ rake generate&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;per ricreare sul Mac le pagine html che costituiscono il sito web del blog. Un ulteriore comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ rake deploy&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://octopress.org/docs/deploying/rsync/&#34;&gt;sincronizza le pagine html modificate&lt;/a&gt; con il server remoto tramite &lt;a href=&#34;http://rsync.samba.org/&#34;&gt;&lt;code&gt;rsync&lt;/code&gt;&lt;/a&gt;, probabilmente il migliore strumento di sincronizzazione bidirezionale fra un server remoto e il sistema locale.&lt;/p&gt;&#xA;&lt;p&gt;Mettiamo insieme questi comandi creando un semplice &lt;a href=&#34;http://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;script di shell&lt;/a&gt;,&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;cd ~/Documenti/pazziperlamela/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;rake generate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;rake deploy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;salviamolo in &lt;code&gt;~/bin&lt;/code&gt; con il nome &lt;code&gt;makeblog&lt;/code&gt; e rendiamolo eseguibile (le istruzioni dettagliate si trovano in &lt;a href=&#34;http://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;Script di shell in OS X&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;E arriviamo finalmente alla parte centrale del post.&lt;/p&gt;&#xA;&lt;p&gt;Supponiamo di voler rigenerare automaticamente il blog &amp;ldquo;Pazzi per la mela&amp;rdquo; una volta al giorno, magari alle 2:00 di notte per evitare che troppi lettori siano collegati nel momento in cui vengono modificate le pagine del blog.&lt;/p&gt;&#xA;&lt;p&gt;Vediamo come farlo, usando il comando più semplice presente sul Mac&lt;/p&gt;&#xA;&lt;h4 id=&#34;un-comando-semplice-semplice&#34;&gt;Un comando semplice semplice&lt;/h4&gt;&#xA;&lt;p&gt;Lo strumento più semplice che possiamo usare sul Mac per automatizzare determinate operazioni è &lt;code&gt;at&lt;/code&gt;, che esegue uno o più comandi alla data e ora specificata. La sintassi di &lt;code&gt;at&lt;/code&gt; adatta a questo scopo è&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ at -f script -m ora data&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;dove &lt;code&gt;script&lt;/code&gt; è il nome dello &lt;a href=&#34;http://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;script di shell&lt;/a&gt; contenente i comandi da eseguire, mentre ora e data possono essere specificate sia in modo assoluto, ad esempio &amp;ldquo;02:00&amp;rdquo; oppure &amp;ldquo;02:00 Nov 06&amp;rdquo; (senza virgolette), che in modo relativo, &amp;ldquo;now + 1 minute&amp;rdquo;, &amp;ldquo;tomorrow&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;In alternativa si può specificare la data e l&amp;rsquo;ora in formato POSIX,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ at -f comando -m -t YYYYMMDDhhmm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;cioè scrivendola al contrario di come siamo abituati, iniziando dall&amp;rsquo;anno e finendo con i minuti. Qui YYYY indica l&amp;rsquo;anno, MM il numero del mese, DD il giorno, infine hh e mm l&amp;rsquo;ora e i minuti. Tutti gli elementi della data vanno inseriti usando due (o quattro) cifre e facendoli precedere eventualmente da uno zero. In questo formato, il 6 Novembre alle ore 2:00 diventa &amp;ldquo;201411060200&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Per motivi che mi sfuggono, il comando &lt;code&gt;at&lt;/code&gt; è disabilitato di default in OS X. Per attivarlo bisogna eseguire da Terminale&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;dopo di che il comando &lt;code&gt;at&lt;/code&gt; rimarrà disponibile anche riavviando il Mac.&lt;/p&gt;&#xA;&lt;p&gt;Si può ora utilizzare &lt;code&gt;at&lt;/code&gt; per eseguire automaticamente lo script di shell &lt;code&gt;makeblog&lt;/code&gt; all&amp;rsquo;ora desiderata, scrivendo nel Terminale&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ at -f ~/bin/makeblog -m 02:00 tomorrow&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Il Terminale (o meglio &lt;code&gt;bash&lt;/code&gt;) ci risponderà con l&amp;rsquo;indicazione della data e dell&amp;rsquo;ora completa alla quale verrà eseguito lo script. Dopo averlo completato, inoltre, &lt;code&gt;bash&lt;/code&gt; sarà tanto gentile da inviarci una email con l&amp;rsquo;output completo prodotto dallo script.&lt;/p&gt;&#xA;&lt;p&gt;A meno di non configurare opportunamente il servizio di posta elettronica &lt;em&gt;interno&lt;/em&gt; di OS X (una cosa che va ben oltre gli scopi di questo post), questa email però non riuscirà a raggiungere la nostra abituale casella di posta elettronica. Potrà però essere letta dal Terminale con il comando (poteva essere diversamente?) &lt;code&gt;mail&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;troppo-semplice-per-essere-utile&#34;&gt;Troppo semplice per essere utile?&lt;/h4&gt;&#xA;&lt;p&gt;Purtroppo il comando &lt;code&gt;at&lt;/code&gt; non è adatto a soddisfare quanto richiesto da Lux.&lt;/p&gt;&#xA;&lt;p&gt;Infatti, dopo aver finito di scrivere un nuovo post, Lux dovrebbe comunque lanciare il Terminale e configurare &lt;code&gt;at&lt;/code&gt; in modo da fargli eseguire lo script &lt;code&gt;makeblog&lt;/code&gt; alle due della notte successiva. Se invece sta usando l&amp;rsquo;iPad, dovrebbe collegarsi tramite &lt;code&gt;ssh&lt;/code&gt; al Mac e fare la stessa cosa da remoto.&lt;/p&gt;&#xA;&lt;p&gt;Ma, avendo accesso al Terminale, e indipendentemente dal fatto che avvenga in locale o in remoto, è molto più semplice eseguire direttamente lo script &lt;code&gt;makeblog&lt;/code&gt;, senza complicarsi ulteriormente la vita.&lt;/p&gt;&#xA;&lt;p&gt;Quindi &lt;code&gt;at&lt;/code&gt; non serve a niente?&lt;/p&gt;&#xA;&lt;p&gt;Certo che &lt;code&gt;at&lt;/code&gt; serve (altrimenti che senso avrebbe avuto scrivere questo post?). Ma serve nei casi in cui si vuole eseguire una determinata attività sul Mac automaticamente e &lt;em&gt;una volta sola&lt;/em&gt;, mantenendo il pieno controllo del momento esatto in cui viene fatta partire.&lt;/p&gt;&#xA;&lt;p&gt;Se invece vogliamo eseguire un&amp;rsquo;attività periodicamente e quasi dimenticandocene, &lt;code&gt;at&lt;/code&gt; non serve e bisogna usare per forza di cose degli strumenti più avanzati.&lt;/p&gt;&#xA;&lt;h4 id=&#34;il-mio-incontro-con-at&#34;&gt;Il mio incontro con at&lt;/h4&gt;&#xA;&lt;p&gt;Sono sicuro di non aver mai usato finora &lt;code&gt;at&lt;/code&gt; su OS X, ma questo comando mi è stato utilissimo diversi anni fa, quando ho avuto accesso a delle favolose workstation Sun.&lt;/p&gt;&#xA;&lt;p&gt;All&amp;rsquo;epoca dovevo eseguire delle simulazioni che duravano parecchie ore. Un semplice PC era improponibile: non solo perché era troppo lento, ma anche perché c&amp;rsquo;era sempre qualcuno che, zelante, lo spegneva la sera passandoci davanti (nonostante tutti i cartelli di avviso che potevo mettere davanti al monitor).&lt;/p&gt;&#xA;&lt;p&gt;Un amico grande esperto di Unix (ho imparato i fondamenti da lui!) mi permise allora di usare le workstation Sun del laboratorio di elaborazione video che gestiva.&lt;/p&gt;&#xA;&lt;p&gt;Per ottimizzare l&amp;rsquo;uso delle macchine e non dare fastidio agli altri utenti, dovevo però lanciare le simulazioni di notte, quando i sistemi erano quasi inattivi. Passavo poi gran parte della giornata successiva a controllare e ad elaborare i dati prodotti durante la notte e a preparare i file di configurazione per le successive elaborazioni notturne.&lt;/p&gt;&#xA;&lt;p&gt;Questo ciclo, preparazione-calcolo-elaborazione, mi impediva di usare &lt;code&gt;cron&lt;/code&gt; (un comando che vedremo la prossima volta), che avrebbe eseguito ciecamente le simulazioni &lt;em&gt;ogni notte&lt;/em&gt; al momento stabilito, anche nei week-end o nei giorni in cui per qualche motivo non ero riuscito ad elaborare i dati.&lt;/p&gt;&#xA;&lt;p&gt;Invece &lt;code&gt;at&lt;/code&gt; era perfetto per questo scopo. Una volta completata la scrittura dei nuovi file di configurazione, li trasferivo tramite rete locale sulle Sun e configuravo &lt;code&gt;at&lt;/code&gt; in modo da eseguire un nuovo ciclo di simulazioni la notte successiva. Semplice e veloce.&lt;/p&gt;&#xA;&lt;h4 id=&#34;accessori-ma-sempre-utili&#34;&gt;Accessori ma sempre utili&lt;/h4&gt;&#xA;&lt;p&gt;Fra i comandi di supporto di &lt;code&gt;at&lt;/code&gt;, sono particolarmente utili &lt;code&gt;atq&lt;/code&gt;, che permette di elencare i comandi &lt;code&gt;at&lt;/code&gt; in attesa di essere eseguiti, e &lt;code&gt;atrm&lt;/code&gt; seguito da un numero intero, che cancella il comando &lt;code&gt;at&lt;/code&gt; in coda identificato dal numero intero associato. Ad esempio&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ atq&#xA;35&#x9;Thu Nov  6 02:00:00 2014&#xA;36&#x9;Thu Nov  6 06:00:00 2014&#xA;37&#x9;Sat Nov 15T12:15:00:00 2014&#xA;&#xA;$ atrm 36&#xA;$ atq&#xA;35&#x9;Thu Nov  6 02:00:00 2014&#xA;37&#x9;Sat Nov 15T12:15:00:00 2014&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Se si vuole disabilitare di nuovo &lt;code&gt;at&lt;/code&gt;, bisogna eseguire da Terminale&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.atrun.plist&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;In questo lungo post abbiamo visto il più semplice comando che può essere utilizzato per automatizzare determinate attività sul Mac.&#xA;Nel prossimo post affronteremo &lt;code&gt;cron&lt;/code&gt;, il re indiscusso degli strumenti adatti a questo scopo.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Script di shell in OS X</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/11/06/script-di-shell-in-os-x/</link>
      <pubDate>Thu, 06 Nov 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/11/06/script-di-shell-in-os-x/</guid>
      <description>&lt;p&gt;Nei sistemi operativi basati su Unix la &lt;code&gt;shell&lt;/code&gt; è una applicazione che permette di eseguire i comandi del sistema tramite una interfaccia testuale a linea di comando.&lt;/p&gt;&#xA;&lt;p&gt;La shell più popolare oggi è &lt;a href=&#34;http://it.wikipedia.org/wiki/Bash&#34;&gt;bash&lt;/a&gt;,  acronimo di &amp;ldquo;Bourne-Again Shell&amp;rdquo;, un gioco di parole fra Stephen Bourne, l&amp;rsquo;autore della shell &lt;code&gt;sh&lt;/code&gt; da cui deriva bash, e il termine &amp;ldquo;born&amp;rdquo; (nato). Bash significa quindi sia &amp;ldquo;la nuova shell di Bourne&amp;rdquo; che &amp;ldquo;la shell rinata&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Bash è la &lt;a href=&#34;http://www.gnu.org/software/bash/&#34;&gt;shell ufficiale del progetto GNU&lt;/a&gt;, ed è da tempo la shell di default in praticamente tutte le distribuzioni di Linux oltre che in OS X.&#xA;Per accedere a bash in OS X si utilizza il Terminale, una applicazione di cui si è già parlato più volte in questo blog. Il Terminale si trova in &lt;code&gt;Applicazioni&lt;/code&gt; &amp;gt; &lt;code&gt;Utility&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bash permette di eseguire i comandi del sistema operativa sia in modo interattivo, scrivendoli uno alla volta sulla linea di comando, che tramite uno &lt;code&gt;script di shell&lt;/code&gt; (&lt;code&gt;shell script&lt;/code&gt;), un vero e proprio programma all&amp;rsquo;interno del quale è possibile usare variabili, strutture di controllo e funzioni, esattamente come in tutti i linguaggi di programmazione.&lt;/p&gt;&#xA;&lt;p&gt;Uno script di shell ben fatto può diventare quindi un vero e proprio comando specializzato, eseguibile dalla linea di comando e praticamente indistinguibile dai comandi intrinseci del sistema.&lt;/p&gt;&#xA;&lt;p&gt;Ma come si crea uno script di shell? Basta seguire alcune semplici regole.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Innanzi tutto lo script va scritto usando un editor, mai un wordprocessor come Word o Pages. Lo script deve infatti essere un semplice file di testo e non deve contenere i codici di formattazione o i caratteri speciali inseriti normalmente dai programmi di videoscrittura.&lt;br&gt;&#xA;Come editor si può usare TextEdit, preinstallato in tutte le versioni di OS X, ma vanno ancora meglio programmi gratuiti, come &lt;a href=&#34;http://www.barebones.com/products/textwrangler/&#34;&gt;TextWrangler&lt;/a&gt;, &lt;a href=&#34;http://macromates.com/&#34;&gt;TextMate 2.0&lt;/a&gt;, &lt;a href=&#34;http://brackets.io/&#34;&gt;Brackets&lt;/a&gt;, &lt;a href=&#34;https://atom.io/&#34;&gt;Atom&lt;/a&gt;, o commerciali, come il mostro sacro &lt;a href=&#34;http://www.barebones.com/products/bbedit/&#34;&gt;BBEdit&lt;/a&gt; e &lt;a href=&#34;http://www.sublimetext.com/&#34;&gt;Sublime Text&lt;/a&gt;. Tutti questi editor hanno il grande vantaggio rispetto al semplice TextEdit di evidenziare i comandi di bash e di supportare l&amp;rsquo;autocompletamento delle parole chiave riconosciute dall&amp;rsquo;editor.&lt;br&gt;&#xA;Volendo si possono usare anche &lt;a href=&#34;https://code.google.com/p/macvim/&#34;&gt;macvim&lt;/a&gt; o &lt;a href=&#34;http://aquamacs.org/&#34;&gt;emacs&lt;/a&gt;, ma chi è in grado di usarli non ha bisogno di sicuro di leggere queste note.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Per permettere al sistema operativo di identificare il file come uno script per la shell bash, gli script devono iniziare con la riga&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;&lt;pre&gt;&#xA;#!/bin/bash&#xA;&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;È buona regola salvare tutti i propri script in una cartella (&lt;code&gt;directory&lt;/code&gt;) comune, in modo che siano facilmente rintracciabili dal sistema operativo (ma dopo un po&amp;rsquo; di tempo anche da noi stessi!)&lt;br&gt;&#xA;Per uniformarci alle convenzioni di Unix, creiamo una directory &lt;code&gt;bin&lt;/code&gt; nella nostra cartella &lt;code&gt;Inizio&lt;/code&gt; (o directory &lt;code&gt;home&lt;/code&gt;), dove salveremo tutti gli script.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;Lanciamo il Terminale ed eseguiamo i comandi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;&lt;pre&gt;&#xA;$ cd ~&#xA;$ mkdir bin&#xA;&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;dove il simbolo &lt;code&gt;~&lt;/code&gt; indica per convenzione la cartella &lt;code&gt;home&lt;/code&gt; dell&amp;rsquo;utente.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lo script deve essere reso eseguibile direttamente con il comando&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;&lt;pre&gt;&#xA;$ chmod u+x scriptname &lt;br&gt;&#xA;&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Aiutiamo il sistema operativo a trovare facilmente i nostri script aggiungendo la directory &lt;code&gt;bin&lt;/code&gt; appena creata alla variabile di ambiente &lt;code&gt;PATH&lt;/code&gt;, che definisce le directory dove il sistema operativo va a cercare i comandi del sistema. Torniamo al Terminale ed eseguiamo in sequenza i comandi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;code&gt;&lt;pre&gt;&#xA;cp -p .bashrc .bashrc.ORIGINAL&#xA;echo &amp;ldquo;export PATH=~/bin:$PATH&amp;rdquo; &amp;raquo; .bashrc&#xA;&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Il primo comando duplica il file &lt;code&gt;.bashrc&lt;/code&gt; originale, mentre il secondo aggiunge la riga contenuta fra virgolette alla fine del file &lt;code&gt;.bashrc&lt;/code&gt;.&#xA;Bisogna stare molto attenti ad usare &lt;strong&gt;due simboli di maggiore&lt;/strong&gt; nel secondo comando altrimenti si rischia di sovrascrivere &lt;code&gt;.bashrc&lt;/code&gt; con effetti potenzialmente disastrosi (questo è il motivo per cui è bene  prima duplicare il file &lt;code&gt;.bashrc&lt;/code&gt; originale).&lt;/p&gt;&#xA;&lt;p&gt;Una volta chiuso e rilanciato il Terminale, la cartella &lt;code&gt;~/bin&lt;/code&gt; sarà aggiunta alla lista delle directory contenenti i comandi eseguiti da bash.&lt;/p&gt;&#xA;&lt;p&gt;Bisogna notare che la creazione della directory &lt;code&gt;~/bin&lt;/code&gt; e la sua aggiunta al PATH del sistema vanno eseguiti una sola volta per ogni utente del Mac.&lt;/p&gt;&#xA;&lt;p&gt;Vorrei infine sfatare una credenza ormai obsoleta: non è assolutamente necessario che il nome dello script termini con l&amp;rsquo;estensione &lt;code&gt;.sh&lt;/code&gt;. È una vecchia abitudine che ha l&amp;rsquo;unico vantaggio di rendere immediatamente riconoscibile uno script salvato in una directory qualunque del sistema. Ma è una pratica inutile se si segue il consiglio di tenere tutti gli script di shell in una directory predefinita come &lt;code&gt;~/bin&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;La cartella &lt;code&gt;Inizio&lt;/code&gt; in OS X è quella identificata dall&amp;rsquo;icona di una casetta.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Amministratore pro tempore</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/07/05/amministratore-pro-tempore/</link>
      <pubDate>Sat, 05 Jul 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/07/05/amministratore-pro-tempore/</guid>
      <description>&lt;p&gt;Qual&amp;rsquo;è la differenza fra semplice utente ed amministratore nei sistemi basati su Unix, come Linux o OS X? Non ho mai trovato una sintesi così perfetta come quella proposta dal &lt;a href=&#34;http://xkcd.com/149/&#34;&gt;geniale autore di xkcd&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;img src=&#34;http://imgs.xkcd.com/comics/sandwich.png&#34; width=&#34;360&#34; class=&#34;aligncenter&#34; /&gt;&#xA;&lt;p&gt;Il comando di terminale &lt;code&gt;sudo&lt;/code&gt; permette di diventare &amp;ndash; anche se solo temporaneamente &amp;ndash; l&amp;rsquo;amministratore (&lt;code&gt;root&lt;/code&gt;) onnipotente di un sistema Unix in grado persino, e senza ripensamenti, di cancellare completamente il contenuto del disco rigido.&lt;/p&gt;&#xA;&lt;p&gt;Un comando da usare con molta attenzione.&lt;/p&gt;&#xA;&lt;p&gt;Ma, guardando le cose al contrario, proprio la differenza rigida fra utente ed amministratore è uno dei fattori che rendono i sistemi basati su Unix molto più sicuri di Windows, in cui la differenza di ruoli è molto più sfumata e quasi (vedi XP) assente.&lt;/p&gt;&#xA;&lt;p&gt;Consentendo così a virus e &lt;em&gt;malware&lt;/em&gt; vario di scorrazzare liberamente nei meandri del disco rigido.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Homebrew: software per il Mac fatto in casa</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/04/29/homebrew-software-per-il-mac-fatto-in-casa/</link>
      <pubDate>Tue, 29 Apr 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/04/29/homebrew-software-per-il-mac-fatto-in-casa/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://brew.sh/&#34;&gt;Homebrew&lt;/a&gt; è un sistema di gestione dei pacchetti (&lt;em&gt;package&lt;/em&gt;) che semplifica l&amp;rsquo;installazione su OS X del software open source di derivazione Unix/Linux.&lt;/p&gt;&#xA;&lt;p&gt;Homebrew si autodefinisce &amp;ldquo;The missing package manager for OS X&amp;rdquo; (&lt;em&gt;Il gestore di pacchetti per OS X che mancava&lt;/em&gt;), una definizione un po&amp;rsquo; sfrontata &amp;ndash; in particolare nelle prime fasi dello sviluppo alcuni anni fa &amp;ndash; ma ormai non troppo lontana dalla realtà.&lt;/p&gt;&#xA;&lt;p&gt;La sua semplicità di installazione e di uso l&amp;rsquo;hanno fatto &lt;a href=&#34;https://sourceforge.net/projects/machomebrew/files/stats/timeline?dates=2013-01-01&amp;#43;to&amp;#43;2014-04-26&#34;&gt;crescere rapidamente in popolarità nell&amp;rsquo;ultimo anno&lt;/a&gt;, a scapito dei sistemi concorrenti più affermati, &lt;a href=&#34;https://finkproject.org/&#34;&gt;Fink&lt;/a&gt; e &lt;a href=&#34;https://www.macports.org/&#34;&gt;MacPorts&lt;/a&gt; (quest&amp;rsquo;ultimo supportato direttamente da Apple).&lt;/p&gt;&#xA;&lt;p&gt;A differenza di questi ultimi, Homebrew cerca di usare per quanto è possibile gli strumenti software di base già presenti in OS X &amp;ndash; gcc, perl, python, ruby, git, mysql, sqlite &amp;ndash; e non obbliga l&amp;rsquo;utente ad installare duplicati inutili. I package suddetti sono comunque disponibili nell&amp;rsquo;archivio (&lt;em&gt;repository&lt;/em&gt;) di Homebrew, per chi avesse bisogno di utilizzare versioni più recenti (e a volte meno stabili) di quelle utilizzate dalla Apple.&lt;/p&gt;&#xA;&lt;p&gt;Da qualche mese Homebrew fornisce anche un gran numero di &lt;a href=&#34;https://github.com/Homebrew/homebrew/wiki/Bottles&#34;&gt;pacchetti precompilati&lt;/a&gt; (&lt;em&gt;bottles&lt;/em&gt;), velocizzando notevolmente il processo di installazione e di aggiornamento dei pacchetti, che non devono più essere obbligatoriamente compilati uno alla volta.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://apple.stackexchange.com/questions/32724/what-are-pros-and-cons-for-macports-fink-and-homebrew&#34;&gt;Questa pagina su Stack Exchange&lt;/a&gt; approfondisce i pro e contro dei tre principali sistemi di gestione dei pacchetti su OS X.&#xA;&lt;a href=&#34;https://www.onthelambda.com/2013/10/14/the-state-of-package-management-on-mac-os-x/&#34;&gt;The state of package management on Mac OS X&lt;/a&gt; è una analisi piuttosto approfondita dei pregi e dei difetti di tutti i sistemi di gestione dei pacchetti per OS X, considerando anche quelli meno diffusi e supportati.&lt;/p&gt;&#xA;&lt;p&gt;Una delle questioni più controverse riguardanti Homebrew riguarda il fatto che tutti i pacchetti sono installati all&amp;rsquo;interno della cartella (&lt;em&gt;directory&lt;/em&gt;) &lt;code&gt;/usr/local/&lt;/code&gt;. Alcuni critici &lt;a href=&#34;https://terrychay.com/article/macports-vs-homebrew.shtml&#34;&gt;osteggiano questa scelta&lt;/a&gt;, notando fra l&amp;rsquo;altro che:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;/usr/local/&lt;/code&gt; è una cartella di sistema che non dovrebbe essere usata da Homebrew ma solo dal software installato dall&amp;rsquo;utente &lt;code&gt;root&lt;/code&gt; (l&amp;rsquo;amministratore onnipotente dei sistemi basati su Unix);&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Homebrew modifica i permessi di alcune cartelle contenute all&amp;rsquo;interno di &lt;code&gt;/usr/local/&lt;/code&gt; assegnandoli all&amp;rsquo;utente che installa il gestore di pacchetti, mentre i permessi dovrebbero essere configurati in modo che le suddette cartelle siano usabili da tutti gli utenti del sistema;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;è  da preferire invece la scelta di MacPorts o Fink di usare delle cartelle create ad-hoc, rispettivamente &lt;code&gt;/opt/&lt;/code&gt; o &lt;code&gt;/sw/&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Personalmente mi sembrano critiche risibili e che i vantaggi in termini di praticità e di sicurezza delle scelte fatte dagli sviluppatori di Homebrew superino di gran lunga i presunti svantaggi.&lt;/p&gt;&#xA;&lt;p&gt;Del resto &lt;code&gt;/usr/local/&lt;/code&gt; e le cartelle in esso contenute sono fatte apposta per installare software specifico per la macchina in uso, vengono usate ad esempio da &lt;a href=&#34;https://tug.org/mactex/&#34;&gt;MacTeX&lt;/a&gt; e da &lt;a href=&#34;https://pages.cs.wisc.edu/~ghost/&#34;&gt;Ghostscript&lt;/a&gt;, e non capisco cosa impedisca di usarle liberamente anche per altre applicazioni.&lt;/p&gt;&#xA;&lt;p&gt;Assegnare i permessi di installazione e di uso dei pacchetti di Homebrew ad un singolo utente, piuttosto che a &lt;em&gt;root&lt;/em&gt;, limita i rischi di sicurezza che il software installato potrebbe creare nel sistema. Inoltre è difficile negare che il Mac sia un sistema fondamentalmente monoutente, per cui questa scelta dovrebbe comunque andare bene nella maggior parte dei casi.&lt;/p&gt;&#xA;&lt;p&gt;Nei casi rimanenti di un Mac condiviso da più utenti, indipendentemente dal fatto che ci giri OS X &lt;em&gt;liscio&lt;/em&gt; o OS X Server, chi gestisce il sistema dovrebbe essere facilmente in grado di assegnare il gruppo utente giusto a chi è interessato ad usare i pacchetti di Homebrew.&lt;/p&gt;&#xA;&lt;p&gt;Di sicuro una cosa non più complicata di dover aggiungere al &lt;code&gt;PATH&lt;/code&gt; di ciascun utente il percorso della cartella (/opt/ o /sw/ a seconda dei casi) in cui vengono installati i pacchetti gestiti da MacPorts o Fink.&lt;/p&gt;&#xA;&lt;p&gt;Nel corso del tempo ho usato tutti e tre i sistemi di gestione dei pacchetti, stabilizzandomi da almeno due anni su Homebrew che trovo complessivamente molto più lineare e usabile, senza le troppe opzioni di compilazione di MacPorts, che portano fin troppo spesso a incompatibilità con i pacchetti installati successivamente, o la confusione fra pacchetti binari e sorgenti, &lt;a href=&#34;https://www.finkproject.org/doc/users-guide/packages.php?phpLang=en&#34;&gt;con comandi diversi di installazione&lt;/a&gt;, di Fink.&lt;/p&gt;&#xA;&lt;p&gt;Dopo questa lunga introduzione, nel &lt;a href=&#34;https://melabit.wordpress.com/2014/05/04/homebrew-installazione-e-disinstallazione/&#34;&gt;prossimo post vedremo come installare (ma anche disinstallare) Homebrew&lt;/a&gt;, &lt;del&gt;esaminando anche i principali comandi di gestione dei pacchetti&lt;/del&gt;.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Gemelli o diversi?</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/01/31/gemelli-o-diversi/</link>
      <pubDate>Fri, 31 Jan 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/01/31/gemelli-o-diversi/</guid>
      <description>&lt;p&gt;Mi capita spesso di ricevere o scaricare dei documenti senza riuscire a capire immediatamente se sono nuove versioni di file che ho già sul Mac o se ho solo prelevato lo stesso file con un nome diverso.&lt;/p&gt;&#xA;&lt;p&gt;La soluzione più immediata è quella di aprire i documenti in due finestre affiancate e confrontarli ad occhio nudo.&#xA;È una soluzione perfetta se i documenti sono &lt;em&gt;profondamente&lt;/em&gt; diversi, ma non funziona se le differenze sono limitate a poche parole sparse qua e là.&lt;/p&gt;&#xA;&lt;p&gt;Per essere sicuri al 100% che i file siano identici, basta utilizzare il Terminale di OS X. Il comando in questione è &lt;code&gt;md5&lt;/code&gt; che, in base al manuale, calcola una specie di firma digitale (detta &lt;a href=&#34;http://it.wikipedia.org/wiki/Hash&#34;&gt;hash&lt;/a&gt;) del file che gli viene fornito in ingresso. Il comando utilizza il ben noto algoritmo &lt;a href=&#34;http://it.wikipedia.org/wiki/MD5&#34;&gt;MD5&lt;/a&gt;, che è descritto nei dettagli nell&amp;rsquo;&lt;a href=&#34;http://tools.ietf.org/html/rfc1321&#34;&gt;RFC1321&lt;/a&gt;. La particolarità dell&amp;rsquo;algoritmo è che la probabilità che due file diversi producano lo stesso hash (la cosiddetta &lt;code&gt;collisione&lt;/code&gt;) è estremamente bassa.&lt;/p&gt;&#xA;&lt;p&gt;Questo algoritmo è stato ormai ampiamente superato nelle applicazioni crittografiche, ma per i nostri scopi va più che bene.&lt;/p&gt;&#xA;&lt;p&gt;Per controllare quindi che due file siano o meno identici, basta lanciare il Terminale (è in &lt;code&gt;Applicazioni ➔ Utility&lt;/code&gt;, ma sarebbe meglio trascinarne una volta per tutte l&amp;rsquo;icona nel Dock), scrivere &lt;code&gt;md5 -q&lt;/code&gt; seguito da uno spazio e trascinare una alla volta nel Terminale le icone dei (due o più) file da confrontare, premendo alla fine il tasto Invio. Il risultato è una serie di stringhe alfanumeriche, corrispondenti a ciascuno dei file controllati. Se le stringhe sono uguali lo sono di sicuro anche i file (a meno di casi eccezionali), in caso contrario possiamo essere certi che i file in ingresso differiscono fra loro, anche per &lt;em&gt;un solo carattere&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;un-esempio-pratico&#34;&gt;Un esempio pratico&lt;/h4&gt;&#xA;&lt;p&gt;Prendiamo un file PDF qualunque, &lt;code&gt;File_A1.pdf&lt;/code&gt;, trasciniamolo sul Desktop e duplichiamolo, rinominando la copia come &lt;code&gt;File_A2.pdf&lt;/code&gt;. Lanciamo il Terminale ed eseguiamo i seguenti comandi (notare che il &lt;code&gt;$&lt;/code&gt; è il prompt del Terminale e non va inserito):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ cd ~/Desktop&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;per spostarci nella cartella del Desktop,&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ md5 -q File_A1.pdf File_A2.pdf&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;che produce in uscita le due stringhe&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;8610396351906b395de49dccc7470ebf&#xA;8610396351906b395de49dccc7470ebf&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;corrispondenti rispettivamente ai miei due file di partenza &lt;code&gt;File_A1.pdf&lt;/code&gt; e &lt;code&gt;File_A2.pdf&lt;/code&gt;. Le due stringhe sono identiche e quindi, come sappiamo, anche i file controllati sono identici (ovviamente usando altri file le stringhe di output saranno differenti da queste).&lt;/p&gt;&#xA;&lt;p&gt;Si noti che ho preferisco usare l&amp;rsquo;opzione &lt;code&gt;-q&lt;/code&gt; (quiet) per evitare che il comando &lt;code&gt;md5&lt;/code&gt; stampi il percorso completo dei file controllati, che rende molto più complicato trovare a prima vista la stringa di hash. Provare per credere.&lt;/p&gt;&#xA;&lt;p&gt;Duplichiamo ancora il file &lt;code&gt;File_A1.pdf&lt;/code&gt;, rinominandolo questa volta come &lt;code&gt;File_B.pdf&lt;/code&gt;. Lanciamo &lt;code&gt;Anteprima&lt;/code&gt; ed apriamo il file &lt;code&gt;File_B.pdf&lt;/code&gt;. Nelle ultime versioni di OS X Anteprima permette di modificare (parzialmente) il testo dei file pdf o di aggiungere evidenziazioni al testo. Per farlo, basta premere l&amp;rsquo;icona &lt;code&gt;Edit&lt;/code&gt; (l&amp;rsquo;ultima a destra sulla barra degli strumenti) oppure selezionare la voce corrispondente posta nel menu &lt;code&gt;Vista&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;img src=&#34;http://melabit.files.wordpress.com/2014/01/toolbar-anteprima.png&#34; alt=&#34;Barra degli strumenti di Anteprima&#34; title=&#34;Barra degli strumenti di Anteprima&#34;&gt;&lt;p&gt;Modifichiamo in qualche modo il file, ad esempio selezionando con un doppio click una parola ed evidenziandola con &lt;code&gt;Strumenti ➔ Annota ➔ Evidenzia il Testo&lt;/code&gt;, e salviamo il file modificato.&lt;/p&gt;&#xA;&lt;p&gt;Torniamo al Terminale ed eseguiamo il comando&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ md5 -q File_A1.pdf File_B.pdf&#xA;8610396351906b395de49dccc7470ebf&#xA;22908db2457cf64af17c1296cb5f37e1&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;che ci mostra immediatamente come ora il secondo file sia ora diverso da quello originale. La figura seguente mostra l&amp;rsquo;esecuzione completa dei comandi ne mio Terminale.&lt;/p&gt;&#xA;&lt;img src=&#34;http://melabit.files.wordpress.com/2014/01/md5-output.png&#34; alt=&#34;Esecuzione del comando md5 da Terminale&#34; title=&#34;Esecuzione del comando md5 da Terminale&#34;&gt;&lt;p&gt;Tre brevi commenti per concludere:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Il comando &lt;code&gt;md5&lt;/code&gt; è disponibile di default su OS X (ovviamente!) e su qualunque distribuzione moderna di Linux e Unix, dove però viene generalmente rinominato &lt;code&gt;md5sum&lt;/code&gt;. In Windows, invece, si può installare il &lt;a href=&#34;http://support.microsoft.com/kb/841290&#34;&gt;File Checksum Integrity Verifier (FCIV)&lt;/a&gt;, uno strumento semi-ufficiale della Microsoft, che permette di calcolare la firma digitale di un file mediante vari algoritmi, fra cui l&amp;rsquo;md5.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;La variante &lt;code&gt;md5 -s &amp;quot;Questa e&#39; una stringa&amp;quot;&lt;/code&gt; permette di calcolare l&amp;rsquo;hash di una stringa qualunque, aprendo la porta ad applicazioni nel campo della generazione casuale di password &lt;em&gt;forti&lt;/em&gt; a partire da stringhe facilmente memorizzabili.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;I programmi che trovano automaticamente i file duplicati sull&amp;rsquo;hard-disk &lt;a href=&#34;http://paper0k.wordpress.com/2007/07/04/come-ti-trovo-i-files-duplicati/&#34;&gt;funzionano più o meno su queste basi&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Melabit, il blog</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2013/12/18/melabit-il-blog/</link>
      <pubDate>Wed, 18 Dec 2013 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2013/12/18/melabit-il-blog/</guid>
      <description>&lt;p&gt;Appare online da oggi questo nuovo blog, che sarà dedicato prevalentemente al Mac, alla programmazione e all&amp;rsquo;open source, con puntatine nella scienza e nella tecnologia in generale.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;idea di avere una presenza online è partita da &lt;a href=&#34;http://it.wikipedia.org/wiki/Lucio_Bragagnolo&#34;&gt;Lucio &amp;ldquo;Lux&amp;rdquo; Bragagnolo&lt;/a&gt;, tecno-scrittore, evangelizzatore Mac, consulente editoriale di Macworld Italia e &lt;a href=&#34;http://macintelligence.org&#34;&gt;noto blogger sul mondo Mac&lt;/a&gt;. Il blog sarebbe stato ospitato sul sito del &lt;em&gt;nuovo&lt;/em&gt; &lt;a href=&#34;http://macworld.it&#34;&gt;Macworld Italia&lt;/a&gt; poi, per vari motivi, non se n&amp;rsquo;è fatto nulla.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;idea però ha continuato a frullarmi in testa per quasi due anni e alla fine ho deciso di partire. Per me è una novità. Finora non ho mai &lt;em&gt;voluto&lt;/em&gt; avere uno spazio personale sul web, limitandomi a contribuire dall&amp;rsquo;esterno a svariati blog e forum e, ormai parecchi anni fa, a vari newsgroup (&lt;a href=&#34;http://it.wikipedia.org/wiki/Newsgroup&#34;&gt;qualcuno se li ricorda ancora&lt;/a&gt;?).&lt;/p&gt;&#xA;&lt;p&gt;È anche una bella sfida e anche un impegno notevole. Spero solo di esserne all&amp;rsquo;altezza.&lt;/p&gt;&#xA;&lt;p&gt;Chi sono? Sono uno che passa il tempo a leggere, a studiare, a fare esperimenti o a sviluppare modelli (più o meno) matematici. Insomma, sono quello che si dice un &lt;em&gt;ricercatore&lt;/em&gt;, una figura un po&amp;rsquo; arcana e con tristi reminiscenze scolastiche.&#xA;Una figura anche parecchio squalificata di questi tempi, in questo strano Paese&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;In realtà un ricercatore è una persona normale (beh, non &lt;em&gt;sempre&lt;/em&gt;&amp;hellip;), affascinata ed incuriosita da quello che lo circonda. Ma quello che faccio cercherò di spiegarlo meglio in un prossimo post.&lt;/p&gt;&#xA;&lt;p&gt;Nel mio lavoro uso da anni prevalentemente il Mac, davanti al quale passo la maggior parte della giornata. E mi piace anche Unix, che è il &lt;em&gt;motore&lt;/em&gt; che gira sotto l&amp;rsquo;interfaccia amichevole e graficamente strepitosa di OS X, e la sua incarnazione moderna, Linux.&lt;/p&gt;&#xA;&lt;p&gt;Mi piacerebbe condividere qui alcune idee ed informazioni che provengono da quello che faccio ogni giorno e che hanno poco spazio nelle riviste dedicate ai Mac ed ai computer in generale.&lt;/p&gt;&#xA;&lt;p&gt;Insomma, in questo blog si parlerà soprattutto di terminale, di programmazione, di reti di computer, di software &lt;em&gt;piccolo&lt;/em&gt; o poco diffuso, meglio se open source, e magari a volte anche di scienza e tecnologia.&lt;/p&gt;&#xA;&lt;p&gt;Tutti argomenti apparentemente ostici ma che, se vengono affrontati con il tono giusto, possono diventare estremamente interessanti e rendere molto più produttivo e flessibile l&amp;rsquo;uso quotidiano del computer.&lt;/p&gt;&#xA;&lt;p&gt;Avrei volute scrivere tante altre cose e, soprattutto tante cose diverse, ma mi accorgo che presentarsi è veramente difficile (ed anche un po&amp;rsquo; imbarazzante). Meglio farsi conoscere a poco a poco e focalizzare le idee con il tempo.&lt;/p&gt;&#xA;&lt;p&gt;Spero di riuscire ad essere sufficientemente originale e non banale, affrontando temi interessanti da leggere e da commentare.&lt;/p&gt;&#xA;&lt;p&gt;Spero anche di riuscire a mantenere una periodicità costante e prevedibile. Vedremo, non sarà facile.&lt;/p&gt;&#xA;&lt;p&gt;Fatemi sapere per favore cosa pensate di quello che scrivo, ed eventualmente contestatelo. Ogni commento argomentato e civile, anche se negativo, sarà ben accetto.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
