 So the first person is going to be Alexander Neumann Neumann Neumann And he's going to speak for five minutes about five tools on the time starts now Okay, great. I'm sorry, but it will be very fast So I wrote a few tools in the past several years and I'd like to just show them to you The first one is called build go and what I noticed when developing another tool that I'm gonna talk about in a minute It's not so nice for yeah like end users to install go tools For example, you can get the latest master of the tool called rustic Then you can just use go get but this is not so nice because when you call rustic version at the bottom of the slide It will just say a compiled manually and just the go version and when you extract a release tab all you need to go Do all the magic with the go path and so on and that's for end users and that's not nice So I wrote a small go program called build.go which you can just run with go run and it has a built tag of ignore So it it's not compiled with the usual go code and you can use it from a check out of the git repository And you can also use it from a release tab all which means that you can just clone the repo Go run build.go or extract a tab all run the same command and then there you go and have a nice version number And for end users that's really great because they don't have to fill it around with the go path and so on You can find that tool on that's a program on github. Just copy it to your repository use it There's a small configuration setting at the top and that's it Bonus is it also supports like a cross compilation and cgo and all the other stuff like build tags Next tool is called machma, which is a colloquial German term for just do it It's nice because then you can oh I need to do this Okay, apparently Okay, I cannot reload the slide. Sorry what it does there is there's a fine command Which finds all the images in the current directory pipes it to machma which runs the modify command Which is used to resize the images and by default and there you can see it again By default it will run on like four worker threads Which means is optimized for my machine which has four CPUs and you can see it while it's running it will Compute the the time it will take to go through the complete list And it's much easier to use than X arcs or even through parallel So to just pipe it in give it the command and it will do its thing You can also do that with for example IP addresses and ping them when there's any like sort of error or something like that It will report it to you and write the IP address or the string that you put into it just before Before the outputs as it can you can see what the error what what has caused the error? Yeah, you can also do that and some some other demos next tool is groby Which solves the problem that I had when I'm running the i3 window manager on linux whenever I plug my laptop into the docking station, then I need to manually Manually call X render and configure all my monitors and then I wrote a shell script for that and everybody has written such a Shell script and this is really really really bad So I wrote a small go tool for that which automates calling X render Subscribes to X screen change events so you don't need to like call it in a loop or so And it has a simple configuration in YAML for example that there I have like a rule called docking station I'm selecting this rule based on the connected and present outputs And then I say that okay configure a row of HDMI to an HDMI 3 side by side And that's it and there's also like a TV rule where there's a serial number of the TV Used for matching and fall back which just enables the internal display Then you can run it once it will say okay I detected this configuration calls X render and everything is great or you can run it For example via system D and use groby watch which will just subscribe to the exchange events and also regularly Paul X render if there are any new any new outputs and it will just configure this So when now when I plug in my laptop into the docking station, it will just switch on my external outputs and everything is fine So next one is ducks which is a small command That I've that I'm using to track differences in outputs for commands. For example here in the configuration I have configured a command which just runs the date command on Unix and I've configured that it should Run as it shouldn't run faster than every five seconds What the ducks command does is on the first run of the output? It will just save the output in this case the dates to a state file It makes a note of when the command was last run on the second run There's just nothing to do because it was just one second after the first one So the command isn't executed at all and on the third run You can see that I waited a few seconds and then the date command was run The output has changed and there I can see the diff and I'm using this one to for example Run this in a cron tab somewhere and have a like a find of Find command running which reports all the things that are there Yeah, last thing is restick. It's a backup program written and go and unfortunately my time is up There's the nice logo. Have a look at it. I have stickers find me afterwards. Thank you Yeah, Mike's are awesome Awesome really good job. And now we have a secret prince. Oh, that's a timeout So please come in so Luna is going to be talking about something else. I have no idea No pressure No, I can do things All right, can people hear me? Yes, good Okay, so I'm gonna give a quick talk about a tool that I wrote called instrumented SQL is a tool that lets you log or trace any and all SQL statements that run in your code base by wrapping any SQL driver and Exposing its own driver So how it works is that let's open up the examples you can Wrap any driver for example my sequel you pat you call instrument SQL don't wrap driver and Then you pass in any tracer right now. We support open tracing Google stack driver tracing open census as well as Amazon x-ray tracing and any SQL calls That have a context attached to them So that means you have to call query context instead of query because otherwise we have no idea where to send your trace Will be sent to the corresponding tracing tool that then lets you do is that for example in my case we're using stack driver and We then get a lovely Trace in our stack driver display that looks like this For example, you can see that we're spending half or request doing. I don't know what and Then we spend about the rest of the request doing SQL queries And as you can see we're running lots of unrelated SQL statements in series Which we could potentially improve our running them in parallel That's it questions. I Think it's already connected. So if you move to one side or the other No, oh you send more things. Okay Hi everyone In the stock I'm going to talk about tensor flow and go and this may look a bit like a lecture in a university So it's great. Let's look at lots of numbers and what is tensor flow? Tender flow So the official definition is a tender flow is an open source software for machine intelligence used mainly for machine learning applications such as neural networks Essentially, there is a tensor and it flows the tensor is an abstraction of a very complex mathematical Concept and think of it as a vector or a mattress that can be of a very high dimension A tensor has two properties the type of the data inside for example in and the structure of it Or the shape of it, which is essentially the number of elements and isn't sorry the number of dimension and the number of elements in each dimension The second part is the graph which is also called model and every step of the computation is Called also Every node is also called an operation and the tensor or the set of them essentially flows in every step a different computation is happening and You can evaluate the value of the computation of any node and you obviously also have an output This is essentially neural networks in 20 seconds half a minute and this is also what it does and There are several API that are officially supported in tensor flow go is one of them Obviously, Python is the most widely supported one and the features that you have for go in the APIs of tensor Flow is to train models and consume those trained models All the models are written or practically most of the models are written in Python For data science reasons So I am helping organize this really cool challenge that is called black light By helping organize it means usually there is a challenge and then I'm being asked Hey, can you solve it and say that this is something you can solve in a reasonable time in a competition and one of the challenges is Breaking into an interface that controls a camera and this is how it looks so you have you have to guess the pin and you have to Write the capture to prove that you're a human And the steps that I decided to take for this specific group of concept Is to do these go for the machine learning That's trained basically this capture So a state model which is kind of the brains you can say of the model was provided and It could recognize numbers and translate that into the string that is the digit and my plan for breaking this screen that you saw was loan this trade model and then write a script or a code that essentially guesses every password with brute force and through this tensor flow help just gets the capture for it and That's how it was and it was a great success. This is how it looked in the competition in real life This is somebody actually managed to break. I don't know if you can see but this is the IP of the camera and Yeah, that's it. You can read the full details at the Gopher Academy post from a December 28th this year and you can also find there a link to the repo with a full code. Thank you Thank you Suffering yeah, do not drop this mic for Who's the next speaker? Cool. Please come up If you don't really need to use your own laptop and you can just send me the link to the slides That's easier because there's less cables moving around Okay in process caching so the context is writing a web service and Serving a read only data, but you have to compute some expensive stuff or call slow unreliable web services and Well, I hope you you cash already because you have to cash all the things and I was a bit lazy and I didn't want to deploy some memcached here already But your me age may vary So it's very important in my opinion to to cash everything because it's the less you do the less you pay for and avoid network calls because I don't I don't like network and network sex and Plus we have seen already today that Phelases of this a bit computing is very Okay, so the first simple simple cash is a memorization you have a kind of a map with key and values to store cash items But it's a kind of limited if you have a very big objects or a lot of objects to store You you can run a run out of memory But some some time Upfree some data are more frequently requested than some others and It's kind of Pareto distribution if you have already of all of that or zipf low so You have some some videos that are more popular than others and it's important to to cash the most popular stuff So it's a good trade off to to use a cash small enough to to keep the most popular items and evicts The terms you you don't need anymore by least recently used eviction So there's a simple package for LRU cash by a bad fish Patrick in a group cash It's very simple to use but it does not support TTL for entries and does not support the concurrent access out of the box There's a more way more powerful cash see cash by Carl Sagan with support for TTL and pool Different pool protected by a mutex is for fast and safe concurrent access but beware of the tundering herd when Multiple go routine at the same time want a missing item So we fetch it at the same time and you can you can do bad things to the to the slow service behind So you can use a cashlock by implementing a map It's just an example there But you can also do better if you if your constraints allow it by By serving a stale content while the TTL is expired and a second is three fetch the missing item and You can also use a channel and a pool of coroutines to to limit your concurrent fetches to not hurt so much the slow and unreliable service behind Thank you very much Thank you. So Fabian, do you do you have slides on my laptop cool? What is your talk about? It's about calling git test and automating it and yeah get by second you're automating it with go test I think those are already All right. Hi. Hello world As I already said, this is about Calling git bisect and automating it with go test. It's a trick I recently learned There's a solid chance. This is nothing new to you and if that's the case. I'm very sorry. I apologize then just shut off and Shut down so We are I had a huge code base you can see it here And this code base was pretty solid for most of the time and since I wrote this Many many commits were added and at some point a bug was introduced and what I was thinking of my code base How I remember it to be was not true anymore, and I'm really really sure it wasn't that a long time ago It was very solid before But my tests they only cover the bugs. I already thought of when I wrote the code so The bug I could have introduced it in a gazillion of commits that have happened in between. So how do I find it? so my Favorite tool for doing this is git bisect if you never used git bisects performs a binary search on the commits in your history and you can mark commits by testing them as good or bad and Due to the binary search and the logarithmic effort it Has you yeah, you only need a very few test cases to actually find the commit who introduced a bug Normally I do this manually and I found it a bit cumbersome You go on and you say I call git start you mark Initial commit as bad and good and then you just repeat the process on and on and on and hey repetition come on We engineers we can automate this so The go test is actually a very very good way to automate this code You can actually create a new code test for your green aggression bug. You just identified You know it's in there somewhere So just write a test case that will actually pass when the bug is not happening and fails when the bug is occurring And if you write this test put it in a separate test file do not commit this file yet Don't put it into your repository Otherwise it will get lost when you travel back in time in the history of your repository and Then you just start as usual you call git bisect start on your repository You know it wasn't there in the beginning So you just mark the initial commit as good and you mark the head of your current Branch as bad and then you can actually do git bisect run and Let git bisect run do its magic and git bisect run is cool because it expects a command that returns with an exit code of Zero if your code is good and returns with an accent code of one if that's not the case And if you repeat this actually after about five to ten seconds you have found the commit that introduced your bug and Go test is perfect for this because now you already have a test case for this regression case Now you can just commit it you have found what's going on You can have found what commit introduce the bug you can put it in the repository and that's actually all there's to it And this is really neat for automating stuff, which was buzzes ring me quite a lot before So I was able to find yeah I have introduced the bug myself and I commit to this test I changed the code to be correct again, and I'm done cool thing is this is not limited to go test You can actually do it with any command that returns an exit code of zero on success and an exit code of one or something else as zero on Failure go is perfect because you can also write a very very little tool and call this with go run and The combination of git bisect and go test can actually help you to find bugs much faster. Thank you That's my charger. That's okay. Thank you. How many of you have used git bisect before? Okay, good The rest you should use it Florin Yes But not for go for con Iceland you have another talk. Come on Is that on the slides here do you need your he brought his data center look at this Okay If not I can switch Okay, so let's try Cool you do you So Actually, it's 720 is probably better, but I'm not sure so fun thing about this guy here other than co-organizing Go for con Iceland. He's also maintainer for One your maintainer right for what for one ID I Contributed to one ID and you'll figure out which one soon. Yeah. Thank you. So hey everyone. I'm flaring. I Organize the London go meet up with some other people. I Organize the Go for con Iceland with Natalie. We'll talk about it soon, but now I'm here to talk about the go ID from JetBrains Go land so I'm gonna go quickly for a couple of features that it has and I think you should Give it a try It's gonna be a bit hard with one hand, but let's see how it goes. So of no, no, no, I'm not saying so Let me give me a second So hopefully everybody can see this right so in go it's really boring to Handle errors properly, right? So we can do something like error dot not Neil and You have that type of completion and then of course you're a good golfer and you're handling the error like a true golfer panicking Right the other thing that you can do quickly with the ID is whenever you have a query. So I'm sorry Yeah, it's hard English hard So The ID like like you so I just typed DB dot Q with smaller case and it just worked And now if I start typing within the query, let's say select It will automatically start completing the sequel query and so on for me if you tie the ID to let's say to a database from In my case I have a database it knows already where to connect and so on so You can do a lot lots of cool things with SQL if that's the database of choice But switching to another project to show some other cool features This one will require three three things so I'm in the Kubernetes project because that's a that's a fun one and Let's say I'm looking at this function. I've just opened a random file Which is under? I know Qubectl apply.go. I have no idea what it does. So I would like to change this function I would like to refactor it Right, so the ID knows already to suggest some possible names for it and let's say I want to rename it to Lowercase get right and the ID will say oh well. Here's what you are want to rename Here's the files and you can preview what's gonna be applied And it also knows how to search in comments and so on so Whenever you are you want to refactor something you'll be able to see what's gonna be changed for you And you can do that. So I just messed around with Kubernetes but now let's say oh I realized I've done a mistake. I want to go back There is a thing called the local history Show local history and then you can actually see what happened with with the refactoring or with any changes that you are doing right, okay, cool Undo that so you can undo that and it will undo everything and the last cool feature There is a Right, no, this one is actually cool, and I want to show it. I don't care You have the cold hierarchy of any function. So yeah, sorry So you yeah, you you can take any function and you can see the cold hierarchy for it And all the colors for that and so on and you can understand where the changes propagate inside. Thank you Thank you. The last question is how do you exit? Column Q so That's probably mine. I don't know so we're going from the co-organizer of go for con Iceland to the organ the one of the co-organizers of go lab in Florence, Giovanni Hi, I'm a talk is not about the conference, but it's about a project I made in my free time It's a Nintendo DS emulator hundred percent written and go so a Nintendo DS is this handle console You know about it. It's two CPUs are nine and not seven as two different 2d GPUs one per screen and one 3d GPU and A lots of bunch of hardware that you also need to emulate like the maze timers and whatnot so first you need to write an arm seven and nine interpreter from scratch and So basically write the standard pipeline fetch the code execute of a CPU And you let that thing go you can see on the right the code is basically the main loop of them Interpreter fetching an instruction and running it and you I used to have a lot of unsafe code in there But then like late go version optimize it a lot and I went back to idiomatic go with slices and everything and really cool job on made by the go maintainers And then each opcode of course You have to write a lot of functions like this one. This is like an ad opcode and I did the idea with code generation So it's about 20 26 K lines of generated code because it's mostly like of course It's different, but it's similar and some genetics of course would help here And then also right then jit compiler because it was fun so it's like a hand roll jits from scratch is about two thousand lines and You got no optimization just a straight translation from arm to x86 And it's a little bit buggy, but it works and this is an example of the code So basically each of those calls emits one x86 instruction that will later be executed I got a test suite for the jit so that you compare that it makes the same results compared to the interpreter I got I wrote a little debugger because otherwise you don't understand what's going on and For the for the GPU. It's about two thousand lines of code. This made the is based on SDL Just to open the window and then drone it This is an example of a function drawing like a sprite It running parallel with CPU emulation with the new different go routines And kind of kind of works. I mean it's not very fast, but it works and for 3d Again, it's a rasterizer from scratch. So this is an example of a polyfiller doing like a polygon with text You speak several pixel There is a lot of again a lot of duplication here. So I went for a code generation for the rasterizer as well it's about you see 34 K lines of generated code for this and So basically at the end of the experience what is missing in go for this kind of project More optimizations because it's still not What I can get with C++ if this was written in C++ would be faster Operator overloading is very useful for like geometric code because you have vector Matricies and you want to have classes with operating or overloading. Otherwise your code looks like shit and And also some kind of parameterization your code to avoid like code generation You don't need full-blown generics actually have a proposal for this that will submit to go About like a kind of parameterization that will be enough for my case And then for the gt you need some runtime API to register gt code into the runtime because right now I need to if I turn on the gt I need to disable the garbage collector because otherwise it will panic because it doesn't find stack maps for the generated function So a little demo because video games are cool. Oh Let's do like this And it's not your computer, so I don't have a demo Yeah, yeah, sorry. I thought it was mine that I have a real demo. This was just video. I forgot to share so I'm sorry I Will take the link For for the video. So if you want to have a look, but it's just video for video games running in the emulator, of course and And that's it So you can look at the code from my github repository And this is just a Latin talk if you want to I will I will give a full talk at the go lab conference We have some stickers and discount coupons here available later if you want to pick them up. Thank you very much Important question is the CFP open Cool, so if you want to speak in Florence Just find the website go lab that I have there you go and Florian and Natalie. Oh, there you go We they're gonna be talking about different conference, which is not go for ganda in I and that is India is I Yes This is a very cool go for that Ashley McNamara made for our conference And this is why you should come to Iceland on May 31st through June 2nd. Yes, they'll be cool swag with this go for Other fun stuff you should know about our conference is that at least one of the workshop givers Speakers is in the crowd One other speaker was in the crowd earlier gave a talk. So we already announced three speakers This is JVD Peter and Chris We have five workshops that we're gonna give on May 31st the talks will be June 1st June 2nd This is a great time to go to Iceland because it's almost full of Sun Our call for papers is open other open call for papers are I'm reading this all from the go lang slash go repo in the wiki you can find all of this But you should submit to our conference and you should also submit to and go for con Brazil Go for con in Denver go for con in Singapore go for con India is already closed But you can attend it and go for con Russia is probably also closed But you can attend it as well and go lab and there is dot-go in 2019 We don't have prices yet. We promise to announce this soon. We promise to announce the ticket sales soon as well Right, and if you have any questions, you can find us either here or on slack on Twitter Just feel free to ask us anything Yeah, we look forward to to see you there and yeah The call for papers Talk and yeah, we'll do our best to to see you all there Do you have you want to use that one? Okay? It's a USB-C. Okay. Don't just put this there. That's it Yeah, it's gonna say that you want to install just say no Also, if you want to use a clicker you can use the clicker that is right there. It's already connected. So everything should just work Yeah If you So fun fact I will go to Iceland and it's right before my birthday. So I want to celebrate there. So Thank you My birthday is the 6th, but I celebrate for a whole month. So Why not he's gonna be talking about maps Yes, hello, my name is Mikhail. I am going to print doubt. I call it doubt in Dutch You can call it do it in English. It is a developer UI toolkit Management summary is it is in pure go asterisk? So it is in pure go Currently, however, there's a caveat. You need a separate program to actually do most of the windowing stuff In the future, it's going to be eliminated and will be a pure go library But it works already now. So it's a good trade off to get started It is cross-platform. That means it runs on Linux BSDs Mac OS It probably also runs on plan 9 because there's plan 9 technology involved Proofing technology will run on Windows. There is sort of the other parts of the code are available I just have to put them together to make it actually work Then of course, it is a UI toolkit, which is really great and it is for developers meaning I Mean I want to it's my time. The time is limited I'm not going to write fancy features like animations and stuff. So it's going to be simple which as a developer I really like and also so you can complain about some some kind of the missing stuff unless you fixed yourself So to prove this is real. I have a little demo. I think of Actual applications written with this library because of course if you write a UI toolkit, you also have to write application Use it so I've done a bunch of those just to figure out how it works and then of course I had to go back and change But that means in the end something that things do work. This is one of the map applications I made It is just running on Mac OS Very smooth as you can see Oh wait, probably my even have internet connection. Okay, so that's the first application What this shows is absolute positioning basically the map is on the back and on top of that. There's some buttons here There's a buttons there Next next application. This is actually why I started writing this because I wanted to have make an application Then I looked for you I took it then find the one I needed so I wrote started writing to try to get is a database kind of application These are the database connections here I've sort of trimmed it down a bit to make it fit. These are all made databases on my local machine I can select one. There's a bunch of what this is a table where I can just write the SQL executed and then the results Will be in a table viewer at the bottom. You can just also select one of these things probably Yeah, so I need a bigger screen when then it just shows the all the data in there There's like a tap thing where I can look at the structure. So this is of course a polished thing I basically wrote it to get better feeling for what I needed in the toolkit then there's this one which is a Sort of a proof of concept of a meal application So there's some bunch of meals here And Yeah, it's a bit slow now because it actually let's render some fonts. So There's some font awesome icons here just to make it really cool. I you can see the rounded corners I stole the blue colors from bootstrap so three up to date with the latest Expectations from the web crowd. So you can't complain. This is that it's ugly or something because it's all standard stuff So most of the stuff is pretty functional already. You can select stuff Loading a font So it works it works I promise Does anyone recognize this program? Yeah, so this is acne except of course as you can see at the top. It's it's a bit of a clone written code It's called acne acne is very mouse oriented and I like the mouse, but it gives me pain in my wrist So I needed a Vimode so I made a sort of a clone with VIP minus it's working progress It's already starting to work. I have to get in the state where I can start using it for real and then we'll go even Developing to a great faster So that was the last application now back to the presentation So you've seen it's real and runs and works This is a very simple small code example of an application So you import a library. You have a main function. You create a new developer UI You make a top UI in this case is just a very simple button It's a text and there's a callback here And you render it once and then you go into the main loop where you just select and get the inputs Which are mouse key that kind of stuff resize if in there's also one of those So then you pass it back to the library to actually process it and do its stuff If you click the red X in the corner your programs is done. So then you quit Just this is the main loop. I didn't want to hand off my main loop to some other library So I want to be that's why you actually you write out the main loop Oh We had lots of time right Okay There's lots of cool ideas here. Unfortunately. I cannot share them with you You have to come to me afterwards and hear more about them. So thank you Apparently there's questions and apparently he's gonna be setting out his laptop So why is it setting us his laptop one question? Supported support is one thing now. It runs on Linux BSD macOS now It probably runs on plan nine, but I haven't tried it yet and it will run on Windows I just need this separate helper tool of it's all the like the parts are available from because of its history And how I've done it. So I just need to have the time to Yeah, it's I've not released it yet I need one more vacation and then I can really push through and finish the publisher soon So he's talking about non-open source at foster. Thank you So his laptop died so we're gonna use my laptop wait, okay Living again you showing your email to everyone that's brave Okay So I'm going to tell you a story about the project we had to do at work and it's about column that the storage in go Let's start by saying that all data is not created equal. You may have a bunch of JSON data you might have CSV data and All this is pretty nice until you end up having terabytes of that and When you have terabytes of that your task should you choose to accept it is to extract only some fields in Multi-gigabyte files like this. So say you only want size and payload and you don't really care about all the rest Well, you start to do it and you use encoding JSON and it dies Or it's very slow so then you say well, let's be smart and surely someone has solved this before and People have done it people that do big data They have special formats to store this kind of data and it's column data storage quick intro If you've never encountered it. This is how you would represent data or relational data If you store it in rows, it looks a bit like this a bit like CSV If you store it in columns, you just flip it around and you see that each of the rows there is one of these columns okay, so And not only people have solved it they have solved it multiple times So there are two Apache projects parquet and or see that's already do this And then you say well, I want to do it in go Do I have libraries in go for these formats? Kind of for parquet. No for or see. Yes. You say well, perfect. You find this little library This is the project description then you see okay working progress and that's the current support So the build is passing that is good coverage error Work in progress and when you look at current support right is empty with a caveat at the bottom that says the right to support is in late stages However, I do not recommend to use it yet So let's see. Let's do some testing. I take an input file. I Use the goal or I convert it to an RC file Then I will take this RC file and read it again, and then I will have data out My goal is to compare if what I get out is the same thing as I got it as I put in simple enough So we do it with go With the library we saw so we write the data with a go tool We read it with a go tool data out is the same as data in so much win but You say well, I may not be using this data only with my tools. What happens if I use some official tools Well, you have see official tools data in segmentation fold cord down so This is what it makes me think We have as long as we only use their tools everything is beautiful The moment you need to do some interoperability doesn't work and if your reference tools Crash it means what you are outputting is not according to the standard. Well, it's open source. So let's fix it Well, there's a Document and if you go there, there are some beautiful specs some pages full of charts and graphs and they are incomplete So you have to reverse engineer the C and Java reference implementations because there are constants that appear nowhere It's even funnier because the there are constants in the Java and C reference Implementations that don't match the ones that are in the go implementation. So you are like, okay So conclusions we sent a few commits that fixed it for our case It which is a bit better than works in my machine because apparently it works on the developers machine We have converted a few terabytes of data and now it works For us in our machines if you try to use it and you lose data, don't blame me In this case the project was very clear and very honest about what they supported and that is something really liked And this goes without saying but any time that you're going to be pulling some library please do your due diligence before using it trust but verify and To finish in a cheerful note, and I think it's why we are all here We are starting to get to a point where we have libraries for almost anything and go and open source rules Last thing I like to you the Apache Foundation does not have only two formats. They have another one called arrow that does kind of sort of the same and The nice people at influx data have done a go implementation for that. Thank you Thank you So we are done. So thank you so much for coming. I hope you enjoy all of the talks. There was a lot of them Big round of applause to all of the speakers because they were amazing and Big run of a cloud a bead run of applause for all the people that came in but also the ones that tried and ended up outside Thank you to those