Blog au ralenti

Comme vous pouvez le constater, depuis ma trêve hivernale, les publications sur ce blog se font très rares. Mis à part mon billet de consternation concernant l’épisode dramatique qu’a vécu Charlie Hebdo ( Note du 20/12/2016 : billet hors ligne désormais ) ce 7 janvier dernier, je n’ai rien publié.

Le fait est que cette trêve hivernale m’a fait énormément de bien. J’avais décidé de me déconnecter et je m’y suis tenu. En effet, mise à part la relève de mes flux RSS tous les 4 à 5 jours depuis mon smartphone, je n’ai pas allumé un PC de toutes mes vacances (ni surfé sur la toile d’ailleurs). Malheureusement, cette déconnexion a également eu comme conséquence de casser la dynamique d’écriture dans laquelle j’étais. Bref, va falloir que je m’y remette.

Je tenterai de relancer ma dynamique de rédaction début février. Je ne pourrai pas m’y mettre avant car, que ce soit côté pro ou perso, j’ai plein de choses IRL à faire.

A très bientôt !

Trêve hivernale

Ça y est, la fin de l’année approche à grands pas. Moment idéal pour se ressourcer, ces deux prochaines semaines vont être très calmes sur le blog. En effet, j’ai décidé de tenter des vacances « déconnectées ». Pas de publication, pas de surf, pas de suivi de flux RSS… bref, que de la vraie vie !

Je vous souhaite à toutes et à tous d’excellentes fêtes de fin d’année et, aussi commerciales soient-elles, ne vous privez pas de moments de bonheur avec vos amis et vos familles. Portez-vous bien !

A bientôt,

Juan

Mon IDE du moment : Netbeans (HTML5 & PHP)

J’ai longtemps développé avec Komodo Edit. Malheureusement, le « bridage » de la version gratuite m’a assez rapidement contraint à chercher un autre éditeur. J’aurai bien aimé investir dans une licence Komodo IDE mais la réalité économique est ce qu’elle est.

 

Illustration code source

 

Je suis donc passé à Netbeans dans sa version « HTML5 & PHP ».

 

Lire la suite…

Git – Premiers pas

Billet initialement rédigé le 15/05/2014.

Git logo

 

Dans le cadre de mon activité professionnelle, je développe une application en PHP/MySQL. Jusqu’à présent, je n’avais pas l’utilité d’un outil de versioning comme Git vu que je développais seul. Cela dit, nous sommes en plein recrutement et il va bientôt falloir que je m’habitue à ne plus être le seul développeur du projet. Du coup, j’ai décidé d’apprendre à utiliser Git. Le choix de Git est totalement arbitraire. J’ai vu qu’il en existait d’autres (SVN, Mercurial, Bazaar, etc.) mais j’ai l’impression que Git a beaucoup plus le vent en poupe actuellement.

Malheureusement, j’ai l’impression que je vais devoir abandonner mon IDE préféré, Komodo Edit, car seule la version payante Komodo IDE intègre la gestion du versioning Git. Je vais donc non seulement devoir apprendre à utiliser Git, mais en plus je vais devoir prendre en main Netbeans. Bref, un beau challenge en perspective.

 

Lire la suite…

Lancer un script PHP en ligne de commande sous Windows

Comme je le disais dans mes deux derniers billets, je travaille actuellement sur des scripts de migration de données. Le problème avec ce genre de scripts qui traitent plusieurs milliers de lignes, c’est que vous êtes vite bloqué par les délais d’exécution lorsque vous les lancez via un navigateur Web.

Vous avez alors deux possibilités :

  • Fractionner le traitement des données en fixant des plages de traitement (traitement par lots)
  • Lancer votre script directement sur le serveur en ligne de commande

Fractionner le traitement est souvent fastidieux, surtout lorsqu’on doit traiter plus de 80 000 lignes.

La solution la plus simple est donc de lancer votre script directement dans une console (Invite de commandes). Pour ce faire, ouvrez une console et rendez vous dans le répertoire contenant le fichier php.exe. Si vous utilisez WampServer, le chemin par défaut est :

C:\wamp\bin\php\php5.5.12>

 

N.B. : la version de PHP varie selon votre version de wamp

Pour lancer votre script, il vous suffit d’exécuter la commande suivante :

C:\wamp\bin\php\php5.5.12>php.exe -f c:\chemin\vers\votre\script.php

 

Et le tour est joué ! ^^

Si vous exécutez souvent des commandes PHP en ligne de commandes, vous pouvez également déclarer le chemin de votre php.exe dans vos variables d’environnement du système. Cela vous évitera de devoir vous positionner dans le répertoire de php avant de lancer vos scripts. Pour plus d’informations, n’hésitez pas à consulter la documentation PHP sur php.net : Ligne de commande PHP sous Microsoft Windows

MySQL : Autoriser/Forcer id=0 pour les PRIMARY KEY avec AUTO_INCREMENT

