mercoledì 21 giugno 2017

Zappando si impara l'ingegneria

Perso un bullone, per un caso di vibrazioni trasversali:


Spiegazione tecnica:


Riferimenti tecnici:

venerdì 16 giugno 2017

Meridionalità

"Lurido coniglio, lasci i rifiuti dove cresce tuo figlio" - notare il font da ultrà dello stadio:

"Carciofi fragole 3 € x cassa": il simbolo dell'euro pare più truce di quello di Quake 3 Arena. Notare anche la fuméta dello scappamento del ciclomotore: ci sono tracce di benzina in quell'olio bruciato:


"Ogni mattina ci svegliamo pensando a te": ma non hanno pensato che per avviare il DVD occorre premere il tastino...


Emporio ambulante: forbici, tappeti, detersivi, imbuti, scopini per il wc... eccellente la soluzione ingegneristica del corridoio centrale e quella del telone ripiegabile.


Notare lo pneumatico che grida "pietà, aiuto!":

martedì 13 giugno 2017

Il mito del Programmatore

* Il mito del Programmatore

Il popolo bue crede che il software e i siti web siano realizzati dal Programmatore (alias Developer, alias Software Engineer, alias Sviluppatore, alias Coder, alias...) figura leggendaria mitologica che picchietta sulla tastiera come un pazzo e cinque minuti dopo magicamente compare tutto perfetto e funzionante, anche le cose che il committente non aveva ancora immaginato. Questo equivoco è talmente diffuso che perfino nelle aziende vige spesso la stessa creduloneria.

In realtà nella realizzazione del software ci sono diversi ruoli - con annessi problemi quando una singola persona ne riveste più di uno.

Commerciale: quello ingiaccato e incravattato che va dal cliente a fare mercato delle vacche poiché non capisce niente di software, programmazione, ecc., ma è bravissimo a dire paroloni elegantoni (buzzwords).

Programmatore: bassa manovalanza, quello che materialmente scrive il codice del programma o del sito web. Uno o più programmatori costituiscono un "team di sviluppo". Quando uno ha esperienza quasi zero o non capisce niente, viene qualificato sprezzantemente come junior. Per venire incontro al mercato le università hanno creato le "lauree brevi" in informatica in modo da sfornare molti junior; le lauree "lunghe" sono quelle in cui il programmatore capisce che il software che scrive deve non solo essere compilabile senza errori ma dovrebbe almeno un po' funzionare.

Tester: l'incaricato di collaudare i componenti software appena sviluppati o modificati, verificare se funzionano secondo i requisiti, provare a usare casi limite per vedere se vengono gestiti o si inceppa tutto... insomma, trovare i bug e documentarli per far richiedere le correzioni necessarie. Uno o più tester costituiscono un "team di collaudo". Qualifica che, quando esiste, viene rifilata agli incapaci o alle donne (comico ma vero) perché è il lavoro più meccanico e noioso.
Il guaio è che per essere un buon tester occorre anzitutto essere un buon programmatore, per sapere subito quali errori si possono commettere nello scrivere codice e quali test strani ma non irragionevoli bisogna fare.
Barzelletta: un tester va al bar. Ordina una birra. Ordina quattro birre. Ordina zero birre. Ordina 65536 birre. Ordina -1 birre. Ordina 5*3+17 birre. Ordina “ªΩÞ³ıÆ⅝” birre. Ordina ';drop table ordini;' birre. Ordina due birre ben calde.

