Menu principal

Statut de la page

Lancer NodeJS comme un service avec Upstart

Il est facile de lancer un serveur web, par exemple, avec NodeJS et une de ces commandes :node web.js node web.js & node web.js >> /var/log/nodejs.log 2>&1 La première lance le script web.js en console. Dès que la console est coupée, le script l’est aussi. Ballot. La seconde permet de garder le script  web.js en arrière-plan, mais si le script cherche à écrire quelque chose sur stdout et que la console est coupée, le script va crasher. Et oui stdout n’existe plus. La dernière solution est la meilleure des 3 mais en cas de crash ou de redémarrage du serveur, on est obligé de relancer le script à la main. Mais alors, comment je fais ? Je reste au cul du serveur, à guetter sur htop si mon script disparait pour pouvoir garder un [...]
Lire la suite
Vus : 776
Publié par Maxime CHAILLOU : 11

Contrôle d’accès simple avec CodeIgniter

Une des choses redondantes dans un projet, c’est le contrôle d’accès. Savoir jusqu’où un utilisateur non connecté peut aller, ou même limiter les droits de certains utilisateurs. Le truc basique c’est de checker soit dans le constructeur du contrôleur, soit dans chaque fonction du contrôleur si l’utilisateur a les droits suffisants pour continuer. Or lorsque le projet atteint une certaine ampleur, il devient vite contraignant et lourd de rajouter ce contrôle à chaque fonction. Étendre la classe controller Au début, je pensais créer un hook pre-controller mais toutes les fonctionnalités dont j’avais besoin n’étaient pas chargées. Du coup j’étends la classe controller afin que chaque contrôleur commence par checker l’accès avant d’aller plus loin. Pour étendre la classe controller il faut créer un [...]
Lire la suite
Vus : 2821
Publié par Maxime CHAILLOU : 11

Sauvegarder les mots de passe dans Postgresql avec bcrypt

On voit de plus en plus souvent dans les news, que des bases de données se sont faites hackées, et des gros dumps de mots de passe circulent ainsi dans la nature. La sauvegarde old school La manière classique de sauvegarder les mots de passe utilisateur est de les garder en clair de les hasher (md5, sha1, …) avec un salt. Exemple:md5(salt + mdp) md5("AvecCettePhraseAleatoirePersonneNeTrouveraLesMDP" + "MonMotDePasseDeLaMortQuiTue") = 3576e3ae9dc9263a09fc321710f8224fVoila, on récupère ainsi une chaine de caractère illisible. Le problème c’est qu’elle est crackable très très rapidement, puisque les algorithmes de hash rapides, tels que md5 et ceux de la famille SHA, ne sont plus vraiment fiables: voir cet [...]
Lire la suite
Vus : 1350
Publié par Maxime CHAILLOU : 11

Recherche avec auto-complétion multi-mots et Postgresql

L’auto-complétion multi-mots ? Kézako ? Bon c’est un terme que j’ai un peu inventé (oui je me la raconte ;)), mais je vais vous expliquer la théorie rapidement. Avec une auto-complétion normale, sur une base importante, on utilise en général like ‘blabla%’. Avec un index sur le champ concerné, les performances sont très correctes, et ce genre de méthode est fréquemment utilisée. Mon problème: j’aimerai effectuer une recherche auto-complétée à partir de n’importe quel mot d’un titre. Exemple: Trouver « Tour Eiffel » en tapant « eif ». Exemple 2: Trouver « Tour Eiffel » en tapant « eiffel [...]
Lire la suite
Vus : 1239
Publié par Maxime CHAILLOU : 11

Archivage continu Postgresql avec WAL-E

La sauvegarde de sa base de données est une chose essentielle pour la pérennité de son site. Actuellement je fonctionne sur le principe très basique du dump (pg_dump) de toute ma base de données. Mais cette pratique est loin d’être optimum, et il faut effectuer des dumps assez régulièrement s’il l’on ne veut pas perdre trop de données en cas de crash. Pour la sauvegarde, il existe un autre moyen avec Postgresql, qui consiste dans un premier temps à enregistrer une sauvegarde complète de la base, et ensuite de ne sauvegarder que les changements apportés à la base sous forme de fichiers WAL. Ainsi « terminé » les gros backups entiers de la base de données, et nous pouvons garder une trace de chaque action effectuée sur la base de données et les rejouer à [...]
Lire la suite
Vus : 611
Publié par Maxime CHAILLOU : 11

