Ufic

Blog personale di V. Marco Carnazzo

L'ecomostro che c'è in me

EcomostroNessuno è perfetto1. Io in particolare. Racconto su questo blog le mie avventure quotidiane nel tentare di contenere i consumi e nell’affrontare una vita più eco-equo sostenibile. Ma il cammino è arduo. E’ fatto di piccoli e felici passi fatti ogni giorno e di tanti grossi errori ancora da sistemare. Molte le tantazioni di cui son vittima e che voglio condividere con voi. E’ giunto il momento di fare outing.

  1. Sono un informatico. Non solo nel senso lavorativo: ho un computer da quando avevo 6 anni e programmo da quando ne avevo 7 (ah, il GW-Basic!). Non riesco a immaginare la mia vita senza questo strumento infernale, che ciuccia risorse (lui e tutti i server a cui mi connetto, spesso per cazzeggio), che crea una marea di rifiuti (per quanto si tenti di riciclare) e i cui componenti spesso derivano da gente che lavora in situazioni disumane.
  2. Amo il bagno caldo. Lo so che si spreca un sacco di acqua e di riscaldamento rispetto alla doccia e quindi non ne abuso, ma quelle tre – quattro volte l’anno (ad esempio arrivando a casa dopo essersi presi in testa il diluvio universale) lo trovo un “lusso necessario” :) .
  3. Sono pigro. Pigrissimo.
  4. Sono assolutamente inabile a qualsiasi lavoro manuale, con buona pace delle belle parole sull’autoproduzione, sul riciclare in casa e via dicendo. E a chi mi dice che nessuno è inabile al lavoro manuale e che è solo questione di pratica, rispondo: sono pigro; pigrissimo.
  5. Da un anno a questa parte mi sono trasferito da una “grande” città a un paesino che gli orbita intorno. Se prima quindi riuscivo ad andare a lavoro in bici adesso mi tocca prendere il treno e/o andare in macchina con mia moglie (per chi non lo sapesse: non ho la patente).
  6. Tendenzialmente (ma non sempre!) amo il quieto vivere: mi piacerebbe avere il solare e il fotovoltaico, anche senza avere necessariamente un rientro economico. Ma mi scoccia anche discutere e discutere con gli altri condomini (che mi hanno già fatto capire che non è aria).

E questo è solo l’inizio (anche perché mi piacerebbe parlare anche di altri comportamenti poco etici, non strettamente legati all’ambiente). Mi ripropongo di tornare ogni tanto su questo post per aggiornare la lista e per ricordarmi sempre di volare basso. Che di aquile ce ne son già troppe.
Potrebbe diventare uno dei premi che circolano tra i blogger (e che io schivo sempre). Se vi va raccontatemi l’ecomostro che c’è in voi nei commenti.

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter
  1. Questo è un plagio spudorato d un’articolo del blog Consumo meno []

Cancellare record duplicati in MySQL

Do not duplicate

Non vuole essere una presa di posizione sulla pirateria

Quando si lavora con i database, può capitare di scegliere male la chiave di una tabella (o peggio di non sceglierne nessuna!) e a un certo punto ritrovarsi con numerosi record duplicati da cancellare.

Ci sono svariate procedure possibili per farlo. Personalmente ritengo la seguente la più semplice.

Premessa più che straimportante: cancellare record da un database è sempre un’operazione rischiosa. Per carità, fai un backup del database prima di agire!

Seconda premessa più che straimportante: cancellare record da un database è sempre un’operazione rischiosa. Per carità, fai un backup del database prima di agire! (repetita iuvant)

Lo scenario di questo esempio è il seguente (lo so: è stupido ma non voglio complicare inutilmente le cose):

Abbiamo una tabella Persone dove vanno cancellati gli omonimi.

Ecco i passi da seguire:

  1. Crea una tabella temporanea che conterrà i record da cancellare:
    CREATE TEMPORARY TABLE to_delete
    (`ID` int(10) not null,
    `nome` varchar(200) not null,
    `cognome` varchar(200) not null);
  2. Popola la tabella temporanea:
    INSERT INTO to_delete
    (`ID`, `nome`, `cognome`)
    SELECT `ID`, `nome`, `cognome`, MIN(`ID`) AS min_id
    FROM
    (
    SELECT *
    FROM `Persone`
    GROUP BY `nome`, `cognome`
    HAVING COUNT(*) > 1
    ) AS temp
    WHERE TODO;
  3. Cancella davvero i record:
    UPDATE `Persone` SET `deletion_flag`=1
    WHERE EXISTS
    (
    SELECT * FROM `to_delete`
    WHERE `to_delete`.`ID` = `Persone`.`ID`
    AND `Persone`.`ID` != `to_delete`.`min_id`
    );

