<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Octopress on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/octopress/</link>
    <description>Recent content in Octopress on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Wed, 31 Dec 2014 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/octopress/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>And the winner is...</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/12/31/and-the-winner-is/</link>
      <pubDate>Wed, 31 Dec 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/12/31/and-the-winner-is/</guid>
      <description>&lt;p&gt;Riassunto delle puntate precedenti. &lt;a href=&#34;http://wordpress.com/&#34;&gt;Wordpress.com&lt;/a&gt; è un&amp;rsquo;ottima piattaforma di blogging, ed ha il grosso vantaggio di liberare l&amp;rsquo;utente da tutte le preoccupazioni riguardanti la manutenzione del proprio blog.&#xA;Non è però una piattaforma che si adatta bene al mio modo di lavorare, e ne ho già &lt;a href=&#34;http://melabit.wordpress.com/2014/08/01/i-limiti-di-wordpress-com/&#34;&gt;scritto diffusamente&lt;/a&gt; alcuni mesi fa.&#xA;Però &lt;a href=&#34;http://melabit.wordpress.com/2014/08/06/i-limiti-di-wordpress-com-una-nuova-piattaforma-per-il-blog/&#34;&gt;cosa scegliere&lt;/a&gt; fra le varie tipologie disponibili: wiki o CMS o piattaforme di blog, siti statici o siti dinamici? Per vari motivi mi sono orientato verso un &lt;a href=&#34;http://luftmensch.net/blog/2013/12/22/building-a-static-website-the-website-generator/&#34;&gt;generatore di siti statici&lt;/a&gt;, un programma che prende una serie di file di testo, di immagini e di documenti e li converte in un sito web completo secondo un tema grafico predefinito.&#xA;In rete ci sono letteralmente &lt;a href=&#34;https://staticsitegenerators.net/&#34;&gt;decine e decine di generatori di siti statici&lt;/a&gt; ed il loro numero cresce molto rapidamente: erano 289 all&amp;rsquo;inizio di agosto, oggi sono ben &lt;a href=&#34;https://staticsitegenerators.net/&#34;&gt;388&lt;/a&gt;!&#xA;&lt;a href=&#34;http://melabit.wordpress.com/2014/08/09/i-limiti-di-wordpress-com-generatori-di-siti-web-statici/&#34;&gt;Come orientarsi&lt;/a&gt; in questo marasma? Basandomi su una lista di &lt;a href=&#34;http://melabit.wordpress.com/2014/08/06/i-limiti-di-wordpress-com-una-nuova-piattaforma-per-il-blog/&#34;&gt;caratteristiche irrinunciabili&lt;/a&gt; (almeno per me), ne ho &lt;a href=&#34;http://melabit.wordpress.com/2014/08/12/i-limiti-di-wordpress-com-cosa-ho-scartato-e-perche/&#34;&gt;provati e scartati&lt;/a&gt; parecchi, buon ultimo  &lt;a href=&#34;http://melabit.wordpress.com/2014/12/28/hugo-la-prova/&#34;&gt;Hugo&lt;/a&gt;, promettente ma rivelatosi alla fine piuttosto immaturo.&lt;/p&gt;&#xA;&lt;p&gt;In realtà avevo deciso subito. Tutte le prove che ho fatto mi sono servite solo ad esplorare il più possibile il &lt;em&gt;territorio&lt;/em&gt;, a provare le alternative e a verificarne i vantaggi e gli svantaggi.&lt;/p&gt;&#xA;&lt;p&gt;La scelta più ragionevole, date le premesse, era solo una: &lt;a href=&#34;http://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Per due ragioni fondamentali: prospettive di sviluppo del codice a medio-lungo termine e disponibilità di documentazione abbondante e di buona qualità. Senza queste due caratteristiche non si va avanti. Tutti gli altri generatori di siti web statici possono anche apparire interessanti, ma impallidiscono se li si confronta a Jekyll su questi due aspetti.&lt;/p&gt;&#xA;&lt;p&gt;Tanto per fare un esempio: che senso avrebbe avuto scegliere uno dei tanti progetti &lt;em&gt;giocattolo&lt;/em&gt; di un singolo programmatore? Può anche essere eccellente, ma quante sono le probabilità che continui ad essere sviluppato fra uno, due, tre anni? Magari fra sei mesi il programmatore si stanca e passa ad altro, non rispondendo più alle richieste di supporto o di correzione degli inevitabili errori. Che si fa, allora?&#xA;Oppure: come si può cercare di configurare ed estendere il sistema prescelto se non esiste della buona documentazione, se magari l&amp;rsquo;unico modo per capire cosa fa il programma è analizzarne i sorgenti (auguri)?&lt;/p&gt;&#xA;&lt;p&gt;Infatti fra i 388 generatori di siti statici elencati oggi da &lt;a href=&#34;https://staticsitegenerators.net/&#34;&gt;Static Site Generators&lt;/a&gt;, ben 171 non sono aggiornati da almeno un anno e 225 da sei mesi. E solo una settantina ha ricevuto un aggiornamento nell&amp;rsquo;ultimo mese. Insomma, ci sono circa 320 progetti censiti che in realtà sono morti, inutili, da scartare a priori.&lt;/p&gt;&#xA;&lt;p&gt;I primi due generatori di siti web statici nella lista di &lt;a href=&#34;https://www.staticgen.com/&#34;&gt;StaticGen&lt;/a&gt;, Jekyll e il suo derivato &lt;a href=&#34;http://octopress.org/&#34;&gt;Octopress&lt;/a&gt;, hanno ricevuto insieme su GitHub più di un terzo delle &lt;a href=&#34;https://help.github.com/articles/about-stars/&#34;&gt;stelle&lt;/a&gt; &amp;ndash; cioè delle manifestazioni esplicite di interesse nel progetto &amp;ndash; guadagnate da tutti i 67 progetti elencati nel sito.&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;Non sarà che sono ritenuti così interessanti perché sono fatti bene e sono (relativamente) facili da usare e da metterci le mani?&lt;/p&gt;&#xA;&lt;p&gt;Ora rimane solo da rimboccarsi le maniche, configurare Jekyll e trasportare il blog sulla nuova piattaforma.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ma prima di allora, auguro a tutti coloro che pazientemente seguono questo blog un 2015 felice e, se possibile, migliore dell&amp;rsquo;anno che ci stiamo lasciando alle spalle!&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&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;Immagino che StaticGen censisca solo i progetti sviluppati attivamente. Probabilmente non è un caso che, se si considerano &lt;em&gt;attivi&lt;/em&gt; solo i progetti aggiornati nell&amp;rsquo;ultimo mese, i numeri di Static Site Generators e di StaticGen concidano. Sarebbe interessante verificare se i progetti sono veramente gli stessi.&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>
  </channel>
</rss>
