Di nuovo online

Il 13 agosto mi si è schiantato il server.. Sempre i soliti problemi con lilo su debian, e grub non ne vuole sapere di funzionare sul mio disco. Mi sono stufato, sia di questi problemi che del continuo rumore delle ventole del mio IBM x205, e fatti due conti ho deciso di prendere un server virtuale. Come costi dovrei pareggiare cio che mi costava il vecchio bare metal in energia elettrica, e ne guadagno in banda e prestazioni. Almeno credo.

Dopo 27 giorni di down ho finalmente preso il pacchetto base offerto dalla SeFlow, ed ho rimesso online il blog. Per ora mi trovo bene, staremo a vedere!

Come prima cosa sono proprio curioso di vedere come si comporta google con il mio ranking, che fino a prima del down non era niente male… Ora ne approfitto e aggiorno wordpress!

Stay tuned

Nokioteca

Ho da poco cambiato cellulare, ho preso un fantastico Nokia N82. Tra le tante cose ha un antenna wi-fi integrata ed un antenna GPS. Perfetto. Ora posso guardarmi le previsioni surf-oriented ogni volta che trovo un acces point aperto, e sono un felice possessore di navigatore satellitare senza dover spendere nulla!

Mi devo soltanto sbattere un attimo per sistemare le cose, ma poi so che sarò felice :) Per muovere i miei primi passi nel mondo del Symbian ho googlato un po’, e sono finito su

Nokioteca

Community dedicata a tutti gli smarphone Nokia Symbian S60 e non solo. Nel portale troverai migliaia di contenuti freeware (temi, programmi, giochi, utilità, ecc..) e un forum immenso dove poter confrontarti con altri utenti e migliorare le prestazioni del tuo cellulare.

È assolutamente un must per ogni possessore di nokia, c’è tutto, dall’ultimo firmware all’ howto per la navigazione GPS, si parla si sbrandizzazione, hack ed utilizzo avanzato del gioiellino che ormai tutti hanno in tasca. È inutile comprarsi un cellulo da 500€ per poi chiamare e mandare sms, lasciando in disparte il 90% delle funzionalità acquistate. Piuttosto compratene uno da 50€. A me lo regala la h3g ogni 2 anni, con tutti i soldi che gli lascio per il traffico..

Per cominciare farò un upgrade del firmware, passando dal 20.0.62 che in dotazione al nuovo 30.0.019 (in realtà per i N82 no brand ce n’è uno ancora più nuovo), usando il NSU. A questo punto passerò ad applicare l’hack hellox, per poi poter installare il sw del navigatore (che devo ancora procurarmi). Incrociamo le dita :)

Stay tuned

Filtrare i messaggi in uscita con thunderbird

Prima usavo Kmail, ma non mi filtrava i messaggi spediti. Sono passato a Thunderbird proprio per questo motivo, in quanto ho qualcosa come 800Mb di email e mi piacerebbe tenerle ordinate.. Ma con mia somma sorpresa i messaggi in uscita non vengono filtrati automaticamente!

Googlando un po’ ho scoperto che è una funzionalità schedulata per la nuova versione 3, ma per la versione 2 è stato sviluppato qesto ottimo addon, che svolge egregiamente il suo lavoro.

Ci ho messo una pezza, ma mi chiedo come faccia un utente medio che voglia questa utile funzionalità. Mi rispondo da solo: torna ad usare Outlook.

Shared Memory in PHP

Navigando sul web ho trovato poca documentazione a proposito della gestione della shared memory mediante PHP, ed anche il manuale ufficiale non è molto chiaro. Ho deciso di fare un esperimento, ed ho scoperto che è un ottimo metodo per far comunicare due sessioni senza far uso intensivo di database e file temporanei, con il grande vantaggio di poter usare le potenzialità offerte dai semafori, senza dove riscrivere del proprio codice per questa delicata operazione.

Gli utilizzi sono molteplici, nel mio caso si tratta di far comunicare due applicazioni flash usando delle pagine php come ponte, nel modo più veloce e meno oneroso possibile. La prima applicazione inizializza semaforo, memoria condivisa e variabile di comunicazione, sfruttando come discriminante il proprio id di sessione.

