IRC con Pidgin


IRC è uno tra i migliori protocolli di comunicazione esistenti. Esso infatti permette di comunicare senza avere un account preciso purchè si abbia un server che ne permetta l’utilizzo. Oggigiorno i server disponibili sono innumerevoli e allora perchè non sfruttare la sua praticità?

Per tutti i sistemi esistono molti software che permetto di utilizzare IRC ma ho scelto Pidgin perchè essendo multiprotocollo permette anche di utilizzare altri account (msn, hotmail, yahoo!, ICQ, ecc…) così da non dover avere un programma in uso per ogni protocollo.

La guida è stata scritta in particolar modo per gli utenti che voglio collegarsi al canale della comunità italiana di Gambas. I commenti rivolti esclusivamente a questi utenti saranno scritti in rosso.

Iniziamo con l’installare Pidgin per la nostra distribuzione. Esso è diffuso, alle volte installato di default; se così non fosse sicuramente lo si può trovare nel proprio repository.

Apriamo il programma e selezioniamo dal menù: Account -> Gestisci.

Nella finestra che si apre clicchiamo sul tasto Aggiungi.

Nella scheda di base selezioniamo il protocollo IRC, immettiamo un nome utente (sarà il nome che apparirà nella nostra lista contatti per identificare questo account), immettiamo il server, impostiamo la password (nella maggior parte dei casi non serve ma alcuni server la impongono) e alla voce Alias locale immettiamo il nick che vogliamo appaia per rilevarci.


Inserire:
Nome utente è a scelta
Server = irc.azzurra.org
Password è da lasciare vuoto e Alias locale è a scelta

Fatto ciò possiamo salvare. Ora si ritornerà al form Account. Spuntiamo ciò che abbiamo appena creato e attendiamo che si connetta.

Una volta connesso ci arriverà un messaggio dal server. Chiudiamo il messaggio e torniamo alla finestra Lista contatti. Nel menù selezioniamo Contatti -> Aggiungi chat.

Nella finestra che appare selezioniamo come Account ciò abbiamo appena creato e come canale impostiamo il canale IRC al quale vogliamo collegarci, come Password impostiamo quella che abbiamo (se ne abbiamo una) e come Alias impostiamo il nostro Nick nelle conversazioni.

Canale = #Gambas-it (attenzione alla G maiuscola)
Password è da lasciare vuota, Alias a scelta (meglio il nome utente del forum per poter essere subito riconosciuti) e Gruppo a scelta

Fatto ciò clicchiamo su Aggiungi.

Bene! Ora siamo pronti per connetterci e parlare liberamente con tutta la gente presente nel nostro canale.

Didattica Gambas – Creare database al primo avvio

Quando si crea un software che lavora in stretta connessione con un database, molto spesso quest’ultimo lo si crea precedentemente e poi lo si copia nella cartella di destinazione una volta installato il nostro programma. Questa tecnica è molto pratica ma costringe l’utente finale a dover eseguire delle operazioni in più che potrebbero essere evitate. Allora come fare?

E’ possibile ricorrere alla sub _new di Gambas che permette di gestire tutti quelli eventi che si presentano prima di avviare il form.

Posto qui il codice e lo studieremo passo passo.


   '-- nome database
sName AS String = "tabella"
'-- percorso database
sPercorso AS String = User.Home &/ ".database"
'-- nuova classe connessione database
$hConn AS NEW Connection
'-- query di creazione database
sql AS String
'-- risultato della connessione
hres AS Result

PUBLIC SUB _new()

'-- se la cartella non esiste la crea
IF NOT Exist(sPercorso) THEN MKDIR sPercorso

'-- se il database non esiste lo crea

'-- Imposta i parametri di connessione
WITH $hConn
.Type = "sqlite3"
.Host = sPercorso
.Login = ""
.Password = ""
END WITH

'-- testa esistenza database
$hConn.Open

'-- se non esiste crea il nuovo database
IF NOT $hConn.Databases.Exist(sName) THEN
$hConn.Databases.Add(sName)
$hConn.Close
$hConn.Name = sName
$hConn.Open()
'-- da uno scheletro alla tabella
sql = "CREATE TABLE 'tabella'
         ( 'id' INTEGER PRIMARY KEY,
'nome1' VARCHAR(255) DEFAULT NULL,
'nome2' VARCHAR(255) DEFAULT NULL,
'nome3' VARCHAR(255) DEFAULT NULL,
'nome4' VARCHAR(250) DEFAULT NULL,
'nome5' VARCHAR(4) DEFAULT NULL,
'nome6' VARCHAR(10) DEFAULT NULL,
'nome7' VARCHAR(4) DEFAULT NULL);"
hres = $hConn.EXEC(sql)
$hConn.Commit
END IF

'-- chiude la connessione
$hConn.Close

END


Iniziamo col vedere semplicemente che sono state dichiarate delle variabili a a livello globale che ci permetteranno una facilitazione a livello di codice.

