Nuit du Hack 2011 à Disneyland Paris

C’est hier, samedi 18 juin 2011 que se déroulait la Nuit du Hack 2011. 22 heures et 30 minutes de conférences et ateliers axés sur les techniques de hacking même non numériques tels que le crochetage de serrures…

Pub Nuit du Hack 2011

Nuit du Hack 2011

Je vous invite à aller sur le site de la Nuit du Hack pour connaître le détail du programme et vous faire une idée des sujets de hacking du moment.

Personnellement j’ai du quitter cet évènement dimanche vers 1h00 du matin car je devais courir aux 10km L’Équipe à Paris (couru en 00:51:47, je visais 00:48:00)…

Les ateliers ainsi que le concours de hacking ont débuté avec des sujets très intéressants et passionnants :

  • Concours de hacking de type capture de flag : attaques d’ennemis et défenses de son réseau
  • Etude d’un test d’intrusion via Metasploit
  • Electronique programmable et systèmes libres
  • Atelier d’initiation à la cryptographie et l’utilisation des GPUs
  • Initiation ARM pour plateforme mobile
  • Crochetage basique, serrure haut sécurité, Impression
  • etc…

Singleton threadsafe en cplusplus

Le motif de conception Singleton est l’un des plus simple a maîtriser. Mais lorsqu’il s’agit d’accès concurrentiel dans un programme, les implémentations classiques ne suffisent plus. Il faut garder à l’esprit que les architectures multiprocesseurs ont plusieurs caches souvent asynchrones « write-back » par opposition à « write-through » pour synchrone (rare car moins performant).

Un singleton moderne devrait implémenter les notions suivantes :

Qu’est ce qu’un Singleton ? En programmation un Singleton est un objet dont on veut garantir qu’une seule instance vit pendant l’exécution du programme. Imaginez un système d’exploitation qui aurait deux instances de son système de fichier !!! C’est le boxon assuré.

Voici mon implémentation en cplusplus (code source d’exemple) :

//singleton.h
#ifndef __SINGLETON_H_
#define __SINGLETON_H_

#include <cstdlib> //std::atexit()

#define MFENCE			"memory_fence"
#define MUTEX_LOCK		"lock"
#define MUTEX_UNLOCK	"unlock"
#define MEMORY_READWRITE_BARRIER	"memory_barrier"

template <typename T>
class Singleton
{
public:
	static T& instance()
	{
		return *get_instance();
	}

	static const T& const_instance()
	{
		return *get_instance();
	}

	static void destroy()
	{
		MFENCE; //On s'assure que tous les caches processeurs sont à niveau
		if (pInstance_ != 0)
			delete pInstance_;
	}

protected:
	Singleton(){}
	~Singleton()
	{
		pInstance_ = 0;
		created_ = false;
	}

private:
	static T* pInstance_;
	static volatile bool created_;
	Singleton(const Singleton &);
	Singleton& operator= (const Singleton &);

	static T* get_instance()
	{
		if (created_ == false)
		{
			MUTEX_LOCK; //On s'assure qu'un seul thread a la main
			if (pInstance_ == 0)
			{
				pInstance_ = new T();
				std::atexit(Singleton::destroy);
			}
			MUTEX_UNLOCK;
			MEMORY_READWRITE_BARRIER; //On s'assure que le compilateur ne change pas l'ordre de ces 2 instructions
			created_ = true;
			MFENCE; //On s'assure que tous les caches processeurs sont à niveau
		}
		return pInstance_;
	}
};

template<typename T> T* Singleton<T>::pInstance_ = 0;
template<typename T> volatile bool Singleton<T>::created_ = false;

#endif//!__SINGLETON_H_

Notons que pour les mutexes, les meilleures implémentations permettent aussi, en plus d’être dans une zone synchrone, de réaliser l’équilant de [SLM]FENCE (PIII : SFENCE – P4 : LFENCE, MFENCE). Pour ce qui est de l’annulation de l’ordre des instructions par le compilateur, je ne vois rien d’autres que d’utiliser une librairie qui fournit des MACROS adaptés aux différents compilateurs et plateformes.

Bonne et heureuse année 2011 à tous

Cette année 2010 est passée à une vitesse telle que je n’ai pas testé grand chose…

Néanmoins dans mes nouvelles résolutions pour 2011 :

  • C++0X
  • Go (Google)
  • Ruby (Rails 3)
  • Python 3
  • Java (GWT 2)

Meilleurs vœux 2011 !!!

MapReduce un modèle à connaître

Vous avez sans doute entendu parler de la Google Dance (mécanisme d’indexation du moteur de recherche de Google) réalisé une ou deux fois par mois ? Et bien depuis MapReduce (août 2004), la Google Dance « Powered by MapReduce » est du quasi temps réel ; Google Maps, Microsoft Bing, Facebook, Twitter etc… C’est encore du « MapReduce Inside ».

MapReduce est un modèle de programmation vulgarisé par les ingénieurs de Google, Jeffrey Dean et Sanjay Ghemawat. L’idée de MapReduce est relativement simple, traiter d’énormes volumes de données sur une architecture distribuée, parallèle et/ou multiprocesseur.

Je ne vais pas, encore une fois, reproduire les multiples exemples qu’on trouve sur le sujet, mais je me devais de faire passer le message. Pour ceux que cela intéresse, voici quelques liens :

Il va de soi que nous sommes déjà dans une ère où le volume de donnée à traiter devient colossal pour nos systèmes d’informations. Les machines sont quasiment toutes multiprocesseurs, nous devons adapter nos programmes pour utiliser toutes la puissance du matériel. Cela nécessite une complexité supplémentaire dans les programmes qui doivent être concurrents tout en en étant fiable. Concrètement utiliser des modèles de programmation tels que MapReduce, Threadpool etc… sont une nécessité dès à présent.

Le prochain standard du C++, C++0x, présenté par Bjarne Stroustrup

Le créateur du langage C++, Bjarne Stroustrup, décrit depuis son site internet les nouvelles fonctions qui intégrerons la future version du langage actuellement encore en version draft.
Cette version est bien avancée, puisque disponible sur les compilateurs les plus importants (GCC, MSVC, etc…).

Parmi les fonctionnalités que j’attends le plus :

  • Les threads
  • Les opérations atomiques
  • Les expressions lambdas
  • Les listes d’initialisation
  • Construction et destruction dynamiques, concurrentiels d’un objet
  • Paramètres variables pour les « Template » (variadic templates)
  • etc…

J’ai hâte d’y être, même si je test déjà pas mal des fonctionnalités avec GCC.

Lien : http://www2.research.att.com/~bs/C++0xFAQ.html
Ils en parlent : herbsutter, bertrandleclercq.blogspot.com, danielkitta.org, Visual C++ Team Blog