Flash Player 10

Bonjours à tous. Je vais expliquer ici l’installation d’Adobe Flash Player 10 release candidate (nom de code : “Astro”) sous Linux. Je ne présente pas le Flash Player, d’une part parce qu’il est très probable que vous l’utilisiez, d’autre part parce qu’en quelques secondes de Google, une explication qui me semble très claire vous sera donnée. Ce n’est vraiment pas très compliqué, mais un ami m’a demandé il y a peu comment faire, je tiens donc à en faire partager tout le monde.

Premièrement, pensez à désinstaller une éventuelle version précédente. Voilà la marche à suivre par défaut sous Ubuntu : sudo apt-get remove flashplayer-nonfree Ensuite, téléchargez le fichier .tar.gz du Flash Player : ici. Procédez à l’extraction : tar zxvf flashplayer10_install_linux_081108.tar.gz && cd install_flash_player_10_linux. Enfin, installez ! sudo ./flashplayer-installer

(lorsqu’il demande l’adresse où est votre navigateur, pour Ubuntu c’est par défaut et pour la version actuelle : /usr/lib/firefox-3.0.0.1) Voilà ! Amusez-vous bien ! Si vous voulez creuser le sujet, je vous conseil de lire les releases notes.

Posted in None at November 25th, 2008. Comments.

Nouvelle version !

Enfin ! Voilà la nouvelle version de Kiznet ! J’espère qu’elle vous plait, et je n’ai pas grand chose à dire, si ce n’est que j’ai passé du bon temps à la développer, et que, malgré tout, cette nouvelle version ne me convient toujours pas. J’ai une mauvaise nouvelle : les commentaires de la version précédente ont été perdus. Pourquoi ? Tout simplement parce que j’ai trouvé qu’ils n’étaient pas vraiment utile, et que la structure au niveau base de données à assez changée, je n’avais pas envie de créer des “fausses” données, uniquement pour récupérer les commentaires. Enfin, le champs de recherche est plus qu’expérimental, et je planche déjà sur de nouvelles modifications. Si jamais vous rencontrez des bugs ou si vous avez des suggestions, n’hésitez pas à m’envoyer un email.

Bonne journée à tous et à toutes.

Posted in None at November 23rd, 2008. Comments.

LifeDo

Voici LifeDo, ma dernière création (si tant est que l’on puisse nommer comme cela un site web de débutant). Le principe est simple, vous vous connectez avec votreOpenID, et c’est parti ! Vous pouvez directement ajouter / modifier /supprimer vos taches à accomplir. Le besoin de cette application est né d’une déception : je ne trouvais rien qui me donnait pleinement satisfaction (notamment à cause de l’authentification OpenID que je voulais absolument). J’ai donc décidé de créer le mien, pour pouvoir en plus acquérir un peu plus d’expérience avec Django. N’hésitez pas à poster ici même ou à envoyer par mail vos remarques (tant qu’elles sont constructives !) à propos de LifeDo. Le développement se poursuit toujours plus ou moins, et certaines (grosses) modifications sont à prévoir dans le futur. Pour ceux que ça intéresse (c’est écrit là bas aussi) : la source est disponible sur le Google Code du projet. Le site est hébergé chez Alwaysdata (que je remercie au passage) et est propulsé par Django. Voilà pour cette brève. Bonne journée !

Posted in None at November 22nd, 2008. Comments.

L’authentification

A la base, je pensais raconter tout ce que je pense à propos de ma problématique actuelle sur les moyens d’authentifications. Mais en fait, j’ai changé d’idée, et cela va me permettre de vous présenter mon brouillon perso.

La page en question est consultable directement ici. C’est très beaucoup incomplet, j’en convient.

Qui sait ? Peut-être une nouvelle version de kiznet.fr pour les fêtes ?

Posted in None at November 22nd, 2008. Comments.

Interopérabilité : réflexions

Le commencement

