Devreal

SF Scala: Getting Things Done in the Scala REPL by Li Haoyi

SF Scala: Getting Things Done in the Scala REPL by Li Haoyi

Recording: SF Scala: Getting Things Done in the Scala REPL by Li Haoyi

make sure that if there's no technical difficulties were actually going to start here we go there's the last name that I remember seeing at the other meetup page and it's exactly 545 exactly look at that look at that now good good good turnout five zero five zero ready go one more okay I'm gonna go with the fact that so we have majority quorum and we should get going so I guess welcome to a scholar meetup on this on this fine day in July hosted by me and Alexi Alex leaves anything you want to talk about before we introduce Howie I just want to say thank you to so Lauren and Howie Salar organized and I appreciate how he does moon from the far away mysterious Singapore thanks to this time we cannot meet physically but on the other hand we can have our favorite host speakers from around the world so just welcome everybody and thanks a lot take it away as the host great well thank you Alexi welcome to the Scala and tonight we have Howie doing a talk on getting things done in the Scala Ripple I was telling how he when he first joined this call that when I first was exploring whether I should learn Scala or not and I was trying to learn it and I didn't know what I was doing the person who actually helped me the most and that resulted in motivating me to continue to learn Scala was Howie on getter and on the very first project I developed I actually used his fast force library so it's kind of like a it really gives me great privilege to introduce another speaker at sky and also he's written a new book which I'm hoping to find the time to read and I'm gonna let let let how himself tell you all about that but please welcome how we getting things done in the score at all thanks Allah let me present now take over the screen yeah here yeah and I also record here using Quicktime cool so yeah hi everyone my name is Howie this talks going to be about getting things done the Scylla rifle for those who don't know me I'm a developer tools engineer DJ bricks we have users of Scala and a bunch of other related technologies previously other job box and I've worked a lot of open source projects in my spare time mostly Scala related so things like the ammonite rifle the mill build to fast parsing library scarlet XHTML and all those sort of things I'm curious but for those of you who are called in how many of you have used any of these libraries you know leave a comment in the that say does the hangout chat if you're using in your views like my nightmare fast fire skull attacks you figure requests and so on and which one which ones are you using you pick a request Carla Emma like Emma light and when i sees what most of most of time i asked his question everyone's using emma light which is good to hear her people I like using I'm like - to be honest I made it for myself and the fact that is open-source is kind of a nice bonus and I use it regularly every day so let's just talk about so this talk is going to be an introduction to doing things in the end next caller Apple most of you probably use Scala for like back-end systems I think going to the the JetBrains programming language survey 70% of people using Scala use it for back-end services but this is this presentation is going to introduce using Scala for a more like local interact experience we are using Scala interactively in a raffle or putting in small amounts of code you're seeing the results and you don't need a big like SBT build tool or a big like basil project or finial web server in order to get work done and rather than going through toy examples I reversing a linked list or traversing a binary tree we will be walking through several real-world use cases that you may find Emma in handy in your day to day work and these are kinds of use cases that someone may actually pay you a salary for so the three things I will be covering using Emma night are web scraping will write the small like with the Wikipedia scraper and Mozilla documentation scraper to pull down and semi-structured data of people's websites whether they want you to or not the second thing we will cover is you'll be writing a small github project migration tool like copy over issues from one github project to another maybe you're changing from github the gitlab or maybe someone abandoned the project then you want to express of all the metadata and we will be using github a public API for that JSON over HTTP the last thing we'll be doing is we will be writing a parallel web crawler so Scala is known to be good at concurrency and we will see what good at concurrency means when we can write a highly parallel Breakfast web crawler that grabs wiki that crawls the graph of Wikipedia articles and that pull couldn't pull down all the metadata and we will do so in a very small amount of relatively simple code and if all goes well we'll hopefully get through all of this in the next 40 minutes or so cool so let's start off with web scraping so the so I'm gonna open up Emma right here everything's gonna be done in the wrapper I won't have IntelliJ or editor running the most common library people use your web scripting a JVM is at a soup library so you can see this at a super org this is a very old Java library that's been here for a long time and it's available at available at this address so we can import third-party libraries in em like Skylar Apple so here it says J subversion 113 1 and this is the full name of the J Soup library or maven central so using import ID I can import a library and then I can import the package from the library I've already imported earlier so you won't see it downloading anything since it's cached so once it's loading the repple I can immediately start using it just copy and pasting the Java code and tweaking it to make it valid Scala so this is downloading do keep in your home page I can get the title of the document I can select the headlines and in order to Luke is a Java style collection I need to import the drama converters to make it work and then after that I can loop over them just like how the example loop you put them in Java and then I can print line let's say headlines or attribute title headline the empty URL hatre I'm type something new news headlines it sector s here and then I need to add Scala there we go so this is a kind of short example of using the Wikipedia home crawling scripting data from we keep in your home page using ammonite Emily as a scholar apple does not come bundled with the je soup library because most people will not be web scraping but for people who do need a je soup library it's a relatively straightforward single line import to just pull it in and immediately start using it interactively and we can open up the Wikipedia home page right now you verify that what we what we scrape is what is actually in the newest so if you look at this on the left you see this selection of a CSS selector for the element is idmp itn ball and anchor tags this corresponds to this div on the HTML page idmp itn and within that div we are looking for the bold tags where was it bold no I don't want the pop-up let's see this bold tag and this anchor tag so by querying this mpi 10 div so I have any bold tag any anchor tag we are then able to get the title and hit ref of all the links within this give so you can see here is Park won-soon here is the Kyushu floods here's a Russian Constitution Lamar and I saw on and we've done so in a handful of lines of code interactively to my rifle without any sort of preparation so I went to the doctor date of Wikipedia I took it and now I have it as a scholar collection that I can I can work with interactively so if I don't quick as a couple here I have a sequence of tuples that can work with the next thing I'm going to look at is we're going to extend this use case to something else so the Mozilla development network has a very good set of web api's you can see that over here we have every every class they can access in the browser JavaScript they have a page with documentation telling you how it works what the name is what properties it has and so on so we are going to use J soup to scrape all this data down so we can use it offline so this is all semi structured data which may or may not be complete and may not be in a standard format but that's the kind of thing that scraping library like Jesu is it's very good at so to begin with let's say we to scrape the first paragraph of every sub page linked from the interface every or all of these interfaces link from this page so I want the first paragraph of accelerometer Docs I want the first paragraph of analyzer North Docs I want the first paragraph of notification Docs and so on how do we do that the first thing we need to do is we need to use J soup to pull down this first page so I'm just going to do that right now same thing I did earlier just with a new URL then we need to find where all these links are so these links all live inside this div the div doesn't have any ID but it's two elements after the interfaces header so we can do dot dot select its - hashtag interfaces hash tag it's like my ID and not next that gives us the this paragraph here this is the list of all interfaces dot next again that gives us this div with all the nice items and links inside and from there we are able to select the links and do the same thing we did earlier which is grab their title and grab their absolute URL so so for link in and we do this at Scala yield link dot title link the absolute URL so now we have it you can see that we have pulled down all 974 links that are within this div and gotten their metadata for us to use in the scholar apple the next thing to be to do is you want to take each of these links and scrape out like the relevant data that we care about so let's take an example like angle instance areas I want the first paragraph of HTML from this page how do I find that looking at it in the console it's a matter of looking for that article tag which with ID we keep wiki article and then looking for the first direct child which is a paragraph and then just grabbing that hello as a string so I can do that by falling in links this is like title URL in links I'm going to now scrape down that URL and then I want to doctor select article whose ID is wiki article then that for direct children use a carrot use a greater than sign to the teammate CSS syntax I won the first paragraph which is which is direct child so else color don't had option because they may not be a paragraph oh I'm gonna get a title and and the paragraph I'm just going to let me get to the first pin just for simplicity so it so I turned a while and now we have now you can see the first ten paragraphs with let's use the URL in the title instead of URL in a paragraph rather than the title in the paragraph so now we can see we have for every page we have the first paragraph of documentation from it some are more some are less in some cases there won't be any documentation but where possible we've grabbed it and can use it elsewhere maybe we want to take it offline and include it in our IntelliJ or to complete or integrate into our editor for some more interactive documentation and if I want to write this if I'm to write this to a file there simply as OS right or superior PWD says hello dot based on and you pickle dot before right red 17 I need to map it to a snapIt extremes so map its URL element goes to URL elder to string and then now read hello dr. ihsan see I have all this data as JSON and I can format it more and I see it as I want like in tentacles for right over I did yeah I can see just like that I pulled out on the first the first paragraph of every page on the Moodle development network documentation site and save it to a JSON file on disk and now from this JSON file like again Jerry take it and load it anywhere else I want doesn't need to be into Scylla I could load into Python go into JavaScript and do any further processing cool so next so I think we are at the like ten minute mark and we've gone through how to do some simple web scraping in the M night scholar repo so this isn't really a deep introduction into n deep tutorial of how web scraping works or rather this is meant to serve two purposes one to show that you can do this kind of useful work interactively in the console and even it and to that I mean in fact be the easiest thing for you to do in that if I wanted to do the similar sort of web scripting in Python in Ruby in JavaScript I may have to spend some amount of time fussing around with third-party libraries people installing things wondering wipe it is not installing things directories where is the Emma like I can very conveniently just import the thing into the repple you think import Ivy and it immediately get to work just start scraping start using my third-party library no need to do any sort of project setup or package installation so the next exercise I'm gonna walk through is they're going to do a small github project migration so I'm going to so good let's given this existing it have project this request gala project with a bunch of open issues and bunch of close issues I want to copy all of the issues over to a new github project that's called Lee Howie's - test folks so it's organizers nicely so all three positooni repository if I want to push the git repository itself which like the commits the code this is easy to just do a git pull and git push but if I wanted to do the copy over the issues and pull requests other metadata those live outside the git repository itself and the only way to access that is either through the browser which we could access via via J soup or through the github API which gives it to us in a slightly more structured and slightly more convenient format so to get started with this the github API you just access to metadata through this URL API that github calm like slash users so actually how we and you see gives us based on telling us a metadata about I think we query and we can do this programmatically using the request library that comes bundled with the ammonites gallery PO oh well are equals that and then you can see that those status code it has headers it has text and we can shove the text into our dates on library new JSON comes bundled with a Mac as well and we get a nice JSON data structure that we can do things with for example we can look it we can look things up and turn them into scholar data structures we can render it with nice indentation and so on and similarly a problem request I get you get you get request dot put post delete and so on so if I wanted to copy over the issue is from the old github project a new github project github provides api's are both creating and for both creating and reading issues so in order to create issues I'm going to need a github token which I've already set up earlier so I cooked always to read Oreste at home github Oakland txt Jim I will show you the token and then if you if you google out how to how to create an issue on github API that brings us straight to the documentation to create an issue so it seems all I need to do is do a request dot post to this API if that users see how a I'm going to do a repo see how e people's see how we repose the test repo issues and then I need to do let's say any passes on data I'm a passenger based on data structure Tommy by one title goes to hello body goes to world so this type this title and body correspond to these the JSON structure which has these two keys and the anti values and I need to pass in from head some authorization headers so a map of authorization or two token token I think that looks that looks good so if I create this I got a two hundred created response and i refresh this page you'll see I have a new issue with a new issue with a hello title and the world body cool so now you know how to create comments how do we read comments so github provides a similar API there's a fetching issues or listing issues list the repositories issues so this is just a matter of doing requests not get people owner target issues I don't need to pass in any beta I guess others passed in the same authorization token then if I if I JSON format this nicely she died this gives me all the metadata for the issues I read for example we can see how big it is in this cases there was one issue in the old deposit in the new repository that I had just created so um now that we have let me know how the fetch issue is all the issues and we know how to create new issues it's straightforward to write a small amount of Scala code in order to fetch all the issues and all depository and create issues in the new repository so if I change the fetch issues from all depository instead of tes its request Scala lets call it responds new JSON dot read response dot text dot and the array dot size you see that effects that mean open issues let's see what do I want to do now is then I'm at you can then explore this the these issues to see where the date that we care about is so this is a JSON array every issue has a number a title and let's say a user who created it and for now let's just stop there we'll just copy over the issue is the number title user I guess I should have an issue description or body somewhere in here is there a body body yeah there's a issue body at the string so I'm going to pass although all the old issues well parsed equals that and for for beta in parts you'll what do I want I want data title it's a body data number and I want it user login I need to cast if you an array in order to loop over it um so this gives us this gives it to us as a sequence of JSON values and I can cast the tips on values to the relevant Scala datatype using these small helper functions so those two are strings is a number numbers are by default doubles and based on and commitment call ability for the integer mixin thousands of string and here we have it I can browse issues and see that more or less looks like what I would expect for example at this basic request and needle on a single request issue number 36 user created this is your script by user yang guang seven six zero cool so now I have issues all I need to do is loop over it and post them back to the new to the new repository and I will have issue issues migrated over so for title body number number user login in issues I'm gonna say print line migrating issue class number and then post it its app hello as a type longer use I place a title instead of all there's a body I'm going to use the body followed by the user I guess I'm original user user login followed by original number number if your format it's a bit more nicely um I think this looks good and now if I start running this you should see it immediately start migrating the issues over and as the core gets run on the Left I can see the issue is being created on the right and each new issue has a corresponding has a description which corresponds to all the issue and the user and a number of the old issue in case anyone wants to go back to reference it in this case I'm migrating issues but you can easily create comments as well so if I wanted to create a comment github API create comments where was it that's API creation comment it's just a matter of posting to this slightly different URL and we can try it right now so requests doc post what's different about URL issues issue number let's say number 10 for this issue and then comments comments don't have a title from the body let's go I am how hear me move with the body so I can post this and I should immediately see the comment appearing on in the browser as a result of the code I just ran in the in the Scala repo so we now have more or less completed the list of a rough Asuma github issue migration from this old request Scala repository which is newly how he has repository this migration was pretty simplistic we only migrated open issues we did not migrate the comments we did not preserve like any metadata like milestones or labels but github provides API is for all of that and if we want to extend it to support that functionality to support that funk functionality is straightforward to do so I guess what I wanted to demonstrate in this particular case was how easy it was to drive third-party systems from our scholar Apple so often when people start using a scholar Apple people use it to learn Scala you're fiddling with lists they're filling with arrays they're filling with tuples and for loops and for conventions less often do I see people using a scaler Apple to work with distributed systems work with third-party services work with et is in the previous example I showed you how to scrape data from other people's websites using a scholar Apple in this case I'm showing you how to drive and extend commands to third-party websites also using a scholar Apple I just need to run a small request at force command here and nearly you can see the effect happening on the github website and all this was done without any sort of extra setup or project or project build system set up to in order to make this work I just opened up a vanilla M night scholar apple and use a built-in libraries in order to do these interesting things on the github API and this is I think a public repository if any of you want to go and take a look you can see it happening in real time cool so let's go back to the let's go back to the slides so the last thing I'm going to cover is I'm going to do some parallel web crawling so this is a extremely common interview question Larson was looking for a job I think half of the companies asked me to write a parallel web crawler of some sorts absolutely common and we'll see how to do it in Scala very very easily so the graph the graph we are going to crawl is we are going to crawl the Wikipedia graph so if I go to Wikipedia and Wikipedia logs - let's say Scala is that not right maybe I try Singapore and go for Wikipedia come on okay oh I mean I was mixing the slash wiki five segments so you should repeat the article here has several links that go to other Wikipedia articles so Singapore for example is linked to sovereign Singapore's linked to Malay Peninsula Singapore is linked to the South China Sea and so on we could scrape this using the wikipedia using je soup and a Wikipedia HTML but a easier way to get this data in a slightly more structured format is using the wikipedia API the Wikipedia also provides a JSON API up in addition to API as many other formats that lets us scrape this so the documentation here I won't go into too much detail of how the API works but I have it written down here so let me just type it out so if I defect something from Wikipedia a picture links of a page from from the Wikipedia API like from Singapore for example I tell and that says I get back a sequence of strings which is the links it's as simple as request get GPS and Wikipedia or wapi PHP and then you pass it some URL parameters so action goes to query titles goes to the title match the proper property I want the links and the format I want to ask s on Wikipedia also supports other formats like like the XML and other such things oh I then get the rest text mixing a closing Korean mix a type annotation whenever I fetch links for Singapore I got a based on blob and I can use this on don't read the JSON blob and render it nicely use the Browse built-in to let me page up and down and you can see that Wikipedia gives it to us in this format where it's paginate 'add so but for now I'll just ignore the pagination there's a query key a pages key and then some kind of ID page ID I suppose within the page ID I have a links key the links then provides an array of links each of which has NS which I not sure that stands for and a title which is what we want so from Singapore if I go to plastics five you can see this brings me to telephone numbers it's from Singapore I go to 126 squadron Singh Republican Singapore Air Force that brings me to Wikipedia page for that f4 f4 squadron so in order to get you need condition to tell me more pretty data I can simply write a bit of Scala code through mangle the JSON using the new JSON library pull out the query pull out the papers this gives me a dictionary so I just get all the values in dictionary and then I want to get the links then I to get every link I need P the link is in the Ray and I need to yield the title of that link mmm you keep my pac-man location sequence of strings so now if I fetch links from Singapore because he gives me the first 10 links again I'm going to ignore pagination for now I can fetching chomps Carla you're in fetching from SF and Francisco and so on so again I'm going to ignore how the Wikipedia API works you can just assume that this function gives us the outgoing links and pick your particular with your pina page and we are just going to say well given this function fetch links how do we write a parallel web crawler so to do it in C to write a sequential web crawler it's relatively straightforward time we can call it a fact or link function with a start title the string and a depth of size 1 we can set of strings and it's as simple as performing a breadth-first search over the over the graph of wikipedia articles so for example a breadth-first search you need a scene set we'll start off with the start title you need a current check also start let's start by throw and you could either have a queue or explicit queue to have a first-in first-out handling of the page as you see or we could have a hand layer by layer or depth by depth buffer so where I find all the pages of depth 1 all the pages of depth to all the pages of that screen and so on so I'm going to do the layer by layer approach because it's marginally simpler X title list which is so for every for every depth I want to traverse I will loop over all the current titles affect all the links outgoing from those then I'm going to update the current set so remove all the things we've already seen and then add the current set to the scene set and then now I just returned the scene set three time the value to be a bar our next title links let me spell that next title links next title links [Music] lists okay I call it listen one mix together I can call set all links on Singapore that equals zero this will just print out Singapore there he goes one that'll print out the first ending thought of Singapore there he goes to that will make a bunch more hit me request and print out more links out of Singapore 84 of them in total and as I increase the depth as you'd expect this gets slower and slower um pat pat pat lee's because I'm fetching more things rather than stretching zero URLs attaching one URL on fetching 84 separate URLs to aggregate the links but also because I'm fetching that because I'm fetching them all in parallel I end up ends up taking a lot longer than if I could fetch dumb toy because I'm fetching them sequentially ends up taking a lot longer than if I fetch them in parallel so here it took quite a while as you and I ended up fetching 288 links crawling out the would keep it crawling a Wikipedia article graph starting from Singapore to depth of 3 so too the easiest way to paralyze this in Scala is use futures which come built-in in the skeleton the library or I can import those in portable execution context and some help helpers and it's to convert this Metrolink function into fettling parallel function is as simple as wrapping the fetch links call in future blocks it can call this let's title this futures and then make next title list equals next title this futures the map await dot result or forever um so in this case I'm just gonna run these fetch links actually fetch links calls on a background thread pool by default by putting in this the default background thread pool I believe it uses one thread per core on your machine so on this machine I paint virtual calls will do it it weighs parallel and I'm going to be blocking a thread for every request I make but for this kind of ad hoc use case blocking is perfectly fine and I'm running one web crawl here I'm not running ten thousand concurrent web crawls so now I can run fact all links are allow on Singapore that for equals zero for their pickles one Singapore they're equals to Singapore depth equals three and it should complete much faster GCC it did complete much faster than fetch all in sequential and if I compare the outcome of fettling scholar a technical tree with outcome of fetch or link sequential depth equals three that was real 61 you'll see that we got exactly the same results but it happened much faster because we paralyzed it using Scala teachers on a background thread pool um so I guess part of the nice thing about scholar futures is how easy they are to get started with for simple parallel parallelization in a simple like blocking style so this won't scale to running thousands of concurrent web crawls but for many use cases I'm running one web crawl I'm doing some interactively and the fact that doesn't scale to running thousands of things on currently doesn't really affect me and if I wanted to optimize it later for example if I wanted important Java's async httpclient and start doing a web crawling in asynchronous non blocking fashion I could trivially do so using the same import dollar IV syntax that we had seen earlier in court desu but ignoring the async concurrency for now we just by changing two lines of code we converted our sequential linear web crawl into a parallel breakfast web crawl that does it layer by layer you fetch all links from going out from particular Wikipedia article using wikipedia api so that's the demo for parallel web crawling again it's simplistic but it shows that the kinds of things you can do in the scala raffle with zero setup and almost purely using the raffle M&I krepo built-ins and a scholar standard library so the new JSON JSON library comes bundled with the my repple the request scholar his GP library comes bundled in scholar equal the scala futures and execution context thread pool comes bundled with the scala standard library and that's all you need in order to write right parallel hits TTP web crawler that crawls the graph of the PPE articles over the network if you consider doing this in any other language you want to do this in Python you want to do with this in Java you have to do this in Ruby or PHP or c-sharp there'll be a lot more project setup and a lot more boilerplate you need in order get to the point we were doing the interesting work of crawling the internet directly interactively from our rep oh so we covered three things become web scraping grabbing things off people's websites that they did not necessarily wanted to grab we covered a github project migration automating the great hub API and doing things on github automatically through the scholar apple and we did some parallel web crawling make sure that's how easy it was to do some concurrent do some simple concurrency and get some real speed ups all in this using a Scala standard library in the repo and I guess the point of this presentation as a whole is to show you how working within the M night scholar Apple you can do your right skyline in this lightweight style without needing any of yours heavyweight frameworks that you may be familiar with writing back-end code so if you're writing a big big serious business back-end service it makes sense to use a serious business back-end framework like finian eagle of initrah akka or play or HTP for s any of those other big frameworks because you're serious back-end service demand has many serious requirements and could make use of these serious frameworks however not everyone's work is doing serious back-end services often you just want to do a one-off query do someone of automation do some one-off scraping and I hope that in this presentation I've demonstrated that you can do these one-off things using Scala in the eminent scholar apple perhaps even eat more easily than any other language we come up with that's web scraping with Scala in the wrapper is easier than web scraping in Python in the Python rifle and Python scripts that doing github API automation from stem nice colorful is easier than github API automation from it let's say JavaScript scripts are using bash scripts and curl and Scala is not only a good language for I think big serious business back-end services the Scala is also a great language for doing this kind of interactive development and exploratory work interactively in the scholar apple so I cover these things in the interest of time too pretty shallow level the book I wrote hands-on Scala programming cover that covers them somewhat more deeply and gives a more thorough explanation of how what you can do with the Scala rifle so for example web scraping we go into more detail the github project migration the book shows you how to migrate comments over from the old issue tracker to a new issue tracker in for parallel web crawling the book also introduces how to do asynchronous parallel crawling using java's async his TP client but also in a very straightforward way allowing you to do thousands of concurrent HTTP requests all from the comfort of your Scala rifle so if you like the presentation you want more of it check out the book there's a discount code SF's Carl I get 20% off you're going to buy the book in the next week yeah and otherwise I hope you liked the presentation and I'll take any questions in the Hangout if there are any cool the word sounded bad word sounded like a child yeah so missed future traverse opportunity yeah future don't Traverse is watching useful if you're doing non blocking asynchronous work with futures if you're if you don't mind blocking because you're not doing anything at massive scale and in this case in a reply I'm not doing a massive scale just using just using a for loop and await the result that I show here on the left it's perfectly fine for these like small-scale burn-off scripts or one-off commands if you want to run a thousand web crawls in parallel then sure you want to use future doctor verse and import IV be done the scholar Apple nope info IV is currently only supported ammonite repple I think there may be plans the back forty to a scholar Apple but that's on the Scylla team when they want how and when they want to do that but mmm i nights free and open source and available on every operating system so I don't see any reason why you'd want to use a scholar Apple for example I mean I provide things like multi-line editing rich a scholar Apple at least up until recently did not provide more recently they upgrade the diversion of deal of the j line console libraries they may provide multi-line editing other things as well any other questions and we scroll down miss standard rifle feature M night to a conservative and to abort the current open command oh you can use control-c I'm a night control C doesn't abort the raffle which was actually the first the first feature I wanted to get into Emma night what control C not aborting the raffle if you look at the Skylar issue tracker there's a really old full request to try and report this to the scholar raffle but the Skylar Rapids a lot of legacy that makes a bit hard to implement there could emmalin uses alternative the SPARC shell um I believe it can but I'm not the expert there so I think l LX r Kimball from the Scala Center has done some work integrating Emma into spark shell and they used he has his own like almond Scala notebooks which a built on ammonites and you have support for SPARC and other useful like big data platforms I think they do like flink and other things as well but you have to ask on the channel and see if anyone else is using it I'm not personally familiar any other questions the questions actually I don't question I go for it you hear me yeah I'm wondering whether the design of a library in other words like object-oriented libraries versus more functional style library yep whether that the you know using repple whether one or the other approach makes it easier to use in the rebel but my personal impression is that it's purely a matter of familiarity so it's whatever you're familiar with if you are used to banging out the code in IntelliJ or in es code you'll be just as comfortable banging it out in the raffle and whether it's object oriented of uncle doesn't really make a difference I for example I don't use cat sociology at all but many of those cats and scholars dead folks they do use ma heavily and they seem perfectly comfortable in it as well so I don't think it makes a big difference okay yeah Chad self says I always forget that syntax or import ivy less I think input IV and autocomplete let's see that still works so comp only Howard our requests hold on requests not a lot to complete but maybe it's not working now yes scholar yeah I guess the syntax for import IV is basically the same as the mill import syntax which is also basically the same as the whatchamacallit as the Gradle imports in fact so any of you are using Gradle um so it's basically the name the organization the package name and the version supported by colons and for Scala library these double colons just a helper SVT is double percentage for Scala libraries it should be autocomplete why is there no autocomplete you're oh yeah so there is autocomplete so if you you could get a syntax right and don't forget to put a dot and you can also complete the libraries you're putting in and also complete the versions of the libraries to see what version you want to pull in oh that should that may help Abby is kind of grumpy because it needs to do this maven resolution every time you it does autocomplete but it may be easier than going to like search on me even though or again like so I think for the library one yeah like going is a big clunky having to go all the way here um so autocomplete that top of it are many teams using M night for scale scripting for automation purposes I use it in the number of places it's nice for doing things hard to do in Python like concurrency like XML handling cascada xml is built in like requests and json because we don't need to fiddle with pip installs people installed always bit of a nightmare in production that's cuz chinese keep trying to get them consistent across all your machines but i can't speak for other teams any other questions yeah is a CFP Pescara by the bays extended to July 31st so submit a talk for November cool I guess if there are no other questions thanks Alexia and so for having me and thanks everyone for coming I hope you enjoyed the talk yeah and Joey and didn't come by to get the channels if you have any questions for em and I request you pickle you JSON and whatever cool deal okay thank you how I really appreciate the todos fantastic yeah yeah it's fantastic and Alexi any close words from you before I wrap up just mentioned we awesome skill by the way this year we add reactive summit which used to be a live band conference now it is Conference of rocky foundation of which recently general manager so this is illumination day it's so reactive talks which are generally cloud native applications so anything to create distributed systems easier for developers are go in there right so what we used to have basically soup-to-nuts kind of link your D data pipelines make micro services mesh mesh systems everything is going to react safe track please submit a talk I think it's going to be awesome it's we probably will do it online with maybe thousands of people right easily so this year is unusual we want to make the best of this submitter talk you can get exposure to thousands of people and always welcome new speakers and all speakers see if peace opener on July when are you gonna announce the speakers after that deadline or you do it's been a little bit extended right but I think we're gonna end up within a program so if you submit a talk there is a five chances it will be accepted if you don't yet submitted please okay great better plan the other news is we're looking for speaker for August 4 SF Scala so please get in touch by a slack or any other means you can get hold of me if you want to do talking August and our next meetup is on that s caller themselves are ourselves are hosting on July 30th have a look at our meetup page for details of that and apologies for those who ended up with the wrong Google meets link I've no idea what why changed next time 30 minutes before the meetup I'll compare the URLs make sure it hasn't changed on on me and I hope everyone enjoyed it and we can continue the hallway conversations on slack if everyone wants to continue talking thank you everyone otherwise I buy one thanks to our next Alexi like excuse me will there be any recorded video available I haven't meeting so I missed out you know beginning it will be uploaded to functional TV because the functions of TV URL we uploaded there and all our nouns are non slack when it's available okay great thank you so much Joe