mercredi 6 juillet 2011

Mettre en forme une cellule en fonction d’une autre

 

Si l’on souhaite mettre en forme des cellules en fonction du contenu d’autres cellules, la solution n’est pas intuitive.

Sous excel 2010 (cela doit marcher avec des versions plus anciennes) la manip est la suivante :

Imaginons que je veux avoir un format conditionnel dans ma colonne A, dépendant de valeurs dans la colonne G

  1. Sélectionner la colonne A
  2. Aller dans le menu Mise en forme conditionnelle –> nouvelle règle
  3. Le type de règle est “Utiliser une formule pour déterminer pour quelles cellules le format sera appliqué”
  4. Et ensuite dans la formule, saisir par exemple [=G1=”ok”] (sans les crochets)
  5. Définir le format souhaité

Et voila!

jeudi 23 juin 2011

Normaliser le volume d’une collection musicale

 

Lorsqu’on a rippé tous ses CD en mp3, bazardé son lecteur de CD, et remplacé tout ça par un PC avec un média center (n’hésitez pas, choisissez xbmc :-) un problème arrive forcément : les mp3 ne sont pas tous au même volume sonore.

La solution : mp3gain

Attention, il y a plein de logiciels qui font ça en modifiant la qualité du mp3 concerné, mp3gain ne fait qu’ajouter une informations de gain dans le mp3 sans le modifier.

Evidemment toujours sous linux style debian (ubuntu) :

apt-get install mp3gain

Ensuite aller dans le répertoire contenant vos mp3, puis lancer



find . -type f -iname '*.mp3' -print0 | xargs -0 mp3gain –r –k

La première partie de la commande recherche dans le répertoire courant (.) les fichiers (type f) nommés *.mp3, et les formate avec le chemin complet (-print0) pour les passer ensuite à la commande mp3gain qui va ajouter l’information de gain aux fichiers.


Et voila.

xbmc et compilations

 

La liste des artistes dans xmbc peut-être polluée par tous les artistes qui n’apparaissent qu’une fois sur une compilation…

Pour gérer correctement les CD de compilation sous xbmc, il n’y a qu’une solution solide : avoir un bon éditeur de tags id3(v2).

Easytag est un excellent gestionnaire de tags, mais il ne gère pas ceux qui sont nécessaires.

Donc : installer exfalso (l’éditeur de tag en général livré avec le lecteur audio quodlibet),

sous debian/ubuntu : sudo apt-get install exfalso

Et ensuite, il n’y a plus qu’à compléter les tags suivants :

albumartist = Various Artists (ou l’artiste de la compilation, bien sûr)

compilation = 1

Et voila, les compils apparaissent correctement dans xbmc

jeudi 16 juin 2011

Dupliquer des lignes d’un fichier Excel

Imaginons un fichier excel composé de lignes du type :

Col1 Col2 Col3 Col10
Maison Adresse 1 Adresse 2 Chambre, Salon, Cuisine
Appart Adresse 3 Adresse 4  
Bateau Adresse 5 Adresse 6 Salle des machines, Plage

Cet exemple est complètement inutile, mais c’est le principe qui compte : imaginons que nous souhaitons construire des requêtes d’insertion en base, qui permettent d’insérer dans notre exemple, 6 lignes :

Maison Adresse 1 Adresse 2 Chambre
Maison Adresse 1 Adresse 2 Salon
Maison Adresse 1 Adresse 2 Cuisine
Appart Adresse 3 Adresse 4  
Bateau Adresse 5 Adresse 6 Salle des machines
Bateau Adresse 5 Adresse 6 Plage

Voici la macro magique qui va permettre de générer le tableau 2 à partir du tableau 1. Attention, on suppose que les lignes à dupliquer sont celles qui contiennent en colonne 10, des valeurs séparées par des virgules.

