How to be Pythonic? Design a Query Language in Python
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 130 | |
Author | ||
License | CC Attribution - NonCommercial - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/50094 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
EuroPython 2020115 / 130
2
4
7
8
13
16
21
23
25
26
27
30
33
36
39
46
50
53
54
56
60
61
62
65
68
73
82
85
86
95
100
101
102
106
108
109
113
118
119
120
125
00:00
Query languageSoftware developerShared memoryTouchscreenProcess (computing)WebcamRelational databaseRight angleComputer hardwareSystem callComputer virusComputer animation
01:11
Formal languageQuery languageSlide ruleLink (knot theory)Multiplication signOpen setHypermediaProjective planeStreaming mediaComputer programmingProcess (computing)Slide ruleGraph (mathematics)DatabaseQuery languageOpen sourceBitSign (mathematics)Program slicingShared memoryEvent horizonComputer animation
03:20
VotingMotion captureLink (knot theory)Arithmetic mean2 (number)VotingQR codeGoodness of fitResultantBitMultiplication signComputer animation
04:37
DialectResultantMultiplication signComputer animation
05:04
VotingFormal languageCodeStack (abstract data type)Loop (music)Java appletMultiplication signStandard deviationQuery languageFront and back endsBookmark (World Wide Web)WebsiteRight angleCoefficient of determinationArithmetic meanLoop (music)Software bugCodeGoogolElectronic mailing listSubject indexingClient (computing)Buffer overflowComplex (psychology)FluidLine (geometry)Different (Kate Ryan album)Goodness of fitStack (abstract data type)Computer animation
08:53
Link (knot theory)Directed setZoom lensLink (knot theory)
09:17
Formal languageVotingBitRandomizationQuery languageVotingLink (knot theory)Multiplication signCASE <Informatik>ResultantMobile appVideoconferencingDatabaseComputer animation
10:13
VotingSoftware developerClient (computing)Query languageInstallation artQuery languageMathematicsFrame problemDialectMultiplicationParameter (computer programming)ChainingMultiplication signBitHand fanTable (information)Raw image formatResultantRevision controlLevel (video gaming)Software developerFrame problemQuery languageStructural loadClient (computing)DatabaseComputer configurationChainLink (knot theory)FamilyFront and back endsLine (geometry)Object (grammar)Graph (mathematics)Data storage deviceTheoryScripting languageNetwork topologyComputer programmingRelational databaseSequelData conversionElectronic mailing listDifferent (Kate Ryan album)NumberCore dumpDigital photographyDescriptive statisticsParameter (computer programming)Term (mathematics)BuildingMathematicsCodeString (computer science)PiWave packetDebuggerSlide ruleComputer animation
18:30
VotingParameter (computer programming)MultiplicationChainingChainResultantComputer animation
19:26
Directed setInformation overloadOperator (mathematics)Operator overloadingInformation overloadQuery languageInheritance (object-oriented programming)Interpreter (computing)Multiplication signOperator (mathematics)TrailRevision controlGoodness of fitSurvival analysisComputer animation
22:09
Graph (mathematics)Visualization (computer graphics)Structural loadFrame problemClient (computing)Common Language InfrastructureDatabaseRevision controlProof theoryoutputLattice (order)TwitterQuery languageFrame problemSoftwareTable (information)ResultantGraph drawingMultiplication signPiLaptopFunctional (mathematics)SyntaxbaumFront and back endsField (computer science)Server (computing)Network topologySpring (hydrology)Client (computing)Graph (mathematics)Revision controlDatabaseTwitterTelecommunicationSlide ruleBitInteractive televisionComputer animation
25:22
Communications protocolBitCloningVideo game consoleTheoryInterpreter (computing)Revision controlDebuggerFront and back endsOpen sourceClient (computing)Data storage deviceSequelSoftware repositoryReading (process)Graph theoryCybersexGraph drawingGraph (mathematics)
27:28
Token ringGraph (mathematics)Level (video gaming)Graph drawingVisualization (computer graphics)Revision controlClient (computing)Video game consoleObject-oriented programmingLibrary (computing)Query languageMultiplication signResultantScripting languageNeuroinformatikMoment (mathematics)Graph (mathematics)
29:15
Query languageType theory
Transcript: English(auto-generated)
00:06
We have all kinds of technical problems today, but that's the fun with EuroPython. One of the problems that you can have is like a webcam not working, so I'm spotlighting our next speaker already so that you can see Joke.
00:20
Hello. Welcome to EuroPython. Thank you. So you're a developer relations lead at TerminusDB, and you've prepared a talk for us today. Yes. Yes, that's my full-time job. Yes, your full-time job. I do have a job, yes.
00:41
That's great. You're calling in from London, right? Yes, that's correct. I'm in London. And let's see. I can see you now, actually. Yeah, this is the fun thing. Things break sometimes if you run this on your own home hardware, so it's great that the camera is back.
01:00
I have no idea what went wrong, but I would say it's better that it breaks on my side than on yours. So if you would like to, please share your screen, and then we will get on with the conference. Okay, so I will just get started because we are running a little bit late already. So yeah, so welcome to my talk, and I always, always have this habit of putting my
01:23
Oh, actually, the slides is, well, I just thought my first typo is wrong. It's slides.com slash Chuck Ting and then slash be Pythonic, so it's not a bitly link, but anyway, I would share it afterwards. So yeah, I share my slides, and how to be Pythonic, the sign and query language
01:41
in Python. And those are my social media links below, so you could actually find me anywhere. So I'm Chuck. I love open source projects. So I've been, you know, working in a lot of open source projects, and recently, I not recently, but like, I mean, like my full time job is working with Terminus DB, we are an open source, open source graph database that, you know, you can work it
02:05
like it so you can share, you can, you know, collaborate with people, you can do branching and merging and all those kinds of stuff that you do with Git, but in a graph database. So I also organize a lot of different, you know, events, including Euro Python here, and also PyData Global, I've talked about it yesterday in my licensing talk, you know,
02:27
CFP is closing soon, and we have PyJAMAS towards the end of this year, so yeah, contact me if you're interested in more, this kind of conference, and yeah, I won't spend too much time on this one, but to tell you this here, but please, please
02:42
get in touch if you're interested in submitting to PyData Global or, you know, want to get involved in PyJAMAS. Also, I stream on Twitch, like yesterday, Naomi in her, sorry, in her keynote, then like she put like a screenshot of my Twitch at the background, and I was like,
03:02
whoa, okay, so yeah, if you want to watch more of my tutorial, just, you know, find me on Twitch, I am online usually four times a week, and there will be tutorials, or in Python, and also other, you know, channel, like other programs that like I would talk about things, well, I really like, you know, really
03:23
catch my tongue today, because like, I think I'm, I just woke up actually. So, so first of all, I would love to have this poll, so if you're watching right now, so this is, you know, you can use your phone, you can, you know, just take us, you know, a capture of this QR code, or go to this link here, and do the poll, and I am starting it right now, actually.
03:43
So I go there, and so yeah, I would just want to ask the questions that like, what does Pythonic mean, is it a thing, so yeah, like I would just give you like maybe a few seconds to do it, because I don't have like, I have a short talk today, so they're like, I can see how many of you
04:01
have voted, it's only free, come on, let's do it, yeah, maybe I'll give you a little bit more time for the first one, because it's difficult to go to the link and stuff, so yeah. And, because I will show the results, I will show the results, so please participate, and that's why like we do it live here, so do you think Pythonic is a thing, do you think like, you know, it's actually a thing,
04:22
or people just like, you know, try to, you know, be smart, or you know, so yeah, I can see the vote is going up, that's good, that's good, love seeing all of you participating, and let's go to, let's go to result and have a look, so, oh, I'm polling myself, no, this is not
04:40
supposed to be, so give me one sec, I got to quickly go to the result here, I don't know why it's showing me, yeah, okay, so, and I would just give a pause here, and most of you actually said that it's actually 23 of you said that it's, yeah sure, it's a thing,
05:01
so yeah, well, this is like even more than last time I did this poll, like people really think that Pythonic is a thing, and so I am very interested because I have been using Python for a while, and this really bugs me, and I go to look it up online, you know, ask Google anything, so I found this on Stack Overflow,
05:22
this is one of my favourite websites, and someone said that Pythonic means that the code just doesn't get the syntax right, so it just doesn't execute, but it's, you know, using Python as a way that is conventionally like people agree to use it that way, so it's accepted by the Python community, I think
05:41
it's a very good way of putting it, so that's why I put it here, and so in a nutshell, I would say that it's more like an artistic thing, so it's not right or wrong, it's more like whether it's beautiful, it's appealing, it's good looking, but just, beauty is not a right or wrong, right, because beauty is at the beholder's eye, you know, you
06:01
can think that this doc is cute, or someone may say that, or they'll know this doc is scary, you know, so yeah, like everybody can have different opinions on it, but there is a general, general kind of agreement on some standards, for example, like we have, you know, beauty queen contests, and people would, you know, pick one that, you
06:22
know, that they think that could represent their country, that is our standard of beauty, and things like that, so that's something that I ask a lot when I would just start a Python, when I, because I was a data scientist, I was, yeah, I started Python because, you know, of data science, and I, I used Panda a lot, and I was like, why I have to do
06:42
things this way, why I can't just write a follow to do it? Well, you could write a follow to do it, but you are not making use of the advantage of using pandas, because pandas, you know, is very optimised, at the back end is use NumPy, and NumPy is super optimised, so if you do
07:01
the things like, for example, aggregation, using, you know, their intended way to do it, rather than just doing it in a for loop, that is so much faster, and also, you know, this is not Python, I hope you notice, this is Java, I think, or JavaScript, things like that, yeah, I can't really tell, but you can tell from like the semicolon,
07:22
and like this is not Python, but you know, well, you could, you know, put it like in a very simple for loop in Python, this is something I came across a lot when I am doing my journey of, you know, I will explain later, but it's a spoiler that I translate a lot of code
07:40
from JavaScript to Python for the Terminus DB client, and some of the things that I see all the time is that JavaScript, you have a for loop like that one, the one on top, and it's really complicated, and it could become really big and very difficult to see, because, you know, there's a lot of dictionary, and like travelling fluid, you know, well, it's a JSON
08:00
in JavaScript, but like travelling fluid with an index is an extra layer of complexity, and with Python, you can just loop through all the items, that's amazing, and of course, like, if it's something very simple, you can even make it into one line, use, you know, a list composition and things like that to generate it with just one line, that's Pythonic, that's amazing,
08:23
so, and I think that like a lot about Python is that, you know, when you check whether something is in a list, you can just like check it, whether that's in the list, like rather than like going through it, like or using index off, like the JavaScript, so that's really great, so, before I talk about how we decided query language in Python,
08:42
I want to ask a question, so again, go to your polling, and I'm starting the next question right now, I hope that is working, and so let me have a look at this one, and oops, it's a bit difficult for me to switch between all these tabs, because the zoom thing is on the way, okay,
09:01
so this is done, so let's move on to the next one, so how can I move on to the next one, I think I just like, the next one, and do you like SQL, so I have started a poll, so you should be able to vote it, I will go, do you still have the link, okay, I will just go back to the link here, so in case you just join the video, okay,
09:21
so please vote whether you like SQL or not, yeah, I'm hiding the result, because I don't want you to be affected by it, so yeah, well, I hope you have used SQL before, it's the most common query language right now,
09:40
and I don't know how many of you are dealing with data, or you don't have to be a data scientist to deal with data, like if you, for example, if you build a backend, or a database for your, let's say, Django app, then maybe you also have to deal with the data, so I don't know whether you like writing SQL in Python,
10:02
I mean, you could use SQL alchemy on this to execute SQL in Python, so I don't know whether it's your thing, so okay, I think that time's up, so sorry, it's a bit random here, because I have to really make use of my time, and okay, so it's kind of not that diverse, it's like more or less like 50-50,
10:21
but there's a little bit more people saying that they are not a fan, which is surprising, because last time I did it, it's like lots of people say that they love it, last time I did it in Pi Amsterdam, so yeah, I don't know, like maybe the composition of people joining is a little bit different, so it all started when I became a developer advocate of Terminus DB,
10:42
so what is Terminus DB? I just want to spend a few quick introduction of it, so this is a table, you have seen it all the time, this is something that you came across quite a lot, especially in relational database, so here, when you look at it, you'll be like,
11:01
okay, I see some people's name, I see some dates of birth, so maybe it's a list of people, but well, it takes you a while to understand what is mother and father, well, it's mother and father, but like, it's number, it's not a name, so what's going on here? And then you look at the beginning of this table and say, like, you see, like, person ID,
11:21
oh, so maybe I should map it, map the mother and father to the person's ID, I join the table again, joining a table, common thing, joining it again, and then I would get the answer that I want, maybe I can find out who is John's mother or John's grandmother, you know? But what if, like, I just, like, store data like this,
11:41
like, rather than I don't have to mentally join things, because, you know, this one is more obvious, you don't need to spend time on, like, figuring it out, we just look at it, it's a family tree, it's a family tree, and then, like, it's color-coded as well, like, you know, it's very easy to see Mary's John's mother and Patricia and Sally is John's grandmother, you don't have to do the joins,
12:01
and in query language, it's like, this is how you find the answer in SQL, you have to, you know, do a select, and then, you know, select, and then do a join, and I'm not a big fan of that, because sometimes it's very, like, it's, again, it's like, why I can't do it, like, in the program, or why I have to join this table again, aggregate and join it back to itself again,
12:21
is a nightmare, it could easily become, like, a thousand lines of SQL, it's like, what? But, like, what if, like, we write things like that? So this is what is happening in Terminus DB, that, like, when I joined, they have this, this JavaScript client that they have a query language called waco.js, so this is, well, this is not Python,
12:44
this is JavaScript, we can see, oh, there's no semicolon here, but it's still, you know, this is JavaScript, and so I just copy it from the example, but, you know, it's, again, you know, it's query language in waco, and then you just, because everything is stored in a graph,
13:01
remember, it's a family tree, so everything is just a relationship, it's a triple, so you can see that, like, a person and the relationship mother, and it gives me the mother ID, and you can find, like, do it one more level up, you can, like, have mother ID, mother, and then that would be grandmother ID, and then in between, I just, like, kind of,
13:20
I need to give out the name rather than ID, so that's why I have four kind of things here, but, you know, in theory, it's just two, it's just that I need the name, so I kind of make it more, and so, yeah, I was thinking, that's really nice, that you can kind of just, you know, build a query, like, rather than SQL,
13:41
you have to write all this join thing, and then make it into a string, and put it in your script, I want to use, you know, do something like that in Python, I want to just, like, you know, a query is just a Python object, and building things, and, you know, some of them are a little bit chaining, or, like, putting in parameters, and construct your query in a Pythonic way, so, well, let's create waco.py,
14:01
let's, you know, make those JavaScript, that awesomeness, into Python awesomeness, I just, yeah, I want to make it a query language for Pythonista, for data scientists, and the team say, yes, like, wonderful, wonderful, so we can do it now, so what is waco.py? So, first of all, it's something, like,
14:22
when I was planning it, I was like, okay, it must be something that you can pip install, right, because, well, otherwise, you know, it's not as convenient, because the PyPI is great, you know, and people can, you know, just install stuff very easily, and also, well, not, well, it's like a few months ago, we added this data frame, you know,
14:44
it's extra, you know, data frame option there, so if you install it, it will install some pandas, so it actually let you talk with, you know, pandas, so when you get a result back from your query, then actually, it will just build a data frame for you, rather than, like, you know, it's like,
15:00
natively, it will be a dictionary, because it use JSON, and then when it comes back, it will become a dictionary, but this will become a pandas data frame, we all love pandas, you know, so, and also, you know, yes, yes, so that's how you call it, just dump the result in it, so that's great, okay, so, so the query, actually, this is actually,
15:23
well, you do everything in Python, you can create a database in Python, you can connect to any database in Python, you can delete it in Python, if you want to, you can build a schema, because it's a graph database, you can build a schema graph with Python, you can, you know, load in the data in Python,
15:43
you can, you know, query, and get back the result in Python, and even in pandas data frame, so it's all Python, it's just a Python script, you can do everything like this, rather than, you know, this is the raw format of Raco, it's just a JSON that lets the frontend
16:01
talk to the backend, so, no one wants to code like this, like, yeah, so, without that, you know, Raco Pi, so, well, you could, well, you have to, you know, really construct this, so it's like SQL, you construct the query, like, as a string, and send it, you know, to your database, but,
16:20
because the protocol for TerminusDB is JSON, so if you don't have the, if you don't have the Python client, you have to construct this JSON yourself, and use, you know, and pass it, you know, maybe, well, we have an API, so maybe you can just use request to send it, you know, and this is not nice,
16:43
and now, because recently, we have also launched this branching, merging, and all these abilities, it's not in the slides, because it's very new, it's the, you know, branching, merging, and cloning, all this stuff, so now you can even do it with the Python client, so you can fully control, you know,
17:02
a version control your database with just Python script, so that's what we want to do, and so, again, like, this is something new that I recently think that it would be great, because last time I gave this talk at the Pi Amsterdam, and that people was like, someone said,
17:22
you know, well, people prefer, you know, to have this, you know, label and description, putting it as a parameter, rather than, you know, just a chain, so this is how Wacom JS was like, it's just chaining a bunch of calls, a bunch of methods, and then it would just build a query
17:40
at the end, so afterwards, this object will be the query that you want, but I think it's like maybe in Python, people don't like this as much, I don't know, you have to show me, I will have another poll for that, so I created this, and now you can actually do both, but I just want to know, what do people prefer, like, if you are given these two options,
18:01
if you are writing your terminus DB query, will you write it in a chaining kind of way, more like what we used to have, or this new way of, like, putting label in there, so I'll start the poll now, and so you can go to the link there and start, and let me see, and yeah, so please answer the questions,
18:24
and yeah, I hope this is working, or do I have to click this, sorry, let me have a look, no, yeah, it's not there yet, so let me move on, and yeah, you should be able to vote now, yes, yeah.
18:41
Right, right, right, right, so yeah, oh, I supposed to hide it, I don't know, but like, you don't see which one is which, so it doesn't matter, just pick which one you prefer, and we will have a look at the result, and yeah,
19:01
so, yep, so I think it's the last chance, like, to vote, I really, this is the question that I really want to know, like, what do people prefer, because, well, you can do both, but I just want to see, like, where the, yeah, people still prefer the multi-parameter way,
19:20
or maybe people think that chaining is also beautiful, I want to know which one is more pythonic, so yeah, okay, so I should really have a pause here, okay, so people prefer multi-parameters, so that's great, I was not guessing wrong, so that's good, that, you know, that's really, really good, and yeah,
19:43
so now you can do this, we added this method, so I hope this is a good news, so if I'm the minister who prefer, like, that one rather than the other, so I would tell you also some of the design challenges that I have, anybody spot anything wrong here, I know that you can't answer me,
20:01
and I'm not looking at the chat in the track, but if someone's spotting it was wrong, then I am trying to look at the chat right now, but yeah, you can say it there, and whether people can, so yeah, what's going wrong here is that python, you can't have a method like this,
20:21
you can't have a method like this, so and is a keyword, so we can't have a method using just and, I know that if you're a python guru, maybe it's a way that you could do that, maybe change the interpreter or something, I don't know, but for me, I was like, oh no, you can't, yes, somebody spotted the and, yes, in the chat, great,
20:44
so yeah, so that's why I make it a wacko and, so wacko, underscore and, but that's horrible, it's super long, you can see that compared to the JavaScript, this is super long, and it's very cranky, I don't like it, I don't like it, it's like a lot of things to type,
21:01
as I'm horrible with typing, and so, just like recently in the newest version, I added the plus operator, so the operator overload is really quite nice in Python, all my colleagues was like, oh yeah, yeah, you can do it in Python, well, they didn't think about that, but I didn't think about that myself as well,
21:21
someone suggested to me last time in PyAmsterdam, I think that's why I love giving this talk, and people can suggest to me what they think that is good, so I could, you know, I could add that in, so the plus operator, thank you for letting me know that, you know, actually I was having this like kind of,
21:41
oh, maybe I can make it more like, you know, more native Python, but I think some operator thing like overload there, but someone mentioned it, I was like, yeah, then let's do it, that's really good, I still have problem with or, not, as, from, they're all like keywords in Python, so if you think of any other like elegant way to do it, please let me know, so yeah, now you can like just,
22:04
you know, add all these queries together, you will see that when you use, or I encourage you to try this out, but like when you see that like it's actually good to have a plus because you would join all these queries together quite often, so looking into the future, what we want to do, and well, this is, this is a pandas data frame,
22:27
and you know, in Jupyter Notebook, I have done this tutorial in Jupyter Notebook, and this is the result that I got back, and this is, you know, I've talked about that we used a data frame function that we could put it into a data frame like this,
22:43
and what if we have a graph visualization in Jupyter Notebook, I know that, you know, recently I discovered that using Bokeh, you could have interactive graph, and also, but Bokeh, you can also use it in, you know, to use it with network X to make a graph visualization,
23:01
a network graph visualization, but that's not very nice, there's no label there, it's a bit like difficult to use, so I'm thinking like having a nice graph visualization will be great, so loading data from data frame, well, we, because now we just like, we just turn the result back into the data frame, but we can't just like put a data frame
23:20
and then just push it as a knowledge graph, that requires a little bit of guessing because like it's easy to see like how the result can come back as a table, but it's difficult to see like how your table could map properly into a knowledge graph, that does need a lot of, you know, a bit of work, and we want to see our clients,
23:41
and I'm thinking like, well, it's easy, we just move a click, but the only problem is that like, now because we will have hub, which is like kind of a lock-in thing, so there's some like JWT off all kind of communication to the server, so that need to be solved, and we are still working on it, and I want more fail-proof checks that, you know,
24:02
I want to, you know, to warn the user before we push things to the backend, because it may be a big query, and then be something for, you know, a typo or something for a tree field, but like it will still go to the backend, and you just waste some time that it will turn out to be a bad query,
24:21
and so, yeah, maybe checking, also like checking the versions, sometimes, you know, like people are not using the same version of the database, and the Python client, if they're not compatible, we should warn them, so yeah, I think that's it, I still have a few minutes for Q and A, as I see there's some questions coming in,
24:40
so join us, bring tomorrow, we will have the sprint, we'll work on the Python clients, this is my baby, so please come and help me, and also, we have, you know, the world of vocal craft is one of my tutorial, every Friday, 5 p.m. UK time, a CST will be 6 p.m.,
25:00
so this week, I think you will prefer a Gritos Q and A, but you know, you can join me next week, so I will teach you how to use it, how to use Wacol Pie, and also, you know, follow us on Twitter, you know, we have a Discord community, so join us at the Discord community, and so I will leave you with these slides and questions.
25:24
Okay, first, thank you very much for this talk, and there's not really, all the questions are coming in, so hello, Simon, can we somehow extract the W-O-Q-L interpreter so it can be used outside of Terminus DB?
25:42
Okay, I'm reading it, so, sorry, could you repeat, like, oh, the Wacol interpreter, is it, yeah. Yes, basically, can you do the interpreter without Terminus DB, so can you just use that? Yes, well, actually, Wacol is designed for Terminus DB,
26:01
so you need something that kind of take the same protocol, so in theory, you could build something, because we are open source, you can make a clone of it, and then, you know, you can change it, you know, change the store or something if you want to, and it will still talk well with Wacol, but the problem is that, you know, like, because I don't know why you would do that,
26:21
because, but, you know, we are open source, you can totally make your own version of Terminus DB, but that also work with Wacol, that's still fine, but if you want to, for example, pluck it to, you know, use it with MySQL, then no, or pluck it to use with Neo4j, no, because Neo4j use cyber,
26:41
so it won't work that way, it's just, yeah, it's a protocol to talk with, you know, for the front end, you know, the client to talk with the backend, which is the Terminus DB, so Terminus DB is built with a prologue, actually, if you're interested, you can actually totally, you know, look at that rapport,
27:01
and we love contributors, so, yeah. Okay, there's another question in the chat on the talk channel, for the graphs, does the JavaScript client have a graph visualization? Yeah, actually the console, so we, okay, so it's a little bit explaining what we have right now,
27:21
so right now if you, you know, we have a console that is kind of like a front-end thing, I cannot show you here, actually, I hope I have one running locally, so yeah, local host, I hope it's still running, I haven't stopped it, so you can actually get this for yourself, and you know, this is a, you know, a console,
27:41
and then here, actually, if I go into any one of these, and you see that this is, oops, yeah, my computer is super slow at the moment, I think because I'm doing a lot of streaming, oh, it doesn't want to work, okay, so you can actually make a query here, so here, I can make all the queries and all the stuff,
28:01
so yeah, so what was the question again, sorry. The question was for the graphics, does the JavaScript client have graph visualization? Right, so it actually has, so let me see if I can do this, so this is not planned, right, so I don't know whether it would work,
28:21
oops, barcode is not defined, whether I spelled it wrong, or, yeah, so can I get the result, please? No, it doesn't, I don't know what I've done with it, but actually, you can see it in a graph visualization, it's not here, but before, because we have two versions,
28:42
so in the previous version, we have a graph visualization that you can actually put in a script, and the script can basically let you control, it's like plotting with Map or Lib, let's say, you can control how it looks, you can control which to show, which not to show, and things like that, but right now, well, we still have the visualization,
29:02
but all this customization is off temporarily, because we have to upgrade it from our previous version to this version, and yeah, and it kind of, yeah, takes some time. I think we'll have to move the rest of that into the chat, so thank you very much for the talk.
29:20
If somebody presses Control-K and types a query, he will find the chat and can continue this, so thanks for the great talk, here's your applause. Thank you.