<?php
/* start.php */
session_start();

$MEMSIZE = 512; //  dimensione della memoria condivisa (byte)

$filename = session_save_path() . '/sess_' . session_id();
echo "$filename<br />\n";

$SEMKEY = ftok('/','S');    //  key semaforo
$SHMKEY = ftok('/','M');    //  key shared memory
echo "$SEMKEY [semaforo]<br />\n";
echo "$SHMKEY [shared mem]<br />\n";

// Creo il semaforo
$sem_id = sem_get($SEMKEY, 1);
if ($sem_id !== false) {
	echo "Semaforo creato [$sem_id]<br />\n";

	// Acquisisco il semaforo
	if (sem_acquire($sem_id)) {
		echo "Semaforo acquisito [$sem_id]<br />\n";

		// Associo la shared mem al semaforo
		$shm_id = shm_attach($SHMKEY, $MEMSIZE);
		if ($shm_id !== false) {
			echo "Memoria condivisa associata [$shm_id]<br />\n";

			// Inializzo la variabile
			if (shm_put_var($shm_id, 1, "Variable 1 ciao")) {
				echo "Variabile inizalizzata<br />\n";

				// Rilascio il semaforo
				if (sem_release($sem_id)){
					echo "Semaforo rilasciato<br />\n";
				} else {
					echo "Errore nel rilascio del semaforo<br />\n";
					sem_remove($sem_id);
					shm_remove($shm_id);
				}
				
			} else {
				echo "Errore nella scrittura della variabile<br />\n";
				sem_remove($sem_id);
				shm_remove($shm_id);
			}
		} else {
			echo "Errore nell'associazione della memoria condivisa<br />\n";
			sem_remove($sem_id);
		}
	} else {
		echo "Errore nell'acquisizione del semaforo<br />\n";
		sem_remove($sem_id);
	}
} else {
	echo "Errore nella creazione del semaforo<br />\n";
}
<?

A questo punto la sessione paritaria deve soltanto conoscere l'id della sessione con cui vuole comunicare, in modo da poter inizializzare le chiavi del semaforo e della memoria condivisa. Richiamando il codice seguente, per esempio, può leggere il valore della variabile condivisa:

/* read.php */
<?php
session_start();

if (isset($_GET['file'])){

	$filename = $_GET['file'];
	echo "$filename<br />\n";

	$MEMSIZE = 512;             //  dimensione della memoria condivisa (byte)
	$SEMKEY = ftok('/','S');    //  key semaforo
	$SHMKEY = ftok('/','M');    //  key shared memory
	echo "$SEMKEY [semaforo]<br />\n";
	echo "$SHMKEY [shared mem]<br />\n";

	// Creo il semaforo
	$sem_id = sem_get($SEMKEY, 1);
	if ($sem_id !== false) {
		echo "Semaforo creato [$sem_id]<br />\n";

		// Acquisisco il semaforo
		if (sem_acquire($sem_id)) {
			echo "Semaforo acquisito [$sem_id]<br />\n";

			// Associo la shared mem al semaforo
			$shm_id = shm_attach($SHMKEY, $MEMSIZE);
			if ($shm_id !== false) {
				echo "Memoria condivisa associata [$shm_id]<br />\n";

				// Leggo la variabile
				$var1 = shm_get_var($shm_id, 1);
				if ($var1 !== false) {
					echo "Variabile letta [$var1]<br />\n";

					// Rilascio il semaforo
					if (sem_release($sem_id)){
						echo "Semaforo rilasciato<br />\n";
					} else {
						echo "Errore nel rilascio del semaforo<br />\n";
						sem_remove($sem_id);
						shm_remove($shm_id);
					}
					
				} else {
					echo "Errore nella lettura della variabile<br />\n";
					sem_remove($sem_id);
					shm_remove($shm_id);
				}
			} else {
				echo "Errore nell'associazione della memoria condivisa<br />\n";
				sem_remove($sem_id);
			}
		} else {
			echo "Errore nell'acquisizione del semaforo<br />\n";
			sem_remove($sem_id);
		}
	} else {
		echo "Errore nella creazione del semaforo<br />\n";
	}
} else {

?>

<form action='read.php' method='get'>
  <input type='text' name='file' /><br />
  <input type='submit' />
</form>

<?php
}
?>

