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
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
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
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
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
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
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
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
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
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