Java6 sur Archlinux

L’un des nombreux avantages de Archlinux, c’est que l’on dispose toujours de la dernière version des applications Linux. C’est aussi son gros inconvénient, comme par exemple avoir le privilège d’être parmi les premiers à subir l’immonde Gnome3.
Tout récemment, l’upgrade java7 m’a également causé des soucis, principalement avec le génial serveur DLNA serviio, qui n’est pas encore compatible java7.
Sur les distribs Debian et dérivés, j’avais l’habitude d’utiliser update-java-alternatives, qui permettait d’installer plusieurs versions de jvm, et de switcher simplement de l’une à l’autre en cas de besoin. Malheureusement aucun mécanisme similaire sur Arch. Il existe bien un package ‘fake-java’, censé apporter une réponse, mais je n’ai pas compris comment l’utiliser.
Heureusement, Arch permet de downgrader des packages.
Pour repasser à la version 6 de java, voici donc la manip :

ls /var/cache/pacman/pkg | grep jdk
sudo pacman -U /var/cache/pacman/pkg/jdk-6u26-1-x86_64.pkg.tar.xz

A ce stade, pacman peut refuser le downgrade, prétextant que le fichier /usr/share/applications/java-policy-settings.desktop existe déjà. Si c’est le cas, supprimez-le, puis recommencez la manip.
Faites ensuite la même manip pour la jre :

 sudo pacman -U /var/cache/pacman/pkg/jre-6u26-1-x86_64.pkg.tar.xz

Il faut ensuite dire à pacman de ne pas upgrader java. Pour celà, éditez le fichier /etc/pacman.conf et ajoutez la ligne suivante :

IgnorePkg = jdk jre
Posted in dev, java, linux | Leave a comment

Récupérer des données Google Agenda avec Perl

Dans la série apprendre en s’amusant, nous allons voir aujourd’hui comment récupérer les évènements d’un agenda public Google, en utilisant Perl et le module Net::Google::Calendar. Plutôt que de longs discours, voici le code !

use Net::Google::Calendar;
my $agenda_public_url = 'http://www.google.com/calendar/feeds/foobar@gmail.com/public/full';
my $calendar = Net::Google::Calendar->new( url => $agenda_public_url );
foreach my $evt ( $calendar->get_events() ) {
    my $title= $evt->title;
    my @dates = $evt->when;
    #when retourne une liste composée ainsi : (date_debut,date_fin,flag evenement_sur_toute_la_journee)
    #Les dates récupérées sont des objets DateTime, on va les formatter en dd/MM/yyyy
    my $start_date= $dates[0]->strftime('%e/%m/%Y');
    my $end_date= $dates[1]->strftime('%e/%m/%Y');
    my is_all_day_event= $dates[2];
}

Si vous souhaitez afficher ces évènements sur une page web, je vous recommande chaudement l’excellent PerlDancer.
L’exemple suivant utilise Moose, il y avait certes plus simple, mais après m’être battu pendant des heures avec les tableaux de hashes, j’ai fini par craquer (mais si quelqu’un peut m’expliquer comment faire la même chose avec un tableau de hashes, je suis preneur !)
Nous allons donc créer une classe Event, qui contiendra les données reçues de Google :

package Event;
use Moose;
 has 'title' => (is => 'rw', isa => 'Str');
 has 'date_deb' => (is => 'rw', isa => 'Str');

  1;

Côté Dancer :

use Net::Google::Calendar;
use DateTime;
use Event;
get '/agenda' => sub {
	my $url =
'http://www.google.com/calendar/feeds/foobar@gmail.com/public/full';
	my @events;
	my $cal = Net::Google::Calendar->new( url => $url );
	foreach my $evt ( $cal->get_events() ) {
		my $event = Event->new();
		$event->title( $evt->title );
		my @dates = $evt->when;

		my $date_deb = $dates[0]->strftime('%e/%m/%Y');
		$event->date_deb($date_deb);
		push( @events, $event );
	}
	template 'agenda', { title => 'agenda', events => [@events] };
};

