SICP – cap. 1 – Costruire astrazioni tramite procedure – esercizi – 23

Amsterdam

Continuo da qui, oggi un altro esercizio, da qui.

Exercise 1.19: There is a clever algorithm for computing the Fibonacci numbers in a logarithmic number of steps. Recall the transformation of the state variables a and b in the fib-iter process [qui]: a ← a + b and b ← a. Call this transformation T, and observe that applying T over and over again n times, starting with 1 and 0, produces the pair Fib(n + 1) and Fib(n). In other words, the Fibonacci numbers are produced by applying Tn, the nth power of the transformation T, starting with the pair (1,0). Now consider T to be the special case of p = 0 and q = 1 in a family of transformations Tpq, where Tpq transforms the pair (a,b) according to a ← bq + aq + ap and b ← bp + aq. Show that if we apply such a transformation Tpq twice, the effect is the same as using a single transformation Tpq of the same form, and compute p' and q' in terms of p and q. This gives us an explicit way to square these transformations, and thus we can compute Tn using successive squaring, as in the fast-expt procedure. Put this all together to complete the following procedure, which runs in a logarithmic number of steps:

(define (fib n)
  (fib-iter 1 0 0 1 n))
(define (fib-iter a b p q count)
  (cond ((= count 0) b)
        ((even? count)
         (fib-iter a
                   b
                         ; compute q'
                   (/ count 2)))
        (else (fib-iter (+ (* b q) (* a q) (* a p))
                        (+ (* b p) (* a q))
                        p
                        q
                        (- count 1)))))

Unmmm… mumble – munble…😳

OK, per lo spiegone dettagliato c’è Bill the Lizard.
Una soluzione diversa da Ken Dyck.
Il sito comunitario SICP-Solutions (per me s-sol) propone due soluzioni, la seconda delle quali richiederebbe uno studio tutto per lei.
Il più sintetico di tutti è Weiqun Zhang, che si limita a indicare i valori di p' e q'.

OK, adotto Bill.

s36

e ottengo

s37

er una verifica veloce, ricordando che fib(n) = fib(n-1) + fib(n-2) posso calcolare fib(n-2) = fib(n) - fib(n-1) e per n = 1000 ottengo

s38

:mrgreen:

Google vs. Oracle

CY_NB8bW8AAe3GtLo so che ormai è vecchia ma forse è importante.
Lo so che sono niubbo –assay– ma voglio dire la mia anch’io: me too, nèh!
Inoltre sto scrivendo adesso, sabato mattina, se del caso aggiorno.

Jury finds Google’s implementation of Java in Android was fair use

Software developers can breathe a massive sigh of relief — a jury found today that Google’s implementation of 37 Java APIs in Android qualified as fair use.

OK, suona bene, ma continua:

However, Oracle attorneys have already indicated that they will appeal the decision.

Chissà; qualcuno ricorda SCO vs. IBM? Finito con la fine di SCO (e il supporto di Micro$oft). OK, questo è mio perso😉

Una cronaca più sceneggiata qui: Google beats Oracle—Android makes “fair use” of Java APIs.

Reuters dovrebbe essere imparziale, Google beats Oracle in $9 billion Android trial.

A U.S. jury handed Google (GOOGL.O) a major victory on Thursday in a long-running copyright battle with Oracle Corp (ORCL.N) over Android software used to run most of the world’s smartphones.

The jury unanimously upheld claims by Google that its use of Oracle’s Java development platform to create Android was protected under the fair-use provision of copyright law, bringing trial to a close without Oracle winning any of the $9 billion in damages it requested.

Drastico Extreme Tech, qui: Oracle loses massive fair use case against Google, Android.

Over the course of the trial, Google presented evidence showing that Sun, which created Java, had no problem with Google’s using it in Android, including testimony from Sun’s ex-CEO, Jonathan Schwartz. Oracle concentrated on the idea that Google’s use of Android had crippled Oracle’s ability to launch smartphones based on its own Java-based operating system, and that the search giant had unjustly enriched itself by not licensing Java.

Forse non seguo, per questo argomento, le persone giuste su Twitter, ho solo un paio di cinguettii, molto specifici, uno e due. Volendo approfondire sono sorgenti interessanti.

:mrgreen:

Visto nel Web – 237

Uh! ‘n’altra puntata di visto nel Web.
CihYIoIUYAAyhb6

Stroustrup: “Within C++, there is a much smaller and cleaner language struggling to get out”
#:linguaggi di programmazione
::: dullboy

