-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
346 lines (232 loc) · 21.7 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Sismic Blog]]></title>
<link href="/atom.xml" rel="self"/>
<link href="/"/>
<updated>2016-05-18T15:54:13+02:00</updated>
<id>/</id>
<generator uri="http://sculpin.io/">Sculpin</generator>
<entry>
<title type="html"><![CDATA[Retour d'expérience: Pomm est mûr, abandonnons les ORM]]></title>
<link href="/blog/2016/05/19/pomm-est-mur"/>
<updated>2016-05-19T08:00:00+02:00</updated>
<id>/blog/2016/05/19/pomm-est-mur</id>
<content type="html"><![CDATA[<h1 id="l%27abandon-d%27un-orm-au-profit-de-pomm%2C-retour-d%27exp%C3%A9rience.">L'abandon d'un ORM au profit de Pomm, retour d'expérience.</h1>
<h2 id="introduction">Introduction</h2>
<p>Chez Sismic, nous utilisons Pomm sur tous nos projets. Je vais vous retracer les étapes qui ont constituées
notre passage de Propel (ORM) vers Pomm.</p>
<p>Comme beaucoup de développeurs PHP, j'ai débuté avec MySQL et PDO. Les projets se succèdent, un jour on est lassé
d'écrire du SQL et très vite on se retrouve à utiliser un ORM.</p>
<p>A ce moment là une nouvelle vie commence, on se sent léger et puissant avec l'impression de pouvoir se concentrer sur son code métier.</p>
<p>L'ORM possède de nombreux avantages, l'un des principaux étant de pouvoir s'interfacer avec plusieurs SGBD.</p>
<p>Seulement, cet avantage est également sa plus grande faiblesse. En effet pour garantir une parfaite compatibilité, il est obligé d'utiliser des fonctionnalités communes, et donc de faire l'impasse sur certaines spécificités propres à tel ou tel moteur de base de données qui n'éxistent pas partout.</p>
<p>Si cela n'est pas dommageable pour Mysql, c'est bien différent avec PostgreSQL.</p>
<h2 id="la-d%C3%A9couverte-de-pomm%2C-qu%C3%89saco-%3F">La découverte de Pomm, QUÉSACO ?</h2>
<p>L'essayer, c'est l'adopter. C'est un peu le résumé de mon passage de Mysql vers PostgreSQL. Au fil du temps, l'envie d'en découvrir plus sur ce SGBD se fait ressentir.</p>
<p>Une envie très vite rendue impossible, à cause des limitations de l'ORM #frustration.</p>
<p>C'est lors d'une discussion dans les couloirs du célèbre évènement de l'<a href="http://www.afup.org">AFUP</a> (le Forum PHP) que j'ai découvert le projet Pomm</p>
<p>Lorsque je m'y suis interressé, celui-ci était encore en v1, la v2 étant alors en cours de développement.
J'ai tout de même choisi cette dernière, pariant sur l'avenir mais également conseillé par <a href="https://twitter.com/chanmix51">Grégoire Hubert - @chanmix51</a>, owner de Pomm.</p>
<h2 id="premiers-pas%2C-premiers-doutes">Premiers pas, premiers Doutes</h2>
<p>La promesse de Pomm était forte : Utiliser pleinement la puissance de Postgres. Youuuhouu !</p>
<p>Pomm est divisé en plusieurs briques :<br />
- Foundation
- ModelManager
- Cli</p>
<p>Sans comprendre réellement le but de cette division, je commençais avec un projet Silex et insérais la full stack Pomm.</p>
<p>L'un des chevaux de bataille du projet étant de se vouloir simple et facilement appréhendable, la prise en main a été très rapide.</p>
<p>Je paramètre le DSN, exécute une commande avec le CLI et me voilà dans le Vortex Pomm.</p>
<p>Rapidement, je réalise mes premières requêtes avec le ModelManager pour effectuer les fonctions de CRUD classiques : findByPk, findWhere...</p>
<p>Puis l'envie me prend soudain de récupérer une liaison grâce à une Foreign Key. Avec Propel j'aurais fait un ->leftJoinFK mais là?</p>
<p>Quoi? je dois écrire une requête SQL?</p>
<p>Pendant 2 secondes, un petit moment de solitude me gagne... Puis, rapidement, la mémoire me revient: Left Join, Inner Join, tant de mots clés non utilisés depuis bien longtemps!</p>
<p>Après plusieurs années, me voilà à réecrire mes requêtes SQL !</p>
<p>C'est génial, mais là je passe plus de temps qu'avant à obtenir un résultat identique ... Dans ce cas, quel avantage Pomm m'apporte t'il ?</p>
<h2 id="changer-sa-fa%C3%A7on-de-penser">Changer sa façon de penser</h2>
<p>Bien décidé à utiliser pleinement cette puissance promise, je lisais en parallèle des articles sur PostgreSQL.</p>
<p>Le premier d'entre eux me parlait des Schémas. J'ai découvert que "public" n'était pas là que pour ajouter une étape dans le parcours d'accès à ma base et faire plus Geek que Mysql ^^ ?</p>
<p>Et bien non! celà a une vraie utilité, dont voici le détail <a href="http://docs.postgresqlfr.org/9.4/ddl-schemas.html">schémas PostgreSQL</a>.</p>
<p>Ensuite j'entend parler de JSON, Hstore, Tsrange, Array... PostgreSQL contiendrait donc d'autres types de données que integer, varchar... ?</p>
<p>Cela fut sans doute mon plus grand bouleversement. Stop ! j'ai déjà stocké de l'Array avec Propel !</p>
<p>En fait les ORM se devant de garder une compatibilité avec tous les SGBD, mon array était en fait stocké sous la forme d'une chaîne parsée o_O. PostgreSQL, lui, peut stocker réellement un array et grâce a Pomm plus besoin de parsing. J'envoie et reçois un Array à Postgres.</p>
<p>Je commencais à comprendre qu'il fallait arréter de penser ORM ! et celà fût sans doute l'étape la plus difficile.</p>
<p>Je compare celà au passage Procédural => Objet. Au départ, on a l'impression de perdre du temps puis très vite on découvre la force des choses, la maintenabilité...</p>
<p>Lors de mes tests pour intégrer Pomm à mes projets existants avec Propel, une de mes premières erreurs fut de négliger la structure de la base de données. Conserver une struture de base de données dictée par l'utilisation d'un ORM (Propel, Doctrine ou autre) couplée avec Pomm ne présente finalement aucun intéret et je ne saurais que trop vous conseiller uné ré-organisation au moins partielle de votre base.</p>
<h2 id="la-mont%C3%A9e-en-puissance%2C-la-re-d%C3%A9couverte-de-postgres">La montée en puissance, la re-découverte de Postgres</h2>
<p>Mon cerveau commencant à se faire à l'idée, je décidais d'en apprendre plus sur Pomm, aider et supporter par la petite mais très présente team du
projet sur le channel IRC : irc.freenode.net #pomm.</p>
<p>Dans mes projets, je dois souvent mettre en place des tableaux de statistiqures, des graphiques etc... Jusqu'à la découverte de Pomm, cela était une réelle corvée.</p>
<p>Je devais écrire des scripts de plusieurs lignes avec l'ORM pour tenter de récupérer des datas sur des dizaines de tables différentes et faire des SUM, des distincts...</p>
<p>Ce genre de script est très peu debuggable et maintenable, et que dire de l'exploitation des résultats obtenus ?
Des boucles imbriquées et des conditions en tout genre pour tenter d'obtenir quelque chose d'exploitable.</p>
<p>C'est là qu'intervient Foundation ! Pourquoi vouloir modéliser en objet ce genre de données ?</p>
<p>Ce que l'on souhaite, c'est afficher des tableaux de stats. Alors pourquoi ne pas faire une simple projection du résultat que l'on veut obtenir?
C'est exactement ce que permet Foundation en bénéficiant des avantages de Pomm.</p>
<p>Dans ces tableaux de statistiques, on doit souvent calculer les totaux. Quelle solution ? une autre requête ? calcul des totaux lors de la boucle d'affichage?
Pourquoi faire compliqué lorsque c'est déjà disponible en natif avec les <a href="http://www.PostgreSQL.org/docs/9.4/static/tutorial-window.html">WITH Queries</a> ?</p>
<p>Une grande étape a été de redonner du sens à mon SGBD en lui intégrant la gestion de certaines contraintes métier, notamment grâce à des triggers.</p>
<p>Le but étant de permettre à la base de données de pouvoir garder son "intégrité métier" de manière autonome, peu importe le client qui interragit avec elle.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Presque 2 ans se sont écoulés et Pomm fait maintenant partie de notre quotidien et est déployé en production sur des projets Silex, Symfony2 & Symfony3 ou from scratch.</p>
<p>Chez Sismic, Pomm nous a permis de gagner en efficacité. Notre code est beaucoup plus maintenable et évolutif.</p>
<p>Cela à également permis de réduire considérablement le temps de formation lors de nouveau recrutement et de réduire la prise en main des projets.</p>
<p>Pomm convient à tout type de projet grâce à son découpage:
Des applications complexes grâce au Model Manager, des applications ayant besoin d'une interface simple a PostgreSQL grâce à Foundation, mais également des workers grâce au CLI.</p>
<p>Vous l'aurez compris, la plus grande difficulté de Pomm est la remise en question obligatoire de nos habitudes et la volonté de vouloir arréter de snober le SQL.</p>
<p>La plus grande force de Pomm est de se faire oublier et de n'avoir aucune contrainte pour communiquer et exploiter la puissance de PostgreSQL.</p>
<p>Aujourd'hui, l'équipe s'est agrandie, la formation a été simple et l'équipe découvre chaque jour des fonctionnalités un peu plus avancées de Postgres.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Notification des erreurs applicatives vers Slack via Monolog]]></title>
<link href="/blog/2016/04/21/send-errors-with-monolog-to-slack"/>
<updated>2016-04-21T10:00:00+02:00</updated>
<id>/blog/2016/04/21/send-errors-with-monolog-to-slack</id>
<content type="html"><![CDATA[<h1 id="notification-des-erreurs-applicatives-vers-slack-via-monolog">Notification des erreurs applicatives vers Slack via Monolog</h1>
<h2 id="le-contexte">Le contexte</h2>
<p>Chez <a href="https://sismicfr.github.io">Sismic</a>, nous sommes tous en télétravail.
Nous avons donc besoin d'un outil de communication nous permettant d'échanger entre nous sur différents sujets, que ce soit sur les projets en cours, l'organisation,
les plannings ou tout autre sujet de discussion. Il faut également que nous ayions accès à l'historique des communications des membres de l'équipe,
même lorque nous sommes hors ligne (ce qui bien entendu ne devrait jamais arriver :D).</p>
<p>C'est pour cette raison que nous avons opté pour <a href="https://slack.com">Slack</a>.</p>
<p>Nous développons des applications [Symfony 2] (http://symfony.com) pour nos différents clients, avec <a href="https://github.com/Seldaek/monolog">Monolog</a> pour la gestion des logs applicatifs.
Lorsqu'une erreur arrive sur une de nos applications, elle est enregistrée dans le fichier log du projet.</p>
<p>Malheureusement, les fichiers logs sont généralement consultés par nos équipes seulement après que l'erreur nous ait été signalée, que ce soit par les clients ou bien par un internaute.
Une première solution a été de mettre en place une notification par mail, seulement cette solution a vite trouvé ses limites lors du départ en vacances du premier développeur :).</p>
<h2 id="envoyer-les-notifications-d%27erreurs-de-nos-applications-vers-un-channel-slack-via-monolog">Envoyer les notifications d'erreurs de nos applications vers un channel Slack via Monolog</h2>
<p>Pour gagner en réactivité, il nous faut donc pouvoir récupérer en temps réel les notifications d'erreur sur un canal de communication accessible à n'importe quel moment
par l'équipe de développement.
Nous avons justement ce canal de communication à notre disposition: notre outil de communication Slack. Chaque membre de l'équipe de développement s'y connecte en début de journée et
est connecté durant toute sa journée de travail (et même plus si affinité! ). Il aurait donc été intéressant de pouvoir utiliser également cet outil pour recevoir les erreurs critiques de nos applications.</p>
<p>Ca tombe bien, Monolog dispose d'un <a href="https://github.com/Seldaek/monolog/blob/master/doc/02-handlers-formatters-processors.md#send-alerts-and-emails">handler Slack</a>
qui permet d'envoyer les erreurs ayant un certain niveau de criticité minimum vers un channel Slack pré-défini:
<a href="https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/SlackHandler.php">https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/SlackHandler.php</a></p>
<p>Voici les étapes pour le paramétrage de cette fonctionnalité :</p>
<ul>
<li><p>Créer un nouveau channel Slack
Il faut se rendre sur <a href="https://get.slack.help/hc/en-us/articles/201402297-Creating-a-channel">la page de création de channel</a> et créer un nouveau channel privé.</p></li>
<li><p>Générer un token d'identification pour autoriser notre application Symfony (ou toute autre application utilisant Monolog pour enregistrer ses logs) à envoyer des données à Slack.
<a href="https://api.slack.com/web">Authentication</a></p></li>
<li><p>Paramétrer la communication entre Slack et Monolog dans config_prod.yml (config_dev.yml pour tester en développement).</p></li>
</ul>
<p><code>parameters.yml</code></p>
<pre><code>parameters:
slack_token: slack-token
slack_channel: "#nom-du-channel-slack"
slack_bot: nom-du-bot-slack
slack_emoji: :logo-a-utiliser:
slack_level: error # Niveau d'erreur minimum qui enverra une notification au channel Slack
</code></pre>
<p><code>config_xxx.yml</code></p>
<pre><code>monolog:
handlers:
slack:
type: slack
token: %slack_token%
channel: %slack_channel%
bot_name: %slack_bot%
icon_emoji: %slack_emoji%
level: %slack_level%
include_extra: true
</code></pre>
<ul>
<li><p>Et l'appel de l'erreur dans l'application:</p>
<p>$this->get('logger')->error('Error Message', [
'parameter1' => 'value1',
'parameter2' => 'value2',
'parameter3' => 'value3',
'parameter4' => 'value4',
]);</p></li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>Voilà, j'espère que désormais vous pourrez être notifiés rapidement d'une erreur sur votre application si vous utilisez Monolog et Slack.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[PgDay Paris 2016]]></title>
<link href="/blog/2016/04/10/pgday-2016"/>
<updated>2016-04-10T20:05:00+02:00</updated>
<id>/blog/2016/04/10/pgday-2016</id>
<content type="html"><![CDATA[<h1 id="conf%C3%A9rence-pgday-paris-2016">Conférence PgDay Paris 2016</h1>
<h2 id="retour-sur-le-pgdayparis---point-de-vue-c%C3%B4t%C3%A9-dev">Retour sur le pgDayParis - Point de vue côté dev</h2>
<p>Le 31 mars dernier à Paris s’est déroulée la conférence annuelle <a href="http://www.pgday.paris">pgDay Paris</a>.</p>
<p>Cet évènement organisé par la communauté française et européenne de PostgreSQL,
est ouvert à tous, DBA, Développeur...</p>
<p>SISMIC était présente à cet événement majeur et nous partagerons notre vision
de développeurs : <a href="https://twitter.com/mcoutant">Mathias COUTANT</a> et <a href="https://twitter.com/ryosaeba_fr">Laurent BOLZER</a>.</p>
<h2 id="historique-des-bases-de-donn%C3%A9es%2C-au-regard-des-exigences-actuelles---s%C3%A9bastien-lardiere">Historique des Bases de Données, au regard des exigences actuelles - Sébastien LARDIERE</h2>
<p>Une première conférence très intéressante qui nous met dans le bain avec un petit retour en arrière pour nous expliquer
l’évolution et les attentes des utilisateurs de bases de données.</p>
<p><strong>Ce que nous retiendrons :</strong> énormément de travaux sont issus d’universités.</p>
<h2 id="postgresql-backup-the-modern-ways---magnus-hagander">PostgreSQL Backup the modern ways - Magnus HAGANDER</h2>
<p>Une conférence donnée par le président de PostgreSQL Europe, c’est quand même la classe, et en particulier sur les backups.</p>
<p>Après une légère introduction sur l’importance de tester ses backups (sous peine d’avoir des surprises ...), Magnus nous montre les différents moyens
pour générer les backups, en passant par pg_dump (trop lent pour la restauration (et surtout aucun « PITR ») et pg_basebackup (qui est le moyen conseillé par Magnus).</p>
<p><strong>Ce que nous retiendrons :</strong><br />
pg_basebackup doit être utilisé pour plusieurs raisons: c’est un moyen sûr qui utilise le protocole de réplication,
sauvegarde sur l’ensemble de l’instance et a une gestion des erreurs.</p>
<p>Très important, toujours utiliser -x ou -X pour inclure xlog ...</p>
<p><strong>Outils à regarder :</strong> Barman, pgBackRest.</p>
<h2 id="survivre-%C3%A0-une-migration-de-donn%C3%A9es-de-mysql-vers-postgres---gr%C3%A9goire-hubert">Survivre à une migration de données de MySQL vers Postgres - Grégoire HUBERT</h2>
<p>Migrer une base de données MySQL vers PostgreSQL n’est pas la chose la plus aisée au monde ni la plus amusante.</p>
<p>Grégoire commence fort et de manière assez trollesque avec "On peut migrer de MySQL à PostgreSQL en 20 min",
et nous montre ensuite les différentes étapes d’une migration sans passer par un ETL
(création de vues dans un db dédiée MySQL, chargement de Postgres via PgLoader, dispatch des données en SQL Postgres, tester la structure avec PgTap)</p>
<p><strong>Outils qu’il faut absolument retenir:</strong></p>
<ul>
<li>PgLoader pour charger les données sous stéroïdes (gère notamment l’encoding latin1 -> utf8, stream les données via le protocole COPY qui est très rapide ...)</li>
<li>PgTap pour tester la structure.</li>
</ul>
<h2 id="pause-d%C3%A9jeuner">Pause déjeuner</h2>
<p>Il nous a été proposé un copieux buffet froid. Le repas était au top.</p>
<p>La pause dej a été l'occasion pour nous d'échanger avec notre ami pommiste, Grégoire HUBERT.</p>
<h2 id="quels-outils-de-supervision-pour-postgresql-%3F---damien-clochard">Quels outils de supervision pour PostgreSQL ? - Damien CLOCHARD</h2>
<p>Cette conférence nous présentait divers outils et commandes pour visualiser et monitorer son instance PostgreSQL.</p>
<p>De nombreux outils y étaient présentés :</p>
<ul>
<li><a href="https://www.nagios.org">Nagios</a></li>
<li><a href="https://github.com/julmon/pg_activity">pg_activity</a> qui permet de visualiser en temps réel l'activité de l'instance PostgreSQL à la manière de la commande "top" pour surveiller l'activité du système</li>
<li><a href="https://github.com/dalibo/pgbadger">pgBadger</a> analyse les logs PostgreSQL et ressort des rapports détaillés et des graphiques </li>
<li>[POWA] (http://dalibo.github.io/powa/) (Postgresql Workload Analyze) collecte les statistiques d'une base de données PostgreSQL, permet d'avoir un monitoring
de l'activié de l'instance et donne des pistes d'optimisation comme la pose d'index sur certaines tables. </li>
</ul>
<h2 id="10-things%2C-an-oracle-dba-should-care-about-when-moving-to-postgresql---ilya-kosmodemiansky">10 Things, an Oracle DBA should care about when moving to PostgreSQL - Ilya KOSMODEMIANSKY</h2>
<p>Cette conférence était orientée DBA et donnait des conseils pour migrer une base de données Oracle vers PostgreSQL.</p>
<p>Une conférence très intéressante, mais très axée DBA et de ce fait hors de notre domaine de compétence.</p>
<h2 id="tout-sur-les-index---c%C3%A9dric-villemain">Tout sur les index - Cédric VILLEMAIN</h2>
<p>Cette conférence nous a particulièrement intéressé et donné des explications sur les différents types d'index et leur utilisation.</p>
<p>Bien qu'indiquée de niveau "Intermédiaire", il fallait déjà une bonne connaissance des index pour l'aprécier à sa juste valeur.</p>
<p>Cédric rappelle que les index ne sont pas une notion indispensable au langage SQL qui peut fonctionner sans les index. Par contre, ils ont été créés par la suite pour des questions
de performance.</p>
<p>Des index sont créés automatiquements par le moteur SQL, comme pour les Primary Key. Dans le cas des Foreign Key, le moteur ne crée pas d'index automatiquement.</p>
<p>Il a ensuite donné des exemples d'utilisation des index de type BTREE, GIST, GIN et BRIN.</p>
<p>L'exemple qu'il a donné sur l'usage de <strong>exclude using gist</strong> était très intéressant pour gérer par exemple les conflits sur chevauchement de dates,
dans le cas d'une application de planning de réservation de salle par exemple.</p>
<pre><code>CREATE EXTENSION btree_gist;
CREATE TABLE DEMO (
id serial PRIMARY KEY,
pseudo TEXT,
active_range DATERANGE,
EXCLUDE USING GIST (lower(pseudo) with =, active_range with &&
);
</code></pre>
<h2 id="postgeol%3A-une-future-extension-postgresql-pour-les-g%C3%A9ologues%2C-dans-le-cadre-de-geolllibre---pierre-chevalier">PostGeol: une (future) extension PostgreSQL pour les géologues, dans le cadre de GeolLLibre - Pierre CHEVALIER</h2>
<p>Nous n'avons malheureusement pas pu assister à cette conférence car nous avons dû partir plus tôt pour affronter une épreuve pire qu'une migration MySQL:
une grève dans les transports pour l'un, la pluie et les bouchons sur le périphérique parisien pour l'autre!</p>
<h2 id="conclusion">Conclusion</h2>
<p>Les présentations de cette conférence étaient toutes très intéressantes, certaines orientées développeur, d'autres DBA, bref il y en avait pour tous les goûts !</p>
<p>La pluie et les grèves parisiennes, certainement orchestré par Oracle #troll, n'aurons pas eu raison du succès de ce rendez vous annuel.</p>
<p>Vivement l'édition 2017.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Ouverture du blog Sismic]]></title>
<link href="/blog/2016/04/01/blog-sismic"/>
<updated>2016-04-01T20:05:00+02:00</updated>
<id>/blog/2016/04/01/blog-sismic</id>
<content type="html"><![CDATA[<h1 id="ouverture-du-blog-sismic">Ouverture du blog Sismic</h1>
<p>Bonjour à tous,</p>
<p>Vous trouverez sur ce blog notre retour d'expérience et les sujets qui nous passionnent.</p>
]]></content>
</entry>
</feed>