martedì 25 novembre 2014

An expected journey

E' un po' che non riprendo questo blog. Il motivo principale e' che vivendo in un paese piu' civile dell'italia il sangue e merda del topic si e' abbastanza ridotto.

Ad ogni modo ho deciso di scrivere un po' delle mie disavventure sul patrio suolo ed ho deciso di iniziare con la piu' recente.

Viaggio di andata

Di solito quando devo viaggiare da Londra a Bologna parto prevenuto. I problemi sono tutti davanti. Mi godo il volo, salvo italiani rompicoglioni in cabina, senza pensare al casino che mi aspetta.
Questa volta tutto fila liscio. Atterraggio sulle uova, niente fila ai passaporti,  bagagli consegnati prontamente e senza problemi. Alla dogana non c'erano neanche gli addetti che, solitamente, scrutano con sguardo truce la gente che passa, manco si fosse signori della droga colombiani.

Il radar antimerda passa da defcon 4 a 3 quando arrivo al desk dell'autonoleggio. Fila che praticamente va a collidere con il cambiavalute. Non che sia una novita', vado a farmi un po' di cazzi miei mentre aspetto che scodi. Dopo 30 minuti la fila e' sempre li. Decido di farmi coraggio e mi accodo. Dopo altri 40 minuti tocca a me. Il tempo combinato tra la fila e il recupero delle chiavi equivale al 60% di un volo londra bologna. Vabbe'.

Il viaggio da aeroporto a casa di mia madre in genere si compone di pattern fissi. Cerchero' di elencarli usando, per il moccolo associato, la classificazione Voight-Kampff che spazia va da cherubino ad inferno immediato.


  • Comprensione auto fiat -  buttero toscano
  • Sintonizzazione radio - cherubino
  • Immissione in traffico - rosario in maremmano
  • Arrivare vivi fino a casa - inferno immediato
Cercare di restare concentrati alla guida per sopravvivere agli  stronzi che compongono il 90% del gregge automobilistico italiano e' dura. Questo e' un breve elenco di simpatiche abitudini che estirperei volentieri con un colpo  RTG se fosse permesso dal codice della strada.

  • Sorpasso a filo/sfregio perche' rispetti i limiti
  • Uso inesistente delle frecce
  • Taglio delle curve
  • Sorpasso su cavalcavia con doppia linea continua
  • Auto proveniente dal lato opposto che inizia il sorpasso come se tu non ci fossi
  • TIR che non frenano all'ingresso delle rotatorie


Per distrarmi in genere metto su virgin radio, l'unica radio che considero appena passabile...appena.
Il pattern che trovo ogni volta e' davvero inquietante. Ho viaggiato ad ogni ora del giorno ma praticamente la storia e' sempre la stessa.

  • Programma a caso dove parlano il 60% del tempo
  • Pubblicita' auto
  • Pubblicita' veicoli commerciali
  • Pubblicita' auto
  • Pubblicita' di altra roba
  • Pubblicita' virgin radio che dura un secolo per dire che sono rock
  • Vip random che chiede soldi per causa triste/seria nelle piazze italiane
  • Virgin classic dove ti si dice l'anno ma mai un cazzo di titolo/autore
  • Sport
  • News
Quando poi finalmente si sente un po' di musica sono arrivato.
Poi dice uno bestemmia.

P.s. a tutti quelli che stanno pensando di scrivere "non si bestemmia", tranquilli. Lo so bene che in italia per una bestemmia si va in galera mentre la si fa franca se si provoca una strage con l'amianto.  

giovedì 26 settembre 2013

Su Big data, denormalizzazione e altre fesserie

A long time ago in a far far away galaxy...


Nel lontano 2000, quando imberbe, giovane e stolto mi avvicinai al mondo dell'IT ebbi una prima esperienza da Database Administrator o almeno cosi' credevo.

 All'epoca ero un developer, programmavo in ASP su Windows NT 4.0 (gran sistema, davvero) e mi interfacciavo con il simpatico MS-SQL Server 7, bleeding edge dell'epoca.

Nella solita logica italica, della quale ero ancora all'oscuro, il mio ruolo era di tipo multitasking.