The server software will be rewritten in Java
#:umorismo
::: JZdziarski

Haskell Tutorial for C Programmers
#:programmazione funzionale
::: HaskellWiki

Pentagon source goes on record against whistleblower program
#:sicurezza, spionaggio
::: the Guardian

Hey #openscience mavens, please comment on or correct this list of costs and benefits of open-sourcing code
#:free open source software
::: davidwhogg

946940_10201400321636449_930096728_n

Breath of fresh air
#:programmazione funzionale

::: Symbo1ics

The two simple rules for the Maker Movement
#:innovazioni, futuro
::: arduino

CodeWorld’s Big Decisions
sarebbe da commentare…
#:linguaggi di programmazione
::: Sententia cdsmithus

The Joy and Agony of Haskell in Production
#:programmazione funzionale
::: Stephen Diehl

Microsoft Urged to Open Source Classic Visual Basic
#:linguaggi di programmazione
::: Slashdot

cloud

Introducing clojure.spec
#:programmazione funzionale
::: Cognitect

bisect — Maintain Lists in Sorted Order
#:linguaggi di programmazione
::: PyMOTW-3

The surprising cleverness of modern compilers
#:linguaggi di programmazione
::: Daniel Lemire

Your Occasional Reminder to Use Plain Text Whenever Possible
vero, lo dico sempre anch’io😉
#:media
::: Knowing and Doing

Windows Phone Market Share Sinks Below 1 Percent
#:dispositivi mobili
::: Slashdot

Pythagorean Beer Caps

Plan to make programming mandatory at schools a step to foster creativity
#:programming, codice, snippet
::: The Japan News

Cray’s latest supercomputer runs OpenStack and open source big data tools
#:hardware
::: TechCrunch

Death of a Language Dilettante
#:linguaggi di programmazione
::: Programming in the 21st Century

Even Apple is acknowledging that the “iPads in education” fad is coming to an end
#:hardware
::: Quartz

creating app as easy as …
#:dispositivi mobili
::: WebReflection

usb

Windows 10 Upgrade Activates By Clicking Red X Close Button In Prompt Message
disperati?
#:sistemi operativi
::: Slashdot

Adesso vogliono tassare pure i link sui contenuti online
presto potrebbe essere la fine di Visto nel Web👿😈
#:Web, Internet #:ditte
::: CheFuturo

How one announcement destroyed the .NET ecosystem on Windows
#:Web, Internet #:sistemi operativi
::: Medium

Google Now Handles At Least 2 Trillion Searches Per Year
#:Web, Internet #:ditte
::: Slashdot

I found π using bash and Montecarlo method and it was shocking!
#:programming, codice, snippet
::: Extended Reality

f4c9674f5194e96c8f0082f2f0f132b2

Today I launched uLisp, my compact #Lisp interpreter for the Arduino Uno and other boards
#:lisp e derivati
::: johnson_davies

Google To Bring Official Android Support To the Raspberry Pi 3
#:hardware #:sistemi operativi
::: Slashdot

US Military Uses 8-Inch Floppy Disks To Coordinate Nuclear Force Operations
#:hardware
::: Slashdot

The Path to Rust
vero; se il programma è grosso Rust va considerato, secondo me
#:linguaggi di programmazione
::: Jon Gjengset

Today’s New York Times: Obama and Clinton are wrong: today’s whistleblower protections are “worse than a dead end.”
#:sicurezza, spionaggio
::: Snowden ::: democracynow

errors

Gira sta roba
#:frodi
::: CBlengio

Announcing Rust 1.9
#:linguaggi di programmazione
::: The Rust Programming Language

Get Ready To Be Bombarded With Ads When Using Google Maps
#:spam
::: Slashdot

Microsoft and Facebook Building Underwater Transatlantic ‘MAREA’ Data Cable
#:hardware #:Web, Internet
::: Slashdot

A Third Of New Cellular Customers Last Quarter Were Cars
#:dispositivi mobili
::: Slashdot

sac160525

Big Data e sicurezza: linee guida e prospettive future
#:sicurezza, spionaggio
::: Tech Economy

Book by Simon Peyton Jones and Philip Wadler available free online Impl of Func Prog Langs
#:programmazione funzionale
::: BDTypeaholic

Buon compleanno WordPress!
#:Web, Internet
::: WordPress

All European Scientific Articles To Be Freely Accessible By 2020
#:free open source software
::: Slashdot

Someone In North Korea Is Hosting a Facebook Clone
#:social media
::: Slashdot ::: Slashdot