Dans le cadre de la migration des données d’une structure de base à une autre, j’ai été confronté à un petit problème. En effet, dans l’ancienne version de la BDD, certaines tables de paramètres ont un id démarrant à 0 au lieu de 1.

Exemple :

Table « civilite »
Id Valeur
0 Non communiqué
1 Féminin
2 Masculin

 

Or, lorsque je lance la requête :

INSERT INTO `civilite_new` (`civilite_new_id`, `civilite_new_label`) SELECT `civilite_id`, `civilite_label` FROM `civilite`;

 

MySQL me retourne l’erreur suivante :

Error Code: 1062. Duplicate entry '1' for key 'PRIMARY'

 

L’AUTO_INCREMENT prend la première ligne (Id = 0) et force l’Id à 1. Du coup, lors du traitement de la deuxième ligne, MySQL bloque car la valeur de l’Id de cette dernière est également 1. Partant de ce constat, deux solutions sont possibles :

  • ré-incrémenter toutes les tables en décalant les id (on aurait donc 1, 2, 3 à la place de 0, 1, 2) – Attention aux intégrités référentielles
  • forcer la valeur 0 du premier Id – pas très « propre » mais efficace

Dans mon cas, la première solution ne me convient pas car le code de l’application qui alimente cette base de données repose sur le principe de Id = 0 pour « Non communiqué ».

Donc, pour forcer la mise à 0 des premiers Id, il va donc falloir user du mode SQL NO_AUTO_VALUE_ON_ZERO :

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';

 

Ajoutez la ligne ci-dessus avant votre INSERT ou UPDATE.

Une fois vos requêtes exécutées, n’oubliez pas de désactiver le mode « NO_AUTO_VALUE_ON_ZERO » :

SET SQL_MODE=@OLD_SQL_MODE;

 

Et le tour est joué ! ^^

MySQL : Désactiver temporairement les contraintes référentielles

Actuellement, je travaille sur un script PHP de migration de données d’une structure de base de données à une autre. L’ancienne structure était composée de table au format MyISAM sans contraintes référentielles (vu que ce format ne gère pas la déclaration de FOREIGN KEY). La nouvelle structure, quant à elle, est composée de table au format InnoDB où les intégrités référentielles sont déclarées.

Le problème avec ces contraintes référentielles, c’est que mon script de migration bloque dès qu’une de ces contraintes n’est pas respectée. Je vous l’accorde, ce n’est pas un problème en soi puisque c’est justement le but lorsqu’on déclare les intégrités référentielles : vérifier la cohérence du contenu de la base de données.

Une fois que le script m’a renvoyé l’erreur, je le corrige et il me faut alors vider la table impactée afin de le relancer et vérifier que le problème est bien résolu. Si je tente un TRUNCATE ou un DELETE FROM sur ma table, MySQL me renvoie alors l’erreur suivante :

Error Code: 1701 Cannot truncate a table referenced in a foreign key constraint (...)

 

Bien. MySQL vérifie donc correctement les contraintes. Cependant, il faut bien que je vide ma table pour relancer mon script. Pour pallier à ce problème, il suffit donc de suspendre le contrôle des contraintes temporairement (le temps de la requête en fait) :

SET FOREIGN_KEY_CHECKS=0;

DELETE FROM bdd.table; -- ou autre(s) requête(s)

SET FOREIGN_KEY_CHECKS=1;

 

Et le tour est joué ! ^^

Dégooglisation : oui, mais en douceur !

Comme beaucoup, mon moteur de recherche préféré est Google. Comme beaucoup, je suis de plus en plus inquiet de la stratégie de la multinationale du même nom qui trace mes faits et gestes sur la toile. Bien entendu, je n’ai rien à cacher. Cela dit, ce n’est pas parce que je n’ai rien à cacher que je souhaite qu’une entité, quelle qu’elle soit, se prenne le droit de collecter mes données personnelles et d’en faire commerce. Voir pire.

 

Illustration confidentialité

 

Comme beaucoup, j’ai envie de reprendre le contrôle de mes données. Une fois cela dit, il faut tout de même se rendre à l’évidence : les produits Google sont tout de même fichtrement bien foutus. Ils sont simples d’accès, puissants et gratuits… même si c’est nous le produit. Mon but n’est pas de me dégoogliser d’un coup, mais de tout doucement migrer mes outils actuels vers des solutions plus saines. J’attaque donc une migration en douceur. Je commence avec les emails et mon moteur de recherche par défaut. Pour le blog, vous savez déjà ce qu’il en est.

 

Lire la suite…

La fin de blog-libre.org

