Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : Développement

eZFluxBB : Quand eZ Publish se connecte à FluxBB / PunBB

Guillaume Kulakowski

Étape n°2 de la migration de Fedora-Fr vers le CMS open source eZ Publish : après le planet, c'est au tour de l'accueil d'amorcer son virage sous eZ...

Pour le moment rien n'est visible en prod', mais j'ai commité ce week-end un début d'extension permettant à eZ Publish de récupérer des informations issues de PunBB / FluxBB.

Actuellement, cette extension eZ ne fait pas grand chose, puisque que la seule action possible et un fetch current_user permettant de récupérer les informations sur l'utilisateur courant.

Première version d'eZFluxBB

Ce qui reste à faire :

  • fetch sur les topics (derniers topics, extraction de news, etc..)
  • fetch sur les stats
  • fetch sur les utilisateurs en ligne
  • Rendre le code de ma classe eZFluxBBDB moins ridicule et lui permettre de connecter un eZ et un FluxBB sur des bases de données et des serveurs différents
  • Documenter !

Ce que l'extension ne fera pas :

  • Synchronisation des utilisateurs eZ / FluxBB.
    Mon choix est clairement de garder eZ pour de la publication et FluxBB pour la partie user input/ gestion de compte.

Utilisation d'eZFlux dans l'administration d'eZ Publish

A suivre...

Mon afficheur de photos par le web

Aurélien Bompard

J'ai craqué. J'avais essayé de résister pourtant, et j'avais tenu longtemps. Mais là ça y est, j'ai craqué. Au lieu de publier mes photos à l'aide d'une célèbre application web dédiée à ça sans se poser de questions, j'ai développé moi-même un n-ième outil.

Mon cahier des charges

Et là pour le coup, des applis web pour publier des photos, y'en a vraiment des pelletés sur Internet... Mais bon, voilà, c'est fait, au moins celle-là elle correspond à 100% de mes besoins, qui étaient les suivants :
- jolie
- légère et rapide
- je ne dois pas à avoir à faire plus que d'envoyer un dossier avec des photos sur un espace web.
- pouvoir afficher les photos en miniatures et en grand
- avoir la possibilité de vérouiller un dossier de photos par un mot de passe
- pouvoir publier aussi des vidéos

Et c'est tout, le reste des fonctionnalités classiques de ce genre d'outil sont inutiles pour moi (commentaires, notations, etc.)

J'ai aussi besoin de pouvoir créer des albums, exit donc le fameux service hébergé Flickr, qui ne propose ça que pour les comptes payants.

Briques

Je n'ai tout de même pas tout développé à partir de rien. Pour l'affichage des photos en miniature et en grand, je cherchais quelquechose du genre de Lightbox. C'est très joli, dynamique, et s'appuie sur des pages standards. Ca me plaît. Mais ça ne permet pas d'afficher des vidéos. Heureusement, un clône de Lightbox, Shadowbox, fait ça sans problème. En plus, c'est sous licence libre (LGPL). Que demande le peuple ?

Mon petit développement

Le peuple, il demande un générateur d'index qui prépare la page de miniatures, avec les bons liens comme il faut pour que ShadowBox se lance. Et le peuple, il voudrait aussi un moyen de générer les miniatures automatiquement. Il est exigent, le peuple.

Voilà donc ce que j'ai fait, j'ai écrit deux scripts :
- un en PHP pour générer les pages web
- un en python pour fabriquer les miniatures

L'index web

Le script PHP exploite les possibilités offertes par la directive "DirectoryIndex" d'Apache. Cette directive est communément utilisée pour dire que l'appel d'un répertoire dans l'URL se traduit par l'appel d'un fichier index.html ou index.php à l'intérieur de celui-ci. Mais on peut mettre bien plus qu'un nom de fichier, en fait on peut même mettre une URL relative ou absolue qui pointe vers un script. Et c'est ce script qui sera utilisé pour fabriquer l'index du répertoire. Pile-poil ce qu'il me faut !

Le générateur de miniatures

Il s'agit là d'un script python qu'on passe sur un répertoire contenant des photos ou des vidéos, et qui créé les miniatures pour ces éléments. Il recompresse et redimentionne aussi les photos. Et il convertit les vidéos en FLV [1] pour lecture dans le navigateur. Et il peut même renommer les photos pour leur donner un nom cohérent auto-incrémenté.

Récupérez-le

J'ai placé tous ces développements sous licence Affero GPL v3, qui est la GPL des applications web : si vous modifiez le code et que vous utilisez cette application sur le web, alors vous devez fournir vos modifications.

Si vous êtes intéressé, voici le code :
- photos-index-0.1.tar.gz (le nom est temporaire, si vous avez des idées je suis tout ouïe)

L'archive contient un fichier README avec les instructions.

