J’ai repris (partiellement) le contrôle de mes données privées – Retour d’expérience

Par défaut

Voilà quelques temps maintenant que je m’efforce de faire attention aux traces que je laisse et à la concentration de mes données chez les différents acteurs du web. Google fournit de très nombreux outils et lorsque l’on est un peu geek, il est facile de se laisser séduire.

Une chose importante. Puisque toutes ces solutions sont gratuites il faut bien avoir conscience que le produit c’est alors le consommateur. Ainsi donc lorsqu’on veut reprendre un peu de contrôle sur ses données, il faut accepter de se tourner vers des solutions payantes.

Cahier des charges  : un client mail sympa, gestion des contacts, du calendrier, support des protocols carddav / caldav (/webdav). Le tout avec si possible des logiciels libres.

Pour se faire j’ai étudié tout un tas de pistes.

  • Cozy.io : la solution me semble encore un peu jeune, le webmail ne me plait pas plus que ça et à l’époque il n’y avait pas de support caldav / carddav. Finalement lorsqu’on additionne le coup d’un petit Raspberry / Arduino + le coup de l’électricité, la solution n’est pas si intéressante. Et puis vivant en campagne, le débit montant n’est pas terrible.
  • OVH Mx Plan : solution déjà testée par le passé et qui ne m’a pas réellement convaincue. A cela plusieurs raisons. La première c’est que leur filtre anti-spam / anti-virus n’était pas terrible (il y a 2-3 ans). La seconde c’est que cela m’imposait l’utilisation d’un client mail lourd (je déteste Thunderbird et même si Geary Mail aurait pu faire l’affaire à l’époque, il était trop buggué ; et mailpile était en alpha) ; J’aurais pu passer par un webmail tel que RoundCube mais franchement, lorsqu’on vient de GMail, le chute est rude. Et enfin, cette solution ne réglait pas les questions de calendrier et des contacts.
  • Hébergement mutualisé : j’en reviens souvent à l’utilisation de roundcube ce qui ne m’enchantait pas réellement.

Zimbra

Au fil du temps mes recherches m’amènent de plus en plus souvent à Zimbra. Pour l’avoir utilisé chez un client, le webmail est top, carddav et caldav sont supportés et cerise sur le gâteau, le push semble possible. Je fini donc par tomber sur un petit hébergeur associatif français, proposant des offres d’hébergements mutualisés + Zimbra.

Ma situation actuelle

Web4allVoilà un an maintenant que je suis chez Web4all. Pour un petit hébergeur associatif, il faut dire qu’ils font fort. Le manager est vraiment vraiment top, la qualité de service est elle aussi au rendez-vous. Zimbra est régulièrement mise à jour et le service push est fournit nativement dans leurs offres.

  • Email / Agenda / Contacts : Zimbra
  • Gestion de mes fichiers, galeries photo : Owncloud installé chez Web4all + Hubic (code de parrainage: HWUKLW). Ces deux solutions proposent un client de synchronisation à la dropbox. Pour les photos je suis passé de PhotoShow à Owncloud pour des raisons de commodité.
  • Favoris : Shaarli
  • Navigateur : Firefox bien évidemment – je n’ai jamais eu une grande confiance dans Chrome. Et puis de toute façon je trouve que Firefox est maintenant plus performant.
  • [à améliorer] Téléphone : Nexus 4 factory. J’ai la encore un peu de travail. La solution sur une rom CyanogenMod mais il me manque encore la fonctionnalité navigation GPS (OpenStreepMap ok pour la carto). Il faut dire que Waze est plutôt bien. Niveau mail K9Mail fait bien l’affaire et comme Zimbra+Web4all = push, je retrouve facilement mes mails / contacts / agenda.
  • [à améliorer] Moteur de recherche : j’aimerais pouvoir utiliser par défaut duckduckgo, mais il n’est pas encore au niveau de Google pour tout ce qui est recherches techniques.

Et enfin, dans la mesure du possible j’ai désactivé la collecte de donnée et autres « historiques » chez Google, Facebook & co.

Dell XPS 13 (L322X) sous Ubuntu 13.10

Par défaut

Voilà maintenant un mois qu’Ubuntu Saucy est sortie, les quelques petits bugs du départ sont donc maintenant corrigés, il était temps de passer sous 13.10.

Un rapide petit tour sur le forum chez Dell laisse penser que tout devrait bien se passer.

http://en.community.dell.com/techcenter/os-applications/f/4613.aspx

Plutôt que de repartir de la 12.04 Développer Edition fournis par Dell, j’ai décidé de faire l’installation directement à partir de l’image officielle d’Ubuntu. Au finaltout fonctionne du premier coup sans avoir à ajouter de repo ! J’ai simplement ajouté indicator-cpufreq.