Uno stipendio per 4/5 mansioni tutte diverse e tutte allo stesso livello di priorita', una delle quali era proprio amministrare il database di cui sopra.

 Saltuariamente arrivava roba in access che doveva essere importata e li ci mettevo le mani io, principalmente in vbscrip.

 Ricordo ancora quando un giorno arrivo' un catalogo in access dalle dimensioni importanti per l'epoca, 590 MB, un intero cdrom occupato da un file mostruoso.

 Tale file era si' grande per due caratteristiche, le stesse che oggi vengono spacciate come LA SOLUZIONE ai problemi di dati.

  1. normalizzache'? il database era composto da una sola stramaledetta tabella, probabilmente frutto di un iniziale copia/incolla da excel e messa su access a causa del limite di righe imposto da tale software
  2. manutenche'? il file di access non era mai stato compattato. ora access e' simile a postgres in termini di update. si tiene dentro le versioni precedenti ogni volta che si aggiorna una riga. E se non si fa una manutenzione periodica, compattando il file, questi diventa enorme.
Fatto sta che dopo la compattazione il file risultante era di soli 300kb (!!!!!!!!).

The big (bubble) data

Lo confesso, ogni volta che sento le parole big data un brivido mi parte giu' dal collo e scende verso il culo. 
Ancora ho i segni della bolla di internet e la nuova buzzword big data mi ricorda per certi aspetti la bolla del 2002/2003.

Le ragioni che mi fanno pensare ad una seconda bolla sono varie, cerchero' di elencarle in maniera ragionata.

  1. se ne parla troppo
    ormai e' quasi impossibile trovare discussioni tecniche che non parlino di questo fantomatico big data. La quando scrive o quando parla  butta le parole da qualche parte, contestualizzate o meno e subito la audience diventa piu' attenta, si aprono i cordoni della borsa, i manager sono interessati in quanto si sta parlando di roba bleeding edge e trending. Come nel 2000, quando bastava dire internet per avere  la limousine con autista e attendente al pezzo sul sedile posteriore.
  2. molti non sanno cosa big data voglia dire
    Cosa vuol dire big data, spiegatemelo possibilmente senza riferimenti a wikipedia. perche' se quello e' il significato allora questa buzzword e' sinonimo di un vecchio termine, magari meno altisonante e piu' criptica ma molto piu' sensata e concreta. Very Large Databases (VLDB).
    Come nel 2000 dove tutti si riempivano la bocca della parola internet senza capire niente, a parte andare a ravanare sui siti porno e scaricare musica a scrocco su napster.
  3. design defective
    nel mio attuale lavoro mi occupo di database grossi, svariati TB, niente in confronto al mio record di qualche decina di TB, ma di questo ne parlero' successivamente. Ora al vero ambiente relazonale si e' agganciato un ambiente NOSQL, il quale e' il database access di cui sopra, intortato di paroloni come HA, durable storage e altre buzzwords, il cui scopo sarebbe quello di velocizzare e ottimizzare l'accesso ai dati planet sized.
    Questo punto mi ricorda molto i tempi della corsa alle alte velocita' dei processori pentium e k6. Dove invece di puntare sull'architettura si spremevano i chip ad andare con clock sempre piu' veloci, finche' non si e' sbattuti la faccia sul limite fisico.
    L'approccio moderno, quello NOSQL e' identico. La differenza sta nello storage che viene sacrificato in nome di una efficienza di accesso che onestamente fatico a vedere e che alla lunga portera' di nuovo a sbattere la faccia sul muro del limite fisico ed economico se volete.
    Il che ci porta alla parte della denormarmalizzazione.

    The oracle way

Aridaje con oracle direte voi.
Beh io ho iniziato a occuparmi seriamente di dati quando ho iniziato a lavorare con oracle. E quello e' e sara' sempre il mio modello di riferimento, per professionalita' e cura dell'architettura.

Anyway, un trend derivato da dall'approccio BIGDATA/NOSQL e' quello che ormai si tende a denormalizzare tutto, privando il termine RDBMS (Relational Database Management System) della R.

Ora per carita' i dati possono assumere varie forme e spesso denormalizzare/aggregare e' la via piu' veloce per tirare via dati coerenti dal database. Ma qui si sta esagerando, portando all'estremo la situazione e ottenendo il risultato di cui sopra, defective design che viene tamponato con hardware sempre piu' potente e performante senza guardare minimamente alle prestazioni sul fronte architetturale.

Faccio un esempio pratico. Sono vari anni che lavoro su PostgreSQL, ho maturato una notevole esperienza su sistemi enterprise di vario genere e ho cambiato varie aziende nel frattempo.

Il comun denominatore di codeste aziende e' sempre stato quello di avere un modello dati variabile tra il discreto e l'osceno, con necessita' di scalare tale modello e con delle scelte, di programmazione e di implementazione, a dir poco discutibili.