Designer (o molto più spesso programmatore senior): alta manovalanza, quello che scrive le parti più delicate del programma. In genere è uno che conosce la differenza fra complessità lineare ed esponenziale, sa quando è il caso di lavorare su disco o in memoria, sa quando è meglio usare bitmap piuttosto che stringhe, sa maneggiare con dimestichezza puntatori ai puntatori, ecc. (n.b.: tutte cose normalmente ignorate da chi lo ha assunto). L'attitudine, nel mondo dell'informatica, è di dargli la stessa paga di uno junior (sai, l'azienda non può permettersi troppo, ma poi cresceremo insieme, avrai opportunità e visibilità, ecc.).

Project Manager (più in genere: PM): quello che deve continuamente ripulire il progetto da incrostazioni come requisiti ambigui o irragionevoli, far implementare le features previste dalle specifiche, far correggere i bug e le vaccate, assicurarsi che ogni parte del programma abbia i propri test (e che vengano superati tutti), faccia completare le parti incomplete, si assicuri della qualità e manutenibilità del codice, faccia l'analisi dei rischi laddove necessario, ecc. Praticamente non scrive codice e non fa i test, per cui molti programmatori aspirano a diventare PM illudendosi di poter comandare e spadroneggiare... e quelle rare volte che ci riescono si accorgono che a causa delle troppe urgenze non se li caga proprio nessuno.
Si presume che un PM sia almeno un esperto programmatore, designer e tester, capace di valutare il codice, i test, le soluzioni escogitate, e suggerire cosa fare e cosa non fare, e avere sempre ben chiari i tempi di sviluppo e collaudo. Si presume, appunto.
System Architect: figura presente solo nelle Grosse Aziende™, colui che guida i vari PM e stabilisce come vanno integrati i progetti tra loro; una sorta di super-PM.

System Analyst: quello che traduce i desiderata del cliente in componenti software/web da sviluppare e li descrive in maniera formale e chiara per i PM e per i sottoposti. Da ciò è anche in grado di stabilire tempi e costi e di suggerire modifiche/aggiunte al progetto. In teoria dovrebbe imporsi in modo furioso e brutale ai Commerciali per evitare che questi ultimi vendano al cliente soluzioni impossibili da realizzare nei tempi e modi previsti.

Nota bene: le figure dai titoli ampollosi (Lead Senior Architect Manager Chief Executive Vice President Analyst...) servono solo per dire "non ti do un aumento di stipendio ma ti potrai vantare su Linkedin di essere qualcuno importante qui dentro".


* Il tipico guaio: due o più incarichi alla stessa persona.

La figura dell'Analista Programmatore, cioè dell'esperto creativo capace di fare tutto da solo (dall'Analyst al Programmatore, appunto) tranne la parte commerciale, è una figura mitologica leggendaria inventata da certe aziende italiane che volevano risparmiare sugli stipendi. Fin da quando ero ragazzino, infatti, ho sempre trovato gente che mi dice: "Ma tu Perché Non Fai Qualche Grosso Programma e Lo Vendi?"
("Anche mio Fuiglio, ma non perché mio Fuiglio, è Muolto Bruavo con Guìndous Nuovanta Ciuinque!")

Infatti quando la stessa persona ha due o più incarichi, sono guai. Per esempio:

- il System Analyst è anche il Commerciale: dunque diventa irragionevolmente ottimista sui tempi e modi di realizzazione;

- il Programmatore è anche Tester: dunque scrive e modifica programmi senza provarli per bene, specialmente se il tempo è scarso e il cliente scalpita;

- il Project Manager è anche System Architect/Analyst: dunque tenta di ridurre i test in modo da risparmiare tempo necessario allo sviluppo...

- il PM è anche System eccetera e Commerciale: dunque applica il mercato delle vacche alla realizzazione del software ("Presto! Presto! è pronto? Presto! a che punto siamo? Presto! Presto! basta che regga in piedi, poi lunedì ricontrolliamo!").


Caso estremo: il team di sviluppo software è così composto: quattro figure Lead Architect Senior Specialist Solutions Manager, tre Commerciali, un PM, e un Programmatore che funge anche da Tester, Designer, System Architect, System Analyst. "Allora, è pronto?"




Conclusione

Domanda (fatta con voce sgomenta): ma... ma tu dove hai lavorato?

Risposta: in Italia.

mercoledì 7 giugno 2017

Aggiornamenti di oggi



Aaah! un bel caffè lungo nella mug LEGO!!

martedì 6 giugno 2017

Promemoria: sforacchiatrice LEGO

Ecco un potente video della macchina sforacchiatrice che esibirò ai prossimi LEGO-fest di Lecco e di Santa Maria del Cedro:

sabato 3 giugno 2017

Gran Turismo: sono ricco!

Dopo quasi vent'anni realizzo uno dei miei sogni: diventare SUBITO RICCO in Gran Turismo ancor prima di cominciare a correre.

Materiale occorrente:
- emulatore PlayStation 1 da command-line: Mednafen
- immagine ISO (e relativo CUE monotraccia) di Gran Turismo del 1998
- immagine ROM europea della PlayStation 1 (Mednafen preferisce scph5502.bin)

Procedimento:
- lanciare l'emulatore: mednafen -sounddriver sdl gran-turismo.cue
- comprare un'auto usata
- annotare i soldi rimasti, nel mio caso 3240$, cioè in esadecimale 0x00000ca8, alias "a8 0c 00 00" in little-endian
- restare in un menu dove si vedono $OLDI € $OLDI
- premere F5 per salvare un machine-status
- da un'altra finestra:
cd ~/.mednafen/mcs
cp gran-turismo.*.mc0 state.gz
gunzip state.gz
hd state | grep "a8 0c 00 00"
Se la quantità di soldi è un numero abbastanza bizzarro, comparirà solo una volta (non ho usato il default 10000 perché il suo aspetto esadecimale "10 27 00 00" è troppo comune), allineato a 32 bit (cioè ad un indirizzo che sia multiplo di quattro bytes). Nel mio caso era a 0x0eca2c:

000eca20 00 00 00 00 01 04 00 00 51 00 00 00 a8 0c 00 00 |........Q.......|


Lancio dunque hexedit per diventare ricco ma non troppo, e trasformo quel valore "a8 0c 00 00" in "a8 0c 05 00" (quel cinque, moltiplicato 65536, darà 327680$ in più) ai tre indirizzi trovati.

A questo punto aggiorno il file di stato:
gzip < state > gran-turismo.*.mc0

Dall'emulatore premo quindi F7 e ricarico lo stato e... sono ricco! 330mila dollari in cassa!


Compro dunque una Subaru Legacy Touring Wagon, la macchina su cui mi sono fatto le ossa vent'anni fa, un vero carro funebre: è una 4x4 di 1430 kg, quattro cilindri 2000 turbo da 276 cavalli. Nel menu STi compro tutti gli optional da competizione (goduria!), inclusi "tripla frizione", "kit per turbina IV" (c'è scritto proprio turbina), perfino i colori di gara in tinta pacchiana a striscioni di giallo! (a questo punto ho già finito i soldi, ma niente paura: faccio un'altra rapina come sopra descritto, ed eccomi di nuovo a 430mila dollari!)


Il cascettone si è ridotto a 1029 kg ed è stato portato a quasi cinquecento cavalli. Sono pronto a farmi una corsetta...

giovedì 25 maggio 2017

Putin swag

Importante: come Putinizzare la propria cameretta e i propri ambienti:

Copriletto Putin

Computisteria Putin e quaderno Putin

Tappeto Putin

Anello Putin,
molto più feroce dei soliti anelli con teschio

SuperPutin e BabboPutin

Calzini Putin

Teiera Putin e servizio sale-e-pepe Putin

Action Figures Putin

Action Figure Putin

Cioccolato Putin: fondente, normale, al latte

Icona Putin, mug Putin, carta da parati Putin

Action Figure Putin

Gran finale: decorazioni per alberoPutin di NatalePutin

mercoledì 24 maggio 2017

Malvivente mascherato inseguito e arrestato!

Giappone: malvivente mascherato che ha appena rapinato una gioielleria fugge a piedi, venendo ripreso da un reporter che per puro caso era in zona. L'arresto avviene a 45 secondi del video.

Piccola domanda: ma perché corre come una ragazzina?

Il poliziotto che lo arresta non è meno imbranato. Soprattutto, dopo il furioso inseguimento, non ha la minima goccia di sudore, e la camicia è perfettamente stirata e inamidata.



E sì, non è una messinscena, è tutto vero

martedì 23 maggio 2017

mercoledì 17 maggio 2017

Limoncello fatto in casa

Dopo il liquore ai kumquat, ora tocca al limoncello: 40 giorni a bagno in alcool 96°, poi filtraggio (vedi sotto), e quindi un'altra settimana di riposo prima di poter degustare. Slurp!


La bottiglia è quella che conteneva l'alcool, e i limoni sono quelli biologici arraggiàti staccati da me medesimo in persona.

martedì 16 maggio 2017

Pizza uà, watashi uà

Orrore, orrore: i primi venti secondi di questo video fanno rabbrividire!

lunedì 8 maggio 2017

sabato 6 maggio 2017

Bicicletta incatenata ai sostegni del treno!

Scenette da circumvesuviana: un extracomunitario nero (sulla destra della foto) in giacca e cravatta, incatena la sua bicicletta ad uno dei sostegni passeggeri, dà un'occhiata rapidissima dall'altro lato, e viene immortalato mentre torna a controllare che la bicicletta sia ancora lì.


mercoledì 3 maggio 2017

"Tanto non passa nessuno!"

Genialata: sciacquare lo scaletto in mezzo alla strada.


martedì 2 maggio 2017

La verità fa male

PROGRAMMAZIONE -- è uno dei rami più difficili della matematica applicata; pertanto i matematici meno abili è meglio che restino puri matematici.

FORTRAN -- cioè "il disordine infantile", non ha alcuna speranza di essere adeguato per una qualsiasi applicazione che abbiate in mente oggi: è incasinato, è rischioso, è troppo impegnativo.

BASIC -- è praticamente impossibile insegnare la programmazione a chiunque abbia avuto a che fare col BASIC in precedenza: come programmatori sono mentalmente mutilati al di là di qualsiasi speranza di rigenerazione.

COBOL -- il suo utilizzo inquina la mente; insegnarlo è un'attività criminale.

COMPETENZA -- un programmatore competente non ha solo buone conoscenze matematiche, ma padroneggia la propria lingua nativa.


prof.dr.Edsger W.Dijkstra, giugno 1975

domenica 30 aprile 2017

La Juve ha sempre rubato le partite...

...per cui devi anche stare attento a dove metti i piedi!


domenica 23 aprile 2017

QRcode indirizzo blog in LEGO

La superficie di un QR-code con correzione minima è di 21x21 pixel per un link fino a 17 caratteri (incluso lo spreco di "http://"), con più caratteri sprecherebbe più spazio (e dunque più pezzi LEGO) per cui ho provato un po' di URL shorteners per abbreviare https://particolarmente-urgentissimo.blogspot.com ed il risultato è questo:
Tinyurl esiste da quindici anni e ormai è difficile trovare una sequenza più breve di quella random suggerita di default.
Questi sono da prendere a pedate: URL cortissimo e hash chilometrico, cioè non vogliono intrusi perché serve solo per le loro apps Hoot Suite (che peraltro facevano cagare).
Questo è il servizio di Twitter, che però in pochi anni ha creato uno sproposito di hash anche su URL ripetuti più volte poiché (mica fessi) ci fanno statistica (quando creato, da quale IP, usato da chi...).
Non male, ma siamo ancora troppo larghi.
Anche questi sono da prendere a pedate perché prepongono una schermata di conferma della cliccata, considerando "spam" i blog della piattaforma Blogspot appartenente all'odiata Google.
Ahimé, lo shortener di Google (cioè quello che più sicuramente durerà fino alla fine di internet) è di 20 caratteri.
Lo shortener Bit.Do permette di scegliersi sequenze cortissime, anche di 3 o 4 caratteri, e siccome "alf" era già usato da un tale Alfredo Luzon che non ha più il sito, ho dovuto aggiungere una lettera e salire così a 18 caratteri, che è ancora troppo.
Finalmente! Dopo qualche tentativo con le lettere più improbabili scopro che la combinazione xq3 non era stata ancora usata e quindi ho finalmente un URL sufficientemente corto

Fuori classifica ci sarebbe anche x.co, lo shortener del provider Godaddy, che permetteva sequenze di quattro lettere casuali (avrei ridotto a 16 caratteri), ma i furbacchioni hanno deciso che il servizio è utilizzabile solo da chi compra loro prodotti.


Dunque inserisco http://bit.do/xq3 in uno dei tanti siti che permettono di creare un QRcode (tipo goqr.me), lancio il LEGO Digital Designer e ricopio il disegno (c'è voluto meno a ricopiarlo a mano che a cercare una di quelle utility che ti chiedono il link e ti generano il progetto già pronto, inoltre ho tentato di sfruttare al massimo le flat tile nere che già ho a stock) e il risultato è questo:


E naturalmente ha funzionato al primo colpo, scandendolo così, dallo schermo del PC al programmino mBarcode del cellulare:


venerdì 21 aprile 2017

giovedì 20 aprile 2017

Cavalleria Rustica

Foto 1, cliccare per ingrandire: "Quiz patente: indovina chi intralcia l'incrocio":


Foto 2: osservare l'ombra, il cavallo sta letteralmente volando:


martedì 18 aprile 2017

The Almighty ComputerMan in the SuperMarket !!!

Giacca. Cravatta. Computer portatile poggiato sul cestone "gruppo tre calze tennis" (in modo che se ne perdi una te ne resta una di scorta). Cuffie iPhone con musica comprata su iTunes. Connessione wifi del supermercato. Zaino poggiato a terra con batteria esterna USB per il telefonino, ricaricabatterie del notebook, vari gadget USB indispensabili quando si è in giro. Aria estremamente professionale.

Secondo me sta controllando se i calzini in offerta a 3,99€ si trovano su Amazon a 3,49€, in modo da risparmiare comprandoli on-line.


venerdì 14 aprile 2017

Come godo!! Huzzah power in my hands!

Ho comprato questi Adafruit Huzzah, microcontroller con wifi (sia client WPA2 che accesspoint, basato su ESP8266) a 80 MHz, con alimentazione da batteria 3.7V (e da USB con ricarica) e nove pin GPIO (alcuni dei quali rimappabili in una SPI e una I²C).

A bordo c'è già installato il firmware NodeMCU basato su una versione semplificatissima del linguaggio scripting Lua (per cui non ho neppure bisogno di usarlo in modalità Arduino) con tanto di prompt comandi sulla seriale USB.


L'applicazione-tipo è questa:
  • sempre connesso alla wifi di casa
  • ogni tot secondi legge il valore dei pin
  • invia il risultato su socket del server (in pratica: serve per accedere a quei pin via wifi anziché i soliti bluetooth o porta seriale).
Oltre ai soliti moduli per i sensori più diffusi (lux, umidità, ecc.) le librerie supportano anche features simpatiche (HTTPS client, crittografia SHA256, client MQTT, data/ora da SNTP, client Websocket, stati deep sleep, ecc.; alcune richiedono la ricompilazione del nodemcu) fermo restando il limite di una ventina di kilobytes di RAM; del resto, se deve solo inviare valori ad un server locale o a un broker Mosquitto, gli basta la connessione wifi e il client HTTP, non ha bisogno neppure di conoscere data/ora.

Come tutti i prodotti originali Adafruit è ottimo ma costa un sacco di soldi (attualmente 3600 euro al chilo).

Il buongiorno si vede dal mattino:
  • impostare il terminale seriale a 9600 8N1 sulla porta /dev/serial/by-id/usb-Silicon_Labs_CP2104_USB_to_UART_Bridge_Controller_0136E32E-if00-port0
  • premere il tastino di reset, compare la scritta: NodeMCU 0.9.5 build 20150318  powered by Lua 5.1.4
  • se non è ancora impostato un autoexec (init.lua) comparirà anche la scritta lua: cannot open init.lua
  • al prompt dare i comandi per connettersi e verificare l'indirizzo IP assegnato:
      wifi.setmode(wifi.STATION)
      wifi.sta.config("SSID_del_mio_wifi", "mia_password")
      print(wifi.sta.getip())
  • a questo punto può trasferire dati via internet:
      c = net.createConnection(net.TCP, 0)
      c:on("receive", function(s, c) print(c) end )
      c:connect(80, "www.adafruit.com")
      c:send("GET /testwifi/index.html HTTP/1.1\r\nHost: www.adafruit.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
  • (cioè: crea una connessione attraverso il wifi, associa un evento in caso di "receive", invia una GET.... e qualche attimo dopo, in caso di "receive" andata a buon fine, arriva la stringa di Adafruit "if you can read this, it's working :)"
  • ovviamente non è necessario accedere al web, si può usare anche un IP fisso su una rete locale wifi.


mercoledì 12 aprile 2017

Propulsione a elica per ciclisti sfaticati

La parte seria del video comincia a 0:46.

lunedì 10 aprile 2017

Valigia trolley che segue il proprietario

Ah, questo sì che è un brevetto: una valigia motorizzata wireless con sensore nella scarpa e apps sul cellulare, che ti segue senza farsi trascinare. Se ne sentiva proprio il bisogno. E poi dicono che l'ufficio brevetti sta senza far niente da mattina a sera...


domenica 9 aprile 2017

Ennesima figuraccia degli americani

Costo di un missile BGM-109 "Tomahawk": 1,87 milioni di dollari.

Il costo è giustificato dal fatto che portano 450 kg di esplosivo a 1300 km di distanza a una velocità di 900 km/h, con un sistema di guida super sofisticato (GPS, accelerometri/inerziale, telecamere che analizzano i contorni del terreno sottostante, database di immagini digitalizzate con analisi in tempo reale, radar interno di ricerca finale del bersaglio). Praticamente infallibili.

Ultime notizie: gli americani per distruggere un aeroporto siriano lanciano ben 59 Tomahawk, di cui solo 23 hanno colpito il bersaglio.

In termini economici, più del 60% ha fallito il bersaglio.

In termini pratici: hanno speso 110,33 milioni di dollari (grosso modo il costo di trecento-quattrocento appartamenti per trent'anni di mutuo ciascuno) per rendere inagibile per mezza giornata un semplice aeroporto (in serata l'aviazione siriana riprendeva i voli).

Domanda: ma come mai il Pentagono non intenta causa contro la casa produttrice Raytheon?

 
Raytheon "Tomahawk":
peggio dei discount "Made in China"

 (e io che da piccolo sognavo di lavorare nel settore militare, dove i progetti e le realizzazioni sono "a norme militari", cioè perfezione, precisione, affidabilità)

Le ultime parole famose: (dal Washington Post)
“Vediamo queste belle immagini notturne dal ponte di queste due navi della Marina [americana] nel Mediterraneo orientale” ha detto Williams, “Sono tentato di citare il grande Leonard Cohen: ‘Sono guidato dalla bellezza delle nostre armi.’”

“Ecco le splendide immagini delle nostre terribili armi mentre si lanciano in quello che per loro è il breve volo sopra quell'aeroporto,” ha aggiunto, e quindi ha chiesto al suo ospite: “Allora, cosa hanno colpito?”
Figurin figurin figurin...
figuremmèrd!!

sabato 8 aprile 2017

The moment is cathartic!!

Inaudito: la lancetta del serbatoio è a fondo scala ma nella parte opposta!

Dopo dieci anni di incessante spionaggio della spia della riserva, è la prima volta che la lancetta della benzina emette il più virile grido di guerra: «se aumenta l'accise, ho fregato lo Stato!»


venerdì 7 aprile 2017

Movfuscator

L'idea geniale di movfuscator è questa:

compilare un intero programma usando solo istruzioni MOV, poiché la MOV è nientemeno che Turing-complete.

L'intero programma compilato avrà un lunghissimo listato assembler di questo tipo:
start: MOV ...
       MOV ...
       MOV ...
       ...
       MOV ...
       MOV ...
       JMP start
Infatti tutto si può ridurre alla MOV, inclusi if/switch/loop e chiamate di funzioni.

Sarà più lento da eseguire e richiederà più memoria ma praticamente tentare di disassemblarlo sarà impossibile, perché le funzioni e i calcoli non si distingueranno più - è solo una fastidiosissima e lunghissima sequenza di MOV (vedi per esempio un banale programmino in C di quindici righe che calcola numeri primi può essere "compilato" ad un listato di 5744 istruzioni MOV).

Vediamo come si fa.

Esempio 1: selezionare un valore da un array (cioè le singole variabili del programma possono essere indicate non con l'indirizzo di memoria ma con un numero, anche piccolo):
MOV R, 1            ; scegli la variabile 1...
MOV R, [array + R]  ; ...indicizzando
Esempio 2: con l'esempio precedente il confronto tra X e Y (CMP x,y) si può ridurre a:
MOV [X], 0  ; scrivi all'indirizzo X un byte 0
MOV [Y], 1  ; scrivi all'indirizzo Y un byte 1
MOV R, [X]  ; leggi in R un byte dall'indirizzo Y
Se X e Y sono lo stesso numero, allora la seconda MOV sovrascrive quello zero con un 1, e quindi alla fine R=1; altrimenti la terza istruzione leggerà il valore zero scritto dalla prima.

Più variabili (vere o temporanee) servono, e più si può allargare l'array.

Esempio 3: il costrutto IF x==y THEN z=100 si può ridurre a:
  • una "CMP" come da esempio 2 (che restituirà 0 oppure 1 a seconda di x==y)
  • usare il risultato 0/1 come da esempio 1, cioè come locazione in cui scrivere il valore 100
  • ignorare la locazione 0 (scritta solo se "x==y" non risulta verificato)
  • usare la locazione 1 (scritta solo se "x==y" risulta verificato) per scrivervi 100
Con lo stesso metodo applicato più volte si possono usare più di due "rami", cioè costruire tutte le varianti if/else/switch.

Esempio 4: i costrutti while/loop si possono ridurre a un calcolo che viene eseguito solo se la condizione era verificata:
  • una IF condizioneloop==1 THEN z=100 ELSE ignoraz=100;
Questo significa che il codice del loop viene sempre eseguito, nel ramo da usare o nel ramo da ignorare (quest'ultimo scrive in una locazione che non verrà usata).

Esempio 5: le chiamate di funzioni e l'allocazione dinamica della memoria si possono fare usando qualche array come "stack", e i costrutti indicati negli esempi 1,2,3.

In tal modo può funzionare perfino la ricorsione.

Esempio 6: le operazioni matematiche si possono eseguire usando tabelle (array) già calcolate. Per esempio, quando un programma vorrebbe eseguire X = Y * 2, basterà avere:
array Raddoppio = [ 0, 2, 4, 6, 8 ...]
MOV X, [ Raddoppio + Y ]   ; se Y=3, troverà 6, ecc.
Il codice compilato si riempirà di tabelle precalcolate, ma non saranno troppe visto che ogni volta che hai bisogno di moltiplicare per due puoi sfruttare la stessa tabella.

Anche le operazioni logiche AND OR NOT si possono ridurre a tabelle (array) da cui estrarre risultati usando MOV.

Le operazioni in virgola mobile possono essere emulate a suon di MOV grazie a una libreria soft-float scritta in C che una volta compilata diventa di appena mezzo milione di istruzioni MOV.

Infine: anche l'istruzione assembler XOR è Turing-completa. Quindi si può fare uno Xorfuscator. Anche la ADD è Turing-completa. Anche SBB, anche CMPXCHG/XCHG, eccetera. Caos!! ☺

Nella directory poc/crackme c'è un piccolo esempio: un programmino crackme che chiede una password prima di scrivere OK. Ai bei tempi bastava usare PCTOOLS per trovare il singolo byte del JUMP da modificare per far accettare qualsiasi password. Ora invece bisogna scovare tutte le MOV interessate all'emulazione di quel JUMP, all'interno di un file eseguibile che contiene centinaia di migliaia di MOV....

giovedì 6 aprile 2017

Internet of Things, cioè bidonata

Riassunto:

- tizio compra serratura garage comandabile da iPhone: Garadget!

- ma l'apps iPhone va spesso in crash

- tizio dunque lascia pessima recensione su Amazon e lascia sul forum di supporto Garadget una breve lamentela dell'apps

- produttore della serratura Garadget per vendicarsi della recensione e delle parole "piece of shit" blocca l'accesso ai server all'apps di tizio, cosicché la serratura non si apre più perché l'apps non può più connettersi.

Morale:

- mai comprare oggetti che hanno bisogno di un'apps: le apps si collegano ai server del produttore (quale produttore non lo farebbe?), non solo dandogli la possibilità di avere il completo controllo, ma anche di disattivare a distanza il proprio prodotto (come ha fatto il produttore vendicativo);

- ad eccezione del computer, mai comprare oggetti che hanno "bisogno" di collegarsi a internet: come le Smart-TV della Samsung e della LG hackerabili da remoto, la Smart-Disinfettatrice della Miele hackerabile da remoto, lo Smart-Frigorifero della Samsung, perfino lo Smart-Mouse (una merda di mouse che senza collegamento a internet non ti faceva muovere la freccetta! vergogna!!!), senza contare tutta la selva di stampanti, telecamere di sorveglianza, ecc., hackerate a distanza (vedi anche Shodan).