Actually, this talk and the next talk by Helena will be talking to you about Apache Spark. Mine is more of an introduction, starting at the Scala Collections API that you all know and love, and talking about how Scala is really a scalable language, you can start from doing collections, transformations on a few items, all the way to distributed big data stuff. And the next talk is more about streaming and kind of like a big data pipeline. They'll both be pretty interesting. All right, well, sorry, you have to bear with the color a little bit. Let me see if we can make that a little better. Let's keep going and hopefully the text will be more readable in subsequent slides. Anyway, so again, my name is Evan Chan. I am the principal engineer at Socrata. And I've been working with Hadoop, Spark, Cassandra, Kafka and various big data systems for a number of years, and that's what I love to do. A little bit about Socrata, I'm very blessed to represent Socrata today. We build software to make open data, public data more accessible to you, the citizens. What does that mean? How many people here are from Seattle? Awesome. Great city. How many people are from San Francisco Bay Area? All right. So both Seattle, San Francisco and various counties in California, they're all like our customers. So we help you guys figure out how your city, your county, your state, the U.S. federal government is spending your money and are they meeting certain goals? Governments nowadays are really into opening up their data. They want citizens to engage because that results in better informed voters and so forth. We also expose really interesting data sets such as how much are medical procedures being charged around the country? Is your doctor being bribed by pharmaceutical companies? And how many free lunches are they getting? That kind of thing. A lot of really awesome stuff. And we also sponsor hackathons. Our entire backend is in Scala. Now a really interesting story. This is true. Last year I was sitting in your chair coming to this conference for the first time.  And I was like, oh, this is really interesting. This is really interesting. This is a company that's using Scala in the backend but is also trying to change the world. And now I'm here working for them. So I want to encourage you guys if you feel like you want to do something really, really interesting in a sense of not only technical but also in terms of helping to change the way that our government works and enable a better country come talk to me or come talk to the rest of us, we're over in that booth. But anyway, enough about me and Socrata. We're here to talk about Scala. Now why do you guys love Scala so much, one or two things? Anybody? Almost Haskell. Almost Haskell, all right. Almost Haskell you can use as many symbols as you want. I guess that's one reason. So I'd like to think that one, some reasons, my favorite reasons are the concurrency, the Java interrupt, you know, functional programming. But I think one really key thing is the collections API. Being able to work with lists and maps and do all kinds of functional transformations on them is pretty powerful. And you don't realize how good it is until you compare it to a lot of other languages, how complete the Scala collections is, and the fact that you can work with both mutable and immutable data structures pretty easily. They're great because it makes working with data a joy. You can easily go from sequential to parallel to distributed. When you talk about Scala, it's scalable language. This is one key thing that you can, the same API as you'll see, you can go from small data sets to doing parallel operations on them to doing, I don't know, like huge data volumes. So let's look at a really simple example, just doing a map on the list. I think everyone is pretty familiar with this, we're having a list of numbers and we're calling the map function and the function is taking the item and multiplying by two and you get back the answer right away. Pretty simple. How does this really work? So the source code here is from the Scala standard library, it's from the trade traversable like, and you can see that there's something called can build from. Basically the first item is that it calls builder and builds a new collection. Then it's going to use a for loop, it's going to go through all the items in the original list and apply this function f of x and append that item to the list and then it gives it back to you and you can see that this is sequential, right? So anyway, that's the Scala source code. Does it have to be sequential? Well actually no, so we think about it mapping is an inherently parallelizable operation, you know, pretty easy to split up and apply the function in parallel. So starting in Scala 2.10, there's this feature called parallel collections. How many of you guys have used or tried out this parallel collections thing? Cool, maybe like a fourth of you. Very convenient, I can just add four characters.par and that turns my list into a par seek or something like that and it gives you back a par seek or actually a par vector and what it does is it does a divide and conquer it will split up the list into a magic number of splits and apply the map algorithm in serial. Speaking of divide and conquer, this is supposed to be an image of ants, alright, you can't really see it, but you know nature has been really good at divide and conquer for a long time. Anyway, what else can be easily parallelized?  What about group by? Group by is a little bit harder, right? You need to actually transfer things back and forth.  So we've gone from single threaded to parallel. What about distributed? So this is where I introduce Apache Spark. How many folks have not heard of Spark? Wow, okay, alright, that's, I'll just go through this really quickly. The audience is probably fairly familiar, but how many people were actually using Spark in their jobs? That's actually pretty good too, kind of. So Apache Spark is a horizontally scalable and memory computation engine. It's like Hadoop, but much better. How is it better? It gives you a significantly better functional Scala API. It has a Ripple, so you can try things out. In terms of productivity, it is like completely different. There's a slide that I didn't bring in, but basically a word count in Hadoop. It's like 60 lines, you know, and you could easily do it in one line. If you want, like, the long one liners we were talking about earlier, if you want nice looking Scala, it's still only like three lines, maybe. And it has a huge amount of momentum right now. It's like probably by far the most active big data project, and one of the most active Apache projects overall. It has just about everyone that's trying to plug their data store or framework or whatever into Spark. And it has a lot of components that are being built on top. So it's not only like map-reduced out batch drops, but there's a streaming component. There's an SQL layer. There's graph algorithms, machine learning. So a lot of really, really neat stuff is being built on top. So let's go back to our example. We want to have a list of items. We want to do some mapping function over it. So this is what a distributed map looks like with Spark. It's pretty much the same code. We'll go into what this means, this RDD thing. But we have a map function. Again, it's the same function. It's underscore times two. I just added a tick to it, which, as you'll see, is necessary to get the results back. But now you can map and filter on pair-to-bytes of data with the exact same syntax. So what is really going on under the hood? So the basic abstraction in Spark is called an RDD, which stands for a resilient distributed data set. And this is basically a distributed immutable collection of items. An RDD is split into partitions. And the rule is that one partition has to fit entirely onto one node. One node can contain multiple partitions, but a partition can never be split amongst nodes. And an RDD is typed just like a standard Scala collection is. So you can have an RDD of int, just like in Scala, you have a seek of int. Functions that return, for example, line input that read from a whole bunch of files will give you, for example, an RDD of string. And if you had something else, for example, like you read from Cassandra, you might get a case class by Acre. So depending on what you're trying to do. So under the hood, this is a little bit hard to see, I apologize. But basically, you have an RDD of numbers. The text in the first boxes read 1, 2, and then n. And what we do is that we produce a new RDD with each item mapped with the mapping function. And this is all just done in parallel. So you can imagine all the different nodes are running the mapping in parallel. So it's pretty easy to understand. So just some notes on terminology. Sorry, go ahead. Is a partition something you can decide up front? And can it change during runtime? That's a good question. So the question was, is the partition decided up front? You, it depends. When you, a lot of functions will give you a default for the number of partitions. For example, like the simple function to parallelize a sequential list, the default is the number of cores that you have, which usually isn't what you want. If you're reading from, say, HDFS or Cassandra, Tadoop has a notion of partitioning based on how many nodes you have, how many blocks in HDFS. So then that gets decided for you. You can, however, after you have an RDD, you can decide to repartition into a different number of partitions if you want. And subsequent operations, usually, some of them will, anything that shuffles over the network, a lot of them will allow you to configure a number of resulting partitions if, yeah, so, yeah. So a Spark worker node, actually, there are two processes, actually, a worker and executor, but that's where the computations are run and the results are data cached. A Spark driver is your application. There isn't any equivalent in Hadoop, but basically it's your main app that actually executes, that has functionality like RDD.map and that kind of thing. So that controls the program flow and executes the steps. And in this case, when we run a tick, that takes the items that have been computed and returns it from the worker nodes to the driver, so the network transfer happens. And Spark will actually take your functions in Scala and serialize them over the network. So one requirement is that mapping functions need to be network serializable. There's a really quick overview of Spark API. So there are some APIs that work within a data set like map filter, group by, sample. There are some joint operators that work across RDDs. There are some actions that will go a little bit more into those that give you results in general and then there's some other optimization. Someone's asking about repartitioning, so for example, there's a repartition function that allows you to change your number of partitions. So this is supposed to be an image of Homer lying down on the sofa with donuts. I love donuts, by the way, how many people have gone to Voodoo Donuts in Portland? So yeah, all right, cool. But for every person that likes them, there's always like some hometown donut shop that they prefer. Anyway, we're talking about laziness in Scala collections and how that applies to Spark. So when we did my list.map, then we turned a new collection right away, right? What about streams and iterators? What happens if we take a list, convert to a stream, and we apply a map to it? We'll see that when we apply a map to a stream, it doesn't give us the values right away. It gives us a new stream where you can actually see that the first value has changed. That gets mapped, but the subsequent values are not. There's still a question mark. So this basically, a stream is lazy, right? A computation is not done until you ask for the results. So in this case, in order to get the result, I actually am converting it to a list. Even when I do a tick on a stream, you still get a new stream and you don't get the result yet. So how does this work under the hood? So this is the implementation of streams map method from the standard library. You can see that it has this line called cons. So what it does is it maps the first elements, but then returns a stream of the tail of the list, which is all the other elements in the stream with this mapping function. So what happens in the lazy collection is that the key is that the tail is not evaluated and instead it remembers the step, the transformation that you applied. So you see it's, what you have is a new object that contains the composition of the function F with the previous stream. And so you can imagine that if you take more and more transformations, you start to have a history of you well of the steps that you took to build up that. But nothing actually happens until you actually evaluate the tail. By the way, does anyone know the difference between streams and iterators? I just threw this in. But both streams and iterators are lazy. Streams memorize the results, so you have to be careful about memory usage. But the key thing is iterators are mutable and have state and you can only use them once. Once you've iterated through it one time, then that's it, right? Then they're done. A stream can be reused. There is also something else called an iterable, which can give you an iterator again and again. So if you need to reuse an iterator, you might want to return an iterable instead. Anyway, slight detour. So what about laziness as it applies to Spark? Well, let's say that I do a map operation. And by the way, let me preface this bit of code with the spark.contact.parallelize. If you don't know Spark, this is the easiest way to, this is the way to take a sequence that you have and convert it into an RDD. So you'll see this a lot. Could be anything like, so there's test data to, I don't know, the list of text files you want to read from or whatever, right? So after spark.contact.parallelize, you get an RDD. And the map is being applied to the RDD. You can see the result of that mapping is that I get back a mapped RDD. I don't get back the mapped results. So what this tells you is that Spark is also lazy. And just like the way that streams work, Spark is also remembering that you did this transformation, a mapping of a function, and it's remembering that in what it calls a lineage. And so Spark will remember every step that you took. So I have a mapped RDD. What am I gonna do with it? So this is where the actions come in. So an action is, for example, counts.  When I do count, that actually forces the work to happen and Spark will actually go through. So let's say that you're reading from Hadoop files. Until you do counts, no IO actually occurs at all. It's only when you do counts or collects that the IO and the transformations all happen. Count is a pretty popular way to force a computation in Spark, by the way. So why is laziness important for Spark? So there's a number of, a lot of reasons. First reason is perhaps that for when you have a huge amount of data, you want to minimize the amount of work that has to be done. If I do a tick, for example, I don't need to go through every IO source and apply my transformation, expensive transformation to every bit of data. I just need to do the minimum necessary to return the first end results. You would use up, you end up using a lot less memory for intermediate results because instead of creating a new RDD at every point, I can apply the composition of a whole bunch of functions at once. And what's more to Spark can optimize and does optimize the execution plan. So if you have a whole bunch of map and filter, map like stages, where the work is all local to a partition, it will combine all of them and execute them together. So Spark will try to optimize things so that it can run as many things together as possible. And lastly, which is a really important reason is that for error recovery, the reason why Spark remembers all of your steps is that if something goes wrong when you're computing, I mean, let's say that you lose a node or you lose part of the data, then the way that Spark recovers some error is that it retraces those steps. So one assumption that Spark makes is that you're starting from a source which is redundants and you can read from again. So for example, I do distribute a file system or something like that. So it can go back and read that source data and recompute the steps to get back your computation. Now, obviously, if you had to read, if you wanted to repeat some calculation and you had to read something from this again and again, this is very expensive. And the key to Spark's speed is actually being able to cache data memory. So there's a cache function. It will save the results of the last bit of data so that you can reuse it again and again. And if we have time, I'll demo this at the very end. And it's like memoization. It gives you one or two orders of magnitude speed up because you can just read from memory. And it is used a lot for iterative algorithms, especially such as linear regression, that kind of thing. This is where you see a really, really huge boost in performance of her due. There are many ways of caching data in Spark. The default one is to memory, but you can actually serialize to memory and disk. You can also use an experimental off heap mode, which is pretty cool if you want to have redundancy and survive worker node failures. And finally, there's a Spark SQL. Some of you might have heard of Shark, which was the old Spark SQL layer, but Spark SQL now is replacing Shark. They're not doing new development on Shark anymore. Spark SQL has a very different kind of caching. The default caching uses serialization like such as Java serialization and it keeps those values of the RDD in memory. Spark SQL actually has a compressed columnar in memory kind of caching that takes values and compresses them using techniques like dictionary compression. And so it uses a lot less memory than something like Java serialization would. And it's a lot faster. It's built for fast SQL queries. Is there a specific mode that you use? I mean, I think it depends on the use case. I mean, if you're using SQL, then obviously the SQL caching makes sense. But for the other ones, it depends on what, like if you prefer, like, for example, replicated as a pretty good strategy, if you don't want to rebuild your data from scratch. Or Tachyon, for that matter. I think especially as more and more people are thinking about multi-tenancy, they want to run multiple applications to create the same set of data, as well as to survive, you know, let's say my worker note runs out of memory or whatever. Then something like Tachyon, which is an off-heap cache for your data, starts to become more and more appealing. So I think there's a lot of work around that area now. Yeah, quick question. That's a good question. So how long does a cached data live? So Spark has a built-in feature called a TTL. So I think by default it's off. I'm not sure what the default is now, but you can configure it. So you can say that I want my data to live for 12 hours. And then after 12 hours is over, Spark will start cleaning up old references and things that it thinks are not being used. So that's how you control how long it lives. So grouping and sorting, this is where it gets pretty interesting. So let's look at how do we do a top K word count in Scala, right?  You know, I want to find out the top five words. So what do we do is we do a group by by itself. This gives me a map of each unique word to all the instances of that word. And I'm going to convert that into a count of each word. Then I'm going to sort it and just take the top five items. I'm sorry. Yeah, yeah, there was a lot of math. So I'm not a math person, so you know that. Yeah, I just like to hack it. So this is how you do it in Spark. It's not that different, but I'll highlight the differences. So first, can you know the first part that parallelize which is loading data? But first I'm taking the words and I'm doing a map to this underscore comma one. I'm basically turning each word into a tuple where I have the first part is the word and the second part is the count of one. And then I'm going to do what is called a group by key, which is a most common way to do grouping in Spark where I take a tuple and the first part of that is considered a key. And I'm going to move all of the instances of that word on the same note. Then I'm going to convert this tuple of the word and all the instances into a count like before and I'm going to sort it and do a tick. It's roughly similar, you know, just slightly different with the group by key. This is a little bit hard to see because of the color flip, but what is actually happening is that, so the first stage is a map from the word to the tuple, where you see apple comma one. Then we do a network, a distributed shuffle with the group by, where all the instances of apple, for example, appear on the same node. Then we're doing a sort because we want to know what the top items are. So we're sorting by the second parameter, which is another network shuffle. Then we finally use the tick to take the first items. Can we do better though? And the answer is yes. Oh, actually, so before that, just to highlight, you can't see the colors, but all the boxes on the left are happening on the worker node and only when you get the results using tick does it transfer to the driver. So can we do better than the first method? The answer is yes. So what we do this time is that we use the method called top, which Spark has specifically for doing this kind of thing. Top avoids the global sorting of items by taking the top items, K items from each node and then combining them at the driver. And the reason why you can do this for a top distributed top K is because you can do this because the items are unique on each node. If they weren't unique, you wouldn't be able to use this technique because you can't guarantee that you would be able to get the top K items if they're duplicates. And there's a function called a reduce by key, which is basically a group by key plus a local reduce, which is pretty convenient. Now let's move to another application of Spark, which is ETL. So let's say that I want to read a whole bunch of lines from, so this is one of our data sets, it's called Chicago crimes data. My co-worker's probably rolling their eyes. So let's say we want to extract a few fields filtered by the date and take a couple items. So this is pretty similar to the examples we've seen before, we're splitting the input line, mapping it into a tuple, et cetera, et cetera. Whatever, you have a huge file. Well, we can try parallelizing it. So we take this, so let's say you break up the file into multiple chunks, and you can do one to four dot par. This gives me a parallel, a collection of numbers. And I'm gonna flat map that into like IO.source. Let me, I can try scrolling this a little bit. Well, all this is this, yeah. So this is just taking IO.source.fromfile.getlines and converting that into one big source that's extreme, but this is still done in parallel. So this is cool, this helps it be a little faster. Let's say that my data is really big, it's in like the, in a gigabytes. So let's do this in Spark. Let's say that I load my data into S3 or XGFS. I can use the text file method of Spark context, pass it a URL. This is a, that's a local one, but it was XGFS, it would probably, you know, if you had XGFS enabled, it would, this would look into XGFS at that path, or you can preface it with S3 for S3, Spark, or whatever. And the rest of the code is actually exactly the same as my Scala local example. All four lines of map filter and the take is exactly the same, which is pretty cool. Now I have distributed ETL, and the only change is how I input my code. One note that I'll make is that if, if let's say that you want to read from data source that is not Hadoop or S3 or whatever, let's say you want to read from Mongo or whatever, right? Then I can use this technique of doing parallelize and loading a list of, for example, keys in Mongo. And then I can go and read those documents out and process them in parallel. So it's really similar, just that you don't have a built-in function called text file. What about side effects? So far we've been talking a lot about transformations. Let's say that I want to write my transform data out to a database, right? So then that's where the for each comes in. I can do my rdd.forEach, and that takes each data, piece of data, and writes it to a database. There's a similar method that allow you to iterate over all the items in a partition. If you want more efficient, let's say I want to write all the items in one partition to this, get one, so you can do that too. So pretty cool, so far we talked about, we take a Scala collection, we can, you know how to do it locally, and with very little effort, we see we can apply that to batch file competitions in Spark. I'm going to talk about Spark Streaming a little bit because you'll find out you can use very similar API and apply to streaming data, which is pretty cool. Spark Streaming is Spark but running on streams of data and it applies micro-batches. So it divides, it splits up the input stream into very small bits of data, let's say one second's worth or you can control what that interval is. And it runs a little Spark execution on those little batches and you can write it to different data sources. So just to give you a flavor of what that looks like, Nick's speaker, Helena, will go into this in a lot more depth. I have an SSC, which is Spark Streaming Context, and I'm going to read a bunch of, this is again the word count example that we know and love. We're going to read it from a socket. I'm going to take the lines and which is called a DStream for distributed stream. And I'm going to apply a flat map over it and split each line into words. So now I got a stream of words and then I'm going to apply the map function again and there's that thing that you are really familiar with by now, like converting the word into a tuple of the word and account. And I'm going to do this reduce by key that you've also seen. So this is pretty much the same code as the batch example, but now I'm applying it to streams of data. And one thing to think about is that what does a, the reduce by key is really a group by, right? What does the group by mean on a stream, right? If I just had a Scala iterator over lines of text and I applied group by, that wouldn't really work in a streaming fashion or it would be like, it's really unclear what that means, right? Because typically like in order to do a group by, you need to know the whole set of data. But in this case it's pretty easy to understand, it is doing the group by on each chunk of input data and writing it out. So a couple of tips on Spark. Definitely play around with the repo. This is a really, really great way to get started. Just like you might have played with the repo and Scala to get started, you can do the same thing in Spark and mix it very easy to explore. Remember that transformations are lazy.  You want to limit the number of expensive grouping and sorting operations? Definitely explore the many sub-components, yeah. I'm wondering, so I assume the repo is not the standard repo, it's the repo's particular as far. It's a modified standard Scala repo. So it's not just adding the library to the class, basically, it's doing other stuff. What other stuff do you have? As far as I know, I've actually looked in the source code for that before, but details are a little fuzzy. I know it tries to make sure that the code that you have is actually properly serialized to the remote destination. So I know there's some class loader stuff in there. I don't remember what else, but to be honest, I've been able to get, what I do sometimes is so I have a separate project called the Spark Job Server, which provides a rest interface. And a lot of times, instead of loading the building Spark, which takes a long time, and launching SparkShell locally, I will actually launch SPD console from one of my other projects that pulls in Spark as a dependency, and you can actually do the same stuff using SPD console. So it's actually pretty easy. The only thing is that you need to create the SparkConnect yourself, whereas the SparkShell will create it for you. It's not a big deal. That's just a few lines of code. Yeah, or you can even put it into SPD config as a, I don't know, there's something where you can tell it to execute things at the beginning of a show. I will definitely explore the many some components. Spark Streaming, MLlib, GraphX, Spark SQL, because one of the coolest things about Spark, and I think what makes it unique is that in the old days, if you, let's say that you have Hadoop, you run a map of your job, then you have to run another tool, let's say Maho, to do machine learning, right? So another set of tools, you might do some conversion, and this is more things to manage. In Spark, I can seamlessly, I can load data in, run some Scala API, run Spark SQL, take the results of that, apply logistic regression to it. It's very seamless, which is, I think, very, very powerful. We'll definitely take time to understand caching because it has a huge impact on your performance as well as your design for resiliency and this kind of thing. And I will definitely check out the many integrations that makes your lives much easier. There's the Spark Cassandra connector, connecting Cassandra, there's an elastic search connector, and I think that people are writing all sorts of different connectors for whatever their thing is. So in conclusion, if you kind of flat map it, then you can spark it, so go try it. Actually, hold on one second, do I have a minute for a demo? Couple minutes, cool. So let's see if this color thing will work or not. This is, well, okay. I don't really know if this will work, but. Oh, okay, hold on for one minute. I'll have to blow this up a lot to make this work. Oh, no, that's the wrong one. Can't really see my cursor. All right, cool. Is that kind of readable? Oh, it's too low. Well, okay, all right. Here, how about that? All right, all right, all right. We'll move this, okay, there we go. Yeah, all right. So everyone can see this. Basically what I've done is, this is basically the example that I had on the screen before. I've taken a text file that I have and done a bunch of maps and filters and GTO operations.  This doesn't do anything, right? So now what I do is I do red zero dot, let's say that I want to count the number of distinct crime types. So I do distinct and I have to do a collect. Without the collect, it won't actually execute. So now what it does is it reads from disk and it does the processing and it's doing this in local mode, which is a bunch of different threads. And I see the depressing list of crime types. This takes about 6.5 seconds, which is cool. But let's see what effect caching has. So instead of just, so what happens if you run this again is that this is gonna read from disk again. So this is again gonna take about, well this took a little faster, but it will take a bit longer. But let's say that I cached the results. So now I have a cached RDD, res3, and I do a distinct dot collect. The first time it will still take a while because it has to do the computation from disk, but then it's gonna cache the result or last step in memory as it's doing so. So again, this takes three seconds. But if I was to run this again, you see that this is almost instant. This is 0.1 seconds. So this is like 30 times faster. And if I keep doing this, it is instant. So you see that now it is reading data from the cache instead of from disk. Can you compose those cached things and add another calculation to the end of something that was cached? Yeah, so I can do like res3.  I don't know, let's say that I want to add a bracket to the thing or something weird. I can't think of a better example right now and I do collect. Yeah, so I can do that and it will be equally fast. Basically you can think of the cache as a point from which I can like add branches of a tree and all those branches will execute pretty fast. So anything else you want to do? Yeah, so you definitely have to watch your memory usage. You can definitely blow up the heap pretty easily. Spark does give you an API for assessing your memory usage though. So you can use it to assess how much free space you have and that kind of thing. Yeah, so you can un-persist, I can un-persist my data. I think there's a un-persist, I think. Well, okay, I don't quite remember what it is, but there's some method that you can use to free your, maybe it's uncache. Yeah, I don't quite remember what it is, but. Yeah, well if you guys have any other questions, I'd be happy to take questions in the back.