Je me suis intéressé à l’idée d’interopérabilité au commencement d’un projet personnel (dont je ne ferrais pas la pub). En effet, j’utilisais la bibliothèque GTK+ pour le rendu de l’interface utilisateur. Sous ma station de développement (Linux / Gnome), tout allait bien, le monde était beau et les oiseaux chantaient. Seulement, j’ai voulu voir comment il se comportait sous Windows (un des but du projet étant la portabilité sans modification de la source). Déjà, installation des dépendances, ce qui n’est pas vraiment simple pour un néophyte, puis ça met relativement le bazar sur le disque dur. Qu’à cela ne tienne, je pourrais faire un installateur pour les utilisateurs lambda et ils n’y verront que du feu. Mal grès tout, le look des applications GTK n’est pas du meilleur effet sur cette plateforme. Deuxième test, sous Mac OS X. Là c’est carrément bien moins simple qu’avec Windows, même si je ne suis pas un expert en Mac, c’est pas vraiment cool pour l’utilisateur. De plus, le look est vraiment pas esthétique et il est quand même coûteux en mémoire de lancer un serveur X11.
C’est là que je me suis posé la question d’interopérabilité.

Un peu plus en détails

Pour pallier à cela, je n’ai pas vraiment de solution miracle pour le moment. Java, vraiment trop lourd à mon goût, tant à coder qu’au niveau déploiement (argument probablement de mauvaise fois, étant fan de Python ;-) ). Aucune bibliothèque ne permet vraiment une bonne intégration au système. Je pense que le problème est surtout là.

Fainéant

En règle générale, je me classe dans la catégorie des flemmards, c’est pourquoi, je n’ai pas envie de coder les mêmes unités graphiques sur 3-4 bibliothèques différentes pour avoir un bon rendu. Cependant, je veux vraiment avoir un produit qui peut être exécuté sur n’importe quel environnement sans modification du code source, ou même re-compilation. C’est assez idéologique, mais je suis persuadé que c’est possible. Pour moi, ce genre de finalité se base sur la connaissance des interfaces des deux systèmes, pour un rendu homogène quelque soit ses conditions d’utilisation.

Mot de la fin

En fait, cet article n’est pas très long, car je me suis rendu compte que les informations que je pensais stables dans mon l’esprit ne sont en fait que très fragiles et floues. C’est pourquoi je ne vais pas pas plus m’étendre sur le sujet. Mais l’idée d’une bibliothèque pour les principales d’interfaces ne me déplais pas, mais alors pas du tout !

Posted in None at November 22nd, 2008. Comments.

Tadam !

Enfin ! Voilà c’est fait, comme vous pouvez vous en rendre compte, vous voici sur Kiznet.fr ! Au niveau hébergement, OVH et ses cgi, c’est pas encore ça, mais ça reste quand même du turbo par rapport au pages perso de Free (et puis en plus, c’est du Django, ce n’est plus du PHP avec Wordpress !) Dans la liste des choses qu’il reste à faire : Mettre des images, comme vous pouvez le voir, chaque post à la place pour une image, il faut encore que je règle cela. Étoffer la page “à propos”. Rendre le tout conforme aux standards du W3C, sinon ça ne me conviendra jamais. Voilà, j’espère que vous appréciez tous ce nouveau tournant !

Posted in None at November 22nd, 2008. Comments.

Avancement de Kiznet

Voilà, le site est terminé et fonctionnel en local, j’ai pris un hébergement 60gp de chez OVH (pour les liens voir deux posts avants), mon nom de domaine est kiznet.fr. Malheureusement, le n’arrive pas à me débrouiller pour utiliser Django en cgi, parce que bien évidement, sur les 60gp, il n’y a pas mod_python. J’avais trouvé deux guides (l’un découle de l’autre d’ailleurs), mais même en les suivant, je n’arrive pas à tout mettre en place (toujours l’erreur 500 : Internal Server Error). Mais bon, tout n’est pas perdu, j’y arriverais probablement.

Posted in None at November 22nd, 2008. Comments.

Django et moi