Il faut bien avouer que c’est super plaisant et super confortable d’avoir un ordi sous Linux, où tout fonctionne bien du premier coup, où l’on est pas dans le compromis ou dans la bidouille et qui offre des caractéristiques réellement sympa (multitouch, résolution HD, batterie efficace, ssd, etc).

Qu’elles sont loin les années où il fallait régler les fréquences de son moniteur pour avoir un environnement graphique !

Faire fonctionner Juniper Network sous Ubuntu 13.10

Par défaut

Petite astuce pour faire fonctionner cette saloperie de Juniper Network sous Ubuntu Saucy (13.10) en 64 bits.
Pour être honnête, je ne suis pas sur à 100% de mon coup, j’ai tellement bidouillé pour arriver à le faire fonctionner qu’il est possible que ces quelques lignes ci-dessous ne suffisent pas.

sudo apt-get install openjdk-7-jre icedtea-7-plugin 
sudo apt-get install openjdk-7-jre:i386
sudo update-alternatives --display java
sudo update-alternatives --config java

Choisir « java-7-openjdk-i386″.

Utilisation de Zend JavaBridge – Part 2

Par défaut
Business Lib
Architecture de notre librairie :
Business/
– Controler/
—- CompteControler.php
– DataHandler/
—- EjbDataHandler.php
– Dto/ (ou pojo/popo)
—- Compte.php
–Helper/
—-DtoHelper.php
datahandler/EjbDataHander.php



/**
* EJB DataHandler - S'occupe de la connexion aux services
*/
class EJBDataHandler {

protected $_contextHn;
protected $_contextService;
protected $_serviceLookup;
protected $_serviceLookupName;


/**
* Constructeur
* @param String Ip / host du serveur JBOSS
* @param String Nom du bean (service)
*/
function __construct($serviceHost, $serviceLookupName) {
$environnement = array(
"java.naming.factory.url.pkgs" => "org.jboss.naming:org.jnp.interfaces",
"java.naming.provider.url" => $serviceHost
);

// Connexion
try {
$this->_contextService = new Java("javax.naming.InitialContext", $environnement);
} catch(JavaException $e) {
$exception = java_last_exception_get();
throw new JavaException("Impossible de se connecter au(x) serveur(s) Jboss.\n".$exception->getMessage());
}

// Lookup
try {
$this->_serviceLookup = $this->_contextService->lookup($serviceLookupName);
} catch(JavaException $e) {
$exception = java_last_exception_get();
throw new JavaException("Impossible de se brancher sur le service.\n".$exception->getMessage());
}
$this->_serviceLookupName = $serviceLookupName;
}


/**
* Fonction magique permettant d'appeler les méthodes des services
* @param String Nom de la méthode
* @param Array tableau d'arguments

*/
public function __call($methode, $arguments) {
try {
$result = call_user_func_array(array($this->_serviceLookup, $methode), $arguments);
} catch(JavaException $e) {
$exception = java_last_exception_get();
throw new Exception($exception->getMessage(), $exception->getErrorNumber());
}
return $result;
}
}

Quelques explications s’imposent, commençons pour le constructeur.
Deux arguments sont attendus, le premier étant l’adresse du serveur Jboss et le second, le Bean sur lequel on se connecte. La fonction java_last_exception_get() permet de caster l’exception en un objet java du type de l’exception levée (il est fort probable que la gestion des exceptions coté métier soit très spécifique).
Nous utilisons une méthode magique en php, à savoir __call. Noter que par exemple $exception->getErrorNumber() est une méthode propre à l’exception retournée.
Passons aux controlers.
controler/Controler.php
D’abord une classe abstraite qui va nous permettre d’effectuer quelques actions communes à tous les controlers. Tous les controlers hériterons ensuite de celle-ci.


require_once('datahandler/EJBDataHandler.php');
require_once('helper/DtoHelper.php');


/**
* Classe abstraite Controler
* @abstract
*/
abstract class Controler {

public $serviceName;
public $serviceStatut;
public $serviceError;

protected $_dataHandler;

/**
* Constructeur
*/
function __construct($service) {
$this->serviceName = $service;

try {
$this->_dataHandler = new EJBDataHandler('ip_server_jboss:port', $service);
$this->serviceStatut = true;
} catch(Exception $e) {
$this->serviceStatut = false;
$this->serviceError = $e->getMessage();
}
}

/**
* Initialise un "contexte"
* @access public
*/
public function initContext($userId, $context, $lang) {
$this->_dataHandler->initContext($userId, $applicationName, $lang);
}
}