MySQL database replication using SCP and SSH

Did you know? One of the most important practices about networks and computers is¬†backup. Sure it is! Backup can save your ass from catastrophic failures and its implementation costs almost nothing. So why people don’t do it? I don’t know.

However, another important thing to remember is to store the backup physically far away from the original data, for example uploading it on a remote server. At work I got a very small MySQL database which needed to be replicated on a remote server every 1 minute; to do so you can 1) install & setup the MySQL relication system or 2) use bash scripting!

Option 1) seems a waste of time and resources while the 2nd one seems a lot more suited for the problem and also a lot more funny.

On the origin machine (the computer which owns the original MySQL database) I created a simple script executed every minute by the local cron daemon.

First, we get a local dump of the database. Notice the fancy password 123456 ūüôā

mysqldump -u root -p123456 <database> > /tmp/db_dump.sql

Then, we move the local backup to the remote machine via the secure copy command scp. Scp is the union of SSH and CP. It takes a file and securely transfers it to a remote location.

scp -P 56022 -i <rsakey> /tmp/db.sql user@remotehost:/tmp

The local dump has been moved to the remote /tmp directory. Now we need to import the remote dump on the remote MySQL server. To do so, we should execute the following command on the remote machine!

mysql -u root -p123456 <database> < /tmp/db.sql

We can”t execute that command because we are not there! So, how to do it? Well, that”s one of the classic situation where SSH comes so handy! With SSH we can securely execute commands as we were in front of the remote keyboard! Nice huh? Just execute the local command:

ssh -p 56022 -i <rsakey> user@remotehost “mysql -u root -p123456 <database> < /tmp/db.sql”

 

A simple cron rule will execute the scripts every 1 minute, as expected:
#!/bin/bash
* * * * * root /var/students/update_db.sh

PROGEN – Generatore profilo per Need For Speed 2

Ultimamente gioco spesso fino a tardi con amici a Need For Speed Underground 2, un videogioco spettacolare di corse tamarre nonch√® illegali. Il problema era avere tutti noi dei profili utente completi al 100% in modo da poter gareggiare su tutte le piste, con tutte le macchine e tutti gli add-on. Mi √® allora balzata in mente l’idea di programmare un piccolo applicativo in C per generare dal nulla un salvataggio con il gioco completo al 100%. La novit√† √® che si pu√≤ scegliere il nome del giocatore a differenza di quanto succede scaricando i salvataggi completi che si trovano in rete, con i quali si √® costretti a giocare col nome profilo di quella persona.

Il programmino √® scritto interamente in C e gira praticamente su tutti i sistemi Windows dal vetusto 95 sino al Vista/Seven. E’ sufficiente avviare l’eseguibile, inserire il nome da assegnare al profilo (per un massimo di 20 caratteri) e attendere la creazione del file nella stessa directory del programma.

Come funziona

Come √® possibile cambiare nome del giocatore nel file del profilo? Un profilo per NeedForSpeed Underground 2 √® semplicemente un file da circa 54 kB nel quale sono memorizzate tutte le informazioni di gioco (quanto avete guadagnato, le macchine e relative tamarrizzazioni e cos√¨ via). Tramite un editor esadecimale si vede chiaramente che alla locazione 0xD225 ha inizio la striga che codifica il nome del giocatore. Nel caso della figura qui sotto si tratta della stringa “gianluca”:

offset_01

E’ sufficiente quindi dumpare su file una partita salvata completa al 100%:

void MemoryDump(unsigned char *newname)
{
   FILE *out;
   unsigned long int i;
   out = fopen(newname,"wb");
   for(i=0;i&amp;lt;DATALENGTH;i++)
   {
      fputc(savegame[i],out);
      printf("%02X",savegame[i]);
      if(!(i%20)) printf("\n");
   }
   fclose(out);
}

e sovrascrivere i dati a partire dalla locazione NAMEOFFSET (0xD225) in poi per assegnare il nome utente desiderato.

void NameOverwrite(unsigned char *newname)
{
   strncpy(savegame+NAMEOFFSET,newname,strlen(newname));
}

A questo punto non resta che creare una cartella con lo stesso nome, copiare dentro il file di salvataggio appena creato e piazzare il tutto in:

C:\Documents and Settings\[utente]\Local Settings\Application Data\NFS Underground 2

Real Time Zoomer del frattale di Mandelbrot in C

Un piccolo programma in C per la generazione del frattale di Mandelbrot.

I frattali sono degli oggetti geometrici che si ripetono nella loro struttura allo stesso modo su scale diverse, ossia godono della propriet√† di autosimilarit√† e generano una complessit√† virtualmente infinita. La natura stessa crea e modella tutto secondo questi schemi auto-simili, ovviamente in forma approssimata; fiori, alberi, nuvole, le proteine e lo stesso universo sono tutti esempi di frattali. Il pi√Ļ famoso oggetto frattale √® l’insieme di Mandebrot ed √® generato da una formula estremamente semplice che ben si adatta ad essere elaborata da un computer.

Ecco un esempio di zoom preso da youtube:

Il programma non raggiuge questo livello di dettaglio, comunque se la cava abbastanza bene. Viene generato a video l’intero frattale iniziando a zoomare all’interno sempre pi√Ļ in profondit√†. Per disegnare ho utilizzato le librerie X11 in modalit√† raw, quindi senza l’aiuto della GPU.

I define del sorgente permettono di cambiare la larghezza e altezza in pixel della finestra video e la risoluzione con la quale viene calcolato il frattale (valori possibili sono 1,2,4,8 o 16, solo potenze del 2).¬†Di default ho impostato la finestra a 512×480 anche se sarebbe meglio inserire solo potenze del 2 (tipo 512×256 o 512×512) per rendere pi√Ļ veloce l’esecuzione.

Codice sorgente: mandelbrot

Per compilare il programma basta dare il comando

$ gcc -o mandelbrot -L/usr/X11R6/lib -lX11

e lanciare il programma con

$ ./mandelbrot

Alcuni screenshot presi durante l’esecuzione del programma:

shot1

shot2

shot3

shot5

shot4