React Native Radio

RNR 207 - We React to News

Episode Summary

In our second “We React to News”, Robin and Jamon discuss Expo 42, Github Copilot, Detox/GenyMotion, and TypeScript 4.4.

Episode Notes

In our second “We React to News”, Robin and Jamon discuss Expo 42, Github Copilot, Detox/GenyMotion, and TypeScript 4.4.

 

This episode brought to you by Infinite Red! Infinite Red is a premier React Native design and development agency located in the USA. With five years of React Native experience and deep roots in the React Native community (hosts of Chain React and the React Native Newsletter), Infinite Red is the best choice for your next React Native app.

Helpful Links:

  1. 3D Game Programming for Kids
  2. Fan mail
  3. RNR 191
  4. Expo SDK 42
  5. GenyMotion/Detox blog post
    1. Twitter post from GenyMotion
    2. Twitter post from Detox

Connect With Us!

  1. React Native Radio: @ReactNativeRdio
  2. Jamon - @jamonholmgren
  3. Robin - @robin_heinze

Episode Transcription

Todd Werth

Welcome back to React Native radio podcast. Brought to you by the Flat Earth Society. Math is hard. Episode 207: We React to News.

Jamon Holmgren:

So I had a warmer all ready to go here, and it was super relevant and I was going to get a lot of traction out of this, Robin, but then Jon Major dropped out at the last second because he has a sick kid. So, how was that ball game last night, Robin? You enjoy the...

Robin Heinze:

You mean the one that I didn't watch?

Jamon Holmgren:

Yes. The one you didn't watch.

Robin Heinze:

It was excellent. People did stuff with the ball and scored some points and yeah, there were winners and losers.

Jamon Holmgren:

That's very insightful. I appreciate that. Yeah. So Jon Major, of course, is from Wisconsin and the Milwaukee Bucks are in the NBA finals, so I was going to give him... Ask him some questions, they just won last night. We're recording this, of course it won't be released for two, three weeks, so people may know the end result. I don't know, knowing our audience, maybe they don't even know who the Milwaukee Bucks are, but...

Robin Heinze:

People are playing basketball right now?

Jamon Holmgren:

Yes, they are.

Robin Heinze:

Is that a thing?

Jamon Holmgren:

They're still playing basketball, midway through July. It was a fun game, and I enjoy watching basketball, but that warmer doesn't work anymore. So, I don't know.

Robin Heinze:

Next time you can ask me... If you ask me about the Olympics, we'll be able to talk about that, but that won't be for a couple episodes.

Jamon Holmgren:

Yeah. What do you think of Team USA basketball? Okay, yeah. Clearly this isn't...

Robin Heinze:

Okay, not that part of the Olympics.

Jamon Holmgren:

I'm Jamon Holmgren, your in your host and friendly CTO of Infinite Red. I'm on the React Native core team, maintainer of MobX-State-Tree, [data 4 00:02:19] tractor operator, and apparently really bad at these warmers. And I am joined today by my startling cohost, Robin. See, I'm running a little thin on synonyms.

Robin Heinze:

You're going to have to clarify, startling in what way? Did I scare you this morning?

Jamon Holmgren:

It was one of the options when I Googled synonyms for awesome.

Robin Heinze:

I startle you with my brilliance.

Jamon Holmgren:

Yeah. We'll go with that. Robin is a senior software engineer located near Portland, Oregon. Works at Infinite Red and specializes in React Native, and a mom of soon to be two, actually.

Robin Heinze:

Yes.

Jamon Holmgren:

So we're going to be missing you in September-ish. It's a little ways out.

Robin Heinze:

It's a little ways. I still got time.

Jamon Holmgren:

Yeah. You still got some time to kind of ramp up to that. Yeah. So like I said, Jon Major had to drop out last second. We also have Harris, who also had to drop out, so we're going in alone today, which will be kind of fun because some of these notes were actually written by our co-hosts, so we're going to have to kind of navigate our way through their part of the podcast, but we're going to do our best here, just for our audience.

Robin Heinze:

It's the dream team.

Jamon Holmgren:

It's the dream team, and you know what, we sacrifice for our audience.

Robin Heinze:

Yes, we do.

Jamon Holmgren:

