Vision : Le framework de reconnaissance de CoreML

Qu’est-ce que Vision?

Vision est le nouveau framework d’iOS 11 et des autres plateformes Apple. Vision fait partie du framework Core ML. CoreML permet de confronter facilement des modèles machines learning  avec des données afin d’obtenir les prédictions.  Le framework Vision framework aide à alimenter les modèles machine learning qui traitent les images. Vision peut traiter en live le flux de la caméra et extraire les informations de chaque image en utilisant à la fois les modèles de machine learning embarqués et externes.

Ce que permet Vision

Vision offre un grand nombre de fonctionnalités :

  • Reconnaissance de visage
  • Reconnaissance partielle comme le nez, la bouche, l’oeil gauche, etc
  • Détection de l’horizon
  • Détection de rectangle
  • Tracking d’objets
  • Reconnaissance d’objets via des modèles machine learning externes

Tutoriel en Swift sur Vision

 

Un exemple de projet en Swift utilisant Vision :

https://github.com/jeffreybergier/Blog-Getting-Started-with-Vision

Présentation sécurité Cocoaheads à Lyon

Le 9 mars 2017 , j’ai eu le privilège de présenter « La sécurité sur iOS » aux Cocoaheads de Lyon dans l’amphithéâtre du site Orange Gambetta à Lyon.

Durant cette présentation j’ai abordé les points les plus récurrents dans le domaine de la sécurité sur mobile comme contre quoi se défendre ou où trouver les informations fiables sur la sécurité.

Pour télécharger la présentation : Cocoaheads – 2017-03-09

Mon Guide Rennes

Mon Guide Rennes, disponible sur iPhone et iPad, vous permet d’avoir accès à toutes les informations nécessaires pour vivre à Rennes ou encore pour découvrir Rennes.

Informations de proximité et autres renseignements vous sont fournis via les actualités de Rennes Métropole ou encore l’annuaire TIC-TAC de Rennes.

Tenez-vous au courant des concerts et festivals sur Rennes et aux alentours.

Partagez facilement les articles, actualités ou fiches qui vous intéressent.

Venez jouer aux divers quiz afin d’améliorer votre connaissance de Rennes ou simplement vous amuser.

Que vous soyez à pieds ou à vélo, découvrez Rennes et sa région avec les circuits touristiques. Balade nature, historique ou musée, il y en a forcément une pour vous.

L’application vous intéresse? N’hésitez pas à laisser une note positive sur l’AppStore.

Basé sur l’API Open Data de Rennes Métropole. (Données du 30/06/2014) http://www.data.rennes-metropole.fr/
Flux RSS issus du site de Rennes Métropole. http://www.rennes-metropole.fr/
Flux RSS pour les concerts et festivals. http://35.agendaculturel.fr/

Vous pouvez la découvrir ou la télécharger à l’adresse suivante :   Mon Guide Rennes sur iTunes
Pour toute question ou renseignement me contacter à l’adresse support@phoenixdesign.fr

Gestion des image sur Android

Quel format d’image?

Le format PNG sur 24 bits (8 bits pour le rouge, 8 bits pour le vert, 8 bits pour le bleu, 8 bits pour la transparence) est bien adapté pour réalisé un design complexe.

Les principales différences avec le format JPG, très répandu, sont :
– une qualité sans perte
– la gestion de la transparence
– un affichage plus propre pour les rendus typographiques

Quel taille d’image?

De part la nature d’Android d’être disponible sur plusieurs type de résolution, il est très difficile de s’y retrouver. Cependant, le système de chargement d’image permet de vous simplifier la vie. En effet, suivant la résolution de l’appareil il prendra l’image dans un répertoire dédié.

Nous allons prendre le cas d’une image de 100px x 100px en ldpi et voir les différents formats d’image à utiliser.

DensitéFormatRépertoire
ldpi (120dpi)100px x 100px/res/drawable-ldpi
mdpi (160dpi)135px x 135px/res/drawable-mdpi
hdpi (240dpi)200px x 200px/res/drawable-hdpi
xhdpi (320dpi)  270px x 270px/res/drawable-xhdpi
xxhdpi (480dpi)  400px x 400px/res/drawable-xxhdpi
xxxhdpi (640dpi) 540px x 540px/res/drawable-xxxhdpi

 

