Paris Web 2008

J’étais, hier, aux ateliers de Paris Web 2008. Petit compte rendu des divers ateliers auxquels j’ai participé :)

Javascript De(ux) Zéro
mat nous proposait un rappel pas superflus des bases de Javascript, de ses fonctionnalités avancées, des diverses incompatibilités inter navigateurs et des évolutions du langage.

Performance Web côté client
Eric Despet et Nicole Sulivan ont pris divers sites en exemple afin de les analyser, de signaler leurs problèmes de performances et de proposer des solutions pour les corriger.

Comment rendre mes vidéos accessibles ?
Sébastien Delorme nous présentait les diverses manières de rendres des vidéos (diffusées sur le web ou pas) accessibles. Création et synchronisation de sous-titres, création et synchronisation de commentaires audio.
Application de ces sous-titres et commentaires audio dans RealPlayer et dans divers lecteurs flash.

Optimiser ses CSS
Pascale Lambert-Charreteur, assistée de Stéphane Deschamps et d’un troisième que je ne connais pas, nous présentaient diverses techniques afin de préserver sa feuille de style CSS propre, lisible et légère.

A tous ces ateliers plus intéressants les uns que les autres, il faut ajouter :
Un repas le midi avec Pascal Martin, gérant de la société Linterweb qui développe notamment Wikiwix (et plein d’autres choses en rapport avec la recherche et/ou Wikipédia).
Un repas sympa, passé à discuter de ses divers projets et de ses évolutions futures.

Puis pour finir la soirée en beauté, j’ai retrouvé tuisp, inistea, rome et sahinler pour un repas entre éditeurs dmoz.

Malheureusement, pas de photos de ce week-end à Paris. En effet, bien que j’ai mis la batterie de mon appareil à recharger jeudi toute la journée et que je ne l’ait pas utilisée entre temps, je me suis rendu compte samedi matin que je n’avais plus d’énergie.
La raison exacte de ce déchargement aussi rapide est encore un mystère. Mais que je résoudrai bientôt. Désolé, la photo de fin d’article n’est donc pas récente.



Les banques à la masse niveau sécurité

Aujourd’hui, je renouvelle l’un de mes noms de domaine. Par carte de crédit bien évidemment.
Et la, pour la première fois, ma banque, le Crédit Agricole, me demande de définir un mot de passe que je devrai apparemment retaper à chaque utilisation de ma carte.

Sur le coup, je me dis “ouah, super idée. Enfin la faille de sécurité énorme au niveau des paiements par carte bancaire sur Internet ne demandant pas de code va être corrigée”.

Je tape donc un code. Et la, surprise !
Il y a des conditions requises au niveau du mot de passe.

Mais, contrairement à ce que l’on est habitué à avoir, c’est à dire des conditions favorisant la sécurité, on a ici le contraire.

  • Le code ne peut contenir que des caractères alphanumériques.
  • Il a une longueur de 6 caractères. Pas plus, pas moins.
  • Il doit contenir au moins un chiffre et une lettre.

Rien à redire sur le dernier. C’est les deux autres qui sont nuls.
Pourquoi limiter à 6 caractères ?? Encore dire “6 caractères minimum”, je comprendrais. Mais si j’ai envie de mettre un mot de passe à 8 caractères, c’est plus sécurisé et ça coute pas plus cher.

Et pourquoi limiter aux caractères alphanumériques ? Si j’ai envie de mettre un “;” ou un “^” dans mon mot de passe, en quoi ça gène le stockage ou que ce soit ??
Les banques ont 10 ans de retard d’un point de vue sécurité. Et pourtant on ne peut pas dire que les données qu’ils font transiter ne sont pas sensibles.



Zend Framework et Mysqli

Je publie ce billet un peu rapidement comme une note car j’ai eu du mal à trouver l’information lorsque j’en ai eu besoin.

La documentation de Zend Framework n’indique que les informations de connexion pour SQLite dans app.ini.
Mais tout le monde n’utilise pas SQLite (et pour donner un avis totalement personnel, je dirais heureusement).

Voici donc les informations requises pour la configuration de MySQL dans votre application utilisant Zend Framework.