This episode is sponsored by Infinite Red. Infinite Red is a premier React Native design and development agency located fully remote in the USA and Canada. We have years of React Native experience, blah, blah, blah, deep roots. You've all heard this before if you've listened to us. Infinite Red is the best choice for your next React Native app. We'd love to work with your team. Hit us up, hello at infinite.red. Let us know that you heard about us through the podcast, because that's always fun to hear. And also we are hiring React Native engineers. Fun story, we got an application that the person said in the application that, "Jamon wore me down on the podcast," and that's why he applied, so.

Robin Heinze:

That's why you do this every single episode.

Jamon Holmgren:

Every single day. Yeah. Wearing people down. That's kind of the story of my life, how I kind of have to get things done here around here. But you know what? I'm going to keep wearing y'all down. Careers.infinite.red, go fill out the form. All right, let's get into topic, or more like topics, for today. We are doing another We React to News segment here. And so we have five, actually we have six or seven things, but we're only going to probably get to, I would say around five today. We're going to try to spend about four or five minutes per item and talk about each bit of news since the last time we did this, which was about six weeks ago or so. And yeah, just try to get everybody caught up on things. We keep on top of things so that you don't have to.

Jamon Holmgren:

By the way, a little shout out, if you want to subscribe to our newsletter, reactnativenewsletter.com, go check that out because you will also be able to stay on top of things when... So you don't have to, you don't have to go and look up every bit of news on Twitter or whatever. So, let's get into it. What's our first bit of news? I'm not going to do the whole voice thing, that didn't work very well in my opinion.

Robin Heinze:

Number one.

Jamon Holmgren:

Yeah, number one. What's the first bit of news, Robin?

Robin Heinze:

Looks like Expo 42 was released recently. Yep. Expo SDK 42, which includes React Native 0.63.

Jamon Holmgren:

64 is already out, but they decided to just keep with 63 because they were sure... Or they knew that 63 worked really well. That's one thing I appreciate about Expo is that they do a really good job of testing everything and don't really release stuff until they're pretty sure that it's going to work.

Robin Heinze:

Yeah, they're pretty consistent about this. They don't jump to the latest React Native version until it's been out for a little bit and it's pretty solid. So this isn't an exception to that. This is just kind of the norm for Expo.

Jamon Holmgren:

They have a preview release of custom development clients. So this allows you to sort of, if I'm reading this right, it's sort of like an Expo Go, the app that you put on your simulator or phone or whatever, but it's like a custom version of that. And so it allows you to install native code and stuff like that, actually integrate it into your Expo Go-like experience. So it's really easy to load stuff up. You're not having to recompile all the time, but it actually does have custom native code. This kind of is a step toward overcoming one of the big criticisms of Expo, which is like, I got this SDK or I've got this native code and I want to integrate it, but I can't.

Robin Heinze:

Yeah. They summarize it as, you couldn't think of expo-dev-client as a library that installs Expo Go-like interface in debug builds of any React Native app, not just Expo Managed apps. So they're definitely moving towards more flexibility, which is one of the primary criticisms they've gotten over the years.

Jamon Holmgren:

Do you ever think that Expo gives away too much? Like, this is part of the core of their business and pushing people toward the Managed side of things seems like a good idea because that's where they make money, but they're just giving it away for free. I don't know. I guess it's just part of the ethos.

Robin Heinze:

Yeah, I think it really is. And I think they know that there's plenty of users that love the Managed Workflow and don't necessarily need more Native support and they'll still continue to use the Managed Workflow, and this kind of just brings in even more users who will become loyal fans of Expo. So I think it's only a win.

Jamon Holmgren:

Yeah, I would agree with that, and also it does kind of match up with how we do things at Infinite Red too. We give away a lot of our open source with Ignite and Reactotron and stuff. And it's always about just developing those... People see our ethos and how we operate and then hopefully think of us.

Robin Heinze:

It's a matter of good will.

Jamon Holmgren:

Mm-hmm (affirmative), yeah. And I like that.

Robin Heinze:

When people think about your company, you want them to have good feelies.

Jamon Holmgren:

Exactly. Additionally, SDK 42 brings in first-party Stripe support. We could probably use this a couple of, or actually, was it last summer? Yeah, last summer.

Robin Heinze:

Does that mean Stripe Connect is supported?

Jamon Holmgren:

Yeah. It actually does support Stripe Connect.

Robin Heinze:

Nice.

Jamon Holmgren:

We had an app where we were building it and we couldn't use the kind of basic Stripe integration because that didn't have Stripe Connect support. The one with Native integration did and now that's possible with Expo.

Robin Heinze:

Right. Because Stripe React Native had everything we needed, but awesome.

Jamon Holmgren:

