Vous êtes sur la page 1sur 70

QR codes et codes à barres

sous Delphi
Webinaire du 26 mars 2019

(c) Patrick Prémartin / developpeur-pascal.fr


Au menu du jour

• Introduction
• C’est quoi un QR code ou un code à barres ?
• La génération de QR codes et codes à barres
• La lecture de QR codes et codes à barres
• Cas pratique : fiches de lecture
• Conclusion
• Questions / réponses

(c) Patrick Prémartin / developpeur-pascal.fr


Introduction

(c) Patrick Prémartin / developpeur-pascal.fr


Patrick Prémartin

• Ancien utilisateur de Turbo Pascal, amoureux de Delphi depuis toujours,


développeur web depuis NCSA Mosaic…

• Prestataire et formateur à travers sa société Olf Software.

• Editeur du blog https://developpeur-pascal.fr/

• MVP Embarcadero depuis octobre 2017.

• Auteur d’articles, de livres, webinariste et parfois même conférencier.

(c) Patrick Prémartin / developpeur-pascal.fr


A propos de Olf Software

• Depuis octobre 2001 la société de services Olf Software propose des


prestations de conseil, développement et formation sur les
technologies liées au web et au développement logiciel.

• La société édite également des livres, des sites Internet et des


logiciels.

• Site web principal : https://olfsoftware.fr

(c) Patrick Prémartin / developpeur-pascal.fr


Organisme de formation

• Olf Software propose des formations en lien avec Delphi.

• Des formations inter entreprises sont organisées régulièrement et


annoncées sur https://se-former-a-delphi.fr/

• Des formations intra entreprise personnalisées sont faisables sur demande


partout en France et en Europe.

• Olf Software est un organisme de formation professionnelle enregistré en


préfecture et référencé sur Datadock.
Nos formations peuvent être prises en charge par les OPCA.

(c) Patrick Prémartin / developpeur-pascal.fr


Les versions de Delphi

• Plusieurs licences de Delphi existent (vendu seul ou dans RAD Studio):


• Academic : pour les établissements d’enseignement et leurs étudiants
• Community Edition : gratuit pour tous, en licence commerciale limitée
• Professional, Enterprise, Architect : pour les entreprises, selon leurs besoins

• Pour toutes informations sur les licences et les tarifs contactez la


société Barnsten sur https://www.barnsten.com/fr/

(c) Patrick Prémartin / developpeur-pascal.fr


Les webinaires précédents

• Je participe régulièrement à des webinaires. Une page leur est


consacrée sur mon blog à l’adresse https://vasur.fr/webinairesdelphi

• Vous y trouverez les rediffusions en vidéos lorsqu’elles sont


disponibles, un PDF de mes présentations, le lien vers les sources des
exemples présentés et des informations complémentaires.

• S’y trouvent aussi les dates et liens d’inscriptions pour les prochains
webinaires, conférences et formations.
(c) Patrick Prémartin / developpeur-pascal.fr
Introduction

• Présentation de la société Olf Software


https://www.olfsoftware.fr
• Présentation de Patrick Prémartin
https://www.linkedin.com/in/patrickpremartin/
• Les différentes versions de Delphi
https://www.embarcadero.com/fr/products/delphi
• Voir ou revoir les webinaires précédents
https://vasur.fr/webinairesdelphi

(c) Patrick Prémartin / developpeur-pascal.fr


Introduction

• Aujourd’hui nous allons parler de QR codes et codes à barres :


• Ce qu’ils représentent.
• A quoi ils servent.
• D’autres technologies pour faire la même chose.
• Comment les utiliser dans Delphi.

(c) Patrick Prémartin / developpeur-pascal.fr


QR code, code à barres,
c’est quoi ?

(c) Patrick Prémartin / developpeur-pascal.fr


Qu’est-ce qu’un code à barres ?

• Les codes à barres sont une forme de codage de chiffres et lettres


dans un rectangle composé de traits verticaux noirs sur fond blanc.
• Il existe de nombreux types de codes à barres. Ci-dessous un
« interleave 2 of 5 » et un « code 39 ». Le dessin permet de
déterminer le type utilisé et le contenu codé.
• Plus d’infos sur https://en.wikipedia.org/wiki/Barcode

