Tag: Opensource

Opensource : marketing…et argument de vente

Posted by – February 9, 2009

[EDIT] Mea culpa, il semble que j’ai eu un jugement un peu trop hâtif concernant XWiki et son modèle de développement. Les 3 commentaires, dont 2 de la société XWiki nous expliquent et infirment ma critique sur ce qui ne me semblait pas être de l’Opensource, ce qui est bien entendu erroné , suite à ces explications et les *bons* liens, c’est bel et bien un projet Opensource. Honte à moi de ne pas avoir plus poussé mes recherches, d’autant plus que XWiki paraît être un très bon produit, on mettra ça sur le coup de la fatigue ou de la vieillesse. Je comprends tout à fait votre “colère” et ce sentiment d’injustice face à ma grossière erreur d’appréciation. A ma décharge, c’est vrai qu’entre le .com et le .org, l’erreur est rapide. Egalement, je n’entends pas Opensource = gratuit (contrairement à beaucoup de personnes), beaucoup de sociétés font commerce, par les services ou des versions améliorées d’un produit, et c’est tant mieux, il faut que vive le business, je n’ai pas de souci avec ça. Avec toutes mes plates excuses pour ce billet vous concernant en tout cas. J’enlève le texte qui remet en cause votre produit. Le débat n’en reste pas moins réel quant à l’argument marketing sur certains produits dits Opensource. 

More

Links #1 : Lucene.NET

Posted by – June 2, 2008

J’inaugure un nouveau type de billets : mettre des liens sur des sujets techniques ou technologiques, sur des problématiques bien précises, et souvent sur ce que je suis en train de réfléchir.

Il y aurait bien le flux de ma liste de partage Google Reader mais je ne partage pas forcément toutes mes lectures (ça en ferait trop), ou bien également mon delicious (204 pages de favoris depuis décembre 2004 !…), mais tout serait mélangé, et sans possibilité de commenter les trouvailles de la semaine ou du jour.

Commençons par :

Plusieurs objectifs à ce type de billet :

  • partager toujours plus les nouvelles technos
  • faire patienter quand j’ai du mal à finaliser certains billets
  • m’en servir comme pense-bête (ressources)

Y’a plus qu’à…

LightTPD, FastCGI, Rails, et accessoirement cache APC

Posted by – January 18, 2008

changement de serveur Web : Mongrel vers LightTPD

Peu convaincu à force par Mongrel (serveur Web pour rails), en raison de l’excès de mémoire consommée (leak ?) voire du CPU par moment, le blog a été transféré vers LightTPD + FastCGI + Rails (Typo) afin de tenter de diminuer la consommation des ressources (primordial sur un serveur avec 377 Mo !).

La configuration /etc/lighttpd/lighttpd.conf, extrait de la partie spécifique pour Rails (Typo) :

server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_fastcgi"
)

$HTTP["host"] == "192.168.1.150" {
server.document-root = "/var/www/typo/public"
server.error-handler-404 = "/dispatch.fcgi"
server.indexfiles = ("dispatch.fcgi")
accesslog.filename = "/var/log/lighttpd/blog.access.log"
fastcgi.server = (".fcgi" =>
("localhost" =>
("socket" => "/var/www/typo/tmp/typo.socket",
"min-procs" => 1,
"max-procs" => 2,
"bin-path" => "/var/www/typo/public/dispatch.fcgi",
"bin-environment" => ("RAILS_ENV" => "production")
)))
}

Le reste n’ayant pas été changé de la configuration par défaut. L’IP 192.168.1.150 a été mise au lieu du nom du site (blog.olivier-duval.info), car il existe un frontal Apache (voir l’architecture du zorky lan) pour le reverse proxy (qui redirige vers le blog, les photos, …selon le nom du site demandé), et celui-ci passe uniquement l’IP au serveur hébergé derrière.

cache APC