Vous noterez les crochets autour de @events, sur la dernière ligne de code, ne les oubliez surtout pas !
Pour la page html, en utilisant TemplateToolkit :

<table>
[ FOREACH event IN events ]
<tr>
<td>
<h1>[ event.title ]</h1>
</td>
<td>[ event.date_deb ]</td>
</tr>
[ END ]
</table>

Bon, je n’ai pas géré le cas de l’évènement sur une journée complète, mais vous avez l’idée générale, faites-en bon usage !

Posted in perl | Leave a comment

What’s next Paris

J’ai eu la chance d’assister au What’s Next organisé par Zenika les 26 et 27 mai, au Grand Rex à Paris.
Mon impression générale : une grande réussite ! (Même si je suis déçu de ne pas avoir gagné le Ipad2 mis en jeu par Kaazing, mais là n’est pas le sujet…)
Le jeudi a commencé par un speech sympa d’un des fondateurs de Zenika, puis les hostilités ont commencé par du lourd : Adrian Colyer, co-fondateur de SpringSource, présentait “Enterprise Applications in 2011: Challenges in Development and Deployment, and Spring’s response”. Le titre fait un peu peur, je vous l’accorde, mais il s’agissait simplement de présenter Cloud Foundry de SpringSource, et au passage expliquer en quoi consiste le Platform as a Service (PaaS). En résumant beaucoup, il s’agit de définir au départ quels sont les services qui vont être utilisés par ton application (base de données (relationnelle ou objet), messaging, mais aussi langage, framework …). Tous ces services seront fournis par le cloud, qu’il ne te reste plus qu’à alimenter avec du code. L’équipe de développement peut donc se concentrer sur le code, l’infrastructure étant gérée par le cloud. Avantages : simplicité de déploiement et scalabilité. Pour l’instant, sont pris en charge java (of course !) mais aussi Ruby pour les langages, Spring, Ruby on rails et Sinatra pour les frameworks.
L’après-midi a commencé avec Boris Bokowski, développeur chez IBM Ottawa, venu présenter Orion. Orion est un IDE web (HTML, javascript et CSS) qui tourne lui aussi en cloud. Le principe est le suivant : tu souscris un compte OrionHub, et ensuite tu peux accéder à ton environnement de développement depuis n’importe quel browser. Pour l’instant, les fonctionnalités sont assez basiques, mais il y a pas mal d’idées sympa.
La présentation suivante m’a déçu : l’immense Howard Lewis Ship (créateur de Tapestry, excusez du peu !) présentait Clojure
Clojure est en fait un Lisp qui tourne sur la JVM et peut donc interagir avec des objets Java. Que ceux qui trouvaient Perl illisible jettent donc un oeil à Clojure, succès garanti ! Je n’ai pas compris grand chose au speech de Howie, mais je pense que je n’aurai pas compris beaucoup plus si la présentation avait été en français, tant la syntaxe de Clojure est absconse. Aucune chance donc que je devienne un jour un “clojure evangelist”.
La suite a été assurée par Jevgeni Kabanov, fondateur de ZeroTurnaround, et aussi consommateur fervent de RedBull, visiblement, tant ce garçon était survolté et parlait à toute vitesse. Il présentait JRebel, qui reloade les classes Java à chaud. Et ce produit est miraculeux : plus besoin de relancer Tomcat quand tu modifies une servlet, tu as juste à rafraichir le browser ! Il annonçait 10 minutes de gagnées par heure de développement, et je pense qu’il n’exagère pas. Chaque visiteur est reparti avec une licence d’évaluation valable 3 mois (qui plus est, l’équipe du stand zeroturnaround était vraiment très sympa).
Jags Ramnarayan a pris le relais pour présenter SQLFabric, une base de données pour le cloud (décidément). Sa présentation avait l’air super intéressante, mais je parvenais péniblement à saisir au vol un mot sur 20, j’ai donc rapidement décroché …
Ce fut ensuite au tour de Brad Drysdale, directeur technique chez Kaazing. Il a présenté les websockets. Après un bref rappel sur les technos existantes pour faire du temps réel sur le web, notamment le long polling. Il n’y a pas photo : les websockets enfoncent tout ce qui existe, de par à la fois leur simplicité d’utilisation, et le gain de bande passante qu’elles apportent. En effet, les headers http ne sont transmis que lors du handshake qui initialise la connexion. Par la suite, le websocket ne transmet que les données : sur des gros volumes de données, l’économie est très conséquente. Seul inconvénient : seuls les browsers les plus récents supportent cette technologie. Et c’est là qu’intervient Kaazing, en proposant une gateway qui permet d’ouvrir des websockets avec n’importe quel browser.
A l’issue de cette journée bien chargée, Atlassian payait généreusement sa tournée : bière à volonté !!
Le vendredi commença en douceur avec Neal Gafter, un des concepteurs du JDK 5, qui a aujourd’hui rejoint Microsoft… Son exposé un peu long sur l’histoire des versions de Java, et le nombre de visiteurs au Java One, de la création à nos jours, fut heureusement ponctué de colles tirées de son livre Java Puzzlers, histoire de remettre à leur place ceux qui pensaient avoir fait le tour du langage.
Il a cédé la place à Thomas Conté, de Microsoft France, venu présenter Windows Azure, la solution cloud made in Microsoft. J’avoue que je suis parti au bout de 10 minutes, installer une appli sur un serveur Windows étant contraire à mes pratiques religieuses.
Je suis revenu pour écouter Rob Harrop, ingénieur chez SpringSource, qui présentait RabbitMQ, la solution de messaging de SpringSource. Pour m’être cassé la tête sur ActiveMQ voici quelques mois, je n’ai pas manqué d’apprécier la simplicité d’utilisation de cette solution. Ses avantages : simplicité, pas besoin d’un serveur d’applis full JEE, multi langages (Java, Python, Ruby, Perl etc.), tant pour la partie client que serveur, multi protocoles ‘AMQP, STOMP, HTTP…). Couplé à des websockets, je pense que ça peut faire très mal pour l’affichage de données temps réel, genre cours de bourse.
L’après-midi fut dominée par Michaêl Chaize, consultant chez Adobe France, venu présenter Flex, et notamment les nouveautés de la version 4.5. Ormis le fait que son exposé m’a furieusement donné envie de me mettre à Flex, l’outil de développement d’applis mobiles, compatibles Iphone/Ipad/Android/Blackberry semble vraiment interressant. Par ailleurs, l’interaction Flex/Java parait assez naturelle, via BlazeDS, ou GraniteDS. Enfin, sa partie sur live cycle collaboration service laisse apercevoir pas mal de possibilités pour tout ce qui est communication temps réel (conférences, collaboration…).
L’intervenant suivant m’a beaucoup moins enthousiasmé : Jonas Bonér a présenté Akka. Si un lecteur a compris à quoi ça peut bien servir, qu’il n’hésite pas à laisser un commentaire !
En conclusion, je pense que What’s Next était vraiment l’endroit où il fallait être si on aime Java et tout ce qui tourne autour. Et même si je ne suis pas convaincu que toutes les technos présentées sont amenées à jouer un rôle important dans les mois à venir, il se dégage quand même une tendance : le cloud !
Merci à Zenika pour avoir organisé un si bel évènement, merci aux intervenants pour la qualité de leurs présentations, et merci à mon chef vénéré, pour m’avoir permis d’y assister !

