Manuel de sécurité sous Linux

Un vrai ami t’aiguillonne toujours vers l’avant.”
Oscar wilde

Jmrenouard.fr est fier de vous annoncer la sortie d’un article du manuel de sécurité d’un serveur Linux.

Il présente l’ensemble des actions à apporter pour sécuriser un serveur Linux. Il s’agit de
Le document se trouve sous plusieurs formats:

Bonne lecture,
Jean-Marie Renouard

Tags: , ,
Posté dans Production Pas de commentaires

Les structures de données en PHP – une introduction

La structure de données est l’essence de la programmation
Donald Knuth, the art of programming

Voici une  présentation sur Slideshare présentant les structures de données en PHP et la manière de les utiliser.

Son but est de partager mon expérience et les approches qui permettent de comprendre l’organisation des donnés ne PHP.

 

Structure de données en PHP
View more presentations from jmrenouard
Pour conclure
La maitrise des structures de données est le plus difficille à apprendre dans un langage de programmation, bien plus que la syntaxe en elle-même.
Plus les structures sont bien définies, simples et compréhensibles plus le code source de vos applications suivra le même chemin.

Tags: ,
Posté dans Programmation Pas de commentaires

Gestion d’une production – Processus de mise en production

 

 

 

 

 

 

 

 

 

 

Les plans ne sont rien, c’est la planification qui compte.

Dwight David Eisenhower

 

Voici un article présentant un processus cohérent de livraison d’application en production de la manière la plus sécurisée possible.

Son but est de partager mon expérience et les démarches qui ont déjà réussies dans différents contextes d’entreprise, de technologies et humains.

Cette présentation s’appuie sur 3 étapes clés permettant de normaliser et réduire les incompréhensions autour des différents rôles des intervenants offrant

une meilleure efficacité personnelle et collective.

 

Étape 1: Définition d’un processus général du développement à la production

La définition de la chaîne globale est importante car elle permet de préciser au niveau général la manière dont se passe une mise en production.

En effet, le  fait de préciser permet de réduire les incompréhensions entre équipe et préciser la responsabilité. Chaque étape est en charge d’une ou plusieurs tâches permettant aussi d’indiquer l’évolution de cette étape dans la chaîne globale.

 

Exemple de chaîne de mise en production globale

 

nous avons fait le constat que les objectifs de développement et de la conception logicielle diffèrent radicalement des objectifs de production et de maintenance opérationnelle.

 

En effet, quand le développement est focalisé sur la production d’une nouvelle fonctionnalité, la production est focalisée sur le fonctionnement optimal de l’existant.

Quand la production se demande comment stabiliser, le développement se demande comment produire.

Bref, des objectifs antagonistes dont la résolution restera un compromis.

 

La première phase consiste à gérer un cycle développement/Intégration/test et une seconde chaîne livraison/mise en production/retour arrière.

 

Le point de communication entre les 2 univers doit être le plus clairement défini possible. Cela ne veut pas dire que cela doit être compliqué ou réalisé par des humains mais plutôt qu’il faut vraiement

avoir conscience que lorsque l’on passe ce point, une nouvelle application va être déployé et qu”un nouvelle ordre va s’instaurer pour la maintenance opérationnelle.

 

 

Étape 2: Définition des responsabilités des personnes et des outils

Le premier processus ne peut être soutenu par des considérations de haut niveau sans aboutir à des contradiction.

Le 2ème schéma consiste à définir l’environnement technique et humain capable de soutenir votre chaîne de mise en production globale.

Dès que vous possédez les 2 schémas vous êtes en mesure d’expliquer chacune des étapes et d’y mettre un responsable, un rôle et des outils spécifiques pour la réalisation de cette étape

Exemple de chaîne avec acteurs et outils

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ici, le processus est très simple et s’articule autour d’un intervenant technique. Celui-ci développe, intègre ses solutions pour la production et livre son travail sur les environnements cible ( ou de production).

Le processus ici met en évidence le fait que le travail à toute les étape est sauvegardé et historié dans un Référentiel de sources (Subversion, GIT, CVS, …)

Le processus de retour arrière est entièrement géré par la gestion des sources. Retourner en arrière signifie revenir à une version antérieure de l’application. Ceci est grandement simplifié par l’existence du référentiel de source.

 

Étape 3: Automatisation de la chaîne

Dès que le processus général est respecté, compris et intégré par l’ensemble des acteurs intervenant du développement jusqu’à l’exploitant en charge de l’installation, une sorte de magie opère.

En effet, les tensions entre les différents intervenants diminuent car ils trouvent plus facilement “leur place” dans l’ensemble et collabore mieux.

Dans une phase de mûrissement, les responsabilités et outils sont mis en place pour donner corps au processus général. Cette phase est importante car elle donne les signaux capable de révéler si oui on non