Sub gogoJonyGo()
Dim iligne As Integer
iligne = 2
 
 
While Cells(iligne, 1).Value <> "" And iligne < 1000
    
    If InStr(1, Cells(iligne, 10).Value, ",") > 0 Then
    
        ichar = InStr(1, Cells(iligne, 10).Value, ",")
        sgauche = Trim(Left(Cells(iligne, 10).Value, ichar - 1))
        sdroite = Trim(Right(Cells(iligne, 10).Value, Len(Cells(iligne, 10).Value) - ichar))
        Rows(iligne + 1).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Rows(iligne).Select
        Selection.Copy
        Rows(iligne + 1).Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Cells(iligne, 10) = sgauche
        Cells(iligne + 1, 10) = sdroite
    
    End If
    
    iligne = iligne + 1
Wend
   
End Sub

Connexion bureau à distance en plein écran

Lorsqu’on réduit une fenêtre bureau à distance (ou qu’on la redimensionne), lorsqu’on maximise à nouveau la fenêtre, elle ne passe plus en plein écran.

Pour résoudre ce problème, il suffit lorsqu’on est sur le bureau tse, d’appuyer sur Ctrl+Alt+Pause.

Pour les portables Dell comme le mien, Ctrl+Alt+Fn+F12 (pause est sur F12) fonctionne.

Ahhh, ça va mieux!

mercredi 18 mai 2011

Unknown terminal

 

Lors de connexions ssh par l’intermédiaire de screen, certaines moutures de linux ne reconnaissent pas le terminal utilisé.

Cela peut poser problème pour des programmes comme iftop :

output: unknown terminal "screen"
root@gw:~ #iftop
interface:
eth0
IP address is: 10.1.2.2
MAC address is: 00:1c:c0:21:92:7d
Error
opening terminal: screen.


L’application ne tournera pas. Il suffit d’indiquer au shell, que le terminal que nous utilisons n’est pas “screen”, mais vt100 :


root@gw:~ # export TERM=vt100
root@gw:~ # iftop


Et voilà, problème résolu.

mardi 17 mai 2011

Avoir des + ou des–devant des nombres Excel

Dans format cellule et onglet nombre choisis ''personnalisé' dans la liste et mets cecci
[>0] +0,00%;[<0] -0,00%;Standard

jeudi 3 mars 2011

Des touches et des actions… Comment gérer sa télécommande sous linux

Tout simple, mais il est possible de passer longtemps à chercher la réponse sur les forums… Alors pour vous éviter de chercher des heures et des heures pourquoi vous n’arrivez pas à configurer lirc pour votre télécommande, vérifiez déjà cela :

Certaines télécommandes sont directement prises en charge par le noyau (un module) linux, et les boutons sont considérés comme des touches par le serveur X.

Pour le vérifier, arrêtez lircd ( /etc/init.d/lirc stop), et si le volume continue de réagir lorsque vous appuyez sur les touches correspondantes vous êtes dans le cas ci-dessus. Un petit “lsmod | grep ir_” finira de vous convaincre…

A ce stade, deux options : s’acharner à faire fonctionner lirc, ce que je n’ai pas eu le courage de faire, vu le temps déjà perdu à chercher pourquoi il ne marchait pas (mais à priori, lorsque la télécommande est géré par un module ir_xxx les codes des touches ne sont pas les mêmes que dans le cas contraire. Il faut donc les redéfinir dans le bon fichier de conf lirc). Ou prendre l’option d’il y a 20 ans, xmodmap.

Si les touches de la télécommande qui vous intéressent sont reconnues (lancer en terminal xev, et une fois le focus donné à xev, presser les touches concernées, le code de la touche doit apparaitre dans le terminal), il suffit de les définir très simplement : créer un fichier .xmodmap et de “mapper” le code de la touche à l’action désirée… Dans mon cas, je voulais juste qu’une touche de la télécommande fasse comme si l’on appuie sur “Return”, donc tout simplement : keycode 156 = Return

Pour la liste des actions (keysyms) reconnus par xmodmap, vous pouvez aller voir sur linuxquestions.org.

Un peu plus d’explications sur les keysyms et tout ce qui tourne autour, au cas où vous en ayez besoin, peut se trouver sur la documentation ubuntu, par exemple dans l’article configuration d'un clavier multimédia. La manpage de xmodmap est aussi riche en idées (inversion des boutons de la souris, des touches Ctrl/Fn des claviers…)