Et bien sûr, mes photos, qui constituent un bon site de démo.

Si vous avez des idées de développement et de fonctionnalités, je suis preneur, bien que je ne garantisse pas que je passerais beaucoup de temps dessus, vu qu'à l'origine il s'agit d'un besoin personnel. Maintenant bien sûr, si vous avez une contribution, je ne vais pas refuser... ;-) Si vous trouvez des bugs, ça m'intéresse aussi.

Et si vous voulez suivre le développement de l'outil, c'est possible en passant par Git avec la commande suivante :

git clone http://aurelien.bompard.org/projects/divers/photos.git/

Si vous décidez de l'utiliser, laissez-moi un message, ça me fera plaisir de savoir que ça vous a été utile ! :)

Développement

Mon afficheur de photos par le web

Aurélien Bompard

J'ai craqué. J'avais essayé de résister pourtant, et j'avais tenu longtemps. Mais là ça y est, j'ai craqué. Au lieu de publier mes photos à l'aide d'une célèbre application web dédiée à ça sans se poser de questions, j'ai développé moi-même un n-ième outil.

Mon cahier des charges

Et là pour le coup, des applis web pour publier des photos, y'en a vraiment des pelletés sur Internet... Mais bon, voilà, c'est fait, au moins celle-là elle correspond à 100% de mes besoins, qui étaient les suivants :
- jolie
- légère et rapide
- je ne dois pas à avoir à faire plus que d'envoyer un dossier avec des photos sur un espace web.
- pouvoir afficher les photos en miniatures et en grand
- avoir la possibilité de vérouiller un dossier de photos par un mot de passe
- pouvoir publier aussi des vidéos

Et c'est tout, le reste des fonctionnalités classiques de ce genre d'outil sont inutiles pour moi (commentaires, notations, etc.)

J'ai aussi besoin de pouvoir créer des albums, exit donc le fameux service hébergé Flickr, qui ne propose ça que pour les comptes payants.

Briques

Je n'ai tout de même pas tout développé à partir de rien. Pour l'affichage des photos en miniature et en grand, je cherchais quelquechose du genre de Lightbox. C'est très joli, dynamique, et s'appuie sur des pages standards. Ca me plaît. Mais ça ne permet pas d'afficher des vidéos. Heureusement, un clône de Lightbox, Shadowbox, fait ça sans problème. En plus, c'est sous licence libre (LGPL). Que demande le peuple ?

Mon petit développement

Le peuple, il demande un générateur d'index qui prépare la page de miniatures, avec les bons liens comme il faut pour que ShadowBox se lance. Et le peuple, il voudrait aussi un moyen de générer les miniatures automatiquement. Il est exigent, le peuple.

Voilà donc ce que j'ai fait, j'ai écrit deux scripts :
- un en PHP pour générer les pages web
- un en python pour fabriquer les miniatures

L'index web

Le script PHP exploite les possibilités offertes par la directive "DirectoryIndex" d'Apache. Cette directive est communément utilisée pour dire que l'appel d'un répertoire dans l'URL se traduit par l'appel d'un fichier index.html ou index.php à l'intérieur de celui-ci. Mais on peut mettre bien plus qu'un nom de fichier, en fait on peut même mettre une URL relative ou absolue qui pointe vers un script. Et c'est ce script qui sera utilisé pour fabriquer l'index du répertoire. Pile-poil ce qu'il me faut !

Le générateur de miniatures

Il s'agit là d'un script python qu'on passe sur un répertoire contenant des photos ou des vidéos, et qui créé les miniatures pour ces éléments. Il recompresse et redimentionne aussi les photos. Et il convertit les vidéos en FLV [1] pour lecture dans le navigateur. Et il peut même renommer les photos pour leur donner un nom cohérent auto-incrémenté.

Récupérez-le

J'ai placé tous ces développements sous licence Affero GPL v3, qui est la GPL des applications web : si vous modifiez le code et que vous utilisez cette application sur le web, alors vous devez fournir vos modifications.

Si vous êtes intéressé, voici le code :
- photos-index-0.5.tar.gz (le nom est temporaire, si vous avez des idées je suis tout ouïe)

L'archive contient un fichier README avec les instructions.

Et bien sûr, mes photos, qui constituent un bon site de démo.

Si vous avez des idées de développement et de fonctionnalités, je suis preneur, bien que je ne garantisse pas que je passerais beaucoup de temps dessus, vu qu'à l'origine il s'agit d'un besoin personnel. Maintenant bien sûr, si vous avez une contribution, je ne vais pas refuser... ;-) Si vous trouvez des bugs, ça m'intéresse aussi.

Et si vous voulez suivre le développement de l'outil, c'est possible en passant par Git avec la commande suivante :

git clone http://aurelien.bompard.org/projects/divers/photos.git/