vos choix sont adaptés ou non à votre contexte spécifique.

 

Dès que chacun à trouver sa place, son rôle et ses outils permettant de fonctionner correctement et ceci même dans les situations particulières ( retour-arrière, coupure de service, erreurs de manipulation, …), la phase

d’automatisation peut-être envisagée.

L’automatisation appliquée à un processus efficace amplifie l’efficacité, l’automatisation appliquée à un processus inefficace amplifie l’inefficacité

Bill gates.

Le but de cet article n’est pas d’identifier ou présenter des outils technologiques permettant l’automatisation des processus mais plutôt de mettre en avant la suprématie du processus général sur l’automatisation.

Si vous arrivez à faire marcher quelque chose avec des individus de manière cohérente, il est possible de l’automatiser. Si vous n’y arrivez, il est préférable de revoir le processus et la nature des relations , des tâches.

 

Dès que cela fonctionne bien en “Vrai”, l’automatisation peut être appliquer. Les solutions technologiques existent en grand nombre. I ls’uffit de chercher comment automatiser des procédures manuelles à l’aide d’outils ou de technologies parfois très diverses.

 

Pour Conclure

Le processus des mise en production est donc un produit d’un autre processus celui d’amélioration continue des stratégies de livraisons et de déploiement visant l’implémentation efficace des étapes et le cheminement vers l’automatisation complète de la démarche. La qualité est encore le coeur du système et la roue de Deming un bon pivot.

Tags: , ,
Posté dans Production, Programmation, Qualité Pas de commentaires

Construire une démarche personnelle de qualité

Celui qui ne progresse pas chaque jour, recule chaque jour.
Confusius

Afin de permettre la réalisation de mon défi personnel, il est important de comprendre que la seule notion valable et recevable est “la notion de résultat” pour y parvenir.

En effet, quelque soit votre style personnel ou emprunté à un quelconque gourou, ce qui prédominera sera toujours jugé par rapport à une forme de “capacité de production”.

 

En effet, produire des résultats et tenter de contrôler ou orienter la nature de celui-ci est une des démarches les plus concrètes et faciles à mettre en œuvre pour obtenir à peu près ce que l’on veut.

Cependant, et malgré de nombreux efforts, on reste cependant sur sa fin et on constate épuisement et on abandonne trop rapidement des choix de haute qualité par peur ou par résignation.

Cette article n’a pas pour but de vous donner une formule ou une recette complète et vise plutôt à vous donnez les ingrédients clés qui peuvent être combinés, ignorés ou utilisés unitairement pour construire

votre propre démarche personnelle de qualité.(DPQ)

 

Qu’est ce qu’une démarche personnelle de qualité(DPQ) ?

Une démarche personnelle de qualité(DPQ) est un système personnel permettant de favoriser et l’action et l’orientation des efforts. Il est basé sur une approche systématique des problèmes, des projets, des habitudes et des défis.

Il représente un guide permettant de progresser même quand les circonstances sont pas favorables voire complètement opposés à toute progression.

Le DPQ peut prendre plusieurs formes concrètes tel que des TodoList, des plannings, les décisions fortes ou simplement l’utilisation de la simple volonté pour maintenir une habitude quotidienne.

Le PDQ peut s’apparenter à un plan d’engagement comme par exemple un mariage ou l’on s’engage sur une voie commune pour le meilleur et ou le pire. En effet, le PDQ est simple un support pour vous faire progresser de manière intangible vers l’accomplissement d’un projet, un rêve et un défi.

Le PDQ peut être défini comme un doigt indiquant la direction à prendre et laquelle il ne faut jamais se détourner afin d’y arriver.

A quoi sert-elle ?

La DPQ  est un guide permettant de passer les périodes difficiles et surtout de progresser rapidement quand les circonstances sont favorables. ils permettra en  somme d’être toujours sur la bonne voie.

Le DPQ est un rappel, un mémo indiquant non pas des chose du passé, le découragement récent ou la longueur du  chemin à parcourir, mais plutôt le guide incontournable, la réponse à une question du type :

Qu’est ce que je suis prêt à réaliser maintenant afin de maîtriser la situation et progresser vers ce qui j’ai choisi d’obtenir fermement ?

Le DPQ est donc un système, une pensée, une phrase ou une organisation particulière qui permet d’avancer régulièrement et efficacement vers une situation données.

 

Quels sont les risques de ne pas avoir cette démarche ?

Ne pas avoir de DPQ revient à voyager sans carte, sans ressources et sans destination. Cela peut-être fascinant si cela est votre DPQ. Cependant si nous souhaitons arriver à destination, il va être préférable

de s’organiser pour et diriger nos efforts vers un point précis ( un point de focalisation).

 

Quelques ingrédients de base de ma propre démarche