On peut aussi mettre une image par défaut dans le répertoire /res/drawable qui sera pris en compte si aucune image ne correspond. Si une résolution xxxhdpi est utilisé mais que l’image n’existe, le loader d’image sur Android privilégiera toujours celle de la densité précédente et la redimensionnera.

Il existe encore d’autres densité d’images sur Android,  notamment la tvdpi. Mais elles ne sont pas considérés comme des densités primaires, cependant si des besoins spécifiques se font sentir (comme pour des applications TV) alors on pourra y recourir.

Simplifier la conversion, le travail des batchs

Si vous voulez gagner du temps pour traiter vos images, il existe de multiples outils permettant la conversion par lot d’images.
Le plus connu, Adobe Photoshop, mais l’outil étant payant on peut lui préférer GIMP ou ImageMagick.

 

Migration Drupal d’Apache vers Nginx

Qu’est-ce que Nginx?

Nginx est un logiciel qui allie serveur web et reverse-proxy écrit par Igor Sysoev, dont le développement a débuté en 2002 pour les besoins d’un site à très fort trafic.

Le point fort d’Nginx est d’être un serveur asynchrone par opposition aux serveurs synchrones où chaque requête est traitée par un processus dédié. Chaque requête est découpé en plusieurs tâches et permet de réaliser un multiplexage très efficace. Cette architecture permet des performances très élevées, ainsi qu’une empreinte mémoire particulièrement faible comparativement aux serveurs HTTP classiques, tels qu’Apache.

Installation et configuration d’Nginx

Nous partons du principe qu’une installation Drupal fonctionnelle a déjà été réalisé. Si ce n’est pas le cas, reportez-vous à l’article d’installation de Drupal. Installation facile de Drupal

# Tout d'abord le téléchargement des paquets nécessaires
apt-get install nginx php5 php5-fpm php5-apc
# Ensuite ouvrez le fichier de configuration FastCGI Process Manager PHP
nano /etc/php5/fpm/pool.d/www.conf
# Commentez l'écoute sur le port 9000 et créez une socket à la place
;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock
# Configurez la socket du manager
nano /etc/nginx/conf.d/php5-fpm.conf
upstream php5-fpm-sock { server unix:/var/run/php5-fpm.sock; }
# Ensuite modifiez la configuration d'APC pour PHP afin d'allouer 100Mo
nano /etc/php5/fpm/conf.d/apc.ini
extension=apc.so
apc.shm_size=100
# Redémarrez le manager
/etc/init.d/php5-fpm restart

Maintenant il reste à éditer le fichier de configuration de votre site. Malheureusement, Apache étant complètement différent, c’est un tout nouveau type de configuration qu’il vous faudra créer. Cependant, un utilitaire permet de convertir une configuration Apache vers Nginx. Conversion Apache vers Nginx

