L’offre de formation PHP d’Alliaform à Bordeaux s’enrichit

    16:05 14 01 2012

AlliaForm enrichit son offre de formation à PHP en proposant maintenant un cursus de niveau 2, la formation PHP – utilisation avancée de php.

D’une durée de 3 jours, cette formation couvre notamment la programmation orientée objet, l’utilisation de PDO, les SPL et l’utilisation du XML avec PHP.

Dispensée en plein centre de Bordeaux, cette formation vient compléter l’offre web d’AlliaForm qui, à terme, couvrira l’ensemble des langages et concepts liés à la toile.



Free refond son site mobile en utilisant la méthodologie « La Rache »

    10:36 12 01 2012

Comme annoncé hier, free est en train de refondre son site http://mobile.free.fr afin de supporter la charge induite par leur annonce de forfait tout compris à 15,99€. JSP ne tenait pas le coup, qu’à cela ne tienne, on passe à PHP.

Les services sont montés et remis en ligne au fur et à mesure. Hier nous avons d’abord eu droit à la partie inscription pour les freenautes avec son lot de bugs notamment dans la validation des ribs (relevés d’identités bancaires) ce qui a rendu un paquet de monde hystérique au point de chercher des solutions pour générer de faux ribs permettant de valider leur inscription.

Ce matin c’est la partie inscription pour les non freenautes qui a été mise en ligne. Espérons que cela se déroule mieux pour eux.

En tout cas, ces mises en ligne nous permettent de comprendre un peu mieux comment fonctionnent les équipes de développement de Free. Si vous allez faire un tour sur la partie inscription pour les non frenautes (rapidement, car j’imagine que ce bug va vite disparaître), vous pourrez voir que le lien, en haut de page qui mène vers la section « Espace abonné » pointe en fait vers http://localhost:8080/moncompte/.

Quoi? Pas de tests chez Free? Du développement en local qui semble directement passer en production sans passer par un serveur de dev. ou de pré-prod?

Tout cela ressemble bien à la méthodologie « La Rache » qui permet de produire vite mais sans trop s’attarder sur la qualité du code :)

Ceci dit, et étant donné, d’une part, le contexte dans lequel ce site est redéveloppé et, d’autre part, la simplicité du code à produire, je crois que la décision peut se justifier.

J’en déduis également que la prochaine étape sera donc la remise en ligne de la partie « abonnés ».  Les premiers isncrits pourront  enfin valider que la procédure a bien été prise en compte correctement.

Quoi qu’il en soit, et en toute franchise, je tire mon chapeau à Free qui a pris un décision difficile (refonte du site) en un temps record et qui est pas loin de gagner son pari!



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.

 



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…



Microsoft Web Development Summit 2009

    02:55 5 12 2009

Je viens donc de passer plusieurs jours à Redmond / Seattle invité par Microsoft pour participer au Web Development Summit, un évènement regroupant une trentaine de personnes du monde PHP afin d’échanger avec les équipes des produits web de Microsoft sur les synergies possibles entre nos deux mondes.

Parmi les invités :
Cal EVANS, Andrei ZMIEVSKI, Marco TABINI, Ben RAMSEY, Alison GIANOTTO, David COALLIER, Elizabeth M. SMITH, Ligaya TURMELLE, Maarten BALLIAUW, etc… (désolé pour ceux que je n’ai pas cités).
Vous allez me dire : « Et qu’est ce que tu faisais là bas toi? ». Figurez vous que j’y ai été invité par Hank JANSSEN qui a activement participé à la refonte de PHP 5.3.0 sous Windows et que j’ai pu rencontrer dans le cadre de WampServer.

Au niveau du contenu, les deux jours et demi de conférences ont été très riches. Nous y avons beaucoup parlé des efforts faits par Microsoft pour recoller aux réalités du marché et offrir une vraie solution de production/développement pour les applications web PHP. Cette conférence était vraiment organisée comme une grande session d’échange, la moitié des conférences étaient donc animées par Microsoft, l’autre moitié par des personnes de la communauté.

Voyons un peu ce que j’y ai appris de Microsoft :

Commençons par la solution Web PI, sorte de WampServer pour IIS qui permet d’installer simplement un environnement et des applications PHP.L’outil , pour le moment, s’adresse plus à des utilisateurs finaux de solutions packagées (genre WordPress) qu’à des développeurs. Toutefois les échanges ont été très riches et je suis persuadé que les remarques faites par les participants seront prises en compte (choix de versions, plusieurs instances en parallèle, etc…).
De mon point de vue, bien que très utile pour une certain type d’utilisateurs, cet outil ne sera pas adopté par les développeurs PHP. Ceux-ci viennent de la plateforme LAMP et souhaitent pouvoir retrouver leurs petits sous Windows. Il ne faut pas trop en demander, changer d’OS, changer de serveur web…et pourquoi pas abandonner MySQL au profit de SQL Server tant qu’on y est!
Par ailleurs, de par son fonctionnement en fast-cgi, IIS n’offre pas le même mode de fonctionnement que Apache, Il faut donc que Microsoft s’ouvre encore plus et accepte qu’une plateforme web sur Windows doit être plus de type WAMP que de type WIMP (Windows, IIS, MySQL, PHP) ou WISP (la même chose avec SQL server). J’en ai discuté avec quelques personnes chez Microsoft qui se sont révélées très ouvertes à cela, nous avons même évoqué la possibilité de faire tourner WEB PI sur WampServer, on verra si il y a une suite.

