Procédure pour avoir un environnement de dévelopement local facile à configurer avec Apache

Je ne sais pour vous, mais je ne peut plus programmer sans avoir l’environement serveur localement sur ma machine. Changer ou ajouter un fichier VirtualHost pour chaque nouveau projet est assez répétitif. Il doit y avoir une façon automatique de le faire?

Oui.

Ça s’appelle VirtualDocumentRoot

J’ai ce tutoriel qui traîne dans mon Wiki personnel depuis des lustres, et c’est maintenant que je commence a migrer mes projets sous NGINX que je décide de le mettre en ligne. Il n’est jamais trop tard pour publier.

Cette méthode de configuration répond exactement au besoin précis de ne pas avoir a configurer un hôte virtuel apache pour chaque projet.

Avec cette procédure, vous n’aurez qu’a maintenir votre fichier hosts, le reste suivra tout seul.

Vous pouvez appliquer cette technique avec n’importe quelle version du serveur http “Apache”. Cette procédure peut même être faite si vous développez sous Windows ou Mac OS avec les distributions du serveur HTTP Apache sous Windows telles que MAMP, XAMPP, et EasyPHP.

Pourtant avec un serveur web local, ce type de configuration est possible depuis longtemps, il faut simplement savoir comment ça s’appelle: VirtualDocumentRoot.

Voici comment je configure mon environnement LAMP depuis quelques temps.

Procédure

Établissement du standard

Tout commence par une certaine convention. Avec celle-ci, tout devrait suivre automatiquement.

L’idée est de pouvoir accéder a un l’espace de travail du projet A du client B sur ma machine locale. L’adresse locale n’est plus localhost, mais quelque chose de plus explicite.

Ce que j’apprécie le plus de cette méthode car elle permet de conserver dans un dossier parent tout ce qui est spécifique pour le projet et le client. Le code a exécuter qui soit dans un sous-dossier ne feait que du sens.

Par exemple, un projet appelé projectname du client client serait classé dans un dossier sous le chemin /home/renoirb/workspace/client/projectname.

Le code du projet web serait accessible via le serveur web à l’adresse http://projectname.client.dev/ qui pointe vers l’adresse IP de la station de travail locale.

L’espace de travail du projet

IMPORTANT
Il faut que les noms de dossiers soient en minuscule et aucun espace, ni caractères accentués, sinon le serveur Apache risque de ne pas trouver le dossier. Principalement parce que l’adresse entrée dans le navigateur est convertie en bas de case, et que généralement un système d’exploitation qui se respecte fait une différence entre, par exemple ‘Allo’ et ‘allo’.

La convention suggérée va comme suit:

  • chaque projet est classé dans un chemin prévisible, similaire à /home/renoirb/workspace/client/projectname
  • le projet a un dossier web/
  • les autres dossiers au même niveau que web/ peuvent être n’importe quoi d’autre.

Idéalement, la logique applicative ne devrait pas être visible publiquement de toute façon. Seulement le fichier principal appelle l'”autoloader” en dehors du DocumentRoot.

De cette façon le vous pouvez classer tout vos projets du même client, et séparer par projets.

La procédure tient aussi en compte
* L’utilisateur courrant puisse écrire dans son dossier workspace/ avec Apache2 comme s’il était son propre utilisateur avec mpm-itk
* Le nom de domaine utilisé définit dans quel dossier de l’utilisateur chercher

Procédure

  • Assurer que les modules sont chargés
     sudo a2enmod vhost_alias
  • Ajouter le fichier default a la config de apache
     sudo vi /etc/apache2/ports.conf
  • Vérifier qu’il y a ceci:
    NameVirtualHost *:80 
    Listen 80 
    UseCanonicalName Off
  • Modifier le fichier de config du VirtualHost par défaut
  • Fichier de configuration par magique
    sudo vi /etc/apache2/sites-available/default
  • Verifier qu’il y a ce bloc dans <VirtualHost ...>:
    <IfModule mpm_itk_module>
        AssignUserId renoirb users
    </IfModule>
  • Remplacer la mention DocumentRoot par ce format:
    VirtualDocumentRoot /home/renoirb/workspaces/%1/%0/web