Si vous décidez de l'utiliser, laissez-moi un message, ça me fera plaisir de savoir que ça vous a été utile ! :)

Historique

  • 13 septembre 2008 : version 0.5 :
    • gestion de l'affichage d'un lien vers l'archive contenant toutes les photos
    • internationalisation : français et anglais pour l'instant
    • protection contre des fichiers invalides dans make-gallery.py et make-atom.py
    • correction des URLs dans le générateur de flux Atom.
  • 22 août 2008 : version 0.4 :
    • ajout d'un générateur de flux Atom : make-atom.py
    • utilisation de Python Imaging Library dans make-gallery.py plutôt que des appels système à ImageMagick (désactivé par défaut)
    • possibilité de demander l'affichage d'une photo en particulier par l'URL (utilisé par le flux RSS)
    • correction de quelques bugs mineurs
  • 17 juin 2008 : version 0.3 :
    • correction d'un bug Javascript avec IE
Développement

ezoescript et ezoecss : 2 bonnes surprises dans ezoe

Guillaume Kulakowski

Pour ceux qui ont suivi mon précédent billet sur l'optimisation des javascripts, vous l'aurez compris : je suis sensibilisé à l'optimisation des sites web et notamment (entre autre) à la préconisation Yahoo! Developer Network :"Minify JavaScript and CSS". Cette préconisation suggère de réduire les CSS et les javascript en nombre et en poids. Dans le meilleur des cas, il faudrait donc n'avoir qu'une feuille CSS et qu'un fichier Javascript de poids raisonable.

Pour la migration du planet Fedora-Fr sous eZ Publish, j'avais pour intention de développer une extension eZ Publish intégrant un minifier JS/CSS. J'étais parti pour utiliser JSMin qui, certes est moins puissant que YUI ou packer mais qui offre le double avantage d'être full php (YUI utilise JAVA) et surtout de ne pas trop altérer le source à grands coups d'eval (comme le fait packer).

Mais au final, j'ai fait le choix de ne pas utiliser le système de design d'eZ Publish et de continuer à stocker le design (CSS, images, JS) de chaque sous-domaine (www, planet, forums, doc, etc..) dans un sous domaine commun (common). Au final, que vous soyez sur le planet, l'accueil ou sur les forums de fedora-fr, vous ne téléchargerez qu'une fois les images et les feuilles de styles.

Bref, comme vous l'aurez compris, j'avais laissé tomber la chose... Puis en furetant dans le code source de la future version d'online editor : ezoe pour les intimes; je suis tombé sur la classe ezoepacker. À la lecture du templateautoload j'ai déduit qu'ezoe proposait 2 opérateurs de template forts sympatiques : ezoescript et ezoecss.

Pour faire court, ezoescript et ezoecss remplacent la syntaxe classique d'eZ, qui avait pour résultat de multiplier les CSS et les JS :

{section name=JavaScript loop=ezini( 'JavaScriptSettings', 'JavaScriptList', 'design.ini' ) }
<script language="JavaScript" type="text/javascript" src={concat( 'javascript/',$:item )|ezdesign}></script>
{/section}

<style type="text/css">
{section var=css_file loop=ezini( 'StylesheetSettings', 'CSSFileList', 'design.ini' )}
    @import url({concat( 'stylesheets/',$css_file )|ezdesign});
{/section}
</style>

On notera au passage que contrairement à ce que préconise Yahoo, le JS est chargé avant le CSS...

Bref, tout ça est remplacé par :

{ezoescript(    ezini( 'JavaScriptSettings', 'JavaScriptList', 'design.ini' ),
                        true, 'text/javascript', 'javascript', 3 )}
{ezoecss(       ezini( 'StylesheetSettings', 'CSSFileList', 'design.ini' ),
                        true, 'all', 'text/css', 'stylesheet', 3 )}

ezoecss

ezoecss va récupérer toutes les CSS pour n'en faire qu'une. Cette dernière sera stockée dans le cache et sera de la forme 1 ligne par feuille CSS.

ezoescript