Je ne sais pas si vous vous rappelez (ou si vous l’avez lu tout simplement), mais dans le dernier post, je parlais d’utiliser Django pour développer mon site perso qui sera hébergé sur mon futur hébergeur, OVH. C’est ce “projet” qui me permet d’apprendre à utiliser Django, je ne l’ai utilisé, même pas en test, nul par ailleurs. C’est donc vachement expérimental ! Alors du coup, je découvre au fur et à mesure plein de fonctions et de méthodes du framework Python, et qui rendent une grande partie de mon code inutile et redondant. Le projet est donc mal pensé à la base. J’hésite alors à mettre en ligne la version actuelle de mon site (je nommerais Kiznet maintenant), ou à attendre plus longtemps pour recommencer ce développement de manière plus “propre”. D’un coté, je voulais terminer vite le Kiznet pour pouvoir commencer à poster tous les autres projets que j’ai en tête, de manière à me faire un support. Le problème est que la version actuelle est, comme dit plus haut, mal pensée, lourde (tant au niveau exécution que schéma de base de données) et il lui manque pas mal de fonctionnalités qui me ferait réécrire pas mal de code pour les implémenter (à cause de ma mauvaise utilisation de Django). Voila, vous êtes informés ! Je remercierais grandement toute personne qui pourrait m’aiguiller sur quelque point que ce soit.

Bon surf !

Posted in None at November 22nd, 2008. Comments.

Django : Python, c’est plus fort que toi !

Aujourd’hui”hui, je vais vous présenter Django, “Le framework web pour les perfectionnistes sous pression” ! Avouez que c”est déjà pas mal comme slogan. Je vais parler ici de mon expérience personnelle d’amateur qui pratique l”informatique sur son temps libre. Donc tout ce que je peux raconter ici peut apparaître totalement FAUX à un expert en la matière, mais bon, faut bien se lancer un jour hein :) .

Les fondations

Comment creuser la base, ou la mise en place du framework dans un environnement Linux / Apache 2 / Mysql 5.

Pour ma part, je réalise tout mes essais sur mon serveur (enfin, c’est plutôt ronflant comme nom, il ne s’agit que d”un Pentium 2 avec 18Go de disque dur qui fait un bruit d”enfer hein) qui tourne sous Debian (Lenny). Pour l”installation, il m’a suffit d’installer le module Python pour Apache (facilement grâce à Aptitude). J’ai ensuite installé Django en lui même (ce qui se résume à télécharger la version en cours de développement puis créer 2-3 liens symboliques, du gâteau quoi), puis paramétrer mon httpd.conf (de même, processus très simple grâce à la très bonne documentation très bien traduite par David Larlet. Résultat, en partant de rien, un framework fonctionnel disponible en production en tout juste 5 petites minutes.

Le commencement

Où on s’assoit bien droit correctement sur sa chaise, qu’on retrousse ses manches, réajuste ses lunettes, ferme toutes les applications autres que le navigateur, et qu’on ferme la porte du bureau.

J’ai encore été agréablement surpris : la documentation est abondante. D’une part, la doc’ du site officiel qui couvre un très grosse partie et qui permet de bien dégrossir le travail. Ensuite, cette même documentation (et un peu plus) traduite sur Django-fr. Finalement, je suis tombé sur The Django Book (aussi disponible en livre papier). De toute façon, la communauté est loin d’être minime, et Google is your (only?) friend, donc pas de quoi s’inquiéter.

Au bout d”une quarantaine de minutes, on réalise une application de votes fonctionnelle (sobre, mais efficace), le tout avec très peu de code et le moteur proprement séparé de l’affichage. Que du bonheur !

Oui mais non !

“Un cri retentit dans la salle de bains…” (Tribulations, Chapitre 2, Verset XVI) Que du bonheur mais … sans compter un petit problème (que je n”ai pas réussit à résoudre, mais je cherche encore !) : la gestion des accents et de l’UTF-8 dans l”interface d”administration auto générée. En effet, Django vous génère une interface permettant l”administration de la base de donnée suivant les modèles que vous avez définit dans votre application, le tout de manière sobre et fonctionnelle. Pour ma part, un problème intervient au moment où je veux utiliser des accents dans du texte, là, il aime pas ! Mais je pense que le problème vient de moi de toute façon.

Au final

Pour le moment, je ne dispose pas encore d”assez d”éléments pour juger et émettre un point de vue plus approfondit sur Django, mais pour l’instant, voici mon bilan : Un gain de temps inimaginable : très peu de code, si les modèles de données sont bien pensés dès le départ, tout va tout seul. Des templates pratiques : Ils permettent d”étendre d’autres templates, de pouvoir émettre des valeurs par défaut et remplaçables avec des systèmes de blocs. Propreté : Le code généré est très propre, ainsi que la séparation entre les structures et l’interface. Seul point négatif pour le moment : ce problème d’accents.

Le mot de la fin : Je vais bientôt prendre un hébergement 60GP chez OVH. Mon but sera d”y développer mon espace perso (un blog surtout), en utilisant uniquement Django. Je vais tenir au courant de comment tout cela se passe.

Posted in None at November 21st, 2008. Comments.

Script Perl Edition de ID3 massive

Je le met là comme mémo, même si il ne sert jamais à personne dans son intégralité. C’est un script Perl qui m’a servit à renommé toute ma playlist d’XMMS, dont les fichiers étaient sous forme nn_cccc_cccc_ccc.mp3 (où nn est un nombre et ccc_cccc_ccc le titre de la chanson). Le nom de l’auteur et l’album sont des données fixes. Bien sûr, il y a sûrement mieux comme méthode pour effectuer cette tâche, mais cela m’a permis d’en apprendre un peu plus sur la programmation en langage Perl. La prochaine fois, j’essayerais en Python ;)

