Top $i des sites web pour passer le temps …

Youpla hop, c’est top !

Ouvrez donc votre logiciel de codage favoris, et lancé le code suivant:

$i=0;
While($i < 10) {
echo $i;
}

Et maintenant, en attendant que tout cela plante, je vous propose une petite série de sites web. Vous en connaissez surement déjà 🙂

Lesjoiesducode.fr

Quand le client nous titille pour avoir une nouvelle fonctionnalité 2 jours avant la livraison

Une fabuleuse collection de GIF (GIF qui se prononce jif, comme l’a clairement expliqué son créateur). Pour toutes les situations, vous pourrez exprimer joyeusement votre ressenti 🙂

Excusesdedev.com

“Rafraîchi pour voir ?”*

Besoin d’une excuse ? Piochons donc dans ce fabuleux chapeau magique qu’est excusesdedev.com. De quoi passé du temps à rafraichir la page 😀
* Ouais, je l’ai mis en Comic Sans MS 😀

Webagencyfail.com

Voici les textes du site au format JPEG, merci de les intégrer dès aujourd’hui…

Les pires clients (et parfois un peu des dev) sont toujours plus incroyables de jour en jour 🙂 De très belles perle.

Moviecode.tumblr.com

c++ code in Ranpo Kitan – game of Laplace

Une scène de films ou de séries présentant des lignes de code ? Ce Tumblr vous propose d’envoyer vos trouvaille, mais aussi de voir celle déjà existante. Il y a quelques surprise 🙂

Commitstrip.com

Je vous en rajoute un petit en plus dans cette liste 🙂

 

Vous en avez d’autre ? Faites le moi savoir !

Lire la suite

Ajouter d’autre version de Php avec ISPConfig (Debian 8, Php 5.3)

Je continue donc dans cette suite de documentations sur l’installation et la configuration d’ISPConfig.

Faute de tutoriel pour Debian Jessie, je suis partis sur base de celui ci https://www.howtoforge.com/how-to-use-multiple-php-versions-php-fpm-and-fastcgi-with-ispconfig-3-ubuntu-12.04-lts-p2

Pour installer Php 7, vous pouvez vous référer à ce tutoriel : Installation de Php 7.

Nous, nous allons nous occuper de version plus ancienne de php, la 5.3 dans notre cas.

1. On va télécharger et compile la version voulue de Php (on va ici le faire pour php 5.3)
Je récupère la version depuis le site de php.net (cliquez sur la release, ensuite clique droite sur votre miroir et copier le lien)

Le php 5.3 que nous voulons se trouve à l’adresse http://fr2.php.net/get/php-5.3.29.tar.bz2/from/this/mirror


mkdir /opt/php-5.3.29
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget http://fr2.php.net/get/php-5.3.29.tar.bz2/from/this/mirror -O php-5.3.29.tar.bz2
tar jxf php-5.3.29.tar.bz2
cd php-5.3.29/

Une série de librairies et de paquets sont nécessaire pour la compilation. Comme montré dans le tuto joint en debut de poste, on lance :

apt-get install build-essential

apt-get build-dep php5

apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev

ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