Posted in java | Leave a comment

Convertir un fichier de sous-titres

Toujours énervant de se retrouver avec des caractères bizarres dans les sous-titres de votre film préféré. J’ai trouvé une solution :

  • Ouvrir le fichier avec VLC, puis regarder dans les propriétés des sous-titre, VLC indique l’encodage (dans mon cas, windows-cp1252).
  • Convertir le fichier au format linux :
    dos2unix le_nom_de_mon_fichier.srt
  • Convertir l’encodage :
    iconv -f windows-1252 -t utf-8 mon_fichier_original.srt > mon_fichier_de_sortie.srt
  • Si besoin, on peut changer ensuite l’encodage du fichier dans les préférences de gnomesubtitles
Posted in Uncategorized | Leave a comment

Problèmes de consommation CPU sur mon serveur…

Aujourd’hui, et c’est la deuxième fois en 10 jours, j’ai du rebooter mon serveur : il ne répondait plus et le tableau de bord montrait une consommation CPU à 100 %.
J’ai consulté divers logs sans trouver d’indice, puis une rapide recherche google m’a indiqué que ça pouvait venir de wordpress/mysql.
Je me suis donc empressé d’installer l’excellent W3 Total Cache, sans trop y croire. Mais au moins, il accèlère l’affichage des pages de mon blog d’une façon assez extraordinaire, c’est toujours ça !
J’ai du installer le package php-apc, et ai modifié les options W3 en conséquence.
A suivre …

