Session du 20 juillet 2023 à 20h00
Pratique & Live Coding
Développement Web & Frameworks
DevOps & Environnement
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Créer une application Streamlit de post-it
Découvrez comment construire pas à pas une application web Streamlit multi-pages pour gérer des rappels organisés par tags et fichiers JSON.
00:00:00 :Ok, ça enregistre et je partage.Ok, bon désolé pour la mise en place.Du coup, vous voyez bien mon écran s'il vous plaît ?C'est juste une personne.
00:00:16 :Nickel.Ok, merci.Ok, c'est assez gros.Bon désolé, c'est écrit à la main du coup, c'est peut-être pas hyper beau.Mais c'est juste comme ça, on a un petit support.
00:00:31 :Du coup, comme vous avez pu le voir sur le...Je vais enlever ma caméra, on n'a pas besoin.Ah, j'ai accepté les nouvelles personnes.Salut à tous pour ceux qui nous rejoignent.
00:00:47 :Je coupe ma caméra.Ok.Donc en gros, ce que je vous propose,il y en a parmi vous qui ont déjà assisté à des mentorats que j'ai déjà fait.
00:01:00 :Du coup, streamlit, j'ai déjà présenté.C'est un framework Python.Dites-moi dans le chat, ceux qui ne connaissent pas streamlit,parce que j'en vois beaucoup parmi vous dans le chat qui connaissentparce que je vous ai déjà vu dans les mentorats.
00:01:13 :Mais s'il y en a qui ne connaissent pas du tout, dites-moi, ça m'intéresse dans le chat.Ok.Nicolas, tu lèves la main pour une question ?
00:01:21 :Non, pour signaler que je ne connais pas streamlit,mais j'ai regardé tout à l'heure.J'ai vu que ça parlait de Matlolive et compagnie.Justement, on parlait de maths et de data il n'y a pas longtemps.
00:01:33 :Je pense que tu as tombé à point nommé.Ok.Super, merci.Après, je vois Pierre qui ne connaît pas.Je vais d'abord peut-être vous dire ce que c'est.
00:01:44 :Et puis, vous allez le voir en live, on va construire une application.Du coup, c'est bien qu'il y ait des gens qui ne connaissent pas.
00:01:51 :Comme ça, ça va vous faire découvrir.Pour ceux qui connaissent déjà, que j'ai déjà montré,peut-être que vous allez découvrir d'autres choses.En fait, streamlit, c'est un web frameworkqui permet de créer des applications web directement depuis un script Python.
00:02:11 :C'est très orienté data parce qu'en fait, ça permet de faire facilement.En fait, à la base, ça a vraiment été développé pour les data scientistset surtout data scientists qui faisaient des modèles de machine learning, etc.
00:02:24 :Et ça permet de déployer facilement des modèles de machine learning,de faire de la visualisation parce qu'en fait, en data,on fait vraiment beaucoup de data visualisation.
00:02:36 :Et du coup, avec streamlit, on peut faire des web applications,des dashboards, etc. avec des data qu'on a à dispo.Vous allez voir en live comment ça fonctionne.
00:02:48 :En gros, ce que je vous propose, c'est qu'on se fasse une petite applicationensemble pour illustrer ça.Donc là, j'ai mis un petit cahier des charges.
00:02:59 :Ce n'est pas... c'est juste pour qu'on ait une vision de notre application.Donc, ce qu'on fera, c'est qu'on fera une application multi-pageparce qu'en fait, vous verrez qu'on peut avoir une application avec plusieurs pages.
00:03:16 :Ça permet d'organiser son code, les différentes fonctions de l'application, etc.Après, je vous montrerai comment on peut mettre en place les différentes pageset comment on peut ajouter des logos parce qu'en fait,je vous montrerai quand on lance une application streamlit,on lance un script principal qui, après lui, va faire tourner les autres applications.
00:03:39 :Ah, ok. Re-bienvenue, Christian.Intéressante cette formation.Ensuite, je vous montrerai comment on peut envoyer de la data à l'application,notamment avec faire un upload de fichiers JSON.
00:04:03 :Notre application, on va juste faire un petit panse-bête,une espèce d'application qui permet de traquer des rappels et de les organiser.Donc, les organiser par catégorie, c'est ce qu'on fera ici.
00:04:19 :En fait, on se fera un fichier, ça va ressembler à un dictionnaire,et on mettra des tags dans chaque rappel.Du coup, après, avec streamlit, on affichera en fonction des tags qu'on veut.
00:04:33 :Donc, en gros, l'application, elle va ressembler à ça.On va avoir, je ne sais pas si vous voyez, pardon.On va avoir, du coup, là sur le côté, une sidebar.
00:04:45 :Donc là, ça ne sera pas écrit sidebar, mais c'est juste pour vous dire que c'est une sidebar.Et on va juste avoir une page home et une page post-itdans laquelle on affichera justement tous nos...
00:04:56 :J'appelle ça un post-it, mais en gros, c'est un rappel.Donc, dans la page home, en fait, il n'y aura pas grand-chose,c'est juste pour vous montrer qu'on peut faire du multi-page.
00:05:07 :Donc, on mettra juste un message de bienvenue, etc.Mais au moins, vous verrez comment ça se passe dans l'onglet sidebar, etc.Et ça, ce sera dans la page principale.
00:05:18 :Donc, en gros, ça sera une page post-it.On va avoir ici un widget, ça s'appelle,qui permettra de faire l'upload de notre fichier dans lequel on a tous nos rappels.
00:05:29 :Et ici, on affichera les différents tags qui apparaissent dans notre fichier.Donc, il suffira, par exemple, si rien n'est coché,on dira qu'on affiche tous les post-its.
00:05:41 :Et si, par exemple, on en coche un ou deux,en fait, on affichera que les tags correspondants.Par exemple, si c'est maison et voiture,on affichera que les rappels qui parlent de la maison et de la voiture.
00:05:53 :Voilà, donc ça permettra de faire un affichage un peu par catégorie des post-its.Et vous verrez que, du coup, le fait de...En fait, c'est un peu comme si on allait donner vie,on va donner de la vie à un fichier texte brut JSONdans lequel on a nos rappels, et on va lui donner vie.
00:06:13 :C'est-à-dire, on va permettre d'interagir avec ce fichier.On va pouvoir cocher les catégories.On pourrait faire des statistiques, c'est-à-dire, je ne sais pas,compter le nombre de mots.
00:06:23 :Après, on pourrait aller plus loin avec des librairies comme NLKT,qui sont des librairies qui permettent de faire de l'interprétation de langagesur des fichiers textes.
00:06:33 :Donc, par exemple, avant ChatGPT, avant l'IA, etc.,quand on devait faire des résumés de textes, etc.,c'était le genre de librairie qu'on utilisait.Peut-être un jour, je ferai un mentorat dessus.
00:06:45 :C'est assez intéressant, ça permet de, tout simplement,quand vous balancez un gros texte à ce genre de librairie,vous êtes capable de dire, ça, c'est une phrase, ça, c'est un mot,ou par exemple, ça, c'est de l'anglais, ça, c'est du français, etc.
00:07:00 :Donc, c'est assez intéressant, ce genre de librairie.Maintenant qu'on a l'intelligence artificielle et les API avec ChatGPT,ça devient un peu moins intéressant parce qu'on peut faire des chosesbeaucoup plus puissantes.
00:07:11 :Voilà, ça, ça vaut le coup de connaître que ça existeet de pouvoir les utiliser.Voilà un peu pour le pitch de l'application.Est-ce que ça vous va ?
00:07:22 :J'aime bien prendre un exemple concret quand on crée une applicationStreamlit, comme ça, on voit un peu où est-ce qu'on va.Si ça vous va, on va y aller avec ça.
00:07:32 :J'ai déjà le JSON de base, j'en ai créé un.Mais bon, on verra si au fil de la session,on arrivera à venir modifier notre JSONpour rajouter des entrées, en fait.
00:07:55 :Non, mais je vais le montrer, c'est un truc tout con,le JSON que j'ai fait, il n'y a pas de surprise.Donc, on va se créer un nouveau répertoire.
00:08:09 :Je vais créer un répertoire, parce que si on a le temps,je l'hébergerai sur Streamlit, parce qu'en fait,là, je vais tout développer en local.
00:08:15 :Mais après, nous, ce qu'on aimerait,ce qu'on aimerait, c'est pouvoir le déployeret accéder depuis Internet.Oui, tu peux utiliser Panda avec Streamlità la place de JSON, aucun souci.
00:08:27 :Et c'est fait pour ça, d'ailleurs.Il y a même un widget Streamlit DataFramequi te permet d'afficher directement des DataFrames.Donc, on va l'appeler PostIt.
00:08:41 :On va le mettre dans le GitHub.On va générer.On l'ignore.Et on va mettre une licence.On initialise.OK.Pas de Visual Code.Voilà.
00:08:55 :Je suis retourné vers mon premier amour Visual Code,parce que, je vous avoue, PyCharm,il m'a bien gonflé sur un dernier des projets que j'ai faitspour la petite histoire.
00:09:10 :J'avais fait un refactor avec...Il y a une option refactor dans PyCharmqui permet de renommer d'un coupet sans oublier de référence.Et en fait, il m'a tout renommé dans mes migrations, etc.
00:09:26 :Et c'était un bordel monstrueux à réparer.J'ai bout de PyCharm et je suis reparti sur VS Code.Bref, petit aparté terminé.Du coup, ce que je fais toujours,c'est de créer un environnement virtuel pour chaque projet.
00:09:46 :Je ne sais pas si, parmi vous, il y en a qui débutent.N'hésitez pas, si vous êtes perdus,parce qu'en fait, créer des environnements virtuels, etc.
00:09:54 :Je sais que la plupart de vous connaissent,mais si vous ne connaissez pas, vous me le dites.Si vous avez des questions, vous me le dites.
00:10:03 :Vous n'hésitez pas à m'arrêter.Donc là, je crée mon environnement virtuel.Ok, pas de soucis, Nicolas.Et puis vraiment, si tu es embêté, n'hésite pas à poser ta question.
00:10:23 :Christian, pourquoi choisir entre les deuxquand tu peux utiliser les deux en même temps ?Déjà, pour moi, on ne peut pas dire j'hésite entre Django et Streamlit,parce que c'est vraiment deux choses différentes.
00:10:41 :En fait, Streamlit voit le vraiment comme du front-end,alors que Django, c'est back-end et front-end.Donc pour moi, c'est vraiment deux choses différentes.Il ne faut pas les opposer.
00:10:56 :Par contre, ce que tu peux très bien, moi je le fais toujours,parce que je ne fais pas de front-end.Je développe mes applications back-end en Django,je fais une API REST Framework,et après, tout ce qui est front-end, je le gère avec Streamlit.
00:11:08 :Et justement, l'interface entre Streamlit et Django,je le fais grâce à l'API.Si tu connais Django, franchement, Streamlit, c'est de la rigolade.C'est hyper simple à utiliser, Streamlit.
00:11:24 :Ok, donc là, j'ai créé mon environnement virtuel.Je vais créer mon dossier d'application pour Streamlit,donc on va dire Post-it.Et déjà, je vais créer les...
00:11:41 :Qu'est-ce que je vais faire ?Je vais d'abord créer juste le main, comme ça vous allez voir.Main.py.Ok, et...Donc là, il m'active mon environnement virtuel.
00:11:56 :Et ici, je lui dis « Travaille dans mon environnement virtuel ».Donc là, mon VS Code, il travaille dans mon environnement virtuel.Et je suis content.
00:12:04 :J'essaie de zoomer un max pour vous.Et j'essaie de garder quand même un minimum de visibilité pour moi,sinon je vais faire n'importe quoi.Donc, on commence tout simplement par importer Streamlit.
00:12:19 :Je ne vais pas l'installer, bien sûr.Donc là, j'installe Streamlit.J'ai joué un peu tout à l'heure avec Streamlit,du coup là, il va juste me réinstaller.
00:12:35 :Il l'a déjà téléchargé en cache.Ok.Maintenant, si je fais « Import Streamlit as ST ».Et donc, juste pour ceux qui ne connaissent pas du tout,je vais juste vous montrer ce que ça donne.
00:12:51 :On va faire « Write ».Alors, ok.Donc là, en fait, vous voyez, j'ai juste importé la librairie Streamlitavec un alias ST,qui me permet d'utiliser toutes les fonctions, modules, etc.
00:13:14 :Et là, j'ai juste écrit « Salut l'équipe ».Et vous allez voir qu'en fait, Streamlit,comme je vous l'ai dit, ça permet de faire des web applications.
00:13:22 :Donc, si je fais « Streamlit run main ».Je ne suis pas dans le bon truc.Je vais aller dans mon dossier.« Streamlit run main ».
00:13:33 :Il va m'ouvrir un...Normalement, il se charge.Voilà.Il m'ouvre, en fait, une page web.Dans le localhost.Vous voyez qu'ici, je suis dans le localhost.
00:13:53 :Mais vous voyez, ici, il me dit...En fait, il me l'a publié, mon application sur le localhost,mais il me l'a aussi publié sur mon réseau local.
00:14:03 :Donc, ça, c'est vachement sympa.Si, par exemple, vous êtes dans un réseau d'entrepriseet que vous lancez ça sur votre machine,vous pouvez dire à Ginette, votre voisine du troisième étage,« Si tu te connectes sur le réseau local à cette adresse-là,même si l'application ne tourne pas sur son PC à elle,
00:14:19 :elle pourra y accéder tout autant. »Parce que vous voyez, ça, c'est une adresse locale,192.168.1.48.C'est typique d'une adresse locale, le 192.168.Mais voilà, c'est une adresse de broadcast.
00:14:30 :Donc, n'importe qui du réseau local peut accéder à l'application.Donc, ça, c'est déjà un point à retenir pour ceux qui ne connaissent pas.C'est vachement intéressant.
00:14:38 :Donc, là, j'ai mis comme ça,mais vous pouvez aussi utiliser le markdown pour écrire.Voilà, donc là, c'est déjà...On a un petit site web qui tourne.
00:14:50 :Il ne fait rien du tout, mais voilà.C'est assez sympa.Si vous voulez, je peux juste vous montrer comment ça peut marcher.Donc, imaginez st.textinput.
00:15:09 :Quel est votre nom ?Et puis, on va dire...Et puis, on va dire un message st.write.Je vais même lui mettre en fstring.Je vais juste lui dire Yo.
00:15:38 :Donc, là, si je le rewind, vous voyez qu'il m'a créé en fait un labeldans lequel je peux lui rentrer je m'appelle Jean.Et là, Yo Jean, comment tu vas ?
00:15:56 :Là, en fait, j'aurais peut-être dû juste dire if, non.Mais en fait, c'est seulement à partir du moment où j'ai rentré mon nomqu'il m'affiche ce que je veux.
00:16:04 :Ici, je m'appelle Michel, Michel.Yo Michel, Michel, comment tu vas mon pote ?Donc, là, vous voyez en fait, pour ceux qui ne connaissent pas,vous voyez que ça permet de faire des choses interactives assez facilementavec des widgets assez sympas.
00:16:20 :Il y a plein de widgets.On peut dire if, non.Ici, on peut même dire affiché, égal st.checkbox.Donc, là, on va dire...Est-ce qu'on peut peut-être mettre...
00:16:40 :Ouais, je vais mettre...Je réfléchis, est-ce qu'on peut mettre...Et on va mettre...Parce qu'en fait, si la machine, elle ne connaît pas si on est un homme ou une femme,on peut mettre genre et on ne va pas mettre select box,on va mettre un sélecteur.
00:16:59 :Donc, on va mettre une select box et on va dire...Vous êtes de quel genre ?Genre, je veux dire féminin ou masculin.Et ici, il faut juste rentrer la liste des choix possibles.
00:17:18 :Donc, on peut dire un homme, une femme ou autre,s'il y a des noms binaires ou quoi, pour pas de discrimination.Donc, genre et machin.
00:17:31 :Et en fait, on va dire si c'est un homme, on va dire mon pote,mais si c'est une femme, on va dire ma pote,et si c'est autre, on va dire aussi mon pote.
00:17:39 :Donc, on va dire if, genre,égal, égal, homme,on va dire, je vais l'appeler...Comment on appelle ça ? C'est une préposition ?Préposition, égal, homme,et sinon, on va dire préposition, égal, mon,et puis là, on va mettre la préposition.
00:18:16 :Donc là, on rerun.Ok, donc, Michel, Michel, vous êtes de quel genre ?Un homme ou une femme ?En fait, je suis une femme.
00:18:22 :Yo, Michel, Michel, comment tu vas, ma pote ?Et si je dis que je suis un homme, là, il met bien mon pote.Et si je suis autre, il dit, mon pote, il reste masculin.
00:18:30 :J'ai fait un choix de prendre masculin pour autre.Justement, l'intérêt de dire autre pour genre,c'est de ne pas genrer le titre,mais bon, vous avez compris le principe.
00:18:39 :Voilà, un petit peu pour...Je vais dézoomer un peu pour que vous le voyez.Je trouve que...Je ne sais pas ce que vous en pensez,pour ceux qui ne connaissent pas, c'est assez sympa.
00:18:48 :Après, on peut un peu réorganiser son code.Donc là, par exemple, j'étoile la ligne,mais on pourrait dire, en fait,je voudrais juste deux colonnes.
00:18:57 :Donc, on va définir des colonnes.On va dire col1, col2 égale st.columpt.Ouais, j'en veux deux.Ok, et donc là, le nom, on va le mettre sur with col1.
00:19:19 :Et la préposition, on va mettre dans la col2.Col2, ok.Donc là, vous voyez, c'est un petit peu réorganiser mon code.J'ai juste dit, je suis Michel Michel,et puis là, comme ça, c'est un peu plus propre.
00:19:32 :Et on peut même mettre, au lieu de mettre white,si par exemple ici,ce que je suis en train de faire,c'est pour vous montrer un peu...
00:19:43 :st.success,pour vous montrer un peu ce qu'on peut faire rapidement.Je ne fais rien d'exceptionnel là,mais vous voyez un peu la puissance du truc.
00:19:52 :C'est que, imaginez faire un beau rendu comme çaavec du CSS, si vous l'avez déjà fait.C'est vraiment galère.Donc voilà, pour quelqu'un qui n'est pas frontend,c'est vraiment du pain béni ce framework.
00:20:07 :Et ne vous privez pas de l'utiliser.Donc ça, c'était juste pour la démo.Dites-moi dans le chat si ça vous va.Est-ce que vous voulez voir d'autres widgetsoù on continue avec notre application ?
00:20:17 :Ah, bien sûr que c'est puissant.C'est très puissant.Ok.Bon, du coup, on va continuer avec notre petite application.Si ça ne vous dérange pas, je supprime tout ça.
00:20:33 :Je vais juste garder...Et donc là, jusqu'à maintenant, vous voyez,on a une page simple.Moi, ce que j'aimerais bien, c'est ici,avoir plus...Vous savez, dans les documentationsou dans les sites internet,on a toujours une petite...
00:20:51 :un panel ici, où on a plusieurs pages.Et on peut cliquer et on a accès à différentes choses.Donc, ce que je vais faire, moi,c'est qu'avec Streamlit,il y a un moyen de faire ça simplementet c'est d'avoir une page simple.
00:21:04 :Donc, si vous voulez,vous pouvez aller sur Streamlit.comAvec Streamlit,il y a un moyen de faire ça simplement.Il faut une organisation un petit peu spécifique,mais c'est...
00:21:17 :c'est dans la documentation Streamlit.Donc, il suffit de...à la racine de là où il y a votre application principale,vous savez, ici, mon application principale,c'est quand j'ai fait...
00:21:28 :Streamlit run main.Ça, main, c'est mon application principale.Ok.Donc là, ce que je vais faire,c'est que je vais créer un dossier qui s'appelle Pages,en anglais.
00:21:40 :Donc, page, c'est pareil en français.Et à l'intérieur de Pages,tout ce que vous allez créer en page,ça va être une application,une page spécifique pour l'application globale.
00:21:50 :Donc là, je vais créer une page qui s'appelle Homeet une page qui s'appelle PostX.py.Ok.Vous voyez que déjà,si je lance mon application,vous voyez, déjà, j'ai mes différentes...
00:22:14 :ici, qui sont apparues.Donc là, si je vais sur Home, PostX,pour l'instant, je n'ai rien,mais j'ai juste, en gros, le Salut l'équipeque j'ai mis ici dans mon main.
00:22:23 :Donc là, si par exemple, mon main,je le mets plutôt dans Home.Home, main, je l'ai toujours là-dedans.Je ne vais pas sauvegarder.Vous voyez, donc là,Home, main, PostX, voilà.
00:22:56 :Oui, exactement, on peut styliser.D'ailleurs, je peux vous le montrer tout de suitesi vous voulez.En plus, ce qui est bien,c'est qu'il y a un assistant pour styliser la page.
00:23:03 :En fait, ici, quand vous allez sur le burger menu,vous faites Settingset vous faites Edit Active Theme.Et donc là, imaginez qu'on veut le background en noir.
00:23:17 :Donc en noir, je vais mettre ici.Le text color, on le veut,on va mettre un petit truc comme ça, sympa.Secondary color, on va mettre un petit purple là,un petit truc comme ça, à la docstring.
00:23:39 :C'est pas terrible.Dites pas à Thibaut que je dis que c'est pas terrible,c'est juste que moi, ce que ça rend, c'est pas terrible.Ici, je vais changer, je vais mettre plus blanc.
00:23:58 :De toute façon, après, j'enlèverai, je pense.Voilà, donc là, déjà, on a un trucqui peut être un petit peu plus stylé.On va le laisser comme ça pour l'instant.
00:24:07 :Et ce que vous pouvez faire, en fait,c'est que vous dites Settings,donc dans Edit Active Theme, vous faitesCopy Theme to Clipboard.Et après, il suffit ici de,donc à l'endroit où il y a votre main,il faut se créer un dossier.
00:24:24 :Et dedans, je crois que c'est config.toml.OK, et en fait, comme ça, il va garder en mémoire,vous voyez, il me l'a déjà, il me l'a écrit.
00:24:37 :Comme ça, il va garder en mémoire le style.Et si jamais je ferme l'application et que je la relance,je vais récupérer mon style.Ouais, Gabriel ?
00:24:45 :Ouais, juste, j'ai un doute.Quand t'es en production, le burger menu,il apparaît aussi, du coup ?Ouais, par contre, t'as pas tout.T'as juste, en fait, comme t'es en mode visiteur,après, ça dépend si t'es connecté,mais en gros, tu auras juste le Recon,et tout ça, tu l'auras pas.
00:25:02 :T'auras juste About et, je sais pas, Record Screen.Enfin, t'auras pas tout.J'aime ça aussi, putain, c'est un truc de ouf, quand même.Oui, oui, oui, c'est terrible.
00:25:12 :Merci.Donc, là, je reviens.Où est-ce qu'on en était ?Ouais, donc là, vous voyez, moi, j'ai juste Home, ça,salut l'équipe, je vais mettre...
00:25:26 :Qu'est-ce qu'on va mettre ?Moi, ça, je vais le recopier aussi.Non, ça, je vais le mettre après.Je vais mettre le nom de la page, en fait, ça va être mieux.
00:25:38 :OK.Donc, là, j'ai Home, salut l'équipe.Je crois que je l'ai pas enregistré.Ah, il a pas bien pris mon config.Pourquoi il marche pas ?
00:26:04 :Attendez, j'ai Streamlit, config, toml.Merci, pourtant, ça devrait marcher.Je rerun.Ah, si, c'est bon, ça marche.Home, Post-it, OK.Donc, là, on est bien.
00:26:44 :Donc, là, vous voyez qu'il y a déjà un petit problème.C'est qu'en fait, moi, main, c'est juste pour relancer mon application.En fait, c'est pas une page.
00:26:56 :Moi, j'ai rien dans main.Donc, moi, je veux pas qu'il s'affiche.Et j'aimerais bien un peu customiser la tronche, ici, de mes trucs, là, de mes pages.
00:27:04 :Donc, ce qu'on peut faire, c'est, là-dedans, on va faire Import.From STPages, je crois.Il faut que je l'installe.Il faut que je l'installe.Donc, on va dire Import Page et From STPages, Import.
00:27:49 :Qu'est-ce qu'on a, déjà ?Je crois que c'est Show Pages, ouais.Et du coup, on va faire Show Pages Page.Donc, là, on va dire que, moi, en fait, je veux uniquement afficher les pages Home et Post-it.
00:28:13 :Parce qu'en fait, main, je veux pas l'afficher.Donc, là, je vais lui dire, je suis dans Pages.Moi, je vais afficher Home.py.Et on va afficher aussi Post-it.
00:28:28 :OK.Donc, là, en fait, vous voyez, je suis vraiment dans, c'est un peu comme, je suis juste dans la logique du code.Je suis pas en train d'afficher des choses.
00:28:41 :Je suis dans la page principale.Show Pages, OK.Ah oui, en fait, il faut lui donner un titre.Home.Et là, on est dans.Ah oui, il faut que je lui donne une liste, je pense.
00:29:09 :Et donc, là, vous voyez, en fait, dans Show Pages, vu que j'ai, je vais commenter ça.Si j'ai pas ça, c'est parce qu'il l'a gardé en cache.
00:29:39 :Si je relance, vous voyez, j'ai bien, j'ai le main, etc.Mais ça, je veux pas le voir afficher.En plus, là, c'est pas très beau.
00:29:44 :Donc, ce que je peux faire, c'est que grâce à Show Pages, je peux customiser un peu l'affichage.Donc, là, je dis, tu me l'affiches en Home.
00:29:51 :Et je peux même, il y a un troisième argument qu'on peut rajouter.On peut rajouter, en fait, des petits smileys.Donc, là, je vais mettre.
00:30:01 :Qu'est-ce que je vais mettre ?Je vais mettre une maison.Et ici, je vais mettre un post-it comme ça.OK.Et donc, là, si je relance.
00:30:11 :Donc, là, vous voyez, il m'a juste affiché Home et Post-it.Je vais zoomer un peu pour que vous voyez.Voilà, c'est sympathique.Moi, Gabriel.Oui.
00:30:21 :Ça se fait comment pour afficher les émoticônes, du coup ?C'est l'argument numéro 3.Ouais, c'est l'argument numéro 3.D'accord, tu les colles.Ouais, en fait, c'est un peu comme du Markdown.
00:30:37 :Mais je pense que t'as des codes.Tu vois ici, si je faisais...Si t'écris, genre, banana, tu vois.Oui, après, moi, je ne sais pas exactement.
00:30:48 :Moi, c'est sur Mac que j'ai une touche exprès avec les émoticônes.Je pense qu'il y en a une sur Windows aussi.Voilà.Oui, sur Windows.
00:30:57 :OK.Merci.Merci.Donc, là, vous voyez, on a déjà un rendu un peu plus sympathique.Et voilà.Donc, maintenant, ce qu'on va faire, on va aller là-dedans.
00:31:07 :Mais, en fait, là-dedans, on ne va rien mettre.On va juste dire...Bienvenue sur votre application.Le suivi de H.Donc, là, vous voyez, quand on va dans Home, voilà.
00:31:27 :Et puis, là, nous, ce qui va nous intéresser, c'est Post-it.Donc, là, en fait, ce qu'on aimerait, si je retourne sur notre petit truc,c'est qu'on ait un widget qui nous permet d'uploader un fichier,un fichier JSON dans lequel on a nos tâches et avec des tags.
00:31:44 :Donc, là, le fichier JSON, je vais vous le mettre iciparce que je l'ai créé tout à l'heure.Ça ne sert à rien que je le repasse maintenant.
00:31:53 :Moi, est-ce que j'ai foutu ça ?Il faut que je le retrouve.Où est-ce que tu te caches ?Vous avez la REF, j'espère.OK. Donc, là, j'avais créé un fichier JSON avec...
00:32:35 :Dites-moi que vous avez la REF quand même pour où est-ce que tu te caches.Ça ne vous dit rien. Viens ici que je t'ai vu, t'enculé.
00:32:52 :Philippe, où est-ce que tu te caches ?Il faudra que je vous envoie la vidéo YouTube, alors.En fait, c'est un vieux film de guerre avec vraiment des gros clichés américains.
00:33:11 :Les gars, ils sont en Marseille, tous musclés,avec leurs vieilles kalachnikovs toutes pourries,et puis qu'ils s'insultent comme ça.Je vous enverrai la vidéo, ce sera plus grand.
00:33:22 :Donc, là, j'ai créé un fichier JSON avec les différentes tâches qu'on veut garder.Ça peut être des rappels.En gros, c'est vraiment un fichier brut.
00:33:32 :Vous pouvez imaginer avoir ça sur votre PC.Vous tapez un peu à l'arrache vos trucs.Ouais, merci Nicolas.Si vous mettez dans un fichier à l'arrache vos rappels,et vous dites, j'aimerais bien avoir une vision un peu plus claire sur mes tâches.
00:33:59 :Un fichier JSON, ça se présente de la sorte,c'est un peu comme un dictionnaire,où vous avez une clé, là c'est travaux,et pour chaque clé, j'ai mis une description et un texte.
00:34:11 :Ce qu'on va faire, c'est qu'on va afficher de manière plus sexy nos tâches,et on va pouvoir les afficher ou non en fonction des tags.
00:34:23 :Pour ça, il faut d'abord qu'on propose un moyen à l'utilisateur d'uploader son fichier.On va aller là, et du coup, bien sûr, StreamEat fait ça pour nous.
00:34:35 :Donc en fait, on va dire fileUpload égale st.fileUploader,donc là c'est uploader,désolé pour le franglais, mais uploader votre fichier JSON.Donc là déjà, vous allez voir, il me fait apparaître un drag and drop,qui va prendre, vous voyez, il me fait browse file, etc.
00:35:05 :Donc en fait, il me met à disposition un truc automatique, justement,où moi j'ai rien codé, et après on va aller récupérer ce truc là.
00:35:13 :Donc on va importer JSON, import JSON,et on va dire, il ne faut jamais oublier dans StreamEat,le fileUploader, tu peux le personnaliser un petit peu,toi tu veux dire esthétiquement, ou plutôt en termes de features du fileUploader ?
00:35:33 :Tu peux lui dire par exemple, je veux autoriser mon utilisateur à uploaderplusieurs fichiers en même temps.Ben oui, ça tu peux le personnaliser, regarde, c'est ce que j'ai fait ici d'ailleurs,uploader votre fichier JSON, c'est ce qu'on retrouve ici là,uploader votre fichier JSON.
00:35:56 :Ah tu veux dire ça, le drag and drop file here,ça sûrement, sûrement que tu peux le changer dans le CSS,j'avoue que je ne me suis jamais embêté à le faire,mais je pense que oui, il n'y a pas de soucis.
00:36:10 :Donc on est là, n'oubliez pas à chaque fois, parce que là en fait,je fais fileUpload, et si je commence à manipuler le fichier,en fait là l'application elle a le droit de vivre,même si je ne vais pas uploader un fichier, elle a le droit de vivre.
00:36:23 :Donc en fait si par exemple je faisdata égale JSON point load file upload,ben il va m'envoyer une erreur, parce qu'en fait,le file upload, la première fois que l'utilisateur il l'ouvre,la première fois que l'utilisateur il l'ouvre, il n'a pas changé de fichier,donc forcément il me dit une erreur, parce que ça n'existe pas.
00:36:53 :Vous voyez ce que je veux dire.Donc c'est pour ça qu'il faut toujours mettre if file upload,et donc là après on va aller chercher notre fichier JSON,donc on va faire un withOpen,non je n'ai même pas besoin je pense de faire ça,on va dire data égale
00:37:15 :JSON point load file upload,on va essayer ça, et je vais faire,je vais essayer de faire,ok donc là je vais chercher mon fichier,je vais aller chercher là dedans,ok, voilà donc là vous voyez il m'a chargé,il m'a bien chargé mon JSON,bon pour l'instant il n'y a rien de spectaculaire,
00:37:46 :parce que c'est vraiment la même tronche que ce que je lui ai dit,c'est un fichier JSON.Mais bon vous voyez déjà que c'est pas mal,Streamlit il a des méthodes,donc là c'est une méthode spécifique JSONqui permet d'afficher du JSON,vous voyez c'est quand même pas mal,
00:38:01 :parce que là je peux juste tout réduire,et je crois même que je peux mettre,il y a une option qui lui dit de tout collapse je pense,est-ce que je peux faire ça,vous savez de tout collapser de base,peut-être pas, enfin bref.
00:38:22 :Donc déjà on a déjà une vision un petit peu plus clairede notre petit fichier, on est content.Alors moi maintenant ce que j'aimerais bien fairec'est récupérer tous les tags de mes fichiers,donc un tag c'est genre,vous voyez que dans un fichier JSON on peut rentrer des listes,
00:38:41 :donc là c'est rappel maison, rappel piton, rappel voiture, rappel voiture,j'aimerais bien avoir une vision rapide de tous mes tags enregistrés,donc ce que je vais faire c'est que je vais créer une fonction ici,def get tags,et donc là on va récupérer les tags depuis un dictionnaire,pour l'instant je mets retour non,
00:39:01 :je fais toujours ça quand j'écris une fonction,et donc là en fait on va dire,donc mes tags c'est une liste vide,et je vais ajouter, tant que le tag il n'existe pas,je vais l'ajouter,donc on va dire for item in data,donc là on va se retrouver dans,
00:39:18 :on va se retrouver,attendez je réfléchis,en fait un item ça va être ça,donc là par exemple c'est un item,vous voyez,ce dictionnaire là c'est un item,donc dans les items on va aller chercher tags,donc ok, for item in data,for tag in,ce que je pourrais faire,
00:39:49 :je vais mettre comme ça directement,ça va être une clé,je n'ai même pas besoin,en fait je n'ai même pas besoin d'aller chercher la clé,je vais juste aller chercher la valeur,tag in d,est-ce que c'est bien ça,attendez je réfléchis,normalement ouais,if tag not in tags,
00:40:45 :on va l'ajouter,là on va retourner tags,et on va essayer,donc ça j'ai plus besoin de l'afficher,et là on va essayer d'afficher déjà,pour voir si ça marche,on va aller sortir d'abord,et on va les afficher,déjà on va voir ce que ça donne,donc là on a uniquement la liste de nos tags,
00:41:26 :et vous voyez qu'on les a une seule fois,parce qu'ici si je retourne sur mon poste,vous voyez que par exemple le rappel,je l'ai dans toutes mes tâches,et vous voyez qu'il me l'a bien ajouté une seule fois,et pourquoi il me l'a ajouté une seule fois,parce qu'en fait ici j'ai parcouru mon dictionnaire,
00:41:47 :et je l'ai ajouté dans ma liste tags seulement s'il n'existe pas,donc la première fois qu'il rencontre il va l'ajouter,par contre une fois qu'il a vu qu'il l'a déjà ajouté une fois,vous me dites dans le chat si c'est bon pour tout le monde,ou si vous voulez que je repasse plus en détail là-dessus,
00:42:02 :c'est quelque chose d'important en programmation Python,de savoir parcourir les dictionnaires comme ça et les listes,donc dites-moi si c'est bon, si je peux continuer,ou si vous voulez un petit peu plus de détails là-dessus.
00:42:14 :Je continue, et puis si jamais quelqu'un veut que je m'arrête,n'hésitez pas.Donc là, qu'est-ce qu'on a ? On a les tags.Moi ce que j'aimerais bien maintenant,c'est qu'on va afficher les tags,au lieu que là c'est une liste, elle ne me sert à rien, je ne peux rien faire,
00:42:39 :je voudrais des checkbox qui me permettent de dire,si c'est coché j'affiche, si c'est pas coché j'affiche pas.Donc, qu'est-ce qu'on va faire ?Donc là on a nos tags, on est content,pour chaque tag on va afficher une checkbox.
00:42:54 :En fait une checkbox ça marche comme ça,c'est un bout et un, ça va être du true ou false.Donc oui ou non, un ou zéro,vous avez compris le truc.
00:43:06 :Juste pour vous montrer comment ça marche,si par exemple je faisaistesttag égale st.checkboxtestet je vais faire unst.white testtag. Donc là vous allez voir,
00:43:30 :j'ai ma checkboxqui s'appelle test.Je vais mettre testcheckbox.Donc là vous voyez j'ai fait st.white test tag.Si c'est faux, il est à false, c'est pour ça qu'il m'affiche false.
00:43:48 :Dès que je vais le cocher, hop il se met à true.Donc là on peut jouer comme ça comme on veut,et ce qui est pas mal c'est que vous voyez Streamlit il met à jour à chaque fois,dès qu'il voit un événement, il met à jour tout seul.
00:44:00 :J'ai pas besoin de lui dire gère les événements de clic etc.Voilà, donc là on a fait le test.Moi ce que je vais faire, je vais plutôt le mettre dans un dictionnaireet tags, comme ça je vais pouvoir associer.
00:44:12 :Donc moi je vais diretagsdu coupest-ce que c'est checké ou pasfortagscheckedinattendez est-ce que je suis en train de faire une bêtiseouais en fait il faut plutôt queça, en fait je vais faire un dictionnaireun dictionnairequi va associer la valeur du checkbox
00:44:51 :donc je vais diretag, donc la clé de mon dictionnaireça va être le tag, je vais lui direst.checkboxtagfor tag intags, mais du coup j'ai perdu mesj'ai perdu mes tagstagstagsokce que vous pouvez faire ici aussi, c'est un trucsympa, c'est
00:45:31 :st.cachevous rajoutez juste un petit décorateur à votre fonctionça parait tout con, mais en fait, ça veut dire que vous voyez à chaque foisqu'il vavoir un évènement dans mon applicationje vous ai déja dévoilé le truc, à chaque fois qu'il va voir un événement dansl'application, il va tout recharger
00:45:53 :par exemple ici vous voyez j'ai tags, il fait appel à la fonctionet moi je veux pas en fait que, si jamaisj'ai déjà eu une fois mes tags, j'aimerai qu'ils le stockentdans le cache du navigateur, comme ça en faitsi il voit qu'il n'y a pas eu de changement sur tags
00:46:08 :il va pas rappeler la fonction, si j'ai mis unst cache data, il va pas rappeler la fonction, il va juste garderla liste qu'il avait stockée en cache, donc ça c'est très intéressantpour l'optimisation de vos applications quand vous faites de ladata etc, si vous chargez par exemple un gros
00:46:23 :csv avecje sais pas combien de gigas de data, en l'occurrence vous êtes bloquéà 200mo, mais si par exemple déjà un fichier de 200mo c'est pas malet bien si vous le mettez en cachedata, ça va être beaucoup plus rapide dès que vous ferez une mise à jour
00:46:38 :ou vous appuierez sur un boutonok donc là vous voyez ce que j'ai fait, c'est que j'ai associéune checkbox à chacun de mes tagscomme cecidonc là vous voyez, il me demandede le recharger mais j'aurais pu le refaire aprèsen fait je pourrais même mettrel'upload de mon fichier dans une fonction pour faire un cache data aussi
00:47:07 :donc là vous voyez icirappel maison, je peux checkeret si vous voulez je peux afficherle dictionnaire, on va direst.jsontags checkedet donc là vous voyez il fait un rerundonc là vous voyez il va mettre à jour mon dictionnaire à chaque foisrappel, vous voyez c'est assez dynamique
00:47:34 :oui oui ça aide à la vitesse d'exécutionpas la première fois forcément parce qu'il faut que tu chargesmais après ouisi tu modifies entre tempsdu coup si tu modifies lefichier entre temps ça ne modifie pasforcément si tu upload ton fichier csvtu fais tes manips streamlits
00:48:01 :et puis après si en local tu modifies ton fichier csvforcément si tu ne le reupload pasça ne va pas le prendre en comptepar contre si tu reupload un nouveau fichieril va effacer ce qu'il y avait enregistré dans le cacheet il gère automatiquementle changement, s'il voit que tu as apporté des modifications
00:48:22 :ou quoi que ce soit, il va le reuploaderça il n'y a pas de soucisok donc là on a notre petitsi tu modifies le fichier avec streamlitsdonc là tu fais un file uploaddonc là tu upload ton fichier input raw datatu fais tes modifs, en fait tu ne peux pas modifier directement le fichier
00:48:47 :c'est pas possiblesi tu veux télécharger les mises à jour de ton fichiertu peux maistu vas devoir télécharger un nouveau fichiertu pourras réécraser celui que tu avais déjà sur ton localavec le même nom il n'y a pas de soucismais c'est impossibleparce que l'application fonctionne sur le cloud de streamlits
00:49:11 :si tu modifies le jsonil faut forcément que tu le recharges aprèsil ne va pas venir modifier sur ton ordinateur le fichier jsonsi tu redownload pas quelque choseest-ce que c'est clair pour toi ?
00:49:30 :ok alors maintenantok donc là maintenant on va direje vais modifier uniquement les trucs que j'ai cochéd'ailleurs on va tous les mettre enje pense qu'on peut mettre par défaut en trueon peut mettre une valeur par défautouais je peux mettrevalue égal true par défaut
00:50:01 :vous voyez ils sont tous à true par défautok donc là on est contentet du coup ce qu'on va faire c'est queje vais mettre pouritem in dataje vais même mettre pourivalindatapointitemset queattendez je réfléchis à ce qu'on peut faire
00:50:46 :on va aller parcourirpour tag invaltagsif tag inen fait ce que je veux fairec'est que maintenant on va aller parcourirtous nos élémentson va parcourir les tagset si les tags ils sont dans les tagscheckés et ben on va l'afficher ou sinon on va pas l'afficher
00:51:24 :donc là déjà attendez je vais vérifieroù est-ce qu'on en estpoint whitedéjà si je fais çaok donc là on a descriptiontag inok ça marcheet donc là on va direif tagscheckedtaget ben on va afficheron va juste afficher la description
00:52:28 :c'était quoi que j'avais misok donc ça a l'air de fonctionnerdonc là je vais affichertous ceux qui sont en mode rappelceux qui sont juste qui concernent la maisonceux qui concernent la maison et pitonsceux qui concernent la maison et la voitureet tous ceux qui sont des rappels
00:53:06 :donc là par contre il me metouais faudrait que je gère le fait queil peut se retrouver plusieurs foismais voilà c'était plus pour vous montrer le principeet ce qu'on peut même faire on peut faire un truc sympaon peut faireon va faire un expanderwith st.expander
00:53:31 :on va lui donner en titrela valeurça serait un peu la référenceet on va lui mettredonc là si j'ai coché rappelils y sont touspar contre si je coche que maisonil va m'afficher travauxet donc là ne pas oublier de rappeler le couvreur pour les travaux
00:53:59 :si je coche pitons il va me dire id articlespubliez un article sur docstring sur les listesvoilà donc la voiture et pitonsaprès on pourrait gérer l'affichage en quinconceon pourrait dire en colonne 1 colonne 2 etcvoilà on peut faire plein de choses mais là déjà on a une application
00:54:17 :qui est plutôt sympa on a juste uploadé un fichier un peu brutalon peut cocherles tagsc'est un peu comme les labelset on a un affichage un peu dynamiqueassez sympasur le site docstring il y a un exercicequi permet de faire une to do list comme ça
00:54:41 :justement il y a du css et toutvoilà là vous voyezen 30 minutes on a géré une applicationqui est assez fancy comme on ditsans toucher au cssj'ai juste ici changé le settingstout ça là ce serait du javascriptpour mettre à jour pour voir un truc dynamique
00:55:05 :pour avoir un expandable etcalors que ici moi j'ai rien faitoui christian c'est tout à fait possiblemais justement là on ne l'a pas faitmais on pourrait juste se diretu vois là on afficheun bouton qui dit modifieron modifie le jsonon dit ne pas oublier de rappeler le couvreur pour les travaux
00:55:38 :et de signer le devisce qu'on pourrait faire c'est que icià chaque fois le datace serait le data qu'on viendrait mettre à jouravec la nouvelle modificationet à la fin quand on a terminé on ditle data était en cache à partir du fichier d'inputle data tu le modifies et une fois qu'il est modifié
00:56:02 :tu le dumps dans un fichier jsonà la fin tu peux fairedata.json.dumpet puis là tu aurais tontu aurais ton dataque tu venais juste defiledownloadtu mets la mise à jouret puis après tu peux même proposerun widgetqui permet de faire un download
00:56:41 :download boutontéléchargervotre fichiermis à jourc'est quoi le problème ?ah ouic'est pas si simplevoilàon faitdata égale datafilenamelà dessus il ditupdatedj'en sais rien moiupdated pathen jsonje pense que si tu fais un truc comme çapourquoi il faut pas
00:57:57 :en bref en fait tu peux faire un downloadcomme ça je vais juste chercherdans 3 minutesil manque le password mais en faitattends je regarde justesi on fait un truc comme çadownload as jsondatadataouais il aime pas en fait il faut le mettre
00:59:05 :en fichier de texteouais en faitil faudrait le transformer en fichier de textepeut-être si je le faisais là directementlocalon va essayerdownload égale json.dump
00:59:31 :donc là je lui dismon objet et je lui mets le filenameet après eux ils font quoiouaisen gros c'est possibleon va ajouter un download assez simplementtiens on va juste dire si on mettait les tagset en fait tu vois il va me téléchargerpourquoi il me l'affiche comme ça
01:00:43 :tu vois tu peux facilement mettre à jourbon là il faudrait que je passe juste un petit peu de tempsmais tu vois ce que je veux direjsonvoilà affiché dans le finderil me l'a appelé commentje l'ai appelé output jsonet donc là tu vois il m'a juste mis les tags
01:01:13 :que je voulaisdonc tu pourrais très très bientu peux faire un download de fichier csvde fichier excel ou quoi que ce soitjuste avec un boutondonc tu pourrais imaginer modifier tes trucs directementdans ton applicationet puis tu peux re-télécharger et écraser ton fichiercomme tu veux
01:01:40 :c'est pas un truc que vous feriezenfin je sais pas si c'est un truc qu'on feraitparce que ça veut dire queon pourrait se dire que c'est une espèce de petite base de donnéesaprès typiquement vous voyez le fichier json par exemplepour moi ça devrait être stocké dans une base de données
01:01:58 :qui est en lignevous auriez vos entrées etc vos to-doet avec une API vous feriezvous extrayez toutes vos tâches etc de la base de donnéeset puis vous les affichezet vous interagissez avec depuis Streamlitqui est beaucoup plus sympa que manipuler un fichier jsonvoilàbon ça c'est vraiment
01:02:31 :même pas un dixièmede ce qu'on peut faire avec Streamlitet vous voyez assez rapidementassez rapidement on peut faire des chosesdes belles chosesvas-y Gabriel je t'en prieouais c'est une question que j'avaisavec Streamlit et Pandaparce que du coup Panda c'est inclus dedans je crois dans Streamlit
01:03:01 :si je vais voirj'ai fait un pipiste et en pipiste quand tu regardes normalementil y a Pandaparce qu'en faitt'as même des choses qui existenttu peux mêmeon peut peut-être essayer de se marrer un peuon peut définir un DataFrameimport Panda.aspd
01:03:28 :et on va dire en fait que notre DataFrameon va le créer directementdepuis lenotrenotre Dataet il y a même un widget st.DataFrame
01:03:47 :qui permet d'afficher les DataFramesen fait ce qui est pas mal c'est que tu peux te servirde la puissance de Panda pourmanipuler tes trucson aurait pu imaginer que les filtres etc on les efface directementgrâce à Pandatu vois là il me l'a affiché sous forme de tableau
01:04:08 :sous forme de DataFrametu vois j'ai juste faitje transformais mon dictionnaire en DataFrame et je l'ai affiché avec Pandaet donc là tu vois j'ai un joli tableau avectout ce qu'il faut et tu peux même l'ouvrir en plein écran dans une fenêtresecondairebon là il me l'a mis comme ça moi j'aurais plutôt préféré
01:04:29 :qu'il me le mette en transposépour transposer en fait tu vois je l'aurais retournéet tu vois il me met mêmeil me dit description donc là j'ai chaque item la description et mêmeles tags il a compris que c'était desque c'était des étiquettesah ouaisok je te remercie
01:04:54 :pour le boulot ça ça pourrait m'aider beaucoup quand mêmeil faudrait vraiment que je lui mette son jouret puis làlà c'est en local mais je vous montrerai la prochaine foisbon il y en a qui l'ont déjà vu mais on peut facilement le mettre en lignevia
01:05:22 :avec github gratuitement sur le cloud destreamlitdonc restez connecté je vous montrerai ça la prochaine foisouais tu peux le vireril suffit dechanger je ne sais plus je l'avais déjà fait une foismaisfranchement j'ai pris l'habitude de le laisser parce queje trouve que la librairie elle est open source
01:06:01 :la communauté est terribledans le sens où voilà ils sontsuper disponibles etc du coupc'était avec plaisir que je fais de la pubsur toutes les applications que je déploiemais tu peux virer ouaistu peux virer ça et le hamburger pareil je pense que tu peuxvraiment tout customiser
01:06:25 :tu peux rajouterlà dedans tu peux mettre ton nom tu peux mettre ce que tu veuxil faut juste mettre un jour un peule cssje ne sais plus comment j'avais fait ça mais tu avais un custom cssavec un footervoilà est-ce que vous avez des questions là dessus
01:06:53 :Nicolas t'as dit que t'avais une question que tu gardais pour la finest-ce que tu as toujours ta questionpardon le micro a été coupéje suis impressionné parce que ce qu'on peut faire avec streamlitec'est rapide en faitoui c'est hyper rapidec'est simple et puis voilà c'est sans fioritures
01:07:18 :c'est pour ça aussi dites vous que c'est pasc'est pas fait pour faireun site vitrine avec des belles animationsun beau trucc'est pour faire de l'efficace et pour présenterprofessionnellement de la data etc à la base c'est fait pour çaok ça marche mercin'hésitez pas sur la communauté
01:07:54 :publique accessible à tout le mondec'est toujours bien de direon a découvert un trucou on a fait un mentoratil est pour faire ce genre de promotionmoi j'ai découvertla communauté discordtout à l'heure ce que j'ai postéj'ai posté le programme du mentorat de ce soir
01:08:22 :sur la communauté qui est publiquec'est à direceux qui sont pas de la communauté docstringqui ont accèsj'ai un peu trompé de canalChristian met une questionsur docstringpour que Thibault règle le problèmetu peux toujours poster des questionssi vous avez pas d'autres questions je propose qu'on s'arrête là
01:09:03 :ah tu peux pas écrirepas sur discordpose une question sur le canalclassiquesur ce truc làah une question de Gabrielpose une question là dessus et on réglera le problèmeen fait moi j'ai pas de problème avec çamais j'ai vu des gens faire différemmentdonc je voulais savoir quelle est la meilleure manière
01:09:44 :et tu vois l'URLj'ai vu un mec le faire avec un reverse lazyet ça lui a fait la merde avec un module externealors que moi quand je mets juste mon name du URLj'ai pas de problèmec'est plutôt cette solution là que j'utiliseouais c'est celle que je mets
01:10:06 :c'est celle que j'utilise tout le tempsdu coup c'est quoi ta question ?ouais pour moi c'est le name URLle meilleur parce qu'en plus tu vois si tu changes ton applicationc'est çapour moi ouinon mais t'embête pasje vais la laisser un peu pour voir ce qu'on pense
01:10:39 :pour moi y'a pas de...pour toi c'est bien du coup ce que je fais le name directementle nom du URLouais Nicolas t'as une question ?
01:10:54 :ouais alors c'est pas vraiment une questionc'est vraiment une demande et une démarche personnelleen fait moi je suis un bébé développeurcomme beaucoup je comprends le codej'arrive à le décrypteret voilà j'arrive à comprendre ce qu'on fait à force de lire des lignes de coded'utiliser le chat GPT pour comprendre si ça finit par rentrer
01:11:15 :j'aurais voulu savoir si il était possible de faire un mentoratpour les purs débutantsvraiment c'est à dire sur les bases du Pythonc'est possiblej'en suis aux créationspas les définitionsles fonctionsc'est à dire comme partoutc'est une base, tu regardes des vidéos, tu fais des exercices
01:11:42 :et après je pense qu'il y a une autre particularitéc'est comprendre son code, comment l'articulerles choses qu'on ne dit pas dans les vidéosje comprendsbah oui oui pas de soucisje peux faire çaen fait je pense quela semaine prochaine je préviendraiaprès tout le monde est toujours bienvenu
01:12:09 :mais j'aime bien prévenir avantcomme ça les gens ils saventsi jamais il y a des gens qui sont là depuis longtemps et qui ne sont pas intéressésaprès c'est toujours bien de revoir les basesmais il n'y a pas de soucis on peut faire çaje posterai quelques jours avant la prochaine fois
01:12:27 :je dirai qu'on va faire vraiment des baseset je demanderai ce que vous voulez voir comme basestu m'as parlé de fonctions mais si tu veux voir les listes, les dictionnaires etcça peut être intéressant de poser ces questionsparce que bonles quiz c'est super sympade stagner pour ne pas savoir par où partir
01:12:48 :ou comment c'estj'ai fait pas mal de MATLAB dans ma carrièreMATLAB c'est un peu comme Pythonc'est une interprété, c'est action réactionmais c'est pareiltu tombes un peu dans le piège de MATLABtu fais du ligne par ligneMATLAB c'est ça, c'est du ligne par lignemoi je fais pas mal de script
01:13:15 :surtout dans mon milieu c'est le traitement numérique du signalc'était vraiment pour la démodulation de fréquenceMATLAB il y a déjà des fonctions prédéfiniesc'est déjà assez simplec'est plus de l'application de fonctions prédéfiniesje sais que c'est possible de le faire avec Pythonmoi je travaille avec des scripts Python
01:13:36 :que j'essaie de comprendrec'est des scripts de fouc'est fait par des vrais proset c'est assez complexecomment est articulé un codeje suis pas du tout dans le développement webje vais pas dire que c'est pas ma tasse de théj'en parlais avec Gabriel il y a pas longtemps
01:14:00 :c'est pas mon trip le développement webje suis plus dans le scriptje sais pas comment on appelle çala programmation d'applicationlogicielvous appelez le back-endça reste un langage propreà la programmation webtout ce qui va être gestion de la base de donnéesça va être du back-end
01:14:30 :mais ça reste dans le domaine développementc'est vraiment scriptingje suis pareil que toije viens pas du milieu du développementça fait 10 ans que je fais du Pythonje suis ingénieur hydrodynamiquej'ai découvert Python en faisant des scriptsc'est le cas des ingénieurs aérossystème embarquéje suis hyper ingénieur
01:15:00 :en gros c'est çac'est du scriptingaller tester un matosle programmer et lancer un scriptça marcheje peux réfléchir à des exemplesde manipulation de fichierde fonctionquand j'ai besoin de faire des chosesje parle d'une page blancheje développe un peu comme un bourrinje fais ce qu'il faut que je fasse
01:15:36 :et petit à petit je transforme mon codepour le faire devenir paramétriquesouvent quand tu commences un codeça marche pour l'application que tu veux fairetu me parlais de démodulation de signaltu as un signalc'est à base de çaça va fonctionner juste pour le signalque je fais
01:16:03 :ce qu'il faut faire de plus en plusc'est rendre ton code plus généralsi un jour tu as un autre collèguequi dit j'ai un signal mais il est comme çaça serait bien que ta fonction marchemême si c'est un peu différentdepuis mon script où j'ai été ligne par ligne
01:16:25 :comme un bourrin j'ai juste pris le chemin de mon fichiertu vas transformer ça en fonctionc'est une fonction qui va prendre en paramètrele chemin du fichiercomme ça ton collègue pourra utiliserun autre chemin de fichierc'est un peu comme ça que je faison peut essayer de faire un mentorat
01:16:49 :c'est avec plaisirtu me parles de transformer de Fouriertu dois pas mal utiliser la librairie NumPyNumPy, Python, même SciPyc'est toutes ces librairiesla plupart des choses que j'utilisesoit LabVIEW soit MATLAB sont sur NumPyj'aimerais bien connaîtreen plus en profondeur cette composante de Pythonla data
Aucune occurrence trouvée pour « ».
00:02:02
Petite introduction sur Streamlit
00:03:54
Présentation de l'application à développer
00:08:05
Création du projet
00:09:43
Création de l'environnement virtuel
00:10:24
Question de Christian par rapport à Django VS Streamlit
00:11:45
Création de l'application de base
00:22:53
Changer le thème et le style
01:09:39
Question de Gabriel sur LOGIN_URL avec Django