nano /etc/nginx/sites-available/monsite
server {
    # Nom de domaine
    server_name .monsite.fr;
    # Racine du site
    root /var/www/drupal;
    # Logs
    access_log /var/log/nginx/monsite.fr.access.log;
    error_log /var/log/nginx/monsite.fr.error.log;
    # Desactive le log sur le favicon
    location = /favicon.ico { log_not_found off; access_log off; }
    # Desactive le log sur le robots.txt
    location = /robots.txt { allow all; log_not_found off; access_log off; }
    # Desactive le log sur le sitemap.xml
    location = /sitemap.xml { allow all; log_not_found off; access_log off; }
    # Page d'index du site
    index index.html index.htm index.php;
    # Pas de PHP pour le contenu static
    location / { try_files $uri $uri/ @rewrites; }
    # Clean URLs
    location @rewrites { rewrite ^ /index.php last; }
    # Cache d'Image
    location ~ ^/sites/.*/files/imagecache/ { try_files $uri @rewrite; }
    # Cache d'ImageStyle
    location ~ ^/sites/.*/files/styles/ { try_files $uri @rewrite; }
    # Contenu static comme les images
    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires max;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }
    # Protège les fichiers privées
    location ~ ^/sites/.*/private/ { return 403; }
    # Evite les pages PHP
    location ~ \..*/.*\.php$ { return 403; }
    # Bloque l'acces aux fichiers cachées
    location ~ /\. { access_log off; log_not_found off; deny all; }
    # Scripts PHP
    location ~ \.php {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        try_files $uri =404;
        fastcgi_index index.php;
        fastcgi_pass php5-fpm-sock;
        fastcgi_intercept_errors on;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

Activez votre configuration, puis redémarrez votre nouveau serveur Nginx.

ln -s /etc/nginx/sites-available/monsite
/etc/nginx/sites-enabled/monsite /etc/init.d/nginx restart

Voilà, votre migration est terminée.

Installer Jenkins sur un Synology

Prérequis

Au préalable, quelques prérequis sont nécessaires.
– Un serveur Synology
DSM 5.x minimum
Java Manager avec Java 1.6.0 minimum
Tomcat

Installation

Connectez-vous en SSH avec l’utilisateur « root » sur le serveur Synology.
Modifier la configuration de Tomcat afin d’ajouter un utilisateur pour administrer Tomcat
/var/packages/Tomcat/target/apache-tomcat-6.0.36/conf/tomcat-users.xml

# Ouvrer le fichier de configuration
vi /var/packages/Tomcat/target/src/conf/tomcat-users.xml
# Modifier le fichier de configuration
<tomcat-users>
    <role rolename="manager"/>
    <user username="admin" password="admin" roles="manager"/>
</tomcat-users>
# Ajouter la variable d'environnement dans le contexte de Tomcat pour les données de Jenkins
vi /var/packages/Tomcat/target/src/conf/context.xml
<Context>
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
   <Environment name="JENKINS_HOME" value="/var/lib/jenkins" type="java.lang.String"/>
</Context>
# Maintenant il reste à créer le répertoire
mkdir /var/lib/jenkins
# Puis modifiez les droits
chown http:http /var/lib/jenkins

Maintenant, redémarrez. Il ne vous reste plus qu’à télécharger le fichier WAR pour Jenkins à l’adresse suivante : http://mirrors.jenkins-ci.org/war/latest/jenkins.war.

Ensuite, ouvrez le gestionnaire de Tomcat puis sélectionnez le WAR de Jenkins dans l’outil de déploiement. Par défaut l’URL est http://mon_serveur:7070.

Puis rendez-vous sur l’url de Jenkins http://mon_serveur:7070/jenkins.

Drupal, l’installation facile

Petit retour sur Drupal

Drupal est un CMS (Content Management System) open-source publié sous la licence publique générale GNU, et écrit en PHP. De part son aspect modulaire et programmable, il est considéré comme un CMF (Content Management Framework).

En 2010, Angela Byron annonce que Drupal est présent sur environ 1 % des sites internet.

Drupal est aussi flexible dans la gestion de base de données, il peut soit utiliser soit MySQL, soit PostgreSQL.

Toutefois vu sa complexité, il n’est pas forcément à la portée de débutants et nécessite une bonne compréhension de PHP et Linux dans la mise en place.

Installation

Nous suivrons pas à pas, l’installation de Drupal sur un serveur Linux via APT.
Les commandes suivantes seront à lancer à partir d’un compte root ou d’un compte en mode sudo bash.

A des fins de configuration avancée, nous utiliserons une base PostgreSQL.

# ajoute le repo postgresql
add-apt-repository ppa:pitti/postgresql
apt-get update
apt-get install postgresql
# configure postgresql
su - postgres
psql -d postgres -U postgres
# modifie le mot de passe de l'utilisateur par défaut postgres
alter user postgres with password 'mot_de_passe'; ALTER ROLE
\q
# crée un nouvel utilisateur
createuser --pwprompt --encrypted --no-adduser --no-createdb utilisateur_base_drupal
# crée une base de données pour l'utilisateur
createdb --encoding=UNICODE --owner=utilisateur_base_drupal nom_base_drupal
/etc/init.d/postgresql restart
exit

Ensuite, nous allons installer le serveur Apache.

# installation d’Apache, PHP et PECL

apt-get install php5-common libapache2-mod-php5 pecl
# ajoute l'host en local pour les tests
echo '127.0.0.1   monsite.fr' >> /etc/hosts
# url rewriting
a2enmod rewrite
# PECL
pecl install uploadprogress
# démarre le serveur
/etc/init.d/apache2 restart

Maintenant, passons à l’installation de Drupal.

# répertoire web du serveur
cd /var/www
# récupération de Drupal
wget http://ftp.drupal.org/files/projects/drupal-7.21.tar.gz
# décompresse l'archive
tar -xzvf drupal-7.21.tar.gz
# renomme le répertoire en drupal
mv drupal-7.21 drupal
# réglages par défaut
cp ./drupal/sites/default/default.settings.php ./drupal/sites/default/settings.php
# modifie les droits
chmod 666 ./drupal/sites/default/settings.php
# ajoute la traduction française
wget http://ftp.drupal.org/files/translations/7.x/drupal/drupal-7.21.fr.po
cp ./drupal-7.21.fr.po ./drupal/profiles/standard/translations/
# droits temporaire pour l'installation
chmod -R 777 ./drupal/sites/default/
# suppression de l'archive drupal
rm drupal-7.21.tar.gz

Ensuite sur votre navigateur, aller à l’adresse suivante: http://monsite.fr/drupal/install.php.
Il ne reste plus que quelques étapes.

Sélectionner l’installation standard de Drupal.

Ensuite choisisser la langue d’installation. Par défaut, l’anglais. Des autres localisations peuvent être installés. Cependant, les traductions ne sont pas disponibles sur la majorité des modules.

Configurer la base de données. Il reste à sélectionner le type de base, son nom, le mot de passe ainsi que le login.

Drupal poursuit en installant les modules compris dans le choix d’installation.

Maintenant, il faut configurer le site. Entrer les informations nécessaires au site:
– Le nom du site
– L’adresse email de l’administration du site
– Login et mot de passe pour la gestion du site

Il ne reste plus qu’à finir les réglages de Drupal.

Voilà votre site Drupal est opérationnel. Maintenant, il ne vous reste plus qu’à le personnaliser, rajouter des modules ainsi que du contenu.

Wandboard

Qu’est ce que la Wandboard

La Wandboard est une carte lowcost basée sur une architecture ARM Cortex-A9 développée par une organisation à but non lucratif.

L’idée de départ qui a conduit à sa création est que la plupart des cartes embarquées que nous voyons aujourd’hui (comme le Raspberry PI) sont intéressantes, mais restent limitées.

La Wandboard est basée sur un système de modules qui permet de faire évoluer la solution.

Les spécifications

La Wandboard est disponible en plusieurs versions, Solo et Dual, qui possédent plus ou moins de fonctions.

Liste des fonctionnalités
Fonctionnalités  SoloDual 
 Processeur Freescale i.MX6 SoloFreescale i.MX6 Duallite
 CoeursCortex-A9 Single coreCortex-A9 Dual core
 Mémoire512 MB DDR31 GB DDR3
 Sortie audio S/PDIFXX
 Sortie HDMIXX
 Interface caméraXX
Lecteur carte MicroSD 22
Port sérieXX
Port d’extensionXX
Port USBXX
Port SATANon utiliséNon utilisé
Lan GigabitXX
WIFI (802.11n)X
BluetoothX

La version Solo est disponible au prix de 79$ (58€). Quant à la version Dual, elle est disponible à 99$ (74€). Il vous faudra rajouter quelques dizaines d’euros, afin d’avoir un boîtier, un adaptateur secteur ou une antenne Wifi. Car rappelons le, une board est avant tout destinée à faire de l’embarqué ou du développement.

Quelle utilisation alors?

Plusieurs, suivant votre besoin. Vous pourrez, au choix :
– Installer Android et transformer n’importe quelle TV en Smart TV avec un media center.
– Réaliser un kit de développement Android.
– Réaliser un serveur web Linux à faible consommation. (Comme pour ce site)
– Créer un centre de gestion domotique pour votre maison/appartement.
– Créer une machine sous Linux à faible coût pour des enfants

Pour ce faire, vous pourrez trouver sur le site de Wandboard, les distributions Android et Linux Linaro (Ubuntu) correspondantes.

Installation de Linux ou Android sur une Wandboard

Récupérer la version Android ou Linux correspondante à votre board sur la page de téléchargement : http://www.wandboard.org/index.php/downloads

Ensuite, suivant que vous soyez sur Linux ou sur Windows la procédure change.

Windows

Insérez la carte MicroSD qui servira de support au système d’exploitation sur votre machine. Utilisez Win32 Disk Imager afin de copier l’image sur votre carte SD. Il n’y a plus qu’à la placer dans le slot dédié au système d’exploitation. Et c’est parti!

Linux

Insérez la carte MicroSD qui servira de support au système d’exploitation sur votre machine. Puis lancez la commande permettant de copier l’image sur votre carte.

dd if=nom_image.img of=/dev/nom_lecteur_carte_sd bs=1M

VPN facile avec DD-WRT

Nous allons voir comment installer et configurer un serveur PPTP sur un routeur sous DD-WRT.
Tout d’abord,  qu’est-ce que DD-WRT? Ensuite, pourquoi un serveur VPN PPTP? Et enfin, comment en créer un?

Qu’est-ce que DD-WRT?

DD-WRT est un micrologiciel libre et gratuit pour plusieurs routeurs sans fil, à l’origine développé pour le WRT54G de Linksys, fonctionnant sur une base minimale du noyau Linux.

Il peut transformer un simple routeur à 50€ en véritable couteau suisse pour le réseau :

  • FTP
  • VPN
  • Réseaux virtuels

Plus d’informations peuvent-être trouvées sur le site de DD-WRT.

Serveur VPN PPTP

Le PPTP (Point-to-point tunneling protocol) est un protocole de tunnel point-à-point d’encapsulation PPP sur IP développé par Microsoft. Il permet d’établir des réseaux privés virtuels (VPN) au-dessus d’un réseau public, comme internet par exemple.

Même si d’autres protocoles, plus sûrs, comme L2TP et IPsec ont été développés depuis. Il reste l’un des plus utilisé car implémenté nativement dans beaucoup de systèmes d’exploitation comme Windows par exemple.

L’intêret du VPN est de pouvoir se connecter à distance de manière sécurisée chez soi pour, par exemple, récupérer ou sauvegarder des fichiers. Il peut aussi être très intéressant dans le cadre d’une installation avec un NAS (Network Attached Storage) équipé d’un serveur multimédia afin de pouvoir accéder à sa bibliothèque média à distance.

Configuration du VPN PPTP

Tout d’abord, il nous faut créer une plage d’adresses IP en DHCP. C’est à cette plage d’IP qu’appartiendra notre adresse IP lorsque nous nous connecterons par le VPN.

Dans l’exemple, on prend la plage 192.168.1.100 à 192.168.1.200 comme adresses attribuées dynamiquement. Au passage, on prendra note de l’adresse locale de notre routeur : 192.168.1.1.

Ensuite, aller dans Services => VPN puis passer à Enable le serveur PPTP afin de l’activer. On attribuera à ce serveur, une adresse non définie dans la plage d’IP dynamiques et non présente dans les IP fixes (si une ou plusieurs adresses fixes on déjà été attribuées). Dans notre exemple, on lui affecte l’adresse 192.168.1.2.

On piochera dans la liste des IP dynamiques les IP possibles pour les clients qui se connecteront en VPN. (Ici 192.168.1.150 à 192.168.1.200)

Pour des questions de facilité, on n’utilisera un mode d’authentification basé en local. Pour chaque utilisateur, ajouter une ligne formattée de la manière suivante : nom_utilisateur * mot_de_passe *. Attention, les espaces entre les * et les données sont à respecter.

Pour finir, on redirigera les ports 1723, 1792 et 47 l’adresse locale de notre routeur. (192.168.1.1)

 

N’oubliez pas de rediriger les ports 1723, 1792 et 47 de votre box vers votre routeur.

Voilà, il ne reste plus qu’à tester votre VPN sous Windows.

Plus d’informations pour configurer un serveur VPN DD-WRT sur le site de DD-WRT.