I tried to, I did something wrong because it's vertical instead of horizontal, but I'm not gonna fiddle with it because it's time for a live. And I'm missing with too many things at one time. I'm over it, time to live. So y'all, as soon as I get you on my this, will be able to see what you have to say. If I'm even live, I don't even know. If I did something wrong. No, there's people.  One second, let me figure out what's happening because I'm not seeing the live. But anyways, here it is. Here we are. Here I am. Here you are. What's up y'all? And can you hear me okay? I hope so. I hope I don't sound too much like toad. Oops, I'm not gonna do that yet. So today I'm going to resin this tumbler I had, resented it before, but it didn't look good. So I'm going to do it again. And I'm gonna use some of these new color passion glitters. I wish you guys could see the color flip clearly, but it goes from, let me turn the flash off, that'll probably help. So if you don't know, chameleon colors, chameleon colors change according to the light source. And so if you have a flash on that's direct, you'll never see a color change because it's always gonna have the same light source, whereas if you turn the flash off and different light can hit it from different directions, you can see the color change. So this one is the diva from color passion and it goes from like a lavendary pinky, purpley, periwinkle to a green. Are you gonna show me something? The vertical, there you go. That's the diva. So y'all pay attention because I'm gonna ask you which one I write, Kat, same. I'm gonna ask you which one you think I should do. This is mosaic and it looks like it's a lot of the different kinds of chameleon flake in one bag because it doesn't shift altogether like the diva. It goes from like, if you see it's like all of it from this light source is pinky, purple and all of it up here is like teally green and it shifts together. Whereas this mosaic, the colors shift but not altogether. So I feel like this is probably like the leftovers from a whole bunch of glitters, like it's a mod podge. Maybe that's why it's called mosaic. That would make sense. So that one and then also unicorn. Usually I would go straight to mermaid but I want y'all's opinion. This is just a blue, purple, green without Sue, Taylor, DG, Clara. Yeah, Jerry, they just updated the app on people's phones and I can't switch it to horizontal after I hit the live. So I can't change it at this point but I'll know better for next time. I'm sorry about that. I know if you're watching it on TV that it's not the most ideal thing but I'll fix it. Okay, so if you want me to do the unicorn one, put the number one in the chat. If you want me to do diva, put number two in the chat. If you want mosaic, put number three and if you want, I can go get mermaid and you guys can see it. Ooh, puppy cam telling it back. I'm running, you guys running. Mermaid, check. Oh, I also have oceanic. You're not supposed to chase me, you're supposed to stay on camera for all the people's ma'am. Okay, so I also have mermaid which is a purple aqua shift. All these you can find on my website by the way if you want to get some of your very own artisttill.com. So you could do this number four for mermaid and then I went ahead and grabbed oceanic which is a green, blue color flip and you can do five for that. So one was diva. Two was unicorn. Three was mosaic. Four was mermaid. And five was oceanic. So vote now or forever hold your peace. How did we go from heat wave to leg warmers? I've been cold since I've had a cold. So yeah, thank you Kathy. I am feeling a little bit better. Change to five. So I'm seeing mostly four or fives. So I think everybody chose four or five which is understandable. There's some of my favorites but all right you guys I need you to re-vote four and five. Mermaid is like a periwinkle lavender to aqua and oceanic is green to blue. Four and five and four and five. Almost all fives. Okay. I'm also doing a giveaway. Yes.  I'm gonna split it up into three bags and we're gonna do giveaway for those at the end of this video. If you guys want in on that giveaway, stay tuned Jeff if you can help me figure out what question I'm gonna ask. I need to get away three goody bags. One, two, three, four, five, six, seven, seven fives, one, two, three, four. Four fives and seven fives. Okay. So we're going with oceanic. Okay. So if you've never done a tumbler before I'm gonna ask questions at the end of the video. So if you want to help me come up with questions if you read. So before this video, I had already resumed this piece. You can tell there's chunks, scrapes, scraps, or scratches. Little chips though just needed to be redone. So I sanded it and painted it black because any chameleon anything looks better with a black background. I'm bringing you guys over here because I'm gonna use this spray. We always spray over a trash can if we're in the house because this stuff is super, super sticky. And if it lands on the floor, you're gonna be sticking to it too. So this is by 3M and it's super 77 multi-purpose adhesive. And it comes out kind of wild. So I always do a couple of test sprays. And it actually comes out like a straight line almost. You probably can't see that it's very vertical. And so I just turn it to the side and give my piece of good coating. I taped the rim because while it is said that resin can't hurt you when it's not, like after it's fully cured, it's food safe at that point. We don't take any risks over here. I don't wanna get sued. And so I always will advise on the safe side. And so therefore we tape the rim. Now my genius self is gonna figure out how to put this on here.  So I couldn't do that. Ta-da, nice slow turn. So I use the spray adhesive on this piece and you can mix the glitter into resin and use that as, you know, a layer, but personally I like this spray adhesive better because I don't have to waste that much resin and I can make the little particles lay flat. Whereas if I mix it into the resin, I'm gonna have an issue with some bits standing up, some bits, like I'm gonna have to end up standing a lot of it off. So to avoid that, I just do the spray adhesive. Yeah, like the photo mounts not gonna work as well. Industrial. Hope you guys heard all of what Jeff was saying, but let me know if he didn't, I will reiterate because I have my headphone in and I don't know. All right. You guys, this is gonna look so rad. So I'm going to kind of run my hand across the top and knock off any bits that are sticking upright or any loose bits, because if you have any that is super loose when you go to add your resin and you're kind of moving your resin around, I can actually dislodge, I think that's a word, and make your glitter stick upright. And so just make sure you knock off all of the excess. I'm gonna take this and save it for later because the waste knot we want not. She sent me a picture of the top and set up to you. I would imagine reds, yellows, sienna's, whites, but that's colors that are all, if you guys are gonna paint a crawfish, what colors would you use? A crawfish? Yeah, it's a crawfish crackin' table and that barrel is the base. Okay, so now that we have our this and it looks so good, so good in fact that I need to bring you down to show you. And with a coat of resin on it, it's gonna be extra amazing. Okay, so now that we have that, I'm going to mix up a little bit of resin and the type of resin that you wanna use to do tumblers is kind of specific. You don't wanna use a craft resin because it's not gonna be as durable. Today, I'm actually gonna be using the Illumilite bubs. Come here, come here. I'm gonna be using the Illumilite's amazing clear quick epoxy. It has all the durability of, let him be down there, it has all the durability of probably a bone. Yeah, so like I said a couple times, it has all the durability of the art coat but with a two hour cure time, which is great when you're trying to get pieces done really fast because it also has not only the heat resistance and durability, but it also has the UV resistance. So it's kind of amazing. And you only need about an ounce, not more than an ounce, especially if you're working in this quantity. Ooh, I've bled that out pretty good. It's like exactly perfect. Y'all, the little wins, you gotta count the little wins. Okay, I usually just use medicine cups when I'm working in small amounts. This is actually gonna be too much rather than that. Her bone thing, yeah, oh yeah. So like all resins, this resin needs to be fully incorporated. It's a one to one. So I'm just going to mix it up. When you're working in small amounts like this, you don't have to mix for a full three minutes, even though I would be okay with you just regarding what I just said, because I don't want you guys to come back at me later and say it. I mixed for what I thought was enough and it wasn't enough. So if you have not worked with resin for that long and you're not sure what a fully incorporated resin looks like, then just mix it for the three minutes and make sure you scrape the sides and the bottom of your cup and your stir stick so that you can make sure everything's fully incorporated. This is gonna be enough resin for like two tumblers. Whoops. And so you can find this glitter on my website at artisttilldeath.com. And if you wanna get your hands on some of this resin, the Illumilite Amazing Quick Coat, you can get it from Illumilite and use my code YALL13, YALL15, one of those. It'll be in the description box under this video. And it seems like I'll be good enough to finish my voiceovers for our Crime and Craft. So I can finish the voiceovers and get that video edited completely and have it posted by this coming Wednesday. I'm so sorry that it's been delayed so long, but it wouldn't have been very fun for everyone to sit there and listen to me snuffle for an hour. RK3 was out of stock with Amazing Quick Coat. You can also go to illumilite.com for the Amazing Quick Coat. I would also say only work in small amounts with this stuff unless you're experienced because it has only about a 15, 20 minute working time and it does not play. Art Coat says it has about an hour working time. I've worked it up to three hours. This is the Amazing Quick Coat. I'm still looking forward to Crime and Craft as well. I'm over the moon with how many people are interested in that series and I know it's gonna be fully amazing. I'm also trying to incorporate other creators in it as well. So yeah, okay. So after you have your, hold on. Let me find out where my, okay. So I'm letting my wheel run to where the tape when I pull it is gonna pull in the direction that it's not going. That's a way by the way to say it. So when I wanna pull the tape, I'm just gonna hold onto this and let the turn pull the tape for me. So I don't have to worry about stopping it to pull the tape because if it was going in the other direction. If you have a turner, if you stop it and start it back up, it usually reverses.  So make sure that you have your tape in the opposite direction of how your wheel is spinning so you can easily pull your tape off.  And some people will apply their resin with like a spatula or a stick. I am not opposed to either of those methods but I find that I do the best with just my hands. That way I can feel if some of the glitters popping up there's anything I need to correct. I can usually do this and I'm not getting a tool dirty. Time is money, you guys. Okay, when you do this, don't neglect the base of your cup. Some people leave it completely blank, which is fine but if you wanna do that, you should tape it off and make sure you come all the way up to the rim. You can even go over the rim because you have it taped and for this particular resin, I'm only going to let it sit with the tape on it for maybe 30 minutes before I pull the tape. The different working times for the different kinds of resin is gonna be different. So whatever your open time is, I guess after about a third of it is used up, then go ahead and pull your tape. You also don't want too thin of a coat of resin so because I have it mixed up and it's a very fast-setting epoxy, I'm going to just put it all on here but definitely don't waste your resin. Like, yeah, if you put too much resin on tumbler as it's spinning, it's just gonna kind of collect in this bottom area and drip off, especially after you start heating it because when you heat resin, you're thinning the resin. It is, but since I have it mixed up, I wanna just put it on there because the only thing, I mean, it's bad when you don't have enough resin on your piece because then you end up with divots. So since I have it mixed up and I don't have anything else to put it on and I don't have the time to prep anything else, I'm going to just put it all on here. I'm also running my finger down the lip of the piece just to ensure that it's rolled all the way over that rim. All right, so we have it fully coated. I don't think I have anything sticking up but this is the moment where you can do any kind of like fixing to that. So I'm gonna just stand like on the side of it and look at like the horizon of my piece and see if anything's poking out or if I have any raw spots. A lot of times it takes moving to a different angle. So the light catches a different way for you to see if you need to fix anything. Looks like we're good. So I'm gonna hit it with just a little bit of heat and a tip so you don't add too much heat is to see where I have my little tail of tape where I pulled up. I'm gonna wait till that comes around and then just heat it until I get back to the tape. That way I'm not questioning whether I hit that area yet and then inadvertently adding too much heat to the piece and then all my resin kind of melts off and don't forget to heat the bottom of it. So now that's going to level off and do awesome things. Right now it's kind of dimply as it's starting to self level that little bit folded up on me, but we got it. And so yeah, I'm gonna let this spin for, I need to hit that with some heat. So this is a two hour cure epoxy. See, I hit it with a little bit of heat and you can see that little area moving. So it's really important not to overheat your resin because when you heat it, you're thinning it and thin resin likes to run off of whatever it is that you want it to stay on. So little heat is better. Yeah, I agree. I'll do another one in white. I'm not gonna do it today because I don't wanna push it with my voice and not to be able to finish my criming craft voiceover. I'm gonna turn the flash off so that you can walk around it and show how it looks with different light sources if you want to. Fingers are the best for me. I see you Claire, I see you. Hi, Shannon Marie. Glitter's getting banned in Europe. I'm devastated, my heart needs glitter. So I hear that they're releasing a more eco-friendly glitter. I don't know how that is. I don't know where that is. I don't know who that is, but that's the word. Yeah, eco glitter. Plant-based glitter. I wonder if they're gonna have chameleon plant-based glitter, because chameleons move. They ban everything plastic here. Straws, now glitter. Oh, it's tough when it affects business. Okay, you guys. I'm going to finish putting out orders. If you're interested in this particular glitter, the name of it is Oceanic, and it is a green to blue color flip. If you wanna try out the other ones that I showed you, the names of them are Mermaid, which is a lavender. Actually, I'm gonna turn the flash off and show you. Cause of the same reasons I said earlier. So aqua to purple. Funfetti, I feel like I would have called this, but it is mosaic. Unicorn, which looks like just a party in a bag. Diva, which also looks fun. Very reminiscent of the mermaid. And the Oceanic. I hope you guys give all of these a try. I hope you make a tumbler. When I pull the tape, I will create a short, if you wanna see, sorry, how this ends up. Yeah, I hope to see you guys in Monday's live. Oh, giveaway questions. What, did you, no? Okay, bag number one, hold on. Hold on, hold on. Let me figure out how to do, yeah. All right, hold on people, hold on, hold on. Needed a pen, so I don't, I don't know. I'm gonna do, I think a couple questions out of the feed today. And then an OG question. Okay, I have my notepad. Yeah, it is the leftovers that mess with the environment. So, I can only go off of the first person I see in my feed. So, I hope that's you, but if it's not you, then I'm sorry, but be ready. Yeah, it does. What giveaway? So, I had a subscriber tell me that she's having to downsize her art materials. And so, she sent a lot of them to me. Many of them are unopened, many of them are lightly used. And some of them are very OG. If you've always wanted to try the base tint from Stone Coat, there's a brand new one in there. And so, okay, so I'm gonna give away some stuff. I'm gonna put three bags together. I'm just gonna split what's in there up into three bags, evenly and just send them out to three people. So, please don't stress about my bandages. It's because of the bug bites and I will mess with them if I don't cover them. So, question one, what color glitter did I use today? What was the name of it? I wanna have one for the people that are new and just came in. Julie Honaker, got you. Toothpaste tastes the swelling and itch away from bites. So, they don't really itch anymore, but I'm a girl and I'll mess with it whether it itches or not. So, I had to protect myself from myself. Okay, Julie got you, first question. Now, Julie, since you won one, don't take all of it from the other peoples. I'm gonna show you one of my pups and you tell me what their name is. This one. Well, I wanna reward the people that have been here for a while. Kathy Rath, got you. And the other one, I love that all of you guys know my baby's names. Don't worry, Kat, I'm gonna do another one from like this feed. I have to figure out how to word it. Actually, what color did I base paint this tumbler before I put the glitter on it?  Well, you won one. Well, congratulations, Kathy. I can tell you, Kathy Carr, got you. Ooh, I spelled your name with a K. All right, I got you guys. If you ordered from my fall sale because of my sickness, I haven't been able to wash my hair or send out those, but I got them all finished, edged up, flood-coated and they will start going out. I'll start packaging tomorrow and I'll have some of them sent tomorrow. Some of them will have to go out Monday. But I will be doing another giveaway on Monday's live feed. So make sure you're here at sixth central for the next giveaway. I still have more paints that weren't in this box. I have them in another box that I will be giving out on Monday at sixth central.  If you've ordered from, sorry, it's just a weird tickle that is not very productive. If you've ordered from me, then I have your address unless you have moved. I know Kathy, Kathy and Julie have all ordered from me. So send me a message. If you have a new address, it's the same address you ordered from me before, then I can just reference it. You don't have to do anything at all. Yeah, I got your addresses this then. Can we do something? Lag, maybe pick a number? Yeah, Kat, we can absolutely do pick a number. Absolutely. I'll have a random number generator and we'll do closest to the number for the giveaways for the next one. How about that? Wi-Fi routers are very important too. So thank you, Jerry. I will end up being better. What's up, Boo-Berry? That is such a great name. Answers given before even heard questions. Sorry. So thank you guys for coming in and watching the video today. I will be pulling the tape on this and I'll have it posted within an hour unless I forget, which could happen. And then I'll just have to heat it and remove the tape, which would also make great informational content for you guys. But hi, Carrie. Right, Kat, I think about the cereal every time. My pleasure, Taylor. If you guys have any requests for process videos or is there anything you guys need help figuring out, working out, if you have problems with resin, leave me a comment down in the description box, not in the live chat, because I may not see it, but leave me a comment down in the description box under this video and I'm happy to do a video addressing your guys' concerns or issues with epoxy. And I hope you have an awesome evening. I will be shipping these out in the morning because I'm gonna take some microphone and go to bed. But I hope you guys have an amazing evening, amazing weekend, and be kind to one another because you never know what someone's going through and I always remember we do the test, you don't have to. And I can't work my hands. I just got in five cases of just resin, so that will be a lot of my tomorrow. But if you haven't subscribed to my website, do so because I send out discount codes and restock emails. As essentially, that's all the things I email people for is restock announcements and when I have a big sale. And both will be going out tomorrow when I get all that into inventory. Can you do on on how to make paste? So Kat, the thing about paste is, I don't know, I haven't narrowed down a specific binder that's in paste. There are a lot of people that say just put a mica into part A and let me tell you what that does. That just puts a little bit more part A into your piece. That does not a paste make. It makes mica into a paste consistency, but it doesn't make it a paste in terms of the specific reactions that paste give in resin as opposed to just a mica.  But yeah, I will figure out how to make paste. Eventually I have a lot of tests running. Unfortunately, it's largely proprietary from the main manufacturers. But yeah, is that your favorite resin? Jerry for doing tumblers, it is my favorite resin because it cures in two hours. So if I'm doing something that I want to do a lot of layers on, so sorry. I'm gonna do something that I wanna do a lot of layers on. Having a two hour cure resin is amazing because the only other resin that I would like to use for this because it has the durability and the heat resistance is the art coat, but that takes 24 hours to do between the layers, so that's not feasible. For example, when I did 72 tumblers for our wedding, that would have taken a year. So yeah, it just made gum and didn't do anything when you just mixed part A into, yeah. So many people say it and I get that question probably once a week if you can make your own paste by just putting part A into mica. You can make your own part A and mica mix is essentially my answer. But yeah, I'm sorry it's buffering. Wow, I am just fully broke out because of my cold. Anyways, I didn't know it was buffering, I'm so sorry. Hopefully it's no longer buffering. You're looking at my wedding tumbler now, TG. Oh, thank you. Bye, Sue, I'm so sorry about the buffering. My favorite Turner is actually a six unit Turner that I let my friend, Tressa, borrow so I can't show it to you. This little pink one was like $14 on Amazon when I got it. They didn't send me a Turner. The sixth Turner is my favorite. Essentially any Turner that will switch directions and doesn't make you bolt on the this.  The ones that don't have this screw and bolt here and just have doesn't extra long insert pole for this or it has just a clamp, like my six cup Turner does. It's a lot easier, sorry, sorry, sorry. The, my six cup Turner doesn't have this. And so for example, when I was doing the spray adhesive and when I was painting it black, I could just take the whole wand off and do everything I needed to it. And so that makes it a lot easier. So I would recommend, I think I have them listed in my Amazon link down under this video, but essentially anything that I can reverse the direction and that I can take the wand off is my favorite cup Turner. Those are the two things that are, I feel like important. You got your electric resister today. I love that thing. Okay. I'm going to try to rest my voice so I can do the voiceover this weekend and I have to be amped up to do inventory tomorrow because five cases of just resin just came in. I'm so excited. I have been waiting for another shipment of just resin for a couple of minutes and it wasn't even supposed to get here till 12. I mean, 16.  I will post this video if you're interested, check out my shorts later and thank you, TG. I'm going to go get some rest for sure, but yeah, be kind to one another because you never know what something's going through and always remember, we do the test. So you don't have to. I want to see you guys in the next video. Yeah. So bye. So awkward that I have to get up and come all the way over here to end the feed. Boop.