Posted in admin | Leave a comment

Grub2 en mode graphique

Après plusieurs heures de prise de tête, j’ai enfin récupéré un menu grub avec une résolution d’écran digne de ce nom, et une image de fond, disparus depuis ma mise à jour ubuntu vers Maverick.
Au préalable, il faut bien sûr avoir installé grub2, ainsi que grub2-splashimages. Pour celà, je vous conseille la lecture de l’excellent article dans la doc ubuntu.
Voici donc le contenu du fichier /etc/default/grub :

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=uvesafb:mode_option=1280x1024-24,mtrr=3,scroll=ywrap"
#GRUB_CMDLINE_LINUX=" splash vga=786"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=1280x1024
GRUB_VIDEO_BACKEND=vbe
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Il semblerait que la commande GRUB_VIDEO_BACKEND=vbe ai joué un rôle déterminant dans l’affichage du background.

Fichier /etc/grub.d/05_debian_theme :

#!/bin/bash -e

source /usr/lib/grub/grub-mkconfig_lib

  WALLPAPER="Lake_mapourika_NZ.tga"
  COLOR_NORMAL="black/black"
  COLOR_HIGHLIGHT="magenta/black"

set_mono_theme()
{
  cat << EOF
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
EOF
}

# check for usable backgrounds
use_bg=false
if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then
for i in {/boot/grub,/usr/share/images/desktop-base,/usr/share/images/grub}/${WALLPAPER} ; do
    if is_path_readable_by_grub $i ; then
      bg=$i
      case ${bg} in
        *.png)		reader=png ;;
        *.tga)		reader=tga ;;
        *.jpg|*.jpeg)	reader=jpeg ;;
      esac
      if test -e /boot/grub/${reader}.mod ; then
        echo "Found background image: `basename ${bg}`" >&2
        use_bg=true
        break
      fi
    fi
  done
fi

# set the background if possible
if ${use_bg} ; then
  prepare_grub_to_access_device `${grub_probe} --target=device ${bg}`
  cat << EOF
insmod ${reader}
if background_image `make_system_path_relative_to_its_root ${bg}` ; then
  set color_normal=${COLOR_NORMAL}
  set color_highlight=${COLOR_HIGHLIGHT}
else
EOF
fi

# otherwise, set a monochromatic theme for Ubuntu
if ${use_bg} ; then
  set_mono_theme | sed -e "s/^/  /g"
  echo "fi"
else
  set_mono_theme
fi

Après avoir édité un fichier de config grub2, n'oubliez pas de toujours lancer

sudo update-grub



Par ailleurs, si vous utilisez plymouth (et c'est le cas si vous avez installé une version récente d'Ubuntu), il peut être nécessaire d'installer le package v86d.

Posted in linux | Leave a comment

Comment joindre un fichier video en plusieurs parties sous Linux