Loi de Pareto : http://fr.wikipedia.org/wiki/Loi_de_Pareto

 

La loi de Pareto invite à une réflexion très simple: Qu’est ce qui est essentiel et qu’est ce qui est inutile ?

Ensuite, à vous de définir vos priorités et de vous focalisez sur votre essentiel.

20% de vos activités produisent 80% de vos résultats

20 % de vos projets représentent 80% de votre satisfaction

 

20% de vos problèmes produisent 80% de vos colères et frustration.

20% des vos choix représentent l’orientation de 80% de votre vie.

Qu’est ce qui peut m’apporter 80% de la réussite avec seulement 20 % des efforts ?

 

Roue de Deming: http://fr.wikipedia.org/wiki/Loi_de_Pareto

A la fois simple et structurer la roue de Deming est l’une des clés pour s’organiser.

Basé sur les tâches simples et courtes en réalisation, ce système permet de créer une dynamique de progression fabuleuse en offrant les

moyens de tirer rapidement les leçons  des ces expériences.

Tout le but du jeu ici consiste à faire tourner la roue le plus rapidement possible afin d’acquérir le plus d’expérience et de résultat.

Les quatre étapes sont simple à retenir:

P: Je planifie ce que je vais faire immédiatement sur le projet

D: Je réalise la tâche

C: Je contrôle le résultats

A: Je tire les conséquences

 

Kaizen: http://fr.wikipedia.org/wiki/Kaizen

Le Kaizen est un essence même de la démarche de l’amélioration continue.

Pronant de progresser doucement et toujours dans le bon sens afin d’obtenir les résultats souhaités.

Pour cela, cette philosophie propose de ne faire que des changements mineurs et constamment dans le temps.

De telle sorte que les changements soient quasiment imperceptibles et ne donne aucun signe de frustration ou de pénibilité.

Un problème d’organisation commencez par organiser une et une seule chose, puis une autre, puis une autre, …

 

Wu-Wei-Wu : http://en.wikipedia.org/wiki/Wu_wei

Essence même du taoïsme, le Wu-Wei, nous propose de rechercher systématiquement l’effort sans effort et l’action sans action.

Ce qui compte sur le long terme, c’est d’être capable de durer dans le temps, la notion de soutenabilité.

La recherche systématique de l’action sans effort nous invite à optimiser chacun de nos pas afin de pouvoir progresser constamment.

 

Les meilleurs nageurs sont ce qui dépensent moins d’énergie pour parcourir une distance dans l’eau.

Les gens prospèrent sont ce qui dépensent moins que ce qu’ils gagnent.

Les personnes en bonne santé se reposent plus qu’elle ne travaillent durement.

Les gens les plus sereins sont celle qui gèrent le moins d’affaire possible.

 

Les questions et le vocabulaire:

L’une des clés de mon DPQ consiste à toujours me poser des questions capable de m’orienter vers les bonnes réponses et solutions.

Quelles bonnes questions je peux me poser pour solutionner ce problèmes ?

 

Le vocabulaire pour décrire et communiquer doit être choisi avec finesse.

Il existe des mots à limiter l’usage :  mais, facile, immédiatement, jamais, impossible, devoir, falloir, …

Il existe des mots à utiliser plus souvent: et, bon, agréable, bien, mieux, permettre, désirer, orienter, cheminer, …

 

Pour conclure

Comme vous l’avez sûrement constaté, il y a un lien entre toutes ses approches, consistant à maximiser l’impact de nos actions en les choissisant finement.

A vous de jouer maintenant et de trouver votre voie et votre DPQ.

Tags: , ,
Posté dans Qualité Pas de commentaires

Apprendre à programmer – Un défi

Un voyage de mille lieues commence toujours par un premier pas.”
Tao Te King de Lao-Tseu

Le défi que je me suis lancé

Il y a cela une petite dizaine d’année en 2006, je me suis posé un défi : 10 ans, 10 langages de programmation.
Cela parait un peu bizarre et cependant d’année en année, j’ai réussi à acquérir les connaissances permettant d’assimiler de mieux en mieux de nouveaux langages.

Je vais donc vous faire partager l’univers le la programmation et du développement.

Actuellement, j’ai réalisé l’apprentissage des langages suivants: C, C++, Java, Perl, Python, bash, PHP, Javascript.
J’ai produit du code source dans le cadre professionnel pour chacun de ces langages et est réalisé plusieurs formations pour cinq d’entre eux.

 

Qu’est ce qui fait pour que l’on arrive à programmer dans un langage ?

La première des choses pour apprendre dans un langage est la structure et l’organisation des données.

Même si vous pensez qu’il faut maîtriser la syntaxe de base, il ne s’agit pas de l’élément primordial. Il suffit simplement de savoir comment organiser les données entre elles au sein des structures de données.


 