Suite à un message de Christophe Gallaire sur le réseau social Diaspora*, j’ai appris la fermeture du blog : blog-libre.org. C’est facile à dire après coup mais je m’y attendais. Cyrille Borne, le maître des lieux, a décidé de mettre fin à l’aventure et, dans un sens, c’est tant mieux. Pourquoi ? Il y a quelques années, Cyrille expliquait qu’avoir un nom de domaine à son nom était un gage de pérennité car cela évitait de s’enfermer dans une ligne éditoriale, dans un thème. Bref, le nom de domaine à son nom, c’est la liberté. Force est de constaté qu’il avait (et a encore aujourd’hui) raison.

Ce que je préférais lire sur le blog-libre, c’est ce que certains appellent « Les aventures de Cyrille ». J’ai beaucoup aimé les textes de Cep, Christophe, Régis et les autres, mais la substantifique moelle du blog-libre restait les écrits de Cyrille.

Le jeune blog que j’ai lancé ici, et à mon nom, est le fruit d’une réflexion, d’une envie de partage initiée par, entre autres, les écrits de Cyrille. Ici, vous ne trouverez pas d’apologie du Libre. J’en parlerai sans aucun doute, mais ce ne sont pas ses écrits sur le Libre qui ont motivé l’ouverture de ce blog. Non, ici, je souhaite simplement partager. Partager sur tous les thèmes qui pourront m’intéresser.

Petite parenthèse concernant le Libre : je suis passé par une phase « libriste » avec le blog open-stream.fr (il n’existe plus aujourd’hui). Je m’en suis vite lassé car depuis quelques années, la communauté du « Libre » ou en tout cas la partie visible de l’iceberg, est devenue violente. Les « Libristes » intégristes se sont fortement affirmés et occupent aujourd’hui le devant de la scène. Ils en arrivent même à s’entre-déchirer. On se croirait presque dans un partie politique. Ils ne défendent plus des valeurs, mais des points de vue radicaux qui mènent parfois à une violence extrême. Une violence dans les propos, certes, mais une violence quand même. Il n’y a qu’à voir les « débats » engendrés par le système d’init « systemd ». Refermons cette parenthèse.

Pour revenir au blog-libre et à sa fermeture, comme je le disais, je n’en suis nullement étonné. Cyrille a pris sur lui ces dernières semaines mais malheureusement (ou heureusement selon le point de vue), une autre issue n’était sans doute pas envisageable. Le blog-libre est né de Cyrille Borne et ce dernier l’incarnait beaucoup trop. Pour que le blog-libre fonctionne, il aurait fallu que Cyrille garde son espace et que le blog-libre soit un outil supplémentaire/complémentaire. A mon humble avis.

J’espère simplement que Cyrille va relancer son nom de domaine car je le suis depuis de nombreuses années et j’ai toujours aimé sa plume, ses écrits. Je ne suis pas toujours d’accord avec lui, mais ce que j’aime chez Cyrille, c’est son honnêteté. Il écrit par passion et non pour convenir à un lectorat.

Bref, Cyrille, s’il vous plaît, revenez !

N.B. Au moment où je prépare la publication de ce billet, je vois que http://cyrille-borne.com/ est de retour. Ouf ! ^^

Auto-hébergement : expérience suspendue

Dans mon billet Auto-hébergement : le bon choix ?, je citais trois inconvénients à l’auto-hébergement : la sécurité, les sauvegardes et les pannes matérielles. Ce dernier inconvénient a eu raison de mon serveur fin de semaine dernière : le disque dur a rendu l’âme !

Pour ne pas laisser le blog trop longtemps hors-ligne, je me suis orienté vers un service de Gandi, mon fournisseur de nom de domaine : Simple Hosting. Il s’agit d’un service Paas (Platform as a service). Pour faire simple, vous disposez d’un environnement complet, à la carte, ou vous choisissez chaque élément de votre plateforme (pour ma part PHP + MySQL sur un pack S) et une instance vous est créée au jour, mois ou à l’année. Chaque instance est indépendante et autonome donc votre instance vous est entièrement dédiée. Par contre, contrairement à un serveur dédié, vous ne pouvez pas administrer le serveur (logique, c’est une instance, pas un serveur en tant que tel). Vous pouvez par contre administrer tous les services de votre instance.

Cette solution me convient donc parfaitement à l’heure actuelle car elle me laisse le temps de mener une réflexion sur mon prochain serveur. Vais-je réparer l’actuel ? Vais-je investir un petit peu de sous et me monter un petit serveur mieux équipé ? Vais-je finir par opter pour un dédié en ligne ? Je n’en sais rien pour le moment.

J’espère tout de même avoir le temps ces prochains jours d’aboutir ma réflexion et de rapidement revenir aux affaires. Contre toutes attentes, je pensais qu’une fois mon serveur décédé je serais soulagé de revenir à une solution gérée par un tiers. Je me rends compte que non, j’ai envie de continuer cette aventure de l’auto-hébergement. Malgré les heures passées à administrer, malgré les arrachages de cheveux, malgré les coupures intempestives… oui, malgré tout cela, je prends énormément de plaisir à gérer mes données.