Alcune dovute precisazioni:

  • L’uso di una tabella temporanea non è strettamente necessario, ma assicura almeno che alla fine della sessione la cartella `to_delete` venga cancellata automaticamente. Da notare che non è possibile usare tabelle temporanee con strumenti come PhpMyAdmin perché usano a ogni operazione una sessione diversa.
  • Nell’ultima query non ho davvero cancellato il record bensì ho impostato un flag che permette la cancellazione logica. Ovviamente ciò prevede che la tua applicazione gestisce la cancellazione logica (è sempre cosa buona e giusta). Se così non fosse puoi banalmente usare una DELETE
  • La cartella temporanea viene popolata con coppie di record duplicati; durante la cancellazione ho scelto di tenere il record con ID massimo. Naturalmente non è sempre questa la scelta corretta: se necessario adatta la query alle tue esigenze.

Sia chiaro che non mi prendo nessuna responsabilità in caso di errori miei o vostri :p1.

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter
  1. A dirla tutta questo post deve molto a un post analogo in inglese []

Come creare il mirror di un database MySql

In uno scenario di utilizzo reale di un database MySql (per siti, applicazioni web ecc.), la sicurezza dei dati è estremamente importante.

Per avere una sicurezza in più, è consigliabile duplicare i dati in un secondo server, attraverso un metodo chiamato replication, cioé la configurazione di MySql affinché da solo effettui tale duplicazione (nota bene che non è sincrona!).

Qui di seguito viene spiegato come fare. Per master si intenderà il server che fa il lavoro vero; mentre per slave si intenderà il server che contiene i dati duplicati (e che di fatto non viene mai utilizzato se non in caso di catastrofi). Fondamentalmente funziona così: lo slave interroga periodicamente (molto spesso) il master chiedendogli il suo file di log; in base al log lo slave capirà quali azioni sono state effettuate “in sua assenza” e le applicherà anche su se stesso.

La configurazione non è semplicissima e in alcuni punti sarà necessario interrompere il servizio, quindi fatelo solo quando il master non è utilizzato o, se proprio non si può fare diversamente, in orari strani e/o nel weekend.

Fase 1: Configurazione

Nel master:

1. Crea l’utente <slave_user> (con password <slave_password>) con il quale lo slave si loggherà. Per sicurezza gli si daranno solo i privilegi per la replicazione.
GRANT REPLICATION SLAVE ON *.* TO '<slave_user>'@'%.mydomain.com' IDENTIFIED BY '<slave_password>';

2. Apri il file /etc/mysql/my.cnf e vai alla sezione [mysqld]

3. Assicurati che sia configurato il log binario, cioé che ci sia la riga:
log-bin=mysql-bin

4. Sempre nella sezione [mysqld] inserisci la riga
server-id=1

5. Assicurati che la riga skip-networking sia commentata
# skip-networking

Nello slave:

1. Apri il file /etc/mysql/my.cnf e vai alla sezione [mysqld]

2. Aggiungi la riga
server-id=2

Fase 2: Lettura del punto corrente del log binario

Nel master:

1. Fai finire tutte le operazioni correnti. Da MySql:
FLUSH TABLES WITH READ LOCK;
Nb: Questo bloccherà temporaneamente l’uso del database!!!

2. Mostra il punto corrente. Da MySql:
SHOW MASTER STATUS

3. Segnati la risposta ricevuta (in particolare log_file e log_position)

4. Sblocca il database. Da MySql:
UNLOCK TABLES;

Fase 3: Prima sincronizzazione “a mano” con mysqldump

Nel master:

1. Blocca il database:
FLUSH TABLES WITH READ LOCK;
Nb: Questo bloccherà temporaneamente l’uso del database!!!

2. Fare il dump di tutto
mysqldump --all-databases --lock-all-tables >dbdump.db

3. Sblocca il database. Da MySql:
UNLOCK TABLES;

4. Copia (possibilmente con scp o comunque via SSH) il file dbdump.db nello slave

Nello slave riversa il dump effettuato precedentemente:
sudo mysql -uroot -p < dbdump.db

Fase 3bis: Prima sincronizzazione “a mano” in modo grezzo

