Month: April 2007

Lightbox extension : copier/coller d’un texte

Posted by – April 29, 2007

Objectif (pourtant simple…)

A partir d’un formulaire, le but est de remplir 2 champs par un “Copier/Coller” à partir d’une modal. Dans notre cas, selon un intitulé (de poste), on propose à l’utilisateur des choix de libellés qui s’en rapprochent. Celui-ci clique alors sur celui qui lui convient, puis a la possibilité de copier les missions/profil de la fiche qu’il a choisie : le but étant de faciliter la recopie de texte.

Formulaire initial avec les 2 champs à remplir automatiquement :

Champs initiaux à remplir

Suite à la saisie d’un libelle (de poste), l’utilisateur peut choisir parmi un ensemble de proposition, lors du clic, une modal s’ouvre avec la fiche afférente au poste :

Sélection d’un libellé

Sur la fiche de poste, l’utilisateur peut cliquer sur copier, ce qui a pour effet de fermer la modal et de recopier les 2 champs Missions/Profil dans les 2 champs du formulaire initial.

Modal de la fiche poste

Champs recopiés

Défaut

Lors de la recopie, on copie les innerHTML des 2 éléments <p> vers les 2 textarea (elt.value). Le contenu peut contenir du HTML qu’il faut enlever pour la textarea destinatrice. Egalement les <br/> contenus dans les innerHTML sont à remplacer par des \
(sinon cela serait illisible).

Constat : IE parait rendre <BR _extension=”true”> au lieu des <br/> contenus dans innerHTML de l’élément.

Explications

J’ai étendu la classe Lightbox (perfectible d’ailleurs au niveau de sa conception1) afin de permettre notamment une copie d’un contenu (d’un bloc <p> avec du contenu issu d’une précédente saisie, avec du HTML) vers une <textarea> (ou un <input type=”text”>), ce qui oblige à remplacer les <br/> par des retours chariots (\
) pour une meilleure visibilité.

Lightbox permet d’étendre assez facilement les comportements, en appliquant des handlers (utilisation de l’attribut rel=”fonction” aux éléments <a> marqués par une classe lbAction), j’ai donc utilisé cette possibilité pour simuler un copier/coller.

Le code se traduit par :


var modal = Class.create();
modal.prototype = Object.extend(lightbox.prototype, {
initialize: function(ctrl) {
this.content = ctrl.href;
this.hrefid = ctrl.id;
Event.observe(ctrl, 'click', this.activate.bindAsEventListener(this), false);
ctrl.onclick = function(){return false;};
},
copy: function() {
var d = document.getElementsByClassName('dCopyContent');
var s = $('lbContent').getElementsByClassName('sCopyContent');
for(i = 0; i < s.length; i++) {
Try.these (
function()
{
//sous IE : <BR _extended=""true"">
d[i].value = s[i].innerHTML.replace(/<(br).*?\\/?>/gi,'\ ');
// fct prototype bien sympa : stripTags
d[i].value = d[i].value.stripTags();
}
)
}
this.deactivate();
},
loadInfo: function() {
var myhrefid = this.hrefid;
var valueParams = Try.these(
function() {
return $F('paramname'+myhrefid)+'='+$F('paramvalue'+myhrefid);
},
function() { return ''; });
var myAjax = new Ajax.Request(
this.content,
{ method: 'post',
parameters: valueParams,
onComplete: this.processInfo.bindAsEventListener(this)} );
}
}
);

et le code (X)HTML (exemple) :


<div id="lightbox" class="done" style="display: block;">
<div id="lbContent">
<div style="height: 500px;"><span style="margin: 0pt 10px 0pt 0pt; float: right; background-color: white;">
<a rel="copy" class="lbAction lienInterne" href="#">Copier</a> <a rel="deactivate" class="lbAction" href="#"><img style="border-style: none; width: 20px; height: 20px; vertical-align: middle;" src="/images/pict_close.gif"/></a></span><br/>