13244863_559380810911010_6514018791441701012_n

Windows 10 col trucco e con l’inganno?
#:sistemi operativi
::: Tech Economy

Frinkiac animated gifs are a total game-changer
#:programming, codice, snippet
::: joelgrus

Just updated #rustlang to 1.9 version:-) Few seconds to be ready to roll \o/
#:linguaggi di programmazione
::: xetibor

Intervista a Lessig, ex candidato alla Casa Bianca: “Ho perso la mia battaglia contro la corruzione politica, ma bisogna continuare a provarci”
#:copyright
::: la Stampa

Millennials Value Speed Over Security, Says Survey
#:sicurezza, spionaggio
::: Slashdot

Mark Zuckerberg Is Dictator Of Facebook Nation; There’s No Democracy Online: The Pirate Bay Founder
#:social media
::: Slashdot

weather reports Poly

Dov’è? ovvero differenze con Windows

n2Ieri ho scoperto che un piccolo tool che avevo scritto nel 2006 e completamente dimenticato è ancora vivo e usato😀

w1
È una cosa semplicissima, rileva la lista dei dischi montati (quelli con una lettera seguita da due-punti) e restituisce quello che nella radice ha il file con il nome specificato. Siccome allora ero giovane l’avevo scritto in Delphi e dev’essere stata una cosa volante, l’ho completamente dimenticato. Fino a ieri.

Ora per cose normali con Linux c’è whereis:

w2

che potrebbe anche essere configurato per casi speciali:

w3

Cose che con Windows sono (o erano?) possibili qui sono giustamente vietate, per elementari ragioni di sicurezza:

w4

Per il resto non dovrebbero esserci problemi

w5

e il nome dell’utente corrente può essere rilevato con uno di questi due modi (o altri ancora, forse)

w6

Programmatically (or scrptically), disks.py:

import os

mdir = "/media/" + os.getenv("USER")
print("mdir =", mdir)
disks = os.listdir(mdir)
print("disks =", disks)

w7

:mrgreen:

Voglio diventare bravo come Joel

joelPrima di cominciare: questo è un post diversamente serioso, scritto mentre aspetto il boss che passa a prendermi per una intensa giornata in giro per Torino. Ma dipende da voi, dal vostro spirito (mood) del momento, che è poi quello che mi fa scrivere questa nota, dopo aver followato Joel su Twitter.

È decisamente facile, tutto in Python, tranquillo, sempre lineare logico e comprensibile. Vero che il codice (disponibile su Github) deve ancora essere ritoccato, piccole modifiche ma il grosso è fatto.

Joel d’ora in poi sarà uno dei miei modelli, forse anche il blog ne risentirà, in meglio.
Forse anch’io userò la REPL che usa lui, in genere io sono per la più semplice che c’è ma forse la specializzazione quando si supera (o si tende a raggiungere) un certo livello di post-niubbaggine è utile e remunerativa.

Insomma non voglio farla lunga, andate sul blog di Joel Grus, qui: Fizz Buzz in Tensorflow. Ah, non so se avete notato: quando merita i commenti arrivano, tanti😀

SICP – cap. 1 – Costruire astrazioni tramite procedure – esercizi – 22

CfQUlODXIAAB4FW

Continuo da qui con gli esercizi, qui.

Exercise 1.18: Using the results of exercises 1.16 and 1.17, devise a procedure that generates an iterative process for multiplying two integers in terms of adding, doubling, and halving and uses a logarithmic number of steps.

C’è anche una nota di cultura generale, quelli di SICP sono prof tosti (la stessa cosa la faceva a volte il mio relatore per la tesi): This algorithm, which is sometimes known as the “Russian peasant method” of multiplication, is ancient. Examples of its use are found in the Rhind Papyrus, one of the two oldest mathematical documents in existence, written about 1700 B.C. (and copied from an even older document) by an Egyptian scribe named A’h-mose.

Gli esercizi citati sono qui e qui.
Al solito ecco le soluzioni dei miei maestri:

  • Bill the Lizard, chiaro e didascalico;
  • Ken Dyck, un po’ frettoloso;
  • S-sol, di fretta anche lui;
  • Weiqun Zhang, anche lui, ma –al solito– cura il codice, definisce locali le procedure di servizio.

s35

Confessione: occorre fare le prove con carta e penna (sarebbe anche meglio carta, matita e gomma), alla fine viene “ah!”😉

:mrgreen:

Personalizzazioni, tools divertenti e ricordi