Se il db è molto grande è più efficiente copiare brutalmente la cartella che contiene i dati di MySql da un db all’altro.

Nel master:

1. Ferma MySql
sudo /etc/init.d/mysql stop

2. Compatta tutti i dati
tar zcvf mysql.tgz /var/lib/mysql

3. Copia (possibilmente con scp o comunque via SSH) il file mysql.tgz nello slave

4. Riavvia MySql
sudo /etc/init.d/mysql start

Nello slave:

1. Ferma MySql
sudo /etc/init.d/mysql stop

2. Rimuovi la cartella dei dati attuale
sudo rm -rf /var/lib/mysql

3. Scompatta la versione nuova dei dati
sudo tar zxvf mysql.tgz

4. Riavvia il database
sudo /etc/init.d/mysql start

Fase 4: Avviare la sincronizzazione

Nello slave indicare come connettersi al master e dove leggere le informazioni. Da MySql:
CHANGE MASTER TO MASTER_HOST='<master_host_name>', MASTER_USER='<slave_user>', MASTER_PASSWORD='<slave_password>', MASTER_LOG_FILE='<recorded_log_file_name>', MASTER_LOG_POS=<recorded_log_position>

Ecco fatto!

Vi consiglio comunque periodicamente di tenere d’occhio lo slave per assicurarvi che la replicazione stia continuando (in passato mi ha fatto brutti scherzi). Semplicemente (da MySql dello slave) chiedete:

SLAVE STATUS;

Buona fortuna ;)

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter

Chi mi consiglia un portatile?

Il mio primo portatile

Il mio primo portatile

Malika è il nome di una donna bellissima, che ho visto una sola volta nella mia vita, circa dieci anni fa, fugacemente e senza nessuna implicazione; e che quasi sicuramente non vedrò mai più.Malika da allora è anche il nome del mio portatile.

Entrambe le Malika fanno parte del passato: alla prima non ho mai pensato seriamente e tanto meno lo faccio ora, sposato e con prole. La seconda mi è stata accanto fedelmente per anni ma adesso sta lentamente morendo di vecchiaia. Con buona pace dei cattolici, si sta avvicinando il momento di staccare la spina.

Il problema è che, nonostante io sia un informatico, ho sempre amato il software e avuto a noia l’hardware1 e quindi non sono per niente aggiornato sullo stato attuale del mercato.

Dunque: chi mi consiglia un portatile nuovo?

Le caratteristiche auspicabili:

  • La ventola sia facilmente smontabile: molti dei problemi attuali di Malika derivano da surriscaldamento; sarebbe un problema risolvibile pulendo la ventola ma è quasi impossibile staccarla.
  • Sia compatibile al 100% con Ubuntu: questa è una condizione imprescindibile.
  • Possibilmente che non abbia nessun sistema operativo installato ma non è una caratteristica particolarmente rilevante: mio malgrado, per testare alcune cose di lavoro a volte sono costretto a usare anche Windows.
  • L’azienda produttrice abbia un minimo di codice etico riguardo l’ambiente e i diritti dei lavoratori, anche se temo che nel mondo dell’elettronica sia cosa rara :(
  • Abbia un video “riposante”: sto molte ore al computer e sono ipermetrope.
  • 3 ingressi USB, 1 ingresso SD Card, wireless

Un sentito grazie a chi potrà darmi dei consigli ;)

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter
  1. ”Distinzione tra hardware e software: l’hardware è quello che puoi prendere a calci, il software lo puoi solo maledire” (Prof. Renzo Davoli) []

Saviano chi?

Roberto Saviano

Roberto Saviano, dall'archivio di Internazionale

Ultimamente mi è capitato di imbattermi in alcuni esponenti del gruppo di persone che, con una generalizzazione vagamente xenofoba, solitamente definisco “italiani medi”. E mi sono reso conto che non sapevano chi fosse Roberto Saviano.

Sia chiaro: non la considero una colpa, non scrivo questo articolo per gridare allo scandalo, né per commiserare chicchessia. Scrivo questo articolo semplicemente in preda a un disarmato stupore: pensavo che chiunque sapesse chi è Saviano, anche solo per sbaglio (la televisione ne ha parlato in seguito al libro, al film, allo spettacolo teatrale, alla candidatura all’oscar…), così come io so chi è Alessandra Amoroso1 o Afef Jnifen2.

Non voglio qui parlare di camorra, di informazione o di politica. Voglio parlare di solipsismo3.