#!/usr/bin/perl
use Xmms::Remote;
use MP3::Tag;

sub set_tag { my $file = shift @; my $tag = shift @; my $mp3 = MP3::Tag->new($file); print Dumper $tag; my $tags = $mp3->get_tags(); my $id3v2;

if (ref $tags eq ''HASH'' && exists $tags->{ID3v2}) {
    $id3v2 = $tags->{ID3v2};
}
else {
    $id3v2 = $mp3->new_tag("ID3v2");
}

my %old_frames = %{$id3v2->get_frame_ids()};
foreach my $fname (keys %$tag) {
    $id3v2->remove_frame($fname)
    if exists $old_frames{$fname};
    if ($fname eq ''WXXX''){
        $id3v2->add_frame(''WXXX'', ''ENG'', ''FreeDB URL'', $tag->{WXXX}) ;
    }
    elsif ($fname eq ''COMM'') {
        $id3v2->add_frame(''COMM'', ''ENG'', ''Comment'', $tag->{COMM}) ;
    }
    else {
        $id3v2->add_frame($fname, $tag->{$fname});
    }
}

$id3v2->write_tag();
return 0;

}

$xmms_remote = Xmms::Remote->new(); @list = @{$xmms_remote->get_playlist_files}; foreach $el (@list){ $orig = $el; $file_mp3 = MP3::Tag->new($el); $file_mp3->get_tags(); if(!exists $file_mp3->{ID3v1}){ #On prend que les fichiers qui n''ont pas de tags } if($el =~ /^[\/[a-z0-9_]+\/]*([0-9_]){2}(.+).mp3$/i){ $track_num = $1; $name = $2; @tmp = split(//,$name); $counter = 0; foreach $mot (@tmp){ @tmp[$counter] = ucfirst($mot); $counter++; } $name = join(" ",@tmp); print $name . "\n"; $artist = "Nobuo Uematsu"; $album = "Final Fantasy X"; $tags = {}; $tags->{TIT2} = $name; $tags->{TPE1} = $artist; $tags->{TALB} = $album; $tags->{TRCK} = $track_num; set_tag($orig,$tags); }

$count++;

}

Posted in None at November 21st, 2008. Comments.