lunedì 20 ottobre 2014

Tabella di Postgres corrotta

Una mattina di sole scopro che ho problemi con una tabella su un database di Postgres, orrore i miei dati sono corrotti, ma la cosa più incredibile è che funziona. Vanno in errore solo le richieste ai record corrotti.
Provo a fare un dump della tabella:

pg_dump: SQL command failedpg_dump: Error message from server: ERROR:  compressed data is corrupt

Niente da fare, facciamo un po di google per trovare una possibile causa:

  1. Problema hardware sui dischi
  2. Problema hardware sulla memoria del server
  3. Sistema instabile
  4. Fsync disabilitato
Oops, vorresti dire che per aumentare le performance avevo disabilitato Fsync.

Ok, almeno non è l'hardware, primo passo riabilito Fsync, fatto.

Adesso devo resuscitare il mio DB.

Per prima cosa creaiamo una bella funzioncina i record scassati:
create function chk(anyelement)
  returns bool
  language plpgsql as $f$
    declare t text;
    begin t := $1;
      return false;
      exception when others then return true;
    end;
  $f$;
Questa funzione alza una eccezione quando non riesce a leggere un record, per cui possiamo utilizzarla per identificare i record errati:

select ctid from mytable where chk(mytable); 
ctid     ------------- (30823,6) (221521,4) (222802,6) (225277,20) (225478,2) (225932,7) (233994,3) (237229,15)(8 rows)
Ok, adesso abbiamo 3 soluzioni:

Cerchiamo di eliminare solo la parte corrotta nel record

Ispezioniamo la tabella e cerchiamo di capire qual'è il campo corrotto, di sicuro è un campo compresso come un tipo text, se lo abbiamo possiamo fare un aggiornamento massivo e annullarne il contenuto.

update mytable set myfield = '' where id in (select id from mytable where chk(mytable ));

Eliminiamo i soli record corrotti

delete from mytable where id in (select id from mytable where chk(mytable ));

O meglio ancora ricreiamo la tabella con solo i record sani

copy (select * from mytable where not chk(mytable )) to '/tmp/mytable .out';
truncate mytable;
copy mytable from '/tmp/mytable .out';

Con questi comandi copiamo la tabella in un file di dump, eliminiamo al tabella e la riceriamo con i dati non corrotti.

Al momento non ho una soluzione per recuperare i dati corrotti, e mi va bene anche perderli, li posso recuperare da un backup.

mercoledì 13 agosto 2014

Giochi semplici

Toby gioca. Per me e una scartola vuota di birra, per Toby il giocattolo della settimana. Punti divista.
Morale: non dare per scontato nulla.

giovedì 15 maggio 2014

Come resuscitare un kindle

Mi sono trovato in possesso di un Kindle 4 versione demo, in pratica esegue solo la demo, non si possono toccare le impostazioni e di conseguenza non si riesce a togliere il software demo installato. Dopo giorni di lettura ho trovato finalmente la soluzione per avere un Kindle vergine, come nuovo. Questo metodo serve anche per resuscitare un kindle brick o defunto.
In pratica si tratta di creare una chiavetta USB con una semplice disto linux, chiamata Kubrick, che ci facilita tutto il lavoro e ci garantisce che nessun driver di qualche sistema operativo intervenga.

Questo sistema si applica ai Kindle 3, 4, 5 (touch), non funziona sui paperwhite touch.


  1. Scaricare a questo indirizzo la ISO kubrick-k3-k4-k5-zip 
  2. Per preparare la chiavetta Usb bootabile scaricare anche questo file immagine kubrick-usb-base.zip
  3. Formattare una chiavetta USB da almeno 2GB
  4. Decomprimere i 2 file zip appena scaricati
  5. Utilizzare un programma adatto per scrivere sulla chiavetta il file contenuto nello zip del punto 2, per windows potete utilizzare win32diskimager
  6. copiare il file boot.iso contenuto nel file zip al punto 1, sulla chiavetta nella cartella efi/boot/
  7. Riavviare il computer e far partire il sistema dalla chiavetta USB (questo dovreste saperlo fare)
  8. Parte il sistema, attenzione, seguire le istruzioni, soprattutto non collegare da subito il kindle, ma solo quando le istruzioni lo indicano.

