<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Steve Wozniak on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/steve-wozniak/</link>
    <description>Recent content in Steve Wozniak on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Mon, 18 Aug 2025 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/steve-wozniak/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Steve Wozniak, 75 anni di felicità</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2025/08/18/steve-wozniak-75-anni-di-felicita/</link>
      <pubDate>Mon, 18 Aug 2025 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2025/08/18/steve-wozniak-75-anni-di-felicita/</guid>
      <description>&lt;p&gt;Ho sempre avuto una grandissima ammirazione per Steve Wozniak, il nerd paffutello che nell&amp;rsquo;immaginario di chi si occupa di queste faccende è sempre stato considerato un gradino sotto (e magari anche di più) l&amp;rsquo;amico e socio fondatore di &lt;a href=&#34;https://en.wikipedia.org/wiki/Apple_Inc.&#34;&gt;Apple Computer&lt;/a&gt;, Steve Jobs.&lt;/p&gt;&#xA;&lt;p&gt;Certo, senza il genio commerciale di Steve Jobs Apple non sarebbe mai diventata il gigante che è oggi, ma sarebbe rimasta una delle tante aziende che negli anni &amp;lsquo;80 vendevano personal computer dalle forme e dalle funzioni più disparate, Tandy, Sinclair, Commodore, &lt;a href=&#34;https://melabit.com/it/2022/08/26/in-prima-linea-con-losborne-1/&#34;&gt;Osborne&lt;/a&gt;, Atari, Compaq, e così via.&lt;/p&gt;&#xA;&lt;p&gt;Ma senza il genio ingegneristico di Steve Wozniak l&amp;rsquo;Apple I e l&amp;rsquo;Apple II non sarebbero mai esistiti, quindi direi che siamo pari.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2025-08-18-steve-wozniak-75-anni-di-felicita/apple-ii.jpg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Fonte: &lt;a href=&#34;https://techcrunch.com/2014/11/04/nearly-40-years-later-steve-wozniak-still-brainstorms-ways-the-apple-ii-could-have-been-better/&#34;&gt;TechCrunch&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Il disinteresse per i soldi di Steve Wozniak è proverbiale. Se fosse stato per lui, avrebbe regalato il progetto dell&amp;rsquo;Apple I a chiunque glielo avesse chiesto. Dopo aver lasciato Apple negli anni &amp;lsquo;80 vendette o regalò la maggior parte delle sue azioni Apple, azioni che oggi avrebbero un valore stratosferico.&lt;/p&gt;&#xA;&lt;p&gt;Ma, come ha &lt;a href=&#34;https://yro.slashdot.org/comments.pl?cid=65583466&amp;amp;sid=23765914&amp;amp;tid=828&#34;&gt;scritto lui stesso&lt;/a&gt; nel giorno del suo 75° compleanno,&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Ho dato via tutte le mie ricchezze Apple perché la ricchezza e il potere non sono ciò per cui vivo. Mi diverto e sono felice. Ho finanziato molti importanti musei e gruppi artistici a San Jose, la città in cui sono nato, e mi hanno intitolato una strada per essere stato buono. Ora parlo in pubblico e sono arrivato in cima. Non ho idea di quanto possiedo, ma dopo aver parlato per 20 anni potrebbe trattarsi di 10 milioni di dollari più un paio di case. Non ho mai cercato alcun tipo di elusione fiscale. Guadagno con il mio lavoro e pago qualcosa come il 55% di tasse. Sono la persona più felice di sempre. Per me la vita non è mai stata una questione di risultati, ma di felicità, cioè di Sorrisi senza Cipiglio. Ho sviluppato questa filosofia quando avevo 18-20 anni e non mi sono mai venduto.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Woz ha ragione. Quando hai già 10 milioni di dollari (anche se in effetti dovrebbero essere 100) la tua vita non cambia se ne fai 20, 50 o 100 o 1000. Meglio, molto meglio divertirsi, godersi la vita ed essere felice.&lt;/p&gt;&#xA;&lt;p&gt;Se altri avessero la sua stessa filosofia il mondo sarebbe un posto decisamente migliore.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Setacciare numeri con il serpente</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/09/29/setacciare-numeri-con-il-serpente/</link>
      <pubDate>Mon, 29 Sep 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/09/29/setacciare-numeri-con-il-serpente/</guid>
      <description>&lt;p&gt;Anche se ho una collezione molto ampia di &lt;a href=&#34;http://atariage.com/forums/topic/167235-byte-magazine/&#34;&gt;scansioni in pdf&lt;/a&gt; di vecchi numeri di &lt;a href=&#34;http://vintagecomputer.com/history-of-byte-magazine.html&#34;&gt;BYTE Magazine&lt;/a&gt;, mi piace ogni tanto leggere qualche fascicolo preso in prestito dalla biblioteca dell&amp;rsquo;Istituto (del resto qualche tempo fa li ho salvati da una fine stile &lt;a href=&#34;http://it.wikipedia.org/wiki/Fahrenheit_451&#34;&gt;Fahrenheit 451&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Nonostante la mia passione per la tecnologia, infatti, ci sono dei casi in cui preferisco ancora l&amp;rsquo;analogico al digitale. Fra cui ci sono i libri e le riviste.&lt;/p&gt;&#xA;&lt;p&gt;Sfogliando un numero di BYTE dell&#39;89 dedicato a Unix, mi ha incuriosito una lettera sul famoso &lt;a href=&#34;http://it.wikipedia.org/wiki/Crivello_di_Eratostene&#34;&gt;Crivello di Eratostene&lt;/a&gt;, un algoritmo per calcolare i &lt;a href=&#34;http://it.wikipedia.org/wiki/Numero_primo&#34;&gt;numeri primi&lt;/a&gt; che ha più di 2200 anni. L&amp;rsquo;algoritmo funziona come un &lt;em&gt;setaccio&lt;/em&gt; (da cui il nome): elimina uno dopo l&amp;rsquo;altro i numeri composti lasciando alla fine soltanto i numeri primi.&lt;/p&gt;&#xA;&lt;p&gt;La lettera su BYTE introduceva all&amp;rsquo;&lt;a href=&#34;http://www.algorithmist.com/index.php/Prime_Sieve_of_Eratosthenes&#34;&gt;algoritmo &lt;em&gt;standard&lt;/em&gt;&lt;/a&gt; e ad una ottimizzazione ben nota, con la quale era possibile velocizzare il calcolo dei numeri primi senza complicarne più di tanto l&amp;rsquo;implementazione in &lt;a href=&#34;http://en.wikipedia.org/wiki/BASIC&#34;&gt;BASIC&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Il BASIC è stato il linguaggio di programmazione più popolare degli anni&#xA;80, gli anni della rivoluzione del personal computer. A quei tempi il BASIC era usato per interagire con il computer stesso &amp;ndash; ne costituiva di fatto il sistema operativo vero e proprio &amp;ndash; ed ha contribuito a formare le prime generazioni di programmatori che sviluppavano software per il nascente mondo dell&amp;rsquo;informatica personale. Non è un caso che sia la Apple che la Microsoft abbiano basato i primi prodotti proprio sul BASIC [1,2].&lt;/p&gt;&#xA;&lt;p&gt;Il listato originale in BASIC è mostrato qui sotto, in una forma (spero) più leggibile rispetto a quanto consentito dall&amp;rsquo;impaginazione di BYTE (oltre che dall&amp;rsquo;abitudine di quei tempi di compattare all&amp;rsquo;estremo i programmi per ridurre il più possibile l&amp;rsquo;occupazione della memoria). Il programma determina i numeri primi da 1 fino al valore impostato nella variabile &lt;code&gt;max&lt;/code&gt;. Per usarlo, bisogna anche impostare il valore di &lt;code&gt;root&lt;/code&gt; alla radice quadrata di &lt;code&gt;max&lt;/code&gt; (arrotondata ad un numero intero).&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;max=8192&#xA;root=90&#xA;DIM flags (max)&#xA;&#xA;FOR num=1 TO max&#xA;&#x9;flags(num)=TRUE&#xA;NEXT num&#xA;&#xA;FOR num=2 TO root&#xA;&#x9;IF flags (num) THEN&#xA;&#x9;&#x9;FOR mult=num*num TO max STEP num&#xA;&#x9;&#x9;&#x9;flags(mult)=FALSE&#xA;&#x9;&#x9;NEXT&#xA;&#x9;END IF&#xA;NEXT num&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Appena ho visto il programma ho pensato che sarebbe stato immediato tradurlo in &lt;a href=&#34;https://www.python.org/&#34;&gt;Python&lt;/a&gt;, un linguaggio che mi piace moltissimo e che considero il migliore compromesso fra potenza e facilità d&amp;rsquo;uso. Python può essere usato a più livelli, da &lt;a href=&#34;http://en.wikipedia.org/wiki/Procedural_programming&#34;&gt;linguaggio puramente procedurale&lt;/a&gt; fino a &lt;a href=&#34;http://www.codeproject.com/Articles/22769/Introduction-to-Object-Oriented-Programming-Concep&#34;&gt;linguaggio orientato agli oggetti&lt;/a&gt;, e quindi si presta bene ad essere usato per imparare i fondamenti delle programmazione.&lt;/p&gt;&#xA;&lt;p&gt;Nella prima traduzione in Python ho lasciato il più possibile inalterato il codice originale. Le piccole differenze sono dovute alle particolarità sintattiche dei due linguaggi. In Python esiste la funzione &lt;code&gt;max()&lt;/code&gt; e non si può usare lo stesso nome per una variabile, gli indici degli array iniziano da 0 e la funzione &lt;code&gt;range(0, N)&lt;/code&gt; crea una lista di numeri interi da &lt;code&gt;0&lt;/code&gt; fino a &lt;code&gt;N-1&lt;/code&gt;, e non fino ad &lt;code&gt;N&lt;/code&gt; come sarebbe immediato pensare.&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-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;num_max &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;256&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;root &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&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;flags &lt;span style=&#34;color:#f92672&#34;&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:#66d9ef&#34;&gt;for&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    flags&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(&lt;span style=&#34;color:#66d9ef&#34;&gt;True&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;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, root):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; flags[num] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&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:#66d9ef&#34;&gt;for&lt;/span&gt; mult &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(num&lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, num):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            flags[mult] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;False&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;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sieve of Eratosthenes between 1 and &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (BYTE-style): true/false map&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;(num_max))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print flags[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sieve of Eratosthenes between 1 and &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; (BYTE-style): prime numbers&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;(num_max))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; num &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, num_max &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&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:#66d9ef&#34;&gt;if&lt;/span&gt; flags[num] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print num,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alla fine ho aggiunto il codice per stampare i risultati del calcolo, mostrando prima il contenuto &lt;em&gt;grezzo&lt;/em&gt; dell&amp;rsquo;array (o meglio della &lt;code&gt;lista&lt;/code&gt;) usato per determinare se ciascun numero è primo o meno, e poi convertendo l&amp;rsquo;output in una forma più leggibile.&lt;/p&gt;&#xA;&lt;p&gt;Per provare il programma, basta copiare il codice in un editor di testo (come i soliti TextWrangler, TextMate, Atom, Brackets, o analoghi), salvarlo sul disco rigido con un nome qualsiasi (diciamo &amp;ldquo;sieve.py&amp;rdquo;), ed eseguirlo dal Terminale con il comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ python sieve.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1305&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;img src=&#34;http://melabit.files.wordpress.com/2014/09/sieve.png?w=605&#34; alt=&#34;Output delle traduzione in Python del programma originale in BASIC per il calcolo dei numeri primi.&#34; width=&#34;605&#34; height=&#34;375&#34; class=&#34;size-large wp-image-1305&#34; /&gt; Output della traduzione in Python del programma originale in BASIC per il calcolo dei numeri primi.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Si può provare a misurare il tempo di esecuzione del programma impostando la variabile &lt;code&gt;num_max&lt;/code&gt; ad un valore relativamente grande (e ricordando di modificare anche il valore di &lt;code&gt;root&lt;/code&gt;, che deve essere la radice quadrata di &lt;code&gt;num_max&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ time python ./sieve.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Per evitare di influenzare la misura è bene cancellare (o commentare) la sezione del codice contenente i comandi di stampa dei risultati, che sono molto lenti rispetto al puro codice di calcolo.&lt;/p&gt;&#xA;&lt;p&gt;Il mio iMac del 2008 impiega 0.025 secondi per calcolare i numeri primi fino a 10.000, e ben 22.5 secondi per arrivare fino a 25.000.000.&lt;/p&gt;&#xA;&lt;p&gt;Ma di questo parleremo più diffusamente un&amp;rsquo;altra volta.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;[1] Il primo software prodotto dalla Micro-Soft di Bill Gates e Paul Allen fu proprio un &lt;a href=&#34;http://startup.nmnaturalhistory.org/gallery/notesViewer.php?ii=75_4&amp;amp;p=00&#34;&gt;interprete BASIC&lt;/a&gt; per l&amp;rsquo;&lt;a href=&#34;http://en.wikipedia.org/wiki/Altair_8800&#34;&gt;Altair 8800&lt;/a&gt;, il primo microcomputer personale in assoluto. La storia è raccontata nel bel libro di Paul Freiberger e Michael Swaine, &amp;ldquo;Fire in the Valley: The Making of the Personal Computer&amp;rdquo;, McGraw-Hill, 2000, ed è riassunta molto bene &lt;a href=&#34;http://it.wikipedia.org/wiki/Altair_BASIC&#34;&gt;in questa pagina su Wikipedia&lt;/a&gt; (per una volta la versione in italiano di un articolo è allo stesso livello di quella originale).&lt;/p&gt;&#xA;&lt;p&gt;[2] Steve Wozniak, la mente geniale della Apple degli inizi, &lt;a href=&#34;http://archive.org/stream/byte-magazine-1984-12/1984_12_BYTE_09-13_Communications#page/n461/mode/2up&#34;&gt;scrisse da zero&lt;/a&gt; un &lt;a href=&#34;http://gizmodo.com/how-steve-wozniak-wrote-basic-for-the-original-apple-fr-1570573636&#34;&gt;interprete BASIC per l&amp;rsquo;Apple I e II&lt;/a&gt;, che diventò il più diffuso interprete BASIC degli anni &amp;lsquo;80, un vero riferimento a cui tutti gli altri interpreti BASIC cercavano di ispirarsi.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