Se quando parlo o scrivo non posso dare per scontato che il destinatario del mio messaggio sappia chi è “Saviano”, allora cosa posso dare per scontato?

Se non posso evitare incisi vicino alla parola “Saviano”4, allora quando posso evitarli5?

Ma soprattutto: se io e l’italiano medio non condividiamo conoscenze così di base come “Saviano”, allora di fatto viviamo in due realtà diverse. Come possiamo dialogare?6

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter
  1. Giovane cantante portata al successo dalla trasmissione televisiva Amici []
  2. Showgirl che, per inciso, sostiene che Saviano abbia macchiato l’immagine dell’Italia nel mondo []
  3. Credenza filosofica che mi scoccia qui spiegare ma che permea la mia vita []
  4. Scrittore – giornalista italiano contemporaneo, autore del bestseller “Gomorra”, libro con il quale ha ottenuto la fama del grande pubblico e l’odio dei camorristi []
  5. Posso evitarli dopo la parola “evitarli”? []
  6. Il punto interrogativo è un segno di interpunzione che viene posposto a ogni domanda []

Come far dialogare Facebook e Wordpress

Wordbook

Continua la serie di articoli “Come perdere tempo con Wordpress” :) .
Oggi presentiamo come far “dialogare” Facebook con Wordpress.
Perché? Perché voglio che la mia “casa virtuale” sia qui e non su Facebook: voglio che tutti i miei contenuti siano qui e che Facebook semplicemente li veicoli ai miei “amici”.

Innanzitutto è possibile mostrare gli articoli del proprio blog su Facebook: basta installare e configurare il plugin di Wordpress Wordbook. L’installazione è quella tipica di un plugin per Wordpress. Durante la sua configurazione viene installato sul proprio account Facebook una relativa applicazione FB che permette la comunicazione. C’è poco da dire: fa quasi tutto da solo.

Inoltre, se non si sono impostate particolari restrizioni sui commenti, i commenti ricevuti su Facebook ai propri articoli vengono automaticamente mostrati anche nel proprio blog.

Certo si può avere qualcosa di simile anche impostando il Feed RSS del proprio blog come fonte per le Note di Facebook ma il risultato finale è più instabile (articoli che compaiono e scompaiono), più brutto esteticamente e non si avrà l’aggiornamento dei propri commenti descritto sopra.

Un’altra cosa che si può fare è aggiornare il proprio stato su Facebook semplicemente inserendo un nuovo articolo nel proprio blog. Per far questo bisogna:

  • Creare una categoria apposita nel proprio blog (a meno che non si voglia che TUTTI gli articoli aggiornino lo stato
  • Iscriversi gratuitamente a TwitterFeed (servizio nato per Twitter ma che ora supporta anche Facebook)
  • Update: Affinché vengano mostrati correttamente gli apostrofi, aprire il file  wp-includes/default-filters.php e, nella sezione relativa al titolo nei feed RSS, bisogna commentare la riga:
    add_filter('bloginfo', 'wptexturize');
  • Impostare come sorgente il proprio feed RSS, specifico per la categoria che si vuole. Sì perché Wordpress permette anche i feed RSS di una specifica categoria. L’URL è http://www.ilpropriosito.it/category/nome-della-categoria/feed.

Un’altra cosa che si può fare è impostare per il proprio blog un tema che rende tutto MOLTO simile a Facebook: il Facebook Layout Wordpress Theme.

Il risultato finale è questo (un sottoblog inutile e vanaglorioso con tutti i miei fatti personali, alla faccia della privacy).

Ps: Questo articolo parte già inutile di per sé. Ma lo diventa ancora di più perché, con l’arrivo di Google Wave, Facebook passerà di moda :D .

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter

Come passare da Wordpress a Wordpress MU

Nei due articoli precedenti ho accennato cos’è Wordpress MU e come si installa su Aruba.

Ora vediamo come migrare i contenuti di un blog fatto con Wordpress in uno fatto con Wordpress MU.

Presuppongo che Wordpress MU sia installato e il nuovo blog (ancora vuoto) sia stato creato.

Probabilmente ci sono plugin che fanno al caso nostro ma perché semplificarsi la vita quando ci si può sporcare le mani con un po’ di SQL? :)

La premessa ovvia ma necessaria in questi casi è sempre: fate il backup di tutto! (sia del blog vecchio sia del blog nuovo). Non prendetevela con me se succede qualche casino e non va più niente :p