(c) Patrick Prémartin / developpeur-pascal.fr


Qu’est-ce qu’un QR code ?

• On assimile les QR codes à des codes à barres 2D. Il en existe de


nombreux formats que vous retrouverez aussi sur
https://en.wikipedia.org/wiki/Barcode
• Plus complexes que les codes à barres, les QR codes sont utilisés pour
stocker des informations en plus gros volume avec un certain niveau
de redondance.
• Quand un code à barres est partiellement effacé, on perd tout.
Les QR codes contribuent à limiter ce problème.

(c) Patrick Prémartin / developpeur-pascal.fr


A quoi servent-ils ?

• Les codes à barres sont généralement utilisés pour identifier des objets.
• Les QR codes permettant de stocker plus d’informations dans un volume
plus petit ils servent à identifier des objets ou des lieux mais également à
transporter des informations ou les stocker d’une façon plus facilement
lisible par des automates.
• Les cas d’usages les plus courants sont les étiquettes produits (codes à
barres et maintenant QR codes sur les livres et spiritueux), les étiquettes
d’expédition des colis (codes à barres pour le numéro de colis, QR code
pour redonder l’adresse et certaines informations de colisage) et les billets
de train ou de spectacles.
(c) Patrick Prémartin / developpeur-pascal.fr
A quoi servent-ils ?

• Dans notre monde « augmenté » on utilise des QR codes un peu


partout : sur des abribus, dans des magasins, dans des musées, sur
des lieux touristiques, sur les menus des restaurants, …
• Ces tags contiennent soit des informations interprétées par une
application mobile, soit des URL qui peuvent renvoyer vers des pages
web quand on n’a pas l’application concernée soit être interprétées
par l’applications associée.
• On retrouve codes à barres ou QR codes sur les cartes d’étudiants, les
cartes de fidélité, les badges d’entreprises, …
(c) Patrick Prémartin / developpeur-pascal.fr
Quel intérêt ?

• Codes à barres et QR codes ne coûtent rien à produire et peuvent


être soit imprimés, soit tatoués, soit directement affichés sur des
écrans, il est donc très facile de les utiliser.
• Tous les appareils capables de capturer une image ont désormais une
application de lecture de ces codes, on peut donc utiliser un
smartphone directement sans avoir besoin d’équipement spécifique.
• L’inconvénient c’est qu’ils sont reproductibles et lisibles par n’importe
qui en ayant pris l’image. On ne doit donc pas s’en servir pour des
informations sensibles ou gérer des accès sécurisés.
(c) Patrick Prémartin / developpeur-pascal.fr
Les alternatives

• Quand on parle d’accès sécurisés on entre plutôt sur des technologies


utilisant les RFID et NFC que liées aux QR codes et codes à barres
simples.
• Si aller plus loin sur ce sujet vous intéresse je vous recommande la
session « Integrating with Barcode and RFID Readers » de Fernando
Rizzato lors du Code Rage 2018 organisé par Embarcadero:
https://www.embarcaderoacademy.com/courses/441209/lectures/84
41956

(c) Patrick Prémartin / developpeur-pascal.fr


La génération de QR codes et
codes à barres

(c) Patrick Prémartin / developpeur-pascal.fr


Générer des codes 1D et 2D

• Les normes de chaque type de codes à barres (1D) et codes 2D sont


connues, il est donc possible de tout faire à la main. Il suffit de
dessiner ce que l’on veut obtenir dans une image.
• Ni Delphi 10.3.1 Rio, ni ses prédécesseurs ne proposent de
composant ou librairie pour générer des codes à barres ou QR codes.
• Si on ne veut pas tout coder soi-même on peut passer par des
composants externes ou l’une des libraires open source existantes
(Zint ou Zxing pour les plus connues).

(c) Patrick Prémartin / developpeur-pascal.fr


Générer des codes 1D et 2D

• Les outils de génération d’état intègrent généralement une solution


