Decadimento radioattivo, backup e argomenti caldi
Le sostanze radioattive sono instabili e hanno la tendenza a trasformarsi in altri elementi. Nella trasformazione emettono radiazioni ionizzanti, capaci di interferire con l'ambiente circostante in vario modo. Tra l'altro, possono introdurre errori nella fase di riproduzione cellulare, aumentando la probabilità di tumori, quindi la prossima volta che vi offrono una barretta di uranio caramellata pensateci due volte prima di accettare. E se viene paventata la costruzione di una centrale nucleare dietro casa vostra, con Scajola che gestisce gli appalti e la Camorra che si occupa dello smaltimento delle scorie, cominciate a informarvi sulle opportunità di lavoro in un altro paese.
La tendenza alla trasformazione degli atomi instabili segue regole quantitative semplici, che si possono esemplificare così:
- si parte da un chilo di sostanza radioattiva (chiamiamola Developio), che per decadimento si trasforma in altro (diciamo Consultonio). Facciamo partire il cronometro;
- quando mezzo chilo si è trasformato, annotate il parziale T, tenete il mezzo chilo di Developio e buttate il Consultonio (che è inerte e servirebbe al più come fermacarte);
- dopo che sarà passato un altro intervallo T, saranno rimasti solo 250g di Developio;
- dopo altro T, ne avrete solo 125g
La quantità di Developio rimasto segue una legge esponenziale (1/2, 1/4, 1/8, 1/16 etc.) e il tempo T si chiama tempo di dimezzamento. Più instabile è l'elemento, minore è il tempo di dimezzamento e più veloce sarà la sua trasformazione.
Proprietà triangolare, sottilette e come arrivare a Fiumicino risparmiando 5 euro
Siamo nel punto A e dobbiamo arrivare al punto C, consumando un certo numero di risorse (tempo, soldi, benzina o altro). Se sappiamo come arrivare da A a un altro punto B e da B a C, sappiamo anche che, tra tutte le strategie possibili per arrivare a C possiamo scegliere quella di passare per B. Se abbiamo informazione sulle varie alternative, difficilmente ci convinceranno a seguire un percorso che sia più lungo di quello che passa per B.
Possiamo esprimere questo concetto con la disuguaglianza:
ovvero: il percorso più breve da A a C non può essere più lungo del percorso da A a B più quello da B a C. Può essere più breve, se B non è di strada, ma non più lungo. In mancanza di alternative migliori, infatti, possiamo scegliere di passare per B.
In geometria, questa relazione sussiste per i tre lati di un triangolo, ma la stessa cosa si verifica in molti altri ambiti in cui la distanza non è puramente geometrica.
Solving a Pycon puzzle... in Haskell
I was at Pycon Ireland last week-end. The event was quite successful and amazingly so considering it was a first for Dublin.
One of the highlights was one of those puzzles made of 13 plastic pieces to reassemble into a 4x4x4 cube (all pieces composed by 5 or 4 basic 1x1x1 cubes), brought by the guy at the Google stand. On Sunday, during the sprint session, the most successful one in terms of attendance and enthusiasm was an effort to solve the puzzle in python, cut short by the end of Pycon. The project seems to be ongoing at this time.
As the problem is very combinatorial in flavour, I thought the best tool for the job would be Haskell, which lends itself to concise expression of mathematical ideas. So I made an attempt at the implementation. Running it all night long gave me a few tens of solutions.
Some Haskell constructs are particularly interesting in the solution.
The monadic >>= operation for lists was used for the generation of all possible roto-translations of the pieces. If a function
f :: Bitmap -> [ Bitmap ] f bm = ... a certain list of Bimaps derived from bm ...yields a family of variations of a piece representation (for instance all translations, or all rotations around an axis), and g is another such function, then the expression
f bm >>= greturns all variations generated by g of all variations generated by f of the initial piece bm.
In the solution this is used in
-- All 24 rotations rotations bm = rotationsx bm >>= axischangex
which generates all the
Caccia ai prezzi con shell e xmlstarlet
Mettiamo che abbiate trovato un'offerta imperdibile in rete e che mentre state pagando vi venga mostrato un messaggio d'errore:Il sistema non può elaborare il vostro ordine. Vi preghiamo di riprovare
Ripetete diligentemente i passi. Stesso risultato. Finché tornate all'elenco prodotti e scoprite che l'ultima frullocentrifuga 18 velocità con 4 braccia orbitali controrotanti ora è in vendita a 8000 euro. Evidentemente l'ultima in offerta è stata comprata da qualcuno prima che portaste a termine l'ordine.
Niente da dire: non sarebbe furbo da parte del sito di e-commerce riservarvi il prodotto solo perché l'avete nel carrello e vi viene assegnato solo quando portate a termine il pagamento. E' come per l'ultima bomba alla crema che avete adocchiato al bar: se un altro riesce a raggiungerla per prima è sua e rimanete a bocca asciutta. Al più potete ripiegare su un cornetto integrale (nota: episodio capitato di recente all'autore).
Ci sarà un'offerta del genere nel prossimo futuro? E se ci sarà, riusciremo a scoprirlo in tempo e non all'ultimo momento? Ah, se avessimo un assistente personale che controllasse i prezzi ogni 10 minuti e ci avvertisse se i prezzi si abbassano...
Minimi locali e touch-typing
C'è una situazione ricorrente nell'esperienza umana, che si presenta in varie forme nella vita dei singoli e in quella collettiva.Un laureando in ingegneria vuole guadagnare un po' di soldi e passa il pomeriggio a lavorare in una copisteria. Così facendo, rallenta gli studi e comincia a lavorare sei mesi più tardi, perdendo nel complesso molti più soldi di quanti ne abbia guadagnati nel suo lavoretto part-time
Nel salto in alto, nel tempo ci sono stati piccoli miglioramenti tecnici e nelle prestazioni finché nel 1968 Dick Fosbury vinse i mondiali con il suo salto dorsale (volgendo la schiena all'asticella). La nuova tecnica si impose ed è ora universalmente adottata.
Un contadino vive in una vallata. Nel tempo e con sacrifici riesce a comprare il terreno più produttivo della valle. Poco al di là delle montagne ci sono pianure fertilissime di cui non conosce l'esistenza.
Queste situazioni hanno molto in comune con l'idea matematica dei minimi locali.
Gravatars: why publishing your email's hash is not a good idea
The guys at gravatar.com offer a nice service: for website owners, they let you automatically associate an avatar to your users, through the user's email address. The users who register to gravatars.com are able to change their gravatar and the change will be visible on all gravatar-enabled websites where they registered with the same email.
The association email -> avatar is done through a MD5 hash function. If you register to a website with username@mailprovider.com, the website will compute the hash of your email address (in this case 476c8a979eed603fb855dca149c7af6b) and associate the avatar url
http://www.gravatar.com/avatar/476c8a979eed603fb855dca149c7af6b?d=identiconto your profile. All other websites using gravatars will associate the same url to your profile, because the computation of
md5sum ( username@mailprovider.com )will always yield the same result.
Modelli di controllo di accessi come tipi Haskell
Prendendo spunto dalla lettura di uno dei miei blog preferiti, mi è capitato di dare una scorsa al documento intitolato A Survey of Access Control Models, che descrive modelli di controllo di accessi di complessità crescente. Questa complessità crescente si manifesta nella dipendenza da fattori intermedi sempre più ricchi e mi è venuta la tentazione di esprimere queste dipendenze come signature di funzioni in Haskell. Ecco cosa ne è uscito fuori.
Altri articoli
Debugging: croce e deliziaPillole di Haskell - ricerca di duplicati
Il paradosso di PHP
Storie di database: l'elefante, il delfino e la piuma
Conversione di HTML in PDF con OpenOffice e Word 2007
Per una tranquillità mentale
Insegniamo a programmare - liberamente
Il problema delle virgolette
Haskell: che tipo vuoi?
Grande e piccolo
Insegniamo a programmare - con la grafica
SVN remoto a costo zero
SVN su chiavetta per sviluppatori on-the-road
TortoiseSVN
Versionamento di database
Dipendenze esplicite
Salted Hash in PHP
Pillole di Haskell - un uso di id
Il mio Makefile - I
Si comincia!