Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
par Michael Akbaraly et François Petitit - OCTO Technology
Vous avez récupéré un projet JavaScript de plusieurs milliers de lignes, on vous demande des évolutions et des corrections de bugs, et rien ne va.
Code illisible, régressions en pagaille, structure des répertoires incompréhensibles : vous ne savez pas par où commencer !
Au long des 90 minutes de cet atelier, nous vous proposons de découvrir les techniques et les outils qui vont vous sauver la vie via des travaux pratiques de code JavaScript côté back-end avec NodeJS, et côté front-end avec AngularJS.
Débutants ou ayant déjà une connaissance de ces technologies sont les bienvenus. Les travaux pratiques seront disponibles si vous souhaitez coder vous-mêmes pendant l'atelier.
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
par Michael Akbaraly et François Petitit - OCTO Technology
Vous avez récupéré un projet JavaScript de plusieurs milliers de lignes, on vous demande des évolutions et des corrections de bugs, et rien ne va.
Code illisible, régressions en pagaille, structure des répertoires incompréhensibles : vous ne savez pas par où commencer !
Au long des 90 minutes de cet atelier, nous vous proposons de découvrir les techniques et les outils qui vont vous sauver la vie via des travaux pratiques de code JavaScript côté back-end avec NodeJS, et côté front-end avec AngularJS.
Débutants ou ayant déjà une connaissance de ces technologies sont les bienvenus. Les travaux pratiques seront disponibles si vous souhaitez coder vous-mêmes pendant l'atelier.
Cette présentation montre plusieurs outils gratuits qui peuvent être utilisés pour gérer plusieurs aspects de la gestion de projets, en particulier informatique, de manière collaborative. On y voit comment versioner son code avec Git, déployer son code avec Heroku, tester son code avec Travis, gérer et planifier son temps et ses tâches avec Trello, FreedCamp et Tom'splanner, comment communiquer avec Slack et comment rédiger sa documentation avec Read the Docs.
Ez18n Annotation Processing Tool in a nutshellgdigugli
APT qu'est ce que c'est
appeler en ligne de commande
appeler APT depuis maven
l'API javax.tools - hierarchie des classes
Processor
meta model d'un fichier source java
comparaison avec java.lang.reflect
limitation par rapport à java.lang.reflect
ca sert à quoi ?
pattern avec injection - je fais un framework
analyse et transformation de code vers des fichiers plats
DSL avec des annotations
no limit ... attention aux dépendances
compilation une ou deux passes ?
APT dans mon IDE
Symphonie pour PHP industrialisé en agilité majeureJonathan Bonzy
Présentation pour l'Agile Grenoble 2011
Avoir des millions d'amis, comparer des millions d'offres ou publier des millions de news sont autant d’exemples d’applications écrites en PHP. Ce langage de la “programmation pour les nuls”, qui permet tous les écarts, reste pourtant un choix privilégié pour les solutions web. Avec les bons outils et les bonnes pratiques, ce langage est modulable, testable et facilement livrable. Au travers d’une approche technique montrant par l’exemple quels instruments choisir, découvrez comment jouer la partition d’une symphonie pour PHP industrialisé en agilité majeure.
Au programme:
- Dégager un boilerplate d’un projet PHP ou comment ne pas tout jeter à l’arrivée
- Reprendre la main sur leur projet frontend et avoir une stratégie de refactoring par les tests
“Not only working software, but also well-crafted software” - Manifesto for Software Craftsmanship
Objectif général
Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs opérationnels :
Faire correspondre une URL donnée à un traitement précis grâce au routage
Traiter les requêtes grâce aux contrôleurs
Intégrer des données dans des templates grâce à TWIG
Faciliter la communication avec une base de données grâce à Doctrine
Permettre à un utilisateur d’initialiser ou de modifier les attributs d'un objet métier grâce aux formulaires
Developpement web dynamique_Base de donnees.pdfrachidimstapha
MySQL has stand-alone clients that allow users to interact directly with a MySQL database using SQL, but more often, MySQL is used with other programs to implement applications that need relational database capability. MySQL is a component of the LAMP web application software stack (and others)
https://uii.io/3rFjIWMA0d
https://uii.io/3rFjIWMA0d
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
Avec cette nouvelle version de votre framework préféré, de nouvelles fonctionnalités et de nouveaux usages sont apparus. Vous vous demandez comment structurer vos bundles? Comment organiser votre code source? Comment utiliser correctement l'injecteur de dépendance? Venez découvrir au cours de cette session les bonnes pratiques, et quelques astuces, qui vous aiderons dans la réalisation de vos projets avec Symfony2.
Cette présentation montre plusieurs outils gratuits qui peuvent être utilisés pour gérer plusieurs aspects de la gestion de projets, en particulier informatique, de manière collaborative. On y voit comment versioner son code avec Git, déployer son code avec Heroku, tester son code avec Travis, gérer et planifier son temps et ses tâches avec Trello, FreedCamp et Tom'splanner, comment communiquer avec Slack et comment rédiger sa documentation avec Read the Docs.
Ez18n Annotation Processing Tool in a nutshellgdigugli
APT qu'est ce que c'est
appeler en ligne de commande
appeler APT depuis maven
l'API javax.tools - hierarchie des classes
Processor
meta model d'un fichier source java
comparaison avec java.lang.reflect
limitation par rapport à java.lang.reflect
ca sert à quoi ?
pattern avec injection - je fais un framework
analyse et transformation de code vers des fichiers plats
DSL avec des annotations
no limit ... attention aux dépendances
compilation une ou deux passes ?
APT dans mon IDE
Symphonie pour PHP industrialisé en agilité majeureJonathan Bonzy
Présentation pour l'Agile Grenoble 2011
Avoir des millions d'amis, comparer des millions d'offres ou publier des millions de news sont autant d’exemples d’applications écrites en PHP. Ce langage de la “programmation pour les nuls”, qui permet tous les écarts, reste pourtant un choix privilégié pour les solutions web. Avec les bons outils et les bonnes pratiques, ce langage est modulable, testable et facilement livrable. Au travers d’une approche technique montrant par l’exemple quels instruments choisir, découvrez comment jouer la partition d’une symphonie pour PHP industrialisé en agilité majeure.
Au programme:
- Dégager un boilerplate d’un projet PHP ou comment ne pas tout jeter à l’arrivée
- Reprendre la main sur leur projet frontend et avoir une stratégie de refactoring par les tests
“Not only working software, but also well-crafted software” - Manifesto for Software Craftsmanship
Objectif général
Prendre en main l’un des frameworks PHP les plus utilisés
Objectifs opérationnels :
Faire correspondre une URL donnée à un traitement précis grâce au routage
Traiter les requêtes grâce aux contrôleurs
Intégrer des données dans des templates grâce à TWIG
Faciliter la communication avec une base de données grâce à Doctrine
Permettre à un utilisateur d’initialiser ou de modifier les attributs d'un objet métier grâce aux formulaires
Developpement web dynamique_Base de donnees.pdfrachidimstapha
MySQL has stand-alone clients that allow users to interact directly with a MySQL database using SQL, but more often, MySQL is used with other programs to implement applications that need relational database capability. MySQL is a component of the LAMP web application software stack (and others)
https://uii.io/3rFjIWMA0d
https://uii.io/3rFjIWMA0d
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
Avec cette nouvelle version de votre framework préféré, de nouvelles fonctionnalités et de nouveaux usages sont apparus. Vous vous demandez comment structurer vos bundles? Comment organiser votre code source? Comment utiliser correctement l'injecteur de dépendance? Venez découvrir au cours de cette session les bonnes pratiques, et quelques astuces, qui vous aiderons dans la réalisation de vos projets avec Symfony2.
2. Sommaire
• Les Hooks Git
– Emplacement
– Timeline
• Validation de code
– Commande
• Qualité de code
– Linter
• Code défensif
• Aller plus loin…
3. Hooks Git ?
• Description git-scm.com
Git dispose d'un moyen de lancer des scripts personnalisés
quand certaines actions importantes ont lieu.
Il y a deux groupes de crochets : ceux côté client et ceux
côté serveur.
Les crochets côté client concernent les opérations de
client telles que la validation et la fusion.
Les crochets côté serveur concernent les opérations de
serveur Git telles que la réception de commits
5. Timeline des hooks
Client
• prepare-commit-
msg
• commit-msg
• post-commit
GIT PUSH
Serveur
• pre-receive
• update
• post-
receive
Deux groupes de hooks:
côté client
Généralement des opérations de validation
côté serveur
Généralement des triggers
9. Mais aussi…
Check Commande
repo folders='manifests files lib templates
examples facts.d spec functions types
tests'
for i in $(ls -d */); do
if ! [[ ${folders[*]} =~ ${i%%/} ]]
then
echo "${i%%/} > Folder name error"
error=1
fi
done
facts.d head -n1 <file>| grep -e '^#!/‘
10. Qualité de code
Le code poussé doit être conforme à des
standards de qualité, aux différents style guide.
Exemple de checks en utilisant puppet-lint:
https://github.com/rodjek/puppet-lint
gem install puppet-lint
% puppet-lint init.pp
WARNING: top-scope variable being used without explicit namespace on line 81
ERROR : define defined inside a class on line 59
ERROR: single quoted string containing a variable on line 124
WARNING: string containing only a variable on line 81
WARNING: => on line isn't properly aligned for resource on line 71
ERROR: two-space soft tabs not used on line 50
WARNING: line has more than 80 characters on line 83
ERROR: trailing whitespace found on line 163
ERROR: mode should be represented as a 4 digit value on line 55
ERROR: no default in case statement
11. Linter
Différents linter existent pour valider les fichiers
d’un module.
Généralement sous forme de package Ruby
Cible Install
.pp gem install puppet-lint
metadata.json gem install metadata-json-lint
.json gem install jsonlint
.yaml gem install yaml-lint
12. Code défensif
Ce type de check interdit l’utilisation de certains
type ou resource type Puppet.
Cela permet de forcer l’utilisation d’un wrapper,
défini par une autre équipe en charge de cette
ressource.
13. Code défensif
Exemples:
En situation :
grep -e '^s*users*{.*[:|,]'
<file.pp>
Action Regex
Interdire la ressource user ^s*users*{.*[:|,]
Interdire la ressource group ^s*groups*{.*[:|,]
Interdire la ressource yumrepo ^s*yumrepos*{.*[:|,]
14. Et les control repos ?
Les control repos sont des repos Git permettant de
mapper une branche Git à un environnement
Puppet et son contenu.
Validation de la syntaxe des Puppetfile :
r10k puppetfile check
15. Aller plus loin …
Trigger
Scripts / API
git
add
git
commit
git
push
16. Aller plus loin …
• Fichiers cachés hors standard
• Repo comportant des RPM
• git tag = metadata.json tag
• …
What else ?