pour avoir des codes 1D ou 2D sur les listings qu’ils génèrent. C’est
notamment le cas de Fast Report et Rave Report.
• Pour le reste (écrans, exports sous forme d’images) il y a de
nombreuses possibilités. J’ai choisi 4 solutions à vous présenter :
• Winsoft
• TMS Software
• Han Soft
• La librairie « DelphiZXingQRCode » dispo sur GitHub.

(c) Patrick Prémartin / developpeur-pascal.fr


A propos de Winsoft

• La société Winsoft s’est spécialisée dans l’empaquetage en Delphi de


librairies open sources.
• On retrouve de nombreuses choses sous forme de composants ou
d’unités, pour la VCL ou FMX, depuis leur site.
• Ils proposent des licences par pack ou globale avec l’utilisation à vie,
un an de mises à jour et un support par email.
• Leur site web : https://www.winsoft.sk

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec Winsoft

• Pour la génération de codes 1D et 2D Winsoft se base sur la librairie


open source Zint.
• Ces composants sont disponibles avec les DLL et équivalents pour la
VCL et FMX :
• https://www.winsoft.sk/barcode.htm
• https://www.winsoft.sk/fbarcode.htm

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec Winsoft
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


A propos de TMS Software

• Tout développeur Delphi a forcément entendu parler de cet éditeur à


un moment ou un autre de sa carrière.
• TMS Software édite de nombreux packs de composants pour Delphi
(VCL, FMX et IntraWeb) et maintenant aussi pour Lazarus.
• Depuis un an TMS Software a sorti une solution permettant de faire
des sites web en Pascal depuis Delphi et continue à mettre à jour
régulièrement ses packs notamment dans le domaine de la
cryptographie et le cloud.
• Leur site web : https://www.tmssoftware.com/

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec TMS Software

• TMS Software ne propose pas directement de solution pour générer


des codes à barres ou QR codes en revanche ils passent pas l’API du
site Barcodes4Me.
• Le composant est présent dans leurs packs cloud pour VCL, FMX et
LCL:
• https://www.tmssoftware.com/site/cloudpack.asp
• https://www.tmssoftware.com/site/tmsfmxcloudpack.asp

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec TMS Software

• Les composants de TMS génèrent une image que l’on peut enregistrer
directement ou une URL qu’il faut appeler pour récupérer l’image
générée.
• Dans un cas comme dans l’autre, ils passent par un site externe et ça
implique donc que le site soit accessible et opérationnel.

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec TMS Software
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


A propos de Han-soft

• L’éditeur Han-soft édite des packs de composants 1D et 2D pour


Delphi depuis sa création en 2001.
• D’autres outils sont disponibles comme un logiciel de backup, un
logiciel de tunneling et des logiciels gratuits pour générer des codes à
barres (développés en Delphi avec leurs composants).
• Leur site web : https://www.han-soft.com

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec Han-soft

• Han-soft propose trois packs de composants pour générer des codes


1D et des codes 2D.
• https://www.han-soft.com/barcode1d.php
• https://www.han-soft.com/barcode2d.php
• https://www.han-soft.com/barcodefmx2d.php
• Ces packs de composants sont payants. Leur licence inclut une
utilisation à vie et des mises à jour.

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec Han-soft

• L’approche est différente des composants Winsoft ou TMS Software


car ici c’est du développement en Pascal complètement indépendant
d’une librairie extérieure ou d’un site web.
• Il y a un composant par type de code 1D (VCL uniquement) ou 2D
(VCL ou FMX).
• Chaque composant permet un export de l’image dans différents
formats et bien entendu l’affichage à l’écran.
• Cette solution permet également de s’interfacer avec les outils de
reporting habituels.

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec Han-soft

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec Han-soft
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


La solution open source

• Il existe aussi des solutions open source dont celle-ci sur GitHub:
« DelphiZXingQRCode ».
C’est un portage Delphi partiel de la librairie Zxing.
• Le téléchargement se fait depuis cette page :
• https://github.com/foxitsoftware/DelphiZXingQRCode
• Sa présentation est disponible sur cette page :
• https://www.debenu.com/open-source/delphizxingqrcode/

(c) Patrick Prémartin / developpeur-pascal.fr


La solution open source

• La librairie « DelphiZXingQRCode » est gratuite.


