You are on page 1of 68
PROCREM Eva) azine éveloppeurs 07-08) N°241 / Des ft | * DEVELOPPEUR et gular FREELANCE /Kubernetes sous tinux / Comment devenir freelance ? / Paradis ou enfer ? /Phaleon : te nouveau / Des développeurs témoignent ! framework PHP a connaitre Tout sur j= Red Hat OpenShift MO04319-2014-F:650€.A0 Le seul magazine écrit par et pour les développeurs seta i 2 ab ie i al f= ALIM[=Z1 ‘wee, 2 { ) | | J mM ETE 2020 / Créer son navigateur avec.chromium / Raspberry Pl créer un GPS 7 Makers / Diy /loT Les modules M5. 7 Hack Je hacke une carte bleue / Matériel Nas + Powershell i Diskto Pl : une tablette i frangaise 8 ea / Vintage Homebrew 280 | Le seul magazine écrit par et pour les développeurs HORS-SERIE N°1 ETE 2020 DISPONIBLE DES LE 3 JUILLET ! suo reboot -n + 21 000 pages publiées, 241 numros, quelques horses iciet 8. Programmes! entome so 23e année. Le magcine @ ‘rovers les epoques, les crises et les evans, Kernel panic Une double crise a fcppd. La premire est e Covi 19. Lo seconde est la cree de Pesta Pressalis est ce que fon cppele une messogerie qui prend en charge et dsb les magazines et jounaux dons des miler de Kosques don toute la France. Ws le manque de rélrme profonde du sstéme 0 fin pr fore explser la messogereet nous avons vee des semcines tts difieles: non-ifision du magazin, manace sur le versoment des vntes aut élteurs, dnt NeferT Cet argent Cs le rsutat des veres en Kosque I sagt denote argent. Les cots toulous plus importants dela esbuton font que nous rcupérons de moins en moins d argent. Un magazine est une équaton subtle tris facteurs le osque, les abonnés etl publictlponsoring, Le bosque fit porte de le cure de Programme! et vous étes nombreuses/nombreux& nous ire gre aux Kosques, oun reais et cux rayon presse des grandes surtoces !Et nous Cetinueros 6 ee présent Reboot ! A partir de ce numéro, nous rebootons la périodicité du magazine. Et la révolution est profonde. Apres 23 ans de parution mensuelle,Programmez! va désormois se séparer en deux branches dstnctes Programmer! devient bimestriel. Au lieu de sort chaque mois, le numéro « normal » sora désormais tous es 2 mois. Soit 6 numéros par on. Programmer! hors-séries tous les trimestres ! Votre noweau rendez-vous : tous les 3 mois, Programmez! vous proposera un hors-série thématique. 1 théme = 1 hors-série. Soit 4 numéros por an, En résumé, vous aurez 10 numéros de Programmez! por an : 6 numéros « normaux » (bimestiel) + 4 rhuméros thématiques(rimestrel) Cette nowelle codence es 6 pour ous proposer toujours pus de dverté dons es technologies. Les horses ‘opprefondront, sur 84 pages, un langage, une poteforme. Les prochaines builds Programmez! Hors-serie n° 1 special été 2020 : dés le 3 juillet N° 242 : 4 septembre. Bisrvenue dan o nouvelle matics Frans Tone orie@propranezcon Brives —————————__—___ dg Matériel, Roadmap ———__________________ 6 Lost in recrutement, ———————______________g Freelance : le devenir, le rester ’ Dossier spécial & RedHat F902 ™ openshitt_. Abonnez-vous ! Boutique Programmez! il Re ey at Prochain numéro HORS-SERIE N°1 : SPECIAL ETE DES LE 3 JUILLET programmez.comi) 3 BREVES Stopcovid : application se dévoile Ponte de lange ee pre spoememer, oppenion de cont tein StogCovd falters sur Gib le [2c Une pad cade source 0 meen ean xe le docmerinion dive rot et Forgonston de ei Un besa donna: le Gere se ae toplton entement open sre, te dcumertton ds pro pre Bkae> = may “welt ll, medion stl, “sont nl "ak 26 945 eyed test) ) Le nowel allocteur dob fonctionner jusqus deux fis plus ropdement sur cetcins benchmari, selon JetBrains. Cate version inca aus un roweau compilate I intermediate representotion) Ct backend Kalin /, Mais teu print quily ‘ua un probe de compat bina. Swift 5.3 Automne Le grosse noweouté sore lexrnéeofcielle sur Windows, Cété Linu, le langage arive sur de nouvelles dstibuons: Ubuntu 20.04, CentOS & et Amazon Linux 2! ‘Aurdli, a version 6 opportera pas mol de rouveoutés et damefrotons - Posibilité de porter le langage sur de nouvelles ploteformes (ARM 2); - Des amélioratons sur le gestionnaive de paquets Temps de compilton éduits; -Meileure outocomltion du code ‘Aucun egerdo n'a pour le moment été communiqué Java 15 septembre Jova 15 suppotera es bles de texte. Cotte fonctonnelité et etendue depuis les premiees prévrions sorte ove lava 13. Les blocs de texte sont ds litéraux chaines 0 plies lignes. Cest tout simple, mos cela permet dinsérer beaucoup plus foclement, dons le code Joo, des extaits de cade en HTML, XML, SQL, JSON, et. Jove 15 fera ‘uss du ménoge en retract Neshor, le moteur JS 'Orccle, Graal rend obsot le motes Python 3.9.0 Octobre Les peaiées versions lp dela 39 ont ete mn [No adn Fusco tno SUPT (w ‘on u [0a agian rats ate. [10 ugar estruduDetopmsthbopsht eared tages ao 00 SHOT 10 INFO| eat ane snd 26REASEpadage et] it ag NFO epg ae aia ith pang aie w ngojsoun sucess 100 (Wo Totti 4157s (Nore a 00509205 000 0 Pour interair vec OperShit et lui onsmete notre composart, — nous allons utiliser oui gne de commande odo. Oto est norm = FD ement deja présent sur Fenvironnement en ligne, mais vous power Fnstlle si besoin hdc pensions latin rerelpeshit deel einige 24 Iiprogrammez.com Solo veson AUT edo. (ns396) Sere ts hte lena lena seam epic ert .162 [Nous voyons que ot eéuilie la connexion au cluster Kubernetes existante, Odo suit une démorche basée sur lo notion de composent nous alors dane deve créer un nouveau composant de type jaa qui s'appelere bide, qui se bosere sur le JAR que ‘nous wens de costuie et exposero sur le port 8080. Rien de plus simple rec od» Sedo cae bcand pp huis tba gud LO SUH jar-putany TA Volition ‘dating capt Pose pa anced cee tamper diye Comme indiqué por le message, la commande adopt permet de \elider ls chongementsetréllementdéployer le composant dans lecluster Openshitt Sedo pest 0 Validton Ceingcomonenses Cafguraton anges Iniaang apo eating onan 5] Pshig to component backend of pe binary Gedig fest psn] Wong pent ae 28) Sng fies the cape) Buting oman Une fis le composant déplyé, la commande oi ay permet de ‘écupérer fodlement les logs du cemposont courent- ces 8 die cel corespondnt ou répetcie dan lequel on se trouve: { oe ABN WFOBISD—| mn g.mg diver (lesion tye Wang 300 rb tinrg ot ROLISRIOGLOERESO—|—maeesdwebentele malonate {sig ara cate trea eas bay eatery ben wh ae ‘non defen spat sce spteharever toa anoanexenong Nottie das ntltena anal ester erg NonetinestxinTmeat ate301 rwhle waig ene. et eof che ae ¢ype-UMOONN sees abst.2707, p=, sate-CWECNG naprosyn peng '@ ade, ody a vou santa WOE Sipps ec a oapce tance Santice Yous voyer en nspectant ls logs que notre compost ne démarre pos correctement.. C'est tout @ fot normal pour le moment, car nous ne li vonspasindiqué comment trowerla base de données Nous yremédierons pls tard Déployer le composant “frontend” Pour deployer ce trisiéme et demir compasot, nous allons uit une oure méthode - nous almons la dverstéchez RedHat). Nous ‘lon utiliser un autre out ign de commande - pour OperShift Certo est en fit un super-ensemble de outlet: toutes les commandes lait! sont présentes également dons «c mais ce errr présente quelques outs intceso Secon Our: (a eso apni ces 43 31 gas Serer Ves: 435 obec Ves v.162 Shien 0 — (at eso sin jor Nor 17 lest 1172, Giana eet ang EB THN GY, eee dea line 2001-2T42130, Golesi gp, one at ava) Sere Vessco" 1 Ges VL167 iGo WH Tete ea date: 203.7807 Geo’ 1212; Conley, at nua) Yeus pouner notamment utiliser indistinctement het ov & pour consult des Pets dployés sure cluster Stet get pos ure: NaN READY STAMUS RESTART Act taxes ey 0/1 Conpleet 05m 23 programmez.comi! 26 tocené fis tg Hing 1 ang 019m ong -epy (1 Gmetad 026m ong 9 1h Raming 05 Nous vos pout le moment deux Fas en fig un pou Te bose un pour le composont hae, Pour déployer le dernier composant fetend, nous clos uliser une fonctionnltéPooS d'OpenShift qui petmet de déléquer la constuction de Vimage de container & OpenShit en lui cisont dll se sourer directement dans le référentiel de sources Git. Cette fonctionnalité se nomme Source To Image (ou $2 Pour cela, & posséde une commande new-ap qui permet de référencer un template de départ que fon configure en indiquant Hadtesse de note ceférenil Gi, Comme nate compasant est un développement Angular qui se consuit avec NPM, nous alors utile simplement un template de base mes qui content di es cutis permettant le buld outomique Soceeapp neg cea ane slept by eal git ~onteti=fené ae forte ~bbes—aplabeesnparf=futs- alg appopeitinnetimeadeson-¥" OU ~> Funan: 86042 wees oi nia seam oper drag “Toco Nadejs10 u => ces Bul ceded, use uclos-Foonen tock page. opicaion ot eps Youn goss the ue ny ing neat roth cna on: ‘xem stetent An's tiewyouragp. Wouch ! Nous voyons quune simple commande permet de créer de nombreuses ressources dos le cluster! La commande reapp permet abstr la nation d'application mul-compasonts et ‘ins’ dinstoncier ts focilement des pplictionsstréohypées selon des modeles que vous power dfn Enplorons quelques objets spécfiques 8 Openshit Le Busi estcréé pour souvegarder les éléments de configurction de la construction de notre compasent fonte. Nous voyons implement ii que cest un bllé de type Sue qui est confgueé ‘avec un fentel t, voe | Buld en coves MME TYPE ROM LATE femterd Soe Git 1 Les hls rélsent explctement fopérotion de construction d'une imoge de contcines en rélsat le processus Source To Image Is. possiden un ruméro et chaque nouveau déclenchement ineriments Nprogrammez.com ume WHE ROM sATUS sanTeD—ouRATON fomand| Sore Gtetdes3c Compete 2mintesago 2s LimageSten représente une portion de la registry interne & Openshit qui est réservée pour occuelirles images de conteneurs résutont des diférents us dun composont Un inssteam pourra accueil difécents ups permetant identi es imoges produltes Par corwention, le tag test désigne toujours la demi imoge rohit Inet ogectg * img ope age est clyde ‘Su DT MATSCTHT HOSTS Botan ago Folement nous pouvons exposer note service frontend ou monde cetéiau comme recommondé dans le messoge de lo précédente commande rep reteset apeilenend esed Colo 0 pour effet de créer une fave (Url) qui nous permetra occéder pplication depuis etérieur du cluster Scotts ore — ue wostponT PATHSERUAESPORT TERMINATION WILCKE frend tena deat enan Tielemans 78 ample peniccon frend BI8-cp ene Regardons meintenant ls logs de notre rouveau Pdr Subea get pds OUTPUT me DY SATUS ESAS J acento ephy 0 Coed 019m ace tsctlg-Hing 1 oming 018 fendi 01 Gompkted 0m foe epoy 01 Ganpkted 0 Sm fotend-12p9f taming 05m onge--eply 1 Completed © 2m ong Fac Vi Feming 0260 Soc fntend-1 2p OUTPUT fnscoment DEY_NODE= fe ote_EN=pedtin DUG_pORT=SBS8 Laaneting vir. ‘min varies ito ino wing p96 134 gir wing dea 0190, gino eis log i001 -prestart fits able vied. 01 gine for pap oni > deers CFG ERROR an’ fd taken see fe’ AGEND SERVICE ena Nad apis umn ato elu est également en erreur, car nous ne lui avons pas indqué cermin ince le sence backend els APlpemetant dive dns a base de données, Ces admire tape du dépioment:lconfguation. Configurer le tout ! ‘Afi de ier nos composants ensemble, nous devon les corfigurer& Voide de wos notions diferentes peésentes dons Kubernetes: ls Seas es Cospet es vrcbles¢' environnement Un Secreta deft été eréé pour nous lorsque nous ovo dployé a base MongoDB. Nous powvons voir qu'il content des données sersibles encodées en bose64- es infos de cormexion la base Socgeseatinnend «jan UT — piesa: aa abs nin pase: SOLON RST anbse nee: oF ‘aman: ‘enptecpeshitioleaps énie_pxsued: ant db atin paseo ‘emptecpeiitepesedaaise mane dat ditnseane’ Ienpatepeiitoepose pas Lda dbp) ‘empatepetitoeose werane xl Yaatosease) [Nous ollons powairréutiiser ces informations pour er note composant bidet la bose. Nous devons tout daberd créer une Cenfighp qui permettra d'injecter dans le composont la configution dela connexion Socrates yn its taede 0 — Cosignap tenon ened CCtte Cn dfn un seul fichier applatinynl qui porte une simple propriété corespondant lo chine de comeion la base de données. Cette chaine de connexon est defini orice 6 des ‘eiablesd'emiconnement dies por SMONEDS..1 Sec get nian ction pling ta moog. ora MENSOE_ DTN SENIDE_ DAME ASSHORDj¢mngats DUTT in Conigap Nous devons maintenant indiquer & OpenShit que cette Cp doit tre ossocie & notre composant et quelle dot tre inectbe& un endtit précis dons le réparoire ilo, Cele se fit fgrdce @ lo création d'un Yelune pour déterminer un point de ‘montage du conten de a Cog ‘Ses lume dated futsal ad -nane hacen cong vole - uhm pen yap cfg rame-bacentang OUT: eloymetoiapes openhrackd itsatog lune opted Folemert, ls varobes d'enironnement utlsées pal Cfiglp Operators dans le menu de gouche, comme init en rouge é-deses: IE Par sou de concton dans cet aril, nous allons intone les pcos @ ever: des resources YAML of deter det cepet deen ralonge ) Nous aon pou eta lier les Fichiers sts dns le pete monitoring du rent Say Fanon is ta pod Utilisation ds “ServiceMonitor” pour monitorer application Pourque Prometheus puisse récupérer ou “scraper” en anglais es métriques d'une application, il faut normalement créer une configuration fostdieuse dans Prometheus pour indiquer les caroctérstiques de application @ surveil, et les injecter ‘morueement dans Prometheus. ‘Avec\'ércteu Prometheus, i suf de créer une ressource de ype Sevillntor qui indique quelques éléments clés: endpoint & suveler interval; et application identfge par unseecteur sures labels, comme décit ci-dessous Ans dons cet exemple, nous alls surveler te un lobe appt ct le port 8080, et récupére les metriques interalle de 5s. Cela tombe ben, car un endpoint Prometheus est dja clsponibe sur le backend Spring Bot, car nous utilsons la brie mame renee. Cet endpoint est disponible sur le port at, sur "URI ‘acutiponets. Pour le érfler nous allan fie un curl dans le od du composant bockend grce lo commande stom dpa service portant lesancetudend, sur Yendpoint/atstrpnmethes Scena ‘#425 calhtp/buahstmlctutdpamehas RP _ecn_ se, yes Theat ed meng TPE. se bese Ivm_meoy sed beara" 8S Spe’) 50300 Ium_meoy sedan "way PL) 254228 ses "a 0201685 HEP onct sess. pire sess al PEona esos eed esos ttl cuter ooct esos ied. 00 Pour vier quel calete de métiues se posse conecteer vous power our prometheus et vrfer dans le hima c-desss Situt sept crrecement on dew oir un ttt “UP” en vet devant Fendi terpenes qu rou overs darandé de soale torget Visualisation des métriques dans Grafana Grane est ot op. 6 patie de diftrentes sources de données, extrémament populie source peu rlisee des tableau de bord dons I'éconystéme Kubernetes et Prometheus, Nous avons précédemmentinstllé lopérateur Grofona, et déployé une instance de Gran dons le projet “tuits-catalog-prod” Gaafana nécessite une sur , qui sera dans note cos Prometheus. Nous allons encore une fis béndfiier des avortoges utiliser un opérateur, car celui-ci nous permet de créer ddrecterent une ressoure de type Gabmaasoute depuis un fichier YAMIL, et c'est fopérateurluiméme qui soccupera d‘appeler ls Rep Hat pvimitves Grofona pour eréerla source de données Cela focite énoxmément nportexport de “datasources ou de “doshborde" comme nous le verrns pls ord Seca mnt éniboadl pena tae -fasat od lnous rest créer un dashboard pour nate aplication, cette foi fen crdant une ressoutce kubernetes de type GafaaDaiboad, C'est lopéotew qu se chorgera dinjectr ce deshboord dans instance de Geofona Secctle- Innings meng ryote Linterfoce graphique d'OpenShift nous permet de céer ou vale rphiquement ces mémes re ron svt, dans le menu de gach Operators -> Installed Operotrs puis en clquant sr Grofna Opertor dans liste: Et voll Notre instance de Grafone est ceotecement configu, et nous devine voir le dashboard suivant montrant 3 2 backend, temps de réponse de Yop et ution des ressources de la VM de ‘appcation Backend. Conclusion Nous avons ww dans cete pare comment Openshitt permet de promowvoir une pplication d'un ervironnement di .oppement”@ un eute envtonnement e “production’, en écrivant un pipeline CCICD ‘escode’ outomatiséfourissnt un langege edopté pour OpenShift afin de ‘impli ecrtue de ceux, Por oilers, afin de surveiller notre application production, neus avons déployé Prometheus et Grofana, tous les deux basés sur de ‘opéroteurs Kubemetesfouris por Red Het dons la marketploce. Ces opérateurs Simplient grandement le déploiement ET la configuration de Prometheus et Gafona, en étendont AP de Kubemetes aver des objets comme Gafratanure ou Gotsafuhbuxt pour Grofane, ou ‘encore Sein pour Prometheus. ‘ins, des opértions de configuration qu aucient été fostdieuses cet manuel sont simplement eéltdes on caont des essources 8 pote de eur triton YAML, dans la pure ration de Kubernots ‘Avous de jouer mintenant! programmez.com/ OPENSHIFT 33 OpenShift avancé Jusque-la, nous avons déployé notre application comprenant plusieurs composants (rontend|backendiBase de données) et nous avons mis en place un processus de CI/CD (Continuous integration|Continuous deployment) pour promouvoir les differents éléments dans un environnement de production. 34 + Taffiemamt + Discovery control ensemble de lo pateforme Openshit et de tout ce qui est possible de fore ove. Dons cete patie, nous allns pousser les copaciés de notre ploteforne encore pls loin, en intredusart tun mailage de senices qui titer les fonctionaltés opéation- nelle transierses de nr infstractue cin qu'un nouveau com posant serves Préparation de votre cluster Cate pot et a site dete de la patie 3 tse bose sur es ents dj deploys ders ate pate vous ever temps, nous \ous coselonsdecommencer pr ct pare Sil temps wus est comet, os power ier “occu” exp dvs encart Dons cet patie, neu los ire ape & des saves comelémentcies 4 OpenShit qui ne sont pas actvés par défout sur votre luster. Pour intller ces senices, vous eure besoin des dots deer ain sur votre duster installation de ces services vo demender lo cagofon de deux nowveou projets: tose pour le Service Mesh ‘acess conte ee ee ‘Ratenteaton Policy enfocement Nprogrammez.com ot knatesering pour la parte Serveress. Linstallation de ces Hlments été sritée pour lo version 43 dOpenShit et est ao ast, nano " pubic ate, acess =ral-> boo cl srl bet iene = "cet aoe stant Rei, letthjot le esis sek eto elle be tow new ett "lems sig ompleert ine 2 : ete = de> tae isthe | eu; ' 39 programmez.comi/ 40 Per rapport PHR, on consate quelques petites difrences = Pour défi le type de retour d'une fonction, cesta fléche qui est lide. La céfnion des voriables sft vec le mot-cé vo. + Lemot-cl et permet ssigner des voleurs aux vrables dries =lin'y pos de $ovant eth Pourle rest, clest du PHP trodifonn! Aujourd’hui Lo dee vsion de Phokon, lo 04, dated 16 rai 2020, Quant d Zephir, nous en sommes & la version 0.12.18, sortie le 24 cv 202. Le 11 rove 2019, PECL (Gestion dexesion PHP) a validé l'entrée de Phalcon dans son célébre catalogue. De cette maniére, il est désormais plus simple dinstaller Phalcon. Le 5 joer 2020, fal tt pub un I int «Phan - Desloper der oppictions Web comple et eros en PHP cx Edtons ENL. Celine rserte tise dnsle doles fonctions de Phan, les difrertes mares de use... que de nombreux exmpls et cos lectins qu vous cient tout along deYancement de votre poet avec Phcon. Pholcon et Zephir on vs deux beaucoup éoué depuis leurs bts. Cependon, dns ct al, nous nus concerns sur Phaicon tes foncionals ls Les fonctionnalités de Phalcon Un framework écologique et robuste Fholcon snstolle comme une extension. En autres termes, tous les fichirs qui composent Phoicon sont complés en seul fichier CependantPhalcon dot te compl en ditérentes versions afin de fonctonner ave es jtémes 32164 bts, ls diferentes versions de PHP ins que les ciférentssystémesd'eplotaton. La compilation poséde de nombreux cxantoges Toute code st onclysé. iyo une erreur o compton esta tée. Ce qui ossure une melee stoblt, por roppot& du code inerpete Le code et compres equilevend a fos égert pus simple 6 intl I suit de copiercolle un hier ou so, cul de récupérer un nombre conséquent de fichiers (comme le font eutresfomenorks avec compose Ustersion est opfimisée pour une architecture spéeifque Il est rime possible de compiler so-méme Pholeon. Leque Pholon et instollé sur un serveur Web, toutes les ap cations pewent utiser A potr du moment oi le deemon du soveur Web es lon, ls clesses et fonctions de Paleon sont acesibles. ‘Ave tous ces eventges, Phaleon eonsomme peu de mémoire et ‘de CPU. Pour plus dnformations, je vous conseille de lire ce benchmark: y/o phan Ces quelques extraits d'un cos dustin de la RTM (Résie des “Trnspots Metropolis) démorrent es performances de Pokon. Le document cote de 2018, tous erourererleen@ latin deri, oil probléme reneonté parla RTM «le problematque principle de ce site est tre capable de ‘9é¢er plusieurs miler de requétes por minutes sons rollonger le temps de eponse& clles-ci tout en optimist ou maximum le roto cots dinfostructure/performances. » Nprogrammez.com ls ont done opté pour la scltion Phokeon. Vic leur retour dps « Nous ovons pu constater que Phaleon s‘avére d'une uilté redoutabe lorsqu'l est question de performance.» « Du cit d site & fort trafic, lors de tests de montée en charge, nous avons pu constater que Phoon tient effectvement ses pro= messes tant en matére de nombre de requites qu’en temps de réponse, mémellors de pics de trafic». Architecture MVC Voici 6 quot ressemble le squelate de base d'un projet Phan, ‘Vous devez cercinementreccnncitre ercitecure MVC avec les dossiers Modes Views / Controllers Le dossice config permet de defini ls poramétes, es services, les routes et es espaces de noms. Le répertoie migrtions permet de gérer les migrations SQL des boses de données. Le dossier pubic content les ressources st tiques US, Images, SS...) Pour fn, le perce coche content ls fichiers PHP généxés por le moteur de rendu Volt Phim. LAPI Rest lest plu simple de créer une APL avec Phocon, I suf de créer un projet de type MICRO avec phocon-devtoals, etl tour est jou. ‘Voici un exemple d'API simple avec Phaleon ‘999 = ne Mee Sepp get con eum she> response >see “ut nce, Sepp > onde wl) Sapp >respnse>setaCobel Yt Fou >seniede) hs Sepp handle GET a )27, ‘Avec la cosse Mico est posible de créer des routes avec lurs fonctions eszocies. Comme vous 'euez sare davte compris, vous power remplecar GET por une autre méthode d'APl comme POST, pur. lest uss possible de gérerles routes inconnues (ex: ereur 404), Comme en timoigne Maxime « Pholeono tout dun grond: framework MYC, micro framework pour de API... méme pour une simple page, ps besoin de com> poser le tou ia une extension PHP développée en C. » Le mode CLI - console Dans lo plupart des projets, il foutexécutercetanes tiches en arre-slan, pou itéretes raisons Des técheslongues, pendant esque utilisteur pout scbsen- tere re overt poral ountiication lorsque letritement et fn Des ches currents ypiquement des taitements de mainte- nance, comme nttoer la base de données. - Des ches plaifiées, pour emoyer des mails cutomatiques& un instontT. Pour ce genre de problematique, ous avez deux sohtions Lo pre- rie consiste & se tourer ves une techno supplémentaire. La seconde, 6 utlser PHP en consale Pour évtrdinstale des éléments supplémentaires, je pire ut> ser CRON et appeerun script PHP. Phoicon propose ce made console pour répondre & cos dren besoins, plus encore Pour comprendre comment cela fonctonne, vous pouvez créer un projet de type CLI avec phalcon-devtoos, Voici un exemple pfokon pt esac Le poet MesTaches st ere) Un proe de ype CU peut focement re ite 8 un poe om le i sufit jot eh suivans + opps = eppiboorstp php Cone vous aver sans doue devin, oot detche efit dons leripetoe toss en cant de rouseles classes oven outa des fonctions dorsles cases stots Voc un exemple pour lancer ne tche: plonnveson ‘vec cete commande, Phocon lance la fonction mainAction) de la close VersionTask phe, Requéte avec la base de données Polen propose ditrentes maniéres dinteragi vec une bose de données. Ilya: - ORM ~ Object Relational Mapping; = PHQL ~Pholcon Query Longuage - DAL Dotabase Abstraction Layer. ‘Avec le Dotobose Abstraction Layer, Phalcon interroge la boxe de données en usa PDO. Cesta meridre classique pour interoir ‘ovec une bote de données MySQL, PostgreSQL, Salt. Exemple¢’tisation de DAL. Sthissdb facet ‘ELEC peo rom emai Frowutitews WHEREpenm= pena, Dh ASS, C ‘penon'=> oa Pour intrroger une table de données ovec ORM, il faut er une classe. Dans cette clase, on peut prcier les atbuts del table, leslaisons ever doutes tables cinsi que des validates. Vidéo est cde manipuler des objets, de passr de tobe en ole pls facilement cet de sossurer dela vlité des dornéesinsréssen bse, Exempl 'utsation de FORM sx ctl tar et ce j ‘public email; mine riding ' ‘theta, 1 fossa pilin ian) 1 ‘adatr= nen Pantie ‘late ew Eat l ‘mesage => Yule rer me ates mal oe, 1 eu Stis-> atelier, 1 1 Nous orions enfin la méthode la plus performante avec PHQL. Clu et itégré& Pholeon comme un porseur de requite SQL, ais éeit en C, De cette moniére, Monalse et Iexéetion des requétes SOL deviennent plus ropdes. De plus, FHOL utilise ws ‘peu de mimeire, ce qui rend thread-safe, Example tlistion de PHQL ‘HHO, = SECT FROM Noallone Moses WHERE pero ie enon’; Safest = Sbis> melange > erected, shal, i ‘ean => 4a 1 programmez.comi/ Gestion d’un lot de résultats avec la pagination Philcon propose ut un mode de pagination ecace ct pide 8 mate en place. En eft, Phacon pet poginer des suka sus Sotonsucet, “i => 10, ‘page => SoPagxounnte, 1 Q ‘oPagie= Saat) ‘On accéde ensuite d tout un tas de proprités qu pemettnt de recuerdos domes etn): e numéro de lo poge précédents etre): ruméro de page cout etter) Inst des eéen's courant ctl: rumér de poge sivont. = ela: e numéro de a derive page = aries) le nombre ements choger. Gestion des droits d’acces Palcon permet de crer une sate de droits aces assez foci lement I out défiirune rote por out: ct out refuse, soit tout accep. Sold = new Pak dcpteMeman; {ohd-> sulci Pha A ou-D Ensuite, faut dfn les noms et descriptions des es. se Phere, ‘ses ‘verdes => ne ae ‘verdes, Acs 3a sectn ete de pds! » ‘et => ew fe ‘dens, "Aas a setion Baht pls! ) F each (aks as Sale) Sot >a il, ’ Nprogrammez.com La demie étope consist indiqer é Pholon ques sont es dis possédés por chaque type dutisoteus. eka eCopt Sekt =| ‘ees => | ‘voles = po) ‘pes => [noma 1 des =>( ‘Gens = po ‘pais => (ate L wot ‘ae => (ne, omesi, ame) ‘eas =>" 1 t fret Sconce as Sle => ae fee atlas Conor => Scns) | SeCanpentonuur =e Camporese; feats a Sct Sok >afdConporentCompoentContleu, Stn) Sok>alow$sil, Soak, cn); 1 , , Létcile symbolise «tus». Dore selon le tableau c-desus, ousles utiloteurs ont acois out pages index, connexion et déconnexion| du contiblew index. Er tous les utisoteus ont le dct doce 6 toutes les actions du contrleur erreurs Iifautaiuter chaque conte dans Fabjet ACL vec le fonction addResource lesxte ensuite dew stratégies possibles:indiquer es ccs oto risges, ou précierls actions interdtes pour un utisteur don Pour autoriser un utlisoteus il suff utilise lo fonction allow. Pour luirefuse acs, il fut utilise le fonction deny. Pour éiter estos foreachmbriqus,Pholcon propose de éiliser objet ACL of de stocker en session ou dans un fichier. Aprés avoir efectué tous ces poramétrages, i suftd'utser la fonction Allowed pour savers un ullzoteurole droit accor 3 une poge Parexemple Sohi->slowe des, pms acheter Par rapport eux paramres précédents, la fonction répond tue ar un ufsotew ale doit d acheter un prod Sohd slowed dens, puis); Dans eos la fonction répand fase car ce rest quele vendeur qui ae dot de créer un nowveou produit Boutique Programmez! BHT CY] LC ipsam Les anciens numéros disponibles TRL Python 3.8 PS ean ELD 1973-2007 ee Technosaures. )N"1 eee soit exempboes x7,65 = cud Histoire dela Micr-informatique , Barked soit au TOT) | Disponible UInjecteur de dépendance Le (Dependency Inject) permet de créer des services utisables pertout dans fappication. I est posible de créer deux types de ser + simple: oppel complet du code; + portag: fonctonne comme un Singleton. Ces sences sont dfinis dans le chieroppicofig/servces chp. Voici quelques exerples Un service simple Sait, fonction Soa = en Fp Sorat ra: SP >mageago_enee gn 85.25; eu oa k Cecode permet de créer un nouseou POF & chaque opp du seni- ce, Ce POF est pré-poramétré avec un ago dente. Pour applet ce service, depuis un contréleur par exemple, i suf écvire ins- ‘wuction suivante = {9PDF= Shi > een, Un service portogé S>seShaed ony con eu ide AP_ PATH. tap a Poury avoir occ, il sufi utile instruction suivante ‘ati = Si > th, ‘Moteur de vues Volt Pralcon propose son propre moteur de rendu de vues. Il est bien ‘entendu éert en Zéphir/ C, ee qui le rend tés rope. Volt ‘emboraue de nombreuses fonctions tbs utiles et permet par ‘exemple de formater(spprimer des espaces, citer des coracéves ‘ui provoquent des eraurs JS...) de la donnée ov mime de lo ‘wansformer (ver les valeurs d'un tobleou, mettre on moje.) ‘Vous pouvez retrouver ces fonctions dens lo documentation de Prolcon ainsi que des exemples dans mon lve sur Phan, oic un exemple ért en Vol (bd roi) {8 poutine om: protien) (Sifpotatsats== act 6) ret: rtp + protuit es10)) text) endir Prenilok 9 Nprogrammez.com Gestion de formulaires ‘Avec Phalcon est posible de créer iférents types de formulates assex ropidement. Gréce @ pholcon-devools, cette bate & outils vous permet de créer des frmulies dcjut | modification / sup- pression en une seule commande, I suit dindiquer sur quelle table e baer pourcrér ces dférens formulots Exerple de commande phan co tle anette ~empate-gine-ac ‘Vous power aussi créer vos formulnires vous méme srs ide de palcon-dewtoo's. Ala bose, Phaicon propose diférens types de champs ovec des volidoteus pré-paramétés Email Fichir, Date, Zone detent. ‘ous pouvez assy ojouter vos propresvalidteus, et en une seule commande Phelcon contéle les données sis por Iutilscteur Silly odes erreurs, vous sft de récupérerles messages pus de les officher. Voi un enemple de formule: ss ister ten am c pubic ina) i Sofmal=new Emami, ‘pele => Sasrunesnat, ‘tas => tomcamet, i Sofa >be na, Shi >aatsfnal, Sova nen Paso ‘lal ~> Sabian not dep, ‘tas => Yount, ik SoddePase >seabelot ease, Shi adtstePase, , , ‘Apr arr instnci le formuicire crééprécidemment, i suit de passer objet la we. En Vol, ult user instruction suivant pour ginérer le ibellé du champ (om aber Lobe form générel ligne suivante: ik fora a abe Pour généer input, suit utiliser la fonction render (om ere) Lo fonction produit a Fgne suivante - Gestionnoire d’événement holon posséde un cotlogue assex conséquent cévénements sur lequel lest possible de se brancher. Ce sstéme est identique oux Hooks de WordPress. Il est méme possible de développer ses propre événements personnal. aut svoir que ces événements sont paticulierement utes: ous pouvez par exemple contrdler'aces aux diférentes pages de vote ‘pplication. Un outre exemple pratique : vous pouver récupérer toutes les exceptions afn dels reiriger dans de logs, Ilya de bonnes opgonunités de conception & sas avec Phalean De cette marge, vous dupiquez és peu decode et votre applica tion est pls simple @maintenic. Voici un exemple ee PhaodieDiptdr, se Plone bag, Scotaier st “bape, ‘ant Seestcnatefvenet = neu Nang; SoGescnatefvenement->atach ‘Soper en Scat ib SoGestcnarefvnent ata "Spaetnecptn, ew treurogn i Sodptce = ne Diath; ‘adie -seenllnag Seesmic) eta iat, 1 Dons cot exemple, jossocie un plugin (une ciosse) 8 éxénoment beforeBxecuteoute dans le but de conte cats aux pages (ut lsateur connect / non connect, niveau de dros.) Lévénement beforeBxception permet de réceptonner l'exception vant de fore peur a utisteur qu porcourt application Web, Sivous soubtes décousrir doutes atuces sr cet aspect, je vous Invite &censuiter man le sur Palco. Gestion du cache Si vous souhoiter aller encore plus loin dons la performance, ‘is en cache est une solution ts intéxessonte Lomise en coche est ule dons diférents cos - Lorqu‘un cout complexe et long est effectué et que le résutat change tis orement, ~ Lorsqu’une we / page HTML généxée ne change quosiment Fomais (par exemple, don le cos d'un ste vitine ttiqu). = Lorsque les données recupénéesgrdce @ une reqéte SQL vorent ‘res rrement. Leéquipe de Pholcon conslle toutefois de comporer les perfor ‘ances, ovat et aprés lo mise en place de cache. Lesenice de cache sinterfoce vec dlfrets moteurs Ape, - Libmemcached, Memory (stockage en mémire), Reds, + Stream (stockage fiche) ‘Apr avoir intl Ie service de cache avec un des moteurs pré- cédents, vous power ojouter/ écupérer des données en cache > eta: ‘Setade= oo esas; Sahel =SCae-> geal feats ul Safes = Lote, Sota >see, sees, 8540; 1 Dons cet exemple, je fente de recupérer en cache les rsutos du Jot. ly ade raisons pour esque le cache me rence valeur ‘ul: sit jeri pas encore intoisé le cache; sie coche o exp. Sie eésultot est rll, je fois une requéte vers un serveutties afin de récupérer les demiers résultats du lato, Pour fr, femegiste ces ‘nouvecux rstts en cache pour une durée de 86400 secondes (soit 24H), Jene suis pos obligé de prcserla durée ¢'expiration, la durée por <élout est poramétrée& intlzaton du sence de cache. Le cache de requéte SOL Preon va encore ps in once qui concern ls roqudtes SQL Vous pours indiquer directement dons une requéte PHL la mise encache du rut. Pe exemple Soe = Sh > made anage > cea SECT * OM Noreen ode Uisates WHERE pene UE reno Soe race i Ww = dates phi, programmez.comi/ 45 ‘etn’ = 1400, 1 r Gréce la fonction cache, plus besoin de veri sie cache a exp 16, Sfout elancer la equéte... Tout et géré pale systime. ‘Yous poune trouver cute exempls et plus ¢explcations dans ‘mon ie sut Pholeon, PSR - PHP Standard Recommendations Fort de ces experiences précédentes, le cee PTT ST EE cormorant eps sur le site hiips://eww.php-ligery/, et édi- pole ee ee Le terme FIG signifie Framework Interoperability Group. Vobjectit a ame pretest eos te rane og s “testes “Themesage MUS bea stng bjt npementng_ Sg) “The mesage MAY conan platen ter) whee fo “ite led by theca ia ine" “Thc nay anti air dhe on sumption bat “ante maebynpleneos i thatian xeon stances gen *ropodice asada, MUST inal anedexepon, “Seta ii sudo ate RS ge med "ore iter peat. " ner aggetterice ( » Sysemisumsle *epaamsting Smesage Nprogrammez.com *epaam aay Sontet * eretum aid a icc erergencimesge, ary Sete = ar; é * Ata stele meaty alte weit conn, aaa uae Tsstoukt ig te MSals and ake ou. gpa ary Stet ret 4 put nenlet( esis ary Smet = ara); * epan sting Snesage Les romeworks qui epliquent ces PSR renden eur utlistion plus accessible ou développeur De plus es outils ters ont moins de code 6 crite pour sieterconnecter & ces fromewors, is doivent simplement utilise les noms norms. Palcon s'est fie de respecter un maximum ces PSR. Pour renfor: cele respect de ces norms, aversion 4 de Phcoa requiert une etensionsupplémentirenommée php-os Cette etenson permet wimparte quel famework ¢'utise isin terfocesrecommandées por PHP-Fig. Désormois, Pholcn utilise irectement ces interfoces et proure encore pls sa détermiation| es oppliuer Ahoure actual, Pholcon gir ls PSR-3, PSR-O,PSR-4, PSR7, SR-11, PSR-I1, PSR-13 e PSR-17. Ces PSR sont details dans a Aocumentation en ligne de Phooon. Les inconvénients Vinstallation Pholcon posséde beaucoup d'ovantages, mais uss quelgues points fils. Le premitre chose & sowie: pour Putiisr en pro- Auction, il fout voir lo main sur le serveur ou contacter votre hébsegeue Comme vous le saver désormois, ce qui rend puissant Phalon, est quil sit art comme une extension. Ms cest ust un pint faible fout pou insole t Vojoutor directement & PHP Si votes serveur de preduetion ast mul, colo rique dtre com- plus. Dane cecal feut contacter volte hébergeur pour lui demander sFlest possible dgjuter Phoean, Ce qui peut peser dons la bolan- 2, cest le fit que Pholeon soit désormais installable grce & PECL. Cola lui confer une cetaine crédibilté cures des haber. dgeurs et des administateurs systémes. De cette focon Phalcon ries lus qu‘un simple framework Open Source non validé pr la communauté. I et reconmna ge & PECL. PHP 13,377 commits Lo communauté El La communauté de Palen s'est concentrée sur ce qu'elle st fore deieus cesa-de del tech et ign, Last de Coté, jusqu’ic, lo partie communication (meetups, événements, ar- files.) Ce ui a di certainoment entciner un mangue de abit cps des déoppeu. ‘Conséquence : peu de personnes connaissent Phalcon, méme de ‘nom. J'espére qu’en écrivant cet article, je contribuerai le rendre fis cnn ~ parm es rambrew langoges et fromevers extant serie marché Depuis que j'ai intégré I'équipe de Pholcon, (‘ci remarqué ceci : des avian nouveau devloppeur commence oy inresey i vent per quelques qpeston sur Dicord au sure forum di. En fenant vars um quelques serains ar, is sont rvs et ont cempltemert opt Polon Aujourd’hui, Phoicon o bientot 10 ons d’expérience et sa commu- nat et pete, ma fide Dans cee cofigrton,dfcledécrte de rowel fontinna- IRs en grand voume. Masi 0 qvelues ef pois deo Nos proron les ches spas impotntes = Nos borne une wie fxion cunt amare de penser etre les fncorois. - Now purrs foclomert parce on compe ls condoms Lesadminstteuspement ets dee tate es suggestions ety repondent ropidement. Je ne sais pas si vous avez déjé essayé d’intégrer un projet Open Source tendon. Souvet, es edness surcharge par les propor de cade Ce eur demande du tens van de pminciln tobder we code tec Poko, el ps recon ce problame es anit tev ent occcilons tous dent one Depuis que spre de quie de Phalco, fe pum méme ous ecole vous guider dra os renin ps Lo peur de foire une grosse erreur vous empéche de vous lancer ? Je vous resue, le prit ext bien veroulé ot de nombreutes toches som eufomatses. Grice au tet et & Git Aion, chogue cade emoys et pea pen Lcode etter Linn; mocOS, Winows et shune ensur vient cai dle coger San io code ne sore pos ing do Polen. De pls, valstin de deux cvelppeus conf et equi Pos deste! Comme en teroigneFenck «Palco et le eller des tareworkscstorsbles, ove une commune cote des logos.» » 10 branches M0 releases 4. 245 contributors ‘Conclusion Sespire que cet article vous a donné envie de creuserce sujet, Si vous souhciter vous Jancer avec Phalcon, je ne peux que vous consellr le premier live francois para é- cemment et dispoible en libre physique 2. Cet ouwage détaile ous! les nouveauté apportées por la version 4 de Phaleon Si vous over emvie de tester un projet Phaleon conten, je out conti ce priet Gt ‘betps://gthub.com/les-enevatour/phalcon-neve-mooc Un GiHub Acton e incl dole proj i permet de tes projet: Cres genie ue vida tet our corer Sufi dee ere dos ong Aco, puis de cue sre der sie test. Doo poe tas eee un telchorgeabi Covtenntune wo. Pour plus d’informations : Interview Andes Guteres 2016: hgh aimee Interview &'Andeés Gutéree~ 2015 slogan fv wit hcp ean tee: Premire version de Phleon: s/t an/tcw/phonekeseahlan0.45 ‘Membre du PHP-g: p/m sip fi.oy/posnel Liste des PSR: hse e-fgas! Exeme PSR 3: hss San! DocuretationPSR-3 Poon: s/n lo Livre Pelcon hurt iia pas pont SABES Case study de Phaleon parle RTM ~ Régie des ronsprs métropalitains pdfs dee 2010-5 pong Droutes témeignoges (en anglais) is orepakoniosi/207 vhs po abet hb ame Update README md fl {os Integrations tests Tess th pes Worktow fe Tieran © scones oin 08 ata 1B eypess-videos 47 programmez.comi/ el , Un formulaire vraiment réactif avec ngular et RxJS Dans une application de gestion, un formulaire peut rapidement devenir complexe. Ce champ doit s‘afficher ou pas en fonc- tion de la valeur de son voisn,celui-cidevient obligatoire si 'utlsateur a coché cet élément. Il existe déja des outils pour créer dynamiquement des formulares(formly par ex.), mais oucun & ma connaissance pour gérer simplement la complexité d'un formulaire dont les champs sont nterdépendants. Le probléme @ résoudre Délinsonele formulae que nous Teut dberd, nous avons be ue vo expoter notre formloire rposons de rendre bat in d'un modéle de données pour Co een eee er ery ro een eee ee ere ee one Mointenont que nou cet en place, Maintencnt un peu de challenge formule dlossique et objet, nous pounons construe un Note frm ul Faisons enter lo complex. Nous allonsdéfnr des rgles m «que note foemulare dewa respecte. {Component Ont on eagle ae Mitterrond nest visible que si beoujoles est supérieur 100, Pressing devient youpi si Beaujolais est égal a 101 et si eens Ce ivf go ere om g on eee ere er tn hana any Pen? 48 iiprogrammez.com Mitterrand est un homard, Si conard est égo Lucca, alors beaujoeis vou 101 Simple, ron ? Foce & de tele rigles, nous pouv cjouter des conditions et du code @ la fos dans le composant et dons sa wu. Le problme est que ces réges vont avoir tendonce 6 pter pour care dans le temps. De plus cele raque vite de rene le formule Découplage métier / technique Nous souhaiton poe les parties techrique de dose priests, Nove souhitons ler ces gles ors ies rende fale foe ole et fates 3 ons pus. Une fo est texoble et donc imple foe frober et & mainte Pourcala ren de mieux que de yn pure Definition : une fonction pure est une fonction dont le retour est toujours la méme pour les mimes arguments dont cu etn Nous allons done eréer une fanction pour chaque chomp dynamique. Pour nous oider 6 garder des fonctions simples, chocune de ces fonctions sera responsable de Fffichage d'un champ et d'un Avent de transformer nos réles més en fonctions, dfissons-er les entrées et es sorties. Les champs dynamiques dépendent des valeurs de ceroins etre champs. Ces valeurs seront nos ens ear Une fnetion régle dot nous aider& déterminer Vafchage dun ete See chomp sa vbilité et son libel. Repréentons cola par un modele ners roca roe ome ype =| me eine ce pean dela vleur modi du chemp, ce sero le sorte de MMAR Ie ce 103 fonetions Exvoici nas gles oi: fener cct Ce cre en i at Se eee ee el Te pete ec! ee et aya ey coord 7 or on ee ae i eee Mise en place de la réactivité revere Se) Lat du erm lesson ffehage. A dome ine Jes sort routes pour de cet état, les ‘a jourlatichage On in out pour cel: les observables! données modfées pr le formulaire 1 observe iat de Fobet pour metre @ jour Taffchoge. Ona De la méme mane, KomouloxSubjectreprésente le fl des or es saeeher Cee met en obume le design pattern Observer, Un Observable est un objet qui encapsule une source de données et en distribue les er valeurs @ ses ebonnés appelés Observer. Le source ne fit pas gerersentrerel directement partie de (Observable en général. Par exemple lo méthode get du senice HrpClent exoose un observable créé @ portrd’une raquite hip ur Ral, un Subject est un Obser so sons sosce de donnée, fournies au fur et & mesure vial py programmez.com/) 49 Un abonné rego les donner & ce moment Un Bebe es ojouté un Subject aprés un net, ne Iefen va pos de Nous avons donc besoin de deux fx: un fsx 12 avec un BehoviorSubject, Dan lee mémes des chomps et un fc pour les données, Pour cela nous allons tut implement étendre BchaviorSubject afin de contréler le plus finer Korma dlr chacun de ses changements 3 possible ces fu, lxConfigSubjoct est notre fx qui stock la configuction et ee TT oe Utilisation des flux dans le formulaire Meintenant que nous evens nos deux flax (données et configuration), il nous reste @ fire deux choses: er ces fx au formule eter es fcentre eu via es rls. ont de plsieurs focons Dune port il esto principle sour aut des données. at i dit te olimenté pales données. enfin i doit réogie cedpter son afichoge. ere formlie eux connées se fit és simperent configuration ux changements d ee Se) thtann ama as que this. form changements autres que la sae crete Noterle ui évte une boule fini on alueCha Foire réair le formule aux changements dele configuration est assez simple ov 5 que nous avons ci KamovloxConfigSubject. Por exemple, cocher le champ mit configurat cand en fonction de se ca ae miter ee ee er ee oe ee ee fab "wt ard! La pierre angulaire : ré-introduction des régles. La mize on paced ux dal folie et fini: le formule 0. rope pour lac configuration mat our atic I nous reste une deri struction de notre formule tacit: fre érluer lo configuration et les données en fonction des éples meters Pour cela, nous clon créerun service déié KamouonService dont le tle sero deregrouper les rgles meter et ks eppele & bon exciet e cer et dintoser les fx de Ce service sera ous en cha données et de corfgurton /programmez.com a et ee ee Pes er | fete ae Scr Pod rt” ai itera" ca | Maintenant, nous allons écouter chaque ragle métier en la "ncurssant”ovec ce dont elle o besoin. is mete & jour nos deux ax en récup Je meter Code sur Github / programmez.com La méthode fee enfant sur les clés demmondée avant de rest ne etour de chaque nde données ule est simple. Elle transform k is apoique la gle demande ST TT ess Pcs erable eee ae fi ena Cree eet ese cee eee) tana Notes Vutisoian de alstintUntiChanged qui évite d'appeler la rigl ile données entivs sont pos chang Et vole! Note formulate ionne! Et chaque cham s'odo bien oun vols des oures champs selon es gles étables. Cel ures, facil teste @ mainte Beoucoup d optimisations peuvent exemple. Jen ai cté quelques.unes dans les es des exemples de code, D‘aures challenges resent @relever: ove des "eq les gles, beeucoup dergles sont ouges en cascade r’appique | ‘qu'une fis a configuration stblisée tz pas & donner ste avis via son Gt Et pourguoi pas une libre complate?

You might also like