Surchargé, Free passe le site sur son offre mobile de Jsp vers PHP dans la nuit

    15:43 11 01 2012

Face à la surcharge de son site mobile et son incapacité à remonter la platforme, Free a migré le site de JSP vers PHP dans la nuit.
Apparemment, seule la partie réservée aux personnes déjà abonnées à la Freebox a été mise en ligne, les autres parties du site devraient arriver au fur et à mesure.

Encore un preuve de la haute performance et du Time To Market record de notre langage préféré!

Plus de détails :

http://www.journaldugeek.com/2012/01/11/free-mobile-24-heures-apres-refait-son-site/



créer un sommaire avec liens en utilisant FPDF

    13:15 18 12 2011

 

Dernier volet de mes tutoriels sur l’utilisation de FPDF avec PHP, nous allons voir aujourd’hui comment générer un sommaire avec des liens dans un document PDF.

FPDF propose nativement des méthodes pour générer des liens internes dans un  document :

 

  • addlink() qui créé un lien et retourne son identifiant. Pour le moment, notre lien n’est qu’une ressource, il va maintenant falloir l’associer à un texte et ensuite préciser où ce lien doit pointer. Pour cela, il faut utiliser par exemple, la méthode cell() (qui permet d’écrire du texte) en lui passant en paramètre  l’identifiant du lien.

 

  • SetLink() va enfin nous permettre de préciser la destination du lien. Nous l’utiliserons sur la page où le lien doit pointer

 

Le mode de fonctionnement de FPDF nous impose de créer les page les unes après les autres. Une fois une page créé, il n’est pas possible de revenir dessus. Il devient donc évident que, dans le cadre d’un sommaire, nous allons d’abord devoir créer tous les liens (un par entrée de notre sommaire), puis, page par page, assigner la destination de ces liens.
La première étape va donc consister a créer un conteneur pour stocker tous nos liens. Nous allons donc ajouter un nouvel attribut, en l’occurrence un tableau, à notre classe FPDF :
class myfpdf extends fpdf {
    public $myLinks = array();
}

Au moment de générer notre sommaire, nous allons créer les liens et les ajouter, un par un à notre tableau. Voici un exemple de code à adapter à votre document :

<?php
...
//le numéro de la page
$numPage = 1;

//le titre de la page
$titrePage = 'première page';

//on créé un lien
$fpdi->myLinks[$numPage] = $fpdi->addLink();