• Elle est libre d’utilisation y compris pour un usage commercial.
• Elle ne permet de générer que des QR codes.
• Elle ne fait pas le dessin elle même, c’est à nous de le faire. Un
exemple est fourni dont on a juste à copier coller le source.

(c) Patrick Prémartin / developpeur-pascal.fr


Génération avec
DelphiZXingQRCode
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


La lecture de QR codes et
codes à barres

(c) Patrick Prémartin / developpeur-pascal.fr


Lire des codes à barres et QR

• La lecture de codes à barres et QR codes nécessite un peu de


reconnaissance de formes car elle se fait depuis une image.
• L’image contenant le code à interpréter peut provenir d’un flux vidéo,
d’une photo ou d’un fichier selon les cas.
• D’une façon générale notre logiciel doit fournir une trame (image fixe
et idéalement pas floue) à la librairie qui y recherche le ou les codes
présents et nous en fournit la liste.

(c) Patrick Prémartin / developpeur-pascal.fr


Lire des codes à barres et QR

• Delphi ne possède pas de librairie ou de composant capable de traiter


les images pour en ressortir les codes 1D ou 2D présents.
• Comme pour la génération on doit faire appel à un ami mais pas de
chance il y a une séance d’aqua poney à leur club de sport.
• Parmi les solutions que j’ai pu trouver, j’ai retenu ces deux là :
• Winsoft
• La librairie « ZXing.Delphi » dispo sur GitHub

(c) Patrick Prémartin / developpeur-pascal.fr


Lire des codes à barres et QR

• Si on en a la possibilité il est préférable d’utiliser des douchettes ou


scanners dédiés à la lecture des codes à barres et autres codes. Ils
sont plus pratiques à manier pour l’utilisateur car ils n’imposent pas
l’étape de prise de photo.

(c) Patrick Prémartin / developpeur-pascal.fr


Lire des codes à barres et QR

• Il existe des smartphones équipés de scanners dédiés, agissant


comme une douchette ou transmettant leurs infos en bluetooth, en
série ou par l’intermédiaire d’une API constructeur.
• Fernando Rizzato en parle dans sa session du CodeRage 2018.
Regardez là pour savoir quels équipements il préconise et comment il
s’en sert sous Delphi.
• https://www.embarcaderoacademy.com/courses/441209/lectures/8441956

(c) Patrick Prémartin / developpeur-pascal.fr


Lecture avec Winsoft

• Comme il existe des librairies open source pour la reconnaissance de


codes à barres et QR codes, Winsoft propose plusieurs packs de
composants.
• Basés sur la librairie Zbar :
• https://www.winsoft.sk/obr.htm
• https://www.winsoft.sk/fobr.htm
• Basés sur la librairie Zxing :
• https://www.winsoft.sk/obrlib.htm
• https://www.winsoft.sk/fobrlib.htm
• https://www.winsoft.sk/aobrlib.htm

(c) Patrick Prémartin / developpeur-pascal.fr


Lecture avec Winsoft

• Je ne vais parler que de « obr » et « fobr » qui sont sous la forme de


composants alors que les autres ne sont accessibles que par le code.
• Contrairement aux packs basés sur Zxing, le pack « Optical Barcode
Recognition for FireMonkey » fonctionne sur iOS, Android, macOS et
Windows.
• Ces packs sont payants et embarquent les DLL et équivalents
nécessaires. A nous de les déployer avec nos logiciels.

(c) Patrick Prémartin / developpeur-pascal.fr


Lecture avec Winsoft
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


La solution open source

• Sur GitHub on peut trouver la librairie « ZXing.Delphi » qui est un


portage de la librairie Java correspondante.
• Cet ensemble de composants permet de reconnaître les codes 1D et
2D les plus courants comme c’est le cas avec les composants de
Winsoft.

(c) Patrick Prémartin / developpeur-pascal.fr


La solution open source

• La librairie ZXing d’origine n’est plus maintenue, celle-ci risque par


conséquent de ne pas l’être non plus.
• Faites donc le bon choix selon vos besoins entre le « natif Delphi » de
cette librairie et le « embarque la DLL ZBar » pour la solution de
Winsoft.
• Aucune documentation n’est fournie, il faut donc bidouiller en
s’inspirant des exemples et regarder dans les options de projet les
chemins de recherche d’unités à inclure.