Mots clés Technorati : ,,,

lundi 21 février 2011

Réplication “temps réel” d’une base Postgresql

 

Objectif

La base de données d’une application est un composant sensible, surtout si l’application est une application métier en production.

De nombreux mécanismes peuvent (et doivent) être mis en place pour garantir une disponibilité de la base de données :

  1. Utilisation de disques en RAID pour prévenir les défaillances matérielles
  2. Sauvegarde (quotidienne) sur support externalisé (et bien sur vérification régulière de la restauration de ces supports)

Ces mécanismes ne sont pas à mon sens suffisants. En effet, si la base de données pour une raison ou une autre, est corrompue, soit les sauvegardes seront corrompues, soit la dernière sauvegarde sera correcte, mais l’on perd alors jusqu’à une journée de données.

Pour améliorer la sécurité, il est ainsi nécessaire de mettre en place un mécanisme de réplication “temps réel” de notre base de données. Ce mécanisme doit permettre de “remonter” la base de données à un moment dans le temps défini. Ainsi, si notre base a été corrompue à 13h05, il sera possible de remonter la base à 13h00, et de ne perdre qu’un minimum d’informations métier.

Ce mécanisme s’appelle “PITR” pour “Point In Time Recovery”.

Avec postgresql, c’est très simple à mettre en oeuvre. Il nécessite toutefois un deuxième serveur de base de données, qui sera prêt à reprendre la main en cas de chute du premier.

Mécanisme

Le mécanisme proposé par postgresql est assez simple : toutes les transactions effectuées sur la base de production sont stockées dans des fichiers de transaction (“pg_xlogs”). Une fois un fichier log rempli, il est envoyé sur le serveur de secours. Le serveur de secours peut être configuré de deux façons différentes : soit il intègre immédiatement les fichiers reçus, soit il ne fait rien et l’intégration est déclenchée manuellement en cas de besoin.

Ainsi la notion de “temps réel” est relative : en cas de crash de la base de données, on ne pourra remonter que jusqu’au dernier fichier de transaction qui a été envoyé au serveur de secours. Les fichiers étant envoyés quand ils sont remplis, on a un délai un peu aléatoire avec les paramètres par défaut. Il est toutefois possible de définir : la taille des fichiers (par défaut 16M), et le temps maximum entre deux créations de fichiers. Ces paramètres ne sont pas détaillés dans ce billet.

Détail de la mise en place

Bien, après toutes ces explications, passons à la mise en oeuvre, c’est plus rapide que d’expliquer les choses :

Serveur de production

Il suffit de dire au serveur de production d’activer l’archivage des fichiers logs de transaction (postgresql.conf) :

# - Archiving -
archive_mode = on
archive_command = 'scp -C %p 10.1.1.241:/data/Rescue/%p'

Comme je choisi de ne pas intégrer régulièrement les fichiers de transaction dans le serveur de secours, il faut ajouter un mécanisme qui va permettre de faire le ménage des fichiers logs sur le serveur de secours. Il faut pour cela, sauvegarder régulièrement la base de données depuis le serveur de production vers le serveur de secours. Cette sauvegarde effectuée, on pourra faire le ménage sur le serveur de secours. Il suffit de créer le petit script suivant qui sera lancé par cron tous les jours sur le serveur de production.

# On informe le serveur de prod que l'on passe en mode backup
echo "SELECT pg_start_backup('
backupPostgres');" | psql -U postgres [base a sauver]
# Sauvegarde de la base vers le serveur de secours
rsync -avzx --delete --exclude '
pg_xlog' /data/db [serveur de secours]:/data
# On informe le serveur de prod que la sauvegarde est terminée
echo "SELECT pg_stop_backup();" | psql -U postgres [base a sauver]
# On lance le nettoyage sur le serveur de secours
ssh [serveur de secours] "/root/bin/nettoyageBackups.sh"


Serveur de secours


Sur le serveur de secours, il n’y a pas grand chose à faire… Il faut juste préparer le script de nettoyage des logs inutiles (appelé par le script précédent) :


