Bienvenue sur Think-Underground.com

Logiciels libres, photographie, musique, énigmes, humour et coups de cœur

Informatique › Développement et ergonomie

Des articles sur la programmation et la conception d'interfaces

Fil des billets - Fil des commentaires

lundi 12 septembre 2011

Explain Extended : les bases de données n'auront plus de secrets pour vous

Si vous connaissez déjà relativement bien le langage SQL, vous savez probablement que EXPLAIN sert à détailler les étapes de l'exécution d'une requête par le serveur (execution plan).

Le site Explain Extended pousse le concept un peu plus loin. Il prend des problématiques classiques en SQL, les résout, puis optimise la trace d'exécution pour rendre la requête le plus rapide possible. Il utilise toutes les possibilités et contourne les limitations de plusieurs SGBD : MySQL, SQL Server, Oracle, PostgreSQL

Personnellement j'y ai appris pas mal de choses. Par exemple alors que je cherchais à calculer le score moyen de joueurs sur leurs 10 dernières parties (ou moins s'ils n'avaient pas encore fait 10 parties), j'y ai appris l'utilité (et par là même l'existence) de la fonction COALESCE.
Plus récemment sa réflexion sur l'utilisation de UNPIVOT m'a permis de comprendre qu'il ne fallait pas toujours rechigner à utiliser certaines fonctions peu populaire et ayant une mauvaise image lorsqu'elles sont adaptées à un besoin.

Une lecture que je recommande à tout amateur ou prétendu expert en bases de données.

̂

Sinon, pour les curieux, ou ceux qui veulent optimiser mon bouzin (qui tourne déjà en mois d'une milliseconde sur ma petite base) :

SELECT 
   `joueurs_id`, 
   `joueurs_nom`, 
   `joueurs_prenom`, 
   `moyenne_instantanee`, 
   `nb_parties` 
 FROM joueurs 
 INNER JOIN ( 
   /* Calcul de la moyenne instantanée du joueur */ 
   SELECT 
     stats.`stats_joueurs_id`, 
     SUM(`stats_score_apres` - `stats_score_avant`)/COUNT(`stats_date_partie`)
          AS moyenne_instantanee, 
     COUNT(`stats_date_partie`) AS nb_parties 
   FROM stats 
   INNER JOIN ( 
     /* Calcul de la date de la plus vieille des 10 dernières parties (ou moins) */ 
     SELECT 
       `stats_joueurs_id`, 
       COALESCE(( 
         SELECT `stats_id` 
         FROM `stats` 
         WHERE `stats_joueurs_id` = v_parties.`stats_joueurs_id` 
         ORDER BY `stats_id` DESC 
         LIMIT 9,1 
       ), 0) AS stats_id_vieille_partie 
     FROM ( 
       /* Sélection des parties d'un joueur */ 
       SELECT 
         `stats_joueurs_id`, 
         `stats_date_partie` 
       FROM stats 
       GROUP BY 
         `stats_joueurs_id`, 
         `stats_date_partie` 
     ) AS v_parties 
     GROUP BY `stats_joueurs_id` 
   ) AS v_dates 
   ON stats.`stats_joueurs_id` = v_dates.`stats_joueurs_id` 
   AND stats.`stats_id` >= v_dates.`stats_id_vieille_partie` 
   GROUP BY stats.`stats_joueurs_id` 
   ORDER BY stats.`stats_joueurs_id` 
 ) AS v_moyennes 
 ON v_moyennes.`stats_joueurs_id` = joueurs.`joueurs_id`

mercredi 3 août 2011

Des arborescences avec Mootools

Lorsqu'on développe des sites ou plutôt des progiciels web, on est souvent amené à devoir créer des arborescences. J'affectionne particulièrement Mootools comme framework javascript (même si jQuery semble aujourd'hui devenir la référence).

Mif.Tree, librairie pour faire des arborescences avec MootoolsPendant longtemps j'ai utilisé mootree pour créer mes interfaces : simple mais efficace. J'ai depuis découvert une autre librairie : Mif.Tree. Comme vous pourrez en juger en voyant les démos sur le site officiel, les possibilités sont vraiment assez avancées :

Mif.Tree est donc une librairie vraiment bien pensée et puissante, la documentation est abondante et claire, et c'est libre ! (Creative Commons 3.0 ) Que demander de plus ?

mardi 12 avril 2011

Open Web Tools Directory : répertoire d'outils de développement web

Mozilla dispose d'un projet répondant au nom de Open Web Tools Directory. Ce projet répertorie une multitude d'outil pour faire du développement web en se basant sur des standards ouverts[1]. On trouve de tout : logiciels, extension, bibliothèques, frameworks, etc.

Je trouve qu'il est intéressant pour un développeur web de parcourir la liste. À titre personnel j'y retrouve pas mal d'éléments connux (Mootools, jQuery, Firebug, Selenium, …) mais aussi des choses assez intrigantes et intéressantes (Notable, SpriteMe, XRefresh, Dummy Image, …).
À lire et à tester.

Notes

[1] Je poste volontairement le lien vers la version simplifiée et non la version plus évoluée que je trouve assez inexploitable.

vendredi 3 septembre 2010

Tableau périodique des éléments

Y'a des gens qui ont des idées et surtout d'excellentes manière de les présenter. C'est le cas de Josh Duck qui fait un tableau périodique des éléments un peu particulier et absolument formidable. Ça se passe ici.

jeudi 19 août 2010

Javascript : Logger avec Blackbird

En triant mes favoris, j'ai retrouvé Blackbird, non pas des Beatles, mais de G. Scott Olson. Cette petite librairie, permet de tracer (logger, journaliser, historiser, …) du Javascript.

BlackbirdLa mise en place de la petite console se fait en quelques secondes, est compatible avec presque tous les navigateurs, et permet de débugger facilement un script ou bien de tester les performances de différentes fonctions.

Sous Firefox c'est moins direct que Firebug, mais c'est simple, c'est efficace, et donc ça me plaît :D

mardi 20 juillet 2010

Faire ses tests HTML/CSS/JavaScript sans prise de tête

Si comme moi vous êtes amenés régulièrement à tester des fonctionnalités Mootools, jQuery, ExtJS ou tout simplement si vous voulez tester un bout de code HTML/CSS, rendez-vous sur jsFiddle qui vous fera gagner bien du temps.

- page 1 de 10