[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.56,0:00:03.36,Default,,0000,0000,0000,,thank you very much okay so let's get Dialogue: 0,0:00:02.48,0:00:06.48,Default,,0000,0000,0000,,started Dialogue: 0,0:00:03.36,0:00:09.60,Default,,0000,0000,0000,,so i already introduced my talk uh Dialogue: 0,0:00:06.48,0:00:12.96,Default,,0000,0000,0000,,i'm gonna share my screen here Dialogue: 0,0:00:09.60,0:00:13.68,Default,,0000,0000,0000,,and yeah so basically there will be Dialogue: 0,0:00:12.96,0:00:15.92,Default,,0000,0000,0000,,three parts Dialogue: 0,0:00:13.68,0:00:19.28,Default,,0000,0000,0000,,in this talk the first part is about the Dialogue: 0,0:00:15.92,0:00:21.52,Default,,0000,0000,0000,,ecosystem the graphql ecosystem in php Dialogue: 0,0:00:19.28,0:00:23.20,Default,,0000,0000,0000,,it does exist and it is actually quite Dialogue: 0,0:00:21.52,0:00:26.24,Default,,0000,0000,0000,,large Dialogue: 0,0:00:23.20,0:00:27.36,Default,,0000,0000,0000,,then how to choose the right library for Dialogue: 0,0:00:26.24,0:00:29.92,Default,,0000,0000,0000,,your project Dialogue: 0,0:00:27.36,0:00:30.48,Default,,0000,0000,0000,,if you're doing some php and finally a Dialogue: 0,0:00:29.92,0:00:33.52,Default,,0000,0000,0000,,demo Dialogue: 0,0:00:30.48,0:00:36.72,Default,,0000,0000,0000,,of graphqlite Dialogue: 0,0:00:33.52,0:00:40.08,Default,,0000,0000,0000,,so um about the ecosystem Dialogue: 0,0:00:36.72,0:00:42.00,Default,,0000,0000,0000,,well i'm sure all of you already know Dialogue: 0,0:00:40.08,0:00:44.24,Default,,0000,0000,0000,,that when you're doing graphql you need Dialogue: 0,0:00:42.00,0:00:45.60,Default,,0000,0000,0000,,a graphql client in the browser and a Dialogue: 0,0:00:44.24,0:00:48.32,Default,,0000,0000,0000,,graphql middleware Dialogue: 0,0:00:45.60,0:00:49.36,Default,,0000,0000,0000,,on the server side and you have actually Dialogue: 0,0:00:48.32,0:00:52.48,Default,,0000,0000,0000,,implemented Dialogue: 0,0:00:49.36,0:00:56.40,Default,,0000,0000,0000,,implementations of graphql middlewares Dialogue: 0,0:00:52.48,0:00:59.04,Default,,0000,0000,0000,,in all in many languages Dialogue: 0,0:00:56.40,0:01:00.00,Default,,0000,0000,0000,,of course not js it started there but Dialogue: 0,0:00:59.04,0:01:03.04,Default,,0000,0000,0000,,also php Dialogue: 0,0:01:00.00,0:01:06.32,Default,,0000,0000,0000,,java c-sharp or whatever Dialogue: 0,0:01:03.04,0:01:10.08,Default,,0000,0000,0000,,today we're going to be zooming on php Dialogue: 0,0:01:06.32,0:01:12.56,Default,,0000,0000,0000,,and if we have a look at the php Dialogue: 0,0:01:10.08,0:01:13.36,Default,,0000,0000,0000,,graphical middlewares there are actually Dialogue: 0,0:01:12.56,0:01:16.64,Default,,0000,0000,0000,,two kinds Dialogue: 0,0:01:13.36,0:01:17.60,Default,,0000,0000,0000,,of uh such middlewares and i will split Dialogue: 0,0:01:16.64,0:01:20.88,Default,,0000,0000,0000,,them Dialogue: 0,0:01:17.60,0:01:23.92,Default,,0000,0000,0000,,a bit arbitrarily arbitrarily in two Dialogue: 0,0:01:20.88,0:01:24.80,Default,,0000,0000,0000,,uh sections ones that i call core Dialogue: 0,0:01:23.92,0:01:26.48,Default,,0000,0000,0000,,libraries Dialogue: 0,0:01:24.80,0:01:27.92,Default,,0000,0000,0000,,and another that i call dropper Dialogue: 0,0:01:26.48,0:01:30.88,Default,,0000,0000,0000,,libraries and Dialogue: 0,0:01:27.92,0:01:31.44,Default,,0000,0000,0000,,core libraries are actually middlewares Dialogue: 0,0:01:30.88,0:01:34.88,Default,,0000,0000,0000,,that are Dialogue: 0,0:01:31.44,0:01:39.36,Default,,0000,0000,0000,,quite low level they are used to parse Dialogue: 0,0:01:34.88,0:01:42.56,Default,,0000,0000,0000,,the graphical queries to serve Dialogue: 0,0:01:39.36,0:01:45.28,Default,,0000,0000,0000,,the the the response in json Dialogue: 0,0:01:42.56,0:01:45.92,Default,,0000,0000,0000,,they are really powerful but they are Dialogue: 0,0:01:45.28,0:01:48.32,Default,,0000,0000,0000,,kind of Dialogue: 0,0:01:45.92,0:01:50.00,Default,,0000,0000,0000,,hard to use the the developer the Dialogue: 0,0:01:48.32,0:01:53.12,Default,,0000,0000,0000,,developer experience Dialogue: 0,0:01:50.00,0:01:55.68,Default,,0000,0000,0000,,to use such uh library is Dialogue: 0,0:01:53.12,0:01:56.48,Default,,0000,0000,0000,,kind of poor they're hard to use and so Dialogue: 0,0:01:55.68,0:01:59.76,Default,,0000,0000,0000,,on top Dialogue: 0,0:01:56.48,0:02:01.84,Default,,0000,0000,0000,,of those core libraries people build Dialogue: 0,0:01:59.76,0:02:03.92,Default,,0000,0000,0000,,wrapper libraries which are actually Dialogue: 0,0:02:01.84,0:02:06.40,Default,,0000,0000,0000,,libraries that use core libraries Dialogue: 0,0:02:03.92,0:02:07.52,Default,,0000,0000,0000,,and that are more high level more Dialogue: 0,0:02:06.40,0:02:10.16,Default,,0000,0000,0000,,opinionated Dialogue: 0,0:02:07.52,0:02:12.72,Default,,0000,0000,0000,,certainly easier to use maybe not that Dialogue: 0,0:02:10.16,0:02:15.20,Default,,0000,0000,0000,,not as much powerful as the call library Dialogue: 0,0:02:12.72,0:02:16.40,Default,,0000,0000,0000,,but basically most of the time when you Dialogue: 0,0:02:15.20,0:02:18.48,Default,,0000,0000,0000,,are doing an application Dialogue: 0,0:02:16.40,0:02:20.64,Default,,0000,0000,0000,,you will be choosing a verbal diagram Dialogue: 0,0:02:18.48,0:02:23.04,Default,,0000,0000,0000,,right Dialogue: 0,0:02:20.64,0:02:24.24,Default,,0000,0000,0000,,in php if we have a look at core Dialogue: 0,0:02:23.04,0:02:26.16,Default,,0000,0000,0000,,libraries Dialogue: 0,0:02:24.24,0:02:28.16,Default,,0000,0000,0000,,there are not that many of them there Dialogue: 0,0:02:26.16,0:02:31.36,Default,,0000,0000,0000,,are actually two right now Dialogue: 0,0:02:28.16,0:02:33.12,Default,,0000,0000,0000,,there is webinaics which is the de facto Dialogue: 0,0:02:31.36,0:02:35.76,Default,,0000,0000,0000,,standard in php Dialogue: 0,0:02:33.12,0:02:38.16,Default,,0000,0000,0000,,almost everybody is using webinx and Dialogue: 0,0:02:35.76,0:02:41.84,Default,,0000,0000,0000,,then there is a newcomer that is called Dialogue: 0,0:02:38.16,0:02:44.64,Default,,0000,0000,0000,,ray welty which is developed by Dialogue: 0,0:02:41.84,0:02:45.36,Default,,0000,0000,0000,,some russian guys it's an active Dialogue: 0,0:02:44.64,0:02:48.64,Default,,0000,0000,0000,,development Dialogue: 0,0:02:45.36,0:02:50.88,Default,,0000,0000,0000,,it looks really promising there is no Dialogue: 0,0:02:48.64,0:02:54.56,Default,,0000,0000,0000,,solid documentation yet Dialogue: 0,0:02:50.88,0:02:56.80,Default,,0000,0000,0000,,so uh right now if you Dialogue: 0,0:02:54.56,0:02:57.76,Default,,0000,0000,0000,,need a co-library definitely go to Dialogue: 0,0:02:56.80,0:03:00.96,Default,,0000,0000,0000,,webonix Dialogue: 0,0:02:57.76,0:03:04.48,Default,,0000,0000,0000,,but keep an eye and high on Dialogue: 0,0:03:00.96,0:03:06.88,Default,,0000,0000,0000,,railway there was in the past Dialogue: 0,0:03:04.48,0:03:07.92,Default,,0000,0000,0000,,more libraries here there was one was Dialogue: 0,0:03:06.88,0:03:10.88,Default,,0000,0000,0000,,that was called Dialogue: 0,0:03:07.92,0:03:12.40,Default,,0000,0000,0000,,ushido that has been abandoned in favor Dialogue: 0,0:03:10.88,0:03:14.24,Default,,0000,0000,0000,,of weaponix so Dialogue: 0,0:03:12.40,0:03:16.48,Default,,0000,0000,0000,,right now it's pretty much robotics if Dialogue: 0,0:03:14.24,0:03:19.84,Default,,0000,0000,0000,,you want a core library Dialogue: 0,0:03:16.48,0:03:21.60,Default,,0000,0000,0000,,and then on top of this core library Dialogue: 0,0:03:19.84,0:03:22.96,Default,,0000,0000,0000,,there are wrapper libraries and there Dialogue: 0,0:03:21.60,0:03:26.24,Default,,0000,0000,0000,,are many of them Dialogue: 0,0:03:22.96,0:03:28.88,Default,,0000,0000,0000,,and today uh Dialogue: 0,0:03:26.24,0:03:29.76,Default,,0000,0000,0000,,all those libraries are using webonix Dialogue: 0,0:03:28.88,0:03:32.24,Default,,0000,0000,0000,,under the hood Dialogue: 0,0:03:29.76,0:03:35.20,Default,,0000,0000,0000,,okay it's a wrapper around webonix to Dialogue: 0,0:03:32.24,0:03:38.48,Default,,0000,0000,0000,,make it easier to use Dialogue: 0,0:03:35.20,0:03:40.88,Default,,0000,0000,0000,,so basically we have api platform and Dialogue: 0,0:03:38.48,0:03:41.76,Default,,0000,0000,0000,,the overblock graphql bundles that are Dialogue: 0,0:03:40.88,0:03:44.32,Default,,0000,0000,0000,,really Dialogue: 0,0:03:41.76,0:03:46.40,Default,,0000,0000,0000,,used with the symphony framework if Dialogue: 0,0:03:44.32,0:03:48.40,Default,,0000,0000,0000,,you're doing laravel you can use Dialogue: 0,0:03:46.40,0:03:50.72,Default,,0000,0000,0000,,a library called lighthouse i will be Dialogue: 0,0:03:48.40,0:03:52.30,Default,,0000,0000,0000,,presenting those a bit later Dialogue: 0,0:03:50.72,0:03:54.08,Default,,0000,0000,0000,,if you're doing um Dialogue: 0,0:03:52.30,0:03:56.96,Default,,0000,0000,0000,,[Music] Dialogue: 0,0:03:54.08,0:03:59.28,Default,,0000,0000,0000,,what uh if you're using a cms like Dialogue: 0,0:03:56.96,0:04:02.32,Default,,0000,0000,0000,,wordpress or drupal Dialogue: 0,0:03:59.28,0:04:05.68,Default,,0000,0000,0000,,wordpress and drupal have modules Dialogue: 0,0:04:02.32,0:04:08.88,Default,,0000,0000,0000,,to plug to present a graphql api Dialogue: 0,0:04:05.68,0:04:10.56,Default,,0000,0000,0000,,so if you want to do a headless cms it's Dialogue: 0,0:04:08.88,0:04:14.16,Default,,0000,0000,0000,,quite easy using Dialogue: 0,0:04:10.56,0:04:16.88,Default,,0000,0000,0000,,wordpress or drupal and adding a Dialogue: 0,0:04:14.16,0:04:17.76,Default,,0000,0000,0000,,a graphql module on them and then there Dialogue: 0,0:04:16.88,0:04:19.44,Default,,0000,0000,0000,,is graphqlite Dialogue: 0,0:04:17.76,0:04:21.20,Default,,0000,0000,0000,,which i've been altering for the last Dialogue: 0,0:04:19.44,0:04:23.84,Default,,0000,0000,0000,,two years and which is Dialogue: 0,0:04:21.20,0:04:24.24,Default,,0000,0000,0000,,a framework agnostic because you can use Dialogue: 0,0:04:23.84,0:04:29.36,Default,,0000,0000,0000,,it Dialogue: 0,0:04:24.24,0:04:32.32,Default,,0000,0000,0000,,whatever the framework you use Dialogue: 0,0:04:29.36,0:04:32.72,Default,,0000,0000,0000,,let's make a quick look uh a quick zoom Dialogue: 0,0:04:32.32,0:04:35.76,Default,,0000,0000,0000,,on Dialogue: 0,0:04:32.72,0:04:37.52,Default,,0000,0000,0000,,webonix okay so webonix it is the core Dialogue: 0,0:04:35.76,0:04:40.88,Default,,0000,0000,0000,,library here Dialogue: 0,0:04:37.52,0:04:42.24,Default,,0000,0000,0000,,and how does it look like coding with Dialogue: 0,0:04:40.88,0:04:45.36,Default,,0000,0000,0000,,webox well Dialogue: 0,0:04:42.24,0:04:48.24,Default,,0000,0000,0000,,here i've got a graphql type okay Dialogue: 0,0:04:45.36,0:04:48.64,Default,,0000,0000,0000,,and basically this type is a story it Dialogue: 0,0:04:48.24,0:04:52.64,Default,,0000,0000,0000,,has Dialogue: 0,0:04:48.64,0:04:55.68,Default,,0000,0000,0000,,fields with which all have types Dialogue: 0,0:04:52.64,0:04:56.24,Default,,0000,0000,0000,,building that in webmix the card would Dialogue: 0,0:04:55.68,0:04:59.28,Default,,0000,0000,0000,,look Dialogue: 0,0:04:56.24,0:05:01.12,Default,,0000,0000,0000,,like this okay it's kind of verbose Dialogue: 0,0:04:59.28,0:05:02.64,Default,,0000,0000,0000,,and as i told you the developer Dialogue: 0,0:05:01.12,0:05:04.00,Default,,0000,0000,0000,,experience is not that great but Dialogue: 0,0:05:02.64,0:05:08.24,Default,,0000,0000,0000,,basically Dialogue: 0,0:05:04.00,0:05:11.84,Default,,0000,0000,0000,,i'm creating a type it's its name is Dialogue: 0,0:05:08.24,0:05:14.88,Default,,0000,0000,0000,,history here and i've got a number of Dialogue: 0,0:05:11.84,0:05:17.12,Default,,0000,0000,0000,,fields that are declared here with the Dialogue: 0,0:05:14.88,0:05:19.28,Default,,0000,0000,0000,,type of the field the description Dialogue: 0,0:05:17.12,0:05:20.80,Default,,0000,0000,0000,,if i've got arguments the arguments are Dialogue: 0,0:05:19.28,0:05:23.12,Default,,0000,0000,0000,,declared here Dialogue: 0,0:05:20.80,0:05:24.16,Default,,0000,0000,0000,,and finally i have a resolver that will Dialogue: 0,0:05:23.12,0:05:26.64,Default,,0000,0000,0000,,be called Dialogue: 0,0:05:24.16,0:05:27.36,Default,,0000,0000,0000,,when i query this fill the resolver is Dialogue: 0,0:05:26.64,0:05:30.48,Default,,0000,0000,0000,,called Dialogue: 0,0:05:27.36,0:05:33.92,Default,,0000,0000,0000,,to fetch the data Dialogue: 0,0:05:30.48,0:05:33.92,Default,,0000,0000,0000,,this is really verbals right Dialogue: 0,0:05:34.32,0:05:42.48,Default,,0000,0000,0000,,and also it might look a bit like Dialogue: 0,0:05:39.28,0:05:44.72,Default,,0000,0000,0000,,some libraries some graphql libraries in Dialogue: 0,0:05:42.48,0:05:46.08,Default,,0000,0000,0000,,javascript especially if you have been Dialogue: 0,0:05:44.72,0:05:49.68,Default,,0000,0000,0000,,doing Dialogue: 0,0:05:46.08,0:05:52.80,Default,,0000,0000,0000,,been using express graphql Dialogue: 0,0:05:49.68,0:05:56.24,Default,,0000,0000,0000,,webonix started by mimicking a lot what Dialogue: 0,0:05:52.80,0:05:59.44,Default,,0000,0000,0000,,facebook was doing in its own javascript Dialogue: 0,0:05:56.24,0:06:03.12,Default,,0000,0000,0000,,library if i want to declare Dialogue: 0,0:05:59.44,0:06:05.92,Default,,0000,0000,0000,,a query well i'm creating a type query Dialogue: 0,0:06:03.12,0:06:07.60,Default,,0000,0000,0000,,whose fields are here it's actually Dialogue: 0,0:06:05.92,0:06:08.00,Default,,0000,0000,0000,,exactly the same thing as defining a Dialogue: 0,0:06:07.60,0:06:10.88,Default,,0000,0000,0000,,type Dialogue: 0,0:06:08.00,0:06:11.44,Default,,0000,0000,0000,,because in graphql a query is a field on Dialogue: 0,0:06:10.88,0:06:15.76,Default,,0000,0000,0000,,the Dialogue: 0,0:06:11.44,0:06:18.00,Default,,0000,0000,0000,,type whose name is query and finally Dialogue: 0,0:06:15.76,0:06:20.00,Default,,0000,0000,0000,,if i want to resolve a query i can Dialogue: 0,0:06:18.00,0:06:20.80,Default,,0000,0000,0000,,compose the exit with query static Dialogue: 0,0:06:20.00,0:06:23.44,Default,,0000,0000,0000,,method Dialogue: 0,0:06:20.80,0:06:24.56,Default,,0000,0000,0000,,plus in parameters the schema the schema Dialogue: 0,0:06:23.44,0:06:26.64,Default,,0000,0000,0000,,is Dialogue: 0,0:06:24.56,0:06:28.08,Default,,0000,0000,0000,,an object containing all the types that Dialogue: 0,0:06:26.64,0:06:31.04,Default,,0000,0000,0000,,i have declared Dialogue: 0,0:06:28.08,0:06:32.88,Default,,0000,0000,0000,,i'm passing in the query string so the Dialogue: 0,0:06:31.04,0:06:34.16,Default,,0000,0000,0000,,graphical query and it will return an Dialogue: 0,0:06:32.88,0:06:37.84,Default,,0000,0000,0000,,array that that Dialogue: 0,0:06:34.16,0:06:38.96,Default,,0000,0000,0000,,i can cast to json and return to the Dialogue: 0,0:06:37.84,0:06:43.04,Default,,0000,0000,0000,,client Dialogue: 0,0:06:38.96,0:06:45.44,Default,,0000,0000,0000,,so this is the the experience Dialogue: 0,0:06:43.04,0:06:46.24,Default,,0000,0000,0000,,you're getting when you're using webinx Dialogue: 0,0:06:45.44,0:06:49.60,Default,,0000,0000,0000,,directly Dialogue: 0,0:06:46.24,0:06:50.48,Default,,0000,0000,0000,,right and the problem with this approach Dialogue: 0,0:06:49.60,0:06:53.92,Default,,0000,0000,0000,,is that it Dialogue: 0,0:06:50.48,0:06:57.76,Default,,0000,0000,0000,,actually requires a lot of work Dialogue: 0,0:06:53.92,0:07:00.72,Default,,0000,0000,0000,,to set up a great graphql api Dialogue: 0,0:06:57.76,0:07:01.76,Default,,0000,0000,0000,,obviously there are games to use graphql Dialogue: 0,0:07:00.72,0:07:05.12,Default,,0000,0000,0000,,versus rest Dialogue: 0,0:07:01.76,0:07:08.56,Default,,0000,0000,0000,,its queries are client-driven Dialogue: 0,0:07:05.12,0:07:10.08,Default,,0000,0000,0000,,it has introspection you can see the Dialogue: 0,0:07:08.56,0:07:12.64,Default,,0000,0000,0000,,schema from the client Dialogue: 0,0:07:10.08,0:07:13.28,Default,,0000,0000,0000,,it has three types which is definitely Dialogue: 0,0:07:12.64,0:07:15.84,Default,,0000,0000,0000,,one of the Dialogue: 0,0:07:13.28,0:07:17.04,Default,,0000,0000,0000,,really cool features but if it is too Dialogue: 0,0:07:15.84,0:07:20.88,Default,,0000,0000,0000,,much of pain to Dialogue: 0,0:07:17.04,0:07:24.40,Default,,0000,0000,0000,,um to put the api in place Dialogue: 0,0:07:20.88,0:07:26.88,Default,,0000,0000,0000,,uh well uh it maybe won't be worth it Dialogue: 0,0:07:24.40,0:07:28.64,Default,,0000,0000,0000,,so what we are going to do is we are Dialogue: 0,0:07:26.88,0:07:32.48,Default,,0000,0000,0000,,going to use a wrapper library Dialogue: 0,0:07:28.64,0:07:36.56,Default,,0000,0000,0000,,which is easier to work with to Dialogue: 0,0:07:32.48,0:07:39.76,Default,,0000,0000,0000,,offset the gains versus the costs Dialogue: 0,0:07:36.56,0:07:42.32,Default,,0000,0000,0000,,and to make it worthwhile to use Dialogue: 0,0:07:39.76,0:07:42.32,Default,,0000,0000,0000,,graphical Dialogue: 0,0:07:42.64,0:07:46.64,Default,,0000,0000,0000,,now if we need to choose a proper Dialogue: 0,0:07:45.28,0:07:50.00,Default,,0000,0000,0000,,library Dialogue: 0,0:07:46.64,0:07:53.60,Default,,0000,0000,0000,,well there are basically two kinds of Dialogue: 0,0:07:50.00,0:07:56.84,Default,,0000,0000,0000,,such libraries there are Dialogue: 0,0:07:53.60,0:07:58.08,Default,,0000,0000,0000,,schema first libraries and code first Dialogue: 0,0:07:56.84,0:08:00.96,Default,,0000,0000,0000,,libraries Dialogue: 0,0:07:58.08,0:08:02.56,Default,,0000,0000,0000,,in the schema first dropper library Dialogue: 0,0:08:00.96,0:08:04.88,Default,,0000,0000,0000,,basically Dialogue: 0,0:08:02.56,0:08:06.08,Default,,0000,0000,0000,,your task as a developer will be to Dialogue: 0,0:08:04.88,0:08:09.52,Default,,0000,0000,0000,,write the Dialogue: 0,0:08:06.08,0:08:10.24,Default,,0000,0000,0000,,graphql schema and then the job of the Dialogue: 0,0:08:09.52,0:08:13.60,Default,,0000,0000,0000,,library Dialogue: 0,0:08:10.24,0:08:16.80,Default,,0000,0000,0000,,will be from the schema to build Dialogue: 0,0:08:13.60,0:08:19.76,Default,,0000,0000,0000,,to to find a way to link the schema Dialogue: 0,0:08:16.80,0:08:22.16,Default,,0000,0000,0000,,to the ph key code on the other end if Dialogue: 0,0:08:19.76,0:08:25.44,Default,,0000,0000,0000,,you are using a code first approach Dialogue: 0,0:08:22.16,0:08:28.24,Default,,0000,0000,0000,,you will be designing objects and then Dialogue: 0,0:08:25.44,0:08:29.84,Default,,0000,0000,0000,,the job of the library will be to Dialogue: 0,0:08:28.24,0:08:31.84,Default,,0000,0000,0000,,generate the schema Dialogue: 0,0:08:29.84,0:08:34.08,Default,,0000,0000,0000,,from the classes and the objects you've Dialogue: 0,0:08:31.84,0:08:37.28,Default,,0000,0000,0000,,been Dialogue: 0,0:08:34.08,0:08:40.32,Default,,0000,0000,0000,,designing so uh Dialogue: 0,0:08:37.28,0:08:41.12,Default,,0000,0000,0000,,and basically when you are using a Dialogue: 0,0:08:40.32,0:08:45.52,Default,,0000,0000,0000,,language Dialogue: 0,0:08:41.12,0:08:48.48,Default,,0000,0000,0000,,that is loosely typed you tend to have Dialogue: 0,0:08:45.52,0:08:50.40,Default,,0000,0000,0000,,libraries that are schema first if you Dialogue: 0,0:08:48.48,0:08:52.24,Default,,0000,0000,0000,,are doing javascript you will find a lot Dialogue: 0,0:08:50.40,0:08:54.72,Default,,0000,0000,0000,,of schemas libraries Dialogue: 0,0:08:52.24,0:08:56.32,Default,,0000,0000,0000,,on the other end if you are using a Dialogue: 0,0:08:54.72,0:08:58.72,Default,,0000,0000,0000,,strictly typed language Dialogue: 0,0:08:56.32,0:09:00.80,Default,,0000,0000,0000,,like java you will find a lot of code Dialogue: 0,0:08:58.72,0:09:03.84,Default,,0000,0000,0000,,first libraries Dialogue: 0,0:09:00.80,0:09:04.08,Default,,0000,0000,0000,,php sits a bit in the middle because it Dialogue: 0,0:09:03.84,0:09:06.32,Default,,0000,0000,0000,,is Dialogue: 0,0:09:04.08,0:09:07.60,Default,,0000,0000,0000,,optionally tight you can have types but Dialogue: 0,0:09:06.32,0:09:09.04,Default,,0000,0000,0000,,you're not forced to Dialogue: 0,0:09:07.60,0:09:10.96,Default,,0000,0000,0000,,and so you have the two kinds of Dialogue: 0,0:09:09.04,0:09:14.16,Default,,0000,0000,0000,,libraries out there and Dialogue: 0,0:09:10.96,0:09:16.88,Default,,0000,0000,0000,,uh basically uh in the schema first Dialogue: 0,0:09:14.16,0:09:18.16,Default,,0000,0000,0000,,part you have uh overblog lighthouse Dialogue: 0,0:09:16.88,0:09:21.52,Default,,0000,0000,0000,,reality sciler Dialogue: 0,0:09:18.16,0:09:22.32,Default,,0000,0000,0000,,and the code first category api platform Dialogue: 0,0:09:21.52,0:09:26.16,Default,,0000,0000,0000,,graphical light Dialogue: 0,0:09:22.32,0:09:26.16,Default,,0000,0000,0000,,and get bob Dialogue: 0,0:09:26.88,0:09:30.80,Default,,0000,0000,0000,,let's make a quick zoom on lighthouse Dialogue: 0,0:09:29.52,0:09:33.68,Default,,0000,0000,0000,,okay so lighthouse Dialogue: 0,0:09:30.80,0:09:36.32,Default,,0000,0000,0000,,is a schema first library let's see how Dialogue: 0,0:09:33.68,0:09:41.04,Default,,0000,0000,0000,,it works Dialogue: 0,0:09:36.32,0:09:43.44,Default,,0000,0000,0000,,lighthouse is built on top of laravel Dialogue: 0,0:09:41.04,0:09:44.64,Default,,0000,0000,0000,,when you are using lighthouse what we Dialogue: 0,0:09:43.44,0:09:47.84,Default,,0000,0000,0000,,you are going to do Dialogue: 0,0:09:44.64,0:09:50.88,Default,,0000,0000,0000,,is you are going to design this Dialogue: 0,0:09:47.84,0:09:54.40,Default,,0000,0000,0000,,graphql schema Dialogue: 0,0:09:50.88,0:09:57.68,Default,,0000,0000,0000,,and basically you are going to annotate Dialogue: 0,0:09:54.40,0:09:58.80,Default,,0000,0000,0000,,this schema with directives okay this is Dialogue: 0,0:09:57.68,0:10:02.48,Default,,0000,0000,0000,,a directive Dialogue: 0,0:09:58.80,0:10:05.36,Default,,0000,0000,0000,,this is another directive and Dialogue: 0,0:10:02.48,0:10:06.56,Default,,0000,0000,0000,,these directives will be used uh by Dialogue: 0,0:10:05.36,0:10:10.08,Default,,0000,0000,0000,,lighthouse Dialogue: 0,0:10:06.56,0:10:12.40,Default,,0000,0000,0000,,to bind this schema to the database Dialogue: 0,0:10:10.08,0:10:15.12,Default,,0000,0000,0000,,model directly Dialogue: 0,0:10:12.40,0:10:16.56,Default,,0000,0000,0000,,uh basically under the hood lighthouse Dialogue: 0,0:10:15.12,0:10:19.52,Default,,0000,0000,0000,,is using yellow points Dialogue: 0,0:10:16.56,0:10:21.44,Default,,0000,0000,0000,,and yellow point is the orm of laravel Dialogue: 0,0:10:19.52,0:10:24.48,Default,,0000,0000,0000,,so basically if i'm using the Dialogue: 0,0:10:21.44,0:10:28.64,Default,,0000,0000,0000,,old directive Dialogue: 0,0:10:24.48,0:10:32.24,Default,,0000,0000,0000,,automatically lighthouse will put Dialogue: 0,0:10:28.64,0:10:32.80,Default,,0000,0000,0000,,the current user in the mcquery you can Dialogue: 0,0:10:32.24,0:10:34.80,Default,,0000,0000,0000,,do Dialogue: 0,0:10:32.80,0:10:36.64,Default,,0000,0000,0000,,quite powerful stuff with only Dialogue: 0,0:10:34.80,0:10:38.16,Default,,0000,0000,0000,,directives for instance the create Dialogue: 0,0:10:36.64,0:10:41.04,Default,,0000,0000,0000,,directive here Dialogue: 0,0:10:38.16,0:10:42.48,Default,,0000,0000,0000,,will create directly an object in Dialogue: 0,0:10:41.04,0:10:44.96,Default,,0000,0000,0000,,database Dialogue: 0,0:10:42.48,0:10:46.88,Default,,0000,0000,0000,,when you when you call critpost and it Dialogue: 0,0:10:44.96,0:10:49.52,Default,,0000,0000,0000,,will put a post directly into the Dialogue: 0,0:10:46.88,0:10:52.96,Default,,0000,0000,0000,,database and you can do validation Dialogue: 0,0:10:49.52,0:10:52.96,Default,,0000,0000,0000,,right here on each field Dialogue: 0,0:10:53.44,0:11:01.12,Default,,0000,0000,0000,,okay so it's very efficient Dialogue: 0,0:10:57.84,0:11:04.64,Default,,0000,0000,0000,,i mean you can build a complete Dialogue: 0,0:11:01.12,0:11:06.64,Default,,0000,0000,0000,,graphql api in very few lines of code Dialogue: 0,0:11:04.64,0:11:10.24,Default,,0000,0000,0000,,with this approach Dialogue: 0,0:11:06.64,0:11:13.60,Default,,0000,0000,0000,,also it is very very tied to laravel Dialogue: 0,0:11:10.24,0:11:14.00,Default,,0000,0000,0000,,and to eloquent which is the oram so if Dialogue: 0,0:11:13.60,0:11:17.44,Default,,0000,0000,0000,,you want Dialogue: 0,0:11:14.00,0:11:18.88,Default,,0000,0000,0000,,to do advanced things and if you don't Dialogue: 0,0:11:17.44,0:11:21.44,Default,,0000,0000,0000,,want to Dialogue: 0,0:11:18.88,0:11:22.40,Default,,0000,0000,0000,,to be too much tied to your database you Dialogue: 0,0:11:21.44,0:11:25.20,Default,,0000,0000,0000,,will have to write Dialogue: 0,0:11:22.40,0:11:26.40,Default,,0000,0000,0000,,a custom directive which is a bit of a Dialogue: 0,0:11:25.20,0:11:28.48,Default,,0000,0000,0000,,pain Dialogue: 0,0:11:26.40,0:11:29.84,Default,,0000,0000,0000,,but if you have a simple use case and Dialogue: 0,0:11:28.48,0:11:31.92,Default,,0000,0000,0000,,you only want to Dialogue: 0,0:11:29.84,0:11:33.92,Default,,0000,0000,0000,,back to to do quick by binding to a Dialogue: 0,0:11:31.92,0:11:36.40,Default,,0000,0000,0000,,database it is a great tool Dialogue: 0,0:11:33.92,0:11:38.64,Default,,0000,0000,0000,,okay one thing that is also interesting Dialogue: 0,0:11:36.40,0:11:43.52,Default,,0000,0000,0000,,it has support for subscriptions Dialogue: 0,0:11:38.64,0:11:46.88,Default,,0000,0000,0000,,which is uh so you can do real-time Dialogue: 0,0:11:43.52,0:11:48.80,Default,,0000,0000,0000,,graph you graphql can Dialogue: 0,0:11:46.88,0:11:51.84,Default,,0000,0000,0000,,can answer in real time which is not Dialogue: 0,0:11:48.80,0:11:54.88,Default,,0000,0000,0000,,that common in php Dialogue: 0,0:11:51.84,0:11:58.16,Default,,0000,0000,0000,,so that is lighthouse let's now make Dialogue: 0,0:11:54.88,0:12:01.44,Default,,0000,0000,0000,,a zoom on api platform so api platform Dialogue: 0,0:11:58.16,0:12:03.92,Default,,0000,0000,0000,,okay it is a code first library Dialogue: 0,0:12:01.44,0:12:05.04,Default,,0000,0000,0000,,in api platform the philosophy is the Dialogue: 0,0:12:03.92,0:12:08.48,Default,,0000,0000,0000,,opposite Dialogue: 0,0:12:05.04,0:12:11.76,Default,,0000,0000,0000,,you start by writing a php class Dialogue: 0,0:12:08.48,0:12:15.28,Default,,0000,0000,0000,,and then you're going to put annotations Dialogue: 0,0:12:11.76,0:12:16.08,Default,,0000,0000,0000,,on the class an api platform will read Dialogue: 0,0:12:15.28,0:12:18.88,Default,,0000,0000,0000,,the annotation Dialogue: 0,0:12:16.08,0:12:19.92,Default,,0000,0000,0000,,and generate the graphical schema for Dialogue: 0,0:12:18.88,0:12:23.36,Default,,0000,0000,0000,,you Dialogue: 0,0:12:19.92,0:12:25.76,Default,,0000,0000,0000,,okay um api platform was Dialogue: 0,0:12:23.36,0:12:26.80,Default,,0000,0000,0000,,first built with the rest philosophy in Dialogue: 0,0:12:25.76,0:12:29.36,Default,,0000,0000,0000,,mind Dialogue: 0,0:12:26.80,0:12:31.28,Default,,0000,0000,0000,,and uh what is kind of fun with the api Dialogue: 0,0:12:29.36,0:12:34.08,Default,,0000,0000,0000,,platform is that you can expose Dialogue: 0,0:12:31.28,0:12:35.60,Default,,0000,0000,0000,,quite easily both a rest api and a Dialogue: 0,0:12:34.08,0:12:38.16,Default,,0000,0000,0000,,graphql api Dialogue: 0,0:12:35.60,0:12:41.04,Default,,0000,0000,0000,,very few lines of code so you get both Dialogue: 0,0:12:38.16,0:12:41.04,Default,,0000,0000,0000,,kind of api Dialogue: 0,0:12:41.44,0:12:48.24,Default,,0000,0000,0000,,support using the same code Dialogue: 0,0:12:44.64,0:12:52.24,Default,,0000,0000,0000,,which is cool however Dialogue: 0,0:12:48.24,0:12:54.08,Default,,0000,0000,0000,,if you want to have a good control on Dialogue: 0,0:12:52.24,0:12:56.08,Default,,0000,0000,0000,,you the graphical schema that is Dialogue: 0,0:12:54.08,0:12:59.20,Default,,0000,0000,0000,,generated api platform Dialogue: 0,0:12:56.08,0:13:01.84,Default,,0000,0000,0000,,may not be the best uh the best Dialogue: 0,0:12:59.20,0:13:02.56,Default,,0000,0000,0000,,tool out there because the underlying Dialogue: 0,0:13:01.84,0:13:05.36,Default,,0000,0000,0000,,philosophy Dialogue: 0,0:13:02.56,0:13:07.28,Default,,0000,0000,0000,,is very much uh rest so you have credit Dialogue: 0,0:13:05.36,0:13:08.64,Default,,0000,0000,0000,,you have you can create read update and Dialogue: 0,0:13:07.28,0:13:12.56,Default,,0000,0000,0000,,delete the report Dialogue: 0,0:13:08.64,0:13:16.24,Default,,0000,0000,0000,,if you want to do some some other things Dialogue: 0,0:13:12.56,0:13:17.76,Default,,0000,0000,0000,,uh well it will be a bit harder to Dialogue: 0,0:13:16.24,0:13:21.44,Default,,0000,0000,0000,,customize Dialogue: 0,0:13:17.76,0:13:24.40,Default,,0000,0000,0000,,it has support for subscriptions too so Dialogue: 0,0:13:21.44,0:13:24.64,Default,,0000,0000,0000,,yeah so that was the zoom on lighthouse Dialogue: 0,0:13:24.40,0:13:26.72,Default,,0000,0000,0000,,and Dialogue: 0,0:13:24.64,0:13:28.24,Default,,0000,0000,0000,,api platform there are many also Dialogue: 0,0:13:26.72,0:13:31.76,Default,,0000,0000,0000,,libraries out there Dialogue: 0,0:13:28.24,0:13:34.08,Default,,0000,0000,0000,,and i've been preparing a few schemas Dialogue: 0,0:13:31.76,0:13:34.88,Default,,0000,0000,0000,,to help you decide what library you can Dialogue: 0,0:13:34.08,0:13:37.36,Default,,0000,0000,0000,,use Dialogue: 0,0:13:34.88,0:13:40.16,Default,,0000,0000,0000,,by answering a few questions so let's Dialogue: 0,0:13:37.36,0:13:40.16,Default,,0000,0000,0000,,jump into that Dialogue: 0,0:13:40.56,0:13:44.00,Default,,0000,0000,0000,,so basically if you want to pick a Dialogue: 0,0:13:42.80,0:13:46.40,Default,,0000,0000,0000,,graphical library Dialogue: 0,0:13:44.00,0:13:48.56,Default,,0000,0000,0000,,i think the first que and if you are Dialogue: 0,0:13:46.40,0:13:51.52,Default,,0000,0000,0000,,doing php Dialogue: 0,0:13:48.56,0:13:52.40,Default,,0000,0000,0000,,the first question you should ask is are Dialogue: 0,0:13:51.52,0:13:55.68,Default,,0000,0000,0000,,you developing Dialogue: 0,0:13:52.40,0:13:59.04,Default,,0000,0000,0000,,an application or a tool okay Dialogue: 0,0:13:55.68,0:14:02.56,Default,,0000,0000,0000,,so basically um Dialogue: 0,0:13:59.04,0:14:05.76,Default,,0000,0000,0000,,if you are Dialogue: 0,0:14:02.56,0:14:06.40,Default,,0000,0000,0000,,doing uh if you are developing a tool if Dialogue: 0,0:14:05.76,0:14:09.60,Default,,0000,0000,0000,,your model Dialogue: 0,0:14:06.40,0:14:14.32,Default,,0000,0000,0000,,is dynamic for instance if uh Dialogue: 0,0:14:09.60,0:14:16.72,Default,,0000,0000,0000,,you're sorry Dialogue: 0,0:14:14.32,0:14:17.52,Default,,0000,0000,0000,,if you are developing a cms and the end Dialogue: 0,0:14:16.72,0:14:20.00,Default,,0000,0000,0000,,user Dialogue: 0,0:14:17.52,0:14:20.96,Default,,0000,0000,0000,,can create a new content type you can Dialogue: 0,0:14:20.00,0:14:23.20,Default,,0000,0000,0000,,create new type Dialogue: 0,0:14:20.96,0:14:24.72,Default,,0000,0000,0000,,add new fields stuff like that then you Dialogue: 0,0:14:23.20,0:14:26.96,Default,,0000,0000,0000,,want to go for webinars Dialogue: 0,0:14:24.72,0:14:28.00,Default,,0000,0000,0000,,okay you want to go low level and build Dialogue: 0,0:14:26.96,0:14:29.92,Default,,0000,0000,0000,,your own tool Dialogue: 0,0:14:28.00,0:14:31.28,Default,,0000,0000,0000,,on it if you are developing an Dialogue: 0,0:14:29.92,0:14:31.76,Default,,0000,0000,0000,,application and you have a set of Dialogue: 0,0:14:31.28,0:14:35.12,Default,,0000,0000,0000,,classes Dialogue: 0,0:14:31.76,0:14:38.16,Default,,0000,0000,0000,,already well defined then you want to go Dialogue: 0,0:14:35.12,0:14:38.72,Default,,0000,0000,0000,,for a wrapper library then there is a Dialogue: 0,0:14:38.16,0:14:41.76,Default,,0000,0000,0000,,question Dialogue: 0,0:14:38.72,0:14:42.40,Default,,0000,0000,0000,,do you need subscriptions if you want to Dialogue: 0,0:14:41.76,0:14:45.52,Default,,0000,0000,0000,,do things Dialogue: 0,0:14:42.40,0:14:47.68,Default,,0000,0000,0000,,in real time then you have to pick Dialogue: 0,0:14:45.52,0:14:48.96,Default,,0000,0000,0000,,a library that supports subscriptions Dialogue: 0,0:14:47.68,0:14:51.36,Default,,0000,0000,0000,,there are not many out there Dialogue: 0,0:14:48.96,0:14:52.40,Default,,0000,0000,0000,,it's lighthouse api platform silo of all Dialogue: 0,0:14:51.36,0:14:55.52,Default,,0000,0000,0000,,webinars Dialogue: 0,0:14:52.40,0:14:58.16,Default,,0000,0000,0000,,otherwise you can choose any library Dialogue: 0,0:14:55.52,0:14:59.04,Default,,0000,0000,0000,,then there is another question which is Dialogue: 0,0:14:58.16,0:15:02.88,Default,,0000,0000,0000,,do you want Dialogue: 0,0:14:59.04,0:15:06.08,Default,,0000,0000,0000,,do you want to do do you want to use Dialogue: 0,0:15:02.88,0:15:09.28,Default,,0000,0000,0000,,relay on your front end if you are Dialogue: 0,0:15:06.08,0:15:11.60,Default,,0000,0000,0000,,using relay a relay imposes Dialogue: 0,0:15:09.28,0:15:13.76,Default,,0000,0000,0000,,a number of constraints of the on the Dialogue: 0,0:15:11.60,0:15:16.40,Default,,0000,0000,0000,,schemas that are generated Dialogue: 0,0:15:13.76,0:15:17.20,Default,,0000,0000,0000,,and not all the libraries out there have Dialogue: 0,0:15:16.40,0:15:20.72,Default,,0000,0000,0000,,support for Dialogue: 0,0:15:17.20,0:15:23.28,Default,,0000,0000,0000,,this kind of schema so if you want to do Dialogue: 0,0:15:20.72,0:15:24.72,Default,,0000,0000,0000,,to use relay you should definitely aim Dialogue: 0,0:15:23.28,0:15:28.64,Default,,0000,0000,0000,,for those libraries Dialogue: 0,0:15:24.72,0:15:31.04,Default,,0000,0000,0000,,maybe lighthouse and graphical bundles Dialogue: 0,0:15:28.64,0:15:32.00,Default,,0000,0000,0000,,finally depending on the framework you Dialogue: 0,0:15:31.04,0:15:35.44,Default,,0000,0000,0000,,are using Dialogue: 0,0:15:32.00,0:15:38.84,Default,,0000,0000,0000,,you will also have to to put to pick Dialogue: 0,0:15:35.44,0:15:42.32,Default,,0000,0000,0000,,one of those Dialogue: 0,0:15:38.84,0:15:45.28,Default,,0000,0000,0000,,libraries some libraries Dialogue: 0,0:15:42.32,0:15:46.88,Default,,0000,0000,0000,,are framework agnostics like webinarics Dialogue: 0,0:15:45.28,0:15:50.72,Default,,0000,0000,0000,,and graphic lite and you can use them Dialogue: 0,0:15:46.88,0:15:54.48,Default,,0000,0000,0000,,everywhere alright so Dialogue: 0,0:15:50.72,0:15:56.08,Default,,0000,0000,0000,,finally the last question do you prefer Dialogue: 0,0:15:54.48,0:15:59.36,Default,,0000,0000,0000,,a schema first or Dialogue: 0,0:15:56.08,0:16:02.48,Default,,0000,0000,0000,,a code first approach if you want Dialogue: 0,0:15:59.36,0:16:04.80,Default,,0000,0000,0000,,to go schema first pick one here Dialogue: 0,0:16:02.48,0:16:05.76,Default,,0000,0000,0000,,if you want to go code first pick one Dialogue: 0,0:16:04.80,0:16:09.04,Default,,0000,0000,0000,,here Dialogue: 0,0:16:05.76,0:16:11.60,Default,,0000,0000,0000,,and when you unsword all those questions Dialogue: 0,0:16:09.04,0:16:14.16,Default,,0000,0000,0000,,if you are lucky well you still have a Dialogue: 0,0:16:11.60,0:16:16.00,Default,,0000,0000,0000,,choice between one or two libraries Dialogue: 0,0:16:14.16,0:16:17.76,Default,,0000,0000,0000,,if you are unlucky there are no Dialogue: 0,0:16:16.00,0:16:20.24,Default,,0000,0000,0000,,libraries uh Dialogue: 0,0:16:17.76,0:16:22.24,Default,,0000,0000,0000,,answering you need for instance if you Dialogue: 0,0:16:20.24,0:16:26.64,Default,,0000,0000,0000,,want uh to do Dialogue: 0,0:16:22.24,0:16:29.76,Default,,0000,0000,0000,,to use a code first approach in laravel Dialogue: 0,0:16:26.64,0:16:33.28,Default,,0000,0000,0000,,and using subscriptions well Dialogue: 0,0:16:29.76,0:16:36.56,Default,,0000,0000,0000,,you can't basically Dialogue: 0,0:16:33.28,0:16:39.44,Default,,0000,0000,0000,,and but yes this Dialogue: 0,0:16:36.56,0:16:41.12,Default,,0000,0000,0000,,approach should help you choose uh one Dialogue: 0,0:16:39.44,0:16:44.24,Default,,0000,0000,0000,,of those libraries Dialogue: 0,0:16:41.12,0:16:47.84,Default,,0000,0000,0000,,okay and uh i try to be Dialogue: 0,0:16:44.24,0:16:52.08,Default,,0000,0000,0000,,not too much biased but yes of course i Dialogue: 0,0:16:47.84,0:16:54.80,Default,,0000,0000,0000,,i altered a graphic light and so well Dialogue: 0,0:16:52.08,0:16:55.52,Default,,0000,0000,0000,,now we will enter the third phase of Dialogue: 0,0:16:54.80,0:16:58.32,Default,,0000,0000,0000,,this talk Dialogue: 0,0:16:55.52,0:16:59.76,Default,,0000,0000,0000,,and i will be doing a quick demo about Dialogue: 0,0:16:58.32,0:17:03.04,Default,,0000,0000,0000,,graphic light Dialogue: 0,0:16:59.76,0:17:04.80,Default,,0000,0000,0000,,before doing the demo i will try to Dialogue: 0,0:17:03.04,0:17:08.08,Default,,0000,0000,0000,,explain you the philosophy Dialogue: 0,0:17:04.80,0:17:11.84,Default,,0000,0000,0000,,that drove a graphical light basically Dialogue: 0,0:17:08.08,0:17:15.76,Default,,0000,0000,0000,,my id was uh well let's imagine Dialogue: 0,0:17:11.84,0:17:18.96,Default,,0000,0000,0000,,you want to do a simple echo query Dialogue: 0,0:17:15.76,0:17:22.08,Default,,0000,0000,0000,,in php okay Dialogue: 0,0:17:18.96,0:17:26.24,Default,,0000,0000,0000,,if you want to do such a query Dialogue: 0,0:17:22.08,0:17:29.68,Default,,0000,0000,0000,,in graphql it will look like this i'm Dialogue: 0,0:17:26.24,0:17:33.52,Default,,0000,0000,0000,,creating a query type and basically Dialogue: 0,0:17:29.68,0:17:37.92,Default,,0000,0000,0000,,yes there is a echo it takes a message Dialogue: 0,0:17:33.52,0:17:41.12,Default,,0000,0000,0000,,it will return um well i Dialogue: 0,0:17:37.92,0:17:44.88,Default,,0000,0000,0000,,i'm doing an echo to build that Dialogue: 0,0:17:41.12,0:17:47.52,Default,,0000,0000,0000,,using webonix i would need to put cisco Dialogue: 0,0:17:44.88,0:17:48.48,Default,,0000,0000,0000,,i already presented it i need to put an Dialogue: 0,0:17:47.52,0:17:50.48,Default,,0000,0000,0000,,echo field Dialogue: 0,0:17:48.48,0:17:51.92,Default,,0000,0000,0000,,which returns a string that takes into Dialogue: 0,0:17:50.48,0:17:54.24,Default,,0000,0000,0000,,argument a string Dialogue: 0,0:17:51.92,0:17:57.20,Default,,0000,0000,0000,,and and that results by reading the Dialogue: 0,0:17:54.24,0:18:00.24,Default,,0000,0000,0000,,arguments and returning them Dialogue: 0,0:17:57.20,0:18:01.60,Default,,0000,0000,0000,,but if i want to write the same echo in Dialogue: 0,0:18:00.24,0:18:06.40,Default,,0000,0000,0000,,pure php Dialogue: 0,0:18:01.60,0:18:09.84,Default,,0000,0000,0000,,basically it only takes four lines Dialogue: 0,0:18:06.40,0:18:13.52,Default,,0000,0000,0000,,basically the function name could map Dialogue: 0,0:18:09.84,0:18:16.64,Default,,0000,0000,0000,,the query name in graphql the parameters Dialogue: 0,0:18:13.52,0:18:19.20,Default,,0000,0000,0000,,here could Dialogue: 0,0:18:16.64,0:18:20.88,Default,,0000,0000,0000,,map graphical arguments and the return Dialogue: 0,0:18:19.20,0:18:22.64,Default,,0000,0000,0000,,type is already defined Dialogue: 0,0:18:20.88,0:18:24.80,Default,,0000,0000,0000,,and then the body of the function is Dialogue: 0,0:18:22.64,0:18:28.40,Default,,0000,0000,0000,,actually my resolver Dialogue: 0,0:18:24.80,0:18:31.20,Default,,0000,0000,0000,,so what would be really cool Dialogue: 0,0:18:28.40,0:18:32.00,Default,,0000,0000,0000,,would be what if i was able to simply Dialogue: 0,0:18:31.20,0:18:35.20,Default,,0000,0000,0000,,put Dialogue: 0,0:18:32.00,0:18:39.12,Default,,0000,0000,0000,,a query annotation here Dialogue: 0,0:18:35.20,0:18:42.88,Default,,0000,0000,0000,,and well this query annotation Dialogue: 0,0:18:39.12,0:18:46.00,Default,,0000,0000,0000,,uh would automatically Dialogue: 0,0:18:42.88,0:18:46.48,Default,,0000,0000,0000,,tell my library graphically like in my Dialogue: 0,0:18:46.00,0:18:50.00,Default,,0000,0000,0000,,case Dialogue: 0,0:18:46.48,0:18:52.16,Default,,0000,0000,0000,,that this function should be actually Dialogue: 0,0:18:50.00,0:18:53.36,Default,,0000,0000,0000,,a graphical query expose it in graphql Dialogue: 0,0:18:52.16,0:18:56.32,Default,,0000,0000,0000,,that's it Dialogue: 0,0:18:53.36,0:18:58.72,Default,,0000,0000,0000,,and so that's the philosophy behind Dialogue: 0,0:18:56.32,0:19:02.24,Default,,0000,0000,0000,,graphqlite using annotations Dialogue: 0,0:18:58.72,0:19:06.16,Default,,0000,0000,0000,,and using the fact that php Dialogue: 0,0:19:02.24,0:19:09.44,Default,,0000,0000,0000,,is already typed and Dialogue: 0,0:19:06.16,0:19:10.16,Default,,0000,0000,0000,,basically taking php types and mapping Dialogue: 0,0:19:09.44,0:19:13.20,Default,,0000,0000,0000,,them Dialogue: 0,0:19:10.16,0:19:15.12,Default,,0000,0000,0000,,automatically to graphical types so Dialogue: 0,0:19:13.20,0:19:17.44,Default,,0000,0000,0000,,this is graphic light graphicalite is a Dialogue: 0,0:19:15.12,0:19:20.96,Default,,0000,0000,0000,,mapper between php types Dialogue: 0,0:19:17.44,0:19:23.68,Default,,0000,0000,0000,,and graphql types and Dialogue: 0,0:19:20.96,0:19:25.68,Default,,0000,0000,0000,,what is kind of fun is that it actually Dialogue: 0,0:19:23.68,0:19:29.12,Default,,0000,0000,0000,,plays quite nice with doctrine Dialogue: 0,0:19:25.68,0:19:32.24,Default,,0000,0000,0000,,okay doctrine is the orm Dialogue: 0,0:19:29.12,0:19:34.48,Default,,0000,0000,0000,,used by a symphony Dialogue: 0,0:19:32.24,0:19:37.12,Default,,0000,0000,0000,,and basically in doctrine you put Dialogue: 0,0:19:34.48,0:19:40.08,Default,,0000,0000,0000,,annotations in your php objects Dialogue: 0,0:19:37.12,0:19:41.28,Default,,0000,0000,0000,,and doctrine is doing a mapping between Dialogue: 0,0:19:40.08,0:19:44.00,Default,,0000,0000,0000,,php objects Dialogue: 0,0:19:41.28,0:19:44.72,Default,,0000,0000,0000,,and database tables and from the php Dialogue: 0,0:19:44.00,0:19:47.52,Default,,0000,0000,0000,,objects Dialogue: 0,0:19:44.72,0:19:49.20,Default,,0000,0000,0000,,it can generate the database model and Dialogue: 0,0:19:47.52,0:19:49.60,Default,,0000,0000,0000,,with graphilite we are doing the same Dialogue: 0,0:19:49.20,0:19:52.72,Default,,0000,0000,0000,,thing Dialogue: 0,0:19:49.60,0:19:56.56,Default,,0000,0000,0000,,we are starting from the php object and Dialogue: 0,0:19:52.72,0:19:56.56,Default,,0000,0000,0000,,we are generating a graphql schema Dialogue: 0,0:19:57.28,0:20:03.76,Default,,0000,0000,0000,,yeah so let's go for the live coding Dialogue: 0,0:20:01.84,0:20:05.68,Default,,0000,0000,0000,,quick note i already told it is Dialogue: 0,0:20:03.76,0:20:08.96,Default,,0000,0000,0000,,framework agnostic Dialogue: 0,0:20:05.68,0:20:12.24,Default,,0000,0000,0000,,you can use it starting from php 7.2 Dialogue: 0,0:20:08.96,0:20:12.24,Default,,0000,0000,0000,,and it's based on webonix Dialogue: 0,0:20:13.44,0:20:20.96,Default,,0000,0000,0000,,now for the hard part for me Dialogue: 0,0:20:17.04,0:20:23.68,Default,,0000,0000,0000,,the demo yeah so we are going Dialogue: 0,0:20:20.96,0:20:26.56,Default,,0000,0000,0000,,to uh make a quick demo with a Dialogue: 0,0:20:23.68,0:20:29.76,Default,,0000,0000,0000,,marketplace and basically my marketplace Dialogue: 0,0:20:26.56,0:20:33.20,Default,,0000,0000,0000,,has companies and in each company Dialogue: 0,0:20:29.76,0:20:36.16,Default,,0000,0000,0000,,can have several products and we will be Dialogue: 0,0:20:33.20,0:20:37.52,Default,,0000,0000,0000,,focusing on this relationship between Dialogue: 0,0:20:36.16,0:20:40.72,Default,,0000,0000,0000,,companies and products Dialogue: 0,0:20:37.52,0:20:44.00,Default,,0000,0000,0000,,in the last uh in the next five minutes Dialogue: 0,0:20:40.72,0:20:48.48,Default,,0000,0000,0000,,right so Dialogue: 0,0:20:44.00,0:20:52.56,Default,,0000,0000,0000,,let's jump to the code here Dialogue: 0,0:20:48.48,0:20:55.76,Default,,0000,0000,0000,,i already did set up a Dialogue: 0,0:20:52.56,0:20:58.08,Default,,0000,0000,0000,,graphql a graphical light in Dialogue: 0,0:20:55.76,0:20:59.36,Default,,0000,0000,0000,,a symphony project the database is Dialogue: 0,0:20:58.08,0:21:03.52,Default,,0000,0000,0000,,already loaded Dialogue: 0,0:20:59.36,0:21:06.64,Default,,0000,0000,0000,,and i wrote a company controller okay so Dialogue: 0,0:21:03.52,0:21:10.72,Default,,0000,0000,0000,,it's actually a controller like like Dialogue: 0,0:21:06.64,0:21:13.60,Default,,0000,0000,0000,,like you can find some in nbc frameworks Dialogue: 0,0:21:10.72,0:21:14.24,Default,,0000,0000,0000,,except it is in the graphql controller Dialogue: 0,0:21:13.60,0:21:16.64,Default,,0000,0000,0000,,namespace Dialogue: 0,0:21:14.24,0:21:18.00,Default,,0000,0000,0000,,okay and if you want to put queries or Dialogue: 0,0:21:16.64,0:21:19.84,Default,,0000,0000,0000,,mutations Dialogue: 0,0:21:18.00,0:21:21.44,Default,,0000,0000,0000,,somewhere in your code you will put them Dialogue: 0,0:21:19.84,0:21:23.76,Default,,0000,0000,0000,,in a controller Dialogue: 0,0:21:21.44,0:21:24.80,Default,,0000,0000,0000,,so my controller is fed with a company Dialogue: 0,0:21:23.76,0:21:27.44,Default,,0000,0000,0000,,repository Dialogue: 0,0:21:24.80,0:21:28.96,Default,,0000,0000,0000,,the company repository is the object Dialogue: 0,0:21:27.44,0:21:33.20,Default,,0000,0000,0000,,that will access the database Dialogue: 0,0:21:28.96,0:21:35.12,Default,,0000,0000,0000,,okay and i have this Dialogue: 0,0:21:33.20,0:21:36.56,Default,,0000,0000,0000,,method which is called get companies Dialogue: 0,0:21:35.12,0:21:39.04,Default,,0000,0000,0000,,that takes Dialogue: 0,0:21:36.56,0:21:40.88,Default,,0000,0000,0000,,a search string and that will query the Dialogue: 0,0:21:39.04,0:21:42.08,Default,,0000,0000,0000,,database for the string and return the Dialogue: 0,0:21:40.88,0:21:44.56,Default,,0000,0000,0000,,results Dialogue: 0,0:21:42.08,0:21:45.52,Default,,0000,0000,0000,,what i'm going to do is i'm going to put Dialogue: 0,0:21:44.56,0:21:50.08,Default,,0000,0000,0000,,an annotation Dialogue: 0,0:21:45.52,0:21:53.12,Default,,0000,0000,0000,,here and Dialogue: 0,0:21:50.08,0:21:55.44,Default,,0000,0000,0000,,i'm going to put a query annotation to Dialogue: 0,0:21:53.12,0:21:57.98,Default,,0000,0000,0000,,tell graphic life okay Dialogue: 0,0:21:55.44,0:22:00.64,Default,,0000,0000,0000,,take this company's Dialogue: 0,0:21:57.98,0:22:03.60,Default,,0000,0000,0000,,[Music] Dialogue: 0,0:22:00.64,0:22:05.76,Default,,0000,0000,0000,,function and expose it in the graphql Dialogue: 0,0:22:03.60,0:22:08.72,Default,,0000,0000,0000,,schema Dialogue: 0,0:22:05.76,0:22:10.40,Default,,0000,0000,0000,,if i go in firefox here i've got a Dialogue: 0,0:22:08.72,0:22:12.96,Default,,0000,0000,0000,,graphical Dialogue: 0,0:22:10.40,0:22:13.68,Default,,0000,0000,0000,,test client setup so i'm going to Dialogue: 0,0:22:12.96,0:22:17.60,Default,,0000,0000,0000,,refresh Dialogue: 0,0:22:13.68,0:22:20.80,Default,,0000,0000,0000,,the page and oops Dialogue: 0,0:22:17.60,0:22:24.40,Default,,0000,0000,0000,,okay i'm getting an error let's make Dialogue: 0,0:22:20.80,0:22:28.48,Default,,0000,0000,0000,,a quick zoom on this error and basically Dialogue: 0,0:22:24.40,0:22:32.08,Default,,0000,0000,0000,,what graphicality is telling me is that Dialogue: 0,0:22:28.48,0:22:35.76,Default,,0000,0000,0000,,in the get companies method a type hint Dialogue: 0,0:22:32.08,0:22:39.28,Default,,0000,0000,0000,,is missing okay you remember Dialogue: 0,0:22:35.76,0:22:41.60,Default,,0000,0000,0000,,that php is optionally typed but graphql Dialogue: 0,0:22:39.28,0:22:44.24,Default,,0000,0000,0000,,must have types so when i'm using Dialogue: 0,0:22:41.60,0:22:47.60,Default,,0000,0000,0000,,graphqlite i must put type Dialogue: 0,0:22:44.24,0:22:50.96,Default,,0000,0000,0000,,into all my functions uh Dialogue: 0,0:22:47.60,0:22:53.68,Default,,0000,0000,0000,,all my queries here i did not define Dialogue: 0,0:22:50.96,0:22:54.00,Default,,0000,0000,0000,,any return type so i need to define one Dialogue: 0,0:22:53.68,0:22:57.52,Default,,0000,0000,0000,,so Dialogue: 0,0:22:54.00,0:23:00.00,Default,,0000,0000,0000,,i'm going to say company get companies Dialogue: 0,0:22:57.52,0:23:01.44,Default,,0000,0000,0000,,is returning an array of companies now i Dialogue: 0,0:23:00.00,0:23:04.32,Default,,0000,0000,0000,,have a problem Dialogue: 0,0:23:01.44,0:23:06.72,Default,,0000,0000,0000,,it's that php does not have the notion Dialogue: 0,0:23:04.32,0:23:08.40,Default,,0000,0000,0000,,of generics so i cannot say something Dialogue: 0,0:23:06.72,0:23:11.68,Default,,0000,0000,0000,,like okay it's an array of company Dialogue: 0,0:23:08.40,0:23:12.56,Default,,0000,0000,0000,,this is not valid php right so what i'm Dialogue: 0,0:23:11.68,0:23:16.32,Default,,0000,0000,0000,,gonna do Dialogue: 0,0:23:12.56,0:23:19.44,Default,,0000,0000,0000,,is i'm going to put an uh Dialogue: 0,0:23:16.32,0:23:22.56,Default,,0000,0000,0000,,a code a command in the php doc and Dialogue: 0,0:23:19.44,0:23:23.28,Default,,0000,0000,0000,,in the php dock i can put anything and Dialogue: 0,0:23:22.56,0:23:27.36,Default,,0000,0000,0000,,especially Dialogue: 0,0:23:23.28,0:23:29.36,Default,,0000,0000,0000,,i will give a type hint to uh Dialogue: 0,0:23:27.36,0:23:31.12,Default,,0000,0000,0000,,to graph the light and tell him that Dialogue: 0,0:23:29.36,0:23:35.76,Default,,0000,0000,0000,,this array is actually Dialogue: 0,0:23:31.12,0:23:39.52,Default,,0000,0000,0000,,an array of companies so let's go back Dialogue: 0,0:23:35.76,0:23:43.12,Default,,0000,0000,0000,,to firefox refresh the page Dialogue: 0,0:23:39.52,0:23:46.88,Default,,0000,0000,0000,,and oh i'm getting another error Dialogue: 0,0:23:43.12,0:23:49.36,Default,,0000,0000,0000,,okay let's zoom on this lever Dialogue: 0,0:23:46.88,0:23:50.48,Default,,0000,0000,0000,,it's error driven development i'm a big Dialogue: 0,0:23:49.36,0:23:54.96,Default,,0000,0000,0000,,fan of ever Dialogue: 0,0:23:50.48,0:23:58.72,Default,,0000,0000,0000,,driven development it works really well Dialogue: 0,0:23:54.96,0:24:01.12,Default,,0000,0000,0000,,no i and i actually tried to Dialogue: 0,0:23:58.72,0:24:03.20,Default,,0000,0000,0000,,make sure that all the error messages Dialogue: 0,0:24:01.12,0:24:06.48,Default,,0000,0000,0000,,are quite clear Dialogue: 0,0:24:03.20,0:24:09.76,Default,,0000,0000,0000,,it's really important and well Dialogue: 0,0:24:06.48,0:24:12.48,Default,,0000,0000,0000,,in your own code try uh to pay attention Dialogue: 0,0:24:09.76,0:24:13.76,Default,,0000,0000,0000,,on the other messages you are generating Dialogue: 0,0:24:12.48,0:24:17.36,Default,,0000,0000,0000,,you are doing Dialogue: 0,0:24:13.76,0:24:19.84,Default,,0000,0000,0000,,your future self favor uh yeah Dialogue: 0,0:24:17.36,0:24:21.36,Default,,0000,0000,0000,,so basically it's telling me that in get Dialogue: 0,0:24:19.84,0:24:24.48,Default,,0000,0000,0000,,companies Dialogue: 0,0:24:21.36,0:24:26.40,Default,,0000,0000,0000,,it cannot map the class company to a Dialogue: 0,0:24:24.48,0:24:28.32,Default,,0000,0000,0000,,known required type Dialogue: 0,0:24:26.40,0:24:30.56,Default,,0000,0000,0000,,what graduality is actually tell me Dialogue: 0,0:24:28.32,0:24:34.72,Default,,0000,0000,0000,,telling me is that i did not tell Dialogue: 0,0:24:30.56,0:24:38.08,Default,,0000,0000,0000,,him explicitly that company Dialogue: 0,0:24:34.72,0:24:40.56,Default,,0000,0000,0000,,is a graphical type and so to do that Dialogue: 0,0:24:38.08,0:24:42.72,Default,,0000,0000,0000,,i simply add an annotation which is the Dialogue: 0,0:24:40.56,0:24:46.00,Default,,0000,0000,0000,,type annotation Dialogue: 0,0:24:42.72,0:24:48.08,Default,,0000,0000,0000,,and the type annotation is Dialogue: 0,0:24:46.00,0:24:49.68,Default,,0000,0000,0000,,telling graphical life okay map this Dialogue: 0,0:24:48.08,0:24:52.80,Default,,0000,0000,0000,,class to a tie Dialogue: 0,0:24:49.68,0:24:53.68,Default,,0000,0000,0000,,of course a type must have some face so Dialogue: 0,0:24:52.80,0:24:58.00,Default,,0000,0000,0000,,i'm going to Dialogue: 0,0:24:53.68,0:25:01.28,Default,,0000,0000,0000,,put annotations in the in the gators Dialogue: 0,0:24:58.00,0:25:04.32,Default,,0000,0000,0000,,here and i'm going to say okay expose Dialogue: 0,0:25:01.28,0:25:07.52,Default,,0000,0000,0000,,id as a fill and name Dialogue: 0,0:25:04.32,0:25:10.32,Default,,0000,0000,0000,,as a field and maybe website Dialogue: 0,0:25:07.52,0:25:10.88,Default,,0000,0000,0000,,as a field too also notice that i'm Dialogue: 0,0:25:10.32,0:25:14.08,Default,,0000,0000,0000,,putting Dialogue: 0,0:25:10.88,0:25:16.48,Default,,0000,0000,0000,,the field annotation on getters i'm not Dialogue: 0,0:25:14.08,0:25:19.44,Default,,0000,0000,0000,,putting the annotation Dialogue: 0,0:25:16.48,0:25:23.52,Default,,0000,0000,0000,,on the properties the properties are are Dialogue: 0,0:25:19.44,0:25:23.52,Default,,0000,0000,0000,,private so i cannot access them directly Dialogue: 0,0:25:23.92,0:25:27.36,Default,,0000,0000,0000,,doctrine has annotation on properties Dialogue: 0,0:25:26.88,0:25:29.68,Default,,0000,0000,0000,,because Dialogue: 0,0:25:27.36,0:25:30.48,Default,,0000,0000,0000,,it is doing some black magic and Dialogue: 0,0:25:29.68,0:25:33.12,Default,,0000,0000,0000,,actually Dialogue: 0,0:25:30.48,0:25:34.96,Default,,0000,0000,0000,,accessing directly private properties Dialogue: 0,0:25:33.12,0:25:38.16,Default,,0000,0000,0000,,i'm not doing that in graphic light Dialogue: 0,0:25:34.96,0:25:39.92,Default,,0000,0000,0000,,okay so yes i must put the fill Dialogue: 0,0:25:38.16,0:25:43.52,Default,,0000,0000,0000,,annotation on the getters Dialogue: 0,0:25:39.92,0:25:46.64,Default,,0000,0000,0000,,so let's go back to Dialogue: 0,0:25:43.52,0:25:50.16,Default,,0000,0000,0000,,graphical i'm refreshing the page Dialogue: 0,0:25:46.64,0:25:53.44,Default,,0000,0000,0000,,i don't have any error so it looks good Dialogue: 0,0:25:50.16,0:25:56.80,Default,,0000,0000,0000,,and if i'm looking at writing a query Dialogue: 0,0:25:53.44,0:26:00.48,Default,,0000,0000,0000,,i can my company pool will just appear Dialogue: 0,0:25:56.80,0:26:02.64,Default,,0000,0000,0000,,and yeah i can do a search on any Dialogue: 0,0:26:00.48,0:26:05.20,Default,,0000,0000,0000,,companies containing the a Dialogue: 0,0:26:02.64,0:26:06.32,Default,,0000,0000,0000,,and i'm going to display the id and the Dialogue: 0,0:26:05.20,0:26:10.00,Default,,0000,0000,0000,,name Dialogue: 0,0:26:06.32,0:26:10.80,Default,,0000,0000,0000,,place the request and it is working and Dialogue: 0,0:26:10.00,0:26:14.96,Default,,0000,0000,0000,,if i'm Dialogue: 0,0:26:10.80,0:26:18.96,Default,,0000,0000,0000,,adding the website right Dialogue: 0,0:26:14.96,0:26:20.64,Default,,0000,0000,0000,,good so basically you can see that i Dialogue: 0,0:26:18.96,0:26:23.84,Default,,0000,0000,0000,,managed to create Dialogue: 0,0:26:20.64,0:26:24.88,Default,,0000,0000,0000,,a graphql api by basically adding three Dialogue: 0,0:26:23.84,0:26:28.96,Default,,0000,0000,0000,,annotations Dialogue: 0,0:26:24.88,0:26:32.48,Default,,0000,0000,0000,,query type and fill which is pretty cool Dialogue: 0,0:26:28.96,0:26:35.60,Default,,0000,0000,0000,,um and yeah Dialogue: 0,0:26:32.48,0:26:37.92,Default,,0000,0000,0000,,let's so far i only fetched Dialogue: 0,0:26:35.60,0:26:39.60,Default,,0000,0000,0000,,fields from companies so let's do some Dialogue: 0,0:26:37.92,0:26:43.20,Default,,0000,0000,0000,,binding with a product Dialogue: 0,0:26:39.60,0:26:47.60,Default,,0000,0000,0000,,so i'm going to go in the get products Dialogue: 0,0:26:43.20,0:26:50.64,Default,,0000,0000,0000,,getter and i'm gonna add a field on it Dialogue: 0,0:26:47.60,0:26:53.44,Default,,0000,0000,0000,,i'm gonna refresh the page Dialogue: 0,0:26:50.64,0:26:55.12,Default,,0000,0000,0000,,and i'm getting another evolve if i'm Dialogue: 0,0:26:53.44,0:26:57.12,Default,,0000,0000,0000,,zooming on this error Dialogue: 0,0:26:55.12,0:26:58.32,Default,,0000,0000,0000,,it is telling me that it cannot map the Dialogue: 0,0:26:57.12,0:27:01.60,Default,,0000,0000,0000,,product class Dialogue: 0,0:26:58.32,0:27:02.64,Default,,0000,0000,0000,,to a known graphical type okay we Dialogue: 0,0:27:01.60,0:27:06.00,Default,,0000,0000,0000,,already saw Dialogue: 0,0:27:02.64,0:27:08.16,Default,,0000,0000,0000,,this error two minutes ago so i'm pretty Dialogue: 0,0:27:06.00,0:27:09.92,Default,,0000,0000,0000,,sure you know what i should do i should Dialogue: 0,0:27:08.16,0:27:12.88,Default,,0000,0000,0000,,go in the product class Dialogue: 0,0:27:09.92,0:27:14.16,Default,,0000,0000,0000,,and instruct graphicalize that the Dialogue: 0,0:27:12.88,0:27:17.44,Default,,0000,0000,0000,,product Dialogue: 0,0:27:14.16,0:27:19.60,Default,,0000,0000,0000,,class is also a tie Dialogue: 0,0:27:17.44,0:27:22.08,Default,,0000,0000,0000,,and so i'm putting a type here and i'm Dialogue: 0,0:27:19.60,0:27:22.08,Default,,0000,0000,0000,,going to Dialogue: 0,0:27:22.40,0:27:29.52,Default,,0000,0000,0000,,put a field annotation Dialogue: 0,0:27:26.48,0:27:32.84,Default,,0000,0000,0000,,on the id on the name Dialogue: 0,0:27:29.52,0:27:34.56,Default,,0000,0000,0000,,on the price on the margin of the Dialogue: 0,0:27:32.84,0:27:38.56,Default,,0000,0000,0000,,product and Dialogue: 0,0:27:34.56,0:27:38.56,Default,,0000,0000,0000,,if i'm refreshing the page Dialogue: 0,0:27:38.72,0:27:43.36,Default,,0000,0000,0000,,yeah everything seems to be going great Dialogue: 0,0:27:40.80,0:27:46.84,Default,,0000,0000,0000,,and i can access the products Dialogue: 0,0:27:43.36,0:27:48.72,Default,,0000,0000,0000,,and access the id and the name of the Dialogue: 0,0:27:46.84,0:27:52.32,Default,,0000,0000,0000,,product Dialogue: 0,0:27:48.72,0:27:55.60,Default,,0000,0000,0000,,and it's working yeah Dialogue: 0,0:27:52.32,0:27:59.20,Default,,0000,0000,0000,,so that's it and basically Dialogue: 0,0:27:55.60,0:28:02.08,Default,,0000,0000,0000,,my job when i set up a graphql api Dialogue: 0,0:27:59.20,0:28:02.64,Default,,0000,0000,0000,,becomes adding a few annotations and Dialogue: 0,0:28:02.08,0:28:05.04,Default,,0000,0000,0000,,yeah Dialogue: 0,0:28:02.64,0:28:05.04,Default,,0000,0000,0000,,that's it Dialogue: 0,0:28:05.68,0:28:13.04,Default,,0000,0000,0000,,so yeah for the live demo Dialogue: 0,0:28:09.60,0:28:15.52,Default,,0000,0000,0000,,i won't be going any further i will be Dialogue: 0,0:28:13.04,0:28:16.08,Default,,0000,0000,0000,,presenting you very quickly a few Dialogue: 0,0:28:15.52,0:28:20.00,Default,,0000,0000,0000,,additional Dialogue: 0,0:28:16.08,0:28:22.24,Default,,0000,0000,0000,,features for instance if you want to put Dialogue: 0,0:28:20.00,0:28:23.68,Default,,0000,0000,0000,,to create a mutation you have a mutation Dialogue: 0,0:28:22.24,0:28:25.76,Default,,0000,0000,0000,,annotation Dialogue: 0,0:28:23.68,0:28:27.44,Default,,0000,0000,0000,,that can be used to create a mutation it Dialogue: 0,0:28:25.76,0:28:30.88,Default,,0000,0000,0000,,works exactly the same as Dialogue: 0,0:28:27.44,0:28:32.80,Default,,0000,0000,0000,,the query annotation works Dialogue: 0,0:28:30.88,0:28:35.28,Default,,0000,0000,0000,,there is a brilliant support for Dialogue: 0,0:28:32.80,0:28:37.36,Default,,0000,0000,0000,,authentication and authorization Dialogue: 0,0:28:35.28,0:28:38.48,Default,,0000,0000,0000,,that is plugged into your favorite Dialogue: 0,0:28:37.36,0:28:41.60,Default,,0000,0000,0000,,framework Dialogue: 0,0:28:38.48,0:28:43.44,Default,,0000,0000,0000,,laravel symphony whatever but basically Dialogue: 0,0:28:41.60,0:28:47.52,Default,,0000,0000,0000,,if you are using the right annotation Dialogue: 0,0:28:43.44,0:28:50.88,Default,,0000,0000,0000,,and passing the name of a write Dialogue: 0,0:28:47.52,0:28:54.40,Default,,0000,0000,0000,,well then this query will be Dialogue: 0,0:28:50.88,0:28:55.60,Default,,0000,0000,0000,,visible only if the user that is Dialogue: 0,0:28:54.40,0:28:57.52,Default,,0000,0000,0000,,currently logged Dialogue: 0,0:28:55.60,0:29:00.24,Default,,0000,0000,0000,,has this right you can also use the Dialogue: 0,0:28:57.52,0:29:02.48,Default,,0000,0000,0000,,right annotation and feels directly Dialogue: 0,0:29:00.24,0:29:05.04,Default,,0000,0000,0000,,you can even do fine-grained Dialogue: 0,0:29:02.48,0:29:08.08,Default,,0000,0000,0000,,authorization Dialogue: 0,0:29:05.04,0:29:10.00,Default,,0000,0000,0000,,if you want to say that some objects can Dialogue: 0,0:29:08.08,0:29:13.76,Default,,0000,0000,0000,,be seen but not others Dialogue: 0,0:29:10.00,0:29:17.04,Default,,0000,0000,0000,,in this example i've got an email field Dialogue: 0,0:29:13.76,0:29:19.92,Default,,0000,0000,0000,,from a user and basically i am saying Dialogue: 0,0:29:17.04,0:29:20.24,Default,,0000,0000,0000,,that i am looking at the component of Dialogue: 0,0:29:19.92,0:29:23.68,Default,,0000,0000,0000,,the Dialogue: 0,0:29:20.24,0:29:26.56,Default,,0000,0000,0000,,the user of the current user Dialogue: 0,0:29:23.68,0:29:27.84,Default,,0000,0000,0000,,and comparing it with the company of the Dialogue: 0,0:29:26.56,0:29:30.88,Default,,0000,0000,0000,,user that is logged Dialogue: 0,0:29:27.84,0:29:32.32,Default,,0000,0000,0000,,user here refers to the user that is Dialogue: 0,0:29:30.88,0:29:35.44,Default,,0000,0000,0000,,currently loaded Dialogue: 0,0:29:32.32,0:29:37.44,Default,,0000,0000,0000,,and basically this is saying i can see Dialogue: 0,0:29:35.44,0:29:39.84,Default,,0000,0000,0000,,the email of the people that are Dialogue: 0,0:29:37.44,0:29:41.20,Default,,0000,0000,0000,,in the same company as me i can see the Dialogue: 0,0:29:39.84,0:29:43.20,Default,,0000,0000,0000,,email of my colleagues Dialogue: 0,0:29:41.20,0:29:44.88,Default,,0000,0000,0000,,but i cannot see the email of someone Dialogue: 0,0:29:43.20,0:29:47.84,Default,,0000,0000,0000,,that is Dialogue: 0,0:29:44.88,0:29:48.48,Default,,0000,0000,0000,,not my colleague so with this security Dialogue: 0,0:29:47.84,0:29:51.04,Default,,0000,0000,0000,,annotation Dialogue: 0,0:29:48.48,0:29:53.52,Default,,0000,0000,0000,,we can have something that is going Dialogue: 0,0:29:51.04,0:29:56.96,Default,,0000,0000,0000,,quite deep Dialogue: 0,0:29:53.52,0:29:59.92,Default,,0000,0000,0000,,to do fine-grained authorization Dialogue: 0,0:29:56.96,0:30:01.20,Default,,0000,0000,0000,,another feature i like a lot is auto Dialogue: 0,0:29:59.92,0:30:05.12,Default,,0000,0000,0000,,wiring Dialogue: 0,0:30:01.20,0:30:08.64,Default,,0000,0000,0000,,uh basically here we are in a domain Dialogue: 0,0:30:05.12,0:30:12.16,Default,,0000,0000,0000,,object a product and uh Dialogue: 0,0:30:08.64,0:30:12.96,Default,,0000,0000,0000,,let's admit i want to compute the v80 of Dialogue: 0,0:30:12.16,0:30:15.04,Default,,0000,0000,0000,,a product Dialogue: 0,0:30:12.96,0:30:16.40,Default,,0000,0000,0000,,computing the v80 of a product can be Dialogue: 0,0:30:15.04,0:30:20.00,Default,,0000,0000,0000,,quite complicated Dialogue: 0,0:30:16.40,0:30:23.04,Default,,0000,0000,0000,,maybe i need to know uh the type of the Dialogue: 0,0:30:20.00,0:30:26.96,Default,,0000,0000,0000,,product the country the Dialogue: 0,0:30:23.04,0:30:29.84,Default,,0000,0000,0000,,uh the user is in so it can be difficult Dialogue: 0,0:30:26.96,0:30:31.44,Default,,0000,0000,0000,,and we typically won't do it in the Dialogue: 0,0:30:29.84,0:30:34.40,Default,,0000,0000,0000,,domain object but rather Dialogue: 0,0:30:31.44,0:30:36.00,Default,,0000,0000,0000,,rather we will call a service but you Dialogue: 0,0:30:34.40,0:30:39.36,Default,,0000,0000,0000,,when you are in a domain object Dialogue: 0,0:30:36.00,0:30:42.48,Default,,0000,0000,0000,,accessing services accessing services is Dialogue: 0,0:30:39.36,0:30:45.52,Default,,0000,0000,0000,,difficult and what we can do here is Dialogue: 0,0:30:42.48,0:30:46.96,Default,,0000,0000,0000,,auto wire called the auto wire ring and Dialogue: 0,0:30:45.52,0:30:47.92,Default,,0000,0000,0000,,basically graphic light will Dialogue: 0,0:30:46.96,0:30:50.80,Default,,0000,0000,0000,,automatically Dialogue: 0,0:30:47.92,0:30:52.48,Default,,0000,0000,0000,,inject when i'm calling the v80 field it Dialogue: 0,0:30:50.80,0:30:55.36,Default,,0000,0000,0000,,will automatically inject Dialogue: 0,0:30:52.48,0:30:56.08,Default,,0000,0000,0000,,from the dependency injection container Dialogue: 0,0:30:55.36,0:30:59.04,Default,,0000,0000,0000,,the service Dialogue: 0,0:30:56.08,0:31:01.20,Default,,0000,0000,0000,,the v80 service and i can use it Dialogue: 0,0:30:59.04,0:31:05.04,Default,,0000,0000,0000,,directly in the resolver here Dialogue: 0,0:31:01.20,0:31:07.36,Default,,0000,0000,0000,,so it enables me to access services and Dialogue: 0,0:31:05.04,0:31:08.40,Default,,0000,0000,0000,,from a domain object by passing those Dialogue: 0,0:31:07.36,0:31:10.96,Default,,0000,0000,0000,,services Dialogue: 0,0:31:08.40,0:31:11.52,Default,,0000,0000,0000,,in parameters of the resolver which is Dialogue: 0,0:31:10.96,0:31:15.28,Default,,0000,0000,0000,,kind of Dialogue: 0,0:31:11.52,0:31:17.12,Default,,0000,0000,0000,,kind of cool yeah there are many many Dialogue: 0,0:31:15.28,0:31:20.24,Default,,0000,0000,0000,,more features Dialogue: 0,0:31:17.12,0:31:21.12,Default,,0000,0000,0000,,available uh we have support for Dialogue: 0,0:31:20.24,0:31:23.76,Default,,0000,0000,0000,,validation Dialogue: 0,0:31:21.12,0:31:24.16,Default,,0000,0000,0000,,uh for uh indium types even if they Dialogue: 0,0:31:23.76,0:31:28.24,Default,,0000,0000,0000,,don't Dialogue: 0,0:31:24.16,0:31:30.40,Default,,0000,0000,0000,,exist in php file uploads um Dialogue: 0,0:31:28.24,0:31:31.76,Default,,0000,0000,0000,,what i invite you to do if you are Dialogue: 0,0:31:30.40,0:31:34.88,Default,,0000,0000,0000,,interested Dialogue: 0,0:31:31.76,0:31:38.08,Default,,0000,0000,0000,,in trying out graphqlite is Dialogue: 0,0:31:34.88,0:31:41.20,Default,,0000,0000,0000,,having a look at the documentation Dialogue: 0,0:31:38.08,0:31:44.56,Default,,0000,0000,0000,,everything is i hope clearly documented Dialogue: 0,0:31:41.20,0:31:45.12,Default,,0000,0000,0000,,and if you have any issue well you can Dialogue: 0,0:31:44.56,0:31:49.04,Default,,0000,0000,0000,,always Dialogue: 0,0:31:45.12,0:31:52.48,Default,,0000,0000,0000,,contact me either on Dialogue: 0,0:31:49.04,0:31:55.76,Default,,0000,0000,0000,,twitter directly or if you prefer Dialogue: 0,0:31:52.48,0:31:58.96,Default,,0000,0000,0000,,uh just open an issue Dialogue: 0,0:31:55.76,0:32:02.00,Default,,0000,0000,0000,,on the graphqlite repository yeah Dialogue: 0,0:31:58.96,0:32:05.12,Default,,0000,0000,0000,,so yeah that's repetitive let's wrap uh Dialogue: 0,0:32:02.00,0:32:08.08,Default,,0000,0000,0000,,this um this talk uh Dialogue: 0,0:32:05.12,0:32:09.44,Default,,0000,0000,0000,,basically uh doing graphql in php is Dialogue: 0,0:32:08.08,0:32:12.56,Default,,0000,0000,0000,,definitely possible Dialogue: 0,0:32:09.44,0:32:13.20,Default,,0000,0000,0000,,you have many possibilities out there uh Dialogue: 0,0:32:12.56,0:32:16.64,Default,,0000,0000,0000,,and this is Dialogue: 0,0:32:13.20,0:32:19.92,Default,,0000,0000,0000,,since graphql is pretty cool uh Dialogue: 0,0:32:16.64,0:32:20.96,Default,,0000,0000,0000,,well i definitely invite you to to try Dialogue: 0,0:32:19.92,0:32:24.08,Default,,0000,0000,0000,,it out Dialogue: 0,0:32:20.96,0:32:26.48,Default,,0000,0000,0000,,and uh that's it do you have any Dialogue: 0,0:32:24.08,0:32:26.48,Default,,0000,0000,0000,,questions Dialogue: 0,0:32:27.12,0:32:30.32,Default,,0000,0000,0000,,thanks so much david it was such Dialogue: 0,0:32:29.04,0:32:32.64,Default,,0000,0000,0000,,incredible talk Dialogue: 0,0:32:30.32,0:32:35.52,Default,,0000,0000,0000,,i really enjoyed it all the life current Dialogue: 0,0:32:32.64,0:32:35.52,Default,,0000,0000,0000,,day we were scared Dialogue: 0,0:32:35.76,0:32:39.44,Default,,0000,0000,0000,,yeah everything was incredible so that's Dialogue: 0,0:32:37.60,0:32:43.04,Default,,0000,0000,0000,,great uh so yeah Dialogue: 0,0:32:39.44,0:32:46.24,Default,,0000,0000,0000,,do yeah we have a question yes Dialogue: 0,0:32:43.04,0:32:49.52,Default,,0000,0000,0000,,uh so florian he's asking about Dialogue: 0,0:32:46.24,0:32:52.56,Default,,0000,0000,0000,,if graph graphic graph live Dialogue: 0,0:32:49.52,0:32:55.44,Default,,0000,0000,0000,,is is gonna support or is currently Dialogue: 0,0:32:52.56,0:32:57.20,Default,,0000,0000,0000,,supporting subscriptions Dialogue: 0,0:32:55.44,0:32:59.92,Default,,0000,0000,0000,,it is not currently supporting Dialogue: 0,0:32:57.20,0:33:03.44,Default,,0000,0000,0000,,subscriptions Dialogue: 0,0:32:59.92,0:33:06.96,Default,,0000,0000,0000,,i plan to add support for subscriptions Dialogue: 0,0:33:03.44,0:33:09.76,Default,,0000,0000,0000,,in the future maybe Dialogue: 0,0:33:06.96,0:33:10.88,Default,,0000,0000,0000,,not in the in the two coming months Dialogue: 0,0:33:09.76,0:33:14.48,Default,,0000,0000,0000,,because i want to Dialogue: 0,0:33:10.88,0:33:16.88,Default,,0000,0000,0000,,to release a version 4.1 of graphqlite Dialogue: 0,0:33:14.48,0:33:18.08,Default,,0000,0000,0000,,and i'm no subscriptions won't be part Dialogue: 0,0:33:16.88,0:33:22.56,Default,,0000,0000,0000,,of this release Dialogue: 0,0:33:18.08,0:33:24.80,Default,,0000,0000,0000,,but yes i would like to to work on that Dialogue: 0,0:33:22.56,0:33:26.16,Default,,0000,0000,0000,,for the end of the year definitely Dialogue: 0,0:33:24.80,0:33:28.16,Default,,0000,0000,0000,,definitely well that Dialogue: 0,0:33:26.16,0:33:29.36,Default,,0000,0000,0000,,that's that sounds super exciting i Dialogue: 0,0:33:28.16,0:33:31.68,Default,,0000,0000,0000,,guess and Dialogue: 0,0:33:29.36,0:33:32.72,Default,,0000,0000,0000,,i think i have another question because Dialogue: 0,0:33:31.68,0:33:35.36,Default,,0000,0000,0000,,i found Dialogue: 0,0:33:32.72,0:33:36.56,Default,,0000,0000,0000,,out super super interesting so i'd like Dialogue: 0,0:33:35.36,0:33:39.92,Default,,0000,0000,0000,,to understand like Dialogue: 0,0:33:36.56,0:33:43.60,Default,,0000,0000,0000,,like why do you why did you decide to Dialogue: 0,0:33:39.92,0:33:45.60,Default,,0000,0000,0000,,go and build this incredible technology Dialogue: 0,0:33:43.60,0:33:48.40,Default,,0000,0000,0000,,and what are kind of like the future Dialogue: 0,0:33:45.60,0:33:52.00,Default,,0000,0000,0000,,plans for for it Dialogue: 0,0:33:48.40,0:33:54.56,Default,,0000,0000,0000,,oh okay uh um Dialogue: 0,0:33:52.00,0:33:56.08,Default,,0000,0000,0000,,well when i started uh writing Dialogue: 0,0:33:54.56,0:34:00.00,Default,,0000,0000,0000,,graphically light it was Dialogue: 0,0:33:56.08,0:34:02.64,Default,,0000,0000,0000,,two years ago and basically you had only Dialogue: 0,0:34:00.00,0:34:04.56,Default,,0000,0000,0000,,two options at the time it was using Dialogue: 0,0:34:02.64,0:34:06.48,Default,,0000,0000,0000,,webonix directly Dialogue: 0,0:34:04.56,0:34:08.72,Default,,0000,0000,0000,,or uh using um Dialogue: 0,0:34:06.48,0:34:10.88,Default,,0000,0000,0000,,[Music] Dialogue: 0,0:34:08.72,0:34:12.32,Default,,0000,0000,0000,,using ushido which is a library that has Dialogue: 0,0:34:10.88,0:34:14.16,Default,,0000,0000,0000,,been abandoned Dialogue: 0,0:34:12.32,0:34:18.00,Default,,0000,0000,0000,,and basically they were really low level Dialogue: 0,0:34:14.16,0:34:18.00,Default,,0000,0000,0000,,libraries and they were hard to use Dialogue: 0,0:34:18.08,0:34:21.92,Default,,0000,0000,0000,,and i have this huge project for a Dialogue: 0,0:34:20.48,0:34:24.08,Default,,0000,0000,0000,,client of mine Dialogue: 0,0:34:21.92,0:34:27.12,Default,,0000,0000,0000,,uh we are just at the coding machine we Dialogue: 0,0:34:24.08,0:34:30.80,Default,,0000,0000,0000,,are doing mostly internet and extranet Dialogue: 0,0:34:27.12,0:34:35.20,Default,,0000,0000,0000,,applications and a client of mine Dialogue: 0,0:34:30.80,0:34:37.20,Default,,0000,0000,0000,,uh had uh this huge rest api Dialogue: 0,0:34:35.20,0:34:38.88,Default,,0000,0000,0000,,with a lot of end points and maybe read Dialogue: 0,0:34:37.20,0:34:41.76,Default,,0000,0000,0000,,on the end points Dialogue: 0,0:34:38.88,0:34:42.24,Default,,0000,0000,0000,,i wanted to do graphql because i knew Dialogue: 0,0:34:41.76,0:34:44.56,Default,,0000,0000,0000,,that Dialogue: 0,0:34:42.24,0:34:46.24,Default,,0000,0000,0000,,the flexibility of graph create would be Dialogue: 0,0:34:44.56,0:34:49.44,Default,,0000,0000,0000,,really really beneficial Dialogue: 0,0:34:46.24,0:34:50.96,Default,,0000,0000,0000,,for that client and uh the only option i Dialogue: 0,0:34:49.44,0:34:55.20,Default,,0000,0000,0000,,had was webonix which was Dialogue: 0,0:34:50.96,0:34:57.60,Default,,0000,0000,0000,,too hard to use uh and so i decided Dialogue: 0,0:34:55.20,0:35:00.88,Default,,0000,0000,0000,,i started writing a small library which Dialogue: 0,0:34:57.60,0:35:04.24,Default,,0000,0000,0000,,became a bit more complex Dialogue: 0,0:35:00.88,0:35:05.60,Default,,0000,0000,0000,,and uh i did two three versions of the Dialogue: 0,0:35:04.24,0:35:09.20,Default,,0000,0000,0000,,library and then i Dialogue: 0,0:35:05.60,0:35:09.44,Default,,0000,0000,0000,,i told myself okay uh i i must work on Dialogue: 0,0:35:09.20,0:35:12.56,Default,,0000,0000,0000,,it Dialogue: 0,0:35:09.44,0:35:14.64,Default,,0000,0000,0000,,really seriously put it on um Dialogue: 0,0:35:12.56,0:35:15.76,Default,,0000,0000,0000,,open source it and well that's how Dialogue: 0,0:35:14.64,0:35:19.04,Default,,0000,0000,0000,,graphic light Dialogue: 0,0:35:15.76,0:35:19.60,Default,,0000,0000,0000,,was born actually well that sounds that Dialogue: 0,0:35:19.04,0:35:22.00,Default,,0000,0000,0000,,sounds Dialogue: 0,0:35:19.60,0:35:22.72,Default,,0000,0000,0000,,so great and i think like thanks so much Dialogue: 0,0:35:22.00,0:35:24.40,Default,,0000,0000,0000,,for Dialogue: 0,0:35:22.72,0:35:26.40,Default,,0000,0000,0000,,contributing with the graphql community Dialogue: 0,0:35:24.40,0:35:27.84,Default,,0000,0000,0000,,in this case in the php because Dialogue: 0,0:35:26.40,0:35:30.00,Default,,0000,0000,0000,,yeah i think there are not so many Dialogue: 0,0:35:27.84,0:35:33.20,Default,,0000,0000,0000,,people that either they don't know that Dialogue: 0,0:35:30.00,0:35:34.88,Default,,0000,0000,0000,,they are able to do these or they Dialogue: 0,0:35:33.20,0:35:36.32,Default,,0000,0000,0000,,figure out they like realize that it's a Dialogue: 0,0:35:34.88,0:35:38.48,Default,,0000,0000,0000,,bit more difficult so it's even like a Dialogue: 0,0:35:36.32,0:35:42.16,Default,,0000,0000,0000,,start you know like to contribute so Dialogue: 0,0:35:38.48,0:35:44.56,Default,,0000,0000,0000,,i i i think like like like this is super Dialogue: 0,0:35:42.16,0:35:46.80,Default,,0000,0000,0000,,super super interested and i think like Dialogue: 0,0:35:44.56,0:35:48.24,Default,,0000,0000,0000,,a if the people they do know this Dialogue: 0,0:35:46.80,0:35:48.56,Default,,0000,0000,0000,,library they are going to start to use Dialogue: 0,0:35:48.24,0:35:50.00,Default,,0000,0000,0000,,it Dialogue: 0,0:35:48.56,0:35:52.08,Default,,0000,0000,0000,,they are going to like it and they are Dialogue: 0,0:35:50.00,0:35:54.32,Default,,0000,0000,0000,,going to like adopting their company so Dialogue: 0,0:35:52.08,0:35:55.84,Default,,0000,0000,0000,,um yeah thanks so much for sharing this Dialogue: 0,0:35:54.32,0:35:58.64,Default,,0000,0000,0000,,knowledge with us Dialogue: 0,0:35:55.84,0:35:58.64,Default,,0000,0000,0000,,you're welcome yeah Dialogue: 0,0:35:58.96,0:36:02.32,Default,,0000,0000,0000,,yeah thanks so much for like like like Dialogue: 0,0:36:00.96,0:36:04.40,Default,,0000,0000,0000,,like contacting us to Dialogue: 0,0:36:02.32,0:36:05.44,Default,,0000,0000,0000,,speak uh because it's it's been Dialogue: 0,0:36:04.40,0:36:06.88,Default,,0000,0000,0000,,difficult to find Dialogue: 0,0:36:05.44,0:36:08.32,Default,,0000,0000,0000,,kind of like people that they have Dialogue: 0,0:36:06.88,0:36:09.76,Default,,0000,0000,0000,,companies in hong kong although you are Dialogue: 0,0:36:08.32,0:36:11.28,Default,,0000,0000,0000,,not in hong kong right now but i Dialogue: 0,0:36:09.76,0:36:12.80,Default,,0000,0000,0000,,you're like really connected to the hong Dialogue: 0,0:36:11.28,0:36:15.76,Default,,0000,0000,0000,,kong community so Dialogue: 0,0:36:12.80,0:36:16.72,Default,,0000,0000,0000,,i am so so glad to have you here and Dialogue: 0,0:36:15.76,0:36:20.00,Default,,0000,0000,0000,,thanks so much and Dialogue: 0,0:36:16.72,0:36:23.44,Default,,0000,0000,0000,,i really really hope to see you soon Dialogue: 0,0:36:20.00,0:36:27.20,Default,,0000,0000,0000,,thank you very much okay david thanks Dialogue: 0,0:36:23.44,0:36:27.20,Default,,0000,0000,0000,,so up next so