Speaker 1: Hey everybody, and welcome to another episode of React Round Up.
Speaker 1: This week, on our panel we have Paige na dream House,
Speaker 1: Hey everybody, Carl Mungazi Hello, he tj Ventl. Hey everyone,
Speaker 1: I'm Charles Maxwood from dev chat dot TV. And this
Speaker 1: week we have a special guest. It's Madjid. Do you
Speaker 1: want to just introduce yourself and let us know who
Speaker 1: you are and why you're important?
Speaker 2: Hi? Everyone, So my name is Majid. I am a
Speaker 2: software engineer based in Oslo, Norway. I am very important,
Speaker 2: I think so maybe for some people I'm very important,
Speaker 2: for some I'm not. But apart from a joke, I
Speaker 2: do a lot of contribution to community, especially JavaScript and
Speaker 2: dart community, and I try to share my knowledge and
Speaker 2: experience as much as I can, so by doing public
Speaker 2: speaking or writing or like blogging and those kinds of things.
Speaker 2: So that's what I really like. Apart from that, I
Speaker 2: also organize a few meetups and several conferences, especially in JavaScript,
Speaker 2: Word for example ng Vikings you may know or you
Speaker 2: have heard about it or Mobile Era in Nordic countries.
Speaker 2: So I am very passionate about two particularly like word
Speaker 2: of development, JavaScript and art nice.
Speaker 1: So you gave a talk at React Days Berlin talking
Speaker 1: about parallel computing and React JS and yeah, you know
Speaker 1: your discussion points talk about like web workers and stuff
Speaker 1: like that. Do you want to just give us sort
Speaker 1: of the two minute rundown of what the talks about
Speaker 1: and the major points and then we can dive in
Speaker 1: and get the tales.
Speaker 2: Well, the idea of the talk came to my mind
Speaker 2: when I was actually implementing a lot of features in
Speaker 2: my recent project, and I figure out that there are
Speaker 2: lots of new APIs in the browsers which helps us
Speaker 2: to improve and boost user experience, and in particular actually
Speaker 2: in React we can actually we can leverage using these
Speaker 2: APIs and kind of a wide disrupting user by poor
Speaker 2: performance or JANKI frames on the browsers. Right, So in
Speaker 2: particular we have like web work heres and a few
Speaker 2: new APIs like web assembly or worklets or even service
Speaker 2: workt which doesn't have directly something related to the main thread,
Speaker 2: but still it can improve something, which I had an
Speaker 2: example in my talk and I talked about it, people
Speaker 2: very liked it. So that's that was the whole things
Speaker 2: that I actually talked about in this start, Like these
Speaker 2: four different APIs in the browsers very cool.
Speaker 3: So let's just start with the first one.
Speaker 2: Yeah. Sure. So the first one, which is probably the
Speaker 2: most underutilized one, is webworker. And web workers are around
Speaker 2: for quite some time, so maybe twelve years or more
Speaker 2: ten years. It's been around for a while and all
Speaker 2: the major browsers actually supported but it it well maybe
Speaker 2: maybe many of us don't. Actually it doesn't use it.
Speaker 2: So when I in my I gave this like several times,
Speaker 2: and when I asked in the room, like who is
Speaker 2: using a webworker? Who knows the web worker, like around
Speaker 2: one hundred percent of attendee say yes, we know, but
Speaker 2: you know. But when I asked, okay, who is using
Speaker 2: that in production? And like maybe less than five person.
Speaker 2: The reason is, like we all know web workers, we
Speaker 2: know that they are cool, but there is something with
Speaker 2: web workers the way that it is implemented. Actually the
Speaker 2: API we are post messaging, you know, the post messaging API.
Speaker 2: So it makes it a little bit maybe difficult to
Speaker 2: work with, and so many of us try not to
Speaker 2: deal with it unless we really need it, you know,
Speaker 2: in the application. So that was the idea. So I
Speaker 2: started with the basic of the web workers, like what
Speaker 2: they are. So I'm not going to talk about it
Speaker 2: here because I guess like many of us, even our audiences,
Speaker 2: like right now, they know and I and probably they
Speaker 2: also know that it works. We are post messaging, like
Speaker 2: you have the say PI. You send an object message
Speaker 2: to your worker thread and do something and then you
Speaker 2: can get back another message and then deal with it
Speaker 2: in the main threat. Right. But when I found a
Speaker 2: new library actually done by Surma developer advocate in Google.
Speaker 2: The library name called a com link. The actually reimplemented
Speaker 2: the way that we can use web worker. So it's
Speaker 2: it's pretty neat and easy. If you download the library
Speaker 2: and start using this library in your application, you're going
Speaker 2: to have you're gonna have like a very simple API.
Speaker 2: I'll get to the API also, but then after using
Speaker 2: the API, you will get actually a promise, very very simple,
Speaker 2: so you directly talk to the worker threat and you
Speaker 2: have a promise, so you can simply wait, send something
Speaker 2: to this thread, call some kind of function and then
Speaker 2: wait for it and then you know. It's the way.
Speaker 2: It's a very natural way of programming in Java scrit
Speaker 2: if you start using this library. And that's that's the reason.
Speaker 2: So I again started talking about these web workers with
Speaker 2: conving because it gives you as a developer a pleasant
Speaker 2: way to deal with a worker thread and to implement
Speaker 2: in your application. So maybe I should explain too simple
Speaker 2: API of this library.
Speaker 4: Yeah, I think as quick explanation would be good.
Speaker 2: Yeah, okay, So when actually you have common link installed
Speaker 2: and instantiated, you get to function one is wrap function
Speaker 2: and another one is exposed you want to use exposing
Speaker 2: your threat or your web worker javas profile, and you
Speaker 2: expose your function or your object, your services like all
Speaker 2: of those functions that needs to be exposed to the
Speaker 2: main threat, right, and then you have the wrap function
Speaker 2: which you will also wrap the web worker in extensions
Speaker 2: or the constructor actually in the main threat. And then
Speaker 2: with only these too as like maybe sufficient to start.
Speaker 2: So with only these too, then when you construct or
Speaker 2: instanceship this worker, then you get a promise with those
Speaker 2: services that you are exposing to the main threat. So
Speaker 2: you simply just call your method and then wait for
Speaker 2: the result, and then you can also do something with it,
Speaker 2: like in particular in React as I had an example.
Speaker 2: So I had an example actually in Michael, let me
Speaker 2: talk about that. So I implemented a list of users,
Speaker 2: and on purpose, my list of users was around three
Speaker 2: thousand like items, right, so I implemented like a short
Speaker 2: array function in the thread, and also I implemented like
Speaker 2: an animation in the main threat. So I showed to
Speaker 2: the audiences actually in my talk that when you call
Speaker 2: this sort array and you want to sort this array
Speaker 2: by for instance, age user by age, you can get
Speaker 2: a list of three thousand items sorted by age. You
Speaker 2: can do that in main thread of course, but then
Speaker 2: it will block these main thread for a while because
Speaker 2: it takes time, you know. And then when you see
Speaker 2: actually the animation, when you were seeing the animation, the
Speaker 2: animation was blocked until you get the respond in the
Speaker 2: main threat, while when I was actually calling the third
Speaker 2: method in the web worker thread, the animation was working
Speaker 2: very smostly no problem, nothing blocked. You can interact with
Speaker 2: the app and then once you get the respond back
Speaker 2: from the main worker threat, you could simply set the
Speaker 2: state and react and then rerend their old like the
Speaker 2: least again and show whatever user asked for before, you know.
Speaker 2: So that was that was a very very well received
Speaker 2: example by user because it's like a very this is
Speaker 2: something that you deal with it in your daily work.
Speaker 2: Every day you need this, you know.
Speaker 4: Well, so actually that gives me I have sort of
Speaker 4: a broader question because I think I fall into the
Speaker 4: persona that you described at your talks as someone that
Speaker 4: I've known web workers for dealing with like tasks that
Speaker 4: you need really high performance for some sort of familiar
Speaker 4: with them, but I've I've never shipped them in a
Speaker 4: production app ever, And part of it is because, like
Speaker 4: to me, at least, maybe you can tell me why
Speaker 4: this might be a wrong perception of like I have
Speaker 4: always seen web workers, it's something I need if I'm
Speaker 4: building something that's doing something really heavy in terms of processing,
Speaker 4: like I'm doing something where I'm like building an image
Speaker 4: manipulation map or doing something really hardcore like running some
Speaker 4: super cool algorithms. But for the average like banking, insurance,
Speaker 4: financial apps that I might work on in like a
Speaker 4: rank and file job, what are some like pragmatic ways
Speaker 4: where web workers could actually benefit, like say your average developer, Like.
Speaker 2: You said, you know we're working and you haven't used it,
Speaker 2: so that's probably was also my case. I knew that
Speaker 2: I haven't used it so because of many reasons. But
Speaker 2: these days. You know, sometimes when you have these heavy
Speaker 2: processing and stuff like you said, maybe an image processing
Speaker 2: or something, some developers even decide to just move this
Speaker 2: process to the back end and instead of like this
Speaker 2: doing this in front and right. And maybe that is
Speaker 2: also a good solution. But think of it five years
Speaker 2: ago or six years ago, eight years ago, how browsers
Speaker 2: were working and nowadays how they are working with the
Speaker 2: different APIs that they are providing pluts with a lot
Speaker 2: of those improvement, which maybe because of the perception that
Speaker 2: we have in our mind from the previous from the
Speaker 2: past is still stick to it and we are not
Speaker 2: using that, you know. And also think of these days
Speaker 2: mobile developing for mobile, like maybe a responsive website or
Speaker 2: you know, particularly optimize everything for mobile. It's very crucial,
Speaker 2: right we are all going for mobile. It's very very
Speaker 2: important that we can for the browser. When we are
Speaker 2: talking about like utilizing different options including web workers, we
Speaker 2: are maybe one of our most important use cases is
Speaker 2: mobile optimization for our users. It doesn't matter what is
Speaker 2: your application, so it's a banking application or is anything else,
Speaker 2: as long as you're optimizing for a mobile which has
Speaker 2: a very maybe uh low CPU or RAM or you know,
Speaker 2: it is very important to optimize in different ways in
Speaker 2: the browsers for these particular devices that users can can
Speaker 2: feel like they should they should use application and the
Speaker 2: mobile there is moose. There should not be any difference
Speaker 2: between your mobile application, I mean not mobile applications, mobile
Speaker 2: optimization of your website and the desktop version of it. Right,
Speaker 2: So that brings us to the point now that we
Speaker 2: should think maybe differently nowadays. So even for very small
Speaker 2: things that probably we can do in main thread, but
Speaker 2: you know, many of those may block user to interact
Speaker 2: it with the application immediately. Maybe we should hold off
Speaker 2: those things to the worker threat, you know, especially nowadays
Speaker 2: with a lot of improvement also on top of the
Speaker 2: workers by differentias, like let's imagine we will get to
Speaker 2: it about web assembly and other stuff too, but you
Speaker 2: have also those other options, so you can also implement
Speaker 2: other things on top of the workers by different APIs,
Speaker 2: like maybe well somebody for instance, you know, we should think,
Speaker 2: I guess it's twenty twenty, right, we should think a
Speaker 2: bit differently. So perhaps that's my opinion though.
Speaker 5: So I've got a point to pick about. Contigious points.
Speaker 6: I actually first came across coummlink when I had a
Speaker 6: podcast where that Soma was talking about it, and he
Speaker 6: spoke about how you could you use it, for example,
Speaker 6: in a React application to handle your Reducs store.
Speaker 5: So my question was, when it comes to.
Speaker 6: Let's say, using Angular reacts with you all these frameworks
Speaker 6: and then you can maybe do stuff like putting your
Speaker 6: state management in the.
Speaker 5: Worker, how does that work?
Speaker 6: Because when I first heard that, I was excited about it,
Speaker 6: but I thought, okay, cool, Now that's an option where
Speaker 6: if my store it's too big for some reason, I
Speaker 6: can actually offload some of that storage to the worker,
Speaker 6: as well as doing other logic on the worker as well.
Speaker 6: But in terms of juggling reacts, I've got Reducs, I've
Speaker 6: got the worker. How could that make that work in
Speaker 6: an application?
Speaker 2: Well, first of all, let me explain this way. So,
Speaker 2: for instance, in Angular or many of these frameworks, so
Speaker 2: you may not necessarily use cumb link because they all
Speaker 2: have some sort of they own a APIs for web workers.
Speaker 2: For instance, Angela has its own like support for webwork here,
Speaker 2: or maybe React with a new api is like Concurrent
Speaker 2: and those kinds of things. But the thing is that
Speaker 2: when you say how can we use that, Like, I
Speaker 2: don't see any difference between an Angle application or like
Speaker 2: in this case, an Angular application and a React application.
Speaker 2: Let's say, because they are at the end of the day,
Speaker 2: they are a JavaScript you know library, right to just
Speaker 2: provide different APIs, and some developers like this one, some
Speaker 2: like like Angular one, and some likes maybe I don't
Speaker 2: know React, you know, different APIs for different developers to
Speaker 2: make maybe to make our life a little bit easier
Speaker 2: when we develop the web application. Right, So at the
Speaker 2: end of the day they are there are there are
Speaker 2: javascreet applications, there are JavaScript framework, right, so we can
Speaker 2: use any library. So I don't see any any like
Speaker 2: blocking point here that if you are using, for instance,
Speaker 2: this library, you are not able to use like coummblink
Speaker 2: for instance. If I understood the question actually correctly, Yeah, so.
Speaker 6: I guess in o case, do you prefer using that
Speaker 6: in both stuff for me, say Angler or comblin. What's
Speaker 6: your preference then in terms of your use World podcast.
Speaker 2: Well, when I came to the comblink and I started
Speaker 2: using that, I guess I'm going to stick to the
Speaker 2: comb link. The thing is that first of all, the
Speaker 2: library is very tiny. I think after Jesus is like
Speaker 2: one point wind club bite or something or even some
Speaker 2: like browser needs. For instance, if you need a policy
Speaker 2: for proxy, it adds maybe one more club Eye. But
Speaker 2: it's a very very tiny library and the API is
Speaker 2: very simple, and I like the way that it promisify everything,
Speaker 2: so it makes it is very easy to use, like
Speaker 2: this promise apart from other APIs, you know, I think
Speaker 2: I like to stick on commelink unless those APIs from
Speaker 2: the frameworks they change also to h you know, they
Speaker 2: have a similar APA.
Speaker 5: Cool.
Speaker 7: I've got a question for you, I Majid, can you
Speaker 7: explain the difference between web workers and service workers because
Speaker 7: I've heard both, I've heard them used interchangeably, and I'd
Speaker 7: love to get a better understanding of which one.
Speaker 2: Absolutely, which absolutely. First of all, let me explain this.
Speaker 2: The web workers the service worker are a type of
Speaker 2: web workers. So essentially, service worker are like a JavaScript
Speaker 2: file that they run in a different threat and back
Speaker 2: in background. And what they do is they they act
Speaker 2: like a proxy in your application between the network and
Speaker 2: your application. What does that mean? That means you can
Speaker 2: intercept all the network requests in service worker, right, So,
Speaker 2: and they are. They're great for doing things like cashing
Speaker 2: or delivering push messages for an instance. So there are
Speaker 2: different actually cashing strategy which I have a full time
Speaker 2: like about an hour. And also I have a book
Speaker 2: about it, so which we can reference maybe to the chat,
Speaker 2: so you can go through it and read about these strategies.
Speaker 2: How does the state strategies help us to make our
Speaker 2: application offlying? This is very very cool? Or think of
Speaker 2: it like service worker when we are talking about a
Speaker 2: proxy between your application and a network request. Is that
Speaker 2: I said, you intercept all the requests, right, So you
Speaker 2: send a request by maybe fetching an image, let's say,
Speaker 2: and then the request comes to service worker first if
Speaker 2: you have a registered service worker a javascried file as
Speaker 2: I explained. And then this is you now to decide
Speaker 2: where should I get the response? Should I go to
Speaker 2: the network and ask from sever about this or should
Speaker 2: I go to the cash and respond? So and here
Speaker 2: is I think it's service workers are so powerful. Here
Speaker 2: is where you can actually manipulate the respond So that
Speaker 2: was an example which I gave in the talk. So
Speaker 2: imagine like three years or two three years ago, there
Speaker 2: was not a support for web p like image extension
Speaker 2: in many browsers. So a friend of mine actually created
Speaker 2: webs an version of BMP encoder from c library and
Speaker 2: then he added to the service workers. So he used
Speaker 2: web p in the web page. But of course web
Speaker 2: P images cannot be shown on those browsers that didn't
Speaker 2: have support, right, so the solution was okay service worker.
Speaker 2: There was support for service worker though in all the
Speaker 2: browsers at that time, so it was a great time.
Speaker 2: So why not using salvice worker to intercept this request
Speaker 2: and then send it to this web assembly encoder get
Speaker 2: another type of you know, image back, like a BMP
Speaker 2: maybe or something or gift I think at the end
Speaker 2: he did and respond a gift version to the user
Speaker 2: so user can see this image. This is fantastic, so
Speaker 2: imagine how powerful it could be and also maybe dangurious.
Speaker 2: I mean, it's not in a bad way because you know,
Speaker 2: casing is always a challenge in software engineering, right, so
Speaker 2: we all know that I'm thinking about caching when I
Speaker 2: say dangerous.
Speaker 4: So I got one related question. So when I've used
Speaker 4: service workers, my biggest problem with them is that debugging
Speaker 4: is occasionally kind of a nightmare because you are working
Speaker 4: on a separate thread. So I'm curious as like, if
Speaker 4: you're advocating for moving more and more code into service workers,
Speaker 4: does that become like, considering I haven't done any of this,
Speaker 4: does it make debugging trickier? Like are the browser developer
Speaker 4: tools smart enough to say, like, if I'm running some
Speaker 4: algorithm in my bit of code, can I like jump
Speaker 4: over to the other thread and then jump back to
Speaker 4: continue sort of my step debugging sort of thing. I'm
Speaker 4: just sort of curious how that works.
Speaker 2: Yeah, exactly, so very good question. So two three years
Speaker 2: ago or maybe four years ago, when PWA Progressive Web
Speaker 2: Apps and service worker were introduced, browser didn't have a
Speaker 2: very good support at that time. But nowadays most of
Speaker 2: the browsers is, especially Chrome, they have a very very
Speaker 2: good support for debugging for service worker and web simbly
Speaker 2: also because you can use web simbly also in service
Speaker 2: work here, So I think these days this is not
Speaker 2: a big problem. Also, if you have let me also
Speaker 2: mention this, if you have a concern of writing your
Speaker 2: own service working and getting to a trap to debug
Speaker 2: or find out other what's wrong right now or how
Speaker 2: can I improve something in my service work here? There
Speaker 2: are also good solutions for that. You may have heard
Speaker 2: about workbox jas it's a library from Chrome Team or
Speaker 2: like here Google and what it does. Actually, it does
Speaker 2: a lot of things, but the most important thing is
Speaker 2: that it generates service worker for you based on what
Speaker 2: you are telling to this library to do. So cashing,
Speaker 2: for instance, you know that you should know the different
Speaker 2: strategies for casing and service working, and that's not very difficult.
Speaker 2: You can go through it maybe in I don't know,
Speaker 2: ten to fifteen minutes, and then once you know, then
Speaker 2: you should go to the work box documentation and start
Speaker 2: learning the API for how like how I can use
Speaker 2: this strategy, like how can I use cash only strategy?
Speaker 2: Or how can I use cash network only strategy or
Speaker 2: something like that, and they're therefore all of those strategies.
Speaker 2: There is an API in workman in working box. So
Speaker 2: simply you write your simple service worker file and then
Speaker 2: workbox help helps you to generate your maybe very difficult
Speaker 2: and very complex, let's say, service worker file at the
Speaker 2: end of the day. So I strongly recommend you, if
Speaker 2: you're going to write your service worker file for your
Speaker 2: website or wel application, start using workbox instead of writing
Speaker 2: yourself because that will help you when the service worker
Speaker 2: gets bigger and bigger and bigger and more complex, then
Speaker 2: you will find out the power of using this library.
Speaker 2: There's also a bunch of like logger and logging stuff
Speaker 2: in Workbox. You can enable them and you can find
Speaker 2: out okay, where you can exactly see how you are
Speaker 2: interacting with your service worker, how fetch is working, how
Speaker 2: my network requesce is coming, what is the respond response
Speaker 2: and those kind of things. It's very very handy. There's
Speaker 2: also a bunch of plugins for workbox that makes it
Speaker 2: even easier to gener right other stuff to handle, maybe
Speaker 2: push into vacation or to handle different things.
Speaker 6: So I had a question in terms of if I'm
Speaker 6: trying to get into this using workers, I have a
Speaker 6: sales as the world workers, what's the best way to
Speaker 6: approach it. So let's say I want to improve my
Speaker 6: application and have a much smoother UI experience. How can
Speaker 6: I decide which part of the application needs it? How
Speaker 6: do I go about learning that and maybe having a
Speaker 6: concept to show to my team and trying to get
Speaker 6: and get buying from the managers and my coworkers as well.
Speaker 2: Yeah, very good question. I explain my approach this is
Speaker 2: what I do. Usually I put my I usually think
Speaker 2: that I'm customer, which I'm going to use this website. Right,
Speaker 2: Let's start using this website and a very low performance device,
Speaker 2: maybe very tiny mobile device or something which I usually
Speaker 2: have at home, like I have a very old phone
Speaker 2: from maybe eight years old. And then I start using
Speaker 2: the application. Wherever I see that the application is lagging
Speaker 2: or it blocks me to continue and work with application,
Speaker 2: these are the places that I need to think about it,
Speaker 2: like how can I improve this? And I need to
Speaker 2: go and check which part of my application is actually
Speaker 2: blocking user to work with other parts of the application.
Speaker 2: So I need to hold of those things to the workers.
Speaker 2: So this is usually what I do. So start with
Speaker 2: a very low performance device like a mobile device especially
Speaker 2: and maybe also you know, I know that we may
Speaker 2: have a very high speed internet all of us. But
Speaker 2: when I start, when I when I'm trying to find
Speaker 2: out where which part of the application I can prove
Speaker 2: I usually three showed my internet to three G, you know.
Speaker 2: And then let's start using the application. And then then
Speaker 2: that when I start using with those configurations like tree
Speaker 2: G and mobile device, then I see and I can
Speaker 2: feel it myself oh this part, this part is very
Speaker 2: very lagging, so I need to think about it, you know.
Speaker 2: That is my approach usually I do, and it works
Speaker 2: pretty well.
Speaker 6: Have you ever had any pushback from the team to say,
Speaker 6: maybe right now, for us, performance is not a priority
Speaker 6: and trying to navigate those discussions about when execut actually
Speaker 6: spend time making application performance because maybe it could be
Speaker 6: that it is important, but at the moment you've got
Speaker 6: X weeks to implement, but then you no performance is
Speaker 6: part of that features.
Speaker 2: That's absolutely I think all of us has this situation
Speaker 2: at work.
Speaker 8: So especially when you are working in a JI well
Speaker 8: and maybe a startup, then they are forcing you to
Speaker 8: just give stuff out because they want to see it,
Speaker 8: they want to deliver it to the customer, right, and
Speaker 8: then you have less and less time to spend on.
Speaker 2: Your application to debark and find out or maybe improve
Speaker 2: the performance. You know. So I had definitely this situation,
Speaker 2: and I would say what we do then? What I
Speaker 2: try to convince my team usually is that you know,
Speaker 2: we have a very high priority fixing issues for performance,
Speaker 2: and we have like nice to have features like high
Speaker 2: priority are those that they give our user absolutely terrible experience, right,
Speaker 2: let's say initial loading of the application, for instance. So
Speaker 2: if it takes twenty second to load the application, who
Speaker 2: is going to wait for that or ten second? Who
Speaker 2: is going to work? Who is going to wait for
Speaker 2: this application to be loaded?
Speaker 7: No?
Speaker 2: One, Right, you cannot like let the business come to
Speaker 2: you and say no, we have to shift this. At
Speaker 2: the end of the day. They will come back to
Speaker 2: you maybe a month. I say, okay, we are not selling,
Speaker 2: so I told you it's ten seconds, So we need
Speaker 2: to spend time. Right, So we should have start convincing.
Speaker 2: We should start telling like business, hey, this is crucial
Speaker 2: to improve. We should spend time on it. We should
Speaker 2: fix this part. But then also we have maybe some
Speaker 2: part of application that well, you click on something and
Speaker 2: then maybe for three second or two second while user
Speaker 2: cannot do anything. Well, maybe you can bear with it.
Speaker 2: Maybe it's a setting page, and well, of course you
Speaker 2: can wait for it for for the for the sprint.
Speaker 2: That you have time to spend on this part and
Speaker 2: improve the performance, I think you should. We should categorize
Speaker 2: these performance issues and then start fixing those that they
Speaker 2: are absolutely important for our customers and visitors to when
Speaker 2: they are coming to our website. Or web applications. Just
Speaker 2: I believe we should respect our customer. I am also
Speaker 2: a customer of millions of web pages. Right If I'm
Speaker 2: not treated very well, so I don't feel very well. Right,
Speaker 2: so I should have the exact same feeling when a
Speaker 2: customer is coming to my website when I'm enveloping that.
Speaker 2: So I think that it is very important to give
Speaker 2: our user a pleasant experience. So this is very important,
Speaker 2: I guess to my opinion.
Speaker 4: And I know something that's worked for me in the
Speaker 4: past is if you can put the put these things
Speaker 4: in business terms as well. They're they're a study showing
Speaker 4: page low time speed times actually improve business business metrics,
Speaker 4: click through rates, you know, whatever it is your business
Speaker 4: is measuring. So sometimes you can approach it as a like,
Speaker 4: if we spent a week on this, let's see if
Speaker 4: we can improve our You know, don't necessarily your manager,
Speaker 4: your boss's boss might not care about the user experience directly,
Speaker 4: but I'm guarantee you they care how many people click
Speaker 4: a certain button in your app that you really want
Speaker 4: people to get into some system. So oftentimes you're the
Speaker 4: incentive of making your app faster, and the businesses like
Speaker 4: end goal are usually in sync.
Speaker 1: If you can plug some metrics into it, right, So
Speaker 1: you have some analytics that you put in, you do
Speaker 1: an A B test, right, and then at the end
Speaker 1: of the day, it's not that much work to add
Speaker 1: in the web worker and have it take on, you know,
Speaker 1: the most expensive thing that's going on on the page.
Speaker 1: A lot of times you can make the case that
Speaker 1: TJ is making just with a really quick example that
Speaker 1: only took you a couple hours to put in.
Speaker 4: Yeah, make sure the email you send your boss has
Speaker 4: a lot of acronyms, like the ctrs are going to
Speaker 4: go through the roof and you know, really really business
Speaker 4: it up.
Speaker 7: Mentioned Google analytics while you're at it.
Speaker 1: Well, if you can, you can put up the theory
Speaker 1: right and put that stuff in. But at the end
Speaker 1: of the day, I mean, if you can put in dollars, right,
Speaker 1: this is dollars that we made that we wouldn't have
Speaker 1: made because it's loading faster now.
Speaker 4: It's the ultimate metric.
Speaker 2: Yeah, but you actually mentioned a very good point. Always measure.
Speaker 2: So even when I'm talking about like web workers and
Speaker 2: you know, some real assembly and those kinds of things
Speaker 2: I mentioned, I think in my tight maybe a few
Speaker 2: times that always measure, measure, measure, and make sure that
Speaker 2: what you are doing actually worth it. You know, so
Speaker 2: you just don't do it because you've heard that this
Speaker 2: is awesome, this is cool. You know you should you
Speaker 2: should measure every time and every time that it makes
Speaker 2: sense and you can measure it, especially in this case
Speaker 2: for the business. Like you mentioned, it is very good
Speaker 2: idea to turn the numbers to dollars. Like you said,
Speaker 2: measure and you know, this is a loading time. We
Speaker 2: had these number of visitors and then by doing this,
Speaker 2: which take took me maybe a day maybe by most,
Speaker 2: we increased the number of visitors to this number, which
Speaker 2: at the end is like maybe ten percent of sales
Speaker 2: or maybe increasonment in the cells, you know, or something
Speaker 2: like that. This is very important to show to the business.
Speaker 2: If we can do this like continuously, they will believe
Speaker 2: in us and then they will actually ask us even
Speaker 2: to spend more time to do this and stuff. You know,
Speaker 2: this happened, This happened to me in my previous shot.
Speaker 2: There was some blocking forces from the business side that
Speaker 2: you cannot do that you should not spend time on this.
Speaker 2: Just deliver these features and then at the end we
Speaker 2: did some stuff, and then we measure and then send
Speaker 2: the report back to the business for a few times,
Speaker 2: and I think after after a few months, I remember
Speaker 2: that the product owner came to us and said that, okay,
Speaker 2: we need to prioritize this optimization. This is very important
Speaker 2: for business to get the revenue higher at this season.
Speaker 2: And we were all shocked. Okay, so okay, we will
Speaker 2: do for sure.
Speaker 3: Yeah.
Speaker 1: Yeah, it's interesting too because you brought up the number
Speaker 1: of visitors and the site speed is now taken into
Speaker 1: account by Google and other search engines, and so if
Speaker 1: you're doing any kind of search engine optimization, yeah, how
Speaker 1: fast your page loads and works is definitely.
Speaker 3: A metric that they're looking at too.
Speaker 1: So it does affect not only your click through through
Speaker 1: the effectiveness of your current traffic, but it also affects
Speaker 1: your incoming traffic as well.
Speaker 3: Web from search engines.
Speaker 2: Absolutely, so.
Speaker 1: Is there an easy way to get started with this stuff?
Speaker 1: I mean, you've mentioned the commlink library a few times.
Speaker 1: Is that super approachable or are there other ways to
Speaker 1: tie all this stuff in that just make it a breeze.
Speaker 2: Well, I think it's starting with commbling. Is the best
Speaker 2: things that you can do because it's very easy to
Speaker 2: start with. The API is very simple, and at the
Speaker 2: end it's very familiar with what you are doing in
Speaker 2: a daily basis. So for web workers, I strongly recommend
Speaker 2: using this library if you haven't used that before, and
Speaker 2: compare it to if you have done that also compared
Speaker 2: to what you've done, and see, like how easier and
Speaker 2: better is that? You know, maybe you feel that, Okay,
Speaker 2: this is fantastic, so I should maybe start using that
Speaker 2: after all. You know.
Speaker 6: I had a question regarding mob assembly and how it
Speaker 6: kind of fits into this world and from a perspective
Speaker 6: right now, what can actually do a production with it?
Speaker 5: Or is it not yet there?
Speaker 2: Well, I think there are lots of web assembly examples
Speaker 2: nowadays on the web. Maybe some of these, like I
Speaker 2: think one of the best examples is Figima. If you
Speaker 2: know which software it is, Yeah, yeah, yeah, it's I
Speaker 2: think they're using web assembly, so so already, Yeah, it's
Speaker 2: a very very cool example of using web assembly. So
Speaker 2: I'm not a web assembly expert, but what I tried
Speaker 2: to explain in the touch was how easy you can
Speaker 2: start with web assembly because I can I can actually
Speaker 2: question right now and you can answer when I say
Speaker 2: web assembly, what is coming to your mind? First? The
Speaker 2: first thing that it comes to your.
Speaker 5: Mind gaming.
Speaker 4: White code?
Speaker 2: I think exactly see or maybe performance right fast. This
Speaker 2: is interesting because these are the things that we are
Speaker 2: exposed to our outer work. We are developers, right, We
Speaker 2: read blogs, we watch videos, and we are hearing about
Speaker 2: all of these things around us. Okay, see web assembly
Speaker 2: only works with C or no, maybe also works bit ross.
Speaker 2: You know. This is what I was interested about and
Speaker 2: I talked about. Also, is that when I'm talking about
Speaker 2: web assembly, usually you are not going to try it
Speaker 2: because you say, okay, this is something with C and oh,
Speaker 2: I'm not a C developer and I don't know even
Speaker 2: how to use C or how to start with CE. Right,
Speaker 2: So I brought it up in the tie and said, no,
Speaker 2: that's that this is not the case. You have maybe
Speaker 2: simpler option to start with web assembly and start learning
Speaker 2: this at least, because it seems like this is going
Speaker 2: to be some kind of future like more and more
Speaker 2: games apps web apps are coming to web from different
Speaker 2: languages via a web assembly, so we should know this, right,
Speaker 2: we should start.
Speaker 9: Learning this and and then and the language or or
Speaker 9: the framework that I introduced was probably many of us
Speaker 9: also know right now is assembly script.
Speaker 2: Have you heard about assembly script? No? Assembly script actually
Speaker 2: is uh, it's more or less like a compiler. It's
Speaker 2: it compiles a strict subset of type of script to
Speaker 2: web assembly. So if you if you are familiar with
Speaker 2: type script, and if you go and learn web assembly typing,
Speaker 2: then you are good to go. You can start writing
Speaker 2: your web assembly right now. So you can go to
Speaker 2: assembly script, simply download it from MPM and then initialize
Speaker 2: your project with one command only you have everything. Start
Speaker 2: writing your type script like functions but with web assembly typing,
Speaker 2: and then with one command compile it to wasen and
Speaker 2: you have a loader from this library. Very easy start
Speaker 2: like using your vasm file or instantiate your vasum file
Speaker 2: into your main application. I had an example of a
Speaker 2: very simple example which may not have a real even
Speaker 2: use case, but I he wrote a function in both
Speaker 2: web assembly and JavaScript in the React application. And the
Speaker 2: function was supposed to calculate the fibonacci number right, so
Speaker 2: and I passed a very high number. So I ran
Speaker 2: it with web assembly and I also run it with
Speaker 2: the JavaScript one. This is when this is exactly when
Speaker 2: I say that we need to measure. I measure it,
Speaker 2: and the web assembly version when I was executed, it
Speaker 2: was seven times faster, and it was very surprising. There
Speaker 2: was no optimization for the function though exactly the same
Speaker 2: but different implementation in web assembly and JavaScript. Then when
Speaker 2: I ran it for the second time, the function then
Speaker 2: it actually the execution time was exactly the same. So why,
Speaker 2: I mean, people ask me in the room, like when
Speaker 2: I was talking, why is that the case? So we
Speaker 2: thought that web assembly is going to be faster and
Speaker 2: also be faster always, and that is true. If web
Speaker 2: assembly execute something in one particular let's say time, it
Speaker 2: is also stay in that time forever. If you execute
Speaker 2: this function, you probably get the same performance of same
Speaker 2: number every time you execute. So. But in JavaScript, for
Speaker 2: the first time, because there was no optimization from WEM
Speaker 2: for when you're running this function, then of course it
Speaker 2: takes a little bit longer. But then the second time
Speaker 2: when you execute that there was optimization in WM right
Speaker 2: like in v eight JavaScript and gene, then the time
Speaker 2: was pretty similar. So that is why we have to ask, okay,
Speaker 2: should I actually take this part of the application right
Speaker 2: now to wether assembly or not? That is the question
Speaker 2: we should ask. So this is also we discussed in
Speaker 2: the talk and in the fa Q section of the talk.
Speaker 2: Like use cases are very different, so you need to
Speaker 2: think about your use cases and then measure it and
Speaker 2: see if it works for you. That was the use
Speaker 2: case for a websent. I think it was fun. It
Speaker 2: was fun in this case that you know that if
Speaker 2: the web assembly runs in a performance way or line,
Speaker 2: it will stay in that line. It is always performance
Speaker 2: if it runs on that level. So while JavaScript it
Speaker 2: tries to optimize itself. Let's say it was an interesting finding.
Speaker 4: So from a developer perspective, if you have web assembly code,
Speaker 4: does it? So it certainly sounds like you can just
Speaker 4: designate a chunk of your code that I want this
Speaker 4: to be like in web assembly, whether that's with assembly
Speaker 4: script or whatever. Is when is like when you run
Speaker 4: the bulk of your application code, Is that just like
Speaker 4: a synchronous call in the web assembly land to like
Speaker 4: do some task and get a result? Like how does
Speaker 4: like the API experience compared to like web workers?
Speaker 2: So if you want to understand ship with the browser
Speaker 2: API LASM file, it's a bit of worn. So I'm
Speaker 2: not going to explain that and then why I'm explaining
Speaker 2: assembly script though, because it simplifies those APIs into only
Speaker 2: one API, which is a promisified version of that. So
Speaker 2: you have your lasom file after you compile, you can
Speaker 2: use this loader actually without using assembly skip. You can
Speaker 2: use just assembly loader from assembly script. Then when you
Speaker 2: instantiate this vasom file, it's just one line of code.
Speaker 2: There is one function in the assembly script loader you
Speaker 2: pass a promise version of Let's say you pass a
Speaker 2: fetch a function which is fetching the VASM to this function,
Speaker 2: and then it instantiated those it will actually do all
Speaker 2: of those things that needs to be done in the browser,
Speaker 2: and then it exposed to you the method that you
Speaker 2: already exported in web assembly or assembly script sorry, or
Speaker 2: if you have done it already in other languages, you
Speaker 2: already exported some function for instance, to be accessible in
Speaker 2: the JavaScript or main for it, right, so you will
Speaker 2: get access to that. So it's that easy.
Speaker 4: And then you can just use those functions as if
Speaker 4: they're just like all the other JavaScript functions.
Speaker 2: Okay, exactly exactly. You just call those functions whenever you want.
Speaker 7: Nice.
Speaker 2: There are lots of examples with assembly script, right, now,
Speaker 2: so you can go and find out that people wrote
Speaker 2: games purely in an assembly script or the are a
Speaker 2: lot of different encoders or decoders for images or audios
Speaker 2: or those kinds of things that they are available as
Speaker 2: a plug in and you can use that. So there
Speaker 2: are there are cool stuff that you can probably download
Speaker 2: and experiment with. I strongly recommended, especially as a web developer.
Speaker 2: Who you are. We usually you know, in a daily basis,
Speaker 2: we usually are a great javas created a paper spree,
Speaker 2: you know, or so if we can have a tool
Speaker 2: similar to what we are using, it's fairly easier to
Speaker 2: start learning these new technologies, right, So sometimes we are
Speaker 2: we we kind of stop ourselves from learning because it's
Speaker 2: very different from what we are using in a daily basis.
Speaker 2: And I like those tools that are helping us to
Speaker 2: have to bring these familiar APIs to us, and I
Speaker 2: really like them nice.
Speaker 1: So one other question that I have is I'm assuming
Speaker 1: that your web workers or your assembly script or anything else,
Speaker 1: you know, as you put the stuff together, it's just
Speaker 1: calling functions. So testing is just like testing any other
Speaker 1: piece of JavaScript, right Exactly.
Speaker 2: You may need to like moke some API or something
Speaker 2: but testing is like similar with other JavaScript testings. We
Speaker 2: also missed and other things which probably I need to
Speaker 2: talk about it a little bit. Worklets. Any of you
Speaker 2: actually have heard about worklift before?
Speaker 6: I have not, so I've heard about it, but only
Speaker 6: in the context of sexswini.
Speaker 2: Yeah, because that is the most available one more. Yeah,
Speaker 2: so let's talk about it because that is going to
Speaker 2: be something very cool in the near future. May this year,
Speaker 2: So many many browsers are implementing work let's APIs. So
Speaker 2: what is worklet or what are worklets? Worklets are a
Speaker 2: light version of web workers again, so you see that
Speaker 2: many of these APIs, new APIs are evolving kind of
Speaker 2: on top of web workers. So let's let's talk about it.
Speaker 2: So what what does what do they do? Like these worklets?
Speaker 2: The main point of having worklets is to have access
Speaker 2: to very low level part of the rendering pipeline in
Speaker 2: the browser. What does that mean? Well, that means you
Speaker 2: can you can have access to the graphic rendering or
Speaker 2: audio processing of the rendering engine pipeline in the browser,
Speaker 2: which is very very performant because it's very very low level. Okay,
Speaker 2: so give me an example matchically, Okay, I'll give you
Speaker 2: an example. The example is, let's imagine you want to
Speaker 2: implement a QR code painter and you want to actually
Speaker 2: repaint this QR code whenever user is interacting with some
Speaker 2: kind of input or button or something. Right with work lets,
Speaker 2: what you can do you can write your own JavaScript
Speaker 2: to design to design this QR code, for instance, and
Speaker 2: then register it with I'm talking about one particular example
Speaker 2: of worklet, which is css wudin as you mentioned card,
Speaker 2: and you register this with CSS paint API. Once you register,
Speaker 2: then you have access it via CSS. So then you
Speaker 2: can call this function actually in the CSS and you
Speaker 2: can start repainting this whenever you call this function. So
Speaker 2: I had an example in the talk. And also I
Speaker 2: have a life on my website that you can interact
Speaker 2: with this QR code without bothering the main threat because
Speaker 2: that is, like I said, it's kind of on top
Speaker 2: of the web workers, so it's a different threat. So
Speaker 2: it's dealing with this painting even though you have like
Speaker 2: an example that I had, I had an animation, it
Speaker 2: was working and I was actually repainting this QR code.
Speaker 2: It was very complex and very fast, and there was
Speaker 2: no blocking nothing in the main threat so the animation
Speaker 2: was working very smoothly. Why I was working with this
Speaker 2: repainting and stuff. This is going to be very very
Speaker 2: powerful in the future. You can think of it. What
Speaker 2: can you do? You know a lot of use cases
Speaker 2: that you may think of it. Another simple example, very
Speaker 2: simple example, was to paint a chess or checkboard background.
Speaker 2: So well, we can do it different with the different ways.
Speaker 2: But one way that you can do you can actually
Speaker 2: write your own Java script to generate this checkboard and
Speaker 2: register your JavaScript with CSS pain and then call this
Speaker 2: to the body for instance, with background and the name
Speaker 2: of this cess pain, and then you will get this
Speaker 2: checkboard in the background, which is actually rendering in a
Speaker 2: different threat. So this is very powerful, very very interesting,
Speaker 2: but unfortunately many browsers right now don't support it. C
Speaker 2: s a Skudini or paint work let. It's it has
Speaker 2: a better support in different browsers. That's why we are
Speaker 2: hearing about this API more and more. But other worklets,
Speaker 2: we have four different work lets. We have paint cs
Speaker 2: as withinia as I just explained, animation, layout and audio
Speaker 2: worklet's so but the rest are they don't have a
Speaker 2: good support. It's only Chrome I think right now, or
Speaker 2: maybe Edge new version because it's also based on the Chrome.
Speaker 2: But the rest of the browsers they don't have a
Speaker 2: good support for these APIs. But what I know is
Speaker 2: that they're working on it to make this or to
Speaker 2: put this API into their browsers very soon, maybe this year.
Speaker 2: So we should be ready for these APIs very soon.
Speaker 1: Awesome, very cool, Yeah, totally cool, more stuff to play with.
Speaker 7: Oh.
Speaker 6: I had a question because when I last heard about Rudini,
Speaker 6: the way that I was explained was it's going to
Speaker 6: be most likely used by authors or frameworks and libraries,
Speaker 6: and less so by your average developer.
Speaker 5: I mean from my experience. And you know is that
Speaker 5: TRIU imagined?
Speaker 2: Well, I disagree somehow. First of all, we are all
Speaker 2: awesome developers, all of us, so I don't think there
Speaker 2: is a difference. We all can use this API. So
Speaker 2: while we at some point we all of us can
Speaker 2: be a CSSs sorry, a library, a maintaeniner, right, we
Speaker 2: can also write our own library. So why should why
Speaker 2: you should not use this API? No, you have to
Speaker 2: use it. You will get Actually, you will see a
Speaker 2: lot of use cases for these APIs, So I think
Speaker 2: we should learn it because it's very very beneficial for us,
Speaker 2: very empowering.
Speaker 3: Yep, anything else we should jump on before we do picks.
Speaker 2: I can make add One thing is that don't scare
Speaker 2: of the new APIs and just experiment and work with them.
Speaker 2: It is very important if you are especially a front
Speaker 2: and developer, let's say, or a JavaScript developer dealing with
Speaker 2: browsers these days, you have a lot to take on.
Speaker 2: It's a lot to learn, but at the same time,
Speaker 2: it's a lot of fun. You know a lot of
Speaker 2: cool things that we were not able to do in
Speaker 2: the past, but now we are able to do, and
Speaker 2: it's so empowering. So just use it and experiment.
Speaker 3: Awesome, all right, Well let's go ahead and do some picks. TJ.
Speaker 3: Do you want to start us off with picks?
Speaker 4: Sure, I've just got one. There's this farm I'm actually
Speaker 4: not sure it is, but they've started up this service
Speaker 4: called goat to meeting and it's especially exactly like the
Speaker 4: name implies. Basically, you can pay and this farm will
Speaker 4: bring a goat into a zoom call for you, essentially,
Speaker 4: and they have a rate they charge for this a
Speaker 4: goat to show up. And I think actually a more
Speaker 4: interesting thing is there. They do something along the lines
Speaker 4: of classrooms tours. So like if you had like a
Speaker 4: class of kids that isn't at school now, you could
Speaker 4: arrange a zoom call for a class and they'll give
Speaker 4: you a like a tour of the farm, just digitally,
Speaker 4: just to give kids something to do that are probably
Speaker 4: if there are anything like mine, going a little bit
Speaker 4: stir crazy. Having been inside for a few weeks at
Speaker 4: this point, Well.
Speaker 1: That might work, yeah for my kids. I was thinking
Speaker 1: people were just zoom bombing anyway, So I.
Speaker 4: Yeah, I think so. I think there they'll either you
Speaker 4: could just have a goat show up or I don't know,
Speaker 4: interesting new economics like opportunity from this situation.
Speaker 3: Nice. That reminds me a talk to a guy that
Speaker 3: runs is it goat milk stuff? I think?
Speaker 1: But anyway, they make like soaps and food items and
Speaker 1: all kinds of stuff out of goat's milk.
Speaker 3: This is a legit business. But yeah, it was.
Speaker 1: It was pretty interesting to talk to them and see
Speaker 1: kind of how they run things with So I'll throw
Speaker 1: a goat pick into I haven't tried any other stuff
Speaker 1: so but but Jim's a good guy anyway, Carl, do
Speaker 1: you have some picks for us.
Speaker 6: Yeah, the only pick that I've got really is what
Speaker 6: our referenced earlier on the podcast where does.
Speaker 5: So my thinks name is?
Speaker 6: Spoke about Kamlik and you spoke about it in kind
Speaker 6: of depth, how to use world workers in your application,
Speaker 6: as well as potential use cases for handling your statement
Speaker 6: men as well.
Speaker 5: So that's the pick I'm going to choose today.
Speaker 3: Awesome page. Do you have some picks for us?
Speaker 5: I do.
Speaker 7: My first one is completely unrelated to anything that we've
Speaker 7: spoken about. It's actually the Dji Phantom for drone. Since
Speaker 7: none of us can really go anywhere, this might give
Speaker 7: you the feeling that you're actually at least getting outside
Speaker 7: a little bit by flying this drone from your driveway
Speaker 7: or your porch or something. It's great. It's really one
Speaker 7: of the best ones I've seen, even for people who
Speaker 7: are not very proficient applying drones, myself included. I haven't
Speaker 7: managed to crash it yet, so I would say it's
Speaker 7: a really good starter drone if you've got a little
Speaker 7: bit of money to spend right now. Second pick would
Speaker 7: be the show Ozark on Netflix. It's in its third season,
Speaker 7: just came out and it's really it's a great one
Speaker 7: to binge watch through because there's a lot of stuff
Speaker 7: happening from moment one, and you know, as soon as
Speaker 7: the episode ends, you just can't wait to see what's
Speaker 7: going to happen next.
Speaker 3: Awesome. I've got a couple of picks.
Speaker 1: One of the first picks I have I found this
Speaker 1: stopwatch app on for my iPhone, and what I was
Speaker 1: looking for is just to kind of give people an idea.
Speaker 1: So I've gotten rather involved in the Utah County Republican Party,
Speaker 1: and all of the county officials here in Utah County
Speaker 1: are Republicans, so if you want to say you kind
Speaker 1: of have to go to the convention.
Speaker 3: Otherwise you're just kind of.
Speaker 1: Voting in the primary ballot and then voting in the
Speaker 1: general election and whoever, by then they've already been picked.
Speaker 3: So I've gotten involved early, and somehow.
Speaker 1: I wound up running the debate, and so I needed
Speaker 1: a stop watch or a timer on my phone that
Speaker 1: would count down, but it had to be in landscape
Speaker 1: mode so that I could put it on a tripod
Speaker 1: in front of my camera so that the candidates could
Speaker 1: see it. And it's surprisingly difficult to find one, So
Speaker 1: I did wind up finding one. I was super happy
Speaker 1: with it, and I'll put a link to it in
Speaker 1: the show notes because I can't remember exactly what it's
Speaker 1: called right now, but that just made me happy. Another
Speaker 1: one I'm going to pick is I have this tripod.
Speaker 1: It's a RIFFG tripod. It's really small, it'll sit on
Speaker 1: your desk, and then it has the phone spring loaded
Speaker 1: attachment on top that I pulled off of a selfie
Speaker 1: stick that I have never used, and so yeah, I'm
Speaker 1: really liking that, So I'm going to pick that. And
Speaker 1: then finally, I've been working on getting the word out
Speaker 1: for jas remote comp that's going to be in May
Speaker 1: and Carl's going to be speaking at it. I'm looking
Speaker 1: for sponsors, so if you work for a company that
Speaker 1: might want to sponsor, I would appreciate that. But besides that,
Speaker 1: I've been playing with Canva as a way to get
Speaker 1: all of my social media images together. And you can
Speaker 1: just build a template and then I can just literally
Speaker 1: go in and put different text in for the talk
Speaker 1: title and the speaker and the you know.
Speaker 3: Their headshot in the whole nine yards.
Speaker 1: And so I've been working on getting that stuff together
Speaker 1: to play with and so I've been pretty happy with that.
Speaker 1: So those are kind of things that have made my
Speaker 1: life a little bit better these days. And then I
Speaker 1: also just want to shout out about our meetups. Page
Speaker 1: has agreed to speak at our next React meetup, and
Speaker 1: that's going to be as we record this in a.
Speaker 3: Couple of weeks.
Speaker 1: I'm not sure about the timing of this coming out,
Speaker 1: but I'm planning on doing this for the next several months,
Speaker 1: just because even if they start sending people back to
Speaker 1: work and you know, we can kind of get back
Speaker 1: to normal without getting all the way back to normal.
Speaker 1: You know, we're still taking precautions for people's health. I
Speaker 1: think conferences and meetups are just going to be in
Speaker 1: a weird spot through the end of the year, and
Speaker 1: so I'm hoping to run these meetups and give people
Speaker 1: a place to go. So you go to devchat, dot tv,
Speaker 1: Slash meetup or meetups sorry, and that will list all
Speaker 1: of the upcoming meetups. I'm doing it for JavaScript, Angular View, React,
Speaker 1: and Ruby at this point. If somebody wants to help
Speaker 1: me run some of the other ones for some of
Speaker 1: the other shows, I am happy to work on that
Speaker 1: as well. I guess I'm going to throw one last
Speaker 1: thing out, and that is that I am putting up
Speaker 1: as we speak today, the React Native Remote Conference. So
Speaker 1: I've had a lot of people asking about that chain
Speaker 1: React got canceled, so I just basically stole their dates
Speaker 1: at the end of July. So if you're interested in speaking,
Speaker 1: we'll have a CFP open and if you want to come,
Speaker 1: you can buy a ticket, and yeah, we'll just kind
Speaker 1: of move ahead that way.
Speaker 3: Majid, what are your picks?
Speaker 2: I think I want to pick a book called Deep Work.
Speaker 2: You may have heard about it, book called with by
Speaker 2: call Newport. So it is an amazing book. I read
Speaker 2: it like maybe three years ago when when I was
Speaker 2: in a different country action not in Norway, and it
Speaker 2: had a big impact in my life. So I still
Speaker 2: use those methods and I still follow those rules, and
Speaker 2: I think I could done a lot more after reading
Speaker 2: this book. So I strongly recommend and recommend reading this book,
Speaker 2: especially those parts that he is talking about shallow work
Speaker 2: and deep work and what is the difference, And you
Speaker 2: will figure out that like most of the time in
Speaker 2: the day, even at work, we may actually doing shallow
Speaker 2: work and not deep work, and that's why we always
Speaker 2: think that why I cannot get these things done? You know,
Speaker 2: so strongly recommend that Deep Work by Carl Newport.
Speaker 3: Yeah, that's a terrific book, Magid.
Speaker 1: If people want to reach out to you or get
Speaker 1: in touch, ask you questions, get involved in the conferences
Speaker 1: you organize, anything like that, how do they do that?
Speaker 2: I am very active on twater with my handler M
Speaker 2: fetch A d A, I L Y so, and also
Speaker 2: you can find me on LinkedIn, So I think the
Speaker 2: best place to reach me out is on Tweter. My
Speaker 2: message is open. You can always send me a message.
Speaker 2: I read all the messages and I try to answer
Speaker 2: all of them. So I get a lot of messages
Speaker 2: and emails. But I may be a little bit slow
Speaker 2: to respond, but I definitely respond. So reach me out
Speaker 2: with this handler on tweater.
Speaker 3: All right, very cool. Well let's go ahead and wrap
Speaker 3: this up. Thanks for our panel. Thanks again, Majid, Thank
Speaker 3: you until next time, Max out everybody,