Malheureusement ezoescript n'est pas un vrai minifier JS au sens strict du terme. En effet, point de code sur une seule ligne ni de renommage des variables et fonctions. ezoescript se contente de supprimer les sauts de ligne et les commentaires avant de stocker le fichier en cache. L'avantage c'est qu'il ne présente aucune contrainte de codage pour fonctionner (jusqu'au niveau 2 du moins). J'ai cependant émis sur les forums la suggestion de le coupler à un vrai minifier et André R. ne semble pas fermé à ce genre d'idée...

Déçu de ne pas pouvoir faire joujou avec ces 2 opérateurs sur fedora-fr, je les ai utilisé sur un projet professionnel sur lequel j'avais une problématique forte d'optimisation. Je doit avouer être satisfait du résultat.

Remarque : Si vous utilisez les réécriture d'url, attention à rajouter les lignes qui vont bien dans votre virtualhost.

Charger des javascripts distants dans le "domready" de Mootools

Guillaume Kulakowski

Certains l'avaient peut-être remarqué, depuis quelques jours, le blog ramait grave ! Les symptômes : le bandeau, qui change selon l'heure de la journée, ainsi que différentes couleurs du site mettaient du temps à s'afficher.

La faute au script de Twitter qui ralentissait le chargement de la page et reculait d'autant l'évènement domready de MooTools.

C'est après avoir posé la question sur les forums de MooToos que la solution c'est offerte à moi : construire l'élément <script> qui appelle les javascripts de Twitter dynamiquement et dans le domready, c'est à dire une fois mon design en place.

J'ai pour cela mis en place une petite fonction sur laquelle vous pouvez vous appuyer :

/*
 * Mootools : onDOMReady
 *
 * Remarque : les actions prioritaires en premier.
-------------------------------------------------------- */

window.addEvent('domready', function(){

        var nodoka                      = new Nodoka();
        var scripts             = [     /* twitter */
                                                'http://twitter.com/javascripts/blogger.js',
                                                'http://twitter.com/statuses/user_timeline/llaumgui.json?callback=twitterCallback2&count=5"' ];
        /* [ . . . ] */
        nodoka.loadJS( scripts );
        /* [ . . . ] */
}); // EODR

/* [ . . . ] */

function Nodoka() {
       
        /* [ . . . ] */

        /*
         * Ajout des Javascripts distant
         * @author Guillaume Kulakowski <guillaume_AT_llaumgui_DOT_com>
         * @since 1.0.1
         */

        this.loadJS = function loadJS( scripts ) {
               
                scripts.each(function(src){
                        var loadJS = new Element('script', {
                        'src': src,
                        'type': 'text/javascript'
                        }).injectInside(document.head);
                });
        };

        /* [ . . . ] */
       
}; // EOC

Mise en ligne de "Pratique d'ActionScript 3" !

Alexandre Frandemiche

cover_Pratique_AS3Bonjour,

voici mon premier billet sur le blog de Slobberbone, il ne concerne pas une astuce fedora du week end (but pour lequel je suis au départ devenu rédacteur sur ce blog) mais traite de la sortie depuis quelques jours d'un ouvrage de grande qualité sur l'AS3 (ActionScript 3).

Pour ceux qui ne connaissent pas , il s'agit tout simplement du langage permettant de développer des applications ou des animations Flash, mais aussi Flex ou AIR. C'est un outil formidable tant au niveau de ses capacités que de son utilisation, je dirais presque indipensable si l'on veut développer des applications web orientées Rich Internet Application (RIA). (On pourra bien sûr me reprocher de ne pas évoquer OpenLaszlo, principal challenger qui a l'immence avantage d'être libre, mais qui ne bénéficie pas des 98% de pénétration du web dont dispose Flash, et donc AS3. Seulement voilà, maintenant c'est fait ^^)

Mais trève de bavardage autour d'AS3, l'auteur de Pratique d'ActionScript 3, Thibault Imbert, après avoir investi son temps et son énergie pour produire cet ouvrage, en parle beaucoup mieux que moi.