It looks like they actually collaborated with Stripe to make that work, so that's pretty cool. There's also experimental support for Hermes on Android, which is on Expo Go. So it allows you... Not just that, but also EAS Build and Expo updates. So that allows you to use Hermes. Hermes seems to be becoming more and more the default choice for React Native apps at this point.

Robin Heinze:

Mm-hmm (affirmative). And I look forward to when they move to React Native 64, because there'll be able to start working on support for iOS Hermes.

Jamon Holmgren:

Yeah, absolutely. Speaking of EAS Build which, by the way, shout out to episode 191 that we did with Brent Vatne, there's also better Android permissions on that, so that's another improvement. And then also there's a new notification... Well, there are new notification features such as custom sounds, handling push notifications while your app's in the background, et cetera. So they're improving the notification developer experience on that. So a lot of new, good, kind of solid improvements to Expo in SDK 42. Nice to see these movements in the direction that will help us choose Expo more often.

Robin Heinze:

It looks like they've also added a bunch of cool new VSCode tooling. You should check that out.

Jamon Holmgren:

Yeah. VSCode, I guess, becoming the standard. You remember, what editor did you use when you kind of first came into the industry?

Robin Heinze:

When I first came to the industry, I used Sublime for a long time.

Jamon Holmgren:

Oh, yeah. Sublime Text 2, probably.

Robin Heinze:

Yeah, yeah.

Jamon Holmgren:

I think that was the one that I used.

Robin Heinze:

Sublime Text 2 is what I use when I started doing Ruby in 2014. Used that for a while at my first job. After about two years, I was finally convinced to switch to Vim.

Jamon Holmgren:

Vim, yes.

Robin Heinze:

Which is what most of my coworkers used. So I had a lot of Vim mentors around me to help with that process, and I actually got pretty comfortable. And then I came to Infinite Red and hardly anybody used Vim, and it was kind of a pain when I needed to show somebody my code or screenshare or whatever, because they didn't know what was going on. And so I switched back to Sublime briefly, and then the VSCode really took off and I jumped on that bandwagon and it's amazing, and I will never use another editor again, probably.

Jamon Holmgren:

Famous last words. But actually, it does seem like it's become an industry standard at this point. I started with Dreamweaver and then went to Sublime and then...

Robin Heinze:

Can you call Dreamweaver an editor?

Jamon Holmgren:

The editor itself, not the visual editor, which is what a lot of people think of when they think of...

Robin Heinze:

Dreamweaver.

Jamon Holmgren:

Dreamweaver. The actual code editor itself was actually, I would say in some ways superior to Sublime when I switched. I missed some things. There were some really cool... Like had really good snippet support and stuff like that. Very good code coloring, all that. Then Sublime got better and better, and then I switched to Atom for a while, but that was just so sluggish and slow. And then I switched to VSCode and didn't look back at that point.

Robin Heinze:

So, yeah. Expo has a bunch of integrations for VSCode, and this SDK 42 looks like comes with a bunch of improvements, including mod previews. So if you use Expo, you know what mods are, they modify native project files during the prebuild process, but now you can preview them in VSCode without having to actually go run prebuild, which is pretty cool. And it looks like you can also preview determine... Or determine what permissions will be added to your Android manifest, which also seems really powerful. So yeah, doing a lot. It's amazing what you can do with VSCode.

Jamon Holmgren:

Yeah, totally. Speaking of amazing things that you can do with VSCode, there is a new, kind of new hotness out there called GitHub Copilot.

Robin Heinze:

Yes.

Jamon Holmgren:

Robin, have you tried this yet?

Robin Heinze:

Well, no, because you have to be royalty in order to get an invitation. I did join the wait list and I watched... So I watched some streams from famous people on Twitter who were able to get into it.

Jamon Holmgren:

Royalty.

Robin Heinze:

Royalty. And it looks pretty fun, pretty mind-blowing. So if you don't know, GitHub Copilot is an AI pool, or it's based on open AI codex, that uses all of the public code on GitHub as training data to give you really smart autocomplete suggestions as you write your code, basically. So I like...

Jamon Holmgren:

I'm glad they clarified public code...

Robin Heinze:

Yes, public.

Jamon Holmgren:

Because I think that would be... Just start typing in... Try to figure out what the private code key would be so you can just get that filled in.

Robin Heinze:

