Aujourd'hui, je vous propose de découvrir deux vidéos réalisées par votre serviteur sur jQuery disponible sur le site tuto.com :
Une procédure stockée est un ensemble d'instructions SQL pré-compilées stockées sur le serveur de base de données.
L'intérêt réside surtout dans la rapidité en évitant les échanges avec le client, et la simplification du code lors de l'appel.
Voici un exemple qui contrôle le stock de produits disponible et qui réajuste automatiquement la table des quantités si cette dernière est supérieure au stock disponible :
delimiter |
DROP PROCEDURE IF EXISTS CHECK_STOCKS |
CREATE PROCEDURE CHECK_STOCKS(p_order_id INT)
BEGIN
DECLARE v_done INT DEFAULT 0;
DECLARE v_o_p_id, v_quantity, v_stock INT;
DECLARE v_cur1 CURSOR FOR
SELECT opt.o_p_id , opt.o_p_quantity , p.product_stock
FROM order_products_tmp opt , products p
WHERE opt.order_id = p_order_id AND p.product_id = opt.product_id;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET v_done = 1;
OPEN v_cur1;
REPEAT
FETCH v_cur1 INTO v_o_p_id, v_quantity, v_stock;
IF NOT v_done THEN
IF v_stock <= 0 THEN
DELETE FROM order_products_tmp WHERE o_p_id = v_o_p_id LIMIT 1;
ELSEIF v_quantity > v_stock THEN
UPDATE order_products_tmp SET o_p_quantity = v_stock WHERE o_p_id = v_o_p_id LIMIT 1;
END IF;
END IF;
UNTIL v_done END REPEAT;
CLOSE v_cur1;
END
|
Ensuite, il suffit d'exécuter la requête SQL dans phpMyAdmin (les dernières versions supportant le délimiteur DELIMITER
).
Pour appeler la procédure stockée, vous devez exécuter la commande CALL
.
CALL CHECK_STOCKS(32);
Cette fonction se comporte exactement de la même manière que la fonction date()
en PHP, mais traduite en français.
function date_french($format, $timestamp = null) {
$param_D = array('', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim');
$param_l = array('', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
$param_F = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
$param_M = array('', 'Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jun', 'Jul', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc');
$return = '';
if(is_null($timestamp)) { $timestamp = mktime(); }
for($i = 0, $len = strlen($format); $i < $len; $i++) {
switch($format[$i]) {
case '\\' : // double.slashes
$i++;
$return .= isset($format[$i]) ? $format[$i] : '';
break;
case 'D' :
$return .= $param_D[date('N', $timestamp)];
break;
case 'l' :
$return .= $param_l[date('N', $timestamp)];
break;
case 'F' :
$return .= $param_F[date('n', $timestamp)];
break;
case 'M' :
$return .= $param_M[date('n', $timestamp)];
break;
default :
$return .= date($format[$i], $timestamp);
break;
}
}
return $return;
}
Lors de tries par page ou par ligne en base de données, il est parfois utile d'attribuer un rang pour chaque enregistrement. Voici une requête SQL qui vous permettra d'effectuer une telle opération :
SELECT (
SELECT COUNT(id) FROM table t2
WHERE t2.titre <= t1.titre
) AS rang , t1.*
FROM table t1
ORDER BY t1.titre
Et non, ce blog n'est pas mort, ou du moins pas encore... même si le temps manque cruellement pour ajouter de petites astuces.
La recette du jour est destinée à l'attention des MacUsers qui travaillent avec NetBeans (dernière version 6.7.1). Peut-être comme moi, vous regrettez de ne pouvoir utiliser la police "Monaco" en codant. Car il faut bien l'avouer cette typo avec un anti-aliasing n'est pas franchement lisible en petite taille. Heureusement, il existe UNE solution... Il "suffit" de désactiver le fameux anti-aliasing. Pour ce faire, il faut éditer le fichier suivant :
NetBeans.app/Contents/Ressources/NetBeans/etc/netbeans.conf
( Rappel: clique-droit sur l'application NetBeans.app puis "Afficher le contenu du packet" )
Trouver la ligne suivante :
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Xverify:none -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true"
Ensuite, ajouter -J-Dswing.aatext=false -Dawt.useSystemAAFontSettings=false
, ce qui vous donnera :
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Xverify:none -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true -J-Dswing.aatext=false -Dawt.useSystemAAFontSettings=false"
Vous enregistrez le fichier, vous relancez NetBeans, et l'opération est terminée ! Il ne vous reste plus qu'à choisir la police de votre choix dans les Préférences.
Aujourd'hui, je ne vous propose pas un morceau de code source, mais simplement un petit outil fort pratique pour vos oreilles et qui vous permettra d'augmenter votre cadence de travail avec un fond musical de premier choix et de bonne qualité.
Ainsi, je vous présente le logiciel Spofity :
Ce logiciel est à mi-chemin entre iTunes et Deezer !
Je vous laisse donc imaginer le reste...
Toute la musique que vous désirez, est disponible gratuitement en écoute streaming (aucun fichier ne peut être chargé). Le logiciel contient quelques bannières de pub, et encore quelques rares jingles publicitaires. Une version payante vous permet d'enlever ces petits parasites.
Le logiciel est pour le moment en version bêta et les inscriptions semblent limitées à des invitations.
Toutefois, si vous vous rendez directement à l'adresse suivante :
https://www.spotify.com/en/get-started/
vous n'avez pas besoin d'invitation ;-)
Peut-être comme moi, vous venez de découvrir Internet Explorer 8 et que ce dernier est un " peu " plus compatible que Internet Explorer 7... Toutefois, certaines pages fonctionnent mal vu la quantité de patch CSS appliqués pour fixer les soucis de IE7, IE6, etc...
Microsoft a donc pensé à tout ! Il nous a sorti une balise META qui permet d'indiquer à Internet Explorer 8 la version du moteur graphique à utiliser. Pour forcer un rendu IE7 et non IE8, il suffit d'injecter la META ci-dessous :
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
Chose assez amusante, on pourrait croire que le site officiel de Microsoft est parfaitement compatible Internet Explorer 8, et qu'il n'a pas du tout besoin de cette META... et bien il n'en est rien, leur code source contient aussi la dite balise ! " Vive Microsoft ! "
Pendant ce temps, on doit toujours faire attention à Internet Explorer 6, utilisé par environ 1/4 des surfeurs du Web... Heureusement, ce chiffre baisse de mois en mois.
Documentation MSDN :
• http://msdn.microsoft.com/en-us/library/cc817574.aspx
Comment forcer le téléchargment d'un fichier sans utiliser de script PHP (ou autres...) ?
Solution : Un simple fichier .htaccess
à placer dans le dossier désiré !
<IfModule mod_headers.c>
<FilesMatch "\.(jpe?g)$">
ForceType image/jpeg
Header set Content-Disposition attachment
</FilesMatch>
</IfModule>
A noter : en cas de dysfonctionnement, cela veut dire que le mod_headers
n'est pas installé, ou est indisponible sur votre serveur Apache.
Documentation officielle :
• http://httpd.apache.org/docs/2.0/mod/core.html#filesmatch
• http://httpd.apache.org/docs/2.0/mod/mod_headers.html
On sent que la récession en France est très forte, j'ai moi-même du mal à joindre les 2 bouts... notamment à propos du temps qui m'est disponible pour rédiger ce poste (Travailler plus, pour gagner plus, qui disait !).
L'idée du code source du jour :
Rechercher dans une page (X)HTML, les ID
entifiants correspondant à une expression régulière new RegExp
.
function getElementsByRegExpId(p_regexp, p_element, p_tagName) {
p_element = p_element === undefined ? document : p_element;
p_tagName = p_tagName === undefined ? '*' : p_tagName;
var v_return = [];
var v_inc = 0;
for(var v_i = 0, v_il = p_element.getElementsByTagName(p_tagName).length; v_i < v_il; v_i++) {
if(p_element.getElementsByTagName(p_tagName).item(v_i).id && p_element.getElementsByTagName(p_tagName).item(v_i).id.match(p_regexp)) {
v_return[v_inc] = p_element.getElementsByTagName(p_tagName).item(v_i);
v_inc++;
}
}
return v_return;
}
// Exemple d'utilisation
var v_array = getElementsByRegExpId(/^test.+/);
Voici une petite étude technique comparative des sites officiels de John McCain et de Barack Obama...
A y regarder de plus près, les portraits des deux candidats se révèlent de manière assez intéressante :
Barack Obama | John McCain |
XHTML 1.0 Transitional standard | HTML 4.01 |
4 Erreurs W3C | 151 Erreurs W3C |
UTF-8 | ISO-8859-1 |
Open source (PHP / Apache) | Corporate (Microsoft ASP) |
Erreur 404 gérée | Erreur 404 standard |
Pretty URL | URL case-sensitive et imbitable |
Maintenant, il ne reste plus qu'à faire votre choix... Je vous laisse deviner vers qui se porte mon vote ;)
Sources :
http://www.barackobama.com/
http://www.johnmccain.com/
http://www.presse-citron.net/
On peut dire qu'en ce moment, je fais fort avec des titres très accrocheur ! ( ou qui ne semble avoir aucun sens... ). Plus sérieusement, je vais vous parler d'un thème qui vous semblera au combien aride et en ennuyeux : l'obfuscator de code... Afin de vous captiver jusqu'au bout de ma prose, vous trouverez en fin de ce message une Geekette tout droit venue de vos rêves les plus fous !
Obfuscateur ou Obfuscator : encore un terme barbare pour ne pas dire grand chose et accessoirement pour frime dans un dîner mondain. Exemple :
- Oui, en effet, la semaine dernière, j'ai découvert un obfuscateur d'une grande puissance qui transforme du bytecode en un algorithme du même langage plus difficile à décompiler pour le newbie qui peine à coder deux méthodes en POO sans générer un code erreur de compilation.
- Mmmffff mmmfff mmfff .....
- Vous reprendrez bien un peu de thé avec ceci ?
Avez-vous remarqué l'approche pédagogique qui a été faite, je vous ai donné une belle définition dans une blague totalement lamentable ?! L'obfuscateur a en effet pour mission de faire de la purée de votre code, et ainsi le rendre plus difficile à comprendre et donc à décompiler.
Toutefois, dans notre cas présent, obfusquer de code Javascript a un double intérêt, rendre le code illisible (mais ceci n'est vraiment que très partiel) et surtout rendre vos scripts plus légers car ils se retrouveront débarrasser de leurs espaces et de leurs commentaires.
Voici sûrement le plus connu et gratuit /packer/ de Dean Edwards disponible sur http://dean.edwards.name/packer/ qui opère en ligne. Différentes options sont disponible, notamment retirer les espaces et commentaires, obfusquer le code, et remplacer les noms des variables sans influencer le comportent de vos scripts.
Et voici le passage que vous attendez tous : la Geekette !
Au hasard de mes navigations sur le net, je suis tombé sur le site Hello Geekette .com. Un petite série de court-métrages sur le thème des relations entre les geeks et les humains :
Greg est ce que l'on peux appeler si ça existe: « un mec normal ».
Alors que Valérie est ce que l'on peux appeler: « une geekette » .
Mais cela ne serait pas grave… s’ils n’étaient pas aussi… colocataires!
L'épisode Hello Geekette 5 - Geeks Vs Bobos est particulièrement savoureux ;-)
Dernier épisode en date du 1er octobre Hello Geekette 8 - Faites la guerre, pas l'amour !.
Sources :
http://www.hellogeekette.com/
http://www.dailymotion.com/hellogeekette
La maison d’édition Ellipses s’est finalement portée acquéreuse des ouvrages qui étaient bloqués en stock depuis la liquidation des Éditions O’Reilly.
Ce petit article sur le nouveau blog d’Ellipses officialise la nouvelle, mais ne précise pas quand vous pourrez trouver ces livres à nouveau chez votre libraire favori. Si votre libraire s’est déjà renseigné, n’hésitez pas à partager vos informations dans un commentaire !
Autre question en suspens, est-ce qu’Ellipses obtiendra l’autorisation de réimprimer ces ouvrages auprès des auteurs (pour les ouvrages originaux) et/ou d’O’Reilly US (dans le cas des traductions) ? Nous ne savons pas non plus si les versions PDF seront à nouveau disponibles un jour.
À suivre !
Voilà enfin une lueur d'espoir pour ces ouvrages d'une grande qualité...
Sinon, les ouvrages anglais sont disponible sur Oreilly.com (ou sur Amazon.fr) et avec la devise du dollar, vous aurez droit à une belle remise ;-)
Sources :
http://blog.immateriel.fr/2008/09/23/le-fonds-oreilly-rediffuse-par-ellipses/
http://blog-ellipses.typepad.fr/presentation/2008/09/bienvenue-oreil.html
http://www.oreilly.fr/
http://www.editions-ellipses.fr/
Astuce du jour : Comment faire comprendre à ce bon Internet Explorer 6.0 la couleur transparent
appliquée sur un border
?
Une réponse peut déjà vous passer par la tête : " baaaahhhh un padding: 1px;
, non ?! "...
oui mais voilà, Internet Explorer a une petite tendance à bugguer avec le CSS ( quelle découverte ! ) et pour fixer ces petits soucis, un border: 1px solid #fff;
règle parfois le problème aussi étrange que celui puisse paraître, et donc la réponse a ma question prend tout son sens...
<style type="text/css" media="screen">
div.mon-test {
width: 100%; height: 100px;
border: 1px solid transparent;
}
</style>
<!-- Propriété propre à Internet Explorer 6.0 -->
<!--[if IE 6]>
<style type="text/css" media="screen">
div.mon-test {
border-color: pink;
filter: chroma(color=pink);
}
</style>
<![endif]-->
Cette solution n'est pas sans modifier le comportement du div
impliqué, j'ai notamment remarqué que les propriétés de l'overflow
n'étaient plus les mêmes. En bref, cette solution pourra ( je l'espère) vous aider, mais risque aussi de vous recréer d'autres problèmes ultérieurement. Je serais personnellement plus adepte d'un div
dans un div
.
Mais n'oubliez jamais cet adage : " Trop de div, Tue le div ! ".
Source du hack : http://acidmartin.wordpress.com/
Voici sûrement l'une des astuces les plus inutiles du moment. Comment accéder aux données POST
bruts en PHP ? Il suffit de lire le flux d'entrée php://input
de la manière suivante :
<form action="page-input.php" method="post">
<p>
<label for="text">Zone de texte :</label>
<input type="text" name="text" id="text" />
</p>
<p><input type="submit" name="submit" value="Continuer" /></p>
</form>
<p><?php echo file_get_contents('php://input'); ?></p>
Ce qui retournera comme résultat :
text=bla+bla+bla&submit=Continuer
php://input
ne fonctionnera pas si vous utilisez l'attribut enctype="multipart/form-data"
dans votre balise <form action="" method="post">
.
Documentation officielle : http://www.php.net/wrappers.php
Google vient de lancer son nouveau navigateur Google Chrome. J'en entends déjà raller dans leur coin : " Encore un navigateur dont il va falloir contrôler le rendu avant de mettre mon site en production. "
Sachez que ce navigateur se base sur le moteur de Apple Webkit ( Safari sur Mac OS X ) comme le montre la ligne ci-dessous :
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
Pour résumé, si votre site est compatible avec Safari, vous ne devriez pas rencontrer de problèmes particuliers.
Pour ceux qui n'ont jamais essayé Webkit ( Safari ), sachez que Webkit se comporte "pratiquement" de la même manière que Mozilla Firefox au niveau du HTML et du CSS. En ce qui concerne le Javascript, l'affaire est quelque peu différente notamment dans le support du DOM W3C ou encore du designMode, toutefois les développeurs de Google Chrome semblent avoir beaucoup retravaillés le moteur Javascript (nom de code V8) donc...
Affaire à suivre, il n'en reste pas moins qu'une éternelle question subsiste :
Quand pourra-t-on abandonner Microsoft Internet Explorer 6.0 ?! ^^
Télécharger Google Chrome :
http://www.google.com/chrome
http://code.google.com/chromium/