Comparaison de dates en (My)SQL


1 novembre 2012

Il arrive souvent qu'on veuille extraire des enregistrements d'une table en fonction d'un critère temporel issu d'une autre table, ex : toutes les lignes créés après la date X. L'écriture la plus simple et la plus explicite pour cela ressemble à celle qui suit. L'exemple choisi est celui d'un commerce qui stocke ses factures liées à des clients et qui veut obtenir toutes les factures qui devraient être payées, c'est-à-dire celle dont le délai de paiement est dépassé. La "difficulté" ici est que le délai de paiement dépend du client.

select f.montant from Factures as f join Clients as c on f.client=c.id where f.dateDeCreation + INTERVAL c.delai DAY > now();

Coran généré sur OSX


14 octobre 2012

Si l'on veut lire un passage du Coran et qu'on a oublié de le prendre avec soi, il suffit d'avoir un Mac à portée de main et d'exécuter le script Bash suivant :

for i in `seq -w 1 114`; do curl -s "http://www.hisnulmuslim.com/coran/index.php?num_sourate=$i" | iconv -f iso-8859-1 -t utf-8 | php -r '$C=str_replace(Array("\n", "\r", "\t", chr(146)), Array("", "", "", "A".chr(39)), file_get_contents("php://stdin")); preg_match("@&lth1><span class=\"[^\"]*\">(.*?)</span>(.*?)</h1>.*?<em>(.*?)</em>.*?<p class=\"texte\">(.*?)</p>@m",$C, $M)."\n"; echo $M[1]."".$M[2]."\n".$M[3]."\n".str_replace("<br /> ", "\n", preg_replace("@<span class=\"num_verset\"[^>]*>([^<]*)</span>(.*?)@", "$1 : $2", $M[4])); echo "\n";' > sourat$i.txt; cupsfilter -o media=A4 -o landscape -o cpi=14 -o lpi=8 -o page-top=50 -o page-bottom=50 -o page-left=50 -o page-right=50 -o wrap sourat$i.txt > sourat$i.pdf 2>/dev/null; done && /System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py -o coran.pdf sourat*pdf && rm -f sourat*

En plus de produire le Coran suivant le texte de la librairie Tawhid (grande qualité de traduction) ce script illustre les points suivants :

  • Comment générer un PDF à partir de texte brut : cupsfilter, tout simplement.
  • Comment combiner/joindre/concaténer des fichiers PDF sur OSX : le script Automator /System/Library/Automator/Combine\ PDF\ Pages.action.
  • On est aussi confortable sur un Mac que sous Linux : la CLI est au même niveau (Bash 3.X) et les commandes disponibles sont les mêmes. C'est un Unix :)

Bien évidemment je remercie hisnulmuslim.com pour la mise en ligne du texte Français.

Sources :

Moralité : il faudra réaliser une version 2 de ce script afin de générer un PDF encore plus avancé.

Admin : chroot et sftp


26 juillet 2011

Je veux lister plusieurs liens concernant la mise en place d'une jail pour les utilisateurs d'un SFTP en attendant de faire un post complet et sérieux :

  • http://ubuntuforums.org/showthread.php?t=915985
  • http://undeadly.org/cgi?action=article&sid=20080220110039
  • http://www.cyberciti.biz/faq/page/7/
  • http://www.queret.net/blog/post/2010/03/03/Chrooter-une-session-SSH-utilisateur

Admin : Apache et rewrite dans des .htaccess


26 juillet 2011

Je veux lister plusieurs liens concernant du rewrite dans des .htaccess en attendant de faire un post complet et sérieux :

  • http://corz.org/serv/tricks/htaccess2.php
  • http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html

SQL : obtenir une séquence d'entiers


3 juillet 2011

J'aimerai obtenir une séquence d'entiers compris entre 15, inclus, et 100, exclus, avec la requête suivante :

select value from sequence where value>=15 and value<100;

Pour cela il faut définir, offline, les deux views suivantes et c'est bon :

create view digits as select 0 n union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9;
create view sequence as select u.n+t.n*10+h.n*100 as value from digits as u cross join digits as t cross join digits as h;

Le vue sequence permet donc d'avoir des nombres compris entre 0 et 1000.

Accueil1 2 3 4 5 6 7 8