binaryUn post di quelli che vengono navigando il Web durante un viaggio lungo; devo avere anch’io il telefono che fa tutto, anche questo.
Comincio con una cosa che sul Pr1me (il mio primo ‘puter, un mini simile al PDP-11 ma completamente diverso) era semplicissimo, l’avevo attivato dopo un paio di settimane, tempo di arrivare lì leggendo il manuale.

Sto parlando di questo post: Making your command line more helpful and fun!
Anche se vi consiglio di non farlo, non funziona come dovrebbe. Ma ci sono i codici ANSI/VT100 per i colori.
Il sito di Sandra (ehi! su ComputerWold, roba di quando ero giovane!) è pieno di notizie, consigli e curiosità. Qualcuno usabile. Visto che si ho passato quasi un ora adesso provo.

Per esempio figlet:

p0
e finalemte

p1
Viene da qui, dove ne trovate altri, lollosi😉
E che dire del countdown (anche questo è una variante di qualcosa di simile esistente su Pr1me, fatto dall’amico Giòrs, o era Ugo? o Dom? o chi?)
Una cosa che tutti i vecchi sanno: EZ conversions on Unix.

Il guaio è che sono troppo vecchio e so la risposta a What’s so special about 2147483648?

Era il fratello maggiore di un vero incubo, 32768:

p2
Ai miei tempi gli interi in Fortran IV (o 66) erano di 2 bytes, con un bit riservato per il segno e l’overflow era sempre in agguato. Il Pr1me (in realtà tutti) consentivano di usare gli interi di 4 bytes, cosa poi diventata di default con il Fortran 77. Comodo, allontanava (praticamente evitava) l’overflow. Ma dovevi fare attenzione ai Common quando modificavi codice esistente. Non ditemi che non sapete cos’è un common, dovete essere proprio giovani!😀

Questo post è un side-effect di cosa sta macchinando Flavio, the MfM, prossimamente vedrete😀

OK, torno alle cose serie –o seriose:mrgreen:

Roba da Museo

C’è questa iniziativa che davvero deve risolversi positivamente. Il MuPIn cerca una sede, e ri$orse, merita davvero. E diventerà una cosa di cui noi torinesi, piemontesi et al. potremo vantarci.
Sono stati loro che hanno organizzato un evento riuscitissimo, due giorni di appassionati con meraviglie tutte più giovani di me ma tutte ormai quasi introvabili. Ma se nasce il MuPIn lì si troveranno, à la eureka! (cit.)😀

2737
Io ci sono stato sabato, eccomi, a destra, con Marco Bruno.
Due cose: 1) sì mi è venuto uno sfogo, come si vede nella foto; e 2) sì ero appena arrivato, accaldato, stavo tentando di togliermi il giubbotto ma sapete come sono i fotografi…😳

E pensa te il prof Roberto Dadda

Elia Bellussi, Roberto Dadda, Andrea Poltronieri.

Elia Bellussi, Roberto Dadda, Andrea Poltronieri.

2759-0
HP9821A, OS: hpbasic, Memoria: 421 registri, c’era a Geotecnica al Poli quando ero studente, anni ’70.

cray
Scheda Cray C90-4 384 MB

2759-2
MacIntosh 512 autoassemblato, 512 KB. Lo chassis è di un hard disk HP, pesantissimo, l’immagine la prima barca di Giulia Bruno.

13
Commodore Amiga e

14
Atari di cui chissà dove ho messo gli appunti😳
Manca la foto del TI99/4A, di cui, prima o poi, vi racconterò…

2762
Adesso qualcosa di nuovo di pakka…

2764
sì, i robottini, con Arduino dentro

2765
e –forse– siamo in via di superamento delle discriminazioni di genere

2772
Tornando a noi il display del 9821, con un numero mysteryousassay

2778
La P101, anche qui numero già visto, chissà cosa mi rappresenta?

2786
l’hanno aperta!

2751
Ah! e questa?

2779
dai, difficile: anticipo ma poi il Marco ci racconterà (non si sa ancora dove, probabilmente al MuPIn): è l’amplificatore di lettura della linea magnetostrittiva😳 tutto chiaro, vero?

Un po’ di link, ma poi ci saranno altri post anche qui su questo blog.

