Johannes Schickling - Prisma, Effect and the rise of Local First Development
Durée: 82m9s
Date de sortie: 21/04/2024
This week we have Johannes Schickling, the founder and former CEO of Prisma. We talk about what he's been up to in the last few years and what he envisions for the future of software development. He is a contributor to the Effect library which is a new way to write asynchronous code in TypeScript. We also talk about the rise of local first development, how it's changing the way we build software, and how he's using it to build his new app Overtone.
- https://twitter.com/schickling?lang=en
- http://effect.website
- https://overtone.pro/
- https://www.localfirst.fm/
- https://www.prisma.io/
- https://riffle.systems/
Episode sponsored By CodeCrafters (https://codecrafters.io/devtoolsfm) 40% Discount!
Become a paid subscriber our patreon, spotify, or apple podcasts for the full episode.
- https://www.patreon.com/devtoolsfm
- https://podcasters.spotify.com/pod/show/devtoolsfm/subscribe
- https://podcasts.apple.com/us/podcast/devtools-fm/id1566647758
- https://www.youtube.com/@devtoolsfm/membership
Tooltips
Andrew
- https://github.com/rossjrw/pr-preview-action
- https://typedoc.org/
- https://github.com/PetoiCamp/OpenCat
Justin
Johannes
- Nix - https://nixos.org
- Attest - https://github.com/arktypeio/arktype/tree/2.0/ark/attest#cli + https://ui.perfetto.dev/
Je pense qu'on a dit que ça dépend de peu de la dernière décennie où on utilise le
traditionnel web server-side hammer pour tout.
Et c'est là où certains app Web Apps se sentent le plus.
Je ne pense pas que nous devons réagir et que nous construisons tout avec Local First.
Je pense que nous devons, dans les cas où ça se passe, construire des apps avec Local First.
Je pense que pour beaucoup d'apps, ça peut faire du sens.
Bonjour, bienvenue à l'appli de DevTools FM.
C'est un podcast sur les tools de développement et les gens vont faire ça.
Je suis Andrew et je suis le host de MyCo.
Bonjour tout le monde, nous sommes vraiment excitées à avoir Yoannis Schickling.
Yoannis, vous avez aussi un podcast, qui est le localfirst.fm,
un grand fan de ça et excité à voir ça se produire.
Vous avez aussi travaillé sur beaucoup de choses intéressantes.
Vous avez aidé à trouver Prisma plusieurs ans,
vous avez travaillé sur un app local first, qui s'appelle Overton.
J'aime entendre plus de ça.
Et puis vous faites des works d'ex-work sur l'effet.
J'aime entendre tout ça.
Mais avant de nous dévier,
pouvez-vous nous dire à nos listeners un peu plus sur vous-même ?
Oui, merci beaucoup pour avoir me sur le podcast.
J'ai été un grand fan de ce podcast pour beaucoup d'un moment.
Et aussi, les deux de vous ont aidé à commencer le podcast de local first.fm.
Merci beaucoup.
Oui, j'ai été super excité à être ici.
Je pense que dans les derniers années,
j'ai essayé de trouver une façon de me retrouver de la route,
qui est de construire des applications.
J'ai trouvé moi-même toujours dans ce cycle de construction d'apps,
puis de être frustrés par des aspects de construire ces apps,
puis de construire des outils de la mort pour faire mon propre vie et d'autres autres vies.
Et donc, j'ai été passée par ce grand cycle avec Prisma
quelques années plus tard,
où j'étais juste frustré en travaillant avec des bases de données
quand il s'agit de construire des app.
Il y a beaucoup de choses qui ont été beaucoup plus bonnes
avec React, Docker et tout les bonnes choses
qui sont arrivées à nous en ce moment,
mais travailler avec des bases de données
était encore assez amusant, dans mon avis.
Et particulièrement, maintenant que nous avons des typescripts,
les typescripts n'étaient pas vraiment aussi populaires que ceci aujourd'hui.
Mais j'ai emprunté en plus tard et j'ai réalisé
que, à partir du base de données,
nous avons toujours des trucs à l'heure, mais c'est toujours de l'aise.
Je vais essayer de faire mon propre vie plus facile,
et ça va pour Prisma.
Et en 2020, j'ai eu une bonne opportunité
de prendre un sabbatical
et de utiliser ce temps pour aussi avoir mon propre vie,
pour commencer à travailler sur des nouvelles ideas app
et j'ai décidé de continuer à travailler dans cette chapter.
Et maintenant, je suis en train de vivre
ma vie en train de travailler en armes pour avoir un peu de temps
Quand tu travailles sur Prisma,
que ça commence comme un outil d'open source
pour résoudre un point de vue qui n'a pas de travail,
et puis que ça a évolué dans une compagnie,
ou que tu es allé dans une compagnie,
je vais construire une compagnie sur ce problème.
Qu'est-ce que tu penses quand tu le first approach ?
Oui, c'est une bonne question.
Je encourage plus de premiers fonds
de penser plus critiquement
à séparer la technologie
et le problème que tu tries à résoudre,
et que tu es le meilleur moyen de faire ça
comme une compagnie ou pas.
Donc, en fin 2015, en plus de 2016,
j'ai acheté ma première compagnie,
qui était une app VR,
on a essayé de construire un Instagram pour VR,
envers la première fois,
quand la VR était très très plus tardée,
c'était quand tu avais des cartes Google, etc.
Je me suis encore annoncé
de ce que j'ai pris le temps
pour construire les parts non essentielles
pour l'app, comme les bacca, etc.
J'ai essayé de construire les parties de la base, les parties, etc.
J'ai aimé la vitesse,
mais c'était juste si limité
que je pensais que c'était un meilleur moyen
de construire les apps plus rapidement.
GraphQL m'a juste réveillé,
et Serverless m'a juste réveillé,
et j'ai essayé de combiner ces pièces,
et ça a fait un truc
qui s'est appelé GraphQL,
un peu comme un pun sur GraphQL.
C'est ce que nous avons passé
pour les premières années,
mais nous avons aussi réalisé
que les gens aient aimé construire les MvPs,
mais pas vraiment de construire les appes de production,
et ça a, en temps,
appuyé à Prisma,
où nous avons focussé un peu plus sur le tout,
sur le tout, les app et les bacca,
pour les développeurs de l'app.
Je pense que c'était le bon call,
même si les gens ont vraiment aimé GraphQL,
et nous avons mis beaucoup de l'amour dans le jeu,
mais c'était le bon truc pour nous,
pour être plus focussé.
Et oui, l'ensemble a été
créé et aussi d'un projet initial
qui a été construit,
pour avoir évoqué des MvPs pour ça,
et je suis toujours sur le bord de Prisma,
mais les gens là
sont encore en train de faire le travail de jour au jour,
mais je suis très heureux.
Avant de parler d'affaires,
une question qui est vraiment intéressante pour moi,
c'est quand tu as décidé
de prendre un subatical ?
Qu'est-ce qui était le point pour toi ?
Je suis allé dans une phase de burnout
durant la pandémie et j'ai quitté mon travail
et j'ai quitté au centre de récours,
et c'était mon subatical.
Mais c'était votre histoire.
Oui, bien sûr.
Je suis le fondateur et le CEO
de la compagnie pour plus de 5 ans.
Et si tu as trouvé votre propre start-up,
et particulièrement quand tu as créé le MvC,
c'est juste non-stop.
Ce serait bien.
Je ne veux pas avoir des heures de travail,
mais c'était beaucoup.
Et ça n'a pas eu le temps pour tout autre.
Et à un moment,
pendant la nuit de la maison,
je me suis pensé que
mon vie avait beaucoup plus de facettes
dans le passé.
J'étais DJ, j'étais en skate,
j'étais en tout genre de choses.
Et à ce point,
mon vie était vraiment juste réduite
pour juste Prisma,
qui me fulfillaient beaucoup.
Mais j'ai aussi mis les autres pièces.
Et je voulais aussi
avoir un peu plus de balance
pour les autres parties de ma vie.
Et ça, c'était toujours là dans le background,
mais il n'y avait pas d'opportunité
de faire ça.
Et puis, en 2020,
nous avons juste acheté
des vols de leadership plus seniors.
Et c'était la première fois
que je pouvais vraiment
prendre un tour de la main
sans tout se faire couper.
Et je pouvais prendre cette opportunité.
Et je suis très content pour ça.
C'est cool.
Cool.
Donc,
avec ce qu'il y a derrière nous,
le reste de l'épisode
nous parlerons des choses
que tu as construite
depuis que tu es dans la position de leadership.
La première chose
est cet effet de l'affaire.
Donc, j'ai essayé de regarder
les docs.
C'est assez compliqué.
C'est un style différent
de l'application que je suis
en train de faire, à la fois.
Donc, pour nous,
dans notre audience,
quels effets sont
et pourquoi je peux utiliser ça?
Oui, totalement.
Peut-être que la meilleure motivation
pour moi
est pourquoi je
even
était en train de
faire quelque chose
d'affaire,
et que je n'ai pas
d'autant qu'il y a.
Donc,
pendant le Prisma,
j'ai vu
beaucoup de typescript app
qui sont construits
par
des équipes d'ingénieurs
et tout.
Et on a essayé
de faire des aspects
de cela plus
que Prisma,
mais il y avait
encore
beaucoup d'autres problèmes
que je n'ai vu
dans toute l'application.
Et
je suis sûr
que tu as expérimé
ces problèmes,
aussi,
pour toi-même,
beaucoup de choses,
que ce soit
l'application d'air,
tout ce qui signifie
de construire
une application d'air
beaucoup d'application d'air,
mais aussi
de faire votre app
plus vite.
Si tu veux
faire
un code concurrentement,
tu peux faire
promesse.all,
mais si
une des choses
se passe
comme
comment
tu laisses
tout expliquer,
ou si tu
fais
beaucoup de choses
et que tu as
dans votre app
tu
tu as
50 requests
et tu navigues
à un autre côté,
tu veux
encore
ces requests
pour arriver
au fond
donc tu veux
récourir
avec un contrôleur
et
faire le bon
est
pas
facile
en typescript.
Ça a toujours
boulé
et
faire le bon
est beaucoup
plus facile
dans d'autres langues
comme
Rust
ou
Golang
ils ont
sorti
le bénéfit
de voir
d'autres langues
qui
peut-être
se sont mis
ou bien
et qui
sont inspirées
ou
tentent
de
faire des lessons
de ça.
Mais
typescript
et javascript
sont
un peu
mal
avec
les décisions
passées
et
j'ai essayé
de
vraiment explorer
ok
peut-être
je dois
réinvestir
ma énergie
et
aller
va
s
?
au
with
l
s
s
s
s
s
Donc, peut-être que nous pouvons mettre des études dans le type script.
Et c'est là où j'ai trouvé des bonnes patterns dans les langues d'autres programmes.
J'étais en train de regarder les gens qui ont déjà essayé d'appliquer ces langues dans le type script.
Et donc, ça a initialement mis un peu plus en train de faire le programme functional.
Mais même si ces langues sont les bonnes idées,
je ne pense pas que nous ne pouvons pas être en train de faire le programme functional.
Mais je pense que dans un genre de façon trop grand,
ça peut être fait.
Et je pense que le meilleur exemple pour ça est de réacte et de réduction, etc.
Ce sont tous les programmes fonctionnels,
mais vous ne seriez pas très élevé de dire que vous réactez sur le programme functional,
mais que vous utilisez ces patterns,
vous essayez de les faire vraiment bonnes et simples pour comprendre,
et puis vous faites la bonne chose.
Et donc, ça m'a permis de trouver un type script écosystème qui a eu beaucoup de bons idées,
et de les pakéter bien pour le type script.
Donc, c'est encore un peu plus de poursuivre initialement,
mais je pense que la courbe de la classe se fait beaucoup mieux.
Et donc, maintenant avec cette motivation pour l'effet d'aider à vous construire des apps type scripts,
vous pouvez penser un peu à un libre standard pour le type script
qui vous aide à construire des apps type scripts de production.
Donc, en même façon,
réacte a fait de la construction des apps de front-end beaucoup mieux
par donner des solides primitives,
comme des compagnons et des hoaxes, etc.
L'effet vous donne le même chose,
mais presque comme pour la partie complémentaire de réacte,
comme d'où vous avez une fonction de function de base,
d'où un éro peut être étranger, etc.
Donc, ça vous donne de plus de primitives
que vous pouvez construire votre app.
Et ça m'a aidé beaucoup et j'ai utilisé pour chaque app que j'ai construit.
Juste pour la cléité,
c'est que, qu'est-ce que votre affiliation avec l'effet?
Parce que vous n'êtes pas le créateur de l'alibi,
vous êtes juste en train de vous aider avec le DX.
Exactement.
J'ai trouvé outre sur ce projet en 2020,
et c'était une grande décision pour moi.
Donc, pour moi,
j'ai mis mon investissement en temps
dans ce type script d'écosystème qui a été très expansif,
mais beaucoup de gens l'ont entendu.
Donc, j'ai été touché avec une personne derrière, Michael Analdi,
qui est un ingénieur brillant de l'Italie.
Donc, je suis en train de le savoir,
de le savoir, de l'envers,
et de me faire confiance.
Et en temps, je me suis trouvé en train de se mettre en place
beaucoup de temps sur ce projet.
Et puis, Michael a aussi quitté son travail
et a pu mettre plus de temps en effet.
Et c'est là que, dans une petite capacité,
j'ai commencé à m'aider.
Et maintenant, il y a une compagnie derrière,
qui me fait payer sur un basis de partage,
où j'ai essayé d'aider l'autobus.
Donc, nous avons juste mis ensemble
la première conférence d'effet,
où j'ai mis le keynote.
Je me suis juste essayé de, avec un temps limité,
essayer de avoir un impact positif
sur l'écosystème d'effet,
et de faire cela plus facilement,
et donc, le site est comme un premier grand step.
Nous aimerions remercier notre sponsor pour la semaine,
CodeCrafters.
CodeCrafters fait des challenges de programmation
pour des enjeux d'experimentation de software.
Si vous êtes en train de faire un projet de semaine
qui vous attaque à l'aide de votre programmation,
et qui vous met en place,
dans cette fête de la collège,
où vous avez des formats de binaire,
vous devez les vérifier.
Ils ont un peu de bons challenges,
pour aider à construire vos skills,
et aussi, à construire des outils de développement populaire.
Donc, ils ont des choses comme,
construire votre propre gât,
construire votre propre docteur,
construire votre propre SQLite.
Le cool chose de ce projet,
c'est que vous pouvez aller dans ces challenges,
dans les langues de programmation que vous voulez.
Ils ont des choses comme RustGo et JavaScript.
Mais, à mon avis,
si vous n'avez pas l'expérience de ce language de programmation,
vous devez essayer de vous le dire,
parce que ces challenges,
sont en fait très bien.
J'ai personnellement passé un peu de les challenges maintenant,
mais cette semaine,
j'ai commencé à essayer le challenge SQLite.
Et, boh, encore une fois,
et je suis surpris de la complexité de cela.
Les meilleurs outils modernes
sont fulgés par un file
qui a un format binaire,
où vous devez apprendre
à raisonner de ses mécaniques.
C'est beaucoup différent
que juste de la logisation console,
d'objectif et de la JavaScript.
Ainsi, les contenus,
même ces outils,
sont targetés
par des développeurs de software expérients.
Par exemple,
vous ne faites pas de code dans leur site,
vous faites de code dans votre id,
dans votre terminal.
Et tout ce qu'il faut faire,
c'est de vous mettre sur les code-crafteurs,
ils vous renvoient les tests
et vous le disent si vous avez passé.
C'est assez cool si vous me demandez.
Pour essayer de faire des code-crafteurs pour vous-même,
visitez code-crafteurs.io
ou slash devtools-fm.
Vous allez avoir un discount de 40%
et vous allez aussi vous aider
à faire des podcasts.
Si vous voulez trouver un autre moyen
de vous aider à faire des podcasts,
vous pouvez devenir un membre
sur l'un des canaux que nous avons offert.
Ou vous pouvez aller au shop.devtools.fm
et acheter un peu de notre merch.
Et avec ça,
on va revenir à l'épisode.
Tout ça semble bien,
mais
que sont-ils les primitives
qui vous permettent
de faire tout ce possible
et de faire tout ce qu'il faut?
Oui,
les primitives vous permettent
d'avoir un set de primitives
et nous pouvons aller
dans la séquence
mais nous n'avons pas assez de temps
parce que c'est vraiment
les mêmes manières.
Si vous pensez à la
raste écosystème
ou la raste standard libraire,
il y a beaucoup de bonnes choses.
Vous devez vraiment mettre vos yeux
sur les choses
qui sont rélevées
pour votre cas de use
et pour l'app que vous essayez de construire.
Mais je peux toucher
sur un couple de components
ou primitives
qui sont très communes
pour les autres apps.
Je pense que
l'un des plus communs
qui est appelé
« Effect »
c'est aussi
où le nom vient
mais c'est aussi basé
sur un research académique
qui a été passé
dans les dernières années
peut-être des décennies
autour des idées
d'un système d'effect
Une version très légère
est aussi seen
dans « React »
où vous avez un effectu
mais c'est une version
très légère
mais ce que vous pouvez déjà
voir dans « React »
« Use Effect »
c'est que ça peut
faire des choses imprédictables
mais vous avez aussi un callback
qui est appelé
quand vous montrez le component
donc ça déjà
fait un peu de bruit
sur des aspects
où l'effectu
s'y approche
par rapport
à un « Promise »
ou une fonction de function A.
« Promise »
vous vous dites
« OK, ça se passe maintenant
mais le ship a sauté
et vous n'avez pas de contrôle
au-delà
»
donc vous n'avez pas de
manière d'interrupter
votre code
au moins vous utilisez
un contrôleur de bord
qui est vraiment
annoncé
à travailler
ou vous pouvez
vous ne pouvez pas vraiment
dire le « Promise »
plus tard
pour
pause pour un moment
ou résumer plus tard
vous n'avez pas de
connaissance
sur un niveau type safe
pour exemple
ce qui peut être
d'accord avec un « Promise »
donc pense
sur l'effect
comme
c'est
comme un
version supermane
d'une « Promise »
qui est juste
plus d'accord avec le design
que vous pouvez
rétryer
si ça ne se passe
vous savez
quel type de level type safe
vous savez
ce qui peut être faible
vous pouvez interrupter
vous pouvez
suspendre
vous pouvez résumer
et
selon que c'est
plus d'une description
de votre fonction
vous pouvez aussi
rétryer si ça a
passé d'accord
vous pouvez
penser beaucoup plus
facilement sur
le contexte
donc c'est
comme
un
niveau bas
plus
sur
comment vous
rassemblez
comment la langue
traite
des parts de l'exécution
un peu différente
ou en même
façon
React
a aussi un détail
d'implementation
du système de fibre
qui fait que
tout le bon stuff
arrive
l'effect
a aussi un
système de fibre
pour
faire
tout ça
mais ce que vous avez
c'est que
si vous
réveillez votre cerveau
un peu
vous pensez
que c'est un effectif
pour le�
87
it un locks
all of that good stuff
like
composablity testability
much better
type safety
makee
it much easier
to
build like fast code
etcetera
so ya
come back to
your question
effects are
the most common primitive
but there's lots of
other ones
that are really useful
for
for example streams
which you might know
from like
rxjs
check
t traded
a full replacement
Il faut dire que charts de capital ont���ille et ça????
C'est ce qui fait que c'est vraiment bien.
J'ai beaucoup de ressources.
Je suis réunis sur les problèmes que l'Effect a fait pour l'avenir.
J'ai fait beaucoup de travail sur un peu de différents programmes,
comme Rust, qui a été un peu très fort depuis les dernières années.
Je l'ai complété sur Twitter.
Le manque d'enum proper, variant type, c'est quelque chose qui me fait penser.
TypeScript a un enum, mais dans les langues qui ont une support de l'enum,
ils donnent une bonne manière de matcher avec l'enum qui vous aide.
Quand vous avez des erreurs, vous avez des cas de cas de tag,
et vous pouvez faire des modèles de match avec des modes de failure.
L'Effect a des erreurs, mais il y a une complexité qui est adhée au-dessus.
Je vois que c'est un peu fixé des erreurs de la langue.
L'exemple est d'une promesse et d'un moment de tâche.
Si vous avez un moment de tâche et que vous ne pouvez pas le faire,
par rappeler un tristat,
ça peut faire votre élection.
Vous ne pouvez pas le faire, mais c'est facile de faire le travail,
mais comment balancez-vous la complexité que vous avez en train de faire?
Vous devez faire des choses qui sont des problèmes que vous avez fixés
ou des choses qui ne peuvent pas être fixées par typeScript.
Je pense que vous êtes touchant sur un couple de points.
Je suis vraiment à la fois au bord du monde,
je pensais que je devais prendre une de ces langues progrès.
Je vais déjà prendre l'autre monde, mais je suis assez douloureux.
Je peux apprendre les choses.
Mais je réalise que je ne travaille pas sur les choses que je fais.
Je collabore avec d'autres.
Il y a beaucoup de choses à faire pour un écosystème.
Je pense que les deux grands sont, à l'heure de maintenant,
les réseaux de Java et typeScript.
Il y a beaucoup d'optimisation,
des brousses et d'autres réseaux de Java.
Pour moi, c'est la raison pour laquelle,
dans les réseaux de Java,
vous devez encore se faire des manières de la même manière.
Et pour les autres app, c'est vraiment un grand,
je n'ai pas le droit de payer pour les autres app.
Et maintenant, c'est en train de mettre les mêmes patterns sur typeScript.
Et il se trouve que typeScript est magnifiquement flexible
et ergonomique si vous imposez les mêmes patterns sur le dessus.
Et donc, la chose que nous faisons avec Effect
est d'inquiétiser des afforets syntactiques
que typeScript a.
Et en tout cas, après ce que vous pré Meredith,
On a juste rété un tuple ou un ADT ou quelque chose comme ça.
C'est un enum que vous avez rajouté.
Vous pouvez le faire parfaitement en TypeScript.
Et quand vous follow ces patterns,
vous devez re-vire votre cerveau un peu,
mais votre code devient beaucoup plus simple.
Vous ne plus avoir besoin de la triage,
et ça vous permet d'assurer une saison typique.
Et l'effet a été choisi pour faire un pattern
et ça fait que c'est vraiment bien de travailler avec ça.
Une des plus cooles choses sur l'effet type,
c'est d'y penser comme un promesse,
où le promesse a un type générique,
c'est le valeur du résultat.
Mais l'effet a le même,
mais il a deux types de plus de génériques.
Le premier est pour le valeur du résultat,
et le deuxième est pour l'arrivée d'un usage,
qui est un succès,
qui est en effet un utilisateur.
Mais le deuxième type de paramètres
pourrait être un utilisateur de l'arrivée,
donc c'est pour l'arrivée.
Ce sont les arabs que vous savez que ça pourrait arriver,
que vous ne vouliez pas faire un test dans votre app,
ou peut-être des arabs qui peuvent arriver au arrière,
ou peut-être des arabs qui peuvent arriver au arrière,
Et c'est un autre type de paramètres
qui est pour le contexte.
Donc pense en regardant les contextes réactifs,
où, comme vous avez des composants,
vous avez des composants au-dessus,
vous avez des valeurs configs,
ou des contextes de l'arrivée,
et vous ne voulez pas de l'arrivée,
car vous avez des arguments,
ou des calls de fonction,
et vous pouvez avoir un contexte,
et le fait de l'arrivée dans votre programme,
vous avez besoin d'une connecte database,
et alors, quand vous composez votre code,
et que vous avez atteint le top,
et que vous voulez que vous puissiez faire votre programme,
l'effet vous le dit,
vous ne pouvez pas faire le programme,
vous avez besoin d'un connecte database,
et ça fait que c'est tellement fort,
car ça ne peut pas juste
faire surement que vous avez besoin d'un connecte database,
ça peut aussi vous initialiser
la connecte database quand le programme s'est terminé,
ça s'arrête la connecte database,
donc ça a fait beaucoup de problèmes
de production,
qui sont vraiment difficiles avec les types normales,
et qui font ça vraiment facile.
Ces concepts sont comme,
je vais laisser cet épisode,
c'est un épisode de l'épisode de l'ex-state,
ou un épisode de l'épisode,
où je dois s'y assister,
et vraiment aller aux termes avec ça.
Quand je suis en train de faire des programmes,
je dois aller au bas,
je dois commencer avec les valeurs primitives,
et être comme, ok,
ça peut retourner à la valeur,
ça peut retourner à l'air,
et puis travailler mon chemin en train d'être en programme,
ou peut-être que je peux aller au opposite de la manière où je suis comme,
ok, je dois avoir beaucoup de codes,
et je veux juste commencer à utiliser l'effet,
où ça peut commencer à faire mon vie plus facile,
et travailler mon chemin.
J'adore cette question, c'est fantastique.
Je pense que ça parle de
comment l'increment est possible d'être adopté.
Et je veux contraire ça
pour adopter une langue de programme,
qui est typiquement,
une migration de la Big Bang,
et avec l'effet,
vous pouvez très bien, très incrementement d'être adopté.
Vous pouvez adopter un file,
une ligne,
et vous pouvez aussi,
si vous pensez à votre programme de programme,
comme un fruit,
vous pouvez le faire à la bouche,
à les notes,
à la route,
vous pouvez le faire à plusieurs places,
à la même time.
Il y a un très smooth interop
entre l'effet code et le non-effet code,
qui est beaucoup plus facile que le React.
Il y a des...
React veut être tout,
et si vous avez un non-react,
un component se fait fiddler.
Mais,
avec l'effet,
vous pouvez aller d'une promesse,
d'une promesse,
ou d'un code non-asynchrone,
très facilement.
Vous pouvez adopter
tout le monde qui vous a plu.
Je pense que l'une des meilleures manières
pour adopter l'effet,
c'est de ne pas construire un code non-asynchrone,
qui vous pouvez aussi,
mais je pense que l'effet est très bien adopté,
si vous voulez refactoriser votre code,
pour faire quelque chose de mieux.
Donc, peut-être que vous avez...
votre code, ça marche,
mais vous savez,
on a besoin d'une meilleure handling ici.
Et donc, vous avez un couple de trôles,
ou quelque chose,
donc vous rewrite votre code avec l'effet.
Il y aura les mêmes,
ou les plus les plus les plus de codes.
Mais après,
vous avez votre signature d'asynchrone,
vous avez le point de vue,
et vous avez l'effet équivalent.
Mais maintenant, vous avez aussi la sécurité type
pour vos éros.
Ou, oui,
dans le cas de l'utilisation,
refactoring est une bonne façon
d'avoir un avant et un après,
qui peut être réveillé,
et vous pouvez le faire très rapidement.
Un autre point huge
qui vous permet d'avoir un effet,
cosine,
et plein de permis,
une question de standpoint,
c'est le thème,
cylinder,
et vous pouvez l'aider...
Wil à l' unnatural,
je pensezna,
plusieurs autoconorientations,
et j'espère que ça va vraiment.
Mais si vous voulez plutôt
regarder à ce que ça a été passé,
peut-être que vous commencez à ajouter
un ton de logs
dans l'exécution, mais ça peut
se faire très rapidement.
Donc, il se trouve qu'il y a un meilleur
approach, et c'est
broadly summarisé
dans le terme de la observabilité,
où vous n'avez pas seulement logs, vous avez
logs, mais vous avez aussi
des matéras, et vous avez,
en ma opinion, les traces.
Et ces traces
donnent vous une représentation
très visuelle de votre programme.
Et c'est quelque chose
très normal, en Rust,
ou en Golang, et d'autres languages
en JavaScript, je pense,
c'est
plus often
mais plus de gens
réalisent qu'on a vraiment besoin de ça.
Mais en instrumentant votre code
pour être observable,
par exemple,
avec une technologie
standard appelée OpenTelemetry,
c'est vraiment très drôle.
Et c'est un autre chose
qui vous donne l'effet
de la box. Le effet a
l'air de construire et de tracer
pour chaque partie de votre programme.
Et c'est un autre superpower
que vous avez pour vous.
Oui, l'insubstitut de l'observabilité
est un challenge.
C'est un challenge, en fait,
parce que c'est facile de faire mal
si vous en instrumentez en général.
Je vois comment, si vous
faites vos effets avec l'effet,
et ça vous a donné l'insubstitut de la box,
ça pourrait être très, très valable.
Une autre question sur ce sujet,
avant de nous parler de local,
une des choses que je n'ai pas remarquées
dans les docs, c'est qu'il y a
deux différents patterns
d'utiliser l'effet.
Une des valeurs de l'effet,
c'est que vous pouvez composer
plusieurs effets ensemble
dans ce grand chien.
Il y a un effect large.
Vous pouvez aussi utiliser
cette fonction de piper,
si quelqu'un utilise quelque chose comme
Ramda, Jazz, ou d'autres fonctions
par exemple,
ces fonctions de piper
sont des fonctions
ou, en ce cas, des effets ensemble.
Ou, en effet,
vous pouvez utiliser un générateur.
Les docs, vous pouvez
sélectionner,
choisir votre aventure, et en ce moment,
ça sort
de la paix pour les générateurs.
Je suis juste inquiétant
pourquoi ces deux différents approaches
ont des pensées
sur
quel est le plus préféré,
pourquoi, etc.
Oui.
Donc, l'effet a
beaucoup commencé
dans la communauté de la programmation functional
où vous essayez
d'exprimer
toutes ces types.
En temps, on réalise
qu'il n'y a pas
raison de ne pas essayer
d'effectuer plus accessible
aux programmateurs non-functionnels.
Donc,
ça a été un couple
de chapters, et on a renommé
beaucoup de choses qui étaient
très fonctionnelles et
très détenues,
et on a aussi
des résidus
qui se sentent
très fonctionnelles.
C'est un bug, et on veut
adresser ça, en le même
façon qu'il y a un réact.
Les gens ne devraient pas
adopter le réact, parce qu'ils sentent
qu'ils n'ont pas besoin de programme fonctionnel.
Et
ce syntaxe, en termes
de pipes et générateurs,
c'est peut-être
encore le plus visible
aspect de l'exploitation.
C'est un peu
le contexte historique.
Mais en regardant le
idea de
utiliser un générateur, c'est très similaire
à Async Await.
Je ne suis pas sûr que
les listeners ont commencé
à profiter
sur JavaScript et TypeScript.
En plus, quand j'ai commencé,
il y avait des callbacks, c'était le seul moyen
de faire un code
de la version de JavaScript.
Et ça se passe
au plus vite possible
pour les decels de niddy grid.
On ne va pas y aller.
Mais à un moment, les promesses
ont été un truc, les générateurs
ont été un truc, et aussi
l'Async Await a été un truc.
Et je pense que maintenant, les gens
utilisent l'Async Await, parce que
ça vous donne beaucoup de convenance,
d'exception des pièces qu'on a
parlé de tricache, etc.
Mais le modèle mental,
pour Async Await, est vraiment sympa.
Vous pouvez
juste faire des codes, et vous savez
que ceci est Async
Chrono, donc je l'ai attendu.
Et c'est vraiment sympa.
Et les générateurs
font de la même modèle mental
de la façon dont les tests
sont implémentés.
Donc, en avant d'interpréter
quelqu'un pour penser
que tout est comme un programme functional,
c'est possible, et si quelqu'un veut
faire ça, il faut le faire.
Mais le pouvoir d'effects est
qu'il ne faut pas savoir ça.
Vous pouvez juste faire des codes,
comme vous l'avez fait
avec l'Async Await.
Vous avez juste utilisé les générateurs pour ça.
Nous avons même considéré
que nous avons notre propre
Chase X-like équivalent.
Quand les réacts ont commencé,
il y avait un problème similaire
où ils ont essayé de faire
plus facilement
de réactes.
Ils ont fait
une décision contraire
de créer Chase X-like
pour avoir un meilleur DSL
pour cet environnement.
Nous avons considéré
cela aussi, mais
nous n'avons pas
les mêmes ressources
et
nous n'avons pas de
des typescripts qui disent que nous avons
des DSL qui nous ont
voulu vous poursuivre.
Nous essayons de
mettre cela en typecript
comme c'est aujourd'hui.
Ce sont des générateurs qui sont
super puissants.
Les capacités de type inferne
sont juste incroyables.
Ils sont très sous-us.
Je vois
plus et plus de utilisations.
Les générateurs pourraient avoir
une grande combats dans les nächsten années.
Mais cela vous donne
le même modèle mental
que l'Async await.
Mais avec un meilleur type inferne.
Si vous êtes
dans votre code générateur,
vous vous avez un effectif
qui peut être faite
avec un error de user.
L'effectif
est comme le body de générateur,
comme votre body de function Async.
Il ne se refait pas
de dire que ça retient un user,
mais automatiquement,
cela peut avoir un error database
ou un error de user.
Ce n'est pas
que cela se déloigne.
Vous ne devez pas changer de façon
de la construction de votre app.
Si vous avez écrit un code Async
avant, vous pouvez
le faire sur le fait
que le effectif soit répliqué.
C'est intéressant.
Je
n'ai pas besoin de
l'accessibilité,
mais je me sens
d'en comprendre.
Le score vous donne
de la programmation
pour le type qui s'est passé.
Si
les listeners veulent
voir le site,
les générateurs
et les typescript
ont un petit peu
de syntaxe, mais vous êtes
utilisés rapidement.
Le moyen
de l'équivalent
d'une élection
avec les générateurs est un yield.
Il y a
le score que vous avez référé.
Ce n'est techniquement pas nécessaire
de la faire, mais c'est
encore nécessaire pour le type
de la construction.
J'espère que
à un moment, nous pouvons juste le faire.
Il y a un PR ouvert à la
type script repo, ce qui va faire ça.
Il y a un
type
qui va
de la construction.
Il y a un type
qui peut être utile.
Il y a
une manière de
faire un type
de la construction.
Il y a un type
qui va
faire un type de la construction.
Il y a un type
qui va
faire un type de la construction.
Il y a un type
Il y a un type
qui va
faire un type de la construction.
Il y a un type
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type
qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
faire un type de la construction.
Il y a un type qui va
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un type de la construction.
faire un types de la construction.
faire un type de la construction.
Donc un exemple de cela, c'est qu'il y a un plugin Zod
avec le plugin Zod,
plutôt que d'avoir un type Zod.infer,
et c'est une chose générique,
il va aller et vous donner le type réel,
le type résultant,
le type que vous voulez voir comme un consommateur de l'app,
et pour mon utilisation,
j'ai pu faire le tout,
ce n'est pas le cas avec beaucoup d'autres typescript documentations.
Donc si vous regardez pour quelque chose comme ça,
c'est vraiment cool.
Vous pouvez aller de 0 à un site de type DOC généré,
et en plus de 5 minutes.
Si vous avez besoin d'un tool comme ça,
vous pouvez le voir.
C'est super cool.
Je n'ai pas plan de le faire,
mais je suis très profond sur ce robot,
aussi au début de ma sabbaticale,
où le type DOC n'était pas trop long,
et ça m'a fait plaisir de voir
le burden sur le developer et le maintien de l'app,
pour faire le type DOC,
et pour le faire en Rust,
où vous avez des docs canoniques automatiquement générés.
Je voulais donner ce paradigme de type script,
et je travaillais pour un moment sur un projet appelé PAKA,
où vous pouvez aller à PAKA.dev,
mettre votre nom de package en NPM,
et vous avez automatiquement les stocks de référence générés.
Ça a été un problème très dur,
et j'ai dû réimplementer les parts de l'app,
pour comprendre les parts de l'app.
Donc on a un peu plus loin, mais pas trop long.
La existence du prince,
ce sont les romans que j'ai fait avec qn hip hop,
qui n'appliquent pas de modèle distribué.
Je n'rendreaxe pas de gracias pour ce lieu,
piraté courage audiences
pour ce gibi Dontohцы et le caractère LHeb sampling,
,
Donc, la prochaine, on a l'un
On a un storage.
Les key value stores sont importantes.
Elles underline les databases.
Any time you work on a project, you find a need for a key value store.
I really love Dino's key value store, but you can't use it everywhere.
I've been on the hunt for a pretty adaptable KV solution.
You can use it in any context.
There are a few specific things I want.
There are a lot of KV service providers out there.
Like Cloudflare has a KV solution.
Dino has a KV solution.
Etc. Etc.
Anyway, I saw a tweet this week that introduced me to this project called unstorage.
It's part of the UnJS broader umbrella.
It's a generic wrapper around a KV interface that can persist to a bunch of different targets.
So you can have something that's potentially going in local storage and going to Dino KV or Cloudflare KV.
It's really interesting.
One of the things that you can do is specify, oh, this key is persisted here with this technology.
Other keys are persisted somewhere else.
So you can compose different stores into a single interface, which is really cool.
I think that this is probably something that a lot of folks who are doing local first could benefit from.
Because you could do local storage in some aspects and then remote storage in others.
The transpiration or the API is seamless in between them.
So really cool technology.
I'm excited to explore it more.
It seems useful.
Next up, we have Nix.
All right.
So my pick is Nix.
I think this was probably already picked by a few previous guests.
At least I hope so.
It's a bit of an acquired taste.
I've been hearing about it for quite a while in the past.
I've always thought, okay, well, at some point I'll learn it.
And since it is quite a bit to get into, but it's very, very powerful once you've learned it.
And so the tipping point for me when I started to get into it is where I basically might read me was just starting to grow and grow and grow.
Oh, brew install this, brew install that.
And make sure that you have this specific version of GCC for this project.
Or the more native tool chains you need for a project, whether it's for a native script or for a Tauri.
Wherever you need something that goes beyond PMPM install, this is where I just was tired of that it worked on my machine, but not for someone else.
And I didn't want to tell them, like, oh, just like develop and docker.
And the best thing that really solves that is Nix, where you can think about it like a package chasen that instead of like installing a package that's unavailable for your project,
you can install like Node.js itself or Golang or like whatever you need or Watchman or whatever you really need for your project.
You can just put like into one flake.nix file.
And then if you combine it with a thing called Durant, which just sources your environment variables, etc.
When you CD into a directory, then like everything is just there.
So I don't even have brew installed anymore on my Mac.
And the cool thing is like that thing works across operating systems.
Well, at least on Unix based operating systems, so Mac and Linux, etc.
And that's just like once you got into it, it's phenomenal.
And you start using it for everything.
And I'm even going as far as also provisioning my like my Mac and like other machines with us.
I'm using this for running a smart home system on Raspberry Pi, using this for my Macbook.
I'm using this for a development server.
I know, for example, that Mitchell Hashimoto is also using that for all of his stuff set up.
So I think more people should take the leap, learn a little bit about it.
It's gotten a lot better to get started with.
And then you don't need brew anymore.
You don't need like crazy Python hacks to get something to work.
And like once you rewire your brain, it's really nice.
That's super cool.
So like for me in my MPM terms, it's like instead of installing everything globally,
I'm just installing it like locally to the folder that I'm working in.
Exactly.
I could see how that is very useful.
I hate setting up global tools on my system.
Also, like the same analogy holds, like, let's say you need to run like a one off task for preparing a video.
You can just write Nick's shell f of m pack.
And even if though if you don't have a m pack on your machine, it's then just available in your shell and you can use it.
And afterwards, you can forget about it again.
OK, my next thing that I'm sharing came up on my feed this morning and it is wild.
A dude, while he was in college, made a mini spot bot, like, you know, those big four legged robots that can walk around.
He made one with like an Arduino and a raspberry pi.
And it's it started out as like a build your own little project.
But now they've created ones that you can buy.
So they have one that's like a little cat and one that's like a little dog.
And it just looks absolutely wild to see something that was like the bleeding edge of technology,
not just a few years ago reduced to something that I can like hold in my hand.
And my mind just goes wild with like the possibilities to make this fun.
Like, I wouldn't want to load an LLM on to the big one, but on to the small one, it might be cute and not seem like a world's ending.
So if you want a very fun weekend project and have ever wanted one of those four legged robots, I would go check check this one out.
It's called Open Cat.
That's amazing.
I love the Internet.
I actually own one of these.
Oh, you do?
I do.
Yeah, the wooden cat kit.
Nice.
I don't know what I would program mine to do, but it looks like it would be a fun thing to program.
You have to en symbolize everything.
So it's a fun little project.
Up next, we have React Print PDF.
Yeah.
So I, I, this came across my feed and Twitter this week too.
So there's a, there's a company behind this.
So there's a company called OneDoc who's essentially building a mechanism for for generating documents like PDFs.
So, I think like invoices or, you know, whatever, and that way.
And so they're using, they're using React to do it.
I've seen a lot of other really cool React compiles libraries.
You know, I think of like React Inc, like letting you run React in the terminal.
But this React Print PDF seems really novel.
So for DevTools, we have to generate invoices for sponsors from time to time.
I have a little CLI app that does that for me, but it would be interesting to be able to do it and react because you can do, you know, a lot of customization with your own, you know, branding.
And, you know, make it really generative and then make it something that like, you know, web developers could sort of understand because Lord knows PDF is not the most graceful format.
So, a pretty cool, pretty cool library.
I'm not sure how tied it is to their commercial service, how much you can do yourself, but definitely something to keep an eye on.
Yeah, it's cool to see companies that are like, like resend where they're like, here's this open source library that does React for X.
And then here's our platform that makes it easy to deliver to everybody. Super cool.
And one of the superpowers of React that like, I feel like people outside the React ecosystem don't quite, quite grok.
Because it's like, you're not just learning to write web apps, you're learning to just write apps.
And then your apps can be anywhere, which is such a cool idea.
Then last up, we have the combo of at test and perfecto UI.
All right. So a little anecdote on that beginning of this week, I noticed that my VS code has become really, really slow when I'm typing, when I'm typing a TypeScript file.
And notice that this, like, overtime just really degraded where the autocomplete would initially be instant.
And then over time, would just like become like half a second, one second.
And I think it was at a time, at a point where it like took like eight seconds or so.
And it's like, absolutely not bearable to work with us anymore.
So I had to figure out like, hey, what is going on?
And so I'm used to this kind of thing, typically when running your app and your app is slow.
And like you start looking into performance profiles, etc.
And you realize, okay, this is the bottleneck and you make it faster.
But now I'm basically trying to do that for VS code.
But more specifically, I'm needing to do this now for TypeScript, since the TypeScript LSP is running that.
So a friend of mine who's working on that thing called ArcType, which is like an alternative to Zod, etc.
Really interesting to look into.
But as part of this project, he's been building this thing called a test.
And a test is basically like a type setup, like a testing setup, but for your types, where you can check, like, hey, is the type correct?
And also on the performance level of the types that you can see, like, okay, for that type to infer correctly, this is doing like so much work, like instantiations, etc.
So and that project also comes with a CLI, which you can point at a folder of TypeScript files, and it spits you out a trace JSON file.
That is basically a performance benchmark for your given TypeScript project that you can now throw into the other, this Perfetto UI,
which you can basically just upload a JSON trace file there, and then you get sort of like a Google Chrome chart, where you can look into what is going, what is slow.
And this is where you then can like, step by step figure out, like, okay, this file specifically at this line, I'm inferring this type.
And turns out, I found some things that I would never expected that literally took TypeScript like three seconds to infer, and I had a few of those.
And in this case, I could just slap an any on it, and I was fast again.
And so whenever you feel frustrated with like wise typescript getting slower and slower in VS Code, those are some interesting tools to look into.
Yeah, that's super cool.
While developing design systems, I've run into this problem a lot, because you try to create a polymorphic component and then TypeScript's just like, that's too much for me.
So having a tool that can point me to where that slowness is actually coming from is huge.
Yeah, shout out to David from ArcType for showing me all of this. Very useful.
Yeah, that's awesome.
Cool.
And that wraps it up for this week's tool tips and this week's episode.
Thanks for coming on, Johannes.
This was a lot of fun.
We covered a lot of ground here and you seem to be doing some pretty cool work right now.
Thank you so much for having me.
This was a ton of fun.
Yeah, it's really fun to have an episode crossover.
I was just like listening to one of your episodes earlier.
So it's like, but yeah, I mean, really love your podcast too.
So keep up the good work there and yeah, thanks for coming on.
...
Les infos glanées
devtools.fm:DeveloperTools,OpenSource,SoftwareDevelopment
A podcast about developer tools and the people who make them. Join us as we embark on a journey to explore modern developer tooling and interview the people who make it possible. We love talking to the creators front-end frameworks (React, Solid, Svelte, Vue, Angular, etc), JavaScript and TypeScript runtimes (Node, Deno, Bun), Languages (Unison, Elixor, Rust, Zig), web tech (WASM, Web Containers, WebGPU, WebGL), database providers (Turso, Planetscale, Supabase, EdgeDB), and platforms (SST, AWS, Vercel, Netlify, Fly.io).
Tags