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. 

martedì 19 marzo 2013

Powaqqatsi

Powaqqatsi is a Hopi word meaning "parasitic way of life".

Life is shit, spesso l'ho pensato e mai come ora, in questo momento molto duro che sto affrontando, lo penso e ripenso. Ma a voler seguire il metodo di Renato Caccioppoli, mio illustre concittadino, per inquadrare un problema e renderlo inoffensivo, e' spesso sufficiente prenderne le misure.

L'analisi del mio problema si riconduce ad un unico vero nocciolo insormontabile, lo stato italiano.
Il titolo che ho dato a questo post e' riferito ad esso, in quanto la sua sola ragion d'essere e' vivere in maniera parassitaria ai danni dei cittadini onesti. Il problema putroppo non si inquadra in maniera semplicistica nella casta, come tanti urlatori berciano ai quattro venti. La casta esiste perche' gli italiani glielo permettono, perche' ognuno pensa al suo lercio piccolo pezzo di terreno senza capire che il rispetto delle leggi e del prossimo  non sono vuote formule insegnate in chiesa ma una componente imprescindibile di ogni persona che vuole vagamente definirsi civile. 

Ma sto divagando.

Fatto numero uno: Mio padre e' morto qualche giorno fa.
Il lutto in se l'ho digerito, nonostante sia stata una morte stupida, indotta non dal male che portava ma generata da una sanita' che ormai non considera le persone se non alla stregua di numeri e statistiche. Non ho tempo ne voglia di intentare cause sapendo che al primo giro avrei torto e forse fra 10-20 anni qualcuno mi darebbe ragione, dopo aver speso tempo e soldi. Se credessi in dio potrei sperare in una giustizia divina. Magra consolazione. 

Fatto numero due: Il luogo di morte determina se vivi o muori dopo il lutto
Se non fosse sufficiente il dolore della perdita ecco che la macchina burocratica ti arriva sul muso, senza sentimenti, congelando conti correnti e lasciando nella merda gli eredi fino all'arrivo dei documenti.
Nessuna possibilita' di certificare la morte per snellire le pratiche, tutto resta congelato per 10/20 giorni in attesa della comunicazione dal comune tal dei tali al tuo di residenza e nel frattempo, se non hai altre risorse, muori di fame perche' non c'e' modo di accedere a dei soldi.

Fatto numero tre: La regione in cui vivi determina quanto spendere per il funerale
Di fatto a seconda della regione in cui vivi e quindi della legge regionale in vigore (grazie a tutti per dividere ulteriormente questo disunito paese), la dispersione delle ceneri puo' essere effettuata o meno. Nel secondo caso devi pagarti un posto al cimitero e intestarlo a persona giovane in quanto se l'intestatario schiatta nel frattempo bisogna ripagare la stessa cifra per reintestarlo, per trascrivere un nome.

Fatto numero quattro: Servizi telematici una sega
Il livello di alfabetizzazione informatico in italia e' basso, specialmente nella popolazione anziana. Grazie ad un noto ministro, il cui nome spero sia ricordato con ignominia nei secoli, ora tutto si fa per via telematica
Il che e' un bel modo di dire che e' inutile andare agli sportelli di persona, nessuno vi caghera' ne vi potra' aiutare per legge. Ecco quindi che l'unica soluzione per chi non ha conoscenze informatiche per ottenere servizi fondamentali e' quello di passare attraverso i patronati che non sono gratis e che spesso rallentano ulteriormente l'avanzare delle pratiche in quanto fanno una serie di passaggi di mano che il palazzo che rende folli gli fa una sega. 

Fatto numero cinque: PRAAAAAAAAAAAAAAAAAA
Quanto ci vuole per cambiare un cazzo di nome dentro un computer, stampare un adesivo e consegnarlo al nuovo intestatario. 30 secondi? 2 minuti? Costo dell'operazione circa 500 euro!  
La ciliegina sulla torta e' proprio questa. Se per caso si ha la sfortuna di avere un'automobile intestata al defunto c'e' l'obbligo di reintestarla agli eredi. Cio' provoca un primo esborso di una cifra variabile, a seconda della regione (goto 3) e, se non si vuole dover ragionare e firmare in piu' persone per ogni cosa relativa all'automobile questa va poi reintestata ad uno degli eredi con un secondo esborso. Due passaggi di proprieta' da pagare sull'unghia al PRA, per aggiornare due stronzate in un computer, 1000 euro che si aggiungono al dolore della perdita e al pensiero costante che aleggia nella mente di chi resta, come stracazzo faremo ora con questi fottuti parassiti?

Ecco quindi Italia che ti dico, con tutto il rispetto, che hai veramente rotto i coglioni. 

Passi la tua  burocrazia asfissiante. Per fortuna spesso ci sono persone che  compensano la tua oscena  inefficienza e la voracita' delle banche che pensano solo a pararsi il culo con l'ufficio legale.

Passino i costi inaccettabili di funerali e cimiteri legati ad una costante frammentazione delle norme e del diritto. Passi il maldestro tentativo di informatizzare la vita agli italiani e del quale i patronati ringraziano per la nuova clientela.

Quello che non sopporto e' l'ignobile raschiare il fondo nel pretendere soldi da persone che sono gia' state colpite nel profondo. 
In ogni caso le imposte di trascrizione sugli autoveicoli sono, al di la del doppio salto carpiato in caso di lutto, una pratica disgustosa, quasi quanto gli studi di settore e gli acconti  sull'anno che verra'.

Powaqqatsi le tenie hanno piu' morale.