(c) Patrick Prémartin / developpeur-pascal.fr


Lecture avec Zxing.Delphi
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique : fiches de lecture

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique : fiches de lecture

• Ayant vu comment générer et lire des codes dans nos logiciels, je


vous propose un cas pratique : une application permettant de
consulter des données liées à des livres sur un réseau local.
• J’ai découpé ce logiciel en 3 parties :
• Un programme qui servira à configurer l’application mobile.
• Un programme de gestion de la base de données de livres.
• Une application mobile qui lira les codes à barres et affichera le titre des
livres.

(c) Patrick Prémartin / developpeur-pascal.fr


Utilisation de l’AppTethering

• Suite à une demande d’exemples sur developpez.com j’ai utilisé


l’AppTethering pour faire discuter les programmes entre eux.
• L’AppTethering est une technologie permettant de partager des
données et actions entre programmes sur le réseau local ou en
Bluetooth grâce à l’utilisation de deux composants.
• Le TTetheringManager gère les connexions et recherches de
partenaires.
• Le TTetheringProfile gère les ressources et actions partagées.

(c) Patrick Prémartin / developpeur-pascal.fr


Utilisation de l’AppTethering

• Ici j’utilise l’association automatique entre les différents programmes.


• Chaque TTetheringManager devant s’associer a la même valeur dans
la propriété Password.
• Chaque TTetheringProfile (associé au bon TTetheringManager) a la
même valeur dans la propriété Group pour dialoguer avec ses
partenaires.
• Plus d’infos sur
http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_App_Teth
ering

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique : fiches de lecture
Le programme de configuration

(c) Patrick Prémartin / developpeur-pascal.fr


Le programme de configuration

• Le programme de configuration est un écran tout simple développé


avec IntraWeb.
• On saisit le mot de passe que l’on veut utiliser entre les applications
mobiles et le logiciel de gestion.
• Le programme génère le QR code correspondant pour l’application
mobile et envoi le mot de passe à l’application de gestion par
l’intermédiaire de la ressource « Password » partagée en
AppTethering.

(c) Patrick Prémartin / developpeur-pascal.fr


Le programme de configuration

• Notez que les composants non visuels sont au niveau du serveur et


non de la session utilisateur ou de l’écran lui-même. Ca permet de
s’assurer de leur existence et pérennité durant toute l’exécution de
l’application.
• Quand vous utilisez un système de type serveur comme celui-ci
n’oubliez pas de gérer les synchronisations de threads.
Là je n’ai qu’un seul utilisateur donc je ne risque pas de violations
d’accès à chaque appel de page.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique : fiches de lecture
Le programme de gestion de la base de données

(c) Patrick Prémartin / developpeur-pascal.fr


Le programme de gestion de
la base de données
• La base de données est gérée sous forme de table en mémoire avec
un TFDMemTable persistant.
• Etant en VCL pour ce programme j’ai opté pour des composants
TDBxxx et un TDataSource pour les mises à jour plutôt que passer par
Live Bindings.

(c) Patrick Prémartin / developpeur-pascal.fr


Le programme de gestion de
la base de données
• La communication avec le configurateur se fait en App Tethering, le
programme de gestion étant client de celui-ci.
• La communication avec l’application mobile se fait dans les deux sens
: une ressource partagée pour la lecture, un envoi de texte pour la
réponse.
• Dans une application classique il aurait mieux valu utiliser de vraies
API (par exemple avec un serveur REST) ou du RPC. Là je détourne
l’usage standard de l’App Tethering mais ça fonctionne très bien.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique : fiches de lecture
L’application mobile de lecture

(c) Patrick Prémartin / developpeur-pascal.fr


L’application mobile de lecture

• Pour l’application mobile il y a deux écrans gérés sous forme


d’onglets.
• Le premier sert à la configuration par la lecture du QR code contenant
le mot de passe à utiliser en AppTethering.
• Le second sert à la lecture des codes à barres des livres et à l’affichage
de leur titre.

(c) Patrick Prémartin / developpeur-pascal.fr


L’application mobile de lecture