Sources

Encapsulate a LDAP DN string using Arrays in PHP

During a project I had to fork privileges assignation logic with information coming from an LDAP server. Since the DN string representing users can be very different for each user: their affiliations and roles. I had to find ways to interpret sub-parts of that string to figure out what privileges to attach to them.

My snippet’s purpose is to get the capability to get a subset of that LDAP DN string, assuming that the first index is more precise than the last, but concatenated would give the full context.

While I was trying to find already made function that explodes that string into manageable arrays in PHP, I realized that there was none. I then decided to contribute it as a comment on the PHP.net website.

Continue reading “Encapsulate a LDAP DN string using Arrays in PHP”

Choosing a framework, how I personally define what is “hot” about them, an evaluation process (part 1)

This post is all about what I think should be used to define quality in your choice of programming framework tool-set. This post is the first one of a collection of (unknown for now) number of posts.

This week, I had to bring to a team of people what I consider a good PHP framework and why I am sold. I am aware that I may sound blinded with my choice, but this post is about explaining my own guidelines about my choice. I work with them since many years and that made me try many in the PHP ecosystem.

Everything goes with PHP Sauce

Things can get messy with PHP, that’s why we have to be very cautious on how we structure and consider recommendations from other good programmers.

Since we know that PHP can be a “sauce where everything goes”. Structure is crucial. There is many frameworks, many libraries, and to be able to build solutions that will solve more usefull and important matters, we need to agree on how to collaborate.

I do not claim to be a guru, I have done stuff and thanks to people I mention here, I feel I am getting better at the craft and I thought my reflection process was worth sharing.

 

 

Continue reading “Choosing a framework, how I personally define what is “hot” about them, an evaluation process (part 1)”

How I managed to make work Guzzle REST client library under Symfony 2.0.x as a bundle [Snipet]

Warning This is not a cut and paste solution. But some notes I want to share on how I did and what I’d like to cover and remember when I will continue working with that aspect on my current projects.

The problem i had was mostly that i had to see where to mix-and-match things between this wonderful library and Symfony2. I discovered after searching here that it’s not that complicated, you just need to get through the learning curve of reading the code AND the documentation.

I am posting here the hilight of what I have been struggling with and will re-read soon about how to use it and implement in into Symfony2.

Things I wished I understood faster

  • How to inject the configuration from symfony without hardcoding paths in my Managers/Controllers
  • Why do the XML configuration file has nodes like <client> in the main project file, but it’s not what triggers the Command. Answer: Use ServiceDescription::factory($xmlFileFullPath) from the Client class. Yes, it has <client> nodes… NO, they are not the same as in the client definition file xml (guzzleclients.xml).
  • How to extend a DynamicCommand from the ServiceDescription

The Gist

Improvement paths

Actually, now that I went through all this, A simple yaml annotation with a simple service definition with @MyBlogBundle/Resources/config/serviceDescription.clientName.xml could had done the job.

Résumé de mes essais avec composer sous Symfony 2.0.x et un manifeste composer.json pour vos propres tests

Ce soir j’ai pris le temps d’essayer de configurer une distribution Symfony 2.0.x sous Composer. Je ne suis pas certain encore si j’ai totalement réussi. J’aimerai votre avis sur ma proposition de fichier composer.json.

Statut mis à jour

Je suis retourné avec le fichier deps à cause que je n’ai pas réussi a avoir toutes mes dépendances fonctionnelles dans un délai raisonnable (trois soirs). J’essaierai à nouveau plus tard.

Résultat

En ce moment je n’arrive pas a faire fonctionner JmsDiExtraBundle ni la nouvelle version de MopaBootstrapBundle notamment pour le mopa/bootstrap-sandbox-bundle. Je mettrai ce billet a jour lorsque j’aurai terminé mes essais.

Résultat escompté