Tutto facile, in meno di 10 minuti viene resettato il kindle. Gli unici punti particolari sono,  avere il kindle a batteria piena, impostare il kindle in modalità download (premere il tasto power senza rilasciare fino a quando non si spegne e tenendo sempre premuto il tasto power, premere la freccia giù dei comandi direzionali, lasciare il tasto power e poi il tasto giù, aspettare che il sistema si accorga che il kindle è in modalità download, circa 10sec.), impostare il kindle quando richiesto in modalita USB/Net (seguire le istruzioni passo passo).

Finita la procedura il kindle si riavvierà come nuovo.

venerdì 14 marzo 2014

Trained Monkeys


Non sono l'unico che ha incontrato questo errore, sto aspettando che queste bravissime scimmie mi bussino alla porta per mostrargli "L'informazione".

mercoledì 12 febbraio 2014

Ciao Roberto “Freak” Antoni

E' morto stamattina Roberto “Freak” Antoni, la voce e mente degli Skiantos. Grande poeta, ha anticipato i tempi con la sua irona.


Memorabile questa canzone, anticipando di 20 anni quello che poi sarà sdoganato dai nostri politici italiani:

Grazie di essere esistito.

martedì 28 gennaio 2014

Eclipse non vuole partire: java.lang.UnsatisfiedLinkError: Could not load SWT library.

Ho un Ubuntu 12.04 a 64 bit, ho installato Eclipse dalla gestione software da Ubuntu Software Center", ma poi per sviluppare su Android mi serve Java SDK di Oracle e non OpenJDK.
Leggendo il seguente Help https://help.ubuntu.com/community/Java seguo le istruzioni al seguente indirizzo per procedere a installare Oracle Java http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html.
Faccio tutti gli step necessari:

  1. sudo add-apt-repository ppa:webupd8team/java
  2. sudo apt-get update
  3. sudo apt-get install oracle-java7-installer
Controllo con il comando java -version e tutto ok, mi sembra ben fatto


java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

Per scrupolo eseguo anche il seguente comando per impostare le variabili di ambiente di default:

sudo apt-get install oracle-java7-set-default

Perfetto! adesso procedo a lanciuare Eclipse, ma non parte. ##!!!##%%%****###!!!!

Mi vado  a leggere i log:

eclipse.buildId=I20110613-1736
java.version=1.7.0_51
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=it_IT
Command-line arguments:  -os linux -ws gtk -arch x86_64

!ENTRY org.eclipse.osgi 4 0 2014-01-28 23:22:04.272
!MESSAGE Application error
!STACK 1
java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
no swt-gtk-3740 in java.library.path
no swt-gtk in java.library.path
Can't load library: /home/francesco/.swt/lib/linux/x86_64/libswt-gtk-3740.so
Can't load library: /home/francesco/.swt/lib/linux/x86_64/libswt-gtk.so

Bene mi sembra manchi qualcosina, tipo le swt. Ma perche'?
Google alla mano trovo la soluzione, manca un link.

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/

Ecco fatto, Eclipse parte regolarmente. Rimane il dubbio sul pacchetto di installazione di java, sul perche' non imposta per l'utente attivo il link delle librerie swt.

Shipbuilding

Ci sono canzoni magiche, opere d'arte su cui mi imbatto e che rimangono impresse nel cuore e nell'anima. Opere che ad ogni ascolto entrano più in profondità, che ascolto in ogni interpretazione eseguita da artisti diversi e per ognuna la trovo sempre spettacolare. Ho incontrato questa canzone per la prima volta nell'interpretazione di Robert Wyatt, forse la migliore, qui ripropongo una versione dal vivo:

 

Shipbuilding

Is it worth it
A new winter coat and shoes for the wife
And a bicycle on the boys birthday
Its just a rumour that was spread around town
By the women and children
Soon well be shipbuilding
Well I ask you
The boy said dad they're going to take me to task
But I'll be back by christmas
Its just a rumour that was spread around town
Somebody said that someone got filled in
For saying that people get killed in
The result of this shipbuilding
With all the will in the world
Diving for dear life
When we could be diving for pearls
Its just a rumour that was spread around town
A telegram or a picture postcard
Within weeks they'll be re-opening the shipyards
And notifying the next of kin
Once again
Its all were skilled in
We will be shipbuilding
With all the will in the world
Diving for dear life
When we could be diving for pearls

lunedì 27 gennaio 2014

The Unthanks - Shipbuilding

Un altro capolavoro wyattiano da parte delle Unthanks, forse il miglio gruppo folk del momento.