Wincache : les équipes Microsoft ont fait le constat qu’il n’existait pas d’extension de cache d’opcode qui soit efficace et vraiment stable sous Windows. Ils se sont donc retroussées les manches et ont développé l’extension wincache.
Les points positifs :
- wincache permet de faire du cache d’opcode de façon optimisée sous Windows
- wincache est sous licence Open Source et a été intégré à PECL, signe que Microsoft est vraiment dans un processus d’ouverture.

Les points négatifs :
- les binaires de wincache ne sont disponibles qu’en VC9, donc impossible a tester avec les versions actuelles d’apache
- de toute façon, l’extension n’existe pas encore en thread-safe, donc impossible de la faire fonctionner avec Apache 2.2

Là encore, j’ai longuement parlé de cela avec Ruslan Yakushev, responsable du projet chez Microsoft, et j’ai bon espoir d’avoir été entendu et que ces deux points seront ajoutés dans leur roadmap.

PowerShell : Il s’agit d’un invité de commande étendu pour Windows afin de proposer des possibilités plus proche d’un shell Linux aux développeurs. J’avoue ne pas avoir tout compris, la session était en fin de journée et le décalage horaire et la journée à parler en Anglais ont eu raison de moi. Ça a tout de même l’air intéressant, il faudra que j’y jette un coup d’œil quand j’aurais le temps.

Nous avons également eu une présentation des projets interopérabilité en cours par Jean-Christophe Cimetiere et son équipe. J’avais pu assister à un conférence à peu près identique, il y a trois ans, lors de ma première participation et je doit avouer que l’évolution est importante. Bien sûr, Microsoft reste une société à but lucratif et leur implication dans ce genre de projets va dans le sens de leurs intérêts, mais on ne peut pas nier qu’il y a maintenant du concret, de véritables solutions utilisables (contrairement à ce que j’avais pu voir il y a 3 ans). Par ailleurs, la langue de bois à disparu, on ressent clairement que les équipes ont une marge de manœuvre plus importante et que tout cela n’est pas qu’une histoire de marketing et de gestion d’image.

Aiiiiieeeee, qui vient de me lancer une pierre???

Oui, je sais, ca sens le vendu, ca a le gout du vendu mais non, ce n’est pas du vendu, Microsoft ne m’a pas payé pour que j’écrive tout cela. J’ai vraiment le sentiment que de très gros effort sont faits de leur côté et ce serait vraiment un manque d’ouverture que de ne pas les prendre en compte et de tout dénigrer simplement par ce que c’est Microsoft.
C’est quand même en partie grâce à eux et à leur financement que nous avons toujours une version de PHP pour Windows et, qui plus est, certainement la version la plus efficace qu’il n’y ait jamais eu (la version Windows de PHP a failli disparaître avec PHP 5.2.6).

Bien sûr, il y a eu d’autres conférences et choses présentées, mais soit :

1. elles étaient d’ordre plus philosophiques et donc difficiles à retranscrire

2. elles étaient sous NDA, je n’ai donc pas le droit d’en parler

3. elles étaient inintéressantes, comme la présentation de la fondation Codeplex qui a été proche du fiasco, les orateurs n’ayant pas compris à qui ils s’adressaient en essayant de nous faire croire qu’il réinventaient le monde. Bien sûr, ils ont vite été remis à leur place par certains membres de la communauté.

4. je n’ai pas tout compris ou j’essayais de récupérer des 20 heures de voyage et des 9 heures de décalage horaire.

Du côté de la communauté, ca a permis de mettre des sujets sur la table, comme la scission qui s’opère entre les communautés PHP et les communautés projet comme Joomla ou Drupal par exemple, le tout piloté sur les 3 jours par Cal EVANS.

Ajoutez à cela, une ou deux sorties avec la communauté et vous aurez la recettes de trois journées riches en échange et permettant de faire avancer le schmilblick.

Pour finir, aujourd’hui, j’ai pu profiter de la journée pour me balader dans Seattle. mais bien sûr, les trois journées de beau temps passées enfermées dans des salles de conférence ont été suivies par une journée bien grise avec même quelques gouttes de pluie. J’ai quand même fait mon petit tour en haut de la space needle et fait quelques emplettes pour moi et mes amis :

seattle

seattle2

space_needle

Maintenant, je suis de retour à l’hôtel où j’attends mon taxi pour mon retour vers Paris qui s’annonce comme un nouveau périple de taille : 5 heures d’avion jusqu’à New-York suivies de 10 heures de transit à JFK, suivies de nouveau de 7 heures d’avion. En gros, je pars d’ici vendredi à 21h, j’arrive à Paris Dimanche à 6 heures…que du bonheur.
Allez tant qu’à faire, autant cumuler, il reste quelques pierres par terre, faites vous plaisir, mais ne visez pas la tête :-)

Note : voici mon compte-rendu de la même conférence mais en 2006…lisez le, ca montre bien l’évolution qu’il y a eu en 3 ans.



Balade de l’elephpant, la suite…

    02:53 4 12 2009

IMG_0273

Aujourd’hui, l’elephpant a dû signer un NDA (Non Discolure Agreement) pour pouvoir suivre les conférences sur les grandes nouveautés que Microsoft nous réserve pour les mois à venir.

IMG_0275

Avant de partir, l’elephant a tenu à laisser une petite trace de son passage dans les locaux de Microsoft, quitte à prendre le risque de se faire arrêter pour dégradation. J’ai bien essayé de l’arrêter mais rien à faire…