Avoir un manifeste complet pour Symfony 2.0.x que je pourrai utiliser avec mes bundles préférés:

  • jms/security-extra-bundle
  • jms/di-extra-bundle
  • jms/serializer-bundle
  • gedmo/doctrine-extensions
  • stof/doctrine-extensions-bundle
  • knplabs/knp-components
  • mopa/bootstrap-bundle
  • knplabs/knp-paginator-bundle
  • polishsymfonycommunity/blog-bundle

Composer.json file

{
    "description": "This bundle is meant to run latest 2.0.x Symfony-standard distribution, based on Composer.",
    "keywords": ["symfony2"],
    "type": "symfony-bundle",
    "license": "MIT",
    "authors": [{
        "name" : "Renoir Boulanger",
        "email" : "[email protected]"
    }],
     "autoload": {
        "psr-0": { "": "src/" }
    },
    "require": {
        "php": ">=5.3",
        "symfony/symfony": "2.0.*",
 
        "twig/twig": "1.6.*",
        "doctrine/orm": "2.1.7",
        "doctrine/common": "2.1.4",
        "doctrine/dbal":   "2.1.7",
        "swiftmailer/swiftmailer": ">=4.1.7",
        "monolog/monolog": "1.0.*",
 
        "symfony/assetic-bundle": ">=1.0.1",
        "sensio/distribution-bundle": "2.0.*",
        "sensio/framework-extra-bundle": ">=2.0",
        "sensio/generator-bundle": "2.0.*",
 
        "jms/metadata": ">=1.1.0",
        "jms/security-extra-bundle": "1.0.x",
        "jms/di-extra-bundle": ">=1.0.0",
        "jms/serializer-bundle": "master",
 
        "gedmo/doctrine-extensions": "v2.2.2",
        "stof/doctrine-extensions-bundle": "1.0.2",
        "liip/imagine-bundle": "master",
 
        "knplabs/knp-components": "1.1.*",
        "mopa/bootstrap-bundle": "2.0.*",
 
        "knplabs/knp-paginator-bundle": "dev-master",
        "knplabs/knp-menu-bundle": "dev-master",
        "mopa/bootstrap-sandbox-bundle": "2.0.x-dev",
        "liip/theme-bundle": "dev-master"
    },
    "config": {
        "bin-dir": "bin"
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web"
    }
}

devLAB Montréal c’est maintenant parti!

Je l’avait annoncé. Nous avons particié a des événements, joints d’autres. Maintenant, depuis Janvier 2011, à tous les mercredis, nous vous invitons a vous joindre a nos rencontres. Donc,depuis cinq semaines maintenant nous hébergeons au public nos ateliers de travail qu’on appelait nos GeekNights maintenant surnommé devLAB.

Comment devLAB a commencé?

Tout a commencé en 2006. Le besoin est né après plusieurs mois à discuter de technologie a deux (avec Etienne) a prendre une bière au 3Brasseurs et de parler de binaire, netmask… vous savez, des trucs de Geeks. Nous avons joins notre  vieil ami Stephan et nous avons officialisé le pacte que nous avons tenu de 2006-2009. Une fois par semaine tous les Mercredis soir nous suivions ce concept:

  1. Se rencontrer peu importe la charge de travail au bureau
  2. Faire avancer une idée
  3. Utiliser quelque chose qu’on a jamais utilisé avant
  4. Pratiquer les méthodologies pour prendre les plis qu’on ne pouvait pas toujours prendre au bureau

Parfois nous en faisions des CodeFests qui duraient une fin de semaine complète. D’autres fois nous invitions des amis a jouer avec nous sur des sujets divers.

Continue reading “devLAB Montréal c’est maintenant parti!”

L’appel aux conférenciers pour ConFoo 2011 est lancé!

Passe ConFoo 2010
Photo prise sur Flickr par Pyxis technologies

Depuis cet été j’ai commencé à m’impliquer dans l’organisation de la conférence «ConFoo Web Techno Conference». Je crois que j’en ai parlé dans ce billet. Il s’agit d’un événement annuel pensé pour les programmeurs, les passionnés du web et des logiciels libres.