<div style="overflow: auto; height: 350px; background-color: White;" id="container">
<div style="background-color: White;" id="fichemodele">
<div id="headeroffre">
<span class="intituleposte">Conseiller(e) en entreprise</span>
</div>
<div id="fiche">
<fieldset style="width: 470px;">
<h2 class="titreParagraphe">Missions</h2>
<p class="normal sCopyContent">- Assurer les visites et contacts avec les entreprises et les conseiller dans le domaine d’hygiène, sécurité ; gestion de production<br/>- Mettre au point et valider les cahiers des charges, réaliser des études & diagnostics et/ou mettre en contact avec un spécialiste<br/>- Etablir des rapports, suivi, préconisations<br/>- Mettre sur pied des actions collectives (Plasturgia, Journée Régionale de la Prévention, SMS…)<br/>- Organiser des réunions à thèmes (sécurité, BTP…)<br/>- Instruire, monter, réaliser des dossiers d’aides financières<br/></p>
<h2 class="titreParagraphe">Profil</h2>
<p class="normal sCopyContent">- H/F 30 ans et +<br/>- Formation ingénieur avec connaissances générales en organisation de production, qualité, sécurité, hygiène, gestion<br/>- Expérience du milieu industriel indispensable<br/>- Maîtrise des outils bureautiques<br/>- Rigueur, organisation, sens de l’animation, sens relationnel<br/>- Très grande disponibilité<br/>- Permis B et véhicule exigés</p>
</fieldset>
</div></div>
</div>
</div>
</div>
</div>

Dans la méthode copy, bien que les tags utilisés soient <br/>, IE me ramenait :

 <BR _extended="true"> 

lors de la lecture du contenu elt-p.innerHTML. Aussi j’ai été obligé de rajouter ce cas dans la Regexp de substitution, qui au lieu de

s[i].innerHTML.replace(/<(br)\\/?>/gi,'\
');

devient

s[i].innerHTML.replace(/<(br).*?\\/?>/gi,'\
');

Tout ça pour dire que j’ai perdu pas mal d’heures avant de m’apercevoir qu’IE modifiait le contenu du innerHTML, la substitution fonctionnant bien sous FF…bref ;)

Si quelqu’un a une explication rationnelle, je suis preneur.

1 Le principal reproche étant que l’auteur ait intégré la fonction initialize() et son appel dans le même fichier lightbox.js, cela aurait été plus judicieux de l’incorporer dans un autre, cela pour assouplir la possibilité d’extensibilité de la classe.

Environnement : mes petits gestes

Posted by – April 22, 2007

Chez nos cousins d’amérique du nord, en ce jour de la Terre un billet sur mes gestes pour l’environnement. Lorsque l’on parle de gestes, il ne s’agit pas de couper brutalement ses habitudes mais tout simplement dans la mesure du possible d’en changer au fur et à mesure. Il est utopique d’appliquer chaque jour toutes les restrictions mais il est envisageable par de petits gestes, qui à plusieurs en font des grands, de pouvoir changer le cours des choses et de préserver notre Terre en devenant acteur et non plus spectateur.

