Archives mensuelles : février 2014

L’outil le plus important du développeur? Des valeurs, avant tout!

Je compare fréquemment le développement logiciel aux grandes expéditions navales des temps anciens qui reliaient l’Europe et l’Amérique. Il y a des hauts et il y a des bas. L’équipage se fait brasser à tous les vents. Il peut être même certain que votre patience sera éprouvée à certains moments les plus intenses de l’aventure.

Ce qui fait que le bateau arrivera à bon port sera relié aux qualités individuelles des individus constituant l’équipage. Les maillons de la chaîne, pour faire bref.

Les occasions de s’arracher les cheveux sont moins probables lorsque le ciel est bleu et que la mer est calme. C’est lorsque la tempête se pointe le bout du nez qu’il faut savoir où se positionner pour prendre les meilleures décisions possible.

Ce que je vais énumérer ici n’est pas un guide pour le gestionnaire qui sommeille en vous. Loin de là. Il s’agit de principes qui vont guider les orientations des décisions que vous aurez à prendre envers vous et vis-à-vis les autres. Il faut le voir un peu comme le Sextant qui vous permettra de vous orienter.

Avant tout, il est important de toujours se rappeler que, en tant que développeur, il est très rare qu’il y ait uniquement nos propres intérêts à considérer. Même si la nature du travail est relativement singulière, une très grande partie du travail est d’interagir avec des êtres humains. Le respect des autres est une qualité excessivement importante dans ce métier.

Respect

Le développement logiciel est, avant tout, une question de collaboration et d’échange entre individus avant d’être une question de programmation, à mon avis.

Faites l’exercice pendant une journée typique. Comptez le temps que vous passez à échanger avec des collègues par courriel, messagerie instantanée ou même… de vive voix.

Une grande partie de la crédibilité que vous allez acquérir est par le respect que vous allez donner aux relations que vous aurez sur le plancher. Vos compétences techniques y seront pour très peu de ce côté.

L’équipe avant l’individu

La question de l’équipe revient souvent dans les discussions que j’ai avec des développeurs. Qu’est-ce qui fait qu’une équipe « marche »?

Bien souvent, nous n’avons pas la chance de choisir avec qui nous allons travailler. Il faut apprendre à connaître nos proches collaborateurs et profiter au maximum de ce qu’ils peuvent nous apporter. Il est très rare que ces relations aillent à sens unique. Il peut y avoir du positif dans tout, il faut savoir où le trouver.

Un tout, est la somme des unités qui le composent. Pour faire simple, rien de cela ne serait possible sans l’apport de tous.

Humilité

Ce point, je le nomme souvent : « apprendre à perdre » ou même « s’entendre sur notre désaccord », si vous êtes du genre à ne pas aimer perdre, justement.

Ici, il n’est pas question de se mériter le privilège de pouvoir dire « je te l’avais dit! » une fois le temps venu de la rétrospective. Non.

Il s’agit plus de faire preuve d’humilité et d’accepter entièrement la décision d’équipe.

Réalisme dans la mise en place de solutions

L’herbe est toujours plus verte chez le voisin. Ce qu’on ne sait pas tout de suite, c’est que le voisin se fait chier intensément à la garder verte sa pelouse.

Ce que j’essaie de dire ici, c’est que la tentation de vouloir intégrer les technologies les plus récentes et les plus avancées dans son projet est toujours forte. J’ai toujours supposé que c’était une caractéristique propre aux développeurs.

L’effet de l’adoption d’une technologie qui n’a pas encore totalement fait ses preuves a souvent des effets pervers. Plus souvent qu’autrement, ces effets se font sentir plus tard dans le projet, car le manque de connaissance sur la technologie va influencer certaines décisions techniques. Malheureusement, pas souvent pour le mieux.

Depuis un certain moment, j’essaie d’opter pour une approche conservatrice sur ce point. YAGNI, comme ils disent!

Le mérite vient avec l’effort

Professionnellement comme dans le sport, il faut mériter son temps de jeu. Pour le mériter, il faut travailler fort. C’est aussi simple.

Vous êtes tous capables de pointer du doigt un collègue qui est de tous les combats. Celui qui ne recule pas, peu importe la tâche en question. En comparaison, vous êtes probablement aussi capable de pointer celui qui est le contraire.

Force est d’admettre qu’il n’y a rien de plus épuisant que d’avoir l’impression de traîner quelqu’un à bout de bras à travers les différents projets. Bien souvent, en combinaison avec des points énumérés plus haut, il faut réussir en équipe à trouver un rôle motivant pour que chacun puisse y trouver son compte.

Advertisements

Une brève explication du concept de la restriction d’origine d’exécution avec JavaScript (Same-Origin et CORS)

Internet est composé d’un drôle d’amalgame de concepts datant des années 1990 et de technologies novatrices qui sont créées à même ces piliers. Depuis sa création, le protocole HTTP, dans ses grandes lignes, est resté semblable.

Le protocole HTTP est à la base de toutes les requêtes que vous faites avec votre navigateur. C’est ce qui permet de transférer le texte entre un serveur web et votre navigateur. Je ne vous apprends rien de nouveau là dessus.

Initialement, une page web était un document assez statique composé de texte, d’images et quelques feuilles de styles sinon très peu. La nécessité d’avoir du dynamisme sur une page web s’est fait sentir très tôt dans l’histoire du web. C’est ainsi que JavaScript a été créé par Netscape en 1995.

Same-Origin

Dès sa création, des mécanismes de sécurité ont dû être mis en place pour limiter la portée d’exécution de JavaScript. C’est ainsi que la politique d’origine d’exécution (Same-Origin) a été instaurée.