Problème :
Vous avez un fichier video en plusieurs parties, que vous souhaitez reconstituer. Par exemple :

mon_film_de_vacances.avi.001
mon_film_de_vacances.avi.002
mon_film_de_vacances.avi.003

Solution :

avimerge -i mon_film_de_vacances.avi.* -o /chemin/de/destination/mon_film_de_vacances.avi

Pour installer avi merge :

sudo aptitude install transcode

Attention !
Il arrive que les fichiers reconstitués avec cette méthode soient endommagés, ce qui va occasionner des problèmes avec l’avance/retour rapide. Pour solutionner ce problème, n’hésitez pas à utiliser divfix++

Posted in linux | Leave a comment

Enfin des URLs sympas dans WordPress !

Les permalinks sont une autre fonctionnalité géniale de wordpress, qui permet d’avoir des urls lisibles, et également référençables plus facilement par les moteurs de recherche.
Qui plus est, très simple à configurer dans wordpress, mais attention à la configuration Apache.
Pour que celà fonctionne, il faut :

  • activer mod_rewrite
  • mettre à jour .htaccess, avec les données fournies dans la page permalinks de wordpress
  • mettre à jour la config apache (/etc/apache2/sites-enabled/votresite), en remplaçant toutes les directives “AllowOverride none”, par “AllowOverride all”, uniquement pour le répertoire contenant votre site.

Grand merci à Philip Oakley

Posted in wordpress | Leave a comment

WordPress : installation de plugins et upgrade via SSH

La possibilité d’installer des plugins, ou de faire des mises à jour WordPress directement par l’interface d’administration est un réel bonheur. Toutefois, elle implique d’installer un serveur FTP, ce qui m’inquiète toujours un peu. Mais rassurez-vous, il existe une possibilité beaucoup plus sûre, et qui ne demande que quelques manipulations supplémentaires : passer par SSH.

Sur Ubuntu 10.10, voilà comment ça se passe :
Il vous faut tout d’abord installer toutes les librairies SSH nécessaires.

sudo aptitude install libssh2-1 libssh2-1-dev libssh2-php

S’il n’existe pas, créez le fichier /etc/php5/conf.d/ssh2.ini, et y ajouter la ligne suivante :

extension=ssh2.so

Générez sur votre serveur une clé publique et privée SSH (j’essaierai de rédiger un article sur cette étape), et copiez-là dans un endroit accessible pour le groupe www-data :

cd /etc
sudo mkdir wordpress
sudo cp /home/user/.ssh/id_rsa* wordpress/
sudo chgrp www-data wordpress/*
sudo chmod 640 wordpress/*

Il faut ensuite donner des droits appropriés au groupe www-data, sur le dossier wordpress :

cd /yourwordpress_dir/
sudo chown -R www-data:www-data * 

Ajoutez dans wp-config.php les lignes suivantes:

define('FTP_PUBKEY','/etc/wordpress/id_rsa.pub');
define('FTP_PRIKEY','/etc/wordpress/id_rsa');
define('FTP_USER','user');
define('FTP_PASS','password');
define('FTP_HOST','localhost:22');

N’oubliez pas de relancer apache, et c’est terminé !

Posted in wordpress | Leave a comment

Problèmes de caractères accentués dans WordPress

Je viens de mettre à jour WordPress sur mon serveur, et surprise : j’ai perdu mon thème (bien fait pour moi, j’aurai dû sauvegarder correctement ! ), et tous les caractères accentués apparaissent bizarrement. J’ai trouvé la solution sur ce site : http://www.tipsandtricks-hq.com/how-to-fix-the-character-encoding-problem-in-wordpress-1480
Par ailleurs, grosse frayeur tout de suite après la mise à jour : alors que l’interface d’admin fonctionnait correctement, le site affichait une page désespérément blanche ! Heureusement, encore une solution très simple. Il a en effet suffit de changer de thème pour retrouver tout mon contenu.

Posted in admin | Leave a comment