// on écrit le nom de la page et on y associe le lien
$fpdi->cell(185,5,$titrePage,0,0,'L',$fpdi->myLinks[$numPage];

//on écrit le numéro de la page
$fpdi->cell(5,5,$numPage,0,2,'R',TRUE);

?>

Cette opération doit être renouvelée pour chaque ligne apparaissant dans notre sommaire, le plus simple est donc de boucler dessus.

Voilà, nous avons écrit notre sommaire, il va maintenant falloir associer les bonnes pages aux liens.
La solution basique serait de le faire manuellement dans notre code à chaque création de page.
Mais comme un bon développeur est un développeur feignant, nous allons plutôt réécrire la méthode addPage() de FPDF afin d’automatiser l’action et que cela se fasse tout seul par la suite dans notre document :

<?php
class myfpdf extends fpdf {
    public $myLinks = array();

    public function addPage() {
        //on génère la page en appelant la méthode 
        //parente addPage()
        parent::addPage();

        // si un lien existe pour ce numéro de page, 
        //on l'associe à la page
        $page = $this->pageNo();
        if (isset($this->myLinks[$page])) {
            $this->setLink($this->myLink[$page]);
        }
    }

}
?>

Voilà, à chaque nouvelle page, si un lien y est associé, il sera automatiquement ajouté.

 

Si vous souhaitez voir le résultat, vous pouvez aller consulter le catalogue de formations d’AlliaForm, en bas à gauche du menu.

 

Le document est entièrement généré en PHP avec FPDI ( la version que vous y verrez est un version statique en cache, je ne le génère qu’une seule fois lorsque des modifications y sont apportées).



numéros de page intelligents avec FPDI / FPDF

    12:21 17 12 2011

Dans la continuité de l’article précédent, voici un petit tutoriel pour intégrer des numéros de page intelligents dans vos documents PDF générés par FPDF ou FPDI en PHP.

Avec FPDF, l’insertion des numéros de pages passe par la réécriture de la méthode footer() (qui est appelée à chaque création de nouvelle page) et l’utilisation de la méthode pageNo() qui renvoie le numéro de la page courante.

Typiquement :

public function Footer() {
    // Positionnement à 1,5 cm du bas
    $this->SetY(-15);
    // Police Arial italique 8
    $this->SetFont('Arial','I',8);
    // Numéro de page
    $page = $this->PageNo();
    $this->Cell(0,10,$page,0,0,$pos);
}

Mais, si cette solution est suffisante pour des documents de base, la construction d’un document chiadé demande souvent des fonctionnalités supplémentaires :

  • possibilité de commencer la numérotation sur la deuxième ou troisième page (pas sur la couverture) et donc de décaller les numéros des pages
  • afficher le numéro de page dans le coin et donc le mettre à droite sur les pages paires et à gauche sur les pages impaires (ou vice-versa selon la page où vous commencez la numérotation)

Voici donc une version un peu plus évolué de la méthode footer() qui intègre ces fonctionnalités :

class myfpdi extends fpdi {
    public $addPageNum = false;
    public $decalage = 2;

    public function Footer() {
        // Positionnement à 1,5 cm du bas
        $this->SetY(-15);
        // Police Arial italique 8
        $this->SetFont('Arial','I',8);
        // Numéro de page
        if ($this->addPageNum ==  true) {
            $page = $this->PageNo() - $this->decalage;
            if ($page % 2)
                $pos = 'R';
            else
                $pos = 'L';
            $this->Cell(0,10,$page,0,0,$pos);
        }
    }
...

Quelques explications

L’attribut $addPageNum est un booléen qui permet de dire si on doit afficher le numéro de page ou non (true ou false). A vous de lui donner la valeur souhaitée avant de faire appel à la méthode addPage();

L’attribut $decalage permet d’introduire un décalage dans la numérotation. Par exemple, si il vaut 2, la page 3 du document aura le numéro 1 d’affiché.

Enfin le test  ($page % 2) ajoute l’alternance d’affichage à gauche et à droite. Inversez $pos = ‘L’; et $pos = ‘R’; si le sens ne vous convient pas.



Template PDF par défaut avec FPDI

    09:56 16 12 2011

Dans le cadre de la création automatique du catalogue de formations PDF de AlliaForm, j’ai utilisé FPDI une classe dérivée de FPDF permettant d’importer des templates (modèles) de PDF.
FPDI est très pratique, on ouvre un fichier PDF existant, on importe une page et on s’en sert comme modele pour générer un nouveau PDF.

Seulement, j’ai rapidement rencontré un problème : si j’assigne un modele à un page, que j’écris un long texte dessus et que ce texte passe sur une page suivante (ce qui se fait automatiquement avec la méthode multicell()), la page suivante n’utilisera pas le modèle, elle sera générée à partir d’une feuille blanche.

J’ai bien sûr sorti la doc de FPDI, googlé pour trouver une solution rapide, mais la seule réponse que j’ai trouvé est « ce n’est pas possible avec FPDI ».

Je vous livre donc la solution (très simple) que j’ai implémentée.

Il suffit de dériver la classe FPDI et plus exactement, la méthode addPage() qui s’occupe d’ajouter une nouvelle page au document PDF pour y ajouter la fonctionnalité.

class myfpdi extends fpdi {

 public $defaultModele;

 public function AddPage() {
  parent::AddPage();
  if ($this->defaultModele != '') {
   $this->setSourceFile($this->defaultModele);
   $tplidx = $this->ImportPage(1);
   $this->useTemplate($tplidx);
  }
 }
}

On commence par appeler la méthode parente afin de ré-implémener le fonctionnement initial de addPAge(), puis on on lui assigne notre modèle par défaut qui se trouve dans le nouvel attribut $defaultModele.

De là je n’ai plus qu’à instancier un objet de type myfpdi() et lui assigner un fichier PDF par défaut dans l’attribut $defaultModele avant de créer de nouvelles pages :

$pdf = new myfpdi();
$pdf->defaultModele = 'fichier.pdf';
$pdf->addPage();
...
$pdf->ouput();

A chaque fois qu’une nouvelle page va être créée, la méthode addPage sera appelée et $defaultModele sera utilisé comme modèle par défaut.

Si à un moment dans mon PDF, je souhaite utiliser un autre modèle, il me suffira de changer la valeur de $defaultModele et si je ne veux plus de modèle, je passe sa valeur à ‘ ‘ (chaîne vide).

Bien sûr, dans un souci de lisibilité, le code présenté ci-dessus va au plus simple, tout cela est perfectible (accesseurs, test d’existence du fichier pdf, etc…)



Des formations PHP à Bordeaux

    14:18 14 12 2011

Logo Alliaform

Avec le lancement de ma nouvelle société AlliaForm qui propose des salles de formations équipées en informatique à Bordeaux, j’ai décidé de revenir à mes premiers amours et de proposer des formations à PHP sur la région Aquitaine.

 

Je reprends donc avec un premier cursus de Niveau 1 dont vous pourrez trouver le plan ci-dessous :

Formation PHP Bordeaux : Apprendre à développer avec PHP

 

N’hésitez pas à me faire vos retours sur son contenu.

D’autres cursus devraient voir le jour dans les semaines à venir.

 



Experience des billes rouges

    21:35 6 11 2011

J’ai eu la chance de pouvoir assister et participer à l’experience des billes rouges lors de l’agile tour le 21 octobre 2011 à Bordeaux.
Animé par Alexis Monville avec qui je collabore sur les projets AlliaForm et Ayeba, cet atelier illustre les erreurs classiques du management par rapport aux phénomènes liés à un système, à l’organisation elle-même.

En voici une synthèse réalisée et montée par Covenweb :

L’expérience qui a durée une demi-heure a été suivie par un échange très instructif avec l’audience permettant de mettre en évidence la plupart des erreurs de jugement et de management qui risquent de compromettre un projet.

Un atelier enrichissant qui pousse à prendre du recul sur ses méthodes de travail. A suivre…



pré-lancement de waDaWeDo!

    15:36 4 05 2011

Voilà,
après plusieurs mois de travail et d’enfermement chez moi, le grand jour de la mise en ligne de waDaWeDo est enfin arrivé.

203612_187781421257785_3319070_n
http://www.wadawedo.com

waDaWeDo est une application de partage d’agenda et d’événements sur Facebook. waDaWeDo permet de :

- Créer des événements évolués et les partager avec vos amis ou le monde entier
- Gérer votre agenda personnel grâce aux événements privés
- Consulter l’agenda public de vos amis et commenter ou rejoindre leur événements
- Trouver des événements publics proche de chez vous et les rejoindre
- …

waDaWeDo est accessible de 2 façons. Via sa page principale http://www.wadawedo.com mais également sous forme d’application Facebook http://apps.facebook.com/wadawedo/

Bien sûr, l’accès à waDaWeDo est entièrement gratuit.

Au niveau technique, waDaWeDo repose sur trois technologies. Bien sûr, du PHP (sans framework) et du MySQL, avec une architecture adaptée à Facebook.
Mais, grande nouveauté pour moi, tout le ‘front’ repose sur du jQuery ce qui permet de limiter la charge côté serveur à de simples appels de données.

Je vous invite à aller l’essayer et à me faire vos retours.

Ha oui, pour finir, je vais revenir au début de cet article, plus exactement au titre où je parle de ‘pré-lancement’. J’ai décidé de regarder comment la plateforme réagissait avant de considérer que nous étions dans une phase de lancement officiel.
Ceci dit, il ne faut surtout pas que ça vous empêche d’en parler autour de vous, bien au contraire. je compte, dans un premier temps, sur le bouche à oreille pour la faire connaître, alors n’hésitez pas à bloguer, twitter, Facebooker, mailer…



TEDx à Bordeaux le samedi 28 Mai 2011!

    10:47 7 04 2011

Les places du 1er TEDx à Bordeaux enfin disponibles !!

Depuis 25 ans, la conférence TED rassemble des esprits brillants, dans des domaines très variés, pour qu’ils partagent leurs idées avec le monde. Bordeaux a enfin sa conférence TEDx ! Elle aura lieu le samedi 28 Mai prochain à l’auditorium du CAPC (Musée d’art contemporain de Bordeaux) autour du thème “ENSEMBLE”.

Cette conférence a pour objectif de réunir les personnes qui, à Bordeaux et dans sa région, sont et seront les acteurs des changements de demain.

10 intervenants, experts dans leurs domaines, disposeront de 18 minutes maximum pour changer le monde, ou plus modestement pour diffuser des idées qui méritent d’être partagées.

Un après-midi exceptionnel pour vivre l’expérience TEDx avec 160 participants, 10 intervenants et une équipe d’organisation bénévole réunie dans l’association TEDxBordeaux.

Alors rejoignez l’aventure et rendez-vous vite sur www.tedxbordeaux.com pour réserver vos places !

http://www.tedxbordeaux.com/participez/



Injection SQL sur les radars automatiques!

    12:21 23 03 2010

On ne le répète jamais assez, il ne faut jamais faire confiance aux données en provenance des utilisateurs.
Et l’origine de ces données ne se limite pas à POST et GET!

Des petits malins se sont inspirés de cet adage pour tenter t’attaquer les radars fixes :

injection sql radar fixe

injection sql radar fixe

Bien sûr, je pense qu’il s’agit plus d’une blague que d’une véritable tentative d’attaque mais je trouve l’idée vraiment inventive.

Source : http://www.tux-planet.fr/comment-pirater-un-radar-automatique/



Premier post à 10 000 pieds d’altitude

    08:49 5 12 2009

Je viens d’entamer mon périple pour revenir du Web Development summit, quelques 22 heures pour faire Seattle -> New-York -> Paris avec dix heures d’escale dans l’aéroport de la grande pomme.

Je suis actuellement dans l’avion entre Seattle et New-York, siège 20C, nous avons décollé depuis 20 minutes…et je suis connecté en wifi!

Alors qu’en France, il est encore rare d’avoir une prise électrique dans un TGV, de l’autre côté de l’atlantique, les avions sont équipés en internet haut débit. Non pas que je veuille être critique envers la France – dans bien des domaines nous sommes au même niveau voir en avance sur les autres – mais là, je suis bluffé par le décalage.

Je ne voudrais pas dire de bêtises, je viens donc de faire une recherche sur Google pour vérifier si cela n’existerait pas également en France, il est vrai que je ne prends pas l’avion si souvent que cela et que certaines lignes sont peu être également équipées. Tout ce que j’ai trouvé, c’est le blog d’une personne tout excité, en Février 2008, d’expérimenter la première et unique ligne d’Air France permettant d’envoyer des textos et de faire du WAP en plein vol…MDR, du WAP, je ne savait pas que cela existait encore!

Faisons quelques tests. Je vais commencer par accéder à mon Facebook. La page d’accueil me dit « Vous vous connectez d’un endroit inhabituel. Par sécurité, veuillez confirmer votre compte ». Tu m’étonnes que je me connecte d’un endroit inhabituel, je suis à plus de 10 000 pieds d’altitude, me déplaçant à une vitesse de 700 km/h.

Petit test de performance sur YouTube. Les videos sont super fluides, pas de latence, c’est plus rapide qu’à mon bureau.

Bien sûr, tout cela n’est pas gratuit, 10$ pour la durée d’un vol mais heureusement, le temps du décollage, j’ai feuilleté le magasine de la compagnie, vous savez le truc qui se trouve dans la poche du siège devant vous, généralement plié en deux, bourré de pubs et qu’on ne lit jamais.
Bien là, je ne sais pas pourquoi, je l’ai parcouru et suis tombé sur une pub pour le service internet en question avec un code permettant de se connecter gratuitement la première fois (« DELTATRYGOGO » pour ceux que ca intéresse).

Sur ce, je vous laisse, je vais lire mes mails et continuer mon vol sur internet…