Ora PostgreSQL ha un difetto rispetto ad Oracle IMHO. Non dice mai basta, anche quando un programmatore/designer fa delle scelte sbagliate sotto tutti i punti di vista, lui lavora, magari rallenta, ma non si ferma mai.

Ecco Oracle no. Oracle con un banale ORA-600 o con il piu' classico dei classici ORA-1555 ti sputa in faccia e ti dice DEFICIENTE, SCRIVI ROBA DECENTE PRIMA DI AZZARDARTI A TOCCARMI.

Ecco quindi che in genere le scelte sbagliate vengono stroncate sul nascere.

Ora uno delle nuove features implementate da PostgreSQL e' questa sequenza di moduli schemaless tipo HSTORE, JSON e compagnia bella.
Tali oggetti ha, da un lato, aperto il prodotto al mercato NOSQL avendo in maniera nativa oggetti di tale tipo e da un altro ha fatto credere ai programmatori che questa fosse la soluzione.

Ma, c'e' un ma.
Se da un lato un tipo key -> value come hstore apre la possibilita' di non toccare piu' lo schema, dall'altro lato previene la possibilita' di indicizzare con indici BTREE tali dati e gli indici supportati, i GIN non hanno gli operatori di eguaglianza, essendo disegnati per operare su vettori testuali e dati geografici. Tale limitazione rende impossibile ottimizzare le query che contengono filtri su tali dati.

Inoltre i dati sono memorizzati in forma binaria, ovvero ottetti di stringhe binarie, cosi' come sono e poi sono manipolati in memoria dalla libreria esterna.

Tralasciando l'overhead indotto dall'uso di librerie dinamiche, cio significa che anche solo memorizzare un numero intero di 4 bytes originali spreca il nome della chiave, il blocco operatore di chiave e il numero piu' le quotes. Se se per assurdo stessimo inserendo una chiave di un solo carattere, lo storage adoperato da un hstore/json costa ben 10 bytes contro i 4 di un integer.

I fan di questo tipo di approccio diranno che  il vantaggio di tale dato e' quello di poter operare sullo schema senza dover alterare la tabella. Balle.

Con Oracle abbiamo tabelle convenzionali di dimensioni mostruose da almeno dieci anni e cio' non ha mai impedito le modifiche allo schema.
Certo le cose vanno fatte in un certo modo, ma da qui a sprecare memoria, tra l'altro molto costosa, per ogni singola riga solo per poter mettere liberamente in qualsiasi tipo di campo in un metacampo   e' follia pura.

Ecco quindi che mi ritorna in mente il vecchio motto dei tempi andati
"economico", "funzionante","veloce". scegline due.

Non e' cambiato niente da allora.

Personalmente credo che con questo rozzo e incoerente approccio nell'ambito dei database si sia fatto un salto indietro di almeno 10 anni, forse anche di piu'.

Perche' 10 anni fa quel database access denormalizzato e gonfiato suscito' l'ilarita' di tutto l'ufficio.
Oggi la stessa merda suscita attenzione  e meraviglia.

Qualcosa e' andato fottutamente storto.

sabato 31 agosto 2013

Custom ROM Galaxy S4 LTE con heimdall e CWM

Riprendo a scrivere su questo blog per condividere la mia esperienza nel rootare il samsung galaxy s4 con heimdall (visto che sono un linuxaro).

Per ora in italico idioma poi magari quando passa l'effetto del mojito lo riscrivo anche in inglese.

DISCLAIMER
Il sottoscritto non si assume nessuna responsabilita' per problemi derivati, o presunti tali, dalla seguente procedura di installazione.

L'installazione di ROM non ufficiali fa DECADERE LA GARANZIA del cellulare pertanto se decidete di proseguire lo fate assolutamente a VOSTRO RISCHIO E PERICOLO.


La seguente procedura si riferisce al Samsung Galaxy S4 LTE edition, il GT-I9505.



Il mio cellulare non ha il firmware italiano ma quello inglese, avendolo comprato nel Regno Unito.

Ad ogni modo la procedura qui descritta sostituisce la rom stock piena di bloatware con l'ottima wanamlite basata sulla stock samsung quindi non dovrebbero esserci problemi.

Prima di procedere scaricatevi il software necessario.

Alternativa open source ad ODIN dotata anche di interfaccia grafica.
La procedura NON adopera la GUI ma si lavora in riga di comando. Se non siete confidenti con tale metodo FERMATEVI ORA.
La versione da scaricare dipende dal sistema operativo.
Nel mio caso Ubuntu Linux 12.10 amd 64.