Ensuite, afin d’éviter un bug avec freetype.h on dois effectuer deux commande (Debian 8 est un peu trop récent pour Php 5.3 (ou c’est 5.3 qui est un peu trop vieux 🙂 )


mkdir /usr/include/freetype2/freetype
ln -s /usr/include/freetype2/freetype.h /usr/include/freetype2/freetype/freetype.h

Nous allons donc commencer par configurer php avec fastcgi (Php fpm plus bas, mais ne fonctionne pas correctement sur ISPConfig).
A noté que pour refaire une autre compilation, pensé à refaire un cd /usr/local/src/php5-build/php-5.3.29/

Php FastCgi


./configure \
--prefix=/opt/php-5.3.29-cgi \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl=/usr \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-ftp \
--with-imap=/usr \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-xmlrpc \
--with-xsl \
--enable-cgi

Puis make && make install

Copie de php.ini

cp /usr/local/src/php5-build/php-5.3.29/php.ini-production /opt/php-5.3.29-cgi/lib/php.ini

Configuration d’ISPConfig avec php 5.3.29 cgi

On se rend dans System -> System -> Additional PHP Versions

ISPCONFIG - additional php versions

Puis dans l’onglet FastCGI Settings :
Path to the PHP FastCGI binary : /opt/php-5.3.29-cgi/bin/php-cgi
Path to the php.ini directory : /opt/php-5.3.29-cgi/lib

Ensuite pour placer un site en php-5.3.29, on va dans Sites -> clique sur le site voulu et on adapte :

ISPConfig - fastcig php 5.3

Php-FPM

Pour installer php-fpm vous pouvez suivre la procédure suivante, toutefois, avec l’installation d’ISPConfig suivi dans le tutoriel pour Debian 8 ceci ne devrait pas fonctionner. A tester donc seulement si vous ne pouvez pas faire fonctionner FastCgi ou que votre configuration diffère de la config de base pour Debian Jessie.

Lançons maintenant le ./configure pour la version php-fpm (cgi plus bas)

./configure \
--prefix=/opt/php-5.3.29-fpm \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl=/usr \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-ftp \
--with-imap=/usr \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-xmlrpc \
--with-xsl \
--enable-fpm

Noté les différences avec le script du tuto initial : le **=/usr** après *with-openssl* et *with-imap*.

On lance ensuite :

make
make install

Ensuite nous allons copier le php.ini et php-fpm.ini dans les bon répertoire :

cp /usr/local/src/php5-build/php-5.3.29/php.ini-production /opt/php-5.3.29-fpm/lib/php.ini
cp /opt/php-5.3.29-fpm/etc/php-fpm.conf.default /opt/php-5.3.29-fpm/etc/php-fpm.conf

Nous allons ensuite éditer php-fpm.conf
nano /opt/php-5.3.29-fpm/etc/php-fpm.conf

Adapter le fichier en motidier / ajout les valeurs comme ceci
(pid est à décommenté, user et group sont normalement ok, listen : il vaut mieux changer le port car 9000 peut être utilisé. Include est à ajouté en fin de fichier)

[...]
pid = run/php-fpm.pid
[...]
user = www-data
group = www-data
[...]
listen = 127.0.0.1:8999
[...]
include=/opt/php-5.3.29-fpm/etc/pool.d/*.conf

Création du répertoire pour la pool
mkdir /opt/php-5.3.29-fpm/etc/pool.d

Ensuite il faut créer un script dans /etc/init.d afin de lancer notre version de php

nano /etc/init.d/php-5.3.29-fpm

Et on y ajoute le code


#! /bin/sh
### BEGIN INIT INFO
# Provides: php-5.3.29-fpm
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-5.3.29-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/opt/php-5.3.29-fpm/sbin/php-fpm
php_fpm_CONF=/opt/php-5.3.29-fpm/etc/php-fpm.conf
php_fpm_PID=/opt/php-5.3.29-fpm/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
try=0
while test $try -lt 35 ; do
case "$1" in
'created')
if [ -f "$2" ] ; then
try=''
break
fi
;;
'removed')
if [ ! -f "$2" ] ; then
try=''
break
fi
;;
esac
echo -n .
try=`expr $try + 1`
sleep 1
done
}
case "$1" in
start)
echo -n "Starting php-fpm "
$php_fpm_BIN $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
stop)
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed. Use force-exit"
exit 1
else
echo " done"
echo " done"
fi
;;
force-quit)
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM `cat $php_fpm_PID`
wait_for_pid removed $php_fpm_PID
if [ -n "$try" ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 `cat $php_fpm_PID`
echo " done"
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload}"
exit 1
;;
esac

Changement de permissions pour rendre le script éxécutable et lien pour l’execution au démarrage, et ensuite le démarrage à proprement parlé :


chmod 755 /etc/init.d/php-5.3.29-fpm
insserv php-5.3.29-fpm
/etc/init.d/php-5.3.29-fpm start

Au démarrage vous aurez une erreur comme ceci

Starting php-fpm [22-Sep-2015 22:13:34] WARNING: Nothing matches the include pattern '/opt/php-5.3.29-fpm/etc/pool.d/*.conf' from /opt/php-5.3.29-fpm/etc/php-fpm.conf at line 511.
done

Rien de grave, c’est car il n’y a pas encore de pool dans /opt/php-5.3.29-fpm/etc/pool.d. Vous pouvez ignorer l’erreur, elle se resoudra plus tard.

Nous allons ensuite adapter ISPConfig pour lui donner les chemins vers notre nouvelle configuration.

On se rend dans System -> System -> Additional PHP Versions (on peut faire dans le même que pour php-fcgi)

ISPCONFIG - additional php versions

On va ensuite dans l’onglet PHP-FPM Settings et on entre les informations suivante :

Path to the PHP-FPM init script /etc/init.d/php-5.3.29-fpm
Path to the php.ini directory /opt/php-5.3.29-fpm/lib
Path to the PHP-FPM pool directory /opt/php-5.3.29-fpm/etc/pool.d

Ensuite dans site, vous sélectionnez php-fpm et la version choisie.
Merci pour votre lecture 🙂
Jérémy

N’hésitez pas à commenter ou me contacter si vous avez une question 🙂

Lire la suite

Configuration d’ISPConfig

Rebonjour 🙂

Après avoir installé ISPConfig, nous allons le configurer afin de faire fonctionner nos sites.

Plusieurs points dont je vais vous parler :
1. La création des utilisateurs, vhost, ftp et base de données
2. La configuration des DNS et des mails

Ps: ISPConfig effectue les tâches et modification par Cron, une fois par minutes, ne vous étonnez pas si vos changements n’apparaissent donc pas tout de suite. Vous pouvez voir la queue dans « Monitor > Show Jobqueue »

La création des utilisateurs, Vhost, Ftp et base de données

Casper development - ISPConfig - Header

Nous allons aller dans l’onglet Client et créer notre premier client pour notre premier site web (Perso, je crée un client par domaine). Cliqué donc sur le gros bouton « Add new client »

Casper development - ISPConfig - New client

Complétons les quelques informations obligatoires (et un company name, c’est plus convivial dans le listing).

Etape suivante : Créer le Vhost en tant que tel, allez donc dans l’onglet site et rester sur la section « Websites > Websites », et on clique sur « Add new website »

Casper development - ISPConfig - Web domain

Veillez à bien décocher la case « Own Error-Documents », sinon toutes vos erreurs 4xx/5xx seront overwrited par le serveur et c’est moche !

Vous avez d’autres sous onglets, allez donc faire un tour dans « Statistics« . Généré un mot de passe, sélectionné AWStats (le mot de passe se génère rapidement, mais les stats peuvent prendre ~24h pour s’initialiser correctement).

Allez ensuite dans l’onglet Backup, il est assez intéressant d’en avoir quelques un 🙂

L’onglet « Options » est très intéressant si vous devez par exemple ajouter des directives particulières dans votre Vhost sans qu’ISPConfig l’overwrite. Typiquement, un DocumentRoot afin de diriger directement dans le dossier /public d’un framework tel que Laravel par exemple.

On enregistre 🙂 Et voila, le Vhost existe !

Allez, on va passer au FTP, on reste dans l’onglet « Sites », et dans la sidebar à gauche on va dans « Web Access > FTP-Accounts ».
Ensuite c’est la procédure classique, Add new FPT-User. On sélectionne le Website associé (dans notre cas www.mi6.com), on met un username et un mot de passe.
Attention petite particularité, l’username est préfixé par le nom du site, ne vous faites pas avoir 🙂

Et on termine ce point par la mise en place de la base de données. Il faut d’abord créer l’utilisateur et ensuite la base de données.
On restes dans l’onglet principales Sites, puis dans la sidebar « Databases > Database Users »
Add new User et on arrive sur le formulaire d’ajout. On sélectionne notre client, l’user (login), et un mot de passe. Rien de bien compliqué.
On se rends ensuite dans « Databases » et on fait Add new Database

Casper development - ISPConfig - Database

Rien de bien compliqué, on sélectionne le site, type de db, nom, utilisateur (celui qu’on a crée juste avant).
On peut cocher la case « Remote Access » pour autoriser un accès externe, ou pour des ips spécifiques en les précisant dans le champs en dessous.
Bien pratique pour une version de dev avec Sequel par exemple.

La configuration des DNS et des mails

Afin de gérer vous même vos DNS, il faudra d’abord adapter les dns chez votre hébergeur (pour mon cas il s’agit d’Ovh), et ensuite configurer vos DNS dans ISPConfig.

Dans votre hébergeur, il faut changer les dns primaire et secondaire (Avec Ovh Manager > Nom de domaine à modifier > Gestion DNS : Ajouter les deux nouveaux DNS et supprimer les anciens, l’opération n’est pas immédiate).

Pour ovh:
Dns primaire = nom du vps (vpsxxxx.ovh.net), et dns secondaire = sdns2.ovh.net.
Ceci dépend évidemment de votre hébergeur.

Retournons désormais dans notre ISPConfig et allons dans l’onglet DNS.
Il suffit de cliquer sur « Add new DNS Zone with Wizard »

Client : celui lié au nom de domaine
Domaine: Nom de domaine (sans le www)
IP Address: Adresse ip de votre serveur
NS1: votre DNS primaire (vpsxxx.ovh.net)
NS2 : DNS secondaire (sdns2.ovh.net)

Casper development - ISPConfig - DNS

En allant dans DNS > Zones, vous avez accès aux zones dns crées. En cliquant sur votre domaine crée, vous aurez alors deux onglets dans le formulaire d’édition : DNS Zone et Records.

A savoir, si vous désirez faire un sous domaine, la solution consiste à se rendre sur l’onglet Records du domaine et de faire un « + CNAME »
hostname: le sous domaine. Par exemple pour spy.mi6.com, entré juste « spy »
dans Target Hostname, entré le nom de domaine principale terminé par un point : mi6.com.
TTL : moi je le mets à 100.

Et voila, votre dns est configuré 🙂

On peut dès lors facilement ajouter une boite mail. Rendez vous dans l’onglet Email.
On va commencer par ajouter le domaine.

Casper development - ISPConfig - add new domain

Ensuite rien de compliqué :
– Client : celui qu’on a crée tout à l’heure
– Domaine: mi6.com (sans www)
– SpamFilter: à votre libre appréciation 🙂

Ensuite, on se rend dans « Email Mailbox« . Rien de compliqué la dedans non plus:)

Vous pouvez désormais accéder à votre boite via http://votre_domaine/squirrelmail

Pour la configuration des comptes Pop et smtp (authentification par mot de passe nécessaire) :

Pour Pop3
domaine ==> mi6.com
login: adresse e-mail
Mot de passe: celui que vous avez définis
port 995 + ssl

Pour le smtp
hôte: mail.mi6.com
Port: 587 + ssl

Sur certaine application mail (notamment sur smartphone), il peut être nécessaire d’autoriser les certificats ssl non validé.

Encore plus de configuration

Installation de Php 7

Installation d’autre version de Php (5.3 par exemple)

Installation d’outils de Monitoring (monit et munin)

Lire la suite

Installation d’ISPConfig

Bonjour à vous tous !

Si vous avez déjà fait un peu d’admin serveur, vous vous rendez vite compte que l’installation de base est toujours la même, installation de php, configuration, vhost, accès ftp et db, … et on recommence pour chaque utilisateur.

Je me suis intéressé à ISPConfig (dans sa version 3).

Installation d’ISPConfig

Casper development - ISPConfig - Home

Pour ma pars, je fonctionne avec Debian 8, et ils ont pensé à moi 🙂 Un guide est fourni avec toutes les explications détaillées afin de procéder à l’installation (des guides existes également pour d’autres OS évidemment)

Le guide: https://www.howtoforge.com/tutorial/perfect-server-debian-8-jessie-apache-bind-dovecot-ispconfig-3/

Suivez le scrupuleusement, le fait de zapper une étape pourrait tout faire planter.
Il vaut également mieux suivre le tutos depuis une fresh install au risque d’avoir des éléments manquant. Pour ma pars je l’ai effectivement sur plusieurs vps Ovh sans aucun problème.

Quelques points où il faut tout de même faire attention et ne pas foncer tête baissée :

  • A l’étape 8, la commande présentée installe maria Db comme système de base de données. Si vous souhaitez utiliser mysql, utilisé plutôt la commande suivante :
    apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo
  • Ne faites pas l’étape 11 (suPhp)
  • L’étape 13 peut être optionnel

Une fois finalisé, vous voilà heureux possesseur d’un serveur tout frais avec ISPConfig 3.
Vous pouvez dès lors vous connecter sur votre interface via https://votre_ip:8080 (ou un autre port si vous avez mis un autre dans le processus d’installation), avec le login et le mot de passe admin (Il va de soi que je vous conseille de le changer, via Tools > User settings > Password and language, ou via System > User Management > Cp user > admin).

Avant de passer à la configuration, je vous invite à ajouter quelques éléments de sécurités en plus:

Interdire l’accès root

  • Ajouté un groupe pour les utilisateurs qui seront autorisés
    addgroup sshusers_ispconfig
  • Créons l’utilisateur
    adduser user1
  • Ajout de l’utilisateur dans le groupe crée
    usermod -a -G sshusers_ispconfig user1
  • Modifions ssh
    nano /etc/ssh/sshd_config

    • Recherché la ligne « PermitRootLogin » et changé yes pour no
    • Ajouté une ligne: « AllowGroups sshusers sshusers_ispconfig »
      Pourquoi j’autorise deux groupes ? Il semble qu’ISPConfig crée son propre groupe sshusers et afin d’éviter de faire doublon j’ai préféré créer mon propre groupe et d’autoriser les deux.
      Je vous invite également à changer le port de connexion ssh.
  • Effectué un /etc/init.d/ssh restart
  • Ouvrez une nouvelle fenêtre ssh et connectez vous avec le nouvel utilisateur afin de vérifier si tout est ok.

Amélioré la configuration de fail2ban

Vous l’avez normalement déjà installé si vous avez correctement suivi le processus d’installation. Je vous invite donc à configurer fail2ban plus Vous l’avez normalement déjà installer si vous avez correctement suivi le processus d’installation. Je vous invites donc à configurer fail2ban plus précisemment..

Ouvrez le fichier jail.conf
nano /etc/fail2ban/jail.conf

Plusieurs éléments peuvent être intéressant à modifier

ignoreip = 127.0.0.1/8

Vous pouvez ajouter d’autre adresse ip qui seront ignorées dans les filtres de ban. Il suffit de les ajouter à la suite en utilisant simplement un espace comme séparateur.
Si vous avez une ip fixe par exemple, c’est l’endroit idéal pour la placer (Pour la petite histoire, je n’ai pas de fixe à mon domicile et j’ai réussi à me faire ban de mon serveur, pas cool en développement ^^).

  • bantime = 600* : 600 secondes, c’est le temps pendant lequel le hackeur en herbe, ou le type pas doué (genre moi :p ) sera bannis. Dix minutes ce n’est pas beaucoup en tout cas. Mettez au moins 3600 (1 heure)
  • findtime = 600* : c’est la durée sur laquelle des tentatives de connexion seront recherchées. Avec 600 secondes, une tentative peut être faite toutes les 601 secondes sans risquer le ban. Je vous conseille de l’augmenter également.
  • maxretry = 3* : Nombre max de tentatives, 3 me semble bien, mais libre à vous de l’adapter 🙂

Vous avez un peu plus bas dans ce document les informations pour envoyer les alertes de ban par mails (honnêtement je ne vous le conseille pas: si vous avez une attaque vous allez vous retrouver avec des milliers de mail – c’est du vécu)

En descendant encore dans le fichier vous arrivez sur une section plus intéressante, c’est la partie « JAILS »: donc les différentes zone qui vont être contrôlées par fail2ban.
Parcourez les différentes jail et passez *enable* à **true** les éléments que vous désirez controler.

Remarque par rapport au premier filtre : Si vous avez modifier votre port ssh (4321 au lieu du 22 de base par exemple), modifier la jail ssh en fonction.

[ssh]

enabled = true
port = ssh 4321
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

Ensuite, un /etc/init.d/fail2ban restart pour activer ces nouveaux filtres.

Pour en lire plus sur fail2ban, je vous conseille ce lien: https://www.isalo.org/wiki.debian-fr/Fail2ban

Effectué la requêtes suivante afin de vérifier que tout tourne
/usr/bin/fail2ban-client status

Vous devriez avoir un retour du style :

Casper development - ISPConfig - Fail2ban

Si vous avez une erreur, vous pouvez exécuter
systemctl status fail2ban.service -l
Cela vous permettra de connaitre les erreurs.

Le point suivant est la configuration d’ISPConfig

1. La création des utilisateurs, vhost, ftp et base de données
2. La configuration des DNS et des mails

Lire la suite : configuration d’ISPConfig

Merci de m’avoir lu 🙂
Jérémy

Lire la suite

le point d’interrogation grec: rendre fou un developpeur

Yop 🙂

Au détour du web et lisant des articles très intéressants sur des sites de hautes importances, tel que 9gag et de sombre compte twitter, me voilà tombé sur un tweet me proposant de remplacer le point virgule par le point d’interrogation grec (histoire de faire péter un cable à un dev ^^)

Ce qu’il faut savoir, c’est que les deux caractères ont exactement la même apparence, mais n’ont pas le même encodage.

Nom Visuel Code
Greek question mark ; &#x37e;
Semicolon ; &#59;

Bref, de quoi passer un siècle à trouver le bug dans un programme 🙂

http://www.fileformat.info/info/unicode/char/037e/index.htm

http://www.fileformat.info/info/unicode/char/3b/index.htm

Lire la suite