jeudi, 29 septembre 2011

Firefox 7 : afficher http et https dans les url

Vous l'aurez certainement remarqué mais dans firefox 7 le http ou https du début des adresses internet... Allez comprendre ... Ceci étant dit pour faire réapparaitre le début de vos adresses voila comment procéder: saisissez dans la barre d'adresse "about:config" passez ensuite la variable

browser.urlbar.trimURLs=false

pour la couleur c'est cette variable qu'il faut modifier

browser.urlbar.formatting.enabled=false

lundi, 6 juin 2011

Gnome et scrot : Capture de zones d'écran

Nous allons voir ici comment ajouter une fonction de capture d'une zone spécifique de l'écran. Pour rappel il est par défaut possible de faire deux type de captures:

  • La touche PrintScreen capture l'intégralité de l'écran
  • la combinaison Alt + PrintScreen capture l'intégralité de la fenêtre présente sous le curseur.

Nous allons ajouter une troisième combinaison de touche, qui nous permettra de sélectionner une zone, à l'aide du curseur de la sourie, délimitant la zone à capturer.

pré-requis

scrot doit être installé. la procédure est pour un environnement gnome. elle est donc à adapter pour d'autres environnements.

Mise en œuvre

Nous allons créer un script contenant les informations suivantes :

~/script$ cat screenshot.sh 
#!/bin/sh 
SCREEN_PATH="$HOME/Screenshot"
DATE=$(date +%Y-%m-%d-%H:%M:%S) 
sleep 1 && scrot -s -b $SCREEN_PATH/screenshot_$DATE.png 
On prend soin de rendre le script executable
~/script$ chmod u+x screenshot.sh

Nous allons ensuite créer un raccourci clavier afin d'utiliser simplement cette fonctionnalité : Système > Préférences > Raccourcis Clavier. On clique sur ajouter scrot_1.png on renseigne ensuite les informations suivantes (à adapter selon votre configuration) scrot_2.png Il ne reste plus qu'à sélectionner la combinaison de touches de votre choix. Pour ma part j'ai choisi la combinaison Ctrl + PrintScreen Je dois dire que je suis assez satisfait du résultat. Il me suffit à présent de taper la combinaison Ctrl + PrintScreen pour sélectionner une zone de l'écran à capturer.
Enjoy !

jeudi, 2 juin 2011

find : optimisation de traitements

On ne fini jamais d'en apprendre sur la merveilleuse commande qu'est find. Aujourd'hui grâce au remarques de jsz', voici ce que j'ai pu constater :

$ time find Bureau/ -type f -exec ls {} >/dev/null \;
real    0m13.386s
user    0m21.149s
sys     0m8.297s
$ time find Bureau/ -type f -exec ls {} >/dev/null +
real    0m0.205s
user    0m0.116s
sys     0m0.088s

la subtilité réside ici dans la façon dont sont traités les occurrences retournées par find. Dans le premier cas les occurrences sont traitées de façon unitaire; ainsi pour n occurrences nous lancerons n fois la commande ls.
Dans le second cas, nous utilisons la capacité de ls à traiter simultanément plusieurs chemins. Ainsi pour n occurrences la commande ls ne sera exécutée qu'une unique fois. il y a concaténation des occurrences pour ne former qu'une unique ligne.
Pour la partie optimisation, et bien les temps de traitement parlent d'eux-même.

vendredi, 20 mai 2011

Firefox : optimisation des bases SQlite

J'entends beaucoup parler d'optimisation de navigateur avec des manipulations plus ou moins pertinentes à effectuer sans que le gains ne soit réellement mesuré. Aujourd'hui je vous propose une optimisation relativement triviale visant à nettoyer les bases SQlite utilisées par Firefox pour y stocker diverses informations.

Les pré-requis:

  • sqlite3 doit être installé
  • Firefox doit être fermé au moment des manipulations, faute de quoi les commandes à venir se solderont par un message vous informant que la base est verrouillée.

Mise en œuvre

