<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Bsd on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/bsd/</link>
    <description>Recent content in Bsd on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Tue, 08 Nov 2022 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/bsd/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Ventoy, il boot manager per i geek curiosi - Introduzione</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2022/11/08/ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/</link>
      <pubDate>Tue, 08 Nov 2022 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2022/11/08/ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.ventoy.net/&#34;&gt;Ventoy&lt;/a&gt; è senza dubbio un software di nicchia, buono soprattutto per i tecnici e i &lt;em&gt;geek&lt;/em&gt; curiosi di esplorare il funzionamento dei sistemi operativi. Non serve a tanti, ma se serve diventa subito indispensabile.&lt;/p&gt;&#xA;&lt;h4 id=&#34;cosè-ventoy&#34;&gt;Cos&amp;rsquo;è Ventoy?&lt;/h4&gt;&#xA;&lt;p&gt;Ventoy è un &lt;a href=&#34;https://github.com/ventoy/Ventoy&#34;&gt;software open source&lt;/a&gt; con cui si può creare una chiavetta USB da cui eseguire gli installatori dei principali sistemi operativi a partire dalle loro immagini in formato &lt;code&gt;iso&lt;/code&gt; (ma anche da quelle in formati meno comuni, come &lt;code&gt;wim&lt;/code&gt;, &lt;code&gt;img&lt;/code&gt; o &lt;code&gt;vhd&lt;/code&gt;). Sono &lt;a href=&#34;https://www.ventoy.net/en/isolist.html&#34;&gt;supportate&lt;/a&gt; tutte le versioni di Windows dalla 7 in poi, così come un gran numero di distribuzioni di Linux e di derivati di BSD Unix, ChromeOS e perfino i principali virtualizzatori &lt;em&gt;bare-metal&lt;/em&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;&lt;/p&gt;&#xA;&lt;p&gt;In pratica, se vogliamo installare un sistema operativo su un PC, invece di trasferirne l&amp;rsquo;immagine &lt;code&gt;iso&lt;/code&gt; su una chiavetta dedicata, usando strumenti come &lt;a href=&#34;https://www.balena.io/etcher/&#34;&gt;balenaEtcher&lt;/a&gt; o &lt;a href=&#34;https://unetbootin.github.io/&#34;&gt;UNetbootin&lt;/a&gt; (entrambi multipiattaforma) o eventualmente &lt;a href=&#34;https://rufus.ie/en/&#34;&gt;Rufus&lt;/a&gt; (solo per Windows), possiamo copiare direttamente l&amp;rsquo;immagine &lt;code&gt;iso&lt;/code&gt; sulla chiavetta USB dove abbiamo installato Ventoy (i dettagli li troverete la &lt;a href=&#34;https://melabit.com/it/2022/11/14/ventoy-il-boot-manager-per-i-geek-curiosi-installazione-e-uso/&#34;&gt;prossima volta&lt;/a&gt;), avviare il computer da questa chiavetta e lanciare l&amp;rsquo;installatore direttamente da lì.&lt;/p&gt;&#xA;&lt;p&gt;Cosa cambia? Niente se lo facciamo una sola volta, parecchio se dobbiamo lavorare su più macchine, se vogliamo provare le nuove distribuzioni di Linux o di BSD o, in generale, se ci piace &lt;em&gt;giocare&lt;/em&gt; con queste cose.&lt;/p&gt;&#xA;&lt;p&gt;Perché, a differenza del metodo tradizionale, una chiavetta abbastanza grande può contenere anche decine di file &lt;code&gt;iso&lt;/code&gt; diversi, da lanciare a seconda della necessità o dell&amp;rsquo;estro del momento. Inutile dire che al posto di una chiavetta potremmo anche usare un disco SSD esterno, anche da soli 128 GB, guadagnando parecchio nella velocità di avvio delle varie &lt;code&gt;iso&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p style=&#34;border-style:solid; border-width: medium; border-color:coral; background-color:lightyellow; padding:1em;&#34;&gt;&#xA;Sia che usiate una chiavetta o un disco SSD esterno, è sempre conveniente astenersi dai modelli di marche sconosciute o poco affidabili. È vero che per questo uso specifico l&#39;affidabilità non è fondamentale, però è altrettanto vero che, se si guasta la chiavetta, bisogna ripetere da zero tutto il processo di installazione/configurazione di Ventoy e, soprattutto, la copia delle &lt;code&gt;iso&lt;/code&gt;.  È una bella perdita di tempo, per cui è meglio non rischiare solo per risparmiare qualche euro.[^2]&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-11-08-ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/ventoy-windows-10-startup.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-11-08-ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/ventoy-windows-10-installation.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;em&gt;Immagini dell&amp;rsquo;installatore di Windows 10, eseguito da una chiavetta USB con installato Ventoy.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ventoy può naturalmente essere usato per installare Windows, ma diventa ancora più utile con le distribuzioni di Linux o di BSD, i cui installatori ormai eseguono quasi sempre una versione &lt;em&gt;Live&lt;/em&gt; del sistema operativo, con la quale è possibile provare le funzioni della distribuzione senza rischiare di far danni, sicuri che tutte le modifiche saranno cancellate al riavvio.&lt;/p&gt;&#xA;&lt;p&gt;In questo caso, il vantaggio principale di Ventoy risiede nel fatto che si può usare una sola chiavetta per eseguire tutte le distribuzioni Live che vogliamo, senza dover riavviare ogni volta il sistema operativo principale solo per creare una chiavetta USB &lt;em&gt;ad hoc&lt;/em&gt; con la nuova distribuzione da provare. Una volta trovato ciò che ci aggrada, si può anche decidere di installarlo permanentemente sul computer sempre utilizzando Ventoy.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-11-08-ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/ventoy-elementary-os-try-or-install.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-11-08-ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/ventoy-lithium-boot-screen.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-11-08-ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/ventoy-lithium-desktop-info.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;em&gt;Esempi di distribuzioni Live di Linux eseguite tramite Ventoy.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Non c&amp;rsquo;è bisogno di dire che Ventoy è uno strumento fondamentale per chi fa assistenza tecnica e si trova a dover installare (o reinstallare) di continuo le varie versioni di Windows sui computer dei clienti, o che deve recuperare i dati da un computer che non si avvia più o che è infestato da virus e malware vario. Con una sola chiavetta può avere a disposizione tutte le &lt;code&gt;iso&lt;/code&gt; di cui ha bisogno, scegliendo di volta in volta lo strumento migliore da utilizzare in quel caso specifico.&lt;/p&gt;&#xA;&lt;h4 id=&#34;boot-manager&#34;&gt;Boot manager&lt;/h4&gt;&#xA;&lt;p&gt;Chi ha qualche capello bianco avrà riconosciuto in Ventoy il meccanismo di funzionamento di un boot manager.&lt;/p&gt;&#xA;&lt;p style=&#34;border-style:solid; border-width: medium; border-color:coral; background-color:lightyellow; padding:1em;&#34;&gt;&#xA;I boot manager hanno avuto il loro periodo di massima popolarità fra la fine degli anni &#39;90 e i primi anni 2000, quando era diventato normale per tanti utenti installare sul proprio PC una distribuzione di Linux (e spesso più di una) in parallelo all&#39;onnipresente Windows. Le versioni di Windows di quegli anni non permettevano di avviare altri sistemi operativi oltre a sé stessi, per cui era necessario usare dei boot manager di terze parti per riuscire ad usare indifferentemente Linux o Windows sulla stessa macchina. Io, ad esempio, usavo &lt;a href=&#34;https://gag.sourceforge.net&#34;&gt;GAG&lt;/a&gt;, che era molto flessibile e avviava praticamente tutto.&#xA;&lt;/br&gt;&#xA;Oggi la situazione è cambiata: la riduzione del costo dei computer associata alla disponibilità di processori potenti e di memorie di massa a stato solido velocissime ha reso molto più pratico dedicare ogni PC ad un solo scopo, oppure virtualizzare più sistemi operativi su una singola macchina, evitando così i noiosissimi riavvii da un sistema operativo all&#39;altro.&#xA;&lt;/br&gt;&#xA;Ma questo non significa che i boot manager di terze parti oggi siano caduti in disuso, anzi. Fra questi, il più noto è di sicuro &lt;a href=&#34;https://www.gnu.org/software/grub/&#34;&gt;GNU GRUB&lt;/a&gt;, usato praticamente da tutte le distribuzioni di Linux (ma GRUB è anche in grado di avviare qualunque altro sistema operativo installato sul computer). Poi ci sono &lt;a href=&#34;https://github.com/CloverHackyColor/CloverBootloader&#34;&gt;Clover&lt;/a&gt; e &lt;a href=&#34;https://macos86.gitbook.io/guida-opencore/introoc&#34;&gt;OpenCore&lt;/a&gt;, ampiamente utilizzati  nel mondo &lt;a href=&#34;https://hackintosh.com/&#34;&gt;Hackintosh&lt;/a&gt; per avviare macOS installato su un semplice PC. Chi usa Windows e vuole una maggiore flessibilità può utilizzare &lt;a href=&#34;https://neosmart.net/EasyBCD&#34;&gt;EasyBCD&lt;/a&gt; al posto dello strumento di avvio nativo, che definire limitato è poco.&#xA;&lt;/p&gt;&#xA;&lt;p&gt;E non si sbaglia, Ventoy si dimostra utilissimo anche in questo campo, perché la stessa chiavetta dove è installato Ventoy permette di avviare un computer su cui Windows (o Linux) si rifiuta di partire, eseguendo una ricerca a basso livello dei sistemi operativi installati sul disco, come si può vedere nell&amp;rsquo;immagine qui sotto. Con Linux succede di rado (e comunque GRUB riesce quasi sempre a metterci una pezza), ma per chi usa Windows è una manna dal cielo.&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;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2022-11-08-ventoy-il-boot-manager-per-i-geek-curiosi-introduzione/ventoy-boot-manager.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;em&gt;Ventoy può anche essere usato per avviare un sistema operativo che si rifiuta di partire.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;alternative-a-ventoy&#34;&gt;Alternative a Ventoy?&lt;/h4&gt;&#xA;&lt;p&gt;L&amp;rsquo;unica alternativa a Ventoy che io conosca è &lt;a href=&#34;https://www.youtube.com/watch?v=ZSywLblIYa0&#34;&gt;questo disco SSD esterno&lt;/a&gt;, con aggiunto un piccolo schermo e una tastiera con cui scegliere l&amp;rsquo;&lt;code&gt;iso&lt;/code&gt; da avviare. Un bell&amp;rsquo;oggettino, non c&amp;rsquo;è che dire, che proprio per la sua stessa esistenza dimostra quanto sia sentita l&amp;rsquo;esigenza di avviare con facilità le &lt;code&gt;iso&lt;/code&gt; di svariati sistemi operativi. Purtroppo il &lt;a href=&#34;https://www.amazon.it/iodd-Mini-Secure-encrypted-Drive/dp/B07Y465VX1/&#34;&gt;prezzo non proprio popolare&lt;/a&gt; (almeno rispetto a quello che fa e alla capacità del disco) lo rende adatto solo a chi si occupa professionalmente di assistenza tecnica.&lt;/p&gt;&#xA;&lt;p&gt;Per usare Ventoy, invece, non è necessario essere dei professionisti o avere il budget di un professionista. Se volete provare facilmente più di una distribuzione di Linux o se siete l&amp;rsquo;amico che tutti chiamano quando hanno un guaio al computer, Ventoy diventa subito uno strumento praticamente indispensabile.&lt;/p&gt;&#xA;&lt;p&gt;Come introduzione  a Ventoy può bastare. Nella &lt;a href=&#34;https://melabit.com/it/2022/11/14/ventoy-il-boot-manager-per-i-geek-curiosi-installazione-e-uso/&#34;&gt;seconda parte&lt;/a&gt; i dettagli dell&amp;rsquo;installazione e dell&amp;rsquo;uso di questo strumento. 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;Argomento molto interessante di per sé, che spero di riuscire a trattare qui prima o poi.&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;C&amp;rsquo;è gente che si convince che il computer sia da buttare solo perché Windows non si avvia. E non esagero affatto.&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 - Ancora Launchd</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2015/04/28/automatizzare-il-mac-dal-terminale-ancora-launchd/</link>
      <pubDate>Tue, 28 Apr 2015 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2015/04/28/automatizzare-il-mac-dal-terminale-ancora-launchd/</guid>
      <description>&lt;p&gt;A volte bisogna saper ammettere i propri errori. Questa è una di quelle volte.&lt;/p&gt;&#xA;&lt;p&gt;Nel mio &lt;a href=&#34;https://melabit.wordpress.com/2014/12/11/automatizzare-il-mac-dal-terminale-una-soluzione-targata-apple/&#34;&gt;post su launchd&lt;/a&gt; di qualche mese fa non avevo nascosto il mio scetticismo per una soluzione molto lontana dai &lt;a href=&#34;http://www.faqs.org/docs/artu/ch01s06.html&#34;&gt;canoni di Unix&lt;/a&gt; e troppo complicata per essere usata al posto di cron, il programma che nei sistemi operativi derivati da Unix è incaricato di eseguire periodicamente dei comandi o degli interi script in modo automatico.&lt;/p&gt;&#xA;&lt;p&gt;Leggendo però &lt;a href=&#34;http://www.macstories.net/tutorials/how-i-control-my-mac-with-automatic-ifttt-dropbox/&#34;&gt;questo post su MacStories&lt;/a&gt;, mi sono reso conto dell&amp;rsquo;esistenza di una ulteriore opzione di launchd, &lt;code&gt;QueueDirectories&lt;/code&gt;, che permette di di tenere sotto controllo una (o più) &lt;a href=&#34;https://melabit.wordpress.com/le-parole-per-dirlo/&#34;&gt;directory&lt;/a&gt; del Mac e di eseguire automaticamente un comando ogni qualvolta si aggiunge un file alla directory osservata.&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;Oltre a questa esiste una opzione più generale, &lt;code&gt;WatchPaths&lt;/code&gt;, che permette di tenere sotto controllo uno o più file (o directory) ed eseguire un comando quando uno di questi file (o directory) viene modificato.&lt;/p&gt;&#xA;&lt;p&gt;Con queste due nuove (almeno per me!) opzioni si può estendere notevolmente il campo di applicazione di launchd, facendogli eseguire un comando o uno script non solo in modo periodico (in sostituzione di cron), ma anche al verificarsi di un evento come l&amp;rsquo;aggiunta di un file ad una directory o la modifica di un determinato file.&lt;/p&gt;&#xA;&lt;h4 id=&#34;launchd-losservatore&#34;&gt;Launchd, l&amp;rsquo;osservatore&lt;/h4&gt;&#xA;&lt;p&gt;Riprendiamo quindi il &lt;a href=&#34;http://en.wikipedia.org/wiki/Property_list&#34;&gt;file plist&lt;/a&gt; di configurazione del &lt;a href=&#34;https://melabit.wordpress.com/2014/12/11/automatizzare-il-mac-dal-terminale-una-soluzione-targata-apple/&#34;&gt;post precedente&lt;/a&gt; e vediamo cosa possiamo fare se aggiungiamo l&amp;rsquo;opzione &lt;code&gt;QueueDirectories&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Il punto di partenza è &lt;a href=&#34;https://melabit.wordpress.com/2014/12/11/automatizzare-il-mac-dal-terminale-una-soluzione-targata-apple/&#34;&gt;sempre lo stesso&lt;/a&gt;: vogliamo eseguire automaticamente 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;.&lt;/p&gt;&#xA;&lt;p&gt;Questa volta però vogliamo rigenerare il blog non ad un&amp;rsquo;ora ben definita ed immutabile, ma solo quando inseriamo un nuovo post nella directory &lt;code&gt;~/Dropbox/blog/&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In questo caso usare Dropbox (o un qualunque servizio analogo, &lt;a href=&#34;https://www.box.com/&#34;&gt;Box&lt;/a&gt;, &lt;a href=&#34;https://www.copy.com&#34;&gt;Copy&lt;/a&gt;, &lt;a href=&#34;https://www.google.com/drive/&#34;&gt;Google Drive&lt;/a&gt;, o perfino &lt;a href=&#34;https://onedrive.live.com&#34;&gt;OneDrive&lt;/a&gt; di Microsoft) è particolarmente utile, perché permette di aggiungere il post anche lontano dal Mac, magari dopo averlo preparato sull&amp;rsquo;iPad o sull&amp;rsquo;iPhone.&lt;/p&gt;&#xA;&lt;p&gt;Il file plist di configurazione &lt;a href=&#34;https://melabit.wordpress.com/2014/12/11/automatizzare-il-mac-dal-terminale-una-soluzione-targata-apple/&#34;&gt;del post precedente&lt;/a&gt; diventa&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;Program&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/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;&#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;QueueDirectories&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;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;/Users/utente/Dropbox/blog/&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;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;Per attivarlo, come abbiamo già visto, basta salvarlo nella directory &lt;code&gt;~/Library/LaunchAgents/&lt;/code&gt; del proprio account (dove il &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;simbolo &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) con 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), ed 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;Ai successivi riavvii sarà il sistema operativo ad eseguire periodicamente lo script.&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;Devo ammettere che le opzioni &lt;code&gt;QueueDirectories&lt;/code&gt; e  &lt;code&gt;WatchPaths&lt;/code&gt; rendono launchd molto più interessante di quanto mi sia mai reso conto, permettendo di eseguire dei comandi di sistema o degli interi script in modo asincrono, al verificarsi di eventi particolari come la scrittura o la modifica di un file in una directory.&lt;/p&gt;&#xA;&lt;p&gt;Intendiamoci, le mie riserve sulla complessità di launchd rimangono intatte. Inoltre continua a non piacermi il fatto che sia uno strumento confinato al solo OS X, con poche prospettive di diffusione al di fuori del mondo Apple fra i sistemi operativi derivati da Unix, come &lt;a href=&#34;http://www.linux.org/&#34;&gt;Linux&lt;/a&gt; e &lt;a href=&#34;http://www.bsd.org/&#34;&gt;BSD&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Però pragmaticamente mi rendo conto che in certe circostanze launchd può rivelarsi uno strumento utilissimo e senza eguali. Basta solo usarlo con moderazione.&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;Qualcosa di simile alle cosiddette &amp;ldquo;Folder Actions&amp;rdquo;, introdotte già da parecchi anni in OS X senza troppo successo, che istruivano il sistema operativo a tenere sotto controllo una directory e ad eseguire dei comandi AppleScript o Automator ogni volta che un file veniva aggiunto o rimosso da quella directory, oppure quando quest&amp;rsquo;ultima veniva aperta, chiusa o spostata.&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>
  </channel>
</rss>