Our first question is from Heather from California. Hey, Heather, how can we help you out? I saw, how's it going? Good, how are you? I recently found out I have hypothyroidism and I wanted to get your guys' thoughts on natural interventions versus like synthetic hormones and pharmaceutical treatments. Just wanted to hear your thoughts on it. Okay, so you got diagnosed by a doctor that you're not? Yes, correct. Okay, and to be clear, you said hypo, not enough thyroid. Hypo, yes. Okay, so obviously first off, I'm not a doctor. I've just been a trainer for a long time. I've worked with a lot of people. I've worked with a lot of functional medicine practitioners. So I'll comment from that position. And by the way, did you get tested for antibodies or anything else in relation to your thyroid? Correct, correct. And this has been a continual testing probably over the last like nine months or so. Okay, so functional medicine practitioners sometimes will have somebody do elimination diet. They may recommend supplements like ashwagandha. But here's the thing, and I also worked with a lot of doctors and I would talk to them often about thyroid issues. Hypothyroidism, if it's just too little thyroid, is a pretty, from a Western medicine standpoint, pretty easy to fix situation. You just take thyroid medication. The challenge becomes when you're taking the thyroid is figuring out the right amount for you. Cause oftentimes you'll start it and then you'll get the effects of feeling like you have too much or too little. This process can take, you know, six months to a year to really figure out the right dose. But aside from that, it's a pretty easy fix and you don't wanna go too long with too little thyroid because it's pretty bad for your health and your overall quality of life is you probably already experienced low energy, slow metabolism, that kind of stuff. How are stimulants going to affect her? Like caffeine and things like that, pre-workout. Typically someone who's hypothyroidism, that's a good question too. I would assume you probably have been trying to self-medicate with a lot of caffeine. I try to stay away from caffeine as much as possible but there were some times when I was feeling like extra lethargic and definitely was doing a lot more coffee. I tried not to break like coffee after 1 p.m. But I was starting to do it like three o'clock in the afternoon because I was just dragging some days. Yeah, by any chance did you practice a ketogenic or a really low carb diet for a long time? No, I did not. I've never been like vegan vegetarian or anything like that either because I know sometimes like B12 deficiency can be a part of this. Yeah, and in low, like keto diets practice for long periods of times in women sometimes will show up with thyroid issues. That's why I asked that question. The best thing I can recommend is to follow your doctor's advice and to train appropriately. So you're gonna have to kind of listen to your body which means you might not be able to train very intensely or very often because your energy is probably not gonna be great until you get the right amount of thyroid. You also, there's different types of medications that you can work with when it comes to your thyroid. So, you know, synthroid is I think the most common thyroid medication and then you can do, you know, like, I believe they do like bioidentical type, thyroid type stuff. So, you know, you can explore that kind of stuff but, you know, from a diet and exercise standpoint it's tough because you don't wanna go too long with low thyroid. It really affects your quality of life in a negative way. I'm sure you've probably experienced. Yeah, yeah, honestly it was a pretty big decline in my health. I'm a healthy person overall. I have a degree in kinesiology, sports medicine and nutrition and I'm also a personal trainer. So like I take care of my body really well and I started getting some cues and went to my doctor right away and we've been kind of figuring out over the last few months what's been going on with me. That's cool. And were you noticing the brain fog, like the lack of being able to concentrate that kind of stuff? Yeah, totally. I'm one to have a really good memory and I was really forgetting stuff. It was really bad and I was like, is this just me aging, you know? And then it was, but I could definitely tell something was off. Did you have any kids by chance? Just curious. No. Okay. What's the training protocol look like? How are you training right now? I am doing, I'm actually doing MAPS anabolic right now. Okay, that's probably, yeah, I would say that's probably the perfect program for you right now. Putting myself in three days a week, I think is what's kind of just fitting in with my energy levels right now because before I was training like more like four or five times a week and I was basically wearing myself in at that point. Yeah. I mean, when it comes to hormones, here's the deal. You know, you can do things naturally to try to balance out hormones, but in certain cases, the low amounts of hormones themselves pose a greater risk to your health. So like, you know, men with low testosterone, for example, they can try raising their testosterone naturally, sometimes they're successful, but if they're not, then taking testosterone is better for their health than saying, I just want to be, you know, natural type of deal. So thyroid is one of those and it's, you know, from what I understand from the hormone doctors I've worked with and trained, you know, they're like, look, this is one that you can just take the thyroid, not a big deal and it makes a tremendous improvement in the person's health and quality of life. It's an area I've never messed with. I mean, I've had lots of clients and it's just one of those ones that they just, they take the medication and I've worked around it with the doctor. I've never tried to do anything holistically to change it. Yeah. So I hope that helps. Yeah, thank you. I just wanted your guys' input because I've heard a lot of stuff and I've researched myself. So Sal, Adam, Justin and Doug, thank you so much. I really appreciate you taking my question. You're welcome. Thank you. All right, take care guys. Yeah, that one's a bit over my pay grade because I had a lot of clients that had thyroid issues but it wasn't something that I ever messed with. It was something that whatever your doctor is telling you as far as medication we're gonna follow. I know little things like the question I was asking with caffeine, how hard she's training, like those types of adjustments I would know to make. But as far as, you know, when you're starting, when you get into hormones, it's not something that I feel like that I can really control very much. I've been dealing with this quite a bit with Courtney, you know, with her thyroid and just trying to get the medication like you had mentioned with just getting that right, the right dose. It takes a while and I think that it's frustrating because, you know, you have to actually wait and be patient for a while before it all kind of like balances out. But once it does, it's pretty dramatic, you know, what kind of happens. Oh dude, it's, you know, that's why I asked her about antibodies. Like sometimes people will have like autoimmune reactions to their own thyroid and this will cause them to have symptoms of low thyroid, but they're producing adequate thyroid hormone. It's just they have all these antibodies. So how Hashimoto's is an example of something like that. In those cases, some, from my experience, sometimes holistic measures can make a tremendous improvement by helping your body's own immune system regulate itself better. Yeah, but what do you mean by holistic measures? You mean like cutting out maybe inflammatory foods, reducing the intensity of training, maybe cutting out caffeine and stimulants. Yeah, I wouldn't know where else to go. Looking at food intolerances, SIBO sometimes can cause issues like that. So treating SIBO. But I mean, if you just have low thyroid, you know, okay, and I totally respect it when people want to do things on their own and naturally. Give it a little bit of time. If it's not working, take the hormone because having low thyroid is not good for you. It's just not good for your health at all. And then later on, if she, you know, Justin asked if she had any kids, she said no, if she wanted to have kids, if she was pregnant with low thyroid, that can cause major problems for the baby as well.  If it's low, your quality of life is just terrible. Well, especially when you're talking about someone like that, like all the questions we're asking, I mean, she obviously knows what she's doing and she's researched a little bit herself and she's taking care of herself health-wise. So I didn't see any like obvious things like, oh, I'm abusing caffeine or I'm training seven days a week, super intense or marathon running or anything that I thought that might be throwing her hormones off. She sounds like she's got pretty good balance already.