Predrag Gruevski - Trustfall, Cargo Semver Checks, and the Future of Query-Based Tools

Durée: 51m31s

Date de sortie: 09/09/2024

This week we have Predrag Gruevski to discuss TrustFall, a new query-based tool for querying anything. Trustfall makes it simple to turn anything into queryable data. Predrag used that to create cargo-semver-checks, a tool that checks your Rust packages for semantic versioning compliance.

Episode sponsored By MUX (https://mux.com)

Become a paid subscriber our patreon, spotify, or apple podcasts for the full episode.

C'est ma opinion que si nous faisons un query 1 000 fois plus facile,
la vie devient 1 000 fois mieux.
Juste en regardant le monde autour de moi,
des choses qui ont été passées dans les dernières jours,
un peu de choses qui sont très compliquées,
des queries ont été passées.
Bonjour, bienvenue à la podcast de DevTools FM.
C'est un podcast sur les tools de développement
et les gens qui le font.
Je suis Andrew et c'est ma co-host, Justin.
Salut tout le monde.
Aujourd'hui, nous sommes vraiment excitées à avoir un projet sur le podcast.
Donc, j'ai réglé plusieurs de vos blog posts,
indépendamment d'un à l'autre,
et je n'ai pas réalisé que c'était par l'autre.
Donc, je suis vraiment incroyablement excité à vous parler
de pas seulement ce que vous avez travaillé sur,
mais aussi votre livraison.
Oui, c'était un vertices gearbox,
le poids plastique,
le marche et le poids,

Vous connaissez ça dans l'торы.



des pièces fut ElesSeSen,

d'춰ire deium on va florier sur ce Du isn
d'Amas,
Je travaille sur les tools de développement, l'infrastructure, les databases, les compilations.
C'est tout un peu fussy.
J'aime vraiment les projets intersectionaux où vous appliquez les techniques de coulisses et d'un fil à un autre fil.
J'ai vraiment un coup de feu en faisant ça.
J'ai un coup de feu en préventant des accidents en faute de nous tous.
J'aime vraiment le software qui se débrouille très rapidement et très correctement.
Et ça distille les meilleures expertises pour l'automation,
pour que tout le monde puisse bénéficier de ça sans avoir une PhD.
Et les détails de la version semantique,
ou de la correcté, ou des compilations, ou d'autres choses qui peuvent être sur leur plate.
J'ai un nombre de projets qui ont été travaillés.
J'ai très heureux de parler de tous ces projets.
Beaucoup de ceux sont très rares, beaucoup sont très ambitieux.
J'espère que tout le monde qui est venu pour ça, est prêt pour ça.
Je suis très heureux de vous parler de ça.
J'espère que vous ne vous inquiétez pas de me faire entrer dans les hauts lois techniques.
Non, pas du tout.
Vous avez mentionné que vous aimez appeler des choses dans un fil à un autre.
Est-ce que vous avez un exemple de ce que vous avez au-delà de ce que vous avez à parler ?
Oui, à un moment.
C'est peut-être un autre blog post que vous avez déjà lu.
J'ai écrit un blog post sur comment nous avons fait de l'achat pour la dernière fois.
Je me suis dit que je vais faire un petit coup de l'argent pour l'économie.
Je suis le premier de la team à un petit start-up.
J'ai fait des choses très ambitielles, infrastructure, database de compiler.
Si vous avez écrit le blog post et que vous avez essayé de l'acquire,
tous les candidats seraient comme L6, L7 et Google.
Et nous n'avons pas de ce genre de monnaie.
Mais vous ne pouvez pas faire de très bonnes choses
sans avoir de très bons ingénieurs sur la team.
Nous avons dû s'y prendre plus de monnaie que tout le monde.
J'ai lu le blog Moneyball.
J'ai pris des études de la
« Comment vous buildez un team de baseball de Kikast ? »
Et j'ai adapté des études de la « Software hiring »
pour les gens qui sont en train de s'étudier à la collège,
ou peut-être dans quelques années, à la collège.
Nous avons étudié un team de baseball de Kikast.
Toutes ces gens ont été très longs
depuis que nous avons étudié à d'autres companies.
Et beaucoup de choses que je construis maintenant
ont été influencées par les choses que nous avons inventées
et la première chose, et puis l'autre source.
Pour vous donner un exemple,
nous avons beaucoup, beaucoup de discrètes
et nous avons regardé les gens qui ont été
en train de s'étudier,

en train de s'étudier à l'expert,

Nous avons regardé la personne qui a été
dans leur collège, dans leur environnement,
qui a été en train de s'étudier à la collège

La personne principale de la school
n'est peut-être pas la première personne en l'économie.
Et c'est la première personne en l'économie,



Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.


Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.






Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.



Et c'est la première personne en l'économie.

Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.




Et c'est la première personne en l'économie.

Et c'est la première personne en l'économie.
Et c'est la première personne en l'économie.
Et qu'est-ce qu'on va poserroller?
Et qu'est-ce qu'on va poserroller?

Qu'est-ce qu'on va poserroller?
Non, non, non, non, non.

C'est comme ce qu'il y a de la idée derrière ce tool.
C'est certainement.
C'est basé sur une observation personnelle que j'ai faite,
que je ne pense pas être unique.
Si vous avez ce genre de data graph
qui compasse tout ce que vous inquiétez
et que vous pouvez le query rapidement,
facilement, efficacement,
alors beaucoup de choses vont devenir plus facile.
Si vous pouvez juste expérimenter tout ce que vous avez fait
et que c'est quelque chose d'autre,
pour savoir comment vous avez besoin de la data
pour exécuter ce query efficacement
et vous donner les réponses que vous avez regardé.
Beaucoup d'autres outils sont expériments
comme, faire un query,
obtenir les résultats et faire quelque chose avec ces résultats.
TrusFull est un effort pour faire cela possible.
C'est une pièce d'infrastructure fondationale.
Ce n'est pas trop de batteries à l'écart.
Vous devez toujours plier les sources différentes,
les sources différentes,
et avoir des contraintes différentes.
Il y a évidemment
encore un certain ingénieur qui est nécessaire pour faire cela.
Mais la vision fondamentale est
qu'il faut un système compiler-like
qui nous donne un état d'engin database
pour qu'on puisse mettre en place nos applications.
Il faut être un compiler-like
parce que ça doit faire beaucoup de la optimisation
que nous soyez en train de faire,
sinon nous allons réimpliquer tout ce que nous avons fait
sur Scratch, parce que ça va être une meilleure performance.
Il faut aussi être un état d'enquête database
parce que le query déclarateur est vraiment bon.
Si je n'ai pas besoin de faire un code imperatif
dans tout cas,
je vais être découplé de des changements
dans les structures d'infrastructure fondamentale.
Je n'ai pas besoin de ne pas se déterminer
que l'index a été ajouté
et que le query devrait être élevé complètement.
Nous avons des bénéfices de massive ergonomique.
Ce qu'on a besoin est
une LVM pour les databases, comme ils étaient.
D'où nous pouvons rester à ce niveau de haut,
je vais juste mettre un code imperatif
et c'est quelque chose d'autre.
On va faire tout ça
et on veut une pièce d'infrastructure
sur l'autre côté
où ils peuvent prendre ce query
et faire un nombre de datasets
à quoi qu'on souhaite pour le plug-in.
C'est un projet très ambitieux.
C'est à la même time très établi
que je travaille sur cette technologie
depuis 7 ou 8 ans,
selon la façon dont vous comptez,
et aussi très rapidement,
parce que presque tous les sources de données
que tout le monde craint
n'ont pas été plug-ins.
C'est une longue température,
mais je suis très content de travailler sur ça
et c'est un jour plus meilleur.
Nous aimerons arrêter
et remercier pour la semaine.
Mux.
Mux est une plateforme magnifique
qui fait ajouter un vidéo
à votre produit
comme facilement que vous pouvez imaginer.
Le vidéo est un trône de problèmes
de difficulté à résoudre,
à travers les formats d'image,
de streaming,
de vidéo de qualité à votre consommateur,
de construire un joueur
qui travaille sur toutes les plateformes.
Il y a beaucoup de choses à penser
et beaucoup de choses à construire.
C'est où Mux vient.
Une idée qu'une idée
que Mux a joué avec recently
est d'adresser de l'AI
à ses parts de leur produit
comme ils peuvent penser.
Ce qui est vraiment un peu
un peu plus grand
est leur joueur de Mux.
Certaines des features
que vous avez en place
dans la box
avec ce truc
sont tellement cool.
Vous avez des chapitres automatiques.
La summarisation et le tagging
vont même automatiquement
transmettre et doubler vos vidéos.
C'est tellement cool
et j'aime comment ça
fait que votre contenu
est plus accessible
sans que vous ayez
beaucoup d'essence.
Et je suis sûr que ça ne s'arrête pas.
Je pense qu'ils ont un whole
bunch de choses
de plus cool
qui sont en train de faire l'AI.
Je sais qu'ils ont des trucs
vraiment cool
et juste comme
comment la encodation
fonctionne en utilisant machine-learning.
Donc, si vous avez besoin
de mettre un vidéo sur votre plateforme
et que vous n'avez pas envie
de prendre des semaines
pour mettre votre produit,
vériez les bouts.
Et si vous n'avez pas envie
de entendre ces ades encore,
n'hésitez pas à être un membre
d'un des différents canaux
que nous offrons.
Avec ça, vous allez avoir
l'épisode ad-free
et un spoch plus tard.
Si vous voulez trouver
une autre manière
de soutenir le podcast,
head sur www.shop.devtools.fm.
Vous pouvez prendre une haine
et montrer que vous êtes vraiment
une merde.
Avec ça,
on va retourner au podcast.
Oui, le...
le source de données et le long-tail
effort.
Et c'est comme
à quel point vous avez
à proposer une interface unifiée
pour les accesses de données
à travers les
petites
des stores de données
ou des appareils ou tout.
C'est comme,
ok, maintenant,
je dois impliquer
ces choses pour chaque
singlee.
Ce qui est un challenge.
Une question particulière
que j'ai sur Trustfall
est
est-ce que ça acte
en fait, comme un database
dans ce que...
Donc, on va dire que vous
vous inquiétez
des sources de données.
Et vous avez un exemple
de la hauteur de la news,
qui peut être
une hauteur de la news
est assez statique,
mais
peut-être que vous avez
des données
qui peuvent être stales
ou des changements
ou tout ça.
Et vous inquiétez
cette information.
Si vous le dédiculez,
ce sera vraiment
efficace
pour le récourir,
mais ça va aussi
devenir stale.
Et vous devez
aller en retard
pour la source de données
à un moment.
Mais si vous retournez
vers la source de données,
et vous payez
le débat de la performance
de ce que vous faites.
Donc,
comment vous balance
la fraîche
de données
et de retourner
vers la source
vers la caching ?
Absolument.
Et
c'est où
Trussfall
est un peu
plus
un
toolbox
avec lequel
pour construire
une intégration
et pas
vraiment
une opinion
de la hauteur,
c'est la façon
de faire ça.
Donc,
Trussfall
n'est pas un database
en soi.
Il ne se détend pas
de données,
il ne se cache pas
de choses pour vous.
Il ne fait pas
d'autres choses.
Mais ça vous donne
l'obligation
de faire
tout ça
où et quand
ça fait le sens.
Donc,
parfois
la données que vous avez
sont complètement
statiques.
C'est,

un file JSON
dans votre local
des discos.
Donc,
le cache ne fait pas
vraiment
beaucoup de sens
parce que vous allez
juste le faire
dans la mémoire
et ça va être
statique.
Et d'autres fois,
vous avez
ce complicateux
dataset
comme
GitHub
ou
comme
Hacker news
ou quelque chose comme ça.
Et il y a
des techniques

advanced
comme cache,
batching,
prédicit
de la push-down,
choses comme ça
sont importantes.
Trussfall
est un travail
de
faire
toutes les optimisations
qui sont toujours
une bonne idée
en regards
de où
la données
est venu.
Et faire
ça
très
facile
pour
l'intégration
de la source spécifique
pour faire
toutes les autres
optimisations
qui font sens.
Donc,
pour quelque chose
comme
GitHub
ou Hacker news,
dans beaucoup de cas,
ce que vous voulez
faire
c'est
juste
utiliser
le cache HTTP,
faire le record
de ce qu'est
le tag
de la réponse
et puis
révalider
ce qu'il faut.
Si vous soyez
plus ou moins
de la fraîche
et plus
de la performance,
alors vous ne
peut-être pas
valide
de la tag
et dire
Hey,
si ce n'est
plus que
10 minutes
ou quelque chose,
alors vous
vous ne le
pas.
Mais
l'idée est de
exposer
une spectrum
d'options
et ne
forcer
aucun
modèler
ou approcher
sur
quelqu'un
d'autre.
Donc,
est-ce que
la package
est currently
configurée
avec
d'autres sources
ou
est-ce que je
mets
toutes les sources
de la data
?
La
somme de la somme
ne vient pas
avec d'autres sources.
Il y a un
nombre d'autres sources
qui ont été
implémentées
comme les libraries
que vous pouvez
installer et
utiliser
et elles
sont en somme
sous la clé.
Donc,
l'idée est
qu'ils
exposent
une interface
où vous
vous arrêtez
des queries
qui vous
proviennent
les bindings
et sous la clé
ils
fondent
l'engin de la

Donc,
les designs
sont
embêtables.
Si vous
vous apprégiez
comme
des chevaux de carbur
et des
chevaux
sous la clé
c'est partie
de ce que
vous ne
n'aurez pas
remarqué
que vous
vous
arrêtez
quelques queries
dans les
fonds.
C'est le même
avec les
plateaux de la

C'est juste
la
somme de la
C'est juste le même avec les
plateaux de la
somme de la
somme de la
somme de la
somme de la
somme de la




























somme de la
C'est juste le même avec les
plateaux de la
somme de la

somme de la































somme de la
user expérience
dans la
line
pas juste pour les
développeurs
mais pour
juste les
utilisateurs
que vous savez
ont un
computer
et
ont un
téléphone
et
ont un
compte
pour votre
système
je pense que c'est
un bon monde
pour vivre
donc
c'est la
sorte
5
10
ans
vision
de ce que j'espère
que la
truss
Falk
peut enlever
et
on est déjà
faisant
un peu
mais je pense
que nous
pouvons
faire 1 000
fois plus
plus
donc
c'est
comme
le fait
que je suis
en train
c'est
c'est comme
un
le
le
le
le
le
le
le

le
le













le


le

le
le
le
le
le
le
le

et d'expressiver cette politique.
Il y a quelque chose qui est intéressant de me dire,
c'est que beaucoup de fois, quand je pense à l'automation,
dans ce cas, on a un tool qui nous permet de courir
beaucoup de sources de données.
Je pense à un système de l'étranger traditionnel
où on connecte des données de l'API à faire un processus.
Mais ce qui est intéressant de voir comment vous vous appuyez,
c'est que vous avez donné l'exemple du cargo Simber
d'utiliser le trusfall pour courir les données
des files configs et des choses plus statiques
et d'utiliser les règles de check.
Ça me rappelle un peu...
Il y a un tool appelé SimGrap,
qui est en train de faire des grapements semantics.
C'est de trouver des patterns et des STs
pour des tests de sécurité ou des tests de dépendance.
Ça me rappelle ce problème.
C'est un problème qui est très grand,
un problème qui est un peu inquiétant.
C'est intéressant.
En regardant les syntaxes,
il a beaucoup de grapements.
C'est-il grapements sous la coude
ou est-ce que c'est la même langue que le grapement semantics?
Oui, c'est une langue customée
qui est la même langue que le grapement semantics.
La même langue que le grapement semantics
a beaucoup de tools,
mais en fin et en fin, c'est sa propre chose.
Quand je faisais des syntaxes
pour cette idée de query,
j'ai l'impression que GraphQL
a un système de tooling fantastique.
Il a les visualisations schema,
l'autocomple LSP,
le syntaxe qui est très expressif,
tout ce qui est vraiment cool.
Mais je n'ai pas envie d'adopter GraphQL
tout au long de l'économie
parce que ça a aussi, en mon avis,
des compagnons de grapements.
Il y a certains queries
qui sont très difficiles
pour l'impossible d'exprimer GraphQL.
Vous ne pouvez pas faire des recursions,
vous ne pouvez pas faire des agragations,
vous ne pouvez pas juste couper un filtre
pour qu'on fasse le genre.
Vous avez besoin
de faire seulement les choses
que le résolver est capable de faire.
Et je ne peux pas juste
faire des recursions,
et filtrer ça et agrégé ça.
Je voulais plus d'expression.
J'ai trouvé un moyen
d'abuser les syntaxes GraphQL
pour faire mon bêtement.
Donc, le front-end de la conférence
fait des syntaxes GraphQL,
utilise le système type,
utilise le même automatique,
utilise le même LSP,
utilise le même visualiser,
utilise le même tout,
et traduit ça
dans la représentation interne
et, à ce point,
tout est différent.
Donc, les réponses que vous avez
ne sont pas compliquées
comme GraphQL.
Ils sont laissés,
pas de la suite,
et, vous savez,
dans cette
compliquée,
UI-friendly,
mais peut-être
pas de la façon de performance,
de style.
Donc, certains traiteurs
sont faits avec un « i »
pour être
mieux pour
« Hey, I have like a billion row query
that I want to run
that is going to be very expensive
and maybe don't want to blow
my entire rate limit
on this one thing. »

Et,
that unfortunately means
that it's not as good
for driving a UI directly.
You can't just plug it into Relay
and call it a day.
On the flip side,
it makes workloads
like Khargorsanverchex,
not just possible,
but very easy
with very good, you know, benefits.
So,
it's not tides to GraphQL syntax
down the line.
You could imagine,
bolting on another syntax.
This is a common trick
that compilers use, right?
Build the front end,
translate to the same
internal representation.
Bam, you have another syntax now.

everything from SQL
to just natural language
with an LLM translation layer
is fair game,
but none of that is implemented
right now.
There's just the one syntax.
I was actually going to ask a question
about LLMs in translation,
because it seems like
the way you present the tool
in almost all of the blog posts
is, here's this natural language query,
and then it's like,
kind of, we hide the graph thingy
off to the side
and here's some results.
So, have you played around with that
and does it work?
Actually, yes.
So, Trustfall has been around
for long enough
that I've managed to
get popular LLM tools
to dump its documentation verbatim
to proving that they've been trained on it.
And so, they're actually quite good.
They're uncannily good
at writing Trustfall queries.
But as is often the case,
making the most of
a very powerful tool like this
comes down to how well
is the schema design
accomplished to fit
the goals that you're trying to do, right?
So, if you have a really terrible
un ergonomic schema,
then no amount of LLMing around it
is really going to help you.
Your queries are always going to be awkward.
They're always going to be slow.
They're always going to be unfortunate.
And so, that's one of the big reasons
why I haven't sort of gone
all in on the LLM
to query language kind of thing,
just because I think that there are a couple of
plus plus foundational problems
to solve first.
But absolutely, it's on the table.
It's definitely going to happen sooner,
if not later.
It's pretty mind blowing.
It's really cool.
I can't help but think also about like
the sort of N plus 1 problem
that GraphQL has
where you have a query
that like hits a bunch of services
and granted, I know this isn't GraphQL
and it doesn't execute in the same way.
But principally, you have the same problem
as you're querying in many data sources.
And you may need to,
like if you're getting,
if you're getting say like,
you're querying a bunch of users from GitHub
that have contributed to some repo
and you're getting their user ID or something
or and some information
that's only available in a profile,
you may end up having to like make a request
for every user and get their profile data
and like stitch that together
in a larger response.
And GraphQL or the Facebook team,
originally, sort of
come up with the concept of a data loader
which is like some advanced caching layer
and that's hidden kind of behind the implementation.
So it's like something that on the implementation side
you just like use data loader
to do smart caching and stuff.
And is the same story in Trustfall?
It's where it's like,
you just kind of have to know
it's like, okay, this could be an N plus 1,
like a waterfall query.
You need to do some performance optimization here.
Or is it like smarter than that?
Like what is it?
I would argue it's smarter than that.
So the guarantee that Trustfall is a query engine,
not talking about any specific data source offers is this.
Any kind of query optimization
that you can do without Trustfall,
you can do with Trustfall.
So it's never going to make anything
that you could have done worse
just because you chose to use Trustfall, right?
And it actually goes one better
than what we normally do
when we're optimizing stuff by hand,
which is that when you implement an optimization,
Trustfall will apply that optimization
to every query that can benefit from it.
And you don't have to go manually going in,
you know, like tweak every single query
that could possibly benefit from that optimization.
I can give you a specific example from Khargis Anverchek's.
So Khargis Anverchek's is a tool
that ensures semantic versioning compliance for Rust.
And the way that it does this is it has currently
about 80 queries.
We keep adding more queries sort of every week.
They do all sorts of things like,
are there any public functions that used to exist
and no longer exist, trivially breaking change, right?
Have any of their function signatures changed
to take more arguments, trivially breaking change?
Have any struct fields disappeared
since the last version, trivially breaking change
and so on and so on?
A common problem here for almost all of these queries
is we have a language item, a function,
an enum, a struct, something, in one version,
and we want to match it to the corresponding language item
in the new version.
And when I say language item,
I mean something at a specific import path, right?
Because just because something is named the same thing
doesn't mean it's the same thing.
It has to, you know, when I import it,
that's the way that we know it's the same thing.
But one language item could be available
at multiple different import paths.
And so this is something that's a little bit far down
the language hierarchy, right?
It's not like, oh, it's just the struct, right?
It's like, what are all the paths?
Okay, it's the same one.
Fine.
So this is a bit of a repeating thing
that almost all of our queries use.
And adding one optimization that makes it possible
for TrussFall to know that it has an index available,
that it can in all of one lookup, you know,
what is the item that corresponds to this path
improved all 80 of our queries.
So we added a couple hundred lines of code
and we sped up cargo semper checks
by a factor of 2300 plus.
We get, like, you know,
three and a half orders of magnitude of speedup
with a couple hundred lines by adding this optimization
that just says, you know,
we keep looking up items by their import path.
Let's make that smarter, right?
And importantly, what we didn't do
is go through 80 individual queries
and optimize each of them independently, right?
So this gives us a massive amount of leverage
when building this tool because it means
that when people are contributing new lintz,
they don't have to worry about optimizations.
The optimizations are automatically applied.
So we have people who are, you know,
high schoolers and people who are still in college
and people who have never used TrussFall before,
people who don't know anything about static analysis,
who are contributing semper lintz
that are running with very high performance
and that are scanning, you know, everyone's REST packages
because we've taken the complexity of static analysis,
import resolution, performance optimization
off the table, sort of off their plate.
They're still handled, they're still happening.
It's just that people that are really good
at performance optimization do the performance optimizations.
People that are really good at static analysis
do the static analysis.
And people that want to write a lintz,
they write a lintz knowing that they get the best
of the other two worlds, you know, sort of handled for them,
expressed in the TrussFall schema
and made available to their queries automatically.
So I think that's kind of a paradigm shift
from how other tools are doing it.
And I think the benefit of this is something
that we've just become exploring.
I don't think we've fully realized the benefits
of what this sort of mode switch
of how tools are developed, you know,
what that could enable and what kinds of tooling
it could lead to.
Because ultimately this is a maintainability
when more than anything else, right?
Just trying to grasp the implications here.
And yeah, it's pretty big.
So it's read only, query only?
Is that true?
For the time being, yes.
I have some drafts for how it would be expanded
to be read right.
I have drafts for how to extend the language
in the system in many different directions.
So, you know, all of those will happen sooner
or later as a function of funding and interest.
But yes, there's no fundamental reason
why it has to be read only.
It just so happens that that's how far we've built so far.
I mean, this is a, this is a, I mean,
linting, for example, is a pretty broad problem.
And it's interesting that we're talking about, like,
what in some ways is a linting problem, but not exactly.
And again, I go back to the ideas,
like when I think about a tool like this,
generally think about like stitching APIs together.
But this is like so much more,
it's kind of, it's really, really interesting.
My favorite example since we're talking
about stitching APIs together,
at one point I got a little bit annoyed
because we had a flaky job
that I couldn't figure out what was going on.
So, I wrote a little trustful query
over a GitHub adapter that I haven't published anywhere yet.
But if someone's curious and listening to this,
pick me and I'll help you get set up.
I wrote a query that said the following.
Look up GitHub actions workflow runs
that have run more than once on the same commit
and where a job had a different outcome
between, you know, run A and run B.
And that just flagged all of the different flaky workflows
that we've had, right?
It just flagged here all of the jobs that have failed
and here the log outputs of each of the jobs that failed.
And so I could tell you, like,
this many of them failed because of a network glitch.
This many of them failed because we like failed
to install some dependency because the like registry
wasn't available.
And this is how many of them failed
because of some like intermittent issue
that some other tool had that we were then able to,
you know, report upstream and so on.
And if I hadn't had that ability to just write a query
and move on with my life, you know,
let it run for like, you know, 30 seconds
and then get a nice tabular review
that I could just, you know, dump into a viewer
and analyze easily,
I probably would never have done that query, right?
It's just like beyond the threshold of like,
is it even worth me understanding how to use the GitHub API
and all of the intricacies and quirks, right?
But given that I had this ability,
I threw this query together, I got some useful data
and some benefit came out of that.
And if we could scale this up, not just as the GitHub API,
not just as this particular query,
but to anything that anyone might be able to query,
I think we've just scratched the surface
of what is possible.
I'm super excited for what comes next.
I was reading through your posts and you said
there's lots of tools that are database querying,
tools in disguise.
What tools do you think those are
outside of the ones we've talked about?
Yeah.
I keep coming back to Linter's
because I think it's an underexplored area.
One big problem of adopting Linter,
let's say like MyPie,
in a big existing Python code base,
is that on day one, nothing works, right?
MyPie is angry and upset about everything.
But imagine that you could run a query that's like,
hey, did this pull request make anything worse, right?
Are there new errors that MyPie
was not flagging previously and is now flagging?
OK, disallow those specifically, right?
This is a thing that is useful for MyPie,
but it's useful whenever you want to enable a new rule
and a new tool and a new Linter, whatever it might be, right?
It would be useful for TypeScript if you want to be more
strict about using any, for example,
or things like that, right?
It would be useful in a variety of different places
in security, in a lot of the software development world,
a lot of the tools that we use.
A lot of compiler technology, next generation compilers,
many of them are actually query based.
The way that they do stuff is like,
hey, dead code analysis,
well, is anything using this piece of code, right?
For example, right?
If nothing is using this piece of code that I'm not compiling it.
This is one of those things that I think, you know,
a handful of people have figured out,
people have started talking about query based compilers
10 ans ago,
mais je pense que ça va vraiment prendre
encore 10 ans avant que ce soit un endroit commun
et un endroit de commune et commune.
Donc, je pense que nous devons nous protéger
et faire manifester le futur que nous voulons exister
dans le monde.
Je vais juste essayer de me rater mon tête
sur les implications de ça, je ne sais pas,
c'est super fascinant.
Je suis super excité de travailler sur ça.
Je pense que ça a un espace cool.
Je me rappelle, je parlais avec ce mec
qui travaille sur un outil appelé Better.
Et c'est essentiellement ce que c'était en faisant
de mettre des benchmarks pour des changements
dans votre base de code.
C'est comme si on avait un exemple de type script,
c'était comme si vous vouliez migrer
à un type check et un type script,
et que vous avez 100 ou 1000 erreurs,
ou quelque chose,
vous pouvez,
vous pouvez, incrementiquement,
check, vous avez un X number de erreurs,
et vous avez un X number de erreurs,
ou quelque chose d'autre,
et ça t'amène plus vite,
et ça t'amènera à un nouveau pattern.
Et ça me semble,
c'est comme l'un des choses
que vous pouvez impliquer,
à l'heure et à la fin.
Absolument, dans le passé,
j'ai construit un outil
pour me aider avec un autre projet
qui a répondu la prochaine question.
Quels sont les plus proches
de MypyConfig qui sont encore passées
pour cet projet.
Et si vous pouvez trouver ça,
ça évoque un genre d'envers qui est très intéressant,
un type de workflow où vous dites, OK,
je calculerai le plus strict possible
de la configuration type-checker.
Je vais checker ça dans le base de code.
Il n'y a pas de régression là-bas.
Aussi, quand le toulon calcule une nouvelle configuration
de MyPy, vous êtes forcé à checker ça.
Donc, le CI perd,
si vous avez déjà à la setting de MyPy,
vous n'avez pas de relaxation de la position que vous avez offert.
Donc, faites-vous que le toulon calcule
ne tient qu'à un moment.
Vous n'êtes pas capable de faire plus de choses.
Vous ne pouvez pas faire plus de choses.
Mais quand vous faites quelque chose de mieux,
ça ne peut pas se passer encore.
C'était le moyen de nous migrer
une base de code Python de 100 000 lignes
en utilisant le type.
De rien de type,
en utilisant le type productif.
Si ces types de tools
sont quelque chose que nous pouvons construire
dans un matin,
comme sur 3 mois,
je pense que c'est un meilleur rôle.
C'est certain.
Et le premier toulon que vous avez choisi
de construire sur le top de TrussFall
a été un problème très difficile.
Nous avons parlé un peu à ce point,
mais le Cargo Semvera Chex
a été construit sur TrussFall
et a été construit pour des règles naturelles.
Pourquoi avez-vous choisi Semvera
comme la première chose à s'attendre ?
C'est une bonne question.
Semvera est une des choses
très divisives dans la communauté
pour des raisons inférieures.
Semvera est une bonne idée.
Nous sommes vraiment malade
en faisant cela en pratique.
Les règles sont beaucoup plus complexes
que elles semblent.
Nous humains
sommes absolument atrociés
en faisant cela.
Je faisais Semvera et Rust
pendant deux ans.
Il n'y a pas de week-end
que je ne trouve pas
un moyen de ne pas avoir de l'accident
pour changer de cause
dans vos projets.
Si la barbe
est une version de PHD
et de semantique
et que vous travaillez
pour plusieurs années
exclusifement
avant que vous puissiez
être un maintenance productif
qui ne se débrouille
tout le monde
dans les projets
de tous les jours.
Ce n'est pas
un bon endroit.
Nous ne serons pas
beaucoup de packages
qui nous appellent Semvera
et nous ne serons pas
les bénéfices.
Mais si nous pouvons
avoir une complétation
plus belle
sans mettre
beaucoup de
Semvera,
de la professeur
et de la faute
de la friction de la tool
sur tout le monde,
le premier de Semvera
est vraiment, vraiment appuyé.
Je fais des cargés
ou des NPM
ou quelque chose
et tout de suite
je m'aimais
de milliers de heures
d'autres
métaillants
extrêmement smarts
qui travaillent
sur leurs propres packages.
Je les profite,
je les profite
et je les ai mis à l'aide
et je n'ai pas de
savoir de quoi
d'autre.
Je me suis rendu
une commande
et tout de suite
mon projet
est meilleur.
Donc le premier
est fantastique
et ce qui nous hold
est
notre capacité
d'actualiser
l'exécute.
Et quand
le push
vient de l'écho,
les règles
sont
complexes
mais ennumerables.
Il y a un nombre finit
et si nous pouvons
construire un tool
qui ne juste
vérifie
pas tout,
mais tout.
Les choses
qui sont les plus
communes
sont les problèmes.
Nous avons réussi
à réduire
le problème
de la sévérité
par un couple de
ordres de magnitudes.
Tout de suite,
Semver
est un couple
de ordres
de magnitudes
plus
utiles
pour tout le monde.
Et
il y a des millions
de personnes
qui utilisent
tout ce software
sur un basis
quotidien.
Donc
si nous pouvons
protéger
un
semver
qui coûte
un peu de 1000 heures
de la preuve de
productivité
et des millions
de dollars
de preuves
de plus de
productivité
qui ont manifesté
dans l'économie
et je pense
que c'est un
bon endroit
pour nous.
Et donc
c'est un des places

un petit
amount de investissement
et du temps,
du effort
et du ménage
peut avoir
un impact
d'un grand

des packages
de l'écosystème
de la vie des

et des vies
des end-users.
Pas seulement les gens
qui programment
mais les gens
qui utilisent
ce software.
Si nous pouvons
protéger
une
décision
de l'incident
de l'accident


de l'incident
de l'incident

de l'incident
de l'incident

de l'incident
et donc
que nous pouvons
protéger
c'est plus important.
C'est un problème
dans le système de l'écosystème
comme
juste
comme un truc
que beaucoup de gens
n'ont pas
dans leur packages
de l'engin
de l'économie
et
juste pas
que ça
cause
beaucoup de confusions
et
comme un maintain
de moi-même
je n'aime pas
avoir
la raison
de la version
semantique
comme
même en

dire
que je
suis
de l'économie
de l'économie
ça
fait
un
sens
d'institution
d'knowledge
que je n'ai
que de
faire
en
le field.
Absolument
et
c'est très
infortinent
que
maintenant
dans l'absence
des tools
comme les
services de l'économie
les
moyens
que nous éducons
en
enjuniers
et
en maintain
des règles
est
que
nous attendons
pour les
les
les
et
on
dit
que
on
ne
sait pas
ce que

avez
dit
mais
vous
avez
dit
que


sens
de
l'économie

l'économie
de la
plus

de
l'économie
et
ce
n'est pas
possible
encore
on
ne
peut pas
voir
tout le problème
qu'il y a
mais
il n'y a pas
de
problème
on
ne
peut pas
faire
de
l'économie
son
ma
de
On peut utiliser la même méthode et les tools pour construire la même chose pour type script.
Je ne pense pas que ça soit en train de travailler pour JavaScript, c'est trop dynamique.
Mais au moins type script, on peut pouvoir le faire.
Vous pourriez être surpris, en fait.
J'ai un linter pour Python qui a aussi une version semantique.
Je n'ai pas publié ça, mais si quelqu'un qui entend ça veut jouer avec ça,
donne-moi un ping et je vais vous aider à le faire.
Je veux juste polier un peu plus de la pièce du rough, avant de faire un grand push.
Je n'aime pas d'autres gens qui découvrent les edges du rough que je sais que je pouvais avoir trouvé et fixé.
Je suis un peu connu sur ça.
Mais si on peut le faire en Python, on peut le faire en JavaScript.
Et le type script est un problème plus facile.
J'ai essayé de ne pas le faire.
Chris Crycho, qui maintient les rules de semantique pour le type script.
Le site.
Pour construire un peu de ceci.
C'est un travail en progrès, je ne pense pas qu'il soit pas bien.
Mais si quelqu'un veut construire un checker semver pour le type script ou le JavaScript,
je vais être très heureux de vous aider à commencer par la utilisation de trusfall et de faire cela possible.
Je ne pense pas que c'est plus facile, mais que c'est moins difficile que ça.
Je pense que c'est un des trucs qui se sentent intimidés,
avant de le faire et avec un peu de persévérance, juste pour que quelqu'un puisse le faire.
Il y a des problèmes.
Je pense que c'est un grand problème pour le semver.
Est-ce que c'est un changement de break?
C'est une question très grande.
C'est la chose qui est la plus importante.
Mais il y a des questions semver qui sont plus semantiques.
Est-ce que c'est un bug fix?
Ou est-ce que c'est une addition de feature?
C'est comme un patch minaire.
Et peut-être que c'est une position qui est un peu moins signifiant
et plus humain.
Et même pour ce que c'est de break et ce qui est important,
il y a des cas où ça fait sens à faire un changement de break.
Si un maintainer a trouvé une sécurité de sécurité et une capacité dans leur package,
et le meilleur moyen de fixer ça est de breaker l'écosystème
parce que c'est juste si mal,
on ne veut pas rester dans le moyen de ça.
On veut dire à ce maintainer,
Hey, par contre, ce qui est break,
vous avez la bonne information qui est nécessaire pour faire une bonne décision.
Quelle décision vous pense que c'est le meilleur?
C'est pas vous qui ne faites pas le tour.
On ne veut pas le tour pour faire des mains entourées
et dire que vous n'êtes pas allowed à faire ce moment.
Vous n'avez pas de choix.
Le frein que j'aime vraiment est
que quand un maintainer utilise ce tour,
le tour doit donner à eux toutes les informations
comme si ils ne sentaient pas que
ils ont fait une décision qu'ils n'ont pas regretté
parce qu'ils n'ont pas la information
nécessaire pour faire une meilleure décision.
Donc,
minor vs patch,
dans mon opinion,
pas que important.
Je pense que la décision de la break
pour la protection des changements de break
qui causent beaucoup de fréquence et de frustration
est plus importante.
On a des choses.
C'est un changement minor,
mais ça peut causer des frustrations.
Vous devez peut-être penser à ça
dans les checks de carburant.
Je pense que ce sont des questions
qui sont juste la question de
où vous allocatez des ressources en priorité.
Maintenant,
les ressources sont récentes.
C'est un changement de break pour sure.
Ou,
avec une très grande probabilité,
ça causera beaucoup de fréquence.
Même si techniquement, c'est allowed
à comprendre les règles de sembr.
Les règles de sembr
sont très compliquées,
parfois très haïtées.
C'est bien de
faire des choses
où les gens veulent exercer
plus de carenements et de judgment.
C'est comme,
Hey,
ce n'est techniquement pas de break,
mais si vous vous révertissez ce commit,
ça sera un changement de break
pour surement
de faire quelque chose d'autre,
pour que ça soit un peu plus
plus safe dans le futur
si vous changez votre mind
ou un autre changement.
Ce n'est pas juste de sembr,
c'est juste en général.
Je vais pas regretter
ceci,
en bas en ligne.
Vous implementez
Magic Zero,
où vous êtes dans
version Zero,
et les changements de break
ne sont pas
vraiment changements de break.
RUST
est très intéressant
pour cela,
car la façon dont
le cargo implemente
sembr
est que
même les packages 0.x
ont des
responsables

Le cargo
ignore les 0s

Donc,
0.1
à 0.2
est un changement de majeur.
Mais 0.1
à 0.1.1
est un minor.
C'est intéressant,
je n'en sais pas.
C'est un des choses
que beaucoup de gens,
même dans le RUST
ne connaissent pas.
Donc,
le cargo sembr
implemente
les rUST rules.
Mais,
évidemment,
pour Python,
pour JavaScript,
pour TypeScript,
on veut adhérer
les rULS de l'écosystème.
Et au bout du jour,
pour beaucoup de choses,
même dans le RUST,
la communauté ne doit pas
avoir un consensus
sur les types de changements
qui doivent arriver.
Si vous vous mettez
les minimums supportants
de la version RUST
pour votre package,
est-ce que cela ne peut pas
faire un grand bâtiment
ou est-ce que le minor
est bien
ou peut-être pas?
Des packages
ont différentes normes,
et en ce cas,
le cargo sembr
dit
que c'est la responsabilité

pour communiquer
par la configuration
des options,
ce qu'ils veulent
adhérer.
Et les cargos sembr
vont appeler ça,
mais la configuration
est aussi machine-readable.
Et donc,
en dessous,
les outils et les outils
peuvent lire et comprendre
les choses qui sont
garanties et les réglages.
Vous avez mentionné
l'incident des croutes
de l'accident.
Comment pensez-vous
que le RUST
ne pourrait pas
avoir aidé?
Finalement,
je pense que
il y a un grand pressur,
surtout
quand vous êtes
une compagnie public
de la traduction,
pour construire des nouveaux
features,
pour avoir plus de customer,
pour
expérer les
product lines
et des choses comme ça.
Et beaucoup de temps,
les outils internes,
les outils développeurs,
l'expérience d'interne
et de l'externe
peuvent se faire souffrir.
Donc,
je ne pense pas
que ce genre de
incident
est causé par la compétence.
Je pense que
ce genre de incident
est causé
par
les gens
qui veulent
construire les outils
qui peuvent
présenter
ces issues
de production.
Ce genre de
Athena
?
Compris uncle,


Ils
defaultent


l'accompanyabilité,
non
que de la






pour un peu de VP à votre compagnie,
comme, peut-être j'ai pris deux heures
pour construire cette baisse pour que nous n'avons pas
ce problème encore,
nous aurons beaucoup plus de ces types d'incidents.
Et pas seulement le monde catastrophique
visible,
tous les vies se sont en train de se battre
pour quelques jours de ces problèmes.
Mais toutes les sortes de points de friction
où, hey, Github Actions est en train de faire deux heures
parce que comme un bad config est mis à la poutée.
Oups, non, personne ne s'est passé par ces baisse,
mais il y a un équilibrium.
Je veux barrer une phrase
de quelque chose que Patrick McKenzie a dit
sur le frôde,
il a dit que le nombre optimal de frôde est non-zero.
Le nombre optimal de production de breakage
est non-zero,
mais si la production de breakage
se prévient plus cher,
le nombre optimal de production de breakage
se rend plus cher
parce que c'est plus cher
pour la prévention,
donc il faut la prévention
plutôt que de la souffrir
les conséquences.
Donc, on a découvert
beaucoup d'interessants
de la utilisation pour la fête de la conférence
et de beaucoup de choses
que je ne serais pas
typiquement associé à un tool
pour faire,
ce qui est vraiment bon.
Donc, il y a cette
case de linter,
il y a des sortes d'agriculture
qui ne sont pas en contact avec les interfaces.
Est-ce qu'il y a d'autres zones
que vous ressentez
comme l'explorateur
au-delà des casques
que vous avez discutées
pour le tristet
où ça peut
faire des bénéfices
que peut-être
n'est pas évident
de l'exploitation?
Ce qui est très excité
est de faire
plus facilement
d'interact
avec des appels zillionaires
qui sont là-bas
et qui sont
sortes de techniquement disponibles,
mais vous devez comprendre
l'appel restant
ou l'appel graphique
ou l'appel client
ou tout le monde.
Parce que tous ces appels
n'importe comment simple
ils veulent présenter
eux-mêmes
ils ont toujours
leur petite idiosyncrasie
et des petites coureurs.
Et vous savez,
vous devez savoir
que vous pouvez
mettre ce point d'appel
qui est plus rapide
que ce point d'appel.
Vous savez,
il y a beaucoup d'efforts
dans mon avis
qui sont prêts
pour
gagner ce bon expert
qui n'est pas portable
d'un casque de l'autre
et qui n'est pas
probablement portable
d'une company
d'une autre.
Et je pense que
juste comme il y a beaucoup de
friction
en construisant
les petites coureurs
parce qu'il faut savoir
l'analyse statique
et l'engineering de performance
et avoir un truc concrète
que vous voulez vérifier
et tout de suite
ce sont les balloons.
Je pense que c'est aussi
un étage
dans
Hey,
je veux juste construire
quelque chose
que je ne sais pas,

surfaces
qui sont flakies
qui sont en train de
faire des workflows.
Ou
vous savez,
il me montre

le top 3
les repos populaires
que un nouveau candidat
qui a appris pour un travail
à mon company
a contribué
ou
des choses comme ça.
Right?

nous avons
des petites
petites coureurs
qui ont pris
une coureur
qui est essentiellement
une coureur
dans une coureur
comme une whole
coureur
à la top de ça
parce que c'est juste
trop difficile
de faire
tout le plomb
rapidement,
facilement,
compétentiellement
et
bundler
toutes ces petites
idiosyncrasies
de l'API.
Si on peut
faire
plus facile
d'interact
avec tous les API
avec bonne performance
par
de laur
toutes ces idiosyncrasies
dans un
état
qui comprends
les gens
et sortir
des rouges
sous les rouges
automatiquement
appris
à quoi
cacher
battre
magie
est nécessaire
pour le faire
tout ergonomique.
Je pense que
ou
à l'un des
1000
entreprises
vont avoir
à travailler
beaucoup plus
difficile
pour nos dollars.
Mais
seconde
balle,
on va avoir
beaucoup plus
de tools
que nous
connaissons
ce qu'on va
faire.
Vous savez,
la
delta
entre
Hey,
n'est-ce pas
bien
si
et
en fait
avoir
ce
chose
en production
peut aller
de
vous savez
des mois
pour
j'espère
l'heure
et l'idée
même
minutes.
Ce n'est pas
quelque chose
qui va
arriver
à l'heure
de la nuit.
Il y a beaucoup
de travail
qui doit
arriver à l'heure.
Mais
j'ai fait
beaucoup de prototypes
personnelly
beaucoup de
ceux
qui n'est pas
l'heure brauché
mich
de
ça
été
du
regard
c'est




C'était fantastique, je ne peux pas attendre pour aller plus vite.
Je me sens comme si il y avait un projet de recours ici.
Je ne sais pas, je vais le faire.
Peut-être qu'il y a quelque chose à travailler sur.
Mais c'est un très bon tour, un topic très intéressant.
Merci beaucoup pour votre compétition.
C'est incroyable, j'ai hâte de vous en profiter.
Et le cargage de la Sampfer Chex est très contributaire.
Donc, si quelque chose se démarre, si vous voulez faire un tour de lintes ou
construire une optimisation ou deux, je serai très heureux de vous en profiter dans la bonne direction.
Pas juste vous Justin, mais tout le monde qui l'a écouté.
C'est un projet d'opinion de source.
C'est pour le bénéfice de la communauté.
Je suis très heureux de vous m'entrer.
Vous n'avez pas besoin d'une telle force.
Tout ce qu'il vous faut est un petit peu de la détermination de l'album.
Tout le reste est totalement bon et ça va arriver.
Sous-titres réalisés par la communauté d'Amara.org

Les infos glanées

Je suis une fonctionnalité encore en dévelopement

Signaler une erreur

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
Card title

Lien du podcast

[{'term': 'Technology', 'label': None, 'scheme': 'http://www.itunes.com/'}]

Go somewhere