les fichiers relatifs au profil utilisateur sont, par défaut, stockés dans le répertoire ~/.mozilla/firefox/*.default/. Nous allons donc optimiser tous les fichiers sqlite présents dans ce répertoire à l'aide de la commande suivante:

$ find ~/.mozilla/firefox/*.default/ -iname "*.sqlite" -exec sqlite3 {} 'VACUUM;' \;

Pour comprendre l'opération effectuée il suffit de se reporter à la documentation sqlite. La directive VACUUM vise à reconstruire dans son intégralité la base sqlite en compactant cette dernière au maximum. Pour le détail des actions effectuées par la commande je vous invite à lire l'excellente présentation de la documentation officielle. http://www.sqlite.org/lang_vacuum.html Voici une présentation de chacun des fichiers sqlite afin de mieux comprendre (Merci Gniarf):
urlclassifier3.sqlite : c'est la base qui est fournie par google pour la fonction anti-malware, ca pèse facilement 23 Mo a la sortie d'une installation. Si la fonctionnalité est désactivé vous n'avez donc pas besoin de stocker cette base.
cookies.sqlite : va contenir l'ensemble des cookies stockés par les différents sites visités.
places.sqlite : contient l'historique des pages visitées donc avec une rétention de 90 jours, ce fichier peut facilement atteindre 20Mo. Vous pouvez trouver une présentation exhaustive de cette base ici.
key3.db : c'est la base de mots de passes enregistrés dans firefox. Cette dernière est chiffrées et ne peut donc être accédée :

sqlite> SELECT name FROM sqlite_master WHERE type = "table";
Error: file is encrypted or is not a database

signons.sqlite : il fonctionne apparemment de paire avec la base key3.db. ce dernier n'est pas chiffré. On peut donc imaginer qu'il est utilisé pour accéder aux informations chiffrées de la base key3.db
downloads.sqlite : contient la liste de téléchargements lancés dans le navigateur.
content-prefs.sqlite : Contient les préférences individuelles appliquées à des pages. ici pour plus de détails le contenu (désolé la page n'était disponible que dans le cache google au moment ou j'écris).
premissions.sqlite : contient l'ensemble des préférences appliquées sur un site. On y liste donc les sites autorisés à utiliser ou non les cookies, ou encore afficher ou non des images.
formhistory : contient l'historique des formulaires saisis dans votre navigateur.
search.sqlite : contient la liste des différents moteurs de recherche intégrés au navigateur.
webappsstore.sqlite : contient les données au format DOM générées par les différents sites. plus de détails ici

Maintenant est-ce vraiment efficace ?

J'ai effectué mes tests sur un navigateur Firefox fraichement installée, je n'ai donc pas observé de changement significatif de performances. Cependant les chiffres parlent d'eux même. Voici donc les variations de taille que j'ai pu observer sur les différents fichiers SQLite une fois le nettoyage des base effectué. Optimisation des bases SQLite Firefox On constate que 3 bases (cookies.sqlite, urlclassifier3.sqlite, places.sqlite) ont fait l'objet d'un sérieux nettoyage et j'avoue avoir été surpris d'un tel gain après un temps si court d'utilisation. J'imagine donc largement à quel point cette optimisation peut s'avérer bénéfique dans le cas d'une utilisation prolongé de Firefox. J'ai entamé un suivi des bases sqlites constitutives du profil, nous pourrons ainsi voir l'évolution de ces dernières dans le temps et générer des jolis graphiques :). Voici donc comme promis un graphique représentant le bénéfice du compactage des bases dans le temps. compactage de base sqlite pour la version en taille originale vous pouvez la trouver ici

Liens connexes

mercredi, 24 novembre 2010

Pidgin : le certificat omega.contacts.msn.com n est plus valide

SI vous aussi votre client pidgin se plaint d'une erreur de certificat au moment de la connexion à votre compte de messagerie hotmail; il vous suffit simplement de récupérer le nouveau certificat en vigueur. Pour se faire rien de plus simple. Ouvrez un terminal et tapez simplement la commande suivante:

wget "http://files.andreineculau.com/projects/pidgin/omega.contacts.msn.com.txt" -O ~/.purple/certificates/x509/tls_peers/omega.contacts.msn.com

J'ai péché l'info ici quand même. Merci à l'auteur pour le tip.

vendredi, 15 octobre 2010

UCI : l'Interface de Configuration Unifié d'OpenWrt

Voila un outil qu'il est sympathique. En effet UCI est un outil en ligne de commande permettant de facilement configurer votre système OpenWrt. Voici quelques exemples de configuration, libre à vous de parcourir les documentations existantes pour trouver votre bonheur.

Configuration du serveur DNS pour les clients DHCP:

Mon service DNS étant hébergé sur une autre machine que le routeur OpenWrt, il est nécessaire que les clients récupère l'adresse du service DNS afin de pouvoir l'interroger.
Nous allons donc fixer le DNS primaire et secondaire pour l'ensemble des clients DHCP de la zone lan.

root@OpenWrt:~# uci add_list dhcp.lan.dhcp_option="6,192.168.10.254,192.168.10.1"

s'agissant d'une liste de paramètres, on utilise la directive add_list. Enfin pour les options DHCP il suffit de se repporter à la RFC relative à DHCP : 2132 ainsi qu'aux options disponibles dans dnsmasq. on applique ensuite notre nouvelle configuration

root@OpenWrt:~# uci commit dhcp

Puis on vérifie

root@OpenWrt:~# uci show dhcp.lan
dhcp.lan=dhcp
dhcp.lan.interface=lan
dhcp.lan.start=100
dhcp.lan.limit=150
dhcp.lan.leasetime=12h
dhcp.lan.dhcp_option=6,192.168.10.254,192.168.10.1

Il ne nous reste donc plus qu'à relancer le service DHCP pour que la nouvelle configuration soit appliquée:

root@OpenWrt:~# /etc/init.d/dnsmasq restart

Configuration du hostname. Par défaut il est défini à "OpenWrt" Nous allons donc parcourir la configuration à la recherche de cette occurrence:

root@OpenWrt:~# uci show | grep OpenWrt
--luci.themes.OpenWrt=/luci-static/openwrt.org--  <--- correspond au thème graphique nommé  "OpenWrt" et disponible dans Luci 
system.@system[0].hostname=OpenWrt  <--- correspond au nom de l'hôte
uhttpd.px5g.commonname=OpenWrt  <--- correspond au Common Name utilisé lors de la génération du certificat SSL
root@OpenWrt:~#

Nous allons donc éditer les deux variables ainsi:

root@OpenWrt:~# uci set system.cfg02f02f.hostname=courgette
root@OpenWrt:~# uci set uhttpd.px5g.commonname=courgette
root@OpenWrt:~# uci commit dhcp

Et voila le tour est joué Je vous encourage à parcourir la documentation disponible sur cet outil fort sympatique.

Liens connexes:

mercredi, 22 septembre 2010

LVM : migration de données ou comment remplacer un disque defectueux

Voila déjà quelques temps que j'utilise LVM pour gérer mes volumes de stockage.

Extrêmement flexible ce système permet de grandir "à la demande" soit avec l'ajout de volume physique, soit avec la simple allocation d'espace disque supplémentaire.

Nous allons aujourd'hui voir comment migrer des données avec la couche LVM.

Le plan:

J'ai récemment fais l'acquisition d'un NAS Synology DS1010+ offrant, entre autre, la possibilité de publier des volumes via iSCSI. L'idée est donc de déporté tout les volumes de stockage depuis les disques locaux de mon serveur vers le NAS. De la sorte les volumes présents sur mon serveur pourront bénéficier des performances et tolérance de panne offertes par le NAS.

J'ai donc utilisé LVM pour migrer tout ce beau monde.

L'action

je passe sur la configuration du volume iSCSI que j'ai déjà évoqué dans un article précédent. Une fois le volume iSCSI présenté au serveur le reste des action est relativement simple.

Dans un premier temps nous ajoutons le nouveau volume, /dev/sdb dans mon cas, au système LVM

routeur ~ # pvcreate /dev/sdb

On l'ajoute ensuite au VG à migrer

routeur ~ # vgextend shares /dev/sdb

On vérifie

routeur ~ # pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/hdb1  shares lvm2 a-   186,30g      0
  /dev/hdc1  shares lvm2 a-   233,75g      0 
  /dev/sdb   shares lvm2 a-   300,00g 300,00g

On migre ensuite les données d'un PV vers un autre: Attention; pour une migration des données en cours d'utilisation, allez faire un tour dans le man. Pour ma part j'ai démonté les partitions avant l'action.

routeur ~ # pvmove /dev/hdb1 /dev/sdb

l'action est relativement longue selon la quantité de données à migrer.

On observe à présent que l'ensemble du volume /deb/hdb1 est libre.

routeur ~ # pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/hdb1  shares lvm2 a-   186,30g 186,30g
  /dev/hdc1  shares lvm2 a-   233,75g      0 
  /dev/sdb   shares lvm2 a-   300,00g 113,75g

On peut à présent le sortir du Volume Group auquel il appartient

routeur ~ # vgreduce shares /dev/hdb1
  Removed "/dev/hdb1" from volume group "shares"

Pour ensuite le liberer totallement du système LVM

routeur ~ # pvremove /dev/hdb1
  Labels on physical volume "/dev/hdb1" successfully wiped

On observe à présent que le volume ne fait plus partie des volumes disponible et peut donc être retiré du serveur en toute tranquillité.

routeur ~ # pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/hdc1  shares lvm2 a-   233,75g      0 
  /dev/sdb   shares lvm2 a-   300,00g 113,75g

Pour information, J'ai entendu, sans le tester, que la même chose se fait avec lvconvert en utilisant la notion de miroir.

mardi, 21 septembre 2010

Recyclage Flasher sa NeufBox 4 avec OpenWRT

En faisant du ménage je suis tombé sur un vestige de mon ancien abonnement internet. Une jolie NeufBox toute fonctionnelle mais qui n'offrait pas de grandes possibilités en terme de configuration.

"Ce serait vachement bien si je pouvais installer Linux dessus pour exploiter pleinement la bête".

Et après quelques recherches je tombe sur la perle ! Ce site merveilleux qu'est http://www.neufbox4.org/, traite exactement de ce que je souhaite faire.

Je vous invite à parcourir ce dernier ou vous trouverez de nombreuses informations utiles pour les manipulations à venir.

Ayant déjà eu à faire à des image d'équipements réseau à installer par différents moyens comme TFTP, Console et autre, je décidais d'utiliser la méthode via CFE. Cette méthode est en effet, à mes yeux, la plus simple et facile à mettre en œuvre, et offrant l'avantage majeur de pouvoir effectuer des retours en cas de plantage.

Premier frein: il faut un câble spécifique pour se connecter au port série, pas facile à trouver dans le commerce. pour ma part j'ai choisi le R232-3V3 qui est extrêmement pratique et pourra être utilisé sur d'autres équipements par la suite (selon les dires d'Obinou :)).

Une fois le câble acquis il a fallu jouer un peu du fer à souder pour ajouter les connecteurs du port console qui sont obstrués par le fabriquant. Toute les informations relatives à la gestion du port série sont disponibles ici:

http://www.neufbox4.org/wiki/index.php?title=Port_s%C3%A9rie

Mon choix s'est ensuite porté sur OpenWRT qui est un projet relativement abouti et dont l'objectif est d'offrir une solution libre de système d'exploitation d'équipements réseau.

voici les informations pour la compilation du bousin.

http://www.neufbox4.org/wiki/index.php?title=OpenWrt.

une fois l'image compilé avec les options qui vont bien, il ne reste plus qu'à flasher la Neufbox4 via TFTP

L'opération terminée, la Box reboot toute seule et charge openWRT.

Voila votre box est à présent libéré et ne demande plus qu'à chanter !!

Nous verrons dans des prochains articles les possibilités de notre nouvelle NeufBoxRemix :)

  • Installation d'une interface Web d'administration
  • Mise en oeuvre d'une DMZ
  • Déploiement d'un outil de monitoring et de statistiques

Un grand grand (grand, grand,... ) merci à Obinou, créateur du projet, et dont la disponibilité et la générosité, m'ont permis de mener à bien cette petite bidouille.

Liens connexes:

vendredi, 30 juillet 2010

SFG HADOPI disponibles

Les voici disponibles ! Je n'irais pas jusqu'à dire qu'on les attendait, mais j'étais tout de même bien curieux devoir comment HADOPI allait être appliqué. Vous trouverez donc ici les [Spécification Fonctionnelles Hadopi|/public/35088715-docprojet-SFH.pdf]

jeudi, 22 juillet 2010

iSCSI

Au cours de cet article nous allons voir comment mettre en œuvre iSCSI. Ce protocole permet la publication de périphériques à travers un réseau IP. L'objet est ici de publier à travers le réseau des volumes qui seront ensuite utilisés comme espace de stockage. La distribution utilisée est ici une Gentoo, il sera donc éventuellement nécessaire d'adapter quelques points si vous utilisez une distribution différente.

Lire la suite...

mercredi, 12 mai 2010

SSVNC : VNC avec support SSH

Voila quelques temps que j'utilisais mon serveur SSH pour faire passer un peu tout et n'importe quoi à travers un flux chiffré. Pour le cas des sessions VNC (comme présenté dans un article précédent) l'action était quelque peu laborieuse car necessitant la redirection port par port.

C'est donc avec plaisir que je suis tombé aujourd'hui sur ce merveilleux utilitaire; j'ai nommé SSVNC. Il s'agit d'un client VNC supportant des configurations telles que les proxies HTTP/SOCKS4 et SOCKS5. Je vous laisse donc imaginer toutes les choses merveilleuses que l'on peut faire avec.

à titre d'exemple voici la configuration à mettre en oeuvre pour un usage via un proxy socks5:

  • dans le champ VNC Host:Display; saisissez l'adresse de la machine que vous souhaitez contacter.
  • dans le champs proxy gateway; saisissez l'adresse du proxy à utiliser.

S'agissant d'un proxy socks5 et au regard de la documentation fournie la ligne à saisir est la suivante:

socks5://127.0.0.1:1080

Il faut ensuite décocher l'option :

None

Voila en espérant avoir pu vous apprendre un p'tit truc sympa, enjoy !

Liens connexes

mercredi, 21 avril 2010

L'Internet: Suivez le Guide !

Benjamin Bayart, Président du plus ancien Fournisseur d'accès(Associatif) FDN s'est, au cours de nombreuses conférences, exprimé sur les craintes, enjeux ou encore l'avenir d'internet en France.

Lire la suite...

vendredi, 16 avril 2010

Xorg 1.8 et drivers Nvidia 195.36.15

A l'heure ou j'écris ce billet, je viens tout juste de migrer vers la version 1.8 de Xorg et j'ai rencontré quelques petits soucis. Voici donc la configuration fonctionnelle chez moi.

Noyau : 2.6.33-gentoo

Xorg-server : 1.8

NVidia-drivers : 195.36.15

Dans le fichier /etc/X11/xorg.conf, ajouter la ligne suivante dans la section ServerFlags (Merci Rosiel ;))

Option "IgnoreABI" "On"

Actuellement aucun pilote propriétaire NVidia n'est disponible pour xorg-server-1.8

flopc ~ # emerge -pv nvidia-drivers

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild     UD] x11-apps/xinit-1.2.1 [1.2.1-r1] USE="minimal pam -debug" 0 kB
[ebuild     UD] x11-base/xorg-server-1.7.6 [1.8.0] USE="nptl sdl%* xorg -debug% -dmx -hal -ipv6 -kdrive -minimal -tslib (-doc%*) (-static-libs%) (-udev%*)" 0 kB
[ebuild   R   ] x11-drivers/nvidia-drivers-195.36.15  USE="acpi gtk -custom-cflags (-multilib)" 0 kB

Total: 3 packages (2 downgrades, 1 reinstall), Size of downloads: 0 kB
flopc ~ #

Il faut donc éditer l'ebuild afin de supprimer la dépendance gênante et remplacer la ligne <x11-base/xorg-server-1.7.99 par <x11-base/xorg-server-1.9.

flopc ~ # sed -i -e 's/1.7.99/1.9/' /usr/portage/x11-drivers/nvidia-drivers/nvidia-drivers-195.36.15.ebuild

On reconstruit l'empreinte de l'ebuild modifié:

flopc ~ #ebuild /usr/portage/x11-drivers/nvidia-drivers/nvidia-drivers-195.36.15.ebuild digest
>>> Creating Manifest for /usr/portage/x11-drivers/nvidia-drivers
flopc ~ #

Sans cela, chaque nouvelle compilation de votre pilote nvidia (du moins pour la version 195.36.15) forcera un downgrade de votre serveur graphique. Voila à présent le problème de dépendance résolut. Enjoy

flopc ~ # emerge -pv nvidia-drivers
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] x11-drivers/nvidia-drivers-195.36.15  USE="acpi gtk -custom-cflags (-multilib)" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB
flopc ~ #

mercredi, 31 mars 2010

Synchronisation de l'heure

Plutôt un mémo qu'autre chose étant donné que l'information traîne partout sur le net; voici comment synchroniser votre machine avec un serveur de temps. La configuration du temps sur une machine se fait à deux niveaux:

  • Le niveau système
  • Le niveau matériel

Synchronisation au coup par coup

Voyons à présent comment mettre rapidement à jour notre machine.

1ère méthode

la commande ntpdate vise à synchroniser l'heure système. La syntaxe est ainsi:

flopc ~ # ntpdate unserveur.de.temps.com

Vous trouverez ici une liste de serveur de temps français http://www.cru.fr/services/ntp/serveurs_francais

La commande hwclock quand à elle, permet de fixer l'heure système. La syntaxe est :

flopc ~ # hwclock --systohc

Cette commande vise à synchroniser l'heure matérielle sur l'heure système que nous venons tout juste de mettre à jour. Voila, votre machine est à présent synchronisée.

2ème méthode

Je place en deuxième position cette méthode car je ne suis pas parvenu à trouver la commande sous Ubuntu par exemple voici donc la méthode de faignant qui regroupe les deux actions en une seule commande :-)

flopc ~ # ntpclockset unserveur.de.temps.com

exmple:

flopc ~ # ntpclockset 192.168.10.1
>>> Current clock sync:
before: 2010-03-31 22:43:40.040632000000000000
after:  2010-03-31 22:43:40.072847596892498433

>>> Now setting clock ...   [ok]
>>> Writing time to hardware clock ...   [ok]

>>> New clock sync:
before: 2010-03-31 22:43:42.515547000000000000
after:  2010-03-31 22:43:42.515603280360944568
flopc ~ # 

Synchronisation au quotidien

C'est bien joli tout ça mais on envisage mal aller régulièrement sur le serveur pour effectuer la synchronisation. c'est maintenant qu'entre en jeu le daemon ntp, j'ai nommé ntpd. Cette méthode est bien évidement la plus pratique et recommandée à mettre en œuvre.

Il vous suffira donc d'installer le package correspondant à votre distribution. D'une manière générale j'ai pu observer que les installations par défaut définissaient des serveurs de temps à interroger. La configuration du serveur de temps est définie dans le fichier ntp.conf dans le répertoire /etc. C'est dan ce même fichier que vous allez préciser les serveurs de temps que votre client devra interroger afin de se synchroniser.

Si le fonctionnement du protocole NTP ainsi que la mise en œuvre de son architecture vous intéresse, je ne peux que vous conseiller l'excellent article présentant ce dernier sur Wikipédia.

Liens connexes:

jeudi, 5 novembre 2009

Google Wave : l'outil collaboratif de google

Juste un petit passage histoire de vous présenter la nouvelle solution de google fraichement sortie, j'ai nommé Google wave. N'ayant pu pour le moment le tester car dans l'attente d'une activation de compte je vous encourage à regarder la vidéo de présentation de cet outil.

Dans les grandes lignes il s'agit d'une solution regroupant une nouvelle forme de messagerie (un mix entre messagerie instantanée, mail, et forum), des outils de travail collaboratif et de partages de données.

Pour le moment les inscriptions ne se font que sur le bon vieux principe des invitations ( et ces dernières sont extremement rares...).

Cerise sur le gateau de cet outil : c'est Open Source ! il vous sera donc possible d'installer sur votre serveur personnel Google wave.

Sans plus attendre voici donc la vidéo de présentation de la bête: Google Wave Preview At Google I/O 2009

samedi, 5 septembre 2009

[Oracle] Verifier état d'un utilisateur

Je dois souvent vérifier l'état d'un compte utilisateur posant problème sur des bases Oracle. Il faut donc vérifier le statut du compte au cas ou le compte serait bloqué ou encore mal configuré.

Lire la suite...

vendredi, 4 septembre 2009

Convertir WMA vers OGG

J'ai retrouvé, il y a peu, quelques vestiges de ma (lointaine) époque sous Windows: des répertoires entiers remplis de fichiers WMA.

J'ai donc entrepris de réaliser un script me permettant d'encoder rapidement tout ça et d'en faire des fichiers au format ogg. Comme vous allez le voir dans le script il faut procéder en deux étapes et encoder le fichier une première fois en wav pour ensuite convertir ce même fichier au format final ogg.

Voici donc ce que j'ai utilisé pour réaliser cette opération.

#!/bin/sh
start_script=$(date +'%T')
###
# On récupère le chemin
###
PATH_DIR="$1"
CHECK="" 
###
# Au besoin on ajoute un / a la fin du chemin fourni
###
if [ -d ${PATH_DIR} ] && [ -z $(echo ${PATH_DIR} | grep -e '/$') ]
then 
	PATH_DIR=$1"/"
fi
 
function usage() {
echo "
$0 /path/dir/[file.wma]
$0 doit etre suivi d'un fichier ou repertoire contenant les fichiers wma à convertir
"
}
 
###
#On verifie les arguments passés aux script
###
if [[ $# -lt 1 ]]
	then
	echo "argument manquant"
	usage
	exit 1
fi
 
###
# On vérifie le chemin mentionné
###
 
 
if [ ! -f "${PATH_DIR}" ] && [ ! -d "${PATH_DIR}" ]
	then
	echo "Le chemin spécifié n'existe pas"
	exit 1
fi
 
###
# On génère la liste des fichiers à encoder
###
 
find "${PATH_DIR}" -iname "*.wma" | sed -e 's/^\.\///g' > $PATH_DIR"files_list"
 
###
# On récupère le nombre de fichiers à encoder
###
file_total=$(awk 'END { print NR }' "${PATH_DIR}"files_list)
 
 
###
# Pour chaque fichier wma trouvé
###
 
while [[ i -lt $file_total ]]
do
	echo ""
	((i++))
	file_name=$(awk 'NR=='$i'{print $0}' "${PATH_DIR}"files_list)
	start_file=$(date +'%T')
	echo "echo 'extraction du fichier source'; mplayer -vo null -ao pcm:file=\""$file_name".wav\" \""$file_name"\" 1>/dev/null; echo 'OK'" | sh
	echo "echo 'conversion au format OGG'; oggenc -q  5 -o \"$(echo ${file_name} | cut -d. -f1).ogg\" \""$file_name".wav\" 2>/dev/null; echo 'OK'" | sh
 
###
# Suppression du fichier temporaire
###
	rm -f "$file_name".wav
	end_file=$(date +'%T')
	diffSec=$(( $(date --date $end_file +%s) - $(date --date $start_file +%s) ))
	echo "fichier extrait : $(echo ${file_name} | cut -d. -f1).ogg"
	echo "durée de l'encodage : "$((diffSec%60))sec
done
 
end_script=$(date +'%T')
###
# Bilan de l'action
###
diffSec=$(( $(date --date $end_script +%s) - $(date --date $start_script +%s) ))
echo " durée du traitement : "$((diffSec/60))"min"$((diffSec%60))sec
echo "nombre de fichiers convertis : "$file_total
 
 
rm -f $PATH_DIR"files_list"

Voila; le script est relativement commenté; et certainement perfectible. pour ma part j'ai rencontré un bug pour les fichiers dont le nom comporte plus d'un espace consécutif( " "). il est largement envisageable de rajouter une fonction visant a renommer les fichiers posant problèmes et supprimer les esapces en trop.

En éspérant que ça puisse aider/inspirer des gens.

Très Cordialement :)

samedi, 15 août 2009

[ Irssi ] ajouter une fenetre de notification

Utilisant irssi couplé avec screen pour ne pas manquer une miette du monde merveilleux de l'IRC :-); j'ai cherché un moyen d'améliorer la notification présente par défaut. Voici la solution que j'ai retenu.

il vous suffit de récupérer le script hilightwin.pl et de le copier dans le répertoire ~/.irssi/script/autorun/ de votre compte utilisateur.

Afin d'activer le script au démarrage de votre client tapez la commande suivante:

/run autorun/hilightwin.pl

voila à présent le script lancé. Ne reste plus qu'à créer la fenêtre dans laquelle seront affichées les notifications. Pour ce faire :

/window new split
/window name hilight
/window size 6

ça c'est fait. On définit enfin les occurrences qui déclencheront l'affichage dans la fenêtre (votre login par exemple)

/hilight flo|va-nu-pied

voila; à présent; dès que quelqu'un prononcera le mot que vous aurez défini dans une des fenêtres de votre client irssi; celle-ci apparaîtra automatiquement dans la partie supérieure de votre navigateur.

Liens connexes:

http://quadpoint.org/articles/irssi#hilight_window

mardi, 4 août 2009

[awk] parser /etc/services

Je cherchais un moyen de mettre en forme un script qui interrogeais mon fichier /etc/services voila donc une petite ébauche. Ce script utilise la commande awk d'une façon primaire mais introduit une syntaxe relativement pratique au quotidien.
on distingue, dans notre cas, deux parties. La première délimitée par des // contient une occurrence que nous cherchons. il est à noter que ce champ supporte les expressions régulières et est donc hautement configurable en fonction de votre besoin.
La deuxième partie de la commande permet de mettre en forme la sortie de la commande.
Maintenant que nous avons vu un peu comment était constitué la sytanxe de la commande awk passons au script.

#!/bin/sh
 
# emplacement du fichier services
FILE="/etc/services"
 
# numéro du port ou nom du service
PORTNUMBER="$1"
 
awk '/\t'$1'\/|^'$1'/{print "service = "$1; print "port/type = "$2;$1 = "";$2 = "";print "Description = "$0;print ""}' $FILE

me reste a régler quelques petits truc mais ça fonctionne plutôt bien :

flopc sh # ./services_parser.sh ssh
service = ssh
port/type = 22/tcp
Description =   # SSH Remote Login Protocol

service = ssh
port/type = 22/udp
Description =  

flopc sh # ./services_parser.sh 21 
service = ftp
port/type = 21/tcp
Description =   # File Transfer [Control]

service = ftp
port/type = 21/udp
Description =   fsp fspd

Il est bien sûr évident que ceci ne constitue qu'une infime partie de la puissance d'awk qui est à lui seul un véritable langage de développement. En espérant que ce petit aperçu vous aura donné envie d'approfondir la connaissance de ce merveilleux outil.

liens connexes:

http://www.linux-pour-lesnuls.com/gawk.php
http://www.waterproof.fr/products/PHPEdit/manual/fr/module.FindRegExp.html
http://www.wagoneers.com/UNIX/AWK/awk.html
http://www.info.univ-angers.fr/aides/tutawk.html

mercredi, 29 juillet 2009

[ OpenOffice ] Supprimer le verrou sur un fichier

Présentation

Voila que j'arrive tranquillement pour ouvrir mon document odt pour y ajouter du contenu et OpenOffice me dit que mon fichier est déjà utilisé par un utilisateur : moi.après quelques recherches; il suffit simplement de supprimer le fichier correspondant au lock posé sur le fichier et remnté par OpenOffice.

Exemple :

florent@flopc ~ $ ls -la /media/disk/
-rwxr-xr-x  1 florent root    88 Jul 26 18:47 .~lock.test.odt#
-rwxr-xr-x  1 florent root 48627 Jul 29 05:16 test.odt

ce fichier contient les informations relative à la personne ayant ouvert le document comme vous pouvez le voir

florent@flopc ~ $ cat /media/disk/~lock.test.odt#
,florent,localhost,29.07.2009 05:37,file:///home/florent/.ooo3;
florent@flopc ~ $

il suffit donc simplement de supprimer le fichier lock et le tour est joué !

florent@flopc ~ $ rm -f /media/disk/~lock.test.odt#

Et voila vous pouvez à nouveau ouvrir votre document en écriture !

- page 2 de 5 -