[general]
database.adapter = “MYSQLI”
database.params.host = “localhost”
database.params.username = “root”
database.params.password = “”
database.params.dbname = “myDatabase”

Et puis rien que pour le fun, Oracle :
[general]
database.adapter = “Oracle”
database.params.host = “localhost”
database.params.username = “root”
database.params.password = “”
database.params.dbname = “myDatabase”

SQL Server
[general]
database.adapter = “Pdo_Mssql”
database.params.host = “localhost”
database.params.username = “root”
database.params.password = “”
database.params.dbname = “myDatabase”

Et PostgreSQL
[general]
database.adapter = “Pdo_Pgsql”
database.params.host = “localhost”
database.params.username = “root”
database.params.password = “”
database.params.dbname = “myDatabase”



Rails : ajouter une erreur de validation

Vous le savez probablement déjà (sinon, je ne peux que vous conseiller de voir les bases de Ruby on Rails) comment il est facile de valider des données avec notre framework préféré :)

if mesDonnees.save
#Les données ont bien été sauvegardées
else
# Il y a une erreur. mesDonnees.errors la contient il n'y a plus qu'à l'afficher.
end

Après, il n’y a plus qu’à ajouter des paramètres de validation des données dans le modèle.
Mais maintenant, supposons d’autres cas de validation un peu particuliers, qui ne rentrent pas dans le cas “normal”.

Vous n’avez qu’à créer une nouvelle méthode qui valide vos données (l’exemple ci-dessous est totalement bidon) :

def validates_roxitude(*attribut)
reg = Regexp.new '/^ruby(.*?)rox$/'
self.errors.add('rox', 'Hey, Ruby ça rox. Faut le dire !') unless reg.match attribut
end

Ici, nous mettons donc une erreur sauf si le champ “monChamp” commence par ruby et se termine par rox.

Il n’y a plus qu’à forcer la validation avec cette méthode et le tour est joué !
class monModel < ActiveRecord::Base
validates_roxitude :monChamp
end



Bro Code


Note aux personnes de la gente féminine : veuillez lire l’article sur l’image à gauche et passer votre chemin.

Chez O2Sources, on aime beaucoup la série How I Met Your Mother.
D’ailleurs le mercredi, c’est le rituel, de regarder l’épisode qui a été diffusé aux Etats-Unis le lundi précédent.


Alors quand on a entendu parler d’un Bro Code (ignorants, passez votre chemin), on a sauté sur l’occasion et on a fait une commande groupée.
Nous nous sommes donc retrouvés aujourd’hui à tous venir en costard au boulot (ignorants, passez votre chemin) et à prêter serment sur le Bro Code afin de toujours respecter ses sacro-saints commandements.



Nokia e71


J’ai changé de téléphone portable il y a de cela bientôt deux semaines. Après avoir eu un Sagem myx6 pendant plus de deux ans, j’avais envie de montrer ma geekitude de manière plus poussée.

C’est ainsi que j’ai décidé de me tourner vers le nouveau Nokia, le e71.

Avec le forfait qui va bien évidemment. Origami Star chez orange, m’apportant ainsi la connexion Internet de manière théoriquement illimitée et (parce que j’ai moins de 26 ans), les textos illimités.

Et pour l’instant, j’en suis franchement très content. Que cela soit au niveau téléphonie, au niveau internet ou au niveau lecteur MP3, je n’aurais pas pu faire mieux :)
Alors si vous devez choisir un nouveau téléphone, vous savez ce que je vous conseille ;)



SQL : créer un nouvel uplet si la requête ne retourne aucun résultat

Supposons le contexte suivant : vous avez une application traduite en plusieurs langues.
Pour chacune des langues, vous avez une ou plusieurs chaines de caractères. Et dans votre application, vous faites, par exemple :

__(’maChaine’);

Ainsi, la chaine appropriée est affichée en fonction de la langue que vous avez sélectionnée.
Suite à cela, vous avez une base de données qui contient chacune de vos chaines avec la langue et la valeur dans cette même langue.

Lorsque vous appellez la fonction __() avec la valeur de votre choix, vous faites donc un appel à votre base de données qui vous retourne la valeur de la chaine pour la langue en cours.