La semaine passée, nous avons publié officiellement l’appel aux conférenciers. C’est la première annonce grand public du début de la programmation 2011. Jusqu’au 26 Novembre 2010, nous acceptons les propositions de présentations.

La procédure est simple, il faut proposer sa présentation par le formulaire “appel aux conférenciers” sur le site officiel.

La date et le lieux de la conférence sont maintenant officielles et se déroulera à l’Hôtel
Hilton Bonaventure de Montreal du 9 au 11 Mars 2011. Durant cette semaine il y aura aussi des journées de formation privés.

Ma participation

Pour moi ce sera ma première année dans l’équipe d’organisation de cet événement d’envergure. Je pense que ça tombe dans le sens de m’y impliquer car lorsque j’ai démissionné de l’animation des scouts j’ai décidé de pousser dans des loisirs qui sont plus près de ma carrière mais qui demanderont d’autres talents que ceux de faire de l’Intégration ou de la programmation.

Réalisation site Manoir Saint-Francis faits avec GéraniumCMS [2007]

Manoir Saint-Francis : Page avec images cartes généré par GéraniumCMSDans ma série d’articles ou je parle des sites que j’ai fait dans le passé. J’ai mentionné quelques fois que j’utilisait GéraniumCMS. Le projet du site du Manoir Saint-Francis à Magog, est l’un des derniers déployés.

Derniers sites faits avec GéraniumCMS

J’était en emploi chez TechSolCom Groupe informatique depuis quelques temps déjà et un ancien client de Inexis a voulu que je fasse un site pour lui.

Le contexte général du projet est comme il l’est souvent. Un graphiste me fournit des planches Photoshop et je dois le rendre identique en HTML.

Gallerie d’images

Lancement de l’annee 2011 pour la conférence ConFoo

ConFoo.ca Web Techno Conférence

Depuis le debut de l’ete je me suis joint à l’organisation de la conférence ConFoo qui couvre les sujets technique comme les langages PHP, .Net, Python et les standards du web. Ce week-end aura lieu leur traditionnel BBQ de lancement d’année.

Detail de l’invitation officielle

Je duplique le contenu provenant de l’annonce offieielle de W3QC et de l’équipe d’organisation.

Le BBQ aura lieu le 11 septembre à partir de 13h.

Au menu: hot-dogs, chips, salades, boissons gazeuses, biscuits et beaucoup de plaisir. Dans ce même esprit, l’équipe de Montréal-Python apportera un keg de Charmeuse de Serpents. Une bière India Pale Ale spécialement brassée pour cet événement.

Afin de garantir le nombre adéquat de portions, veuillez confirmer votre présence en envoyant un email à [email protected] Noubliez pas de mentionner le nombre de personne qui vous accompagnera.

Notez le numéro 1-888-679-8466 option 0 au cas où vous ne trouverez pas le groupe sur les lieux.

Détails de l’évènement

  • Quand: 2010-09-11 à 13h
  • Où: parc Mont-Royal, près de la maison Smith (suivez les affiches)
  • Pour qui: les développeurs, les acteurs du Web et leurs familles
  • Tarif: gratuit!

Au plaisir de vous y voir.

L’équipe de ConFoo.

Comment remplacer les caract√®res bizzares dans WordPress lorsqu’on a mal fait la conversion

Accrocheur mon titre n’est-ce pas? Je trouve ça tellement pas drôle lorsque ça m’arrive ce genre de situation avec les caractères accentués. Le problème n’arrive pas tout le temps qu’avec WordPress.

Voici, enfin, une suite a mon billet Pourquoi tout ces caractères bizzares. Je devais travailler sur un problème de conversion de caractères pour un client dus a une conversion non réussie et/ou terminée entre latin1 et utf-8 puis je me suis remis a penser a ce problème. Pourquoi ne pas le régler, et documenter!

Voilà pourquoi ce billet ;)

La situation