Mes petits gestes de tous les jours, que j’essaie d’appliquer :

  • lorsque je me brosse les dents, je coupe l’eau et ne la laisse pas s’écouler le temps du brossage, elle est là juste pour me rincer la bouche.
  • je ne prends que des douches.
  • lorsque je fais la vaisselle, je lave puis je rince, sans faire couler l’eau continuellement. Maintenant, j’ai un lave vaisselle que je fais tourner 2 fois par semaine.
  • pratiquement toutes mes ampoules sont à basse consommation, mais il en reste à changer ! Je coupe les lumières que je n’utilise pas.
  • pour le ménage, j’évite les lingettes jetables ou tout accessoire du même type.
  • je recycle mes piles grâce à Monoprix qui propose de les reprendre, ou j’en prends des rechargeables.
  • j’ai un thermométre qui m’indique à chaque instant la T° de l’appartement : ne pas dépasser 19/20° et je coupe la chaudière le cas échéant si celle-ci dépasse ces T°. J’envisage aussi d’installer un thermostat programmable pour éviter de chauffer la journée où je ne suis pas là.
  • tous mes robinets sont des mitigeurs.
  • je ne bois que de l’eau du robinet.
  • toutes mes ampoules sont économiques
  • je compense mes voyages en avion en faisant des dons
  • je trie mes ordures ménagères : la poubelle jaune pour tout ce qui est recyclable. Je mets dans le container approprié (vert) mes bouteilles ou verres de toute sorte.
  • je ne prends pas la voiture pour aller au travail mais le métro.
  • je coupe les veilles quand je suis absent, et quand je pars en vacances, je coupe ce qui peut l’être.
  • j’adopte une conduite souple lorsque je conduis ma voiture.
  • au travail, je m’efforce de recycler le papier.

Tout est perfectible, on peut toujours améliorer ses gestes, voilà ce qui reste à améliorer :

  • remplacer totalement mes ampoules.
  • compenser mes voyages en avion par des dons à des projets d’environnement.
  • demander une imprimante recto-verso au travail.
  • mettre le thermostat que j’ai acheté.
  • faire plus attention aux équipements électriques.

Quelques sites sur le sujet :

Défit pour la terre : les bonnes pratiques environnementales

Action carbone : pour compenser ses émissions de CO²

Le pouls de la planète : les émissions en CO² des pays

A vous, quels sont vos petits gestes pour notre Terre ?

Sony DSC-71 et 7 000 photos plus tard…

Posted by – April 18, 2007

…j’ai fait chauffer la CB pour investir dans un réflex numérique, j’ai nommé le Canon 400D.

400D et objectifs

Quelques impressions à chaud :

  • La différence est de taille avec le compact, aucune chance avec celui-ci de jouer avec la profondeur de champ par exemple
  • Bonne prise en main de l’appareil, assez ergonomique dans l’ensemble
  • Les 1ères photos me plaisent
  • L’apprentissage demande de l’entrainement, et donc des heures ;) il est conseillé de lire le manuel, bref, comme tout, le temps affinera la technique.

Heureux des premiers essais, je vais enfin avoir quelque chose à raconter sur EOS numerique ;)

Pour l’achat, les différents éléments ont été achetés chez plusieurs revendeurs :

A termes, je pense investir dans le Tamron 28-75 ou le Tamron 17-50 pour remplacer le kit de base.

A suivre, pour ce nouveau domaine à conquérir !

Les 1ers essais

Mon couteau Suisse de Blogger

Posted by – April 15, 2007

Il est d’usage d’expliquer comment on a monté son blog (ou sa plateforme avec ses 4 milliards de services), une sorte de fiche pratique du Blogger, à destination des candidats au Blogging, ça peut donner aussi des idées qu’on aurait loupées.

Hébergement

Matériel & ligne Internet

Je m’héberge chez moi, sur un tout petit PC récupéré. Mon fournisseur Internet (et pour la télé) est Noos, et ce depuis presque 8 ans Free. En cette année 2007, cela faisait parti de mes bonnes résolutions : arrêter d’héberger mes différents sites (Blog, photos, …) sur Free & co, et mettre en place un serveur avec des noms de domaines personnalisés, freedom !. Pour l’instant je n’ai pas la prétention de faire des milliers de visites, l’upload que propose Noos suffira (70 ko), si le besoin s’en fait sentir, j’aviserai le moment venu. La seule chose à faire pour l’instant, c’est d’augmenter la mémoire du PC : 396 Mo, c’est trop juste.

Système et logiciels