# Nettoyage des pg_xlogs plus anciens que le dernier dump de la base
find /data/Rescue/pg_xlog ! -newer `ls /data/Rescue/pg_xlog/*.backup | sort | tail -n 1` ! -name "*.backup" | xargs rm -f


Attention, sur le serveur de secours, postgresql doit être arrêté. En effet, on ne veut pas qu’il intègre au fur et à mesure les fichiers de transaction. Cela permettra de contrôler en cas de crash, jusqu’où les fichiers sont intégrés.


Et maintenant ?


Bien, la sauvegarde est en place, mais en cas de crash que fait-on ?


Serveur de secours


C’est, encore une fois, très très simple : il suffi de démarrer postgresql sur le serveur de secours, en lui disant d’intégrer les fichiers de transaction qui sont en attente.


Pour passer le serveur en mode ‘intégration des fichiers de transactions’ :


# nettoyage vieux pg_xlogs qui pouvaient trainer dans le repertoire de la base
rm -f /data/db/pg_xlog/0000*
# creation du fichier recovery.conf pour que postgres
# demarre en mode recovery
cat >/data/db/recovery.conf <<EOF
restore_command = 'cp /data/Rescue/pg_xlog/%f %p'
EOF

Puis, on redémarre postgresql : /etc/init.d/postresql start

Attention : on ne voit pas que la réintégration est en cours. Pour vérifier que cela fonctionne, il suffit de faire un tail -f /data/db/pg_log/[dernier log du serveur]

Une fois le recovery fini, le fichier "/data/db/recovery.conf" est renommé automatiquement en "/data/db/recovery.done"

Pour arrêter l’intégration des fichiers logs à une certaine heure, il suffit de supprimer (déplacer) les fichiers que l’on ne veut pas intégrer du répertoire /data/Rescue/pg_xlogs


Mots clés Technorati : ,,,

mercredi 16 février 2011

Connexion sécurisée entre deux PC sans mot de passe

 

Lorsqu’on travaille avec plusieurs serveurs linux, il est très pratique de pouvoir se connecter en ssh depuis l’un des serveurs sur les autres sans avoir à saisir son mot de passe.

En mettant de coté cet aspect pour fainéants, il y a d’autres bonnes raisons pour mettre en place cette facilité… Par exemple l’utilisation de screen avec une ouverture automatique d’une fenêtre pour chacun des serveurs majeurs, ou encore (et là ça devient indispensable) que l’on met en place des scripts copiant des fichiers d’un serveur vers un autre.

Bref, voici comment faire en 3 étapes :

Etape 1 Génération d’une paire de clef sur le serveur qui va envoyer les fichiers (ou depuis lequel on veut se connecter sur l’autre serveur)

ssh-keygen -t dsa -b 1024


Renseigner alors les informations



Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): id_dsa
Enter passphrase (empty for no passphrase):(LAISSER VIDE)
Enter same passphrase again:
Your identification has been saved in id_dsa.
Your public key has been saved in id_dsa.pub.
The key fingerprint is:
1d:9a:23:a3:c3:14:42:12:52:54:a4:c6:54:3f:43:23 root@source

 


Etape 2 Copier la clé publique sur le serveur qui va recevoir les fichiers (ou sur lequel on veut se connecter)



ssh-copy-id -i /root/.ssh/id_dsa.pub root@[ip du serveur cible]

Entrer alors le mot de passe root du serveur cible


Etape 3 Oh, j’ai dit 3 étapes? C’est fini! Tester en se connectant à la machine cible :



ssh root@[serveur cible]

Vérifier le fichier .ssh/authorized_keys pour être certain qu’il n’y a que des clefs que nous y avons ajouté…


Ou bien encore tester une copie de fichier :



 
scp -i /root/.ssh/id_dsa /var/log/messages root@cible:/tmp

mardi 15 février 2011

xbmc streamer : erreur “no media found”