Detto questo, dal blog vecchio esportate le seguenti tabelle:

  • wp_comments
  • wp_links
  • wp_postmeta
  • wp_posts
  • wp_terms
  • wp_term_relationships
  • wp_term_taxonomy

Ora entrate nel vostro blog nuovo e cliccate sulla voce di menu Amministra sito / Blog. Vi verrà mostrata la lista di tutti i blog attualmente installati. Cercate la riga del vostro blog in questione e segnatevi il numerino sulla sinistra: è l’ID del vostro blog.

Le tabelle SQL di Wordpress MU sono uguali a quelle di Wordpress con l’unica differenza che è indicato nel nome l’ID del blog a cui si riferiscono. Se per esempio il nostro blog ha ID 2, le sue tabelle saranno wp_2_comments, wp_2_links ecc.

Se dunque il vostro ID è ad esempio 2, nel database nuovo dovete cancellare le tabelle:

  • wp_2_comments
  • wp_2_links
  • wp_2_postmeta
  • wp_2_posts
  • wp_2_terms
  • wp_2_term_relationships
  • wp_2_term_taxonomy

Ora importate le tabelle del database vecchio (precedentemente esportate) nel database nuovo e rinominatele affinché seguano lo standard di Wordpress MU wp_<ID>_ecc.

Fatto. E’ più facile a farsi che a dirsi :)

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter

Come installare Wordpress MU su Aruba

WWWordpressAruba è un’azienda che offre hosting web. Ha un sito orrendo, dà un servizio con parecchie limitazioni ma ha il grande vantaggio di essere molto a buon mercato. Questo blog, ad esempio, è ospitato da Aruba.

Una delle sue limitazioni è che l’URL del proprio sito ospitato deve assolutamente iniziare con www.

Wordpress MU, che ho installato da poco, vuole che il sito dov’è installato sia senza www (ok, avete ragione, ma siete dei talebani).

Come risolvere il conflitto? Vergognosamente a manazza:

  • Scaricate e scompattate Wordpress MU. Al momento NON installatelo!
  • Aprite il file htaccess.dist e aggiungete le seguenti righe (ammesso che il vostro sito si chiami esempio.it e la cartella principale di Wordpress MU si chiami blogs):
    RewriteCond %{HTTP_HOST} ^esempio\.it$ [NC]
    RewriteRule ^(.*)$ http://www.esempio.it/blogs/$1 [R=301,L]
  • Aprite il file index-install.php e commentate tutte le occorrenze di
    if( substr( $domain, 0, 4 ) == 'www.' )
    $domain = substr( $domain, 4 );
  • Fate la stessa cosa con il file wpmu-settings.php.
  • Ora e solo ora installate Wordpress MU. Ricordatevi di fare l’installazione per le sottocartelle e non quella per i sottodomini! Altrimenti non funzionerà niente e ve la prenderete con me.

E’ tutto. E’ macchinoso ma l’esistenza stessa di questo blog dimostra che è fattibile :)

Update: I più pigri possono direttamente scaricare un file ZIP fatto da me: contiene i file suddetti già modificati. NB: Sono i file della versione 2.9 di Wordpress MU. Non assicuro che funzioni per versioni successive (tra l’altro Wordpress 3.0, quando vedrà la luce, avrà le funzioni di Wordpress MU già integrate).

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter

Ufic.it è passato a Wordpress MU

Logo Wordpress MUCome anticipato, questo blog è passato da Wordpress a Wordpress MU.

Premessa: Quanto segue ha un senso solo per i geek con poca vita sociale come me :) .

Wordpress è il più famoso motore opensource per la gestione di un blog.

Wordpress MU più o meno è la stessa cosa (e gran parte del codice sorgente è comune) ma permette, con lo stesso motore, di gestire più blog.

Perché probabilmente non lo sapete, ma ufic.it oltre a questo blog, ospita alcuni amici e alcuni blog “nascosti” (che uso per catalogare alcuni documenti e alcune foto personali oppure semplicemente per fare “esperimenti”).

Grazie a Wordpress MU posso gestire l’aggiornamento di tutti i blog in un unico colpo.

Cosa dite? Mai più senza? Eh già… :p

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter

Lavori in corso

Omino LegoQuesta settimana (forse anche la prossima) questo blog potrebbe non essere sempre raggiungibile.
Sto passando da Wordpress a Wordpress MU.
Se funzionerà spiegherò il perché e il come ho fatto.
Cercate di sopravvivere :)

Condividi:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • PDF
  • Ping.fm
  • Technorati
  • Twitter