Le système utilisé est une Debian Etch qui fait office de host avec 4 serveurs virtuels (guest sous VServer) installés dessus. Le host joue le rôle de passerelle (Web, SMTP) vers les serveurs virtuels1. La virtualisation (l’avenir !) permet de cloissonner les services (par serveur) afin de mieux les gérer : 1 serveur dédié (on sait exactement ce qui tourne dessus) facilite la mise à jour et la gestion, les sauvegardes, et dans l’absolu permettre l’accès à un tiers à un serveur dédié.

Chaque serveur se trouve sur une partition lvm (lvm2).Cela permet d’abstraire le disque physique de la partition d’installation : augmenter la capacité disque d’une partition devient plus simple par l’ajout d’un disque physique, la gestion globale également, essayer LVM c’est l’adopter !

Répartition des serveurs :

  • host : Apache 2.0 + proxy, Sendmail 8.13
  • guest Rails : Pen + Mongrel_cluster : pour les applications Rails : Typo, …
  • guest PHP : pour les applications Php : PhpWebgallery, DokuWiki, …
  • guest Sympa : pour les listes de diffusion : Sympa, Sendmail, Apache - en cours
  • guest MySQL : mysql 4.1 qui héberge l’ensemble des bases de données applicatives

1 La mise en place d’un VServer est assez simple, je ferai un billet dès que j’ai le temps sur ce sujet.

2 Le grimoire de la Debian, un site très pratique :  Grimoire

Registrar

J’utilise Gandi pour gérer mes noms de domaine en .info (oui car j’ai pas mal d’homonymes sur la toile…et tous les .com, .fr étaient pris).

Plateforme

Pour la gestion du ou des blogs, Typo comme moteur, MySQL pour la base.  Comme je crois en l’avenir de Ruby on Rails (même si j’ai du mal à trouver du temps pour m’y m’être réellement), autant promouvoir des logiciels développés avec ce framework. Typo répond à mes besoins, et propose un éventail intéressant de fonctionnalités et d’extensions assez souples dans leur intégration (Textile, thèmes, éditeurs en ligne, …), du respect des standards, ou autres plugins intégrés pour l’utilisation d’autres services (Amazon, Flickr, Delicious, …). Pour l’édition des billets, soit directement en ligne sous Typo, soit avec Windows Live Writer (mais sans conviction…).

Statistiques

Sitealizer qui sera inclus dans Typo, il fournit un minumum d’informations sur les visites, suffisant pour l’instant. Pour plus de détails, j’ai opté pour Google Analytics, ainsi que MyBlogLog à titre d’essai. Ces 2 derniers fonctionnent grâce à du code Javascript à inclure en base de page HTML. Pas encore eu le temps de mettre en place AWStats qui reste un formidable analyseur de logs.

Outils de syndication

Côté client Windows, cela fait bien plus de 3 ans que j’utilise SharpReader pour gérer mes flux RSS/Atom et plus récemment Feedreader. Import/Export OPML, abonnement/désabonnement simple, je l’ai nommé comme application dans Firefox pour les syndications.

Du côté client Web, l’incontournable Netvibes, dans lequel je mets les blogs que je préfère, ainsi que d’autres services bien pratiques : Météo, journaux, mails, programme TV (sic), …

del.icio.us tags: , ,

 

Technorati tags: ,

 

Publier dans Typo : Flock, Windows Live Writer

Posted by – April 12, 2007

La publication d’un billet dans Typo (Typosphere) peut s’effectuer directement en ligne, par l’intermédiaire de l’interface de gestion du contenu. Cette édition permet un rendu dynamique du billet en cours de réalisation mais cela reste une édition Web avec les défauts que cela comporte :

  • certaines lenteurs,
  • usage moins simple qu’un client sur le poste,

Certains clients permettent une amélioration de l’édition des billets, directement sur le poste de travail, avec un aperçu WYSIWYG.

Flock, le spinoff de Firefox, est un navigateur dédié au Web 2.0 (ie : “social web browser”). Parmi ses fonctionnalités (photos, …), il embarque un petit éditeur de Blog, par le menu : Tools -> Accounts and services -> onglet Blogging