So yeah, it uses what you've typed, what you've written already, what you've typed already, along with its trained algorithm to sort of predict what you might want to write. So you can just write a comment that says "To do component with on press text and style props," and it will guess about what that to do component might look like. And it actually does a pretty good job.

Jamon Holmgren:

Yeah. There's obviously the usual tweets kind of saying, "Oh, look at this funny thing that Copilot suggested," or things like that. But actually there are a lot of people that, they start it and they're like, "Well, okay, that's pretty interesting." It's just tapping into the millions, maybe billions of lines of code that are on GitHub.

Robin Heinze:

Well, can you imagine how many people have basically written the exact same component as each other over and over and over again? How many times can you write a button with text in it and an icon on one side? There's just a lot of patterns that every app kind of has.

Jamon Holmgren:

And for those of you who haven't delved into what AI is all about, what you really need is a lot of training data. You need a lot of good data that you can train the model on to then predict future things. And so who has more data than GitHub? They have all this, as far as code, they have all this code and they have the ability to train their models using that. So really cool idea. Does this mean, Robin, that our days as programmers is limited?

Robin Heinze:

Definitely not. I don't see developer jobs going anywhere anytime soon. It's really more of a tool and maybe a starting point. It can also be extremely helpful if you're trying to learn a new language framework SDK, because there's a bunch of public code out there from people that have implemented the API that you're trying to use, and so it'll give you suggestions that sort of prevent you from having to just scour a bunch of documentation, which can be really, really useful when you're trying to learn something new. But the code it generates is obviously not perfect, will not be ideally suited for your business logic or your exact use case. It's a place to start. It can probably save you some typing, pretty cool tool to play around with.

Jamon Holmgren:

If you just rely on GitHub Copilot, then every app will just turn into a to-do app because there's like a billion of them out there.

Robin Heinze:

I do look forward to a bunch of people showing like, "Here's an app built entirely by GitHub Copilot," and just see what kind of funny things come out of it. It's like the time that they did "Twitch plays Pokémon" or "Twitch plays Mario."

Jamon Holmgren:

Exactly.

Robin Heinze:

To see what happens.

Jamon Holmgren:

Yeah. So I don't know, are there... I see in the notes here, there's a note, "You need to use key phrases like 'flat list'."

Robin Heinze:

Yeah. You have to sort of give it some help.

Jamon Holmgren:

Clues.

Robin Heinze:

Obviously I haven't used it, so I haven't tried, but I haven't played around with what it would give you if you just said, "Make a list of strings" or something. I don't know.

Jamon Holmgren:

Right, right. Yeah, would be cool to try that.

Robin Heinze:

But you can help it by just saying, "This is a list of to-do components" or a flat list of to-do components with X, Y, and Z props. And it'll help it sort of know to do the right thing a little bit better.

Jamon Holmgren:

It'll be interesting to see how this goes, and once it's available us non-royalty, I will definitely give it a go.

Robin Heinze:

Well I'm on the waiting list, so fingers crossed. How am I not royalty yet? Come on. How long have we been doing this podcast? Who do I need to talk to at GitHub?

Jamon Holmgren:

Who do we need to talk to? Maybe they're listening. Maybe they're listening. All right. So next on the list is Detox and Genymotion. It's Jenny-motion, right? Or is it Genny-motion?

Robin Heinze:

It's Jenny-motion.

Jamon Holmgren:

Okay. Just like Gif. Got it.

Robin Heinze:

Yes.

Jamon Holmgren:

So they wrote a blog post, I guess? Ellinor Kwok. But Ellinor writes an article "Scale your e2e React Native UI testing with Detox on Genymotion Cloud Android virtual devices." So this has actually been kind of a pain point for us, where you can't run your Detox and end-to-end tests on a React Native app in the Cloud, so you can't do virtual devices. I mean, you can run it in a simulator, but you can't do it on a device farm, is the problem. And even on simulators and emulators, it can be somewhat problematic.

Jamon Holmgren:

So this is kind of cool, because there is Genymotion Cloud out there as a sort of... Of course, Genymotion is, I originally found out about it through they released their own Android emulator that was much faster than the existing one, and now Google has improved that so it's less important, but Genymotion is still better in some ways, I've heard, in terms of speed and reliability and whatnot. So obviously Detox is a great framework. We actually did a episode, 189 with, with Rotem, and so we really like it, but in some cases we were having to drop back to Appium, which is an alternative that is not as fun to use, but it works on device farms. So this is kind of cool. You can use Genymotion Cloud and then you can actually continue to use your Detox tests for end-to-end, rather than having to switch over to Appium.