• La lecture se fait à l’aide de la caméra du smartphone.


• Chaque trame est affichée à l’écran et une recherche de code 1D/2D
est faite.
• Sur la config : une fois le QR code trouvé on change la configuration
du TTetheringManager et on lance l’auto connexion.
• Sur la lecture: lorsque le programme trouve un code, il remplit la
ressource « CB » partagée en AppTethering avec le programme de
gestion de base.

(c) Patrick Prémartin / developpeur-pascal.fr


L’application mobile de lecture

• Lorsqu’un code est envoyé au gestionnaire de la base de données, on


n’attend pas de réponse. Elle est gérée sous forme d’événement
directement depuis le TTetheringProfile.

(c) Patrick Prémartin / developpeur-pascal.fr


L’application mobile de lecture

• Notez qu’il faut penser à désactiver la caméra lorsque l’application


perd le focus, sinon on bloque le périphérique et aucune autre
application ne peut l’utiliser.
• Notez également que l’AppTethering fonctionne en « broadcast » sans
notion de client / serveur. On peut lancer plusieurs exemplaires du
programme de gestion de la base sur le réseau. Ils recevront tous les
codes envoyés par les applications mobiles.
Tenez en compte dans vos développements si vous utilisez
l’AppTethering pour faire du client/serveur.

(c) Patrick Prémartin / developpeur-pascal.fr


Exemple : fiches de lecture
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


Bonus « poisson chat »

(c) Patrick Prémartin / developpeur-pascal.fr


Bonus « poisson chat »

• Les QR codes ont l’avantage d’être redondants, on peut donc les


abimer volontairement en respectant certaines limites. C’est pour
cela qu’on voit parfois des codes avec une image dedans.
• C’est grâce à la redondance que ces codes restent lisibles.

(c) Patrick Prémartin / developpeur-pascal.fr


Bonus « poisson chat »

• On peut aller encore plus loin dans les modifications d’un QR code
tout en conservant un certain niveau de lisibilité.
• Ici, par exemple, j’utilise les points comme masque pour incruster le
code dans une image.

(c) Patrick Prémartin / developpeur-pascal.fr


Bonus « poisson chat »

• Aucun des composants vus aujourd’hui ne gère ces modifications en


standard mais on peut très bien le faire avec les filtres ou en copiant
les images par un QR code généré.
• Si vous « jouez » à ça pour vos codes pensez à ne pas trop déborder
du centre du QR code ou de son angle bas / droite.
• Si vous incrustez le code dans une image, il ne sera pas lisible par tous
les logiciels. Dans le vôtre pensez à passer l’image en noir et blanc
avant de lancer un scan dessus.

(c) Patrick Prémartin / developpeur-pascal.fr


Conclusion

(c) Patrick Prémartin / developpeur-pascal.fr


Conclusion

• Les solutions proposées aujourd’hui ne sont pas les seules. Vous


pourrez en trouver d’autres en cherchant sur Internet ou créer les
vôtres selon les besoins.
• Si vous avez besoin de transmettre des informations utilisez plutôt
des QR codes qui sont lisibles par tout logiciel interprétant les codes
1D / 2D et lisibles nativement dans les versions récentes d’Android et
iOS.
• Pour les solutions sécurisées n’utilisez des codes imprimés qu’en
secours de technologies hardware comme RFID / NFC et 2FA.
(c) Patrick Prémartin / developpeur-pascal.fr
Conclusion

• Ce webinaire et les sources des démos seront rapidement mis à disposition sur le
blog https://developpeur-pascal.fr

• Prochains événements en live :


=> meetup à Lille le 25 avril 2019
=> journées de conférence à Lyon (14/05), Aix en Provence (16/05), Bordeaux
(21/05) et Nantes (23/05)
Nombre de places limitées, inscrivez-vous dès maintenant depuis
https://www.barnsten.com/fr/evenements

• Prochain webinaire le 23 avril :


=> Utiliser les assistants de l’EDI pour développer en multiplateforme

(c) Patrick Prémartin / developpeur-pascal.fr


Questions / réponses

(c) Patrick Prémartin / developpeur-pascal.fr

Vous aimerez peut-être aussi