Interface de gestion des blogs

 

Configuration API

Il suffit alors d’ajouter votre blog à gérer, l’API utilisée par Typo est MovableType, Flock détecte automatiquement l’URL de gestion XML-RPC (http://votreblog/backend/xmlrpc), après avoir entré votre compte admin et mot de passe. Flick supporte bien sûr d’autres API, telles que Blogger, WordPress, … une fonctionnalité qui me parait intéressante, c’est l’ajout automatique en bas de billet pendant la publication sur le blog d’un billet, d’une liste de tags qui pointent sur Technorati par exemple, nous sommes en plein dans le social bookmarking ;)

L’éditeur est des plus simple, mais cela peut rendre service :

Editeur Flock

Autre éditeur que je teste, c’est Windows Live Writer , un éditeur WYSIWYG de Blog, un peu plus puissant et fonctionnel que l’éditeur de Flock.  Celui-ci permet d’avoir un historique des billets déjà postés, voire de les rapatrier dans l’éditeur, pour les modifier par exemple. La prise en compte du thème utilisé est aussi pris en compte.

Parmi la gestion des billets intégrée, un mode brouillon permet de sauvegarder son billet pour le reprendre plus tard, contrairement à Flock qui sauvegarde en tant que page HTML, ce qui n’est pas le plus optimal pour le retrouver par la suite. L’outil sauvegarde comme dans un projet, tous les billets ou brouillons déjà écrits, pratique pour gérer ses écrits ;)

Il permet aussi l’upload automatique des images insérées dans le billet, cela évite encore une fois l’utilisation de l’interface Web de Typo.

Comme Flock, Writer permet d’insérer des tags liés à d’autres serveurs tels que Technorati, del.icio.us & consorts.

Editeur Writer Live

Seule ombre au tableau pour ces 2 outils, concerne les filtres utilisés par Typo : non prise en charge du langage de balise Textile par exemple (facilite la vie du blogger !).

Malgré cela, les outils d’éditions permettent d’écrire une 1ère version brouillon d’un billet de façon simple et rapide, pour ensuite faire la mise en forme directement sur l’éditeur en ligne du serveur de blog.

A vos blogs, partez !

Technorati Profile

Astuce Visual Studio 2005 : Bien structurer sa solution…

Posted by – April 11, 2007

…quand celle-ci dépasse 90 projets ;)

VS 2005 solution

Pour mon travail, où nous développons sur une plateforme .NET, nous sommes amenés à gérer jusqu’à 90 projets dans la solution VStudio. Un projet peut être juste une librairie, jusqu’à l’application Web, et au bout d’un moment cela en devient illisible sur l’IDE. Aussi, je vous conseille de créer des “répertoires de travail” dans la solution, qui permettent d’organiser un peu mieux le tout, voire de compiler uniquement le projet sur lequel vous êtes en train de travailler. Cliquez sur l’image écran de mon espace de travail à titre d’exemple.

Répartition de charge : Pen + mongrel_cluster

Posted by – April 10, 2007

N’ayant pas Apache 2.2 mais la 2.0 sur le VServer qui héberge Typo, je ne peux utiliser proxy_balancer1 pour faire de la répartition de charge sur plusieurs serveurs Mongrel (le serveur utilisé pour l’application Typo).

Parmi les solutions, il existe pen, un petit programme qui permet de faire de la répartition HTTP ou SMTP, j’utiliserai donc celui-ci sur le serveur guest (VServer).

Si besoin, le chemin des applications téléchargées grâce à gem2 :

$ export PATH=$PATH:/var/lib/gems/1.8/bin/

Commande pour écouter sur le port 4000 et répartir sur 2 serveurs, chacun ayant son port (3001 et 3002 dans ce cas) :

$ pen -r -a -H 4000 192.168.1.150:3001 192.168.1.150:3002