Le concept en question est très simple à comprendre. Un script JavaScript doit accéder aux requêtes du domaine d’où il provient. La principale raison de ceci est une question de sécurité.

Groso modo, vous ne pouvez pas faire ce genre de requêtes.

cors

Imaginez si n’importe quel script provenant de l’externe serait en mesure d’accéder à vos cookies d’authentification à n’importe quel moment sans votre autorisation? Trop facile!

Une méthode de contournement

Avez-vous déjà entendu parler du CORS? Ou même de la technique utilisant document.domain?

Il s’agit de deux techniques vous permettant de contourner, avec le consentement de votre vis à vis côté serveur, la restriction de l’origine d’exécution JavaScript. Parce qu’avec toute règle, ça prend une exception pour la confirmer. N’est-ce pas?

document.domain

Cette technique repose sur l’assignation à la propriété document.domain du nom de domaine vers lequel vous tentez d’utiliser la ressource. Toutefois, cette technique implique que les deux ressources web doivent utiliser une valeur commune pour cette propriété.

De plus, certaines règles sont à respecter en lien avec le nom de domaine utilisé et ce qui peut être assigné à document.domain. Les règles sont bien résumées ici.

Personnellement, cette technique est à utiliser avec précaution, car elle est sujette à changements d’interprétations par les différents navigateurs. La meilleure technique à utiliser est CORS.

CORS

Le CORS est en fait, comme vous vous en doutez bien, un acronyme pour Cross-Origin Resource Sharing. Il s’agit d’un en-tête de réponse HTTP qui spécifie les domaines pouvant faire appel à une ressource HTTP.

Cela fait en sorte que la politique d’accès aux ressources est spécifiée par le serveur web qui héberge. L’entête HTTP en question prend la forme suivante :

HTTP/1.1 200 OK
Date: Thu, 18 Feb 2014 10:43:27 GMT
Server: Apache/2.0.61 
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json

Dans le cas mentionné, l’entête autorise l’accès aux ressources du site à toutes requêtes de type intersites. Si l’entête est manquant, vous ne serez pas autorisé à faire une requête comme j’ai illustré plus haut.

Sources

Histoire vécue #2 – Comment ne pas configurer un site ASP.NET MVC 5 sur son serveur IIS 7.5

Mercredi 5 février a été la journée où je me suis cassé les dents sur un problème qui, à première vue, était inexplicable et totalement à l’encontre de l’ordre des choses.

S’il y a un signe universel qui signifie quelque chose en informatique, c’est bien celui-ci. Lorsque quelque chose doit fonctionner d’une façon et que, pour une raison inconnue, ce n’est pas le cas, il y a anguille sous roche.

Mise en contexte

Mon poste de développement utilise une configuration assez à jour (Windows 8 et IIS 8) et le projet sur lequel je travaille est aussi à la fine pointe (.NET 4 et ASP.NET MVC 5).

À ce moment de l’histoire, aucun signe ne pouvait laisser présager qu’un problème se pointe le bout du nez. Les fonctionnalités développées ont été accomplies dans le temps et le budget requis.

À partir de là, on pense vivre un rêve. On passe l’étape de la revue de sprint avec le client et tout le monde est heureux. Du beau travail, vraiment.

Juste pour tester…

Ce qui a été développé est un composant faisant oeuvre de service web reliant une application web et une application de gestion utilisée par le client. Étant donné que le composant développé se met les pieds dans une partie critique, il a été entendu qu’une bonne période de tests serait mise de l’avant avant de donner le feu vert pour la production.

Le principal but de cette période de tests sera d’exécuter parallèlement l’application afin d’être en mesure de comparer l’état des données avec la production pour en assurer la précision.

En bout de compte, pour valider ces données, le composant a été hébergé sur un serveur temporaire où il sera observé sous toutes ses coutures pendant quelques jours.

La mise en ligne

Une fois le serveur web accessible, je me lance dans la mise en ligne. Une fois le nécessaire déployé, j’ouvre un nouvel onglet à partir de mon navigateur web et j’ai la page suivante :

Votre page d'erreur HTTP 404 sous IIS 7.

Votre typique page d’erreur HTTP 404 sous IIS 7.

Après les vérifications nécessaires permettant de m’assurer que je ne suis pas fou ou que j’ai commis une erreur humaine, je demande une double vérification par un collègue. Malheureusement, tout est en ordre du côté de mon application. Le site web servait le contenu sauf celui provenant d’ASP.NET MVC.

L’ordre normal des choses n’est soudainement pas respecté. Je confirme que je n’étais pas très heureux à cet instant. La mise en ligne allait prendre officiellement plus de temps que prévu.

Une mise à jour

Dans mon cas, le serveur en question avait pris un peu la poussière dernièrement. Certaines mises à jour Windows étaient à appliquer sur celui-ci.

Une mise à jour en particulier est importante à appliquer, car elle vise précisément à adresser cette situation. Il s’avère qu’IIS 7 n’avait pas été initialement conçu pour servir des contenus web n’ayant pas d’extension (ex. : mapage.aspx au lieu de /monaction/1).

Donc, la mise à jour corrige le tir à ce sujet. Une fois qu’elle a été installée sur le serveur, mon application s’est mise à fonctionner comme prévu.

Alternativement, j’aurais pu activer l’option runAllManagedModulesForAllRequests= »true ». Toutefois, comme son nom l’indique, la totalité des requêtes faites à mon site web aurait passé à travers des modules ASP.NET. Selon l’achalandage à votre site, cela peut avoir un impact de performance majeur.

Sources :