Mon cas était bien simple. J’avait mal fait ma sauvegarde lors d’un transfert et j’avait tout mes commentaires, billets, et autres données qui avait des accents “transform√©s comme √áa” (transformés comme ça).

Ce genre de problème arrive pour toutes sortes de raisons. Mais le symptôme est le même. Si vous avez des
Je partage avec vous mon bout de code a «copier-coller» dans phpmyadmin pour votre blogue WordPress si vous avez ces problèmes (oubliez-pas de faire des sauvegardes là(!)).

Plusieurs tutoriels existent pour régler la situation mais mon cas était assez unique. J’ai conservé le problème puis j’ai publié plusieurs billets (qui sortent bien) et laissé ceux “ab√Æm√©s” là. Il n’était plus question d’extraire, convertir et ré-importer.

Pourquoi?!

C’est une réponse assez complexe. L’article UTF-8 sur TikiWiki.org l’explique en détail.

In short, UTF-8 is a character encoding that uses 1 to 3 bytes for each character.
It is one of the existing character encodings of the UCS (Universal Character Set), that contains nearly a hundred thousand abstract characters (including ASCII characters).

UTF-8 greatly simplifies the task of internationalization by replacing multiple alternative encodings (such as ISO8859-15 Latin-9, which encodes those English, French, German, Spanish and Portuguese characters not available in ASCII).

En simple, le UTF-8 est un format d’encodage qui utilise 1 a 3 bytes pour chaque caractère. C’est un format d’encodage qui comprend près de plusieurs centaines de milliers de caractères (Incluant ceux du ASCII).

UTF-8 est fait pour contenir tout les caractères existants pour simplifier l’internationalisation.

C’est un standard qui est pas nécessairement jeune mais qui n’était pas non plus supporté partout.

MySQL a commencé a le supporter qu’a partir de la version 4.1.

Ce qui arrive c’est qu’avec le temps, les gens prennent de plus en plus soin de rendre accessible pour toutes les langues leur applications. Ainsi un russe pourrait écrire en cyrillic et un Japonais en Kanji dans la même base de donnée. Le coup est difficile! Surtout que les versions de MySQL et PHP et Java offrent maintenant le choix par défaut en UTF-8… lorsqu’on fait pas attention: on se fait coincer!

Continue reading “Comment remplacer les caract√®res bizzares dans WordPress lorsqu’on a mal fait la conversion”

Introduction de notre nouveau projet-événement intitulé DevLab

devLabMtl.orgMoi et mes compagnons d’arme des GeekNights (Etienne et Stephan) planifions un projet qu’on a baptisé DevLab.

Nos GeekNights étaient bien plaisants a nous trois mais nous voulons partager avec d’autres passionnés. C’est l’origine de l’idée du DevLab.

Nous avons choisi le nom «Lab», parce que l’idée est d’augmenter ses capacités avec des gens expérimentés et de partager lors d’une soirée ou une fin de semaine, pour le plaisir. Nous ne voulons pas nous limiter qu’a un seul projet Open-Source.

L’idée

  • UN site web pour prendre connaissance des sessions
  • Plusieurs types de sessions pour travailler les divers aspects et faire avancer le projet
  • UNE rencontre aux trois mois ou quelque chose de la sorte.
  • On va lancer le nouveau projet pour la semaine WebCom, lors du FTW (vers le 25 mai) .

Qui est invité à participer a l’organisation

Quiconque est intéressé a participer a l’organisation peut nous en faire part.

Le projet

Un nouveau software de comptabilité open-source

Ce que nous allons fournir

  • l’infrastructure
  • SVN/Git,
  • Bugtracker
  • Wiki de collaboration
  • L’entretien du code et de l’Infrastructure
  • Notre expérience de lab

Les buzzwords

  • PHP 5.3+
  • MySQL 5.1+
  • Virtualisation
  • Intégration Continue
  • Modèle Agile
  • Extreme Programming
  • … peut être même pas de Framework (a voir!)
  • OOP

Quand?