En plus de Google Analytics, le blog est marqué par Phpmyvisites qui se trouve sur un autre serveur virtuel, dédié au PHP. Sur ce dernier, un cache APC a été installé, cache qui permet d’accélérer les pages PHP, tout gain, même minime, reste appréciable. Un tutoriel pour l’installation (et compilation) d’APC.

quid LightTPD

L’efficacité maximum de LightTPD est obtenue sur les fichiers statiques : 17 000 req/s contre 7 000 req/s pour Apache 2, chiffres obtenus avec ab (ab -k -n 50 http://monsite/page.htm).

Egalement LightTPD s’avère efficace pour des applications Web PHP (en mode php-cgi) ou Perl, pour l’avoir mis en place et testé.

A voir à termes si ce changement de serveur Web sera profitable.

Debian, FreeTDS et SQL Server

Posted by – January 17, 2008

Contexte

Lorsqu’on travaille dans un environnement hétérogène composé de plateformes Windows et Linux, il peut s’avérer utile d’accéder à partir d’un serveur Unix à un serveur de base de données de type SQL Server (2000, 2005, …), j’aime l’interop…

Le développement de SQL Server est notamment né à l’origine de la collaboration entre Microsoft et Sybase. Le protocole de communication utilisé pour les échanges clients/serveur se nomme TDS, et sa version Opensource FreeTDS, avec une communauté toujours active.

Dans notre environnement, nous utilisons le serveur de listes SYMPA. Ce dernier permet de synchroniser les [emails des] membres des listes qu’il gère avec une base externe (synchro automatique toutes les n minutes, ou lors de l’envoi d’un message). Dans notre système d’information, celle-ci est une base SQL Server qui est utilisé par la plateforme d’applications mais aussi par le serveur de listes (en consultation ou en insertion).

Debian, installation

Sous Debian, le paquetage à installer est libct3 :

apt-get install libct3

Le paquetage installe le tout dans le répertoire /etc/freetds.

Configuration

Le fichier freetds.conf est une base de départ. Parmi les paramétrages intéressants, nous avons la section globale ([global]), où l’on peut varier la version du protocole à utiliser (selon le serveur SQL Server en face), fixer explicitement l’encodage à utiliser pour la communication client/serveur, ou créer des sections (de la forme [masection]) spécifiques à vos serveurs SGBD (IP d’accès, protocole, port, …).

Pour un dialogue avec un SQL Server 2000, en UTF, ci-après, un exemple de configuration freetds.conf :

$ less /etc/freetds.conf

[global]
# TDS protocol version
tds version = 8.0
client charset = UTF-8
# si besoin de traces
; dump file = /var/log/freetds.log
; debug level = 10

# si besoin de gérer les timeout d'exécution des commandes SQL et du timeout de connexion
; timeout = 10
; connect timeout = 10

[monserveur-sql]
host = 10.75.40.31
port = 1433
tds version = 8.0

Dans le client (Perl, PHP, …) qui utilisera FreeTDS, celui-ci fera appelle au libellé du serveur défini dans freetds.conf, ici monserveur-sql, cela a l’avantage d’abstraire l’IP réelle.

Exemple de client en Perl

Le but de ce programme est de lire un mail stocké sur le disque, de le parser, et d’inscrire les divers éléments (entêtes, corps, …) qui le composent dans une table en base SQL Server.

 use DBI; use Encode; use lib '/home/sympa/bin'; use Log; # infos. sql # le nom du serveur du freetds.conf my $server = "monserveur-sql"; my $user = "loginsql"; my $pwd = "pwdsql"; my $bdd = "mabase"; sub encoding { my $body = shift; &Encode::encode_utf8($body); } sub msgtosql { my $file = $ENV{'PATHMSG'}; my $adrlist = $ENV{'LISTADDR'}; my $listname=''; my $domain=''; my $bodyencode=''; if ($adrlist =~ /^(.*)\\@(.*)$/) { $listname = $1; $domain = $2; } else { &do_log('err',"Match of list address '$adrlist' failed"); return undef; } # lecture du message (fichier texte) # et prise en compte des champs a inserer dans la base my $parser = new MIME::Parser; $parser -> output_to_core(1); my $msg = $parser -> parse_open("$file"); my $head = $msg -> head; my $body = $msg -> body_as_string; my $hdrall = $msg -> header_as_string; my $hdrdate = $head->get('Date'); my $hdrfrom = $head->get('From'); my $hdrsubject = $head->get('Subject'); my $hdrto = $head->get('To'); my $messageid = $head->get('Message-Id'); $bodyencode = $body; $dbh = DBI->connect("dbi:Sybase:$server","$user","$pwd") or die 'connect'; $dbh->do("use $bdd"); # insertion du message en base $SQL = sprintf "INSERT INTO msgs (body,creatstamp,hdrall,hdrdate,hdrfrom,hdrfromspc,hdrsubject,hdrto,list) VALUES (%s,getdate(),%s,%s,%s,%s,%s,%s,%s)", $dbh->quote($bodyencode),$dbh->quote($hdrall), $dbh->quote($hdrdate), $dbh->quote($hdrfrom), $dbh->quote($hdrfrom),$dbh->quote($hdrsubject),$dbh->quote($hdrto),$dbh->quote($listname); # on test l'insert, si catch alors on force l'encodage a utf-8 # l'erreur vient de freeTDS qui ne pt encoder (via iconv) directement en UTF-8, ne connaissant pas parfois l'encodage origine # pas d'encoding automatique car des msgs peuvent etre deja en utf-8 { # trap die pour logguer l'erreur SQL local $SIG{'__DIE__'} = sub { do_log('err',$_[0]); die $_[0]; }; eval { $dbh->do($SQL) || die "Error SQL $DBI::errstr"; }; if($@) { do_log('notice',"[catch sql] try to encode in utf-8..."); $bodyencode = &Encode::encode_utf8($body); $SQL = sprintf "INSERT INTO msgs (body,creatstamp,hdrall,hdrdate,hdrfrom,hdrfromspc,hdrsubject,hdrto,list) VALUES (%s,getdate(),%s,%s,%s,%s,%s,%s,%s)", $dbh->quote($bodyencode),$dbh->quote($hdrall), $dbh->quote($hdrdate), $dbh->quote($hdrfrom), $dbh->quote($hdrfrom),$dbh->quote($hdrsubject),$dbh->quote($hdrto),$dbh->quote($listname); unless($dbh->do($SQL)) { do_log('err',"Error $DBI::errstr for $SQL"); } } } $dbh->disconnect; return 1; } do_openlog("LOCAL2", "unix", 'archivetosql'); &msgtosql();  

Au passage, un excellent site sur Perl, sur tous les sujets du langage.

Conclusion

Lorsque dans un système d’information, il cohabite un grand nombre de serveurs hétérogènes, le portage de protocoles peut-être un moyen de faire communiquer les systèmes. Une autre solution, de plus en plus répandue, est l’utilisation des services Web (SOAP, REST, …), dans une approche SOA.

Ressources

Quelques ressources sur le sujet.

JRES 2007 : l’ensemble des sessions : PDF, vidéos

Posted by – December 28, 2007

Les JRES 2007 livre le résultat des rencontres de novembre 2007.

Les sessions abordent bon nombre de sujets : opensource, réseau, système, sécurité, standards, disponibles au format PDF (diapo, article), ou en vidéo MPG4.

Pour rappel, les JRES sont les journées réseaux de l’enseignement supérieur.

Livres blancs : CMS, bonnes pratiques, frameworks PHP, référencement, .NET, …

Posted by – December 19, 2007

Smile propose 10 livres blancs sur des thèmes très intéressants :

  • CMS opensource (Drupal, Joomla, EzPublish, …)
  • frameworks PHP
  • 100 bonnes pratiques du Web
  • conception d’applications Web
  • virtualisation opensource
  • .NET

Laissez vos coordonnées, et vous recevrez directement le PDF du livre blanc souhaité, cela se passe sur leur site

Prototype et Scriptaculous compressés

Posted by – December 3, 2007

Prototype et la librairie Scriptaculous pèsent à elles-seules au bas mot 150 ko : 100 ko pour Prototype et le reste selon l’usage de Scriptaculous (effets, contrôles, …). Aussi, il reste toujours intéressant d’optimiser1 un peu le chargement d’une page en prenant une attention particulière sur les éléments suivants : cache (serveur, client, pages, portions de page), viewstate, images, CSS, et javascript.

Pour le dernier point2, le groupe Prototype Core offre une version compressée des 2 librairies, réduisant ainsi leur utilisation à 80 ko, c’est à dire 50 % de leur poids initial.

A l’heure actuelle, nous utilisons la version protopacked_v2.16b.zip3, celle-ci couvre les versions 1.5.1.1 (packer) de Prototype et 1.7.1 b3 (packer) de Scriptaculous. Une version sous forme d’un seul fichier pour les dernières versions est disponible (non testée pour ma part) : protoaculous1.6.packed.js

Publicité : un livre vient de sortir (en anglais) sur les toutes nouvelles versions des librairies (1.6.0 & 1.8.0), écrit par un français (Christophe Porteneuve), plus d’informations ici.

1 promis, dès que le temps me le permet, j’écris un article sur l’optimisation du développement Web, le temps, toujours le temps qui manque ;)