Parecchie delle foto qui sopa le trovate su Facebook, qui.
Sempre il MuPIn su FB, e il suo sito qui. E prossimamente avrà una sede😀
Archeologia Informatica.
ITIS Enrico Fermi, Bibbiena, interessantissimo, sono loro che hanno l’ELEA. Se recupero le foto le posto. Li trovate anche qua.
ITIS Pininfarina di Moncalieri; ho parlato con un giovane prof davvero smart, purtroppo non ho il nome. I ragazzi avevano un robot davvero smart (cioè mi sono incantato a vederlo girare finché hanno chiamato la neuro).
Della P101 ho già raccontato, cose personali, qui.

Continua, prossimamente, forse:mrgreen:

SICP – cap. 1 – Costruire astrazioni tramite procedure – esercizi – 21

ChyProseguo, un passo per volta, da qui oggi un nuovo esercizio, qui.

Exercise 1.17: The exponentiation algorithms in this section are based on performing exponentiation by means of repeated multiplication. In a similar way, one can perform integer multiplication by means of repeated addition. The following multiplication procedure (in which it is assumed that our language can only add, not multiply) is analogous to the expt procedure:

(define (* a b)
  (if (= b 0)
      0
      (+ a (* a (- b 1)))))

This algorithm takes a number of steps that is linear in b. Now suppose we include, together with addition, operations double, which doubles an integer, and halve, which divides an (even) integer by 2. Using these, design a multiplication procedure analogous to fast-expt that uses a logarithmic number of steps.

Introduco qui una nota personale, forse necessaria per chiarire il senso di questi post. Intanto –mi ripeto– il Lisp è poter fare finalmente quello che avrei voluto fare 40 anni orsono ma non c’era il tempo (e i mezzi). Venendo agli esercizi il bello è provare, pasticciare nella REPL e poi “metterli in bella”. Se hai fatto bene le cose, provando e riprovando, limando, aggiustando, … ottieni risultati che assomigliano a quelli dei nerds che linko. Loro sono forse più bravi, o più motivati, o –chissà😳
Per cui ecco:

Adesso verrebbe da chiedersi chi ha copiato chi, ma forse no, quando il problema è semplice la soluzione tende a essere “quella”😀

s34

Altra considerazione scema personale: dove lo trovate un altro linguaggio che vi permette di ridefinire quasi tutto?😳🙄

:mrgreen:

Olivetti P101

Ieri, sabato 21 maggio, ho avuto un’esperienza mistica di quelle che nemmeno Sua Pastosità il Prodigioso FSM (sempre sia condito, RAmen) riuscirebbe a indurre.
È successo poco dopo le 11, alla mostra A Bit Of [Hi]Story, che avevo annunciato qui e di cui riferirò dopo aver riordinato materiale e idee.

Ma subito l’incontro sconvolgente, questo:

23

click per ingrandire

Bella come nuova, ricordo perfettamente quando l’ho usata nel 1970, ero giovane e lei anche. A dire il vero eravamo in due studenti che preparavano un’elaborazione in cui si dovevano fare parecchi calcoli, precisi, non bastava il regolo calcolatore. Il padre del mio amico era rivenditore di questa meraviglia. Ricordo perfettamente il corso che ci ha fatto: non toccate questo, questo e quest’altro e tutta questa zona, se c’è qualche problema telefonatemi qui, il rotolo di carta dovrebbe bastarvi, …

Ieri c’era perfettamente funzionante. E con i programmi, eccone uno:

24

click per ingrandire

In realtà questa è la custodia della scheda; la scheda è una cosa inventata per la P101, un antenato del floppy.

A raccontare tutta la vera verità mi accorgo che l’esperienza mistica ha intaccato parecchio la razionalità: ho una foto, questa:

25
Ci sono un paio di link: mib.bibbiena.org,sito non ancora operativo e www.elea9003.it tutto da navigare.

Se non ho frainteso il mio interlocutore è stato Wladimir Zaniewski (toscano di Polonia), sul suo sito trovate tante cose, tra le quali la P101.

Adesso, conscio delle mie lacune di ieri, invio una mail, poi se del caso rettifico errori e imprecisioni.
Nel frattempo mi riprendo, forse😀

Aggiornamento
Waladimir ha risposto subito alla mail, riporto:

Sono contento dell’emozione che da questa macchina ricca di storia da raccontare.

Per quanto riguarda imprecisioni tecniche non ve ne sono, l’ unico appunto è su di me, sono toscano di Arezzo, il cognome deriva da un nonno polacco che ha combatto in Italia contro i tedeschi.. ma questa è un altra storia.

Poi dovreste fare come me, RSSare il suo blog: Archivio Zaniewski, Collezione privata di Retrocomputing e Retrogaming.

:mrgreen:

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Segui assieme ad altri 93 follower