Pour éviter ça, a été mis en place le système de child themes : il est possible de créer un thème “enfant” pour n’importe quel thème installé. Concrètement, les child themes utilisent un procédé d’override : si aucun fichier spécifique n’est trouvé dans le thème enfant, c’est le fichier correspondant pour le thème parent qui est utilisé.
Pour déclarer un child theme, il suffit de créer un dossier dans votre répertoire /wp-content/themes/. Il faudra y placer une feuille de style, nommée style.css, qui reprendra les informations suivantes :
Une fois le fichier créé, vous pourrez aller activer votre thème dans l’onglet Apparence de l’administration de votre blog, comme un thème classique. Une mention du thème parent apparaitra pour vous confirmer que vous êtes en train d’activer le bon thème.
Les deux lignes les plus importantes sont Template: qui indique à Wordpress quel est le thème parent (il faut indiquer le nom de son répertoire à partir de /themes/ ) et @import, qui permet d’importer la feuille de style du parent. Sans cette ligne, la feuille de style n’est pas chargée pour vous permettre de repartir sur des bases propres.
Ensuite, tous les fichiers du thème parent sont chargés, à moins qu’un fichier équivalent soit trouvé pour le child theme. En pratique, pour modifier le footer, il vous suffit de créer un fichier footer.php dans le dossier de votre thème-enfant, et d’y placer votre code. Celui-ci peut être une légère variation du code du footer du thème parent, ou un code tout à fait nouveau et original.
Du coup, quand le thème parent est mis à jour, vous pouvez appliquer ces changements et théoriquement, dans la majorité des situations, votre thème enfant restera inchangé.
]]>Le “Plus Grand Commun Diviseur” est le nombre entier maximal qui divise deux autres entiers (deux, ou plus!). Par exemple, le PGCD de 30 et 12 est 6: il n’y a aucun nombre entier (integer) supérieur à 6 qui puisse diviser à la fois 12 et 30. Pour calculer le PGCD, théoriquement, on décompose chaque entier en produit de nombres premiers. Ca donne, pour 30 : 2×3x5 et pour 12 : 2×2x3. Quand on prend les facteurs en commun dans les deux expressions, on a bien 3×2 = 6.
Mais décomposer un nombre en produits de nombres premiers n’est pas à proprement parler simple en termes de calculs. Surtout pour un ordinateur, où les divisions coûtent toujours plus cher au niveau du processeur, et à plus forte raison quand, comme ici, il faudra en faire en grand nombre. Assez difficile donc d’en tirer un algorithme facile à réutiliser et à comprendre.
Sauf avec l’Algorithme d’Euclide, qui part du principe que :
si un nombre entier divise deux autres nombres entiers, alors il divise leur différence (et leur somme). Il divisera donc les différences successives du plus petit ôté du plus grand.
Source: Wikipedia, PGCD (Mathématiques élémentaires)
Il devient alors très simple de trouver le PGCD de deux entiers, sans effectuer la moindre division. On soustrait le plus grand entier au plus petit, jusqu’à obtenir le plus petit reste non nul. Reprenons l’exemple de 30 et 12 :
30 – 12 = 18
18 – 12 = 6
Et voila !
Pour pouvoir écrire le code de notre fonction à partir de l’énoncé de l’Algorithme, il faut qu’on traduise les étapes de la résolution du problème en “pseudo-code”. Le pseudo-code est une simple syntaxe qui utilise des mots classiques et ressemble fort à du code, mais sans référence à un langage de programmation en particulier. C’est une étape intermédiaire entre le langage naturel et les langages de programmation. Son but est de modéliser le cheminement “de pensée” de l’Algorithme.
Ici, on dirait :
Soient $a et $b deux entiers. (On devra les passer comme paramètres de notre fonction)
Tant que (reste de la soustraction des deux entiers) > entier le plus petit et 0, on continue.
On passe ensuite au vrai code PHP, qui traduit simplement ce pseudo-code :
Remarques sur le code : Le code présenté n’est pas du tout optimal. Il faudrait, notamment, vérifier que l’entier le plus petit est bien le premier paramètre de la fonction. Bref, c’est un exemple.
Comme on le voit, l’Algorithme d’Euclide permet de trouver très simplement le PGCD de deux entiers (ou plus en modifiant un peu la fonction) sans effectuer de division, avec une seule boucle.
Et en passant par l’étape du pseudo-code, on sait déjà clairement où on va avant même d’écrire la première ligne de code. Ici, cela semble trivial, voire même superflu, mais ma vie a déjà été sauvée par quelques lignes de pseudo-code laissées en commentaires dans une fonction particulièrement ardue. Essayez, vous verrez !
]]>Le tri bulle est un très bon algo au point de vue didactique mais mauvais en termes mathématiques (complexité trop grande). Son but est de trier une liste de valeurs pour la renvoyer en ordre croissant. Pour cela, l’algo parcours les éléments de la liste deux par deux, et les classe en ordre croissant (il les permute si le 2e élément est le plus petit). Une fois la liste finie, le tri-bulle recommence. Lorsqu’un parcours a été fait entièrement sans avoir besoin de faire une permutation, le tri est fini.
Attention, le tri-bulle n’est que très rarement utilisé lorsqu’on a besoin d’opérations de tri, car il n’est pas très performant.
Cet article est le premier d’une série consacrée aux algorithmes connus et utiles, et est à prendre comme une “introduction” à l’algorithmique.
Remarques sur le code: j’ai volontairement passé la liste de valeurs par référence. Dans ce cas, la variable de départ est utilisée directement au lieu d’être copiée dans la fonction puis modifiée. On n’a donc pas besoin d’utiliser return pour récupérer la liste triée.
]]>ELENBI, vous connaissez ?
Cette structure rassemble 2 entités :
- L’EBG (Electronic Business Group) présidé par Jean-Bernard Lévy (PDG de Vivendi), qui fédère plus de 550 grandes entreprises actives dans différents secteurs (http://www.ebg.net/subscribers.php pour voir la liste des adhérents)…
Ce club d’affaires propose le partage d’expériences autour de tables rondes sur des thèmes précis des nouvelles technologies dans le cadre de 7 cycles de conférences (nouveaux médias, mobilité, marketing & la communication, technologies, achats & B2B, télécommunications et systèmes d’information, droit et ressources humaines) et d’ouvrage comme Internet Marketing 2009.
- AGRION qui rassemble les professionnels de l’énergie, des matières premières et du développement durable.
Au même titre que l’EBG, les membres se retrouvent à l’occasion de conférences organisées sous le format de tables rondes concrètes et techniques, au rythme d’une par semaine. Le véhicule du futur, les bonnes pratiques du développement durable, les stratégies d’achats de matières premières, d’hydrocarbures… sont des sujets traités par ce club d’affaires.
2 ans après son lancement, Agrion a déjà une envergure internationale : 15 000 contacts, un bureau à Francfort, et une récente antenne à San Francisco.
Plus d’infos sur http://www.agrion.org
Mais EBG & AGRION, c’est également bientôt 2 sites web communautaires orientés web 2.0 !
Dans ce cadre, nous recherchons un développeur web junior, ayant des connaissances en XHTML / CSS / Javascript / Ajax, PHP et MySQL…
Statut : CDD
Début: dès que possible !
Lieu : Paris dans le 10ième
Durée : 3 à 6 mois et peut être plus (ouvert à vos contraintes !)
Rémunération : 1140 euros sur une base de 35 heures ou 7,52€ net de l’heure si profil de type alternance au ¾ temps.
Interessé ?
Merci d’envoyer votre CV à [email protected] (de la part de Didier Sampaolo via PHP-Experts) ou à [email protected] et je transmettrais.
Mon avis :
L’EBG est une structure très sérieuse avec une réputation impeccable. Pour un jeune développeur, cette mission est un peu la cerise sur le gâteau qu’est un CV
Important: en réponse aux nombreux commentaires qu’à reçu cet article, je précise que le développeur junior recruté ici rejoindra une équipe technique. Il n’a jamais été question de faire développer un réseau social complet par une seule personne, qui plus est avec peu ou pas d’expérience.
Quand je parle de “cerise sur le gâteau”, je veux dire qu’avoir une mission pour l’EBG sur un jeune CV est une bonne chose.
La durée de la mission étant ouverte à discussion, on peut imaginer que la rémunération l’est aussi.
Pour fêter cet anniversaire, j’ai décidé d’organiser un concours de code PHP, évidemment gratuit et ouvert à tous. Les participants (et leurs sites) seront tous présentés sur PHP-Experts. Vu que je sais que les développeurs sont des gens occupés (;)), le concours proposera un petit exercice de PHP assez simple (réalisable en quelques heures au maximum) qu’il faudra optimiser. Les performances obtenues seront benchmarkées et le ou les gagnants remporteront des lots.
Si le concours est un succès, d’autres suivront. Les exercices porteront sur des actions simples qu’il faut souvent réaliser en PHP, afin de faire découvrir à tous les bonnes pratiques de chacun. Par exemple, je pense que le premier exercice sera de lire un fichier texte, effectuer quelques traitements simples et afficher le résultat. Ca semble simple, mais ça va demander des accès disques, des boucles… Autant de choses qu’on croise tous les jours et qu’on néglige souvent de regarder de près.
Au niveau des lots, j’ai pensé à quelques bricoles: Tests d’entraînement en ligne pour la certification PHP Zend, bons d’achat pour des librairies en ligne proposant des livres intéressants sur le développement, espaces publicitaires gratuits sur mes sites (emplacements à déterminer en fonction de la cible), etc.
Et c’est là que j’ai besoin de vous, et que j’entame une carrière que j’espère prometteuse dans la mendicité électronique, sous forme d’appel aux dons. Chaque donateur d’un lot aura sa présentation sur PHP-Experts et ma reconnaissance éternelle. N’hésitez pas à me signaler en commantaire le geste que vous êtes prêts à faire, tous les cadeaux sont bons à prendre !
Je compte sur vous !
]]>Je demande à mon lectorat de m’excuser pour ce post, qui ne concerne pas directement le développement, mais qui est un retour d’expérience de ma récente installation d’Ubuntu sur mon poste client principal. Je vulgarise volontairement beaucoup de choses, et j’essaye de m’éloigner -une fois n’est pas coutume- de ma vision habituelle de professionnel pour ne parler que des aspects “client”. Je travaille habituellement sous Windows. Je ne cherche pas à dire lequel système est le meilleur, je ne bomberai pas le torse en disant fièrement que je suis sous Ubuntu. Je livre seulement mes premières impressions après la bascule.
Hébergeant depuis très longtemps l’ensemble de mes sites sous Linux Debian, j’ai appris il y a peu qu’il existait une Ubuntu en version serveur. Me demandant si la migration de ma Debian habituelle à Ubuntu Server pouvait m’apporter quelque chose, j’ai posé la question sur les forums officiels français Ubuntu. Et là, bon accueil, réponse rapide et en bon français, ça commençait bien. Et loin du prosélytisme Apple (si, si.), on m’a clairement dit que si je m’en sortais bien sous Debian, je ne gagnerais pas grand-chose, Ubuntu étant surtout pensée pour être utilisée en poste client (s’en est suivi une bonne vieille polémique, mais le ton est resté cordial et le thread est bourré d’infos intéressantes et d’avis personnels).
Pour quelqu’un qui est sous Windows depuis “toujours”, avec un long passage par RedHat à l’époque de la 7.2, quand les disques durs étaient en os et les souris en silex, et un bref et douloureux essai de quelques mois sous FreeBSD (où j’ai à peu près autant été dépaysé que si j’avais passé un week-end vers Alpha du Centaure), entendre parler d’un Linux “Client-Friendly” en 2009, ça m’a fait craquer et j’ai eu envie d’essayer. Surtout quelques jours après avoir installé Windows Seven par curiosité – et avec dans l’idée de publier mes impressions (ec que je n’ai pas fait puisque le retour d’expérience de Windows Seven sera fait en deux mots : “comme Vista”).
Là, pas grand-chose à dire. En Ethernet, je suis déjà connecté. Mon réseau Wifi domestique est aussi détecté et prêt à l’emploi. Pour la petite histoire, sous Debian, j’avais lutté plusieurs jours (ok, j’ai deux mains gauches, mais quand même…) avant de faire reconnaître ma carte Wifi, qui est semble-t-il un peu exotique (une vieille Hercules).
Par défaut est installé Pidgin, un client basé sur libpurple et écrit en Gtk+. Il est compatible avec la plupart des réseaux modernes : MSN, Yahoo!, XMPP (donc Google Talk), ICQ, IRC, plus tout un tas d’autres, dont je n’ai jamais entendu parler, comme Lotus Sametime, Zephyr, MySpaceIm, Gadu-Gadu et QQ.
Il est possible de se connecter sur plusieurs réseaux (et avec plusieurs comptes) simultanément. Pidgin semble pouvoir accepter des plugins et des smileys personnalisés (bah si, moi ça m’a réjoui de voir ça).
Client IRC : Xchat. Pas fan de l’interface (trop hatibué à mIRC dans ma folle jeunesse). Détail sympa: quand on installe Xchat via apt-get, le raccourci se met tout seul dans Applications/Internet/Xchat
Avec un processeur 64bits, l’installation graphique du plugin Flash pour Firefox a échoué (mauvaise architecture). Il a donc fallu passer en console pour essayer de l’installer à la main. Après un petit essai infructueux, mon shell me répond “Essayez avec sudo apt-get install flashplugin-installer“. Et ça a marché.
Dans le même esprit, si je tape “mysql” alors que je n’ai pas de client installé, on me répond que cet exécutable est dans le paquet “mysql-client”. Je sens que les apt-cache search à la recherche de paquets dont j’ai oublié le nom vont se faire assez rares.
Evidemment, il fallait que quelque chose cloche. Mais ce n’est pas de la faute d’Ubuntu. Mon gros point noir est causé par Apple, puisque je ne peux pas synchroniser mon iPhone non-jailbreaké avec mon système Ubuntu. Qui plus est, le Jailbreak était considéré comme légal tant qu’il était réalisé à des fins d’interopérabilité (ce qui est le cas ici) mais cela à changé depuis le firmware 3. C’est maintenant interdit. Sans commentaires.
Très agréablement surpris par ma première heure sous Ubuntu, j’envisage déjà une migration définitive vu que je n’ai à déplorer aucune perte de fonctionnalité (à part pour l’iPhone, encore un grand merci à Apple). Le système répond bien, même avec de nombreuses applications lancées en simultané (on perd vite l’habitude du VRAI multithread…). Il va falloir que je me penche sérieusement sur la compatibilité entre quelques programmes et leurs penchants opensource (je pense notamment à OpenOffice et Microsoft Office) et si tout se passe bien, c’est fini!
Merci aux utilisateurs des forums Ubuntu-fr.org pour leur accueil sympathique
]]>Au programme de ces deux journées :
- Conférences inédites sur les thèmes : réseaux sociaux, stratégies de migration, gestion de médias, Symfony 2…
- Retours d’expériences : Dailymotion, Yahoo!, L’Express…
- Experts : Fabien Potencier, Créateur et Lead developer de Symfony et PDG de Sensio Labs, Dustin Whittle, évangéliste Yahoo!, Jonathan Wage, Lead developer de Doctrine ORM…
Programme complet ici : http://www.symfony-live.com/schedule
A noter, cette manifestation a aussi le soutien de la très sérieuse AFUP. Cette première conférence française entièrement consacrée au framework Symfony est très attendue dans la communauté et personnellement, si mon agenda l’avait permis, j’aurais beaucoup aimé pouvoir y montrer mon nez.
Vous pourrez suivre la conférence en direct sur Twitter (@sflive09fr)
Vu ses parents, Zend et IBM, le projet Eclipse PDT est un “(Php) Development Tools framework” complet. Il étend les capacités natives de la plate-forme Eclipse pour permettre de développer calmement des applications solides en PHP. Pas vraiment besoin de le présenter, si ?
Eclipse PDT est téléchargeable en tant que plug-in ou en version “bundle” (PDT all-in-one), c’est à dire avec Eclipse et tous les composants de base. Ceci est très utile dans le cas d’une nouvelle installation.
Télécharger Eclipse PDT
Il existe d’autres plugins permettant d’ajouter à Eclipse le support du PHP, comme PHPEclipse ou Eclipse PHP IDE, développé par Zend.
Editeur d’expressions régulières, toujours pratique de part le fait qu’il surligne les expressions qui matchent quand on sélectionne une partie du pattern. Il permet aussi de rationaliser ses expressions, notamment en utilisant les classes prédéfinies -comme [alphanum]
Site officiel : http://myregexp.com/eclipsePlugin.html
Update Site : http://regex-util.sourceforge.net/update/
Ajoute le support de SVN (SubVersion) à Eclipse. SVN est un système de gestion de versionning comme CVS intégrant quelques améliorations, comme la possibilité de déplacer et supprimer des fichiers, sans perdre leur historique.
Site officiel : http://subclipse.tigris.org/
Update Site (pour la branche 1.6) : http://subclipse.tigris.org/update_1.6.x
Permet notamment d’éditer ses fichiers directement via une connexion SSH. Je m’en sers pour les petites retouches de code PHP rapides qui ne peuvent “pas attendre”.
Site officiel : http://www.eclipse.org/dsdp/tm/tutorial/
Update Site : http://download.eclipse.org/dsdp/tm/updates
Un peu difficile à prendre en mains, Azzuri Clay est un plugin commercial pour Eclipse qui permet d’ajouter un vrai support des bases de donnéees. Le système de licence adopté est un peu étrange: la version Pro ne peut être achetée qu’au Japon. Il n’en reste pas moins que l’édition classique, gratuite, est toujours intéressante.
La liste des SGBDR supportés est assez impressionnante vu qu’elle comprend, notamment, les classiques MySQL, PostGres, Oracle, MS SQL Server, DB2, Informix, mais aussi, beaucoup plus rare, SAP.
Pour se servir du Database Modeler d’Azzuri Clay, il faut créer un projet (ou utiliser un projet déjà existant) et faire File -> New -> Other -> Database Modeling -> Azzurri Clay Database Design Diagram.
Une fois cela fait, on peut créer ses premières tables, exporter les scripts SQL de création (selon le SGBDR choisi), et même faire du retro engineering sur des bases de données déjà crées.
Site officiel : http://www.azzurri.jp/en/clay/index.html
Update Site : http://www.azzurri.co.jp/eclipse/plugins
Installation minimale d’Eclipse, par Thierry Bothorel
]]>Admettons que sur votre nouveau site social-2.0-multimedia (etc), vous avez une fiche utilisateur. Chaque fiche comportera, peu ou prou, les mêmes informations, notamment le login de l’utilisateur. Voici comment procéder. Créez d’abord un fichier user.tpl (Note sur les fichiers .tpl : l’extension est libre, mais l’usage du .tpl est une convention; la plupart des IDE possédent des plug-ins pour permettre l’analyse et la coloration syntaxique de ce language de balises. Pour les puristes -je ne parle pas pour moi-, on peut justifier l’emploi du “tpl” au lieu d’un “html” plus classique par le fait que les templates contiendront certes du HTML, mais aussi des instructions destinées au moteur de template… mais bref!) . Ce fichier contiendra :
Le fichier php qui l’utilisera contiendra, lui :
On instancie un objet de la classe Smarty (ligne 1) on déclare une variable de template appelée ‘login’ qui contiendra la valeur de la variable php $user_login (ligne 2). On demande ensuite à Smarty d’ “exécuter” et d’afficher le fichier user.tpl (ligne 3).
Vous l’aurez compris, le login de l’utilisateur apparaîtra en lieu et place du {$login} dans le fichier template. Les {} indiquent à Smarty que ce code doit être exécuté, et non directement reproduit en sortie (ce qui est le cas du HTML). Ces signes encadreront toutes les balises Smarty. Vous remarquerez que la variable se déclare en php sans le signe $, mais qu’il faut utiliser celui-ci lorsqu’on veut accéder à la valeur de la variable dans le fichier de template.
Si, en PHP, on assigne une tableau à une variable Smarty, on peut y accéder grâce au point, avec la syntaxe $tableau.index.
(lien vers la doc officielle)
S’il vous arrive de devoir utiliser des accolades {} dans le code–source de votre template (par exemple pour y intégrer des fonctions JavaScript), il faut les entourer du tag Smarty {literal}{/literal}, afin d’indiquer au moteur de template de ne pas parser le contenu, ce qui provoquerait une erreur.
Smarty gère l’affichage des dates très efficacement grâce à un modificateur de variable (un filtre) nommé date_format. La syntaxe de date_format sous Smarty est la suivante :
Qui affiche :
Pour passer la date que Smarty va afficher en français, il suffit d’utiliser setlocale() en php, comme ceci:
(n’hésitez pas à me dire si vous voulez un post plus complet sur l’installation – au moins sous Debian – et l’utilisation des locales en php). La date affichée devient alors :
Voici les options que vous pouvez passer à la fonction date_format de smarty :
Pour aider à la rédaction de ma série d’articles, n’hésitez pas à laisser un commentaire sur un sujet que vous voudriez voir abordé, ou à me signaler des docs intéressantes sur Smarty, je me ferais un plaisir de les rajouter dans les lectures intéressantes
]]>Screen est un utilitaire en ligne de commande qui permet de créer plusieurs shells virtuels qui tournent en parallèle. En l’utilisant, vous aurez donc accès à plusieurs “sessions”, comme si vous aviez lancé plusieurs clients SSH.
Enorme avantage, screen ne s’arrête pas quand votre connexion au serveur est coupée. En rouvrant votre session Unix normale, vous pourrez faire screen -r (Recover) pour retrouver toutes vos fenêtres exactement dans l’état où vous les avez laissées (les actions en cours ont continué, les scripts ne sont pas interrompus, etc).
Après une rapide installation (le package apt se nomme “screen”), l’utilitaire est directement utilisable. Tapez “screen”, rien ne se passe. Et pourtant tout est ok, on y est. Bienvenue dans le monde de screen. Faites ce que vous avez à faire, éditez par exemple le fichier /etc/hosts de votre machine. Tapez ensuite control+A, puis C (pour Create). Une nouvelle fenêtre virtuelle est créée. Vous vous retrouvez devant une invite de commande, sur un shell vierge. Et c’est là que les réjouissances commencent. Faites un ls, par exemple. Ensuite, un Control+A puis N (Next) vous permet de passer à la fenêtre suivante gérée par Screen.
Toutes les commandes Screen sont composées de la combinaison Control+A puis une lettre (ou un chiffre).
Voici le menu :
Screen peut aussi vous permettre de copier/coller efficacement du texte entre deux fenêtres. Pour cela, ouvrez le mode copie en faisant Ctrl-A [ .
Une fois dans le mode copie, vous pouvez déplacer le curseur à l'aide des touches H,J,K et L. La barre d'espace commence/arrête la sélection du texte. Ctrl-A ] servira alors à coller le texte copié dans le “presse-papiers”.