Richiamando (da un altro browser) la pagina senza parametri viene presentata una form che richiede l'inserimento del path del file di sessione del paritario. In questo caso basta un cut/paste dall'output della pagina precedente, in un applicazione reale ci si appoggierà ad un database. Inserendolo si prende il controllo del semaforo, ed in seguito si può leggere il contenuto della variabile di sessione. In modo del tutto analogo si può modificare il contenuto della variabile:

/* write.php */
<?php
session_start();

if (isset($_GET['file']) && isset($_GET['value'])){

	$filename = $_GET['file'];
	echo "$filename<br />\n";
	$value = $_GET['value'];
	echo "$value<br />\n";

	$MEMSIZE = 512;             //  dimensione della memoria condivisa (byte)
	$SEMKEY = ftok('/','S');    //  key semaforo
	$SHMKEY = ftok('/','M');    //  key shared memory
	echo "$SEMKEY [semaforo]<br />\n";
	echo "$SHMKEY [shared mem]<br />\n";

	// Creo il semaforo
	$sem_id = sem_get($SEMKEY, 1);
	if ($sem_id !== false) {
		echo "Semaforo creato [$sem_id]<br />\n";

		// Acquisisco il semaforo
		if (sem_acquire($sem_id)) {
			echo "Semaforo acquisito [$sem_id]<br />\n";

			// Associo la shared mem al semaforo
			$shm_id = shm_attach($SHMKEY, $MEMSIZE);
			if ($shm_id !== false) {
				echo "Memoria condivisa associata [$shm_id]<br />\n";

				// Scrivo la variabile
				if (shm_put_var($shm_id, 1, $value)) {
					echo "Variabile scritta [$value]<br />\n";

					// Rilascio il semaforo
					if (sem_release($sem_id)){
						echo "Semaforo rilasciato<br />\n";
					} else {
						echo "Errore nel rilascio del semaforo<br />\n";
						sem_remove($sem_id);
						shm_remove($shm_id);
					}
					
				} else {
					echo "Errore nella scrittura della variabile<br />\n";
					sem_remove($sem_id);
					shm_remove($shm_id);
				}
			} else {
				echo "Errore nell'associazione della memoria condivisa<br />\n";
				sem_remove($sem_id);
			}
		} else {
			echo "Errore nell'acquisizione del semaforo<br />\n";
			sem_remove($sem_id);
		}
	} else {
		echo "Errore nella creazione del semaforo<br />\n";
	}
} else {

?>

<form action='write.php' method='get'>
	<input type='text' name='file' /><br />
	<input type='text' name='value' /><br />
	<input type='submit' />
</form>

<?php
}
?>

A questo punto non resta che da implementare una pagina per distruggere l'area di memoria condivisa, in modo da non incappare in problemi di saturazione della memoria.

Lascio la creazione di tale pagina come esercizio, dato che non trovo più il relativo sorgente :P

/* delete.php */

Il codice presentato è un semplice proof of concept, e non è da intendersi valido per un utilizzo in produzione. Mancano tutta una serie di controlli sulla corretta gestione della memoria, sulla validazione del paritario e del necessario timing nel caso in cui si cerchi di accedere ad un semaforo "rosso". Magari in un prossimo post affronterò la questione, per ora devo andarmela a studiare :)

Happy coding!

Esclusioni di copertura della mia assicurazione (Zurich Connect)

Leggendo il contratto in scadenza, in modo da valutare eventuali differenze in caso di cambio compagnia, mi sono imbattuto nella seguente clausola di esclusione di copertura, che mi ha fatto molto ridere…

zurich

La mia vecchia assicurazione (RAS) non mi copriva nemmeno nel caso di incidente contro un aereo durante la sua fase di decollo/atterraggio, tantomeno nel caso di danneggiamento nei confronti di una nave.
Quasi quasi cambio assicurazione solo per scoprire quali nuove clausole si riescono ad inventare!!!