Configuration3 de mongrel_rails (pour écoute débutant du port 3001 + 2 incréments) pour l’application cible (typo), se placer dans /var/www/typo (selon l’environnement) :

$ mongrel_rails cluster::configure -e production -p 3001 -N 2 -c /var/www/typo -a 192.168.1.150 --user www-data --group www-data

puis on le lance

$ mongrel_rails cluster::start

Une page qui explique en détail mongrel_cluster, notamment pour la mise en place du script de démarrage au boot du serveur (init.d).

Sur le serveur host qui joue le rôle de proxy, mise à jour de l’application Blog (typo)


$ cat /etc/apache2/site-enables/blog
<VirtualHost *:80>
ServerAdmin zorky00@gmail.com
ServerName blog.olivier-duval.info

ProxyPass / http://192.168.1.150:4000/
ProxyPassReverse / http://192.168.1.150:4000/
</VirtualHost>

$ /etc/init.d/apache force-reload

1 un exemple Apache 2.2 + mongrel + proxy_balancer

2 gem install mongrel mongrel_cluster—include-dependencies

3 config/mongrel_cluster.yml

Optimisation disque Vmware server qui héberge une Debian et activation DMA

Posted by – April 5, 2007

J’étais assez étonné des performances que donnait le hdparam sur les accès du disque virtuel, ~ 3 000 MB/s et 1 200 KB/s, sur un de nos serveurs de développement.

A l’aide de la console, “Setting” du serveur, onglet “Options”, section “Advanced”, cocher “Disable memory page trimming” qui améliore sensiblement les accès :

  ~# hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 22532 MB in 2.00 seconds = 11290.29 MB/sec
Timing buffered disk reads: 106 MB in 3.04 seconds = 34.91 MB/sec

Voilà qui est meilleur…Il convient aussi d’installer les “VMWare tools” qui permettent une amélioration des accès réseau et disques.

Egalement, sur les disques d’un serveur [non virtuel], il est aussi important d’activer le DMA afin d’augmenter le débit de transfert de ceux-là :

~# hdparm -d1 /dev/sda

Afin d’activer le DMA au démarrage du système, éditer le fichier /etc/hdparam.conf, qui doit contenir pour ce cas :

/dev/hda {
dma = on
}

Virtualisation

Posted by – April 4, 2007

La virtualisation devient de plus en plus une réalité en raison de tous les avantages que cela apporte, et le nombre de produits ne cesse d’augmenter : VMWare, Virtual Server, Xen, VServer, KVM, OpenVZ, …cloisonnement des systèmes, réduction du nombre de services qui permet une meilleure gestion avec une visibilité accrue, une simplification des sauvegardes ou des déploiements, font partis des avantages de la virtualisation.

Ci-après, des liens sur ce sujet, et plus particulièrement sur les solutions VMWare ESX et VServer, grâce à des fiches pratiques et retours d’expérience de la part du réseau de l’enseignement supérieur sur cette problématique.

Page des programmes des JRES 2005 avec 2 présentations sur le sujet de la virtualisation :

109 – Consolidation de serveurs avec Linux VServer & Vmware ESX

Stéphane Larroque, Xavier Montagutelli Article Présentation

111 – Restructuration et consolidation via la virtualisation

Yann Dupont, Arnaud Abelard, Jacky Carimalo, Michel Allemand Article Présentation

Livre pour le métro : “Relire le traité des cinq anneaux”

Posted by – April 3, 2007

Achat de “Relire le traité des cinq anneaux” ou aussi connu sous le nom de “Traité des cinq roues : Gorin-no-sho”.

Samouraï du XVIè siècle, Miyamoto Musashi livre ici les stratégies de son “école des deux sabres”, après une vie de combats et de batailles, à seul contre mille, invaincu des plus grands maîtres japonais.

Je conseille aussi de lire L’art de la guerre de Sun Tzu (aussi connu sous le titre des “13 chapitres”), emprunt de sagesse très chinoise malgré le thème qui pourrait paraitre belliqueux.