windows-xp-logo

Windows XP arrive à expiration : sauvegarder l’activation pour une future (ré-)installation

Windows XP expire le 8 avril 2014

windows-xp-logo

Si vous êtes encore sous Windows XP, vous devez savoir que le support de ce système d’exploitation arrivera à son terme le 8 avril 2014.

Après cette date, il ne sera plus possible d’activer l’OS depuis les serveurs de Microsoft donc il va falloir sauvegarder votre activation du système en lieu sûr.

Sauvegarde de l’activation Windows XP

Il vous suffit de :

1. copier le fichier C:\Windows\System32\wpa.dbl en lieu sûr;

2. à la réinstallation suivante de Windows XP, redémarrer en Mode sans échec (F8 au démarrage);

3. renommer le fichier C:\Windows\System32\wpa.dbl créé par la nouvelle activation en wpa.dbl.bak

4. copier enfin le fichier d’activation que vous aviez sauvegardé dans C:\Windows\System32\

Et voilà, vous pourrez réinstaller XP sans passer par les serveurs d’activation de Microsoft.

Windows XP, sorti en 2001, aura eu une durée de vie de 13 ans, ce qui n’est vraiment pas négligeable pour un système d’exploitation.

Il aura été pour moi le Windows de référence avant que je ne passe sur du tout Linux.

PHP : résoudre l'erreur "Redefining already defined constructor for class ..." photo

OVH : activez PHP-FPM sur votre hébergement

OVH est en pleine implémentation du module PHP-FPM sur ses offres, (et ici dans leur guide), ce qui permettrait selon la team OVH “d’accélérer les temps de réponses de PHP et d’obtenir des performances jusque 7 fois plus rapides dans nos labos par rapport au moteur actuel”.

Activation de PHP-FPM

Pour activer ce mode sur votre offre, il suffit de créer un fichier .ovhconfig à la racine de l’arborescence FTP, dans le dossier parent du répertoire /www.

Si vous souhaitez activez PHP 7, voici ce que doit contenir votre .ovhconfig:

app.engine=php
app.engine.version=7.0
http.firewall=none
environment=production

Si vous souhaitez activez PHP 5.6, voici ce que doit contenir votre .ovhconfig:

app.engine=php
app.engine.version=5.6
http.firewall=none
environment=production

Lire la suite

WordPress : récupérer la liste emails des membres et commentateurs photo

WordPress : afficher la date en français dans le thème (sans utiliser le pack de langue ou setlocale())

Wordpress icon

Cela fait des années que j’utilise le même thème graphique pour mon site et je n’ai jamais vraiment pris le temps de traduire la date de publication ou de mise à jour des articles en français.

Le tutoriel qui suit ne s’adresse qu’à un cercle réduit de développeurs : il est évidemment bien plus aisé d’installer WordPress en français (avec le langage pack qui convient) ou d’utiliser la fonction PHP setlocale() comme je l’avais fait précédemment avec WP-Date FR.

Dans mon cas bien précis, je n’ai pas accès aux locales étant donné que le serveur est installé en anglais.

Je ne souhaite pas non plus installer la locale française, qui serait alors ajoutée à tous mes paquets Debian.

Et je ne souhaite pas non plus utiliser la traduction française de WordPress. It’s coding time !

La fonction sky_date_french()

Vous pouvez placer cette fonction dans le fichier functions.php de votre thème :