Pour ceux qui connaissent xbmc, il existe deux logiciels indispensables pour iPhone (pour ceux qui ne connaissent pas xbmc, tant pis pour vous) :
- xmbc remote : qui permet de piloter xbmc depuis l’iphone
- xbmc streamer : qui permet d’écouter à distance les musiques gérées par xbmc
xbmc streamer est un peu tatillon, et l’erreur “no media found” revient souvent sur les forums… La solution la plus répandue à ce problème est de supprimer le mot de passe d’accès à xbmc.
Mais j’ai rencontré ce problème, et trouvé la solution… nulle part. En regardant un peu les logs de xbmc sur le pc avec xbmc (vim /home/tof/.xbmc/temp/xbmc.log), xbmc recherche le fichier suivant : /usr/share/xbmc/addons/webinterface.default/33f3523d5004501f107fc209902c11b09d9849db-s
Or ce fichier existe dans le répertoire /usr/share/xbmc/web
Un simple
cd /usr/share/xbmc/addons/webinterface.default
ln -s ../../web/33f3523d5004501f107fc209902c11b09d9849db-s .
et le problème est résolu.

De gros caractères en ligne de commande

Il est parfois nécessaire d'avoir un terminal qui tourne avec watch pour surveiller l'avancement d'une tâche.

Par exemple :

watch -n 300 "ls -l *.r* |wc -l"

qui compte le nombre de fichiers avec .r* dans le répertoire courant.

Malheureusement, l'affichage est assez réduit et mon grand âge m'impose de plisser les yeux. Pour éviter les rides, il existe un petit logiciel qui permet de transformer un texte en son équivalent ascii art (donc plus grand) : figlet.

Un petit

watch -n 300 "ls -l *.r* |wc -l | figlet -c"

permet ainsi d'afficher le nombre de fichiers, en grand!


                                   __________
                                  |___ /___ /
                                    |_ \ |_ \
                                   ___) |__) |
                                  |____/____/

Comment générer un nom de fichier avec la date sous dos

Il est parfois nécessaire de générer des fichiers avec une date et une heure, pour sauvegarder un fichier log qui est écrasé à chaque ouverture de session par exemple.

Un petit batch à la fermeture de session permet alors de sauvegarder ce log, et pour que les fichiers ne s'écrasent pas les uns les autres, il faut les nommer différemment.

Par exemple :
copy c:\fcm_api.log c:\temp\fcm_api-%date:/=%-%time:~0,2%h%time:~3,2%m%time:~6,2%s%.log

mercredi 2 février 2011

Scripts de déconnexion ou fermeture de session

1) Via modifications de la BDR :

Script à la fermeture de session :
Clef concernée :
HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts\
Entrée "Logoff" (REG_SZ)

Script à la fermeture de Windows :
Clef concernée :
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System\Scripts\
Entrée "Shutdown" (REG_SZ)

jeudi 20 janvier 2011

Trouver les PCs qui consomment de la bande passante sous Linux

Sur un réseau de plusieurs machines, il est difficile de trouver laquelle consomme de la bande passante au détriment des autres. Rien de plus simple sous Linux :

Dans mon cas, je dispose d'un ipcop qui gère la connexion à internet. Malheureusement sur ipcop, par défaut, les graphes réseau ne montrent que la bande passante totale utilisée. Ce qui est déjà suffisant pour valider qu'un problème de bande passante existe.

Plusieurs méthodes sont utilisables, mais dans mon cas, l'utilisation d'un petit outil (normalement installé en standard sur toutes les distributions linux) : iftop est largement suffisante.

Iftop est un outil en ligne de commande permettant de surveiller les connexions réseaux d'une interface (utilisable en mode promicious -verdi orthographe- ce qui lui permet de monitorer aussi ce qui ne traverse pas l'interface réseau surveillée)

Il suffit de le lancer sans arguments spécifiques pour déjà avoir une vision des connexions en cours et de la bande passante utilisée.

Cela m'a permis d'identifier par exemple lequel des pc de mon réseau consommait toute la bande passante, et vers quel autre pc externe celui-ci envoyait les données.

iftop est donc un petit outil très simple d'utilisation pour rapidement analyser ce qui se passe sur un réseau.

A savoir : si nécessaire, il est capable de filtrer son affichage, en fonction d'une adresse ip source, de destination, d'un port particulier...

Liens :
- Page officielle d'iftop
- Quelques exemples sur planet Ubuntu