Le problème, c’est que lorsque vous développez votre application, vous ne pensez pas toujours à ajouter la chaine à chaque fois que vous la placez dans votre code source. Cela serait un tantinet lourd.

La procédure stockée suivante vous permet dont de faire la requête de selection adéquate en fonction de la chaine de caractères et de la langue.
Et si il n’y a aucun élément de retourné, elle en ajoutera un dans la base, avec la chaine vide.

Après, vous n’avez plus qu’à remplir toutes les chaines qui ont été ajoutées lorsque vous surfez dans votre application :)

CREATE PROCEDURE getTrads
@chaine varchar(150),
@langue int
AS
BEGIN
SELECT valeur FROM params_langue
WHERE chaine = @chaine
AND id_langue = @langue
IF (@@Rowcount < 1)
INSERT INTO [params_langue] ([chaine], [valeur], [id_langue]) VALUES (@chaine, ”, @langue)
END

Note : cette procédure a été construire pour fonctionner sous SQL Server. Elle n’est pas forcément portable sur tous les SGBDR. Notamment la variable @@Rowcount, qui peut ne pas être disponible partout.

Puis appellez votre procédure stockée :

EXECUTE getTrads
"maChaine", 1

Ou 1 est l’identifiant de votre langue (vous pouvez remplacer cet identifiant par son nom si vous le désirez. Mais je vous le déconseille).



Paris Web 2008 (ateliers)

Les inscriptions pour les ateliers de Paris Web sont ouvertes !
Inscrivez-vous rapidement. Y’aura pas de la place pour tout le monde !!



Journées du logiciel libre 2008

Vendredi et hier se passaient les 10e journées du logiciel libre à Lyon. Comment aurais-je pu louper ça ? :p

Malheureusement en raison d’un emploi du temps surchargé le samedi matin et d’un travail qui m’oblige à me lever le vendredi, je n’ai pu être présent que le samedi après midi (et le soir).

Arrivé à 14h, la première personne que je voie juste à gauche de la porte est  donc bricef au stand jelix copix.
Puis je vais au stand Ruby. Logique quoi. Et j’y ai passé un bout de temps avec Guillaume Desrat et fredix.
Pour finir, j’assiste à la conférence Ruby. Plutôt sympa d’ailleurs même si 44 slides pour 45 minutes de conférence, c’est dur de tenir le rythme ;)

J’ai aussi rencontré quelques personnes comme l’équipe francophone Mozilla.
Je n’ai pas vu Tristan car il a du partir en fin de matinée. Mais il était la et a même ouvert le champagne pour les 10 ans de la fondation.

Petite déception tout de même. J’ai appris après que pm27, de Wikiwix était présent.
Et je ne l’ait même pas vu (vu les nombreuses discussions que l’on a eu ensemble sur IRC, j’aurait pourtant beaucoup aimé placer une tête sur son pseudo).
Problème similaire avec Sébastien Delorme. Tant pis, ça sera pour la prochaine fois !

Par la suite, vu que c’était les 10 ans de l’ALDIL et des JDLL, nous avons été au resto tout ensemble.
Alors outre la nourriture excellente, le gateau d’anniversaire encore mieux et le crément qui coulait à flot, la soirée fut excellentissime à discuter de Fédora vs. Ubuntu ou encore de Sourcesafe qui sux et de SVN qui rox.

Un lendemain un petit peu difficile à cause de la quantité de crément et quelques tweets disant tout de mon état à mon retour après, le bilan de ces 10e JDLL est plus que positif :)



Quel type de développeur suis-je ?

A moitié entre le pragmatique et le ninja ?
Analyse de mes tics en développement avec le billet de miximum.

  • OS : Windows. Mais je réflechit à m’acheter un mac (peut-être l’été prochain).
  • Editeur : Aptana
  • Langage favori : aucun. Mais j’affectionne particulièrement Ruby, Python et PHP.
  • VCS : Subversion
  • Navigateur : Firefox

Je me considère entre le pragmatique et le ninja parce que j’ai beaucoup tendance à être comme ce second. Mais pas de manière aussi extrème que ce qui est dit dans cet article. Je suis donc à moitié entre les deux (avec une tendance à pencher vers le ninja).