Le sue caratteristiche sono elencate nella pagina. E' leggera,efficiente e priva di tutto il bloatware samsung. L'ho tenuta per qualche mese sul Samsung Galaxy S2. Con l'apex launcher e' tutta un'altra vita.

Necessaria per il BACKUP del firmware stock e la successiva installazione della wanamlite
L'immagine CMW viene distribuita con il touchscreen o senza. L'importante e' che prendiate quella adatta al vostro dispositivo.

Mentre aspettate il download ripetete il seguente mantra.

BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP,
BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP, BACKUP.


Installazione heimdall

Riferitevi alla modalita' di installazione del vostro sistema operativo.
Nel mio caso e' stato sufficiente scaricare il pacchetto ubuntu12.10-heimdall_1.4.0-0_amd64.deb e installarlo con il comando
sudo dpkg -i ubuntu12.10-heimdall_1.4.0-0_amd64.deb
Una volta installato il comando
heimdall version
dovrebbe restituirvi la stringa di versione
v1.4.0

Download mode

I telefoni samsung hanno una modalita' download che li predispone per il flash da ODIN oppure, nel nostro caso da heimdall.
Per attivarla spegnete il cellulare e riaccendetelo premento volume giu, pulsante home e power.
Vi apparira' una schermata di avviso. Rilasciate tutti I pulsanti e premete volume su per attivare il download mode.

Flash recovery

Prima di tentare qualsiasi cosa verificate che il cellulare sia riconosciuto da heimdall.
Inserite il connettore usb nel computer e nel cellulare.
Aprite un terminale e da riga di comando digitate
heimdall detect
Se la risposta e' device detected il software ha correttamente riconosciuto il cellulare e quindi potete procedere.
Per essere sicuri di flashare nel punto giusto l'immagine della recovery e' conveniente stamparsi il pit con il comando
heimdall print-pit
Questo comando stampera tutto l'elenco partizioni del cellulare in human readable format. Essendo questo molto lungo e' piu' conveniente salvarselo in un file di testo per consultarlo con calma.


heimdall print-pit > pit_sgs4.txt 2>&1


Se dovessero esserci errori di permessi o quant'altro si puo' usare heimdall con il comando sudo.
Tenete bene in mente che con sudo heimdall girera' con I privilegi di root.


La partizione da flashare e' quella con il file recovery.img.
Nel mio caso RECOVERY. Attenzione che il nome e' case sensitive, android e' un sistema unix alla fine, quindi se e' scritto RECOVERY il nome e' RECOVERY, non recovery.
Dopo il print pit il cellulare si riavviera'. E' possibile disabilitare il riavvio con
heimdall print-pit –no-reboot
Ho riscontrato un comportamento anomalo dopo questo comando, risolto con la rimozione e il reinserimento del cavo usb.
Nel caso evitate di fare casino e riavviate il cellulare in download per avere un ambiente vergine.
Dopo aver rimesso il cellulare in download mode, correttamente riconosciuto da heimdall, positionatevi nella directory dove avete scaricato l'immagine CWM.
Il comando, nel mio caso e' stato il seguente
heimdall flash --RECOVERY recovery-clockwork-touch-6.0.3.6-jfltexx.img
Dopo vari secondi (di puro terrore) il cellulare si riavviera'.
Spegnetelo per la fase successiva

Backup stock firmware

Avviate il cellulare in recovery mode premendo volume su, home, power.
Selezionate backup and restore e backup.




Il cellulare mostrera' una schermata di progress per il backup del sistema.
Aspettate pazientemente.



Installazione wanam lite

Una volta salvata la rom stock copiate il file zip della wanam lite precedentemente scaricato sulla SD card del cellulare.
Avviate il cellulare in recovery e selezionate install zip.
Poi choose zip from external sdcard e selezionate lo zip file copiato sulla SD card.



Un'ultima schermata conferma vi chiedera' se siete sicuri di voler installare la custom rom.
L'installazione della nuova rom richiedera' 4/5 minuti, lasciate il cellulare a lavorare.
Una volta terminata l'installazione tornate alla schermata principale della recovery e selezionate reboot system now.

La wanam lite esegue un auto wipe di user e cache durante l'installazione quindi non dovrebbero esserci problemi al riavvio. Nel caso ce ne fossero riavviate in recovery e ripulite user/cache/dalvik.
Il primo avvio e' lungo, il cellulare restera' per 3-4 minuti con il logo samsung. Aspettate. Iniziera' poi una fase di ottimizzazione applicazioni e infine si avviera' correttamente.
Buon divertimento con il vostro cellulare rootato.