/*
|-----------------------------------------------------------------------
| Sky Date in French by Matt - www.skyminds.net
|-----------------------------------------------------------------------
|
| Returns or echoes the date in French format (dd/mm/YYYY) for WordPress themes.
|
*/
function sky_date_french($format, $timestamp = null, $echo = null) {
	$param_D = array('', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim');
	$param_l = array('', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
	$param_F = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
	$param_M = array('', 'Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jun', 'Jul', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc');
	$return = '';
	if(is_null($timestamp)) { $timestamp = mktime(); }
	for($i = 0, $len = strlen($format); $i < $len; $i++) {
		switch($format[$i]) {
			case '\\' : // fix.slashes
				$i++;
				$return .= isset($format[$i]) ? $format[$i] : '';
				break;
			case 'D' :
				$return .= $param_D[date('N', $timestamp)];
				break;
			case 'l' :
				$return .= $param_l[date('N', $timestamp)];
				break;
			case 'F' :
				$return .= $param_F[date('n', $timestamp)];
				break;
			case 'M' :
				$return .= $param_M[date('n', $timestamp)];
				break;
			default :
				$return .= date($format[$i], $timestamp);
				break;
		}
	}
	if(is_null($echo)) { return $return;} else { echo $return;}
}Code language: PHP (php)

Lire la suite

Webm, MPEG4, mp4, banner

Linux: convertir une video MPEG4 (mp4) au format Webm

Aujourd’hui, si veut publier une vidéo sur Internet qui soit lisible sur quasiment toutes les plateformes nativement, il peut être très intéressant d’utiliser le format WebM (proposé pour HTML5).

WebM est un format multimédia ouvert basé sur un conteneur dérivé de Matroska, qui regroupe des flux vidéos encodés en VP8 et des flux audios encodés en Vorbis1. Ce format fait partie des formats vidéos proposés pour la balise video de HTML5.

Après avoir encodé nos vidéos H.264 (MP4) avec qt-faststart pour la lecture progressive, nous allons désormais proposer deux formats de vidéo lorsque nous intégrerons nos propres vidéos : le MP4 (format propriétaire) et le WebM (format libéré) pour un accès universel sur toutes les plateformes.

Encoder une seule vidéo MP4 en WebM

Il suffit d’utiliser avconv comme ceci :

avconv -i example.mp4 example.webmCode language: CSS (css)

ce qui nous donne comme résultat :

avconv version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
  built on Apr  2 2013 17:02:36 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'example.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2013-09-24 10:52:45
  Duration: 00:43:27.39, start: 0.000000, bitrate: 294 kb/s
    Stream #0.0(eng): Video: h264 (Main), yuv420p, 320x240, 217 kb/s, 14.97 fps, 14.97 tbr, 2500 tbn, 5k tbc
    Metadata:
      creation_time   : 2013-09-24 11:23:01
    Stream #0.1(eng): Audio: aac, 32000 Hz, stereo, s16, 73 kb/s
    Metadata:
      creation_time   : 2013-09-24 11:23:01
[buffer @ 0x183ec80] w:320 h:240 pixfmt:yuv420p
[libvpx @ 0x183a4c0] v1.0.0
Output #0, webm, to 'example.webm':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: mp42avc1
    creation_time   : 2013-09-24 10:52:45
    encoder         : Lavf53.21.1
    Stream #0.0(eng): Video: libvpx, yuv420p, 320x240, q=-1--1, 200 kb/s, 1k tbn, 14.97 tbc
    Metadata:
      creation_time   : 2013-09-24 11:23:01
    Stream #0.1(eng): Audio: libvorbis, 32000 Hz, stereo, s16
    Metadata:
      creation_time   : 2013-09-24 11:23:01
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libvpx)
  Stream #0:1 -> #0:1 (aac -> libvorbis)
Press ctrl-c to stop encoding
frame=39032 fps= 39 q=0.0 Lsize=   86385kB time=2607.34 bitrate= 271.4kbits/s    
video:63500kB audio:21841kB global headers:4kB muxing overhead 1.217530%Code language: PHP (php)

Cela prend un peu de temps suivant la taille du fichier mais c’est assez simple.

Encoder toutes les vidéos d’un dossier en Webm

Allez, plus efficace : voyons maintenant comment nous pouvons traiter tout un lot de fichiers. Nous allons encoder tous les fichiers MP4 d’un dossier pour faire des fichiers WebM.

Tout d’abord, on exporte la liste des fichiers à traiter dans un fichier nommé list :

ls -1 *.mp4 | sed -e 's:\.[^./]*$::' > listCode language: PHP (php)

La commande sed nous permet ici de récupérer la liste des fichiers tout en omettant l’extension des fichiers.

Ensuite, on lance une boucle qui convertit chaque fichier au format WebM :

for i in `cat list`; do avconv -i "$i".mp4 "$i".webm ; doneCode language: JavaScript (javascript)

Et voilà! Simple et efficace.

BIND9 : supprimer le message "success resolving after reducing the advertised EDNS UDP packet size to 512 octets" des logs photo

BIND9 : supprimer le message “success resolving after reducing the advertised EDNS UDP packet size to 512 octets” des logs

Encore un autre message de mes fichiers logs, trouvé dans /var/log/daemon.log:

named: success resolving DOMAIN after reducing the advertised EDNS UDP packet size to 512 octets
named: success resolving DOMAIN after disabling EDNSCode language: HTTP (http)

BIND envoie des requêtes EDNS, meme si DNSSEC n’est pas activé. Or il suffit qu’un équipement sur la route refuse les paquets UDP de plus de 512 octets pour que cela couine.

La solution est toute simple, il suffit d’éditer le fichier /etc/bind/named.conf.options :

nano /etc/bind/named.conf.options

et d’y ajouter :

logging {
category lame-servers {null; };
category edns-disabled { null; };
};Code language: JavaScript (javascript)

Et pour finir, on enregistre les modifications et on redémarre BIND :

/etc/init.d/bind9 restart

Et voilà, plus de messages de ce type dans les logs.

Ubuntu : résoudre l'erreur "mount: unknown filesystem type exfat" photo

Ubuntu : résoudre l’erreur “mount: unknown filesystem type exfat”

La semaine dernière, mon amie a branché son disque dur chez moi. Surprise : le disque n’était pas reconnu (et c’est bien la première fois que je vois cela sous Ubuntu) et nous avons eu droit à une fenêtre de dialogue avec l’erreur suivante :

Unable to mount XX GB Filesystem
Error mounting: mount: unknown filesystem type 'exfat'Code language: JavaScript (javascript)

Solution: installer les paquets pour Exfat

Si cela vous arrive, il suffit d’installer le support ExFat sous Ubuntu.

ExFAT appelé aussi (FAT 64), est un nouveau système de fichier développé par Microsoft, qui a pour vocation d’être utilisé sur des périphériques externes comme les clé USB, les cartes SD et les disques durs externes.

Sa particularité est de permettre de stocker des fichiers de plus de 4 Go. En revanche, c’est un format propriétaire et donc non-libre.

Exfat pour Ubuntu 13.10+

Exfat fait désormais partie des paquets de base d’Ubuntu depuis la version 13.10 donc on peut l’installer avec un simple:

apt install exfat-fuse exfat-utils

Exfat pour Ubuntu 13.04 et versions inférieures

Il suffit d’ajouter un nouveau dépôt et d’installer les paquets fuse-exfat et exfat-utils :

sudo apt-add-repository ppa:relan/exfat
sudo apt update
sudo apt install fuse-exfat exfat-utils

Et voilà, disque reconnu !

Postfix : résoudre l'erreur SASL "_sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql" photo

Postfix : résoudre l’erreur “fatal: www-data(33): message file too big”

postfix-logo

En regardant le fichier log /var/log/mail.err, je me suis aperçu que WordPress ne m’envoyait plus les sauvegardes hebdomadaires de la base de données.

Voici les messages d’erreur des logs :

Aug  6 20:07:31 mail postfix/sendmail[6460]: fatal: www-data(33): message file too big
Aug 13 20:07:36 mail postfix/sendmail[2033]: fatal: www-data(33): message file too big
Aug 20 20:07:33 mail postfix/sendmail[30622]: fatal: www-data(33): message file too big
Aug 27 20:07:29 mail postfix/sendmail[16390]: fatal: www-data(33): message file too big

Après une rapide enquête, il se trouve que ma base de données fait plus de 8 Mo, ce qui dépasse la configuration par défaut de Postfix.

Augmenter la limite de poids des messages sous Postfix

Il nous faut donc relever la limite de poids des messages. Pour cela, il suffit d’éditer le fichier de configuration Postfix :

nano /etc/postfix/main.cf

et d’ajouter cette ligne à la fin du fichier :

message_size_limit = 51200000

Cela nous permet d’envoyer jusqu’à 50 Mo. Attention, il faut que la taille de message_size_limit soit inférieure à la taille de la boîte mail, virtual_mailbox_limit. Sur mon serveur, j’ai désactivé cette dernière :

virtual_mailbox_limit = 0

Il ne vous reste plus qu’à relancer Postfix :

/etc/init.d/postfix restart

Et voilà!

WordPress : récupérer la liste emails des membres et commentateurs photo

WordPress : retourner et exécuter un shortcode dans une fonction

Wordpress icon

Pour les besoins du Centre de Kriya Yoga France, j’ai écrit une fonction qui doit afficher une vidéo automatiquement.

Or je voulais juste renvoyer un shortcode vidéo qui prendrait en charge toute la partie code du lecteur vidéo.

On ne peut pas juste renvoyer la valeur, il faut utiliser la fonction do_shortcode() de WordPress.

Cas 1 : exécuter un shortcode dans une fonction

La solution réside dans l’utilisation de la fonction do_shortcode(). Voici un petit exemple :

<?php
/*
|-----------------------------------------------------------------------
| Sky Show Video by Matt - www.skyminds.net
|-----------------------------------------------------------------------
|
| Returns shortcode to be executed in WordPress.
|
*/
function sky_show_video($content) {
   // do stuff
   // return video
   return do_shortcode("[video src='$vid_url' width='600' height='480' type='video/mp4' preload='true']");
}Code language: HTML, XML (xml)

Cet exemple exécute le shortcode [video].

Lire la suite

hourglass

Serveur dédié : optimiser toutes les images JPG et PNG avec OptiPNG et JpegOptim

Je classe volontairement cet article dans la série Serveur dédié, étant donné que nous allons utiliser la ligne de commande exclusivement. Si vous souhaitez faire la même chose sur votre machine personnelle, il vous suffit d’utiliser Trimage (qui en plus possède une GUI).

hourglass

Si vous possédez un site, blog ou une galerie d’images, il peut être très intéressant d’optimiser toutes vos images d’un seul coup et ce, de manière lossless : chargement plus rapide des pages et moindre consommation de bande passante.

Sous Linux, il existe plusieurs programmes pour le faire. Personnellement, j’ai choisi OptiPNG (pour optimiser les PNG) et JpegOptim (pour optimiser les JPG).

L’installation et la compression de vos répertoires d’images prend à peine quelques minutes.

Installation d’OptiPNG et JpegOptim

On installe nos deux paquets :

apt-get install jpegoptim optipngCode language: JavaScript (javascript)

et on RTFM :

man jpegoptim

et

man optipng

Optimisation des JPG

On navigue dans notre répertoire images et on fait une estimation des gains. Avant de commencer, vérifiez que vous avez la dernière version de jpegoptim et installez manuellement la dernière version des dépôts Sid.

Commençons par les JPG :

jpegoptim -n -t *.jpgCode language: CSS (css)

-n permet de simuler l’optimisation.
-t permet de calculer l’espace gagné

Résultat :

Average compression (2730 files): 0.95% (452k)Code language: CSS (css)

Cela peut sembler peu mais je compresse toutes mes images avant de les mettre sur le web. Visiblement, quelques unes sont passées au travers du filet !

Lire la suite

Serveur dédié : activer X11 forwarding pour SSH photo

Serveur dédié : activer X11 forwarding pour SSH

x11

Si jamais vous avez besoin que votre serveur dédié vous renvoie une image ou quoi que ce soit de graphique via SSH, vous aurez très certainement besoin d’avoir l’X11 Forwarding activé.

Il ne l’est pas par défaut donc si vous obtenez l’erreur suivante:

X11 forwarding request failed on channel 0 

alors il vous faut paramétrer l’option dans la configuration SSH du serveur.

Etape 1 : installer xauth

Sur le serveur et sur le client, xauth doit être installé. Il ne l’est pas sur notre serveur Debian, donc on l’installe :

apt-get install xauthCode language: JavaScript (javascript)

Etape 2 : vérifier que X11 forwarding est activé dans SSH

Sur le serveur, on édite la configuration du daemon SSH :

nano /etc/ssh/sshd_config

Et on vérifie qu’on a bien ForwardX11 est bien à yes :

AllowTcpForwarding yes
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
AddressFamily inet

et sur le client, on édite aussi la configuration SSH :

nano /etc/ssh/ssh_config

avec :

ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes

Lire la suite

PHP : résoudre l'erreur "Redefining already defined constructor for class ..." photo

PHP : résoudre l’erreur “Creating default object from empty value”

php-logo

Suite à la mise à jour de PHP, mon fichier d’erreurs du site a commencé à afficher le message suivant :

PHP Warning: Creating default object from empty value in /wp-content/themes/skyminds/functions.php on line 1213

La ligne en question correspond à :

$posts[0]->comment_status = 'closed';Code language: PHP (php)

Le problème réside dans le fait que $posts n’est pas explicitement défini et comme les versions récentes de PHP tournent maintenant avec le mode E-STRICT par défaut, on obtient une erreur. Il existe deux solutions – soit mettre :

$posts = new stdClass();Code language: PHP (php)

s’il sagit d’un objet, soit mettre :

$posts = array();Code language: PHP (php)

s’il s’agit d’une associative array, juste avant la ligne de code incriminée. Dans mon cas, l’array() est la bonne solution.

Serveur dédié : mise à jour vers Debian 7 Wheezy photo

Serveur dédié : mise à jour vers Debian 7 Wheezy

Hier soir, j’ai mis le serveur à jour : nous passons de Debian 6 (“Squeeze”) à Debian 7 (“Wheezy”) – vous l’aurez remarqué : chez Debian, les versions portent le nom de personnages de Toy Story :)

Histoire de garder une trace de ce que je fais, voici les étapes que j’ai suivies.

Contrairement aux versions précédentes, Debian recommande d’utiliser apt-get au lieu d’aptitude. Donc acte dans ce tutoriel.

Etape 1 : s’assurer que le système est à jour

On vérifie que notre Squeeze est à jour :

apt-get update && apt-get upgradeCode language: JavaScript (javascript)

Etape 2 : installer les nouveaux dépôts

Pour voir vos dépôts existants :

cat /etc/apt/sources.listCode language: PHP (php)

Résultat :

deb http://mirror.ovh.net/debian/ squeeze main contrib
deb-src http://mirror.ovh.net/debian/ squeeze main contrib

deb http://security.debian.org/ squeeze/updates main contrib
deb-src http://security.debian.org/ squeeze/updates main contrib

# Webmin
deb http://download.webmin.com/download/repository/  sarge contrib

# varnish
deb http://repo.varnish-cache.org/debian/ squeeze varnish-3.0

# mod security
deb  squeeze-backports main 

# dotdeb updated LAMP servers
deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze allCode language: PHP (php)

Il faut remplacer toutes les occurrences de squeeze en wheezy. On peut le faire avec cette commande :

sed -i 's/squeeze/wheezy/g' /etc/apt/sources.listCode language: PHP (php)

Evidemment, il y a un piège : le dépôt des backports a changé de nom et d’adresse. Il se trouve désormais ici :

deb http://ftp.debian.org/debian/ wheezy-backports mainCode language: JavaScript (javascript)

Après modification, voici donc notre sources.list :

deb http://mirror.ovh.net/debian/ wheezy main contrib
deb-src http://mirror.ovh.net/debian/ wheezy main contrib

deb http://security.debian.org/ wheezy/updates main contrib
deb-src http://security.debian.org/ wheezy/updates main contrib

# Webmin
deb http://download.webmin.com/download/repository/  sarge contrib

# varnish
deb http://repo.varnish-cache.org/debian/ wheezy varnish-3.0

# mod security
deb http://ftp.debian.org/debian/ wheezy-backports main

# dotdeb updated LAMP servers
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy allCode language: PHP (php)

Etape 3 : lancement de la mise à jour partielle

Mise à jour des fichiers :

apt-get updateCode language: JavaScript (javascript)

Aucune erreur. On continue avec la mise à jour minimale des paquets :

apt-get upgradeCode language: JavaScript (javascript)

Lire la suite