Le projet ne sera pas lancé tout de suite mais nous sommes en train de monter les alliances pour permettre ce type d’événement d’une façon récurrente. Si vous êtes intéressés, contactez nous. Je tiendrai cette page à jour.

Première sortie publique

MonDev Open Source Week MontrealNous serons présents lors de la première de MonDev et nous participerons aussi à la compétition «For the Web coding competition» sponsorisé par Microsoft Canada. Venez nous en parler!

Appel a la collaboration

Nous avons l’idée et les capacités de produire le logiciel. Mais notre intérêt ici est de partager nos connaissances et de créer un événement par des développeurs pour des développeurs qui désirent apprendre et partager leur connaissances.

Si vous êtes intéressés, manifestez-vous sur le fil de commentaire. Plus on est de fous plus on rit.

Nous allons vous tenir au courrant sur Twitter et sur cette page de l’évolution du projet.

Réalisation d’une application d’échange de cadeau avec RED L’agence le «club échangiste» [2009]

Il s’agit d’une réalisation que j’ai effectuée en deux semaines pour RED L’agence. L’idée vient de François Sauvé lors d’une rencontre pour un autre projet. Il m’a dit: «J’ai une idée de fou. Je ne sais pas si on pourrait faire ça rapidement mais…».

C’est le genre de situation que j’aime!  Une question, la possibilité de me laisser aller, et hop!

RED voulait faire offrir un cadeau à chacun de ses clients privilégiés d’une façon hors de l’ordinaire. Les participants étaient invités a visionner leur cadeau par une petite carte de noël reçue par la poste (devant, dos) avec une adresse web et un code.

Le concept graphique était, selon moi, bien rendu. Un club échangiste avec les lumières tamisés, rien d’offensant mais tellement bien choisi pour le jeu.

Le site web devait permettre aux participants de voir leur cadeau et de pouvoir «Participer au club échangiste» en volant le cadeau d’un autre participant. Chaque participant qui se faisait voler son cadeau reçevait un courriel qui lui annonçait qu’il s’était fait voler et qu’il pouvait aller le récupérer.

Continue reading “Réalisation d’une application d’échange de cadeau avec RED L’agence le «club échangiste» [2009]”

Installer PHP 5.3.1 sous Debian et/ou Ubuntu via un repository non officiel

J’était, hier, en train de jouer avec des appels SOAP pour préparer un projet et j’ai réalisé que ma version compilée de php 5.3.0 était défectueuse.

Je dis que mon installation est défectueuse car lorsque j’instantiait $client = new Zend_Soap_Client; plus rien ne répondait. Même aller en error_reporting(E_ALL); et tout ce qui est imaginable. C’est après quelques heures a tourner en rond je me suis dit que si même $client = new SoapClient; avec un résultat du genre “Class does not exists”. C’est le PHP… pas le code ou le Framework. Pas de doute.

J’ai donc pensé recompiler la dernière version PHP 5.3.1 qui est considérée stable… quant à recompiler, autant mettre à jour sur la dernière version!

Ce billet vous permettra d’installer la version stable PHP 5.3.1 a partir d’un repository déjà configuré au lieu de le compiler.

 

Continue reading “Installer PHP 5.3.1 sous Debian et/ou Ubuntu via un repository non officiel”

Réalisation du site de Câble Axion [2006]

Voir la consommation modem
Voir la consommation modem

Dans la série de billets sur mes réalisations j’aimerai donner mon avis sur le travail que j’ai fait pour Câble Axion.

Contexte

J’ai travaillé là pendant un an entre Octobre (environ) 2005 et Novembre 2006. Mon emploi était dit comme étant programmeur d’applications pour améliorer les processus de travail de l’entreprise du point de vue support technique pour les départements de services Internet et télé numérique.

J’ai donc travaillé sur les bases de données accès en Microsoft Access puis ensuite j’ai fait un travail d’intégration sur le site corporatif (ce 30 octobre 2009, c’est encore mon travail qui est aparent pour une bonne partie).
Continue reading “Réalisation du site de Câble Axion [2006]”