2 on pourrait aussi bien utiliser un module de compression par exemple, qui compresserait à la volée les JS. Dans notre cas, ce module est déjà utilisé, mais la version de l’époque ne permettait pas la compression des JS, mais uniquement du flux d’une page aspx.

3 tourne maintenant sur notre plateforme depuis quelques mois sans encombre

Timeline : linux, navigateurs

Posted by – November 2, 2007

Un peu d’histoire ne fait jamais de mal et en plus ça [me] donne un coup de vieux d’un seul coup, et de bons sourires en y repensant :

Timeline Webbrowsers (la version tableau) : cela nous rappellera de bons souvenirs de bataille entre IE et Netscape, où les sites se faisaient presque en double exemplaires, où le javascript est était un casse-tête pour le développeur. Cela s’est calmé depuis quelques années déjà, grâce ou à cause de IE 6.x qui a stagné pendant longtemps, fini la course, bienvenue dans le monde du (presque) respect des standards.

Timeline Linux distributions (tiré de GNU/Linux distro timeline, une autre version sous forme de tableau): vivement l’année prochaine…cela fera 15 ans (sic) où je fis ma 1ère installation Slackware sur mon 386 sx 25150 disquettes…sur un disque d’à peine 80 Mo…la compilation du noyau mettait au moins 2 heures 1/2, fallait pas se louper. Pas grand chose de changé tout compte fait, sauf qu’il existe toujours plus de matériel compatible avec notre Tux favori.

[EDIT] Timeline des langages de programmation (vu sur FredZone ).

1 heureusement que je l’avais overclocké à 44 Mhz ;)

Paris on Rails édition 2007 : inscriptions ouvertes

Posted by – October 23, 2007

C’est ici, 70 € au lieu de 100 € si inscription avant le 15 novembre.

J’avais bien aimé l’édition 2006, mais il faudra que j’achète un MacBook pour cette édition ;)

smtp, dns, listes : des communautés d’experts

Posted by – October 16, 2007

Depuis de nombreuses années, je suis abonné à une multitude de listes de diffusion sur le serveur du CRU qui aborde un tas de sujets passionnants.

3 listes retiennent mon attention, par leur contenu techniquement élevé et riche d’expertise, je ne peux que conseiller, si le sujet vous intéresse, de vous y abonner ou au moins de parcourir les archives :

  • smtp (archives)
  • dns (archives)
  • sympa (archives) : un coup de coeur pour ce moteur de listes ;) : le CRU distribue environ de 600 000 à 1 million de mails par jour, rien que pour ça, ça mérite d’être cité.

Bonne lecture.