Qu’est ce qui fait que l’on progresse ensuite rapidement ?

La maîtrise des “formes” de code permettant la manipulation des données est le second élément primordial pour progresser à pas rapide dans l’apprentissage de la programmation.

La lecture de code source est aussi un bon moyen de progresser. Tout comme l’apprentissage d’une lange étrangère l’apprentissage d’un langage est grandement amélioré par la lecture de code source.

Il est même parfois intéressant d’utiliser et de tenter de “faire marcher” les codes que l’on lit afin valider ceci dans votre contexte.

 

Les leçons d’un tel défi

La première des leçons c’est la patience. En effet, l’apprentissage de la programmation n’a rien à voir avec un produit de consommation avec des milliers d’information à disposition, seul le temps et la pratique régulière pour régler des problèmes concrets permettra  de progresser et d’améliorer sa maîtrise du code source.

Programmer pour programmer n’a rien d’exaltant, rendre un service, résoudre un problème bloquant, automatiser un travail répétitif sont des choses bien plus attrayantes car elles mettent le développeur dans la réalité, celle de trouver des solutions concrètes, précises et simples de préférence.

 

Apprendre à programmer: un processus sans fin

Ce qu’il y a de magique dans la programmation c’est que c’est un processus sans fin, il est toujours possible d’améliorer de nombreux aspects:

  1. Le style du code et son homogénéité
  2. La généricité du code
  3. La rapidité de réalisation d’une application
  4. La rapidité de déploiement de l’application
  5. Les performances et l’optimisation du code
  6. La richesse des fonctionnalités
  7. La capacité d’assimilation de nouvelles fonctionnalités ou modularité
  8. La testabilité du code et la validation du fonctionnement de base
  9. La capacité à répondre simplement à des besoins de base du quotidien des utilisateurs

 

La programmation : processus plus large

Les langages de programmation sont des langages simples car n’ayant pas de relation avec l’ambiguïté et le double sens. Cela signifie que si un programme est ambiguë alors il produit des erreurs à la compilation ou à l’exécution.

Basé sur ce constat, l’agrégation de plusieurs applications ensemble, donne des systèmes d’information (agrégat de programme et d’application), ces systèmes d’information sont les environnements au travers lesquels travaillent parfois plusieurs milliers de personnes. Les erreurs provenant des outils informatiques sont le résultat d’erreur de programmation qu’il est possible de corriger, améliorer ou compenser.

Il est donc aussi possible de programmer des tâches plus complexes tels que l’organisation du travail de plusieurs personnes et donc de programmer une unité, une équipe et même une entreprise sur cette base.

Les mythes, les croyances sur la programmation

J’ai longtemps cru qu’il n’était pas possible de tout automatiser, cependant en s’appuyant sur un environnement suffisamment stable, il est quasiment possible de tous automatiser:

  1. Les banques automatisent leurs investissements;
  2. Les entreprises industrielles automatisent leurs factures et le paiement de leurs salaires.
  3. Les entreprises de télécommunication automatise le suivi des consommation des clients.
  4. Les moteurs de recherche automatisent leurs analyses des nouveaux sites.

Les entreprises ayant pas pris le partie d’automatiser leur fonctionnement sont aujourd’hui moins compétitives.

Un autre mythe, la programmation est difficile. La programmation n’est pas difficile et nécessite un peu de temps et de régularité.

Un langage de programmation s’apprend en mois de trois mois. Il est souvent important d’ailleurs de commencer par un et un seul langage.

Il n’est pas possible de programmer sans connaître l’algorithmique, c’est comme dire qu’il n’est pas possible de jouer un morceau de musique sans connaître le solfège.

 

Le dernier mythe est qu’il est compliqué d’obtenir des résultats. en effet, si vous souhaitez tout écrire vous-même les résultats seront longs et peux probants cependant il existe de nombreuses

communautés et projets open source permettant d’intégrer rapidement exemple à l’appui des fonctionnalités déjà existantes.

 

Un mot de la fin sur la programmation

Comme toute activité, il faut savoir conclure, plus vite vos programmes fonctionnent et produisent les résultats attendues et mieux ce sera. La perfection est pour l’étape suivante: La perfection dans la programmation c’est la capacité à produire un code de qualité du premier coût comme dans la calligraphie.

 

Tags:
Posté dans Programmation, Qualité Pas de commentaires

Présentation de Code Igniter

Jmrenouard.fr est fier de vous annoncer la sortie d’un article de présentation de Code Igniter 2.0 chez Developpez.com.

Il présente l’ensemble du framework Code Igniter 2.0.2 et des possibilités de celui-ci à offrir une base de développement structurée et performance pour les applications PHP.
Le document se trouve sous plusieurs formats:

Bonne lecture,
Jean-Marie Renouard

Tags: ,
Posté dans Programmation 1 Commentaire