nyroBlog
Bannière NyroBlog, par Jean-François
Image par Jean-François - ?

Tag : PHP


Petit bilan après 2 mois à LA

Histoire de ma vie de tous les jours à Los Angeles pendant mon stage.

Voilà maintenant 2 mois et demi que je suis à Los Angeles. Petit bilan de ce que j'ai appris, ce que je fais chez Fluidesign, et comment se passe ma vie de tous les jours ici.

Le travail
Arrivée tous les jours vers les 8h30 pour commencer à 9h00. Ca me permet de lire mes mails et mes RSS tranquillement le matin. Je suis très souvent le premier au bureau, me demandant même des fois si à 9h et quelques, alors que personne n'est là, si ce n'est pas un jour férié ou si ce n'est pas dimanche. Je travaille sur mon portable, et ça m'arrange bien pour justement rester sur MSN et lire mes mails tout au long de la journée. Pas forcément le meilleur moyen pour être productif...

On me donne du travail par AIM (c'est le standard en messagerie instantanée ici) ou par mail, on me demande combien de temps il me faudrait pour faire telles ou telles choses sur un site. J'avoue que c'est un peu dur de donne précisément, surtout que ce n'est pas souvent sur du PHP pur et dur, mais souvent sur des modifs HTML/CSS, quelques fois du JavaScript. D'autant plus que j'ai l'impression que je suis moins productif ici que lorsque je travaille chez moi. J'ai l'impression de mettre 10 ans pour faire un truc tout simple.

Durant les 2 dernières semaines, je ne faisais pas grand chose, il n'y avais pas de travail pour moi. C'est pour cela que j'ai pu me culturer sur le PHP et les design pattern.

Les projets
On me l'a indiqué plusieurs fois, l'entreprise signe des closes de confidentialité avec le client. C'est pourquoi je ne vous parlerai pas des projets sur lesquels je travaille actuellement, mais sur ceux qui sont en ligne, et donc visible par tout le monde.

GameWorks
Gameworks a été l'un des premiers projets sur lequel on m'a laissé travaillé seul pour des modifs HTML/CSS sur différentes pages du site. Je n'ai jamais bien compris ce qu'était réellement GameWorks. Si j'ai bien compris, ils organisent des repas/jeux/party pour des amis entreprises. Le tout est en lien étroit avec Sega. Les pages en particulier. J'ai fait aussi quelques petits changements minimes dans l'administration et je travaille encore dessus pour l'ajout de nouvelles pages événementielles.

Kayne
Kayne est un autre site sur lequel j'ai fait et je ferai encore des modifications HTML. Le client émet des rapports au format PDF, avec de jolis graphiques parlant de la bourse. Le soucis, c'est qu'il y a parfois des graphiques à modifier sous Illustrator/Photoshop, et que le client est très exigeant. Alors comme ce n'est pas ma tasse de thé, j'ai mis beaucoup de temps pour faire ma 1ère page. Mais une fois qu'on a pris la main, ça va vite. Et avant de publier une page, il faut d'abord la faire valider par quelqu'un d'autre de la boîte, puis par le client, et seulement si tout est ok elle passe en ligne...

First Annoucement
First Annoucement a été le premier projet où j'ai vraiment fait de la programmation PHP et où j'ai pu m'amuser avec du javascript. Le site permet aux futurs parents de préparer leur faire-part électronique en choisissant un thème, renseignant les destinataires depuis leur Outlook, Messagerie (AIM, MSN, Google ou Yahoo!) fichier CSV ou simplement par un champ texte. On peu aussi préparé le nom des parents et celui du bébé pour gagner du temps. Une fois le bébé arrivé, les parents renseignent la date et l'heure de naissance, le poids, la taille, ajouter des photos, peuvent modifier leur message et répandre la bonne nouvelle : Spread the news.
Là où je suis intervenu (car le site existait déjà) a été pour modifier la navigation, remanier les vérifications javascript pour faire de belles erreurs dans un div et non une alerte javascript. Mais le plus intéressant (et le plus long...) a été le fonction de Crop des images. j'ai utilisé ce script basé sur scriptaculous qui fonctionnent très bien. J'ai du mettre le nez dans le code pour modifier quelques petites choses : l'affichage des outils de resize différents et uniquement dans les coins. Et puis j'avais un autre problème lorsqu'on rechargeait une nouvelle image. J'y ai passé beaucoup de temps pour au final avoir un outil qui fonctionne bien. Une fois les nouveaux parents content de leur crop, ils enregistrent la nouvelle image. Là je passe par une petite requête AJAX pour envoyer les coordonnées du crop, et mon script PHP fait le reste. Bref, un site sympa, qui m'a demandé beaucoup de temps car de nombreux problèmes sont apparus pour la compatibilité avec Safari ou IE (6 ou 7...)

Voilà, 3 sites sur lesquels j'ai travaillé. Il y en a d'autres, mais non significatifs ou encore moins intéressant (Kayne est à la limite d'ailleurs...).

Mes progrès
Je suis à Los Angeles. Les gens ici parlent anglais. Etonnant, non ? Ce qui induis donc que je dois parler et comprendre l'anglais. Là où ça se corse, c'est quand on sait le piètre niveau que j'avais. Que j'avais. Car en 2 mois, j'ai progressé. Pas de la façon dont je pensais, mais j'ai progressé.

Comme je l'ai dit plus haut, j'échange énormément avec mes collègues par mail ou AIM. Il m'arrive de contacter mon voisin de bureau par AIM... Mon anglais écrit et mon écriture ont donc très largement progressé. J'avoue que j'ai toujours mon petit dictionnaire MédiaDico de lancer pour les petits mots dont je ne saisi pas exactement le sens et qui me paraissent important. Mais plusieurs personnes me l'ont dit, mon anglais écrit est bon. Je mets en signature de chaque mail interne un petit mot pour me demander de me corriger. Ce que les gens font quelques fois. Il ne faut d'ailleurs surtout pas hésiter à demander une telle correction : je pense que c'est le meilleur moyen de progresser rapidement et efficacement.

L'anglais parlé maintenant. Au niveau de l'oreille anglais, j'ai là aussi énormément progressé. Le collègue avec qui j'échange principalement parle extrêmement vite (même les autres collègues le disent) et parfois un peu dans sa barbe. La première fois que j'ai échangé avec lui a été très difficile à comprendre. J'ai dû lui demander de répéter plusieurs fois, lui faisant un effort de prononciation et de reformulation. Mais ce fait m'est très bénéfique. Mon oreille s'améliore, et je distingue maintenant beaucoup mieux les mots dans les phrases, entendant ces petits bouts de mots non accentués que nous autres français avont tant de mal à détecter la présence. Je m'en suis rendu compte en écoutant ma musique. Avant, je ne comprenais que les refrains car ils revenaient souvent et j'avais donc le temps de les assimilé. Maintenant, je comprends beaucoup plus de mots. Pour la compréhension du sens, c'est encore autre chose. Je comprends le sens des phrases beaucoup plus facilement qu'avant sans pour autant comprendre le sens de chaque mot. Ce qui fait que par un mécanisme de rétroaction, je comprends le sens des mots que je ne comprenais pas avant, et donc je progresse encore d'avantage (vous suivez là ?). Bref, je progresse.

Mon expression orale maintenant. c'est là que je n'ai pas progressé autant que je ne l'espérais. Au travail, je ne parle pas beaucoup. Lorsque je dois m'exprimer, je ne le fait pas en tout aisance et je cherche encore mes mots, trop souvent. Les structures des phrases, les petites erreurs scolaires qu'on fait souvent s'amenuisent de jours en jours, mais je ne parle pas assez pour que cela soit absolument significatif. Je parle plus avec mes collocs, qui ont eux des accents (l'un d'origine portoricaine, l'autre indonésien).

Mes progrès sont là, je les ressens. Ils ne vont pas s'arrêter là, j'en suis sûr. Ce petit bilan personnel m'aide d'ailleurs à m'en rendre compte un peu plus.

La vie de tous les jours
Tout simplement une journée type de travail :
Levé vers 7h30/7h45, douche, 2/3 cookies si la faim se fait ressentir, départ de l'appartement. C'est parti pour 10/15 minutes de marche pour rejoindre Wilshire Boulevard et mon arrêt de bus. Parfois je prends des rollers prêtés par mon colloc pour aller plus vite. C'est un faux plat descendant, donc ça va tout seul.
Le bus que j'utilise n'est pas le plus rapide. Il y en a un autre un peu plus cher qui s'arrête moins. L'avantage en temps n'étant que très minime, je continue de prendre cette compagnie. De plus, les bus ne sont pas bondés comparés à l'autre.
Arrivé au bureau vers 8h30 (ou plus tard selon le bus), installation de mon ordi, remplissage du 1er vers d'eau à la fontaine. Les collègues arrivent doucement. Certains jours je vais à la boulangerie française Amandine (c'est le nom de la boulangerie, pas de la boulangère...) tenu par des asiatiques qui font de bons croissants. Un petit croissant au chocolat par ci, un autre aux amandes ET chocolat par là et tout se passe bien. Et c'est gratuit ! Ceci car fluidesign est en train de faire leur site. Je ne sais pas trop quel marché ils ont, mais on ne va pas s'en plaindre !
La journée commence après lecture de mes mails et RSS (un heure, voir plus...). Je continue le travail inachevé de la veille ou bien regarde ce qu'il y a à faire, demande si quelqu'un a du travail pour moi etc... Et je fais mon travail, comme tout stagiaire qui se respecte. Si j'ai besoin je demande à mon collègue qui est une bête en HTML / CSS.
Le midi, c'est repas sur place préparé la veille ou Fast food avec les collègues, selon les envies. L'avantage ici c'est qu'il y a 10 000 sortes de fast food différents. J'essaie d'en tester un maximum.
La journée passe vite, voyant défilé beaucoup de ligne HTML, CSS, JavaScript ou PHP, toujours avec de la musique dans les oreilles issues de webradios diverses.
Arrivée vers les 18h00, je commence à fermer mes applications une à une, pour souvent partir vers les 18h15 et prendre le bus pour rentrer. Il arrive souvent que Wilshire soit blindé à cette heure là, merci mon téléphone et la musique pour me faire patienter. Arrivée à mon arrêt, c'est reparti pour les 10/15 minutes de marche.
Rentré dans l'appart, un des collocs est là à faire son heure de vélo ou porté de poids. Repas du soir devant la télé, puis la soirée sera faite d'ordi ou de télé.
Couché vers les 23h00.

Demain sera pareil qu'aujourd'hui, en différent...

PHP, mes lectures du moment

Comme il m'arrive d'avoir du temps libre pendant mon stage, j'en profite pour lire de nombreux articles sur la programmation objet en PHP, la conception de sites, framework ou applications web.

Je vais donc vous faire une petite liste des plus intéressants. Beaucoup d'articles datent de 2004 ou même avant. La plupart sont en PHP 4, il faut donc savoir ce que l'on peut maintenant faire de mieux grâce à PHP 5 et son nouveau modèle objet.

Pour commencer, un petit tour sur la doc officielle et son paragraphe sur le langage objet en PHP 5. La lecture complète de ce paragraphe est plus qu'instructive, et changera sans doute votre vision des objets PHP.
La partie sur la surchage est très intéressantes, pour pouvoir faire des choses du genre $objet->variable = 'chouette';, où variable n'existe pas réellement en tant que propriétés de l'objet. La même chose est possible avec les appels de fonctions.
La petite page sur Réflexion et ses différentes classes/interfaces est tout aussi intéressante pour qui veut faire des instanciations et appels de méthodes dynamiquement et proprement.
Enfin, la minuscule page sur les masques introduit ce qui suit.

Qu'est-ce qu'un masque (ou design pattern ou patron de conception) ?
Wikipédia nous répond très simplement :

Un patron de conception est un concept destiné à résoudre les problèmes récurrents suivant le paradigme objet.

En lisant cet article, une fièvre studieuse est montée en moi pour lire tous les articles sur chaque patron de conception. Certains sont très peu explicites, il faut donc se creuser un peu la tête pour en voir l'application ou l'implémentation quand elle n'est pas donnée. Parfois, il est plus facile de lire le code et le comprendre, puis de remonter à la description pour comprendre à quoi cela sert vraiment. L'idée ici n'est pas d'utiliser tous ces patrons de conception, mais c'est d'en connaître leur existence et leur fonctionnement. Plus tard, si vous vous retrouver face à un problème susceptible d'être résolu par l'un de ces design pattern vous vous en souviendrez et vous pourrez l'appliquer rapidement, puisque vous l'aurez compris.

Ensuite, je me suis mis en tête de lire sur les différentes implémentations de ces patrons de conception PHP. C'est là que les vieux articles entre en jeux.
Le plus important est PHP Patterns, dont le dernier article date de 2005, mais dont la pertinence des articles et les exemples simples en font selon moi une référence. La partie la plus intéressante se trouve dans la partie design. Lisez-donc un maximum d'article en gardant à l'esprit que c'est du PHP4, et qu'il faudra donc repasser ça à la sauce PHP 5 à grands coups d'abstract, interfaces et autres...

Et puis avec ces lectures, j'atteri sur ce post à propos de Smarty et des moteurs de templates, de 2001 mais qui garde tout son sens encore maintenant. La plupart des arguments sont pertinents, quelques-uns un peu moins... Et puis là où ça devient encore plus intéressant, au délà de la discussion, c'est sur cette page où la personne donne un exemple utlra-léger mais ultra-fonctionnel d'un moteur de templates.

Et puis d'autres liens, donnés en vrac :

Enfin, une liste de framework, tous ayant des points de vues différents et des philosophies différentes. Les regarder et se plonger un peu dans le code de chacun est long est fastidieux, mais croyez-moi, très instructif !

Et plein d'autres sur Wikipédia fr et un joli comparatif sur la version anglaise.

La branche des développeurs d'IBM a posté un premier billet sur un comparatif détaillé des 3 premiers cités ci-dessus, à suivre.

Voilà, bonne lecture à tous, et si vous en avez d'autres sous le coude, n'hésitez pas à les mettre en commentaires ici.

PhpMyVisites prépare sa future version : Piwik

PhpMyVisitesUn petit tour sur le site le site de PhpMyVisites dont je vous ai déjà parlé et je découvre qu'ils ont une beta sous le coude qui promet. En effet, la prochaine version (2.3) incluera une carte de chaleur de vos pages.

Mais qu'est-ce qu'une carte de chaleur ?
C'est tout simplement votre page, sur laquelle on va ajouter un calque pour vous montrer où les utilisateurs ont cliqué. Bien sûr, les endroits les plus cliqués auront des couleurs plus fortes afin de bien faire la différence, à la façon des lunettes qui montre la présence de chaleur dans les James Bond et autres du genre...
Cette nouvelle fonctionnalité utilise en fait ClikHeat Labsmedia, un autre projet open source sur sourceforge.
Exemple du site :
PhpMyVisites ClickHeat

Bon super, c'est tout ?

Non ! la suite devient un peu plus intéressante. En effet, cette fonctionnalité est sympa, mais sans doute pas celle que vous voulez. PhpMyVisites à penser à vous et vous écoute par le biais de feedback2.0. Après une brève inscription, vous pourrez proposer votre propre amélioration pour PhpMyVisites. Puis les gens vont voter pour celle-ci et si elle est beaucoup demander (et réalisable), elle sera sûrement implantée dans la prochaine version. Et bien sûr, vous pouvez voter pour les autres souhaits. A noter qu'il est demander de rédiger dans la langue de Shakespeare.

Alors à vos souris pour voter, et vos claviers si vous avez d'autres idées !

Enfin, en descendant tout en bas de la page d'accueil, je découvre une ligne, toute petite, mais très intéressante :

Piwik: le futur de phpMyVisites, actuellement en plein developpement (pour plus d'informations contactez nous!)

Un clic sur le lien, et en effet, c'est vraiment en plein développement ! La page n'est pas très agréable à l'oeil, mais l'intérêt n'est pas là. Un petit tour sur la démonstration en ligne pour se rendre compte des améliorations :

  • Tout les changements de page se font en Ajax (avec le fabuleux jQuery) : un gain de temps énorme.
  • Les graphiques sont maintenant en Flash pour afficher plus d'infos au survol. Encore pas mal de bugs d'affichages à ce niveau là
  • Ces graphiques affiches le code HTML pour l'inclure directement dans vos pages et ainsi montrer vos stats en live. Les inclure dans votre netvibes sera donc facile !
  • Un nouvel affichage apparaît : par nuage de tags (tagcloud). Intéressant pour les mots-clé des moteurs de recherche.
  • Export au format XML, JSON, CSV et PHP de toutes les données. Simple affichage du contenu pour le moment, sans doute un téléchargement proposé par la suite.

Vivement que cette version voit le jour. Je vais envoyer un mail pour voir s'ils ont besoin de développeur PHP, on verra bien ce que ça peut donner !

Sortie de Filezilla 3

FilezillaParfois je regarde si les logiciels que j'utilise et qui n'ont pas de mise à jours automatiques sont sortis dans une nouvelle version.

Ce fut le cas la semaine dernière pour Filezilla et bonne surprise quand j'arrive sur le site : il a changé, avec un nouveau logo. Direction la partie téléchargement et ho, magique, ils ont sorti la version 3 !

Je m'empresse de la télécharger. Je l'installe et je lance : A première vue, pas beaucoup de changements, si ce n'est une impression de légéreté par rapport à la version 2.2.32 que j'utilise quotidiennement. Un petit tour dans les options. Oups, pas mal de fonctionnalités ont disparus apparemment, en laissant apparaître quelques nouvelles.

Direction le gestionnaire de sites, et là, bonne surprise, les mêmes options avec quelques minimes ajouts, et la configuration avancé se fait par onglet et non plus dans une nouvelle fenêtre, ce qui est plus pratique à l'utilisation.

Pour tester tout ça, il va falloir que je transfert mes settings de sites actuels. Il est inconcevable pour moi de tout retaper à la main. Un petit tour sur google et le forum de filezilla pour trouver qu'il suffit simplement d'importer le filezilla.xml de l'ancienne version. Parfait. Je teste, et alerte : En raison de différences dans le format des données, seuls les paramètres host, port, utilisateur et mot de passe seront importés. Oups, ça me plaît pas ça. En effet, pour quasiment tous les sites j'ai paramétrer le dossier local et distant pour arriver directement, certains doivent utiliser le PASV Mode etc...

Bon je teste quand même. Ca marche, c'est joli et toujours cette sensation de gain en poids. je double-clique sur un fichier, pensant l'éditer comme configurer dans mon ancienne version. Le fichier part en téléchargement. Ah bon ok, allons paramétrer ça dans la configuration. Je cherche, je cherche et je ne trouve pas. Cette fonctionnalité n'est tout simplement pas implémenter dans cette version pour le moment. Mais elle est très demandé sur le forum, donc elle ne devrait pas tardé. Parmi les changements dans l'interface, l'affichage des listes d'attentes a été amélioré. On a maintenant 3 onglets en bas : Fichiers dans la file d'attente, Transferts échoués et Transferts réussis. Le dernier est donc tout nouveau puisqu'avant on avait aucune historisation des fichiers envoyés. un bon point. Par contre, pour les échoués, il faut penser à regarder tout en bas afin de voir si le nombre de fichiers échoués est apparu, affiché l'onglet, clique-droit sur les fichiers pour les remettre dans la file d'attente, afficher l'onglet des fichiers dans la file d'attent et traité cette file d'attente. Un peu plus laborieux au début, mais ça sera sans doute plus aisé après un temps d'adaptation.

Et puis ce problème de configuration m'embête vraiment. Je cherche sur google ou le forum de filezilla. Je trouve un script en PHP qui à première vue ne fait pas les changements de versions, il se charge juste de réécrire les données dans le bon format XML, sans trop chercher plus loin. Qu'à cela ne tienne, je ferai le mien.

Pour le faire, j'ai tout simplement ouvert les fichiers de configuration de chaque version dans mon éditeur de texte favori, Notepad++. Je change un paramètre dans la 2.2.32, le même changement dans la version 3 (ou l'équivalent) et je paramètre mon script PHP pour prendre en compte ces changements. J'ai un peu galéré pour les mots de passe. En effet, dans la version 2, ils sont crypté. Crypter est un bien grand mot, puisque le cryptage n'est pas propre à chaque ordinateur, mais gérer en dur dans la programmation de Filezilla, avec une clé, FILEZILLA1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ. Cette clé est donc connue de tous, puisque Filezilla est Open source.

Qu'en est-il dans le version 3 ? Les mots de passe ne sont tout simplement pas crypté. Après réflexion, c'est vrai que ce n'est pas vraiment utile puisque déjà dans la version 2, ils sont décryptables très facilement. Petite recherche d'une fonction de décryptage. J'en trouverai sur le forum en VB .Net et Javascript, mais pas en PHP. Ok, j'utiliserai la version JavaScript pour la porter en PHP, et tout ce passera bien.

Après une heure environ de recherche tout doucement pour être sûr d'avoir les bons transferts, le script de transfert des settings est en place. Petit message sur le forum de Filezilla pour le proposer à qui le veut.

Bien sûr, les sources PHP5 sont disponibles.

En résumé : Vous pouvez tester cette dernière version de Filezilla mais vous devrez sans doute attendre de faire un passage définitif vers cette version. Je suis revenu à l'heure actuelle sur la version 2, surveillant bien tranquillement le RSS et le forum du projet.

Gallerie d'images automatique

Comme j'ai un peu de temps, je vous donne ici les sources du script que j'ai mis en place pour ma galerie d'images.

En fait, j'utilise JW Image Rotator pour le diaporama en flash. Ce player est génial et très bien documenté. On peut le faire communiquer avec du JavaScript très simplement. C'est donc ce que j'ai fait avec la liste déroulante qui va envoyer l'url de la playlist à recharger.

Pour gagner du temps et être vraiment simple à utiliser, j'ai décider de ne pas avoir d'administration et que le simple fait d'envoyer un nouveau dossier mettrait en ligne les photos. La liste déroulante est donc générée en PHP pour faire apparaitre tous les dossiers existants. Le script générant la playlist récupère juste la liste des fichiers du dossier demandé et ressort un fichier XML, au format souhaité.

Etant donné que j'ai hébergé ce script sur mon ftp de free, j'ai du changer un peu les fonctions de récupération des dossiers/images pour qu'il fonctionne. si vous êtes dans le même cas, utiliser fonc.free.php à la place de fonc.php et tout ira bien.

Enfin, j'ai mis en place un rss pour permettre aux gens de suivrent simplement l'actualité de mes photos. Il suffit simplement de créer un flux XML au format demandé et on a un beau fil RSS tout nouveau tout beau !

NB : Pour mettre en place ce script sur votre site, vous devrez sans doute modifier des petits trucs dans tous les fichiers. Faites un tour complet avant.