Robin Heinze:

And it looks like Rotem actually was pretty instrumental in making this...

Jamon Holmgren:

Making this happen, yeah.

Robin Heinze:

Making this partnership happen through his work at Wix.

Jamon Holmgren:

Yeah. That's fantastic. It's cool to see the tooling and testing and whatnot getting better for React Native.

Robin Heinze:

Yeah, definitely. And I think the more we have tools for scalable large-scale testing like this, the more we're going to get enterprise buy-in.

Jamon Holmgren:

Yes.

Robin Heinze:

Enterprise companies usually highly value robust testing, and they want to know that a release is good before it goes out the door, and this will... Is one step closer to making that really commonplace.

Jamon Holmgren:

Yeah, absolutely. So speaking of, I'm actually going to move right along because time is ticking away. Speaking of better tooling, TypeScript 4.4 was released, well, actually, as of recording, it's the beta, but it's pretty well solidified.

Robin Heinze:

Their betas are pretty stable.

Jamon Holmgren:

They are, yeah. And I'll just run through some of the benefits here. So there's a smarter control flow analysis, so essentially it understands... Before you can do an if type of my variable is a string and then it would know that inside of the if statement that now we know that this is a string, but now you can actually put that into a const, like const is a string equals type of, and then if is a string is then evaluated by TypeScript as also being a guard there. So it kind of maybe annotates that variable saying, if this is using an if statement now inside of that if statement control block, we can now assume that that variable is a string. So that's kind of cool. Just kind of adds a little more intelligence to inferring the type from the control flow.

Robin Heinze:

I'm always really impressed by TypeScript's control flow features.

Jamon Holmgren:

Yeah, me too.

Robin Heinze:

How you can put a conditional in and it just... Now it just knows you've added type safety.

Jamon Holmgren:

Can also now use symbols. I don't use symbols all that often in JavaScript, but they are useful in some cases, but you can use them as object keys, and as... You can actually type an object to say, this needs to have symbols as its object keys. So that'll be useful.

Robin Heinze:

Can you explain a little bit more about what that means? Because I don't usually think about symbols in the context of JavaScript. I remember symbols from like my Elixir, my brief stint in Elixir, but I don't really think of symbols at JavaScript.

Jamon Holmgren:

Yeah. So symbols are... You don't really... Most people don't need to use these, to be honest. It's pretty much a library author thing. Symbols are guaranteed to be unique, even if they have the same key or even if you just run (symbol) without giving it a key. It's just, every time you... Like a string. If I were to put "Jamon" and then "Jamon", it's the same string. So you would actually end up with... It would be non-unique. So where some library authors might use it as to attach hidden properties to objects because it's like, I'm not overriding some future string that could be added, however unlikely that is, but it's not adding a property to this object that will be... It's hidden, but I have a reference to that symbol so I can then access that again. That can be like, my object, square bracket, then a reference to that symbol that I created will bring up that thing again. So...

Robin Heinze:

If you already know you have a use case for symbols, TypeScript now supports symbols as keys.

Jamon Holmgren:

Exactly, yes.

Robin Heinze:

Otherwise, don't worry too much about it.

Jamon Holmgren:

Don't worry too much about it. It's just not... Yeah. TypeScript. Yes. TypeScript. So yes, it supports that, and also is defaulting to the unknown type in try-catch error variable. So often that's represented with E, catch print CE, that E now is unknown rather than, I assume it was ME before. I actually don't know. I think it was probably ME. So the unknown type can be useful to make sure that you're not using something before you type it, before you say, "This is what this type is." So it'll keep you from doing that. There's also a new setting, which is exact optional property types, if you make a property that is a type of string or whatever as optional, with a question mark. So in my object I have a property which might be "name" and I put question mark, colon, string. The implicit, or the type that actually gets added to it is string or undefined.

Jamon Holmgren:

So you could technically say my object "name, colon, undefined", but you don't really want that. Like you want it to either be not set or set to a string. You don't want it to be set, but too undefined. And just as an aside, undefined's a mess, I don't know why you would...

Robin Heinze:

Yeah. That doesn't... Why is it that not setting it is different...

Jamon Holmgren:

Is different.

Robin Heinze:

...From setting it to undefined? I always thought those were equivalent. I guess they're not.

Jamon Holmgren:

Yeah. And then of course you have null, and by the way, you also have empty, which is like an array thing, sparse arrays. It's a mess. It's a total mess. But yeah, if you have exact optional property types means that you can't set something to undefined in an object.

