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 16 février 2012

Gérer sa liste de todos dans Vim

J'ai testé pas mal de solutions pour gérer mes listes de to-do, et j'ai toujours fini par être frustré par l'outil. J'ai depuis six mois une solution qui tient la route : Vim.

Très simplement, je me suis crée une syntaxe personnelle pour me permettre de repérer en un clin d'œil les choses qui m'importent.
Voici le rendu, sur un exemple certes un peu théorique (je ne vais pas publier ma vraie liste de tâches à faire ;)).
Todo dans Vim

Simplement :

  • chaque ligne non indentée est prise pour un titre et s'affiche en bleu
  • les un ou deux mots en majuscule commençant par un @ s'affichent en vert (j'utilise ça pour identifier des personnes)
  • les éléments commençant par un + s'affichent en jaune (j'utilise ça pour identifier des « projets » ou en quelque sorte des Tags)
  • les lignes commençant par un ! s'affichent en rouge
  • chaque * s'affiche en violet pour me permettre d'avoir un aperçu rapide sur les tâches
  • les dates se soulignent.

Le fichier de syntax correspondant est :

" Vim syntax file
 " Language: mytodo
 " Maintainer: Jean-Baptiste Hétier
 " Latest Revision: 04/08/2011
 
 if exists("b:current_syntax")
   finish
 endif
 
 syn match todoTitle '^\S\+.*$'
 syn match todoPeople '@\S\+'
 syn match todoPeople '@\S\+\s\u\S*'
 syn match todoProject '\s+\S\+'
 syn match todoImportant '^\s*!\s.*$' contains=todoProject,todoPeople,todoDate
 syn match todoList '^\s*\*\s'
 syn match todoDate /\d\{4\}\/\d\{2\}\/\d\{2\}/
 
 hi todoTitle term=bold ctermfg=DarkCyan guifg=DarkCyan gui=bold
 hi todoPeople ctermfg=DarkGreen guifg=DarkGreen
 hi todoProject term=bold ctermfg=DarkYellow guifg=DarkYellow gui=bold
 hi todoImportant term=bold ctermfg=Red guifg=Red gui=bold
 hi todoList ctermfg=DarkMagenta guifg=DarkMagenta
 hi todoDate term=underline gui=underline 
 
 let b:current_syntax = "mytodo"

Ce fichier de syntaxe s'enregistre dans

  • ~/.vimfiles/syntax/mytodo.vim sous Linux
  • ou C:\Users''{utilisateur}''\vimfiles\syntax\mytodo.vim sous Windows.

Ensuite il suffit de faire :set filetype=mytodo dans Vim pour appliquer la syntaxe au buffer en cours.
Pour que la syntaxe s'applique automatiquement sur les fichier d'extension mytodo, il est possible d'ajouter la ligne suivante dans le vimrc :

au BufNewFile,BufRead *.mytodo setf mytodo

Voilà, ça ne casses pas des briques mais je trouve que l'efficacité de Vim est excellente pour gérer des todos au quotidien.

mardi 7 février 2012

Microsoft Word : coller le texte sans mise en forme

Word (comme Excel ou Powerpoint) a la fâcheuse tendance à coller du texte en essayant tant bien que mal de conserver le format d'origine plutôt que de coller le texte sans mise en forme. Personnellement c'est rarement ce que je souhaite.

J'ai trouvé qu'il existait une option pour contrôler ce comportement. On la trouve dans les options avancées de Word, tout du moins dans les versions 2007 et 2010 : dans Collage à partir d'autres application, sélectionnez Conserver le texte seulement.

Options de collage dans Word 2010

Configuré pour coller le texte sans mise en forme, je trouve la suite Microsoft Office plus intuitive sur le copier-coller. Notez que si vous souhaitez conserver la mise en forme pour un collage, vous pourrez alors passer par un collage spécial ou par le petit menu contextuel qui s'affiche après avoir collé un texte et que l'on peut activer avec la touche Ctrl.

Des années que j'utilise Word, et seulement aujourd'hui je découvre ça !

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 !

- page 1 de 50