wallabag est une application opensource de lecture différée : elle vous permet de mettre de côté la version épurée d'un article pour la consulter plus tard où que vous soyez. Créée il y a 3 ans à base de fichiers PHP comme on faisait en 2005, nous avons décidé il y a maintenant un peu plus d'un an de migrer le projet à Symfony. Au cours de ce talk, nous présenterons donc le projet wallabag et tout son écosystème : son concept, son socle technique (API REST, tests unitaires, Rulerz, RabbitMQ, Capistrano), les difficultés rencontrées, la communauté et les projets qui tournent autour, la roadmap pour les semaines à venir.
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
wallabag, comment on a migré vers symfony3
1. WALLABAG : COMMENT ON A MIGRÉ VERS
SYMFONY 3
Par Jérémy Benoist ( ) et Nicolas Lœuillet ( )@j0k @nicosomb
wallabag.org
wallabag : comment on a migré vers Symfony 3 — PHP Tour 2016 — @j0k & @nicosomb
14. ENVIRONNEMENT PHP
PHP >= 5.5.9
Compatible PHP 7
Compatible HHVM (même si personne ne s'en sert)
Symfony 3
15. ON COMBLE LES LACUNES TECHNIQUES
Sorte de De nition of Done :
Documentation utilisateur
Tests unitaires et / ou fonctionnels
Review du code
Déploiement via Capistrano (sur v2.wallabag.org)
Migrations BDD
Le moins d'actions manuelles possible
Équipe plus conséquente : une core team, des traducteurs,
des développeurs
16. FRÉQUENCE DES MISES À JOUR
Roadmap établie
Respect de SEMVER
Une version mineure tous les 3 mois
17. API POUR LES APPLICATIONS EXTERNES
Facilite l'intégration avec des applications tierces
19. ANALYSE DU CODE
v1 v2
Fichiers 396 129
Code 94.922 lignes
240 lignes / chier
8.822 lignes
68 lignes / chier
Commentaires 37.855 lignes 2.462 lignes
Sensio Insight 29/100
2 ans pour la
médaille Platinum
32/100
3 semaines pour la
médaille Platinum
Scrutinizer 4,95/10
(1 erreur critique,
+700 majeures)
9,39/10
(4 erreurs majeures)
20. CHARGEMENT DES PAGES
Analyses faites avec Black re sur PHP 7.0.6
v1 v2
Liste d'articles (460) 330ms
17 Mo
689ms
31 Mo
Un article 89ms
10 Mo
281ms
17 Mo
Liste des tags (20) 85ms
10 Mo
314ms
19 Mo
21. EN CONCLUSION ...
C'est pas très fameux pour la v2 tout ça !
Un framework, c'est lourd
Le plain PHP c'est forcément rapide
Pas trop focalisé sur la perf, pour le moment
Plusieurs pistes d'améliorations (Redis, APC, Black re, etc.)
Surtout un confort de développement pour les devs
24. EXTRACTION DE CONTENU
LA principale fonctionnalité de wallabag
Assuré par , dans la v1
Pas vraiment open source ...
Et pas très pratique à utiliser ...
Full-Text RSS
// $ftr should be URL where you installed this application
$ftr = 'http://example.org/full-text-rss/';
$article = 'http://www.bbc.co.uk/news/world-europe-21936308';
$request = $ftr.'makefulltextfeed.php?format=json&url='.$article;
// Send HTTP request and get response
$result = @file_get_contents($request);
25. EXTRACTION DE CONTENU
MAIS, sa capacité d'extraction est ef cace !
Utilise le microformat
Utilise les données de
Basée sur php-readability
Et sur des site_con g (dans un repo séparé)
hNews
Schema.org
➜ Forker en gardant cette logique
26. EXTRACTION DE CONTENU
, un fork de Full-Text RSS v3.3graby
Mise en place de test fonctionnels sur l'existant
Ré-organisation / refonte
site_con g via Composer
Ajout de tests
Et c'est plus propre à utiliser ...
use GrabyGraby;
$article = 'http://www.bbc.co.uk/news/world-europe-21936308';
$graby = new Graby();
$result = $graby->fetchContent($article);
27. LA MIGRATION EN SOI
Par itération
Le socle Symfony
La connexion utilisateur
La con guration
La commande wallabag:install
L'ajout d'un lien
L'ajout de tags
Etc.
Globalement, tout a été réécrit, étape par étape
28. LA V2 N'EST PAS ISO AVEC LA V1
v2.0.0 ➜ focaliser sur le fonctionnement de base
v2.0.x ➜ focaliser sur la stabilité
v2.x ➜ amélioration des fonctionnalités (tag,
recherche, etc.)
29. LIBRAIRIES UTILISÉES POUR L'API
FOSRestBundle
NelmioCorsBundle
FOSOAuthServerBundle
BazingaHateoasBundle
NelmioApiDocBundle
Si seulement était sorti plus tôt :)API Platform 2.0
30. LISTING DES FEATURES PAR LIBRAIRIE
Utilisateur ➜ FosUserBundle
Filtres ➜ FormFilterBundle
Changement de thème ➜ LiipThemeBundle
Export ➜ phpepub, tcpdf, php-mobi
Règle de tagging ➜ RulerZ ( @KPhoen)
Maintenance ➜ MaintenanceBundle
Two factor authentication ➜ TwoFactorBundle
Annotations ➜ AnnotatorJS
32. INSTALLATION DE L'APPLICATION
L'application doit être disponible pour tout le monde !
sur un serveur dédié
sur un serveur mutualisé
sur un ... raspberry (c'est pas gagné ...)
Et installable par tout le monde
"tout le monde" inclut des personnes novices
34. INSTALLATION DE L'APPLICATION
Plutôt basique pour la v1
wget http://wllbg.org/latest
unzip latest
+ quelques lignes de SQL
Dans l'ensemble aucun souci ✅
35. INSTALLATION DE L'APPLICATION
Tentative n°1
git clone https://github.com/wallabag/wallabag.git -b v2
cd wallabag
composer install
php app/console wallabag:install
Trop orienté dev
Installe toutes les deps "dev"
C'était bien au début ™
36. INSTALLATION DE L'APPLICATION
Tentative n°2
composer create-project wallabag/wallabag wallabag 2.0.0-alpha.1
cd wallabag
php app/console wallabag:install
Toujours trop orienté dev
Simple amélioration de la version précédente
37. INSTALLATION DE L'APPLICATION
Tentative n°3
SYMFONY_ENV=prod composer create-project wallabag/wallabag
wallabag "2.0.*@alpha" --no-dev
cd wallabag
php app/console wallabag:install --env=prod
Uniquement les packages de prod
MAJ impossible à cause de create-project
38. INSTALLATION DE L'APPLICATION
Tentative n°4 (l'actuelle)
git clone git@github.com:wallabag/wallabag.git
cd wallabag
git checkout 2.0.4
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php app/console wallabag:install --env=prod
Toujours bien en version de prod
Facilite la mise à jour (par les tags)
Mais toujours des soucis de mémoire
41. LES ÉTAPES EN COURS
RabbitMQ, pour les gros traitements
Elasticsearch ( @damienalexandre)
Dockerization par @JoliCode en salle C
Gérer les dépendances CSS et JS via
42. API : INTÉGRATIONS DÉJÀ RÉALISÉES
: clone libre de IFTTTTrigger-Happy.eu
github.com/foxmask/django-th
@TriggerHappyEu
43. API : INTÉGRATIONS DÉJÀ RÉALISÉES
Application Windows Phone (Android et iOS en cours de
réalisation)
Addon pour Firefox
: plugin pour ajouter dans wallabag
depuis Tiny Tiny RSS
Librairies , et
ttrss-to-wallabag-v2
Python Java .NET
44. API : INTÉGRATIONS SOUHAITÉES
Cozy Cloud
ownCloud
Fabricants de liseuses
Firefox, Gnome (pour remplacer Pocket)