Robin Heinze:

But you... Yeah. So that's only true if you specify this new config option.

Jamon Holmgren:

And it doesn't come in with strict, by the way. So you'd have to explicitly set it.

Robin Heinze:

Oh, interesting.

Jamon Holmgren:

Okay, so that's four of our items, but you know, we're actually really short on time and there is actually a new segment I want to get to in this episode, so let's just move right past the last few things we had and go right to fan mail. We actually got some fan mail. We have fans, Robin, you know that?

Robin Heinze:

Really?

Jamon Holmgren:

Yeah, I think so.

Robin Heinze:

What are they fans of?

Jamon Holmgren:

I'm assuming the podcast. I don't know. Buzz Elkington. Hey, Buzz. By the way. Thanks for sending in your question. He had listened to the React Native Express episode that we did with Devin. Buzz says, "Another banger with the podcast, React Native Express. I was wondering why a company that seeks senior React Native developers, Infinite Red pushes out beginner React Native podcast content, then my brother said it could be a cultivating move to grow their candidate pool in a field that is in short supply and somewhat intimidating to get started. I see what you're doing is a public service. Is that the right assessment of the purpose of React Native Radio?"

Robin Heinze:

I don't know, Jamon, is it?

Jamon Holmgren:

I think that from the very beginning, Infinite Red has been focused on the community as a whole. The health of the community is a good thing for us, because the more React Native developers there are out there, whether they work for us or not, when they're at other companies just kind of growing the entire ecosystem, as the premier React Native agency out there, we benefit from that. And the React Native Radio was... It was sort of stagnating, in some ways, under the previous management, and we wanted to take it over and they were amenable to that. I think they saw that as well. And we wanted to... I think that having a good podcast available for the React Native community is just a healthy thing for our community. It's good to have React Native content out there, surface these things. Not everybody likes to surf Twitter all the time and try to keep an eye out for new stuff that's happening.

Jamon Holmgren:

So, this is one among many things that we do as part of our media strategy. We obviously have Chain React, which is, a lot of times, focused on beginners. Not always. There's a lot of great advanced content as well, but a lot of people who are React Native-curious will come to Chain React just see what it's all about. And we have workshops there. We have beginner, intermediate, and expert workshops. We put out a lot of blog post content that ranges from beginner to really advanced stuff. The newsletter, we have the Infinite Red community, which helps a lot of beginners and also more advanced as well. So it's just, what's good for React Native is good for Infinite Red, and so obviously the React Native Radio podcast is good for the community, I think.

Jamon Holmgren:

It's also just something, I don't know, I enjoy it. So much fun to do this, and it's been fun to work with you, Robin, on something other than just helping you with maybe a code issue here and there. So I think that's a very awesome side benefit, and I like the sound of my own voice. What can I say?

Robin Heinze:

Yeah. I have really enjoyed doing the podcast for the last, oh gosh, how long has it been now? Eight, nine months? Wow.

Jamon Holmgren:

Somewhere in that range, yeah.

Robin Heinze:

And I think our audience isn't specifically beginners, but we have always strived, even in our open source work, everything, we've always strived to be welcoming and inclusive for beginners. And so we try to keep this podcast not too advanced...

Jamon Holmgren:

Intimidating.

Robin Heinze:

Exactly. Not too intimidating. Advanced enough that we are interesting to a wide audience, but not yeah, like you said, not intimidating.

Jamon Holmgren:

Yeah. And as one listener told me, "Robin's smart as heck, she sure makes up for you." I appreciated that. So there's something for everybody. Yeah, I appreciate the question, Buzz, and thanks for listening. And if you do have any questions for a future fan mail segment, you can send them to @ReactNativeRdio on Twitter. You can also find Robin, @robin_heinze with an E, and I am on Twitter also as @jamonholmgren. As always thanks to our producer and editor, Todd Worth, our transcript and release coordinator, Jed Bartausky, our social media coordinator, Missy Warren, our designer, Justin Huskey. Thanks to the sponsor, Infinite Red. Check us out, infinite.red/reactnative. Special thanks to all of you listening today. Make sure to subscribe, send this to someone who wants to stay on top of React Native news, and we will be doing this again in about six weeks and try to catch up on the latest and greatest news. Reminder, we are hiring. I'm going to keep mentioning this. We are hiring. Go to careers.infinite.red, and we'll see you all next time.

Robin Heinze:

Bye.