Piero V.

Another rant on emails

A pair of weeks ago, some people asked me for help because their Outlook was not working anymore. It complained that its data file had reached the maximum size.

Being a Linux user, I have never had Outlook on my machines.

I used it only at my previous job, with an exchange server. I must admit it used to work fine. It even has some appreciable features, such as the company directory, shared calendars that work immediately, etc.

So, when people ask me if I can help them with their Outlook problems, I try to answer as a courtesy. Usually, they are easy problems, and I solve them by searching for their error messages in English and translating the solution into Italian.

One of the suggested solutions for the problem was to empty the bin. But it contained almost one million emails 😨️. So, I went to the webmail and found that the webmail also has the same amount of emails to delete.

The web client also says that emails are automatically deleted after 90 days, but it contained emails from more than two years ago.

It also has a button to empty the folder… but I think it communicates to the backend through IMAP itself, and of course, it went on timeout 😄️. … [Leggi il resto]

Qualcosa è andato storto

L’email è una tecnologia che potremmo dire venga dal paleolitico dell’informatica: SMTP è datato 1982, MIME 1996 (RFC 2045), eppure oggi mi sono trovato in difficoltà.

Il mio obiettivo era stampare i biglietti per l’aereo a mia sorella, una cosa che non dovrebbe richiedere 50 minuti.

Ma partiamo dalla radice del problema: Lufthansa ha pensato di inviare il biglietto come mail HTML con le varie immagini di cui è composto come ulteriori allegati. Questa cosa è possibile, ed è regolata dalla RFC 2392 (Content-ID and Message-ID Uniform Resource Locators, datata agosto 1998), tuttavia, in generale, fare una mail in HTML con immagini non è mai una cosa banale, esistono diverse soluzioni, ma nessuna perfetta.

Una soluzione ottima sarebbe stato un bel file PDF, aperto tranquillamente da ogni dispositivo, salvato e gestito come meglio si crede.

Ciò che però ha veramente causato il problema è stato il modo in cui io ho ricevuto l’email in questione: inoltrata. … [Leggi il resto]

Heartbleed

OpenSSL è una delle librerie più diffuse per la crittografia, è usata da tantissimi software, inclusi Apache, OpenSSH, OpenVPN etc…

Recentemente si è scoperto che le release degli ultimi due anni soffrivano di un bug nell’heartbeat, chiamato Heartbleed.

Questo bug, in pratica, permette di ottenere i dati rimasti in memoria, tra i quali anche la chiave privata di un sito, rilasciata normalmente da autorità di certificazione dopo aver controllato documenti su documenti che verifichino l’identità del richiedente.

È un durissimo colpo, il 66% dei siti web era vulnerabile: Google (con tutti i suoi prodotti, inclusi Android 4.1 e 4.1.1), Facebook, Wikipedia e persino Microsoft, sebbene sia software libero, ne erano affetti!12

Lo è sia per tutte le tecnologie che usavano versioni infette della libreria, che, penso, per il progetto OpenSSL in sé.

Molti siti e software importanti hanno già rilasciato le patch, Debian ha addirittura rilasciato la patch il giorno stesso e il giorno dopo una serie di ISO di Wheezy corrette, aggiornando addirittura il numero di versione. … [Leggi il resto]

Torno a GDM

Da molto tempo in alcuni computer sto utilizzando LightDM anziché GDM.

Entrambi sono due gestori di display, ovvero permettono il login grafico e controllano il server X. Il primo è nato con lo scopo di essere leggero, permette una personalizzazione in HTML ed è diventato la scelta predefinita di Ubuntu già da alcune versioni, il secondo è quello ufficiale di GNOME.

Su Debian GDM3 è ancora il DM predefinito per chi ha GNOME, però mi sembrava lento all’avvio, perciò avevo deciso di cambiarlo.

Da tempo, però, pensavo di tornare a GDM perché non mi sembrava più così male come tempi d’avvio, inoltre non era stato rimosso dall’avvio e ad ogni boot veniva fuori il messaggio che era disabilitato.

Una cosa che poi mi seccava parecchio, riguardo LightDM, era che ad ogni aggiornamento dovevo ripristinare l’opzione di visualizzare la lista degli utenti anziché mettere lo username ogni volta, anche se magari esisteva un modo per fare file di configurazione separati dal resto.

Negli ultimi tempi ho avuto qualche problema con GNOME: non si montavano le unità di massa automaticamente e come ultimo bug non funzionavano più l’arresto del sistema o lo standby da parte dell’utente. … [Leggi il resto]

Singleton in PHP + annesso bug

È da un po’ di tempo che sto programmando in C++ ma oggi sono tornato a programmare un po’ in PHP.

Devo dire che ormai mi sembra strano non dover dichiarare più variabili, non aver più gli header e poter implementare i metodi fuori dalla classe stessa.

Però mi ha fatto bene questa pausa di PHP perché ho imparato una tecnica molto interessante, quella delle “singleton”.

In pratica le singleton sono classi che possono avere una sola istanza.

Il loro metodo si riduce praticamente ai metodi statici, però sono più eleganti, secondo me.

Ci sono due principali metodi in C++ per fare i singleton: impostare il costruttore private, in modo da impedire la chiamata al di fuori della classe e dopo chiamarlo o da un metodo statico oppure tramite l’overriding dell’operatore new.

Implementare il primo metodo in PHP è facilissimo, mentre implementare il secondo dovrebbe essere fattibile tramite il metodo magico __call. Però non funziona, ma per farvi vedere come sarebbe lo metto lo stesso nel codice, che è il seguente:

<?php

class MiaClasse {

	/**
	 * L'istanza del singleton.
	 *
	 * @var MiaClasse object
	 * @access private
	 */
	private static $msSingleton = null;

	/**
	 * Un numero per fare una prova.
	 *
	 * @var integer
	 * @access public
	 */
	public $prova = 0;

	/**
	 * Il costruttore.
	 *
	 * È privato perché così si può creare una nuova istanza
	 * solamente da altri metodi di questa classe.
	 */
	private function __construct()
	{
		echo "Costruisco la classe\n";
	}

	/**
	 * Ritorno (o creo, se non esiste) il singleton.
	 */
	public static function getSingleton()
	{
		if(is_null(self::$msSingleton)) {
			self::$msSingleton = new MiaClasse();
		}

		return self::$msSingleton;
	}

	/**
	 * Fallback per le chiamate ai metodi privati.
	 *
	 * Se per caso si prova a creare una nuova istanza, tramite
	 * questa funzione chiamo sempre getSingleton.
	 * È un po' come l'overriding dell'operatore new in C++.
	 */
	public function __call($name, $arguments)
	{
		echo '__call called. $name = ' . $name;
		if($name == '__construct') {
			return self::getSingleton();
		}
	}

}

$a = MiaClasse::getSingleton();
$a->prova = 20;

$b = MiaClasse::getSingleton();
echo $b->prova . "\n";
$b->prova = 27;
echo $a->prova . "\n";

$c = $a->__construct();
$c->foo = 32;
echo $a->foo . "\n";

/*$d = new MyClass();
echo $d->foo . "\n";
$d->foo = 29;
echo $a->foo . "\n";*/

Come vedete se modifico $b modifico anche $a. … [Leggi il resto]