Bienvenue sur Think-Underground.com

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

Informatique

Logiciels pour tous, réflexions de développeur et astuces de geek

jeudi 5 janvier 2012

Toutes les solutions pour tous les Rubik's cube

Rubik's cube J'ai découvert récemment Francocube, un site qui propose des méthodes pour résoudre la majorité des variantes de Rubik's cube.

On a (presque) tous un de ces cubes à la maison, chez nos parents ou chez un ami plus ou moins proche (et plus ou moins fou)… toujours est-il qu'en général, les gens qui l'ont eu entre les mains pour la première fois l'ont souvent reposé au bord de la crise de nerfs. Heureusement, il n'est pas si difficile de résoudre ces casse-tête à condition d'avoir quelques explications de méthodologie, c'est-à-dire surtout de savoir dans quel ordre s'y prendre !

Francocube fait le tour des diverses méthodes et donne aussi des « formules » qui guident pas à pas la résolution. Si l'application bête et méchante de formules n'est pas forcément la finalité de ce casse-tête, c'est au moins un bon point de départ pour pouvoir reconstruire le cube sans devoir décoller les faces :)

Personnellement je me suis bien amusé il y a quelques années avec un Rubik's cube classique (3×3), et c'est l'achat relativement récent d'un Megaminx — c'est à dire d'un Rubik's cube dodécaédrique — qui m'a poussé à chercher une méthode plus constructive que mon approche à tâtons. Et tout à coup ça marche mieux !

Allez, à vos cubes !

jeudi 22 septembre 2011

Facebook pour le meilleur et pour le pire

FacebookJe viens de retrouver un petit lien du temps où j'étais sur Facebook[1]. Ce lien donne 10 astuces pour mieux protéger sa vie privée sur Facebook, une lecture intéressante.

L'article fait partie d'un site bien plus complet Facebook — All Facebook — qui détaille toutes les joies et les frustrations que ce réseau peut apporter. Si vous ne pouvez pas vous passer de Facebook et que vous cherchez de nouvelles astuces pour l'améliorer, ou au contraire si vous voulez chercher de bonnes raisons pour quitter ce réseau virtuel, allez donc faire un tour sur All Facebook.

Notes

[1] Je ne suis pas en train de me la jouer « Ouais, Facebook c'est trop 2006 pour moi » mais j'ai juste décidé de quitter Facebook depuis bientôt un an, sans aucun regret d'ailleurs :) : moins d'informations de personnes dont je n'ai rien à faire, moins de perte de temps à faire le tri dans les messages inutiles et des applications aussi bavardes que ridicules, plus de contrôle sur mes données (photos, mails, numéros de téléphone, etc.), et j'en passe…

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

GParted en Live CD

GPartedCe week-end je suis intervenu sur le PC d'une amie pour supprimer sa partition Windows et récupérer la place ainsi gagnée sur son espace Linux Mint Debian Edition (dire qu'il y a un an elle ne connaissait pas Linux ! Bref…). Je cherchais une solution simple et libre pour effectuer ces opérations. Je connaissais GParted — sorte de Partition Magic libre — que j'avais déjà utilisé à maintes reprises pour manipuler les partitions sur mon PC ; j'ai découvert GParted Live CD qui permet de démarrer une mini distribution Linux (basée sur Debian) pour effectuer quelques opérations de maintenance.

Une fois la traditionnelle sauvegarde des données réalisée (on n'est jamais trop prudent), j'ai pu supprimer des partitions, déplacer des partitions et redimensionner des partitions sur le disque système sans aucun problème. Étant sur un live CD, le disque n'était pas utilisé… sans quoi les opérations auraient été bien plus délicates.

À garder sous la main pour d'autres interventions du genre !

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 ?

mercredi 20 juillet 2011

Se débarasser de « rt2500usb_init_eeprom: Error » au boot

La Linux Mint Debian Edition m'a toujours affiché deux petits messages d'erreur au démarrage qui m'ont toujours un peu énervé (j'aime pas les messages d'avertissement) :

phy0 -> rt2500usb_init_eeprom: Error - Invalid RT chipset detected.
phy0 -> rt2x00lib_probe_dev: Error - Failed to allocate device.

Pour me débarrasser de ces messages j'ai décidé de blacklister rt2500usb qui n'est de toutes façons pas le driver de ma carte Wifi. Un petit lsmod m'a permis de confirmer que ce module n'était pas utilisé par mon système.

La documentation de Debian explique clairement comment s'y prendre pour blacklister un module :

  1. Créer le fichier /etc/modprobe.d/rt2500usb.conf contenant le texte blacklist rt2500usb.conf ;
  2. Lancer depmod -ae en root ;
  3. Et recréer l'initrd avec update-initramfs -u.

L'erreur n'est plus là au boot et je peux de nouveau dormir tranquille :)

- page 2 de 51 -