Pour des raisons que vous pourrez découvrir sur le site dédié à son livre (http://pratiqueactionscript3.bytearray.org/?page_id=2), Thibault Imbert à décidé d'en faire profiter gracieusement toute la communeauté en le mettant en ligne. Vous pouvez dès à présent accéder à son Livre au format PDF sur ce même blog.

En vous souhaitant bonne lecture,

Nagha

Pimp my Dotclear Acte II

Guillaume Kulakowski

Dotclear 2.0 RC1 arrivant à grands pas, on continue avec les exemples de mise en œuvre de ce gestionnaire de blog simple et efficace.
Après la sécurité et l'optimisation de Dotclear, aujourd'hui : les rétroliens (ou trackbacks) et les plugins pour Dotclear qui vont bien. Vous pouvez, à ce propos, consulter la liste des plugins déployés sur ce blog.

Rétroliens et anti-spam

Les rétroliens sont un super outil permettant à la discussion de dériver et de se poursuivre ailleurs. Le problème est que les trackbacks sont trop souvent victimes du SPAM et les bloggeurs ont alors tendance à les désactiver (ce qui était mon cas jusqu'à il y a peu).

La solution, pour pouvoir utiliser les trackbacks sereinement : le plugin rétrocontrôle configuré pour effacer directement les rétroliens indésirables, sans passer par la case corbeille.

Filtre anti-spam dans Dotclear

Au passage, vous constatez que, pour le moment, ma configuration anti-spam est plutôt légère, j'ai donc encore des armes pour me défendre.

Configuration de rétrocontrôle

Je n'ai pas non plus activé l'option "adresses jetables" car je ne suis pas sûr de sa compatibilité avec le plugin Static Cache.

miniSEO :

Comme le montre ce calculateur (au résultat plus que discutable je vous l'accorde), le SEO du blog frôle la perfection (97%) et ce grâce, entre autres, au plugin miniSEO qui peut être couplé avec MyMeta comme le conseille l'auteur sur le billet de support.

MyMeta

Vous l'aurez peut être remarqué, une image illustre mes billets. Cette image est soit celle associée à la catégorie du billet, soit celle d'un tag. Pour cela j'utilise le plugin MyMeta :

Configuration du plugin MyMeta

Je peux ensuite appliquer à un billet une illustration en fonction d'un tag grâce à ce template :

<tpl:MyMetaIf type="tag-illustration" defined="false">
    <tpl:EntryIf has_category="1">
        <a href="{{tpl:EntryCategoryURL}}" class="category-illustration cat_{{tpl:EntryCategoryID}}" title="{{tpl:EntryCategory}}">&nbsp;</a>
    </tpl:EntryIf>
</tpl:MyMetaIf>
<tpl:MyMetaIf type="tag-illustration" defined="true">
    <a href="{{tpl:BlogURL}}tag/{{tpl:MyMetaValue type="tag-illustration"}}" class="category-illustration" title="{{tpl:MyMetaValue type="tag-illustration"}}" style="background: transparent url(/themes/nodoka/img/tag/{{tpl:MyMetaValue type="tag-illustration"}}.png) 0 0 no-repeat;">&nbsp;</a>
</tpl:MyMetaIf>

Pages

La révision #1729 de Dotclear introduit le plugin Pages remplaçant avantageusement le plugin Related que j'utilisais jusqu'à présent. C'est maintenant "Pages" qui gère les pages suivantes :

Notez au passage qu'avec une petite règle apache, le plugin Pages peut faire correspondre une page du blog à un sous domaine :

RewriteCond %{HTTP_HOST} ^cv.llaumgui.com
RewriteRule ^index.php$ index.php/pages/curriculum [L]

Subscribe to comments

En plus du flux RSS associé aux commentaires d'un billets, natifs dans Dotclear, le plugin Subscribe to comments permet à vos visiteurs de s'abonner par email aux nouveaux commentaires.

Pimp my Dotclear ;-)

Guillaume Kulakowski

Dotclear est un logiciel simple et léger permettant de créer son blog (comme ici) ou de mettre en place une plateforme de blog pouvant héberger plusieurs blogs comme c'est le cas sur la plateforme de blog de fedora-fr.

Optimiser Dotclear

Utilisation de connexions persistantes

Ludovic en parlait sur son Blog, les connexions persistantes sont à présent directement configurables depuis le fichier config.php de Dotclear :

define('DC_DBPERSIST',true);

Cache statique

Toujours en développement, le plugin staticCache est disponible via le dépôt SVN. Il permet de générer non pas du code php comme le fait le cache de template mais de stocker du code HTML qui sera directement rendu aux visiteurs de votre blog.

Pour l'activer, ça se passe encore dans le fichier config.php

define('DC_SC_CACHE_ENABLE', true );

Sécuriser son Dotclear

La première chose à faire pour sécuriser son Dotclear est de le mettre à jour. En effet, des failles de sécurité ont récemment étaient découvertes.

La gestion des uploads

Si vous êtes le seul à utiliser votre blog, la question se pose moins, mais si d'autres personnes utilisent le système d'upload, ils pourraient très bien envoyer des fichier php sur le serveur et les exécuter. Toujours dans le domaine de la supposition, ces fichiers pourraient permettre d'inclure le fichier config.php et d'en parcourir le contenu, dévoilant ainsi les mots de passe de la connexion à la base de données. Sur un serveur très très mal configuré, ces fichiers pourraient aller jusqu'à lire des fichiers du répertoire /etc/ !

Pas de panique : depuis la révision #1714, Dotclear permet d'exclure des extensions de fichier du gestionnaire de médias et ce via la directive media_exclusion du plugin about:config (plus d'infos).

Empêcher l'upload de fichier php c'est bien, mais empêcher l'exécution de fichier php dans le répertoire public, c'est mieux. Pour cela, on configurera apache :

<Location ~ "public/.*\.php$">
     ForceType text/plain
     RemoveHandler php
</Location>

QDevelop IDE multi plateformes pour QT4

Fabien Nicoleau

Il y a encore quelques jours, j'etais totalement indécit pour développer des interfaces graphiques entre GTK+,GTKmm (C++), wxWidgets ou QT. Je les ai tous testés (vite fait, très vite fait) et connaissais déja (assez) bien QT pour l'avoir assez longtemps utilisé. Apres réflexion, je suis resté séduit par QT, pour sa richesse (du graphique ... mais beaucoup plus : xml, bdd, reseau ... ), son designer, sa portabilité ... bref. J'ai reinstallé ce bon vieux Kdevelop sous Linux, et ai mis wxdesign (dev-cpp avec wxWidgets) sous windows que j'étais content de voir repris (et plutôt bien), et ai refais des petits tests. Puis en trainant sur des forums, j'ai découvert QDevelop, une IDE dédiée à QT4 qui offre la possibilité d'avoir une IDE identique, peut importe l'OS utilisé. Mais c'est loin d'être le seul avantage. 

Cette IDE récente (2006) est vraiment très agréable à l'utilisation. Dédiée à QT4, elle m'a fait oublier KDevelop (qui en plus sous Fedora a des dépendances avec les bibliothèques de développement QT3). Outre les options habituelles, d'autocompletion du code et de coloration syntaxique, il se distingue par sa compilation en tâche de fond du code permettant de voir au fur et à mesure ses erreurs (quand il y en a ;)). Enfin le lien avec QT4 est bien présent, notemment dans la gestion du projet, permettant très facilement de passer à QT4-Designer, d'intégrer de nouvelles UI et d'accéder au slots dispos d'un widget (ca, j'ai adoré). J'ai découvert ce soft il y a deux jours, il m'est donc difficile d'en faire une dexcription détaillée, mais en tout cas j'ai été séduit et l'ai adopté. J'ai fait une création de projet sous linux, et hop intégration sous windows. Tout s'est bien passé. De plus, petit cocorico, ce soft est développé par un français. J'ai pour le moment regretté un mode debugging un peu moins bien fait (en tout cas dont j'ai moins l'habitude) que sous kdevelop. Cependant il ne faut pas oublier que QDevelop est très jeune.

EDIT : après utilisation, j'ai en fait retrouvé tout ce qu'on utilise habituellement pour le déboguage, dont l'inspection des variables.

Voici la fenêtre permettant de choisir les slots à implémenter pour un widget :

 

Enfin, ce que j'apprécie vraiment, est que le fichier "projet" généré par ce soft est simplement le fichier "pro" utilisé pour qmake. Cela permet de ne pas avoir tout un tas de fichiers inutiles, et de faire une distribution légère des sources et simple à compiler. Un projet que je compte suivre, et peut-être packager (il me semble qu'il n'y a pas encore de paquets pour Fedora).

Site officiel : http://qdevelop.org/

Fabien

Optimiser ses javascripts : le cas de mootools

Guillaume Kulakowski

Avec le nouveau thème du blog, Nodoka, c'est posé la question de l'optimisation des javascripts. En effet, mootools c'est bien, mais c'est lourd : 87Ko pour la version complète !

J'ai donc essayé les différents moyens de compresser du javascript et j'en ai fait un tableau comparatif.

Comparatif des différentes méthodes de compression du code javascript

Les tests suivants sont effectués à partir de la version complète de mootools 1.11.

Full Sans les commentaires JSMin YUI Compressor packer
180Ko 87Ko 73Ko 65Ko 41Ko

Comme le démontre le tableau, la meilleure méthode de compression semble être packer. Mais après une discussion sur le chan #mootools (serveur freenode.net), il semblerait que packer souffre de 2 problèmes :

  • problème avec les regex (pas tout compris à la démonstration : barrière de la langue ;-) )
  • moins compressible que YUI

C'est pour ça que mootools utilise YUI Compressor et j'ai donc suivi cette préconisation sur mon blog.

Pourquoi compresser du javascript pour gagner quelques malheureux kilo octets ?

Aller plus loin

Mais les 65Ko obtenus avec YUI Compressor ne sont pas une fin en soit. Il est ensuite possible de compresser le JS pour en faire un gzip. Attention : je ne parle pas de faire consommer du CPU pour compresser à la volée, mais de compresser une fois pour toute :

cp moootols.js mootools.jgz
gzip -9 mootools.jgz
mv mootools.jgz.gz mootools.jgz

Ensuite on modifie l'inclusion de la librairie :

<script src="/themes/nodoka/js/mootools.jgz" type="text/javascript">

Et on effectue un petit réglage sur son serveur pour penser à ceux qui ne supportent pas la compression Gzip :

# JGZ (compression JS)
RewriteCond %{HTTP_USER_AGENT} ".*Safari.*" [OR]
RewriteCond %{HTTP:Accept-Encoding} !gzip
RewriteRule (.*)\.jgz$ $1\.js [L]
AddType "text/javascript;charset=UTF-8" .jgz
AddEncoding gzip .jgz

Voila au final mootools complet ramené de 87Ko à 19Ko.

Utiliser mootools dans Dotclear 2.0

Guillaume Kulakowski

Dotclear, le gestionnaire de blog, dans sa version 2.0 (dont la RC1 devrait pointer le bout de son nez le 1er mai) utilise jQuery comme librairie javascript. Notons au passage que l'utilisation d'une telle librairie permet de gagner un temps de développement précieux et d'éviter d'éventuels problèmes de compatibilité entre les différents navigateurs.

Actuellement, l'utilisation du javascript dans le thème par défaut (Blowup) se limite à la gestion du cookie de la case "Se souvenir de moi sur ce blog".

J'aime beaucoup jQuery (je m'en suis servi dans mon précédent thème et sur d'autres projets) mais professionnellement j'utilise beaucoup mootools et j'ai acquis des facilités avec ce framework.
Pour mon dernier thème, Nodoka, c'est donc mootools que j'ai retenu et j'ai donc eu à entreprendre de porter le code de la gestion des cookies de jQuery vers mootools.
Histoire de vous faciliter la vie si vous aussi vous souhaitez utiliser mootools dans vos thèmes Dotclear, je vous mets mon bout de code à disposition ainsi que la documentation.

svn co https://svn.llaumgui.com/javascript/mootools_1.1.x/dc_remember/

On remarquera qu'il y a 2 fichiers : un fichier source avec le code lisible et commenté; et une version compressée avec YUI Compressor. D'ailleur, La compression des javascripts donnera bientôt lieu à un nouveau billet.

MiKTeX package manager pour Linux

Aurélien Bompard

Il y a plusieurs personnes autour de moi qui utilisent LaTeX sous Linux, et qui ne sont pas informaticiens (principalement Anne et des ami(e)s de l'École des Chartes).

Et bien il y a un truc qui manque sérieusement à la version Linux de LaTeX (TeTeX ou TeXLive), c'est le gestionnaire de paquets de la version Windows (MiKTeX). Il est aux packages LaTeX ce que le gestionnaire de paquets de la distribution est au système : il permet de lister les paquets disponibles, de les télécharger, de les installer automatiquement, de les mettre à jour, d'afficher la documentation, et tout et tout.

En fait, une version en ligne de commande est disponible, mais elle est rarement intégrée dans les distributions (tiens, faut que je la package et que je la propose chez Fedora…), et puis pour les non-informaticiens, une interface en ligne de commande ça rebute un peu.

Un portage de l'interface graphique Windows est proposé, et sera peut-être réalisé si il y a assez de dons.

En attendant, j'ai fait une petite interface graphique très très basique pour exécuter les fonctionnalités de base. Elle est en shell basé sur zenity, donc c'est vraiment basique, mais bon, ça peut dépanner. Pour l'instant je n'ai pas fait de paquet installable, mais le script est dispo ici, ou par git avec cette commande :

git clone http://aurelien.bompard.org/projects/latex/mpm-gui.git

L'objectif est de rester simple en attendant la décision sur le vrai gestionnaire de paquets, mais si vous trouvez des bugs ou si vous avez des petites fonctionnalités à ajouter je suis intéressé ! :)

Bien sûr, il faut avoir installé le “MiKTeX Package Manager”, ou mpm, compilable en téléchargeant les sources de MiKTeX. Si vous utilisez Fedora, j'ai fait un package. Je vais le proposer chez Fedora je pense, si je trouve le courage de le maintenir ensuite dans le futur pour l'éternité… (faire un package c'est facile, mais le maintenir ensuite à jamais, c'est une autre affaire)

Développement

MiKTeX package manager pour Linux

Aurélien Bompard

Il y a plusieurs personnes autour de moi qui utilisent LaTeX sous Linux, et qui ne sont pas informaticiens (principalement Anne et des ami(e)s de l'École des Chartes).

Et bien il y a un truc qui manque sérieusement à la version Linux de LaTeX (TeTeX ou TeXLive), c'est le gestionnaire de paquets de la version Windows (MiKTeX). Il est aux packages LaTeX ce que le gestionnaire de paquets de la distribution est au système : il permet de lister les paquets disponibles, de les télécharger, de les installer automatiquement, de les mettre à jour, d'afficher la documentation, et tout et tout.

En fait, une version en ligne de commande est disponible, mais elle est rarement intégrée dans les distributions (tiens, faut que je la package et que je la propose chez Fedora…), et puis pour les non-informaticiens, une interface en ligne de commande ça rebute un peu.

Un portage de l'interface graphique Windows est proposé, et sera peut-être réalisé si il y a assez de dons.

En attendant, j'ai fait une petite interface graphique très très basique pour exécuter les fonctionnalités de base. Elle est en shell basé sur zenity, donc c'est vraiment basique, mais bon, ça peut dépanner. Pour l'instant je n'ai pas fait de paquet installable, mais le script est dispo ici, ou par git avec cette commande :

git clone http://aurelien.bompard.org/projects/latex/mpm-gui.git

L'objectif est de rester simple en attendant la décision sur le vrai gestionnaire de paquets, mais si vous trouvez des bugs ou si vous avez des petites fonctionnalités à ajouter je suis intéressé ! :)

Bien sûr, il faut avoir installé le “MiKTeX Package Manager”, ou mpm, compilable en téléchargeant les sources de MiKTeX. Si vous utilisez Fedora, j'ai fait un package. Je vais le proposer chez Fedora je pense, si je trouve le courage de le maintenir ensuite dans le futur pour l'éternité… (faire un package c'est facile, mais le maintenir ensuite à jamais, c'est une autre affaire)

Développement

Comparer deux masques en C++

Fabien Nicoleau

Il est facile en C/C++ de savoir si une chaine correspond à un masque, surtout si celui-ci ne contient que des étoiles. On peut même d'ailleurs utiliser la fonction "fnmatch()". En revanche, comment comparer deux masques, c'est à dire savoir s'ils recouvrent le même type de chaîne ? Par exemple, eponyme*toto correspond il avec *toto  (utile pour comparer un masque de user IRC par rapport à un masque de ban) ? Le problème semblait difficile, et c'est "bigbourin" qui en quelques dizaines de minutes à pondu le code :

int masksMatch(char*str1,char*str2)
{  if (*str1 == 0 && *str2 == 0)
    return (1);
  if (*str1 == '*')
    {
      if (*str2 == 0)
      return (masksMatch(str1 + 1, str2));
      else
      return (masksMatch(str1 + 1, str2) || masksMatch(str1, str2 + 1));
    }
  if (*str2 == '*')
    {
      if (*str1 == 0)
      return (masksMatch(str1, str2 + 1));
      else
      return (masksMatch(str1 + 1, str2) || masksMatch(str1, str2 + 1));
    }
  if (*str1 == *str2)
    return (masksMatch(str1 + 1, str2 + 1));
  return (0);
}

La fonction renverra '1' si le masque str1 correspond au masque str2.

Bravo et merci à 'bigbourin'.

Fabien

Livre : Bien développer pour le Web 2.0 - Les exemples

Fabien Nicoleau

Dans mon billet précédent, je parlais du livre "Bien développer pour le Web 2.0". Dans ce livre sont donnés quelques exemples illustrant les possibilités du web 2.0, mais sont codés en ruby. Comme exercice perso, et pour ceux qui préferent, j'ai donc repris quasiement tous les exemples et les ai portés en PHP. J'en fait le descriptif dans ce billet et donne les sources de chaque exemple en pièce jointe du billet. L'url directe de tous les exemples est : http://nicoleau.fabien.free.fr/web2-0/

  • hi_timed, exemple basique. Cliquer sur le bouton "Bonjour" affiche le contenu d'un fichier coté serveur, alors que le bouton "Quelle heure est il?" appelle un script PHP retournant l'heure
  • sauvegarde est aussi un exemple basique. Il suffit d'entrer un mot puis de quitter la zone avec la souris (cliquer ailleurs). Un script ajax sauvegarde alors la valeur dans une session PHP, et si on recharge la page, cette valeur est affichée
  • highlight est lui un exemple utilisant aculo. Cliquer dans la zone permet de la faire flasher
  • opacity est encore un exempel aculo, y'a qu'à lire et faire :)
  • scale, l'effet aculo
  • parallel, une combinaison de opacity et sacle
  • progressbar est un retour à ajax. ne vous y trompez pas, il y a bien un dialogue client/serveur. Dans cet exemple, la valeur de progression est en fait en permanance renvoyée par le serveur, qui la fait évoluer aléatoirement, et le script js en fait ensuite l'affichage dans al progressbar. Idéal pour suivre un traitement
  • sortable_one_list mets en pratique l'utilisation du trie de list par aculo
  • sortable_two_lists, la meme chose, mais avec deux listes
  • draggable, aculo et sapuissance :). Exemple inutile
  • droppable, beaucoup plus sympa! Exemple idéeal pour une boutique, il faut ici bien aussi comprendre ce qui se passe. Lorsque vous faites glisser un élément dans votre pannier, ou que vous le faite glisser dans la corbeille, un script PHP est appellé coté serveur pour faire le compte ou le décompte. De la à remplir un bon de commande virtuel, il n'y a qu'un pas
  • Enfin, autocompleter, couple aculo et ajax afin de géré l'autocompletion. Entrez quelques lettres d'une variable PHP $_SERVER, et le script vous propose de la completer. Enfin, sélectionnez la, et il vous en donne la valeur. Entrez "REMOTE_ADDR" pour voir votre adresse IP

Voilà, en espérant que ca donne des idées à certains. N'oubiez pas les pièces jointes pour avoir les sources.

Fabien