Analizziamo la sub _new. Esso prima di tutto testa l’esistenza della cartella nascosta .database presente nella Home dell’utente. Se tale cartella esiste il programma si avvia normalemente altrimenti la crea. Se essa manca, si intuisce facilmente che vuol dire che è il primo avvio di tale programma o che essa è stata cancellata e perciò deve essere ricreata.

Una volta terminata la parte inerente la cartella si passa all’analisi della presenza del database. Per tale controllo si parte con l’impostazione dei vari parametri. Dalla voce .Type si può vedere che in questo caso si sta usando un database di tipo sqlite e pertanto dobbiamo fare riferimento alla sintassi sql esatta. Una volta terminate le impostazioni si apre la connessione col databse mediante $hConn.Open().
Qui il codice analizza l’esistenza della tabella; qualora essa non sia presenta ne crea una nuova, chiude la connessione, reimposta il nome e apre la connessione per poterla creare e popolare.

Ora tutto ciò che bisogna fare e studiare la sintassi della stringa sql che verrà poi passata come parametro e letta come una query. Mediante CREATE TABLE crea la tabella all’interno del database di nome ‘tabella’ nella quale verranno create le apposite voci nome1, nome2, nome3, ….etc.

Per praticità preferisco sempre lavorare con voci di tipo striga che poi converto in fase di lettura. Per far ciò basta specificare la lunghezza della stringa voluta passandola come parametro alla voce VARCHAR(lunghezza). Si nota che per molte voci tale lunghezza è 255; alcune voci invece riportano una lunghezza diversa, questo è dovuto al fatto che sapendo preventivamente quanto sarebbe stata lunga tale stringa ho reputato opportuno dimensionarla con il valore esatto per una migliore gestione dello spazio disponibile.

Finita la creazione della query la si passa come parametro e si chiude la connessione con il database. Fatto ciò è tutto pronto e il programma può partire avendo a disposizione tutti gli elementi utili.

Con poche righe di codice è possibile evitare al nostro utente un lavoro in più e si può dare al nostro software un aspetto più “professionale”.


ATTENZIONE: La query sql è stata scritta su più righe per motivi grafici. Quella stringa va scritta tutta insieme o divisa mediante gli opportuni separatori di stringa.

Didattica PHP: Contare i download di file


Hai un sito vuoi sapere quante volte un tuo file è stato scaricato? Ecco un pratico script che sfrutta i file di testo per poter salvare il numero di download dei vostri file. Il file richiede un file di testo per ogni file ma evita l’uso di database.

Vediamone il codice e analizziamone i passaggi:


// Ottengo il riferimento del file da scaricare
$file=$_GET['f'];

// Se non esiste già, creo la directory 'reports'.
// Qui andranno tutti i file generati con
// i counter dei vari file
if(!is_dir('reports')) {
mkdir('reports', 0777);
chmod('reports', 0777);
}

// Definisco il nome del file report
$filename='reports/'.basename($file).'.txt';

// Se il file del report esiste già, mi occupo di ottenerne il contenuto
// viceversa, definisco il counter a 0
if(file_exists($filename)) {
$handle=fopen($filename,'r');
$counter=fread($handle, filesize($filename));
fclose($handle);
} else {
$counter=0;
}

// Incremento il counter di 1, quindi scrivo il valore ottenuto nello stesso
// file, sovrascrivendone il contenuto.
$counter++;
$handle=fopen($filename, 'w+');
fwrite($handle, $counter);
fclose($handle);
chmod($filename, 0777);

// Infine, dispongo gli header per il donwload e istruisco il parser
// sul file da far scaricare all'utente.
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Transfer-Encoding: binary');
readfile("$file");
exit;


Inizialmente diciamo allo script mediante $_GET di prelevare il link che verrà passato come argomento e di salvarlo nella variabile $file. Fatto ciò controlliamo mediante is_dir se esiste la cartella report dove verranno salvati i file di testo di ogni file contenti i numeri di download. Se essa non esiste ne crea una nuova e mediante chmod le associa il permesso 0777. Ora lo script si appresta a creare la stringa, che fungerà da nome per il file di testo, contenente il nome del programma che si sta scaricando seguito dall’estensione .txt. Si noti che viene usata la funzione basename che dal link $file preleva solo il nome del file privo del path completo.
Una volta fatto ciò si controlla se il file di testo esiste. In caso esso esiste allora prelevo il dato scritto dentro e lo assegno alla variabile $counter altrimenti lo creo e la variabile la imposto pari a 0. Ora lo script non fa altro che incrementare $counter di 1 ($counter++ equivale ad $counter = $counter + 1) e la scrive sul file di testo sovrascrivendo ciò che c’è dentro. Si ha così il file contenente il numero di download del file aggiornato ogni volta che qualcuno clicca sul link di download.

Per utilizzare lo script basta scrivere nella nostra pagina web il link mediante la sintassi:


Ringrazio l’utente del forum di ubuntu-it che ha scritto questo script iniziale sul quale ho poi lavorato e che ho modificato.