Archive for Settembre, 2007

MySQL, Source Code, Web, php

Interfaccia alla classe MySQLDump per il backup

La classe MySQLDump è stata aggiornata a una nuova versione e questo articolo contiene informazioni obsolete. Per informazioni sulla nuova versione controllare l’articolo sulla nuova versione

Dopo il successo dell’articolo Backup di un database mysql da php, ho deciso di scrivere un piccolo post su un file che può ritornare utile per scaricare il backup del db di un sito o di un blog wordpress direttamente dal browser.
Per usare lo script, basta semplicemente scaricarlo e modificare le prime linee, dove è contenuta la configurazione:

// Configurazione del DB
$server = "IP del server (localhost dovrebbe andare bene nella maggior parte dei casi=";
$username = "Nome utente del db";
$password = "Password del db";
$dbToDump = "Nome del db di cui fare il dump";
// password per accedere alla pagina php. Ricordati di cambiare la password di default!!!
$backupPassword = "UltraSecretKeyThatYouMUSTInsertHere";
// nome del file in cui salvare il backup
$filename = "backup.sql.gz";

Dopo ciò, si può uploadare il file nel server, nella stessa cartella dove è presente la classe MySQLDump.
Per accedere allo script bisogna specificare due parametri: la password per accedere allo script (pass), e un altro parametro (t) che se è 1 separerà le SQL insert ogni 100 righe.
Per esempio, se si è uploadato il file nella directory principale del sito, basta scrivere nella barra degli indirizzi del browser:

http://www.iltuosito.it/backup.php?pass=UltraSecretKeyThatYouMUSTInsertHere&t=1

…e il browser aprirà la finestra di dialogo per scaricare il file con il backup del db!

Download MySqlDump Interface.php. Downloads: 415

Per ulteriori informazioni sulla classe MySQLDump, leggere l’articolo originale, o scaricare il sorgente da qui:

Download MySQLDump. Downloads: 1938

C, Source Code

Stringa auto-dimensionante in c

In questo articolo spiegherò come creare una struttura con relative funzioni associate per permettere di utilizzare una stringa che incrementi la sua dimensione appena lo spazio allocato non basta più per conservare i caratteri, utilizzando soltanto le caratteristiche del linguaggio c (niente classi quindi).
Una stringa del genere è molto utile nei casi dobbiamo lavorare con stringhe di cui non si conosce a priori la lunghezza (per es. una stringa letta da un file xml): possiamo quindi leggere i caratteri ad uno ad uno fino a quando non arriviamo alla fine della stringa, senza preoccuparci dell’allocazione della memoria.
Innanzitutto analizziamo la struttura dati che definisce la stringa autoincrementante:

// Struct containing the growing string
typedef struct
{
	// stringa
	char * text;
	// lunghezza della stringa (comprensiva dello zero terminatore)
	int length;
	// capacità della stringa
	int capacity;
} growing_string;

La variabile text sarà il posto dove effettivamente andremo ad allocare la stringa, length indicherà la lunghezza della stringa corrente mentre capacity la memoria allocata per la stringa.
Per capire meglio la differenza tra length e capacity guardiamo la prossima immagine:

Capacity-Length

Capacity rappresenta quindi lo spazio allocato in memoria per la stringa, mentre length rappresenta il numero di caratteri effettivamente occupati (comprensivo di zero terminatore). Si capisce facilmente che se si aggiungono abbastastanza caratteri da fare in modo che length sia maggiore di capacity, allora bisogna riallocare lo spazio di memoria in modo da far entrare più caratteri.
Continue Reading »

.NET, C

Come realizzare stampe in formato A3 con Crystal Report

Da qualche settimana ho cominciato ad utilizzare per lavoro la versione di Crystal Report fornita in bundle con Visual Studio 2005. Devo dire che è uno strumento potente, che consente di realizzare report di diversa natura e tipologia rimanendo all’interno dell’ambiente .NET e non dovendo ricorrere ad applicativi esterni verso cui esportare i dati, come Excel.
Ciò nonostante, a mio avviso questo applicativo possiede delle pecche che mi auguro possano essere risolte nelle release successive.
Una cosa che mi ha letteralmente fatto uscire di senno è stata la realizzazione delle stampe di grafici in formato A3. Spesso infatti i dati che intendiamo visualizzare su un grafico sono molti e la stampa in formati di dimensione inferiore, come l’A4, non consente di ottenere una rappresentazione nitida e precisa.

Grafico Crystal Report

La cosa triste che ho potuto constatare è che Crystal Report imposta automaticamente lo spazio per realizzare il progetto del report in relazione ai settings della propria stampante installata. Mi spiego meglio: se la stampante che ho installata sul mio PC non supporta la stampa in formato A3, non mi è possibile effettuare progetti dei report di dimensione A3.
Questo fatto è molto limitante per diverse ragioni. Intanto perchè spesso i report creati non necessitano di essere stampati su carta ma basta soltanto che siano visualizzati sul monitor dell’utente, e quindi non vedo la ragione per cui se non devo stampare un report non devo neanche poterlo progettare in quel formato. Un altro motivo consiste nel fatto che le impostazioni della stampante eventualmente installata sul PC dello sviluppatore, non è detto che corrispondano con quelle delle eventuali stampanti installate sui PC degli utenti reali del software.
Continue Reading »

C

Thread in C# utilizzando i metodi anonimi

Per creare un Thread in C# solitamente si usa scrivere un metodo con all’interno il codice che il Thread deve eseguire, per poi creare il Thread settandogli come delegate il metodo appena creato:

public void FaiQualcosaDiUtile()
{
	for (int i = 0; i < 100; i++)
	{
		// faccio qualcosa...
		Thread.Sleep(500);
	}
}

static void Main()
{
	// qui creo il thread passandogli il delegate del metodo creato pocanzi
	Thread t = new Thread(FaiQualcosaDiUtile);
	t.Name = "Thread di prova";
	t.Start();
}

dual core

Per creare i Thread, il C# dà l’opportunità di utilizzare i metodi anonimi. Per utilizzarli, basta scrivere il codice da eseguire nel Thread all’interno del codice della creazione dell’oggetto Thread, offrendo quindi la possibilità di non scrivere il metodo:
Continue Reading »