Simple upload en drag and drop avec HTML5 / Jquery / PHP

Il existe actuellement plusieurs plugins qui gèrent les uploads en drag and drop avec HTML5, et avec une pléthore d’options. Mais c’est bien là le problème. Encore un plugin lourd pour effectuer une action simple. Le but ici est de mettre en place un système permettant de télécharger une image sur un serveur, en glissant une image simplement dans une « dropbox » présente sur une page web ; rien de plus. Posons les bases Je commence juste par créer la dropbox de base :<div id="dropfile">Drop an image from your computer</div>Avec son petit code css :#dropfile{ width: 300px; height: 50px; border: 3px dashed #BBBBBB; line-height:50px; text-align: center; }  Jquery Je commence par initialiser tous les évènements liés au drag et au drop, afin [...]
Lire la suite
Vus : 2500
Publié par Maxime CHAILLOU : 11

Migration MySQL vers Postgresql

J’ai été amené à effectuer un changement de base de données, et après des journées de recherche/modifications/tests, je suis enfin arrivé à mes fins. Pourquoi changer de base de données? C’est vrai que je n’avais aucun problème avec MySQL, mais j’ai découvert PostGIS, un plugin qui transforme Postgresql en base de données spatiale. Et ce plugin très puissant va s’avérer très utile dans mon projet. C’est donc la principale raison qui m’a poussée à migrer. De plus, le projet n’étant pas encore en [...]
Lire la suite
Vus : 7615
Publié par Maxime CHAILLOU : 11

CodeIgniter avec Nginx

Depuis un moment je voulais essayer Nginx, puisqu’il est apparemment, bien plus performant qu’Apache. Donc je me suis décidé à passer le pas, et je vais expliquer ici ma démarche. D’abord je vous conseille de lire cet article (en anglais) qui explique les différences importantes entre Apache et Nginx. Ca permet de savoir où on met les pieds. Pour cette installation je travaille sur Ubuntu 12.04.2 LTS. Installation Dans un premier, il faut arrêter tous les services qui pourrait écouter sur le port 80 (http). Dans mon cas, j’ai besoin de stopper Apachesudo /etc/init.d/apache2 stopEnsuite on installe les paquets [...]
Lire la suite
Vus : 585
Publié par Maxime CHAILLOU : 11

Créer un site multilingue avec CodeIgniter

Version de CodeIgniter utilisé: 2.1.2 Les fonctionnalités souhaitées: Affichage de la langue dans l’URL. Cela permet un meilleur référencement, avec un lien unique vers un contenu dans une langue donnée. (exemples: www.mondomaine.com/fr, www.mondomaine.com/en) Détection de la langue du navigateur Facilité d’évolution (ajouter une nouvelle langue) Facilité d’utilisation pendant le développement URI Language Identifier Le vrai secret pour faire ce que l’on souhaite, est une extension de la [...]
Lire la suite
Vus : 2434
Publié par Maxime CHAILLOU : 11

Faire une recherche sur Geonames à partir de PHP

Geonames est une base de données géographiques sous licence Creative Commons qui contient plus de 8 millions d’éléments (villes, monument, parc, etc…). Un webservice est mis à disposition afin de pouvoir récupérer tout un tas d’information facilement. Pour y accéder il suffit de créer un compte ici, tout est gratuit. Il y a une limite qui est très haute: 30 000 crédits par jour et 2000 crédits par heure. La taille du crédit change suivant le type de service web appelé, mais pour une recherche, un crédit = une requête. Donc dans l’exemple qui suit nous allons rechercher « tour eiffel » et nous allons récupérer les [...]
Lire la suite
Vus : 611
Publié par Maxime CHAILLOU : 11
Powered by BilboPlanet