The form may not be in your robot. Who remembers La Petit Chatebelade, that French show from the 2000s? I do, though I doubt many others do. It was very obscure, and I could tell why as it didn't have a wide appeal. Earing from October to December 2008, the show was very short-lived and consisted of 10 episodes in total. It's no wonder it went under the radar, but I don't know if I'm the only one who saw it. The show is an odd live-action show, featuring a young boy who wore a black tapir headband and had his nose painted black, two black whiskers on each cheek. The costume design was quite similar to Zubelizu, using costumes and makeup, albeit not to the extent that Zubelizu did. The actor looked to be about 16 years old, albeit small, although that's common in France. Despite being clearly ravenet, the boy had very pale skin with dark circles around his green eyes, clearly sick.  It made sense, considering the show was centered around his sickness, an odd topic for a children's show. The show was, as expected, always located in a hospital room, where the boy was lying down. Despite being obviously a boy in makeup and a headband, the show addressed him consistently as a kid named Andre. In the first segment, Andre introduced himself and said he caught a tick-borne illness. Granted, that's common in cats, as I would know myself, but he had to be in the hospital. For a kid that was dangerous, as he explained, but he was sure he'd get better. He also introduced himself as being lonely, and not really having many friends to begin with, and the hospital making him feel even worse. He asks the viewers to send him letters, because he feels like that'll make him feel better. It ended with him holding up a mailing address, showing where to send the letters. After that, the show was usually just 10-minute segments of the cat boy opening letters in the hospital. He read through each one, reacting different depending on the contents of the note. The notes were usually positive, wishing for him to get better. He seemed to be receiving them from viewers, naming a new kid each time. He usually opened 10 letters a segment, thanking the viewers at the end for wanting him to get better. The funny thing I remember about this show was that every episode, his condition seemed to worsen. Whether it was his skin growing paler, his eyes sinking in, or his hair fur growing this year, it seemed as if he wasn't getting any better, especially as the letters became fewer over time. I assume this was due to the fact that the show was too obscure to receive enough letters, this could also be due to time and budget cuts, as the show was visibly not very high budget. The show otherwise wasn't too out of the ordinary. It was just a segment of letter opening, like the opening parts of Blue's Clues, or the after-live action shorts of the original Double Sailor Moon. The show didn't have any opening from what I remember, but I do remember that episode ended with a soft music box playing, soft kitty warm kitty, the nursery rhyme, as the credits rolled. It was off, but I have to say I always found it cute. The last episode was one always confused me as a kid, and left the show on my mind. If it wasn't for that episode, I'd assume it was just a dream I had, or maybe just buried it under the rest of the short-lived shows I'd seen. But the final episode left an impression on me I'm not sure that I'll forget. The show itself had an already fairly off-feeling overall, but the last episode of the 10 shorts was arguably the most off of all of them. He had no more letters to open, and he just lay in bed, sighing. He closed his eyes, and the music box ending theme began to play. There was no dialogue in this episode, we just watched him sleeping peacefully in bed as the music played. It was relaxing, but also kind of lonely. You could see no one else in the room, and without the letters, the amount of isolation was more obvious. In the final minute of the episode, he opened his eyes and gave a small smile to the audience, resting his head on the pillow before waving softly. He sighed before closing his eyes once again, the music softly trailing away, leaving the episode silent. The hospital lights went out shortly afterwards, and rather than the music box theme playing at the end, the credits rolled in silence. It was discomforting, especially as a child, and a pretty melancholy way to end a show that up until then, had been low-key yet hopeful in tone. Did he not get better? Was he saying he'd be okay? What was going on? I've tried to find more information on this show online, but it's been rough. Granted, the modern American internet wouldn't know much about an obscure French show from the 2000s, but I just want to make sure I'm not the only one who remembers seeing it. How about all of you? Am I the only one who remembers this? It could just be my early 2000s get memories, but I'm sure I saw it.


So good afternoon everybody, I am Garewa Jan and I've been working as an Android developer since past three years. Currently I'm working with the company Namels Fueled and we have developed and worked with a lot of clients which are summer start-ups, some are well established and some of them are like quiz-up, write-it pharmacy, Barney's New York, Barnes & Noble College, Vogue, and so it's a service-based company and we get to try a lot of different technologies and new stuff and from past two years I would say we have been like really delving deep into reactive and average ever and trying to use it in almost all of our apps and also it's one of the libraries that we make sure to use in all the apps that we write. So that is why my talk is on RxJava, it's called Rxify which is a simple spell for complex RxJava operators. So who is this talk for? People who are already working on RxJava, you might find that there is more to learn by this talk and people who are beginners I'd say that this is high time you start Rxifying your apps because it's highly useful and it has a lot of advantages and it makes things easier which I'm going to talk about in the presentation and for all the pros out there just attend sit and relax talk is going to be fun. So what is this talk about? It's about Rxify. So how many of you like RxJava? How many of you don't know about RxJava? How many of you like Harry Potter? So in this talk I might use a little of Harry Potter references but I'll make sure not to overuse them. So Rxify it terms the use of RxJava or use of the operators which comes along with RxJava and I'm going to focus on RxJava making our life simpler instead of like disturbing us a lot and I would say that what we need to do is we just need to cast a little spell that is use any operator and we're good to go perform any task and it will be really easy. So what is RxJava? RxJava is reactive extensions for JVM, our virtual machine and RxJava mainly works on the observer pattern that is for emitting sequences and data and events. I'll talk about the observer pattern not much in detail as I'll just show a little introduction model. How RxJava is making our life simpler? By using RxJava we do not have to worry about things like low-level threading synchronization background processing exponential backups retrying repeating and things like that. When you code it without RxJava you might have to use a lot of variables and a lot of stuff you'd have to use a lot of your head and if you just use RxJava it will be less error prone. So why am I giving the stock? So RxJava and the RxJava operators to some people it might seem a little overwhelming in the building and they might get a little confused because RxJava and its operators might be complex at first and it might be hard to understand and some of the marble diagrams of the operators they're a little too much. So what I'm suggesting is start RxJavaing your apps because as you might have heard about the Android podcast, fragmented podcast, Kaushik Gopal and Don Filger. Kaushik Gopal recently introduced many renowned developers in the Android community in the Google IO 2016 and most of them the top three apps they told us about that they're using is RxJava, Retrofit and Dagger. So start RxJavaing your apps. So let me go over the basics. We have three things, three main things. Observable, Subscriber and Actions. Observable is like anything that is producing a stream of wind emitting items. Subscriber consumes those items and actions are whenever any item is emitted in a stream, on next is called and which is followed by on complete if everything goes well and if God forbid you get an error, on error is called. It can get called even without on next being called or it can get called after some series of events have been emitted. So between producer and consumer that is observable and your subscriber we have some operators that can modify your data and we have different schedulers and schedulers are you're really good friend because they can make things easier. We have the main thread for Android, we have the computation thread that is the background thread and there's also a test scheduler which makes testing easier. So this is the basic observable pattern. We have a producer on one end and we have a consumer on the other end. The producer is emitting item that way B and C the consumer or the subscriber is consuming item. This is a simple observable pattern which on which are our or the reactor programming works. Let's create a simple observable now. We have a string called Hello World. We're going to use the justify spell on it, or you can call it just operator. From this we'll get the observable string. So this is a basic marvel diagram which shows time on the X axis and one item is getting emitted. That is a string Hello World by just using it just operator. So next we have an array of strings. We're going to use the from operator here or in our is our two which is now new you can like use from my table or from which was applicable and we get another stream of strings like A, B and C. Take a look at some spells or operators we which you should know. First is a map operator or the map widely known as map. So what map does is it transforms every item of a collection of items. It applies a function to each and every item. If I talk technically it transforms the items emitted by an observable by applying a function to each item. So this is a simple example. We have an observable of integers emitting one, two and three. We want to apply a map operator on it. So it's a map you spell we can apply on one. We can multiply it by 10 or two. We can multiply it by 10. So the function is going to be multiplied by 10. Let's see how we can do that. So this is a simple code snippet. We're first creating an observable from these three integers where then we're applying the map function. And we're supplying it a function that how do we want to modify the stream? So here simply we are multiplying it by 10. So we get 10, 20 and 30 as a stream. So in our Java, the func one thing you just saw this func one which we are supplying as an argument. It has changed to function and there is also something called func two which takes two inputs. It has become by function to see by function as well. So this is what it has become. So you don't really need to worry about all this because I'm not sure you are everything. It gets auto rated. But still it's good to know that function is when we have only one input and we're multiplying it by 10. So next is the flat map m spell or the flat map operator. What flat map does is as we saw just now map was converting one item into another item. What flat map does is it takes one item it convert it into more than one item like any list of items. Then what it does is it combines those items into stream. So technically we can transform the items emitted by an observable into observable then flatten the emissions from those into a single observer. Let's see by an example. So these, this is a simple observable which is emitting hello world and how are you? Hello world is getting converted into hello and world. How are you getting converted into how and RMU? Then it is getting combined into another stream. That is what flat map does. This is how we can do that. We'll again apply a function to it and here I'm just splitting it. The main thing to remember is that flat map returns an observable and a map returns the type of whichever data type you are passing to it. Why we're returning an observable here because from one item we want to emit more than one items and observable itself emits more than one item. So next is the filter room spell or the filter operator. As the name suggests, we have a collection of items. It filters those collections based on some conditions. So technically we are going to emit only those items from an observable that pass up predicate test. So here we have an observable of integers from one to seven. What we want to do is we want to filter out only the odd numbers. We're going to apply the filter room spell over it. We're going to pass a function to it that is percentile two equal to one and it will just filter out the odd numbers for us. So let's take a look at the some complex spells which are doing all the magic out there. Complex operators. First one is the Zipyosa spell or the zip operator. What zip operator does is it combines multiple collection together according to some function and then emits the result of the combination. For example, if you're getting something from one API call and you're getting something else from another API call, then you want to get those two results and you want to create another object from those two results. That is what zip will do. Technically combine the emissions of multiple observers together via specified function and emit single items for each combination based on the results of this function. So this is the marble diagram for zip. We have different observable streams. It takes one item out of this each and every stream and then it converts into a different thing. Yes, it looks a little overwhelming at the beginning. So instead just we'll take an example. We'll take a fictional example that if we want to create a polyjuice portion and Hermione wants to prepare this portion, she's waiting for the task Ron to bring her bring her fluff suite which is an ingredient of the polyjuice portion. She's waiting for task Harry to bring her hair that is here of some person which is also an ingredient of the polyjuice portion. So both tasks Ron, R and H are executing asynchronously and only after Ron, R and H have executed then we can start preparing the polyjuice portion. So here's a marble diagram for this problem. One observable is emitting fluff suite, one another observable is emitting crab hair and then we want to combine these two after both of these operations or tasks have completed and we want to create a polyjuice portion. What we can do is we can simply apply the zip POSUS spell over it. This is the zip operator. This is the static function of the observable class. We'll give it the fluff suite observable, we'll give it the hair observable and here we'll use the by function because the input is two objects and we are converting into a polyjuice. So can you relate this polyjuice problem to any coding problem? It's when multiple API calls are executing simultaneously then you can use this problem to do some things I'm going to demo about it, do a demo about it. Let's take a look at the other spells concatify that is a concat operator and merge use that is the merge operator. First let's take a look at the technical definitions of these two. What concat operator does is it emits the emissions from two or more observables without interleaving them and merge it combines multiple observables into one by merging their emissions. So the thing is concat can interleave and merge operator it cannot interleave. Concat and merge they both have the similarity that they both will combine similar type of data that is and observables having same types and that is the same thing with merge. So let's take an example we have two streams two streams emitting four two streams emitting integers one two three and four and eight and nine. We apply the concatify operator on it and as you can see it will first emit all the items from the first stream and then it will emit the second stream whereas merge will emit as in one when the items will come. So one is getting emitted then as eight is coming so it is getting emitted and then two and then so on. So what was this concat and merge all about? So I'll take have a given example of another fictional problem and let's try to imply these operators on that fictional problem. So this problem is called Snape's assignment. Professor Snape has requested all the students to write an essay on where was they can write any essay they have to write an essay and the students who will turn in the essay first will get more points than the ones submitting later. So students are divided into four houses Gryffindor, Slytherin, Hufflepuff and Ravenclaw. So this is how the assignment submission is done. As you can see the Gryffindor person is submitting the assignment first then Slytherin then Hufflepuff and so on. So there's a little child, weird child who want to like jinx this assignment evaluate and he wants to get the more points and he wants his house to win that's all he's called Draco. So he's going to apply a trick over it. He's going to concat these four observables. Let's get the observable of Slytherin observer of Hufflepuff, Ravenclaw and Gryffindor and apply the concat spell over it. Draco applies the concat spell over it and this is how what we'll get then. As you can see we use the Slytherin observable first. So Slytherin is getting emitted first then Hufflepuff then Ravenclaw and Gryffindor is the last. So guess who is not so pleased who was the first one to submit the assignment and now she's lost. Yes Hermione is not so pleased by this so she wants to make the thing she wants to make the things right. Now she's going to use the merged spell instead on the assignment evaluator and this is what is going to happen as in when the students will turn in the assignments everything is going to be in order G1, S1, H1 as in when the items is getting emitted we are combining and merging those items. Let's look at a coding problem first now. This is a classic problem what we want to do is we want to hit the cache first to get the data and if the data is found we'll return the data and as we want to place a network call. So what we can do is we can apply the concat spell easily on this problem. So here what we have is we'll get the lectures. Lectures is anything that we're searching from the server or getting from the cache. So we'll first get the lectures from cache we have in observable get the lectures from server we have another observable and we can combine or concat these two and what will happen is if the lectures are found in the cache we'll not be subscribing that is we'll not be making any api calls and if you were to do this without Ariesha you'd have to do some little of conditional things and Ariesha just lets you use a single operator and maybe a two maybe two operators and get this over with. So yeah I have used another operator in this example that is take one. So one caveat here is when there is no data for example if there is no data from cache or from server then take one will complete without exception and otherwise if we had used first then we would have got no such element exception if there is no data so that's why I've used take one over so next topic is the back pressure that is the defense against the dark art let's have a look at it so what is back pressure the term which many people use and did not really know about back pressure is frequency when the frequency of reducer producing an item is more than the ability of consumer to consume technically strategies for coping with observable that produces items more accurately than the observer consuming them. Good news is usually you do not even have to worry about back pressure in your applications. Ariesha ever to introduce is flowable which is an observable with back pressure support what you just need to do is forget about flowable and use observable instead and you do not have to worry about it at all. Observables do not support black pressure whereas flowables do it's totally good to know about things because if in future if you might have to like take care of back pressure then you should be knowing about it and how we should be dealing with the different strategies to deal with back pressure. So let's have a look at another fictional problem that is the back pressure. We have two armies one is the good army that is the Dumbledore's army and another one is the death heaters that is the bad army. Each team is fighting against the other team and Dumbledore's army is not as experienced as the death heaters. So the death eaters are emitting some spells and the Dumbledore's army that is a good one they're getting overwhelmed by those spells. So some kind of back pressure handling here is required because the frequency of producer is more than the ability of the consumer to consume. So let's take a look at some of the operators which can be used in this case or the strategies even if we do not have to worry about back pressure but still these operators as you see can come in handy in fusion. So first is the buffer operator. So what buffer does is as the name suggests it buffers small chunk of data and emits instead of emitting one item at a time it emits buffer I mean chunks of data. So technically periodically gather items emitted by an observable into bundles and emit these bundles rather than emitting the items one at a time. So this is a simple example this is an observable of spell which the bad army is producing and here they are a first spell, second spell, third spell and fourth spell. What we can do is we can apply the buff random spell over here that is as simple as buffer and the count and here these two spells will get buffered and this will also get buffered. So as I told you the Dumbledore's army was getting overwhelmed so they had decided to use this technique or this kind of strategy to cope with the back pressure in that case but as you can see they still have to like process all these spells so it is kind of a lossless kind of a strategy because they still have to process all the items so it's not going to work. So Sirius is not so happy about the strategy so what he's going to do is he's going to instead apply the debound strategy that is the debound C spell debounds operator. So what is debounds operator? Debounds operator from a list of items emitted emit an item only when some time has passed since it last emitted anything. Only technically only emit an item from an observable if a particular time span has passed without it emitting another item. Let's see how it works so here the previous marble diagram of a spell four spells so here we have this is how we can apply the debounds operator we'll take a time unit that is a 300 milliseconds and how this comes into picture is since there are three merely seconds had passed since something was emitted so one gets emitted again 300 milliseconds had passed since anything got emitted so two gets emitted. Now three milliseconds had not passed and four got emitted so it will skip the third one and it will instead emit four because again 300 milliseconds had passed without it emitting anything. So as you can see this is a lossy kind of approach and it works out well in this case and the Dumbledore's army is happy now problem solved. So let's apply these strategies in some applications which are not really related to back pressure but you do not have to like think about back pressure in these cases but these are kind of optimizations which you might want to do in your app. For example if you want to optimize network traffic the use case here is you want to track user events whenever a person like user clicked here, user clicked there with each and every event you want to send a server call. Simple approach of doing this will be server request whenever any event is occurring. So what will happen here is we'll have an overcharty producer that that is a user events and the slow consumer that is a network. So some kind of back pressure handling is required over here even if you do not think about back pressure you would still have to optimize this case. What we can do is we can use the random spell or the buffer operator over here. We can buffer some events before making a network request but you would have to see if you're tracking analytics API supports that kind of an operation and it can send a chunk of events instead of sending one event at a time. It can send a list of events. So this is how we're going to do it. We're going to get an event so observable. We're going to buffer three events at a time and we're going to send a list instead of one item at a time. So we won't be putting much load on the API or the server. So the next problem is the autosurge problem. This is the problem when we need to show some kind of autocomplete suggestions. So as you can see in this thing is whenever a person is typing any character we're placing a network call at each and every character. So this is not so optimized. This is a simple approach of doing things. Whenever any character is getting typed place a network request, get the results and show it as a like autocomplete list. So what we can do instead is we can handle back pressure over here and use the debounce C-spell or the debounce operator over here. How we can do that is we can place the time limit as 500 or whatever you want in milliseconds over here and only after 500 milliseconds had have passed then only the next character will be placing a server call. So this is as simple as writing a simple operator debounce and doing it. We do not have to really implement it ourselves. So the next topic is error handling or the model art. So we have repeatium spell over here, the repeat operator. What repeat is, as the name suggests, emit the same item multiple times, create an observable that emits a particular item multiple times. This is a simple example. We have an observable emitting one. We want to repeat this four times. We'll emit one, one, one, one. This is as simple as using, this is, we don't only have to use a single function and will be good. So next is the retrickle spell or the retry operator. That is also some kind of task which takes some time out of and some of our, we eat our brains doing synchronization and everything like that. What we can do is, so on error we can retry the same task until it's successfully completed. So if a source observer emits an error, then we'll resubscribe to it in hopes that it will complete without error. So this is a marble diagram. What's happening over here is we have a source which is emitting one, two, and three. What happened is when three was getting emitted, we got an error. So what we can do here is, we can apply the retrickle spell and resubscribe to this. So it will simply retry and this time the stream got completed successfully. The basic difference between these two repeat and retry is the repeat operator will resubscribe when it receives uncompleted because we are repeating something which had been successfully emitted and retry resubscribes when it receives on error. So let's look at a fictional problem that is called the Professor Lupin's Bogard. What it is about is we want to perform a ridiculous charm, which is any operation. What we want to do is we want to perform it successfully, then we want to excel at it.  It is a magical spell to turn a Bogard which is your worst fear. We want to turn it into something funny. So the Bogard, the fictional or magical object, it has three states that are scary, funny, and hilarious. So we are emitting these Bogard states. We will call this ridiculous charm operation to have been successfully completed if the laughter threshold crosses the funny threshold. There is a funny threshold is a value. If our threshold crosses this value, the spell is successful. And we would have excelled the ridiculous charm if the threshold crosses the hilarious value. Something is funny when it makes you laugh, but something becomes hilarious when it is extremely funny. So to state the problem Bogard has three states, scary, funny, and hilarious.  The state of Bogard will remain same. If it does not cross funny threshold, it will change into funny. If it crosses this funny threshold, it will change into hilarious. If it crosses the hilarious threshold. So we need to retry until the Bogard state is at least funny. Then we need to repeat this task until Bogard becomes hilarious. So let us look at the marble diagram. This is the solution like firstly the scary state emitted and then we applied the ridiculous charm or any function over it and it failed. So what we can do is we can retry over here, resubscribe to it.  The Bogard state changed into funny. And the operation got completed successfully. Now we want to repeat this thing as the operation has been successful. Now we want to excel at it. And fortunately this time the Bogard got converted into hilarious and our operation is successfully completed. This is the code for it. We will get the Bogard observable. We will apply our any function. In this case we are applying a ridiculous function over it. If the Bogard is funny, we are emitting the Bogard. Otherwise we are emitting the error. And if the Bogard is not funny, this will result into an error case. And whenever any on error is triggered, retry comes into picture. So now what will happen is retry. This will get retried. And this whole thing if it gets successfully completed, we will repeat it 10 times. And I have used another operator over here take until. So this thing will be repeated until our operation the Bogard gets hilarious. Enough about retry and repeat and this fictional problems. Let us take a coding problem into picture. So the problem is we want to keep the session alive while the user is browsing the app. So how we can do a simple approach would be checking for session validity before performing each and every API call. You would need to place if and if checks before placing any API call. So the drop back is as I told you placing the session dot is valid check before each API call. What you can do instead is renew the token repeatedly while the user is browsing the app. And that can be done using our repeat operator. So we will apply the Repetarium spell over here. We will get the session observable that is we will get the current session and we will check if it is valid. This can be done using the filter operator I told you about. So we have one observable which is checking the validity of session. We have another renew observable which is making the API call if our if our expiry time of the session has occurred. If the if the session has expired it is making the API call. So here we are using the repeat when operator which takes in a function and we can tell it when to retry. So what we are going to do is now we have two observables we can simply concat it. So if the session will be found in the cache it will return the session and if it is valid. And otherwise it will just keep on retrying in the background sorry repeating in the background and it will keep the session alive. So next let's take a look at the demo. We have multiple API calls the problem I talked about earlier is let's convert it into a coding problem. We are waiting for the flux feed API call to complete. We are also waiting for the student API call to get the hair of crab. Crab hair it is a like member variable of students last. Both calls are executing asynchronously. The problem is we want to initialize polyjuice that is we want from the results of API calls that is flux feed and student want to create another object called polyjuice and we want to hide loader only after both calls have completed. Without RxJava we would have to use CMA4 like if flux feed call would complete we would have to check if student call had come has been completed or not. And if the student response came first then we would have to check if flux feed response has yet come or not. And that way we would have to keep two bullions, two states that is like states are not that good. So let's take a look at the example. This is a simple demo that I created sorry for not using material design that much. We got crab hair, we got flux feed and we prepared the polyjuice as you can see let's see it again. This time we got flux feed first, now we got crab hair and we prepared the polyjuice. So these kind of things are really simplified by using our RxJava code which I have written. We are simply using the zip operator. We are getting the two observables and we are using zip operator on it to complete our task. And so we are not saving any bullions or anything. The code is clean and we are happy. This is the problem that we just saw. So what's next after this? I would suggest you guys should learn by practice, make RxJava your friend and not a foe because it has a lot of advantages, a lot of places and it makes things less error prone and makes your life easier. There is a repository from Kaushik Gopal that has a lot of examples, RxJava Android Example. This is from where I got the motivation to start working on RxJava because it had many examples which shows that there are so many things that RxJava can achieve. And also if you want to have a look at RxJava 2 there is another repository, sorry I messed up the link. It is from Amit Shekhar and it has examples on RxJava 2. Also if you want to pull your hair out, take a look at my source code of my demo app because and also you can go to the medium blocks for more detail. I'd like to give some acknowledgments. Vikas for pushing me into RxJava because at first it was really overwhelming. Julian for suggesting me to think about this topic, Ritesh for editing all my stuff and the DroidCon team for bearing me with the rehearsals. Also I'll state the links over here, lossy and lossy. Repeat and retry. This has been taken from a very good blog from Dan Liu which has repeat when and retry when, difference between those two. And these are some other definitions and the fragmented broadcast is really good. Just have been taken from here and thank you. Now, new question. Is there a way to test it? Yeah, just I mentioned about test scheduler. So what we can do is using the test scheduler. Otherwise we have the main thread, main scheduler. We have the computation thread and IO thread that are the background threads. We can do is we can instead use our structure, our apps in a manner that use test scheduler instead of those two schedulers. And what can we can happen is we can like call trigger events function on it and it will trigger and it helps us write a unit. So the problem that I was having is that I subscribe on a different thread and I listen back on the main thread. And in my unit test, I do. I don't have the access to the Android, right? Yeah, that is what so you can use test scheduler for that. How to handle the duplication of data in different streams? Like is there any operator already developed or we have to manage the duplication of data? What do you mean by duplication of data? You discussed the problem like using caching and using data from server API calls. Say if I have data in cache, say 10 records, I am displaying those records in a list. And in another stream, from another stream, I am getting data from API. So in that API hit, I get updated data, say 10 plus 2 records. So now that stream is returning 12 records and cache has 10 records. So if I can get in it on merge, like in the example you displayed, so that concatenate or merge would return the combined data of both streams. So that would be the duplication of data, 10 plus 12 now. So how would you handle that data? Didn't get the problem. There are methods in RxJava like you said about retry and these are the methods there. But there is also a method unique. If you use observable.unique and you pass those models, that observable model that contains duplicate data, it will filter out and give you a new model with unique data there. So there is a method in RxJava too. So you can use that. Yeah, it will compare all those two earlier models which you provide that or the list of the data which you provide it will check which are the data which is repeating. No, no, no. That unique operator is there like observable.unique. There is one operator. I'm not sure like it is unique or something. Hi, Garima. You said about autosurge via debounce. And in autosurge, like when I started typing a word apple, okay, first I typed A then P. Response for A came after two seconds and but the response for P came within a second. This might happen due to my speed of server or the internet. So my question is here like, is it handled properly? Like if A response is coming after the P, so will it be displayed in the UI or will that be? So you need to take care of that. Maybe in that case we can use the contact map instead of the flat map and contact map takes care of order. So that might work out for you. Okay, so like it is not handled with Rx properly. You would have to use another operator or any other kind of technique. Okay, we'll run the code and we'll see like what the result is. We'll run the code and we'll see like what the code, how it works in real examples. Okay, thank you. Hey Garip ma, question here from Balkan. All right, the question is here, here on the Balkan look up. Okay, the question is, let's say I have a lot of multiple upstreams and downstreams, right? So in between the streams, if some crashes happen or some error happens, so it fails down in my ultimate downstream and say, hey, so how do we debug that? What all tools you are used to debug the problem like this? So basically what I'm asking you is what all the problems you are faced using Rx and how did you solve that? One of the good practice to be able to debug this kind of thing is do not forget your onerror and recently I was reading about a tool which can be helpful. I do not, sorry, I do not remember the name, but yeah, if you properly declare your onerror method and also Dan Liu suggests that if he throws an exception like onerror not implemented exception, if your onerror is implemented correctly, you'll be able to debug it. We are not using any of the tools that onerror is our, I mean, I would say. Yeah, onerror is fine. But the question is, let's say I have multiple upstreams, right? Like five upstreams I have, right? Which stream did it crash? I wouldn't be knowing in onerror. Onerror will be generated. Yeah, sorry. Yeah, in onerror, you'll get to know that particular line. This is the particular line on which you are crashed. So you know this line is from that observable. You have different streams. You have different observables. So you'll get to know. Hi, I guess Google has recently released a similar library named Aghera similar to Rx. Have you tried that? Sorry. Google has recently. Aghera, what about it? Similar to, it's similar to Rx, right? Are you trying that? I haven't tried it. I've just heard about it in one of the podcasts and don't know what you want to ask about it. Okay, thanks. It's like some similar thing than in some other manner. Yeah, is there any API limitations for Rx Java? API limitation hasn't. Is in backward compatibility? Oh, okay. That thing API, as it is different library, I do not think there is much. I do not remember the exact number. Hi, so my question is, is Rx Java faster than writing the code in Android or the same level? It would depend upon what kind of operators you're writing. If you're using a lot of operators, I think it's not going to be that good. And it's definitely cleaner code and faster would be dependent on your implementation. So is it directly interacts with the JVM or it is a layer over the Java? Rx Java is a layer over Java or it directly interacts with JVM and compiler? Okay, thank you. Thank you, Karma.


What's up everyone? It's your girl Kenzie here from Layton Sports Guards, and I am ripping a personal for Sean D We've got five twenty-twenty-two Bowman baseball sapphire edition boxes. All right, Sean. Thanks so much for your order. Here we go Do we first we've got red in the first box here Ellie Dela Cruz. We pull from the back Eddie's Leonard first You've got red first three of five Cubs Louise bird do go huge hit there Sean Wow How's ours? We will make that my goodness Did ask for a red auto, huh? That's crazy Brady Allen first Your Bina Pineda and will Wagner.  Just In case people are tuning in at a certain time, you know for do go first Austin Martin Harava first and compost first Guzman first Torque So Geeksy first and Darryl Lopez first probably just have time for these five boxes You're ripping here about ten minutes on the Halfcase prism James Wood first Sort of first we've got purple to 25 her knees for the Orioles and Darren Baker first Zach vene Lorenzo first Lurad and Adley Very nice first box there For do go red to five All right box two here for a Sean Cavadas first we got green here Peacrow Armstrong green Darryl her knees 18 of 50 On the green first auto Orioles They go Sean another nice low-numbered off first auto Angla's first Anthony Rodriguez first Harry Ford and Quintero first Fernandez Alvin Guzman first D-vax Cheater downs and Lizarraga first Alejandro PA first Suspitas Diaz and Karjada and CJ Abrams Colton Couser Adele Amador Malcolm Nunez and I'd be our first Bertha Dominguez first we've got orange or Elvis Martinez to 50 blue jays Luca trash first and Raffaello first Vargas Venim and Bailey first White Sox Garrett Mitchell and Jay Allen Rodriguez Acosta junior Sanchez first and Mack I backstrom first And force will be ripping personals tonight after group breaks. He's got plenty of room left still And a new release of select baseball those personals are available 150 a box ripped and ship Miko kebadas first Pico Armstrong Alexander Ramirez and Robert Hassel Angla's first Anthony Rodriguez first Harry Ford and Quintero first Guzman first Jeter downs orange Christian Hernandez nice one there to 50 cups and Lizarraga first Suspitas Karjada Hernandez and CJ Abrams Amador Nunez Alejandro PA first and I hear first Robert Dominguez first Couser with a trash first and Raffaello first Vargas Venim and Bailey Garrett Mitchell and Jay Allen Costa junior Sanchez first a Anthony Rodriguez first auto giants Anthony Rodriguez, I'll do do it for that box for you Sean and backstreet first Box for here Martin Jimenez first Henry Mendez first some odd Taylor first and nalasco first Her name is first and Kona is first Eddie's Leonard first and we something zealous first breaking bread in the building Already causing trouble you just walking the door threat Beatty Louise on hella Kunya Logan Cerny first and will Wagner first kill a Watson first. Thanks for their fresh on Penang go warming Bernabelle first and Panetta Austin Hendrick, you'll swore Garcia first Marcella Meyer and Vera first Nick and Zala's Jonathan Klaus a first Mariners Roberto compost first and Benny Montgomery The well be marté Pastrano first we have a redemption and Darryl Lopez first Adoption Congratulations, you're due to receive a Chrome prospect autograph purple sapphire purple 10 Purple face are the 25. I believe this is to 10 on the purple Oh Colson Montgomery White Sox There you go, man What a filler here between breaks Goodness gracious We'll mag that redemption Ramirez St. Quentin first we've got Louise for do go on the aqua to 55 Heck yeah, we'll mag that one for you Sean as well and so gay see All right, last box Last one here for you Sean Another redemption Isaac Pacheco and pull from the back Eduardo Lopez redemption Chrome prospect auto Max Muncie for the A's Another nice hit there for you Sean. Thank you. We'll make that one too South Freilich Salinas first tree, sweetie first nice one there and Carol first Curtis Mead first Tyler Soderstram Machado first and Shailen Palanco Viva's first Prisciato Vargas first and Jose Rodriguez first Alvarez Errol Vera Venezuela first and blaze Jordan Perez Luis Gonzalez first Orioles Triana first for the Reds in Jason Dominguez Pedro Leon a Valesquez first purple first to 25 of it's got a Pirates and my year first Last pack here for a shot Joshua Bay as first Jordan Loller Quintana first and a Bobby with Junior All right, that'll do it for your five box personal Sean. Thanks again so much for your order We do appreciate all your support and we will get these right out to you


I'm Sharon Yates. I work at the... I'm a researcher at the University of Oslo and I'm going to be presenting some of the analysis tools that have been developed as part of the human brain project. Specifically those that can be used either in combination with or that rely on 3D brain atlas resources for analysis. The tool that I'm going to focus on is Elastic. Elastic is a segmentation tool that has been developed by a team in Heidelberg. So it's not actually developed in Oslo, but we are closely collaborating with them. It is a tool that can be used to segment any type of image, so you're not restricted to brain images, images of brain sections. You can segment anything, but we use the tool in the context of brain sections. The second part of the talk, you're going to hear about Ugex, which is another tool that can be used to analyse human data. So just a bit of background about tools for segmentation. The traditional approach to segmentation is to threshold based on labelling intensity. For example, with a tool such as ImageJ, normally when you do segmentation what you're interested in is pulling out the labelling or something in the image that you're interested in. So in this context it would be labelled cells, immunohistochemical labelling. The challenge is by doing just a traditional thresholding of intensity is that it can be very difficult to remove non-specific labelling. It's also difficult to batch analyse, and a new generation of tools and plugins have been developed to kind of solve some of these problems. Elastic is one of these that uses a supervised machine learning approach. Here you can kind of see an example, so I don't know if you can see. At the top you have a brain section from a mouse, and it's been segmented based on the thresholding intensity. Thresholding of the intensity with ImageJ, and you kind of get a lot of speckles and kind of things that you can't remove non-specific labelling. And this one here was done with elastic. It's much cleaner, and we pulled out just the plaques, which is labelled AMLOID plaques, which is what we were interested in in this case. So what is elastic? It's a toolbox for interactive image classification, segmentation and analysis based on supervised machine learning algorithms. It allows you to do segmentation, it also allows you to do a lot of other things. It has lots of different workflows. So kind of what we are going to demonstrate here is not the only thing that you can do with it. So I would kind of encourage you to go and have a look yourself on the elastic website. It's free and open source. It allows batch analysis, and it is relatively user friendly. Okay, so that kind of leads us to the question of why would you want to do your segmentation in the first place? So in this case I've taken an image of a brain section from a mouse. I've pulled out the labelling. In this case it's called binding labelling. Once you have that segmentation, what can you do with it? At the University of Oslo, what we've done is developed a workflow that we've called the Quint workflow, which allows you to quantify and spatially analyse labelling in the context of reference atlas space. There's actually an article coming out soon on this. What you do is you segment your image, your brain section, and this can then be combined with that customised atlas maps, which are produced with the quick-knee software that you just saw. This combination is done with an application called Newtile Quantifier. So this is also software that's available online. You can download it on nitric.org. It comes with a very extensive user manual. It basically does a quantification for you with output per brain atlas region. You get reports, you get coordinates, which allow you to visualise your objects in 3D atlas space. We have our own viewer that you can also access to be able to look at the objects in 3D, and you get these images, which are basically the segmentations overlaid on the atlas maps. Going back to elastic, for classification with elastic, it has two main workflows. The first thing you would do is you upload your images to the pixel classification workflow. That one does a classification based on user annotations that you manually put on yourself, and the pixel features intensity, colour and texture. The added value of using elastic over just using the traditional intensity thresholding is that it also takes into account the colour and texture of your image. Often that's all you need to do, then you can export segmentations. In some cases, the segmentations that you get out are not good enough for quantification, because you might have a lot of nonspecific labelling that's also pulled out. In this case, it can be useful to do an object classification step, which follows the first step. Where you can filter out objects based on object level features such as size and shape. Here's an example where I have an image of a section labelled for amyloid plaques, where I've used the pixel classification workflow first to extract all the labelling. Then you have this nonspecific labelling around the edges that I want to get rid of. I've applied the object classification workflow and classified based on object size and shape, because you can see that the circular objects are very different in size and shape compared to this elongated nonspecific labelling. Can I ask what the pixel classification is based on texture? I'm going to explain a bit about that here. The texture can recognise textural patterns. The algorithm is built up so that it detects patterns within a 10x10 pixel window, which means that if you have light pixels followed by a bit darker pixels and then goes to the very black pixels, that is a pattern that it can recognise. It recognises the edge, not just based on the intensity difference, but also that it's this kind of light to dark texture. That's why one of the considerations you have to take into account when you do classification with elastic is that the resolution of your image actually has quite a big impact on both the quality of the input output and the processing speed, because the bigger the image, the slower the processing time. Ideally, it's best to resize your images so that the edges of objects fall within this 10x10 pixel window, because if it's outside of this range, then the programme is not going to be able to see it, to detect it. My kind of recommendation is usually to downscale as much as is possible without losing the information that you're interested in, because if you downscale too much, you might lose information, you might even lose objects. The practical session is a bit similar to the quick knee one, in that you have access to some images which are lying in the session 4 folder called images. We're going to classify and then extract segmentations with the pixel classification workflow. One of the silly things about the elastic programme is that when you export the segmentations, the images are always black by default, which is very confusing for new users. This is because basically a black colour has been applied to all the classes. That's kind of the default setting in the elastic. Even though it has been classified, it doesn't look like it's been classified, which is why we have to apply the Glaspier Lookup table to the segmentations just so that we can see or basically apply different colours to the different classes. At that stage, once you have your segmentations, that's when you would take it into the new tool software. We're not going to have time to cover that today, but we're going to explore some of the new tool output, some of the coordinate output. You can have a look in our viewer and then, of course, you can go and look yourself if you're interested in the workflow. Read the article when it comes out and kind of download the software and read the user manual. This is just a sneak preview of how the objects look in the 3D viewer, which is the mesh view. I think we're going to do this in an interactive way. I'll open elastic on my computer and then you can do it live. Open the software first. Wait. I don't know what happened. There's something to do with... Just knocked it or something. Has everyone got it open? I was blocked by my system administrator. I downloaded it, but I didn't try to open it. This is actually a session where you can work together as well just to get a feel. As you can see, there are a lot of different things that you can do with it. The segmentation is definitely not the only thing. You can use it to work with 3D images with 2D images. You can also work with videos moving over time. It does a lot of different things. We're interested in pixel classification at the top. What you want to do is to save your project somewhere. You can save it into the folder with your images in the session 4 folder. I'm going to save it here. Then it should open. There. Then you want to upload your images. To upload your images, you go to add new and add separate images. Then just highlight all the images that are in that folder. Is everyone at the stage ready to move on? To make the file more stable, a tip is to save all the images to the project file. To do that, you highlight all the images and click on edit shared properties. Then change the storage to copy to project file. Then press OK. Then it says that you have to save the file at the step.  I wouldn't usually go to save as, just save project. The next step is to go to feature selection. I think mine is still saving, which is why it's being a bit slow. You can see at the bottom there's a kind of... For the feature selection, you want to select the features that you want to include in the classification algorithm. The advice that I would give is just to include everything. If you have very, very big images, that tip can be to select features a bit randomly like this. These are the different scales. This is what I was talking about with the... That it can recognise edges of objects or textures up to a scale of 10x10 pixels. You can see that the number at the top, if I have these numbers here, represent the scale. This is the 10x10 pixel window, whereas this would be a 1x1 pixel window. It's recognising textures on different scales. We'll just include everything and press OK. Then the next step is to start the training. Here, you would create some classes. In general, you want to extract your labelling, which is the call-binding labelling here in black. You usually would have background and then labelling as your classes. I'm going to change this one to label background. Is everyone following? Then, if you have the handout, it tells you how to navigate. It's really useful to have a mouse. If you hold control and then use your wheel, you can zoom in and zoom out. To navigate, you press shift and then just move around your image. Usually, the first step is to annotate your image. To place some labels of each class. I usually zoom in until I can see the individual pixels. Then, I place some labels. I can say, OK, this is background. Label some example pixels. It can be useful to label not just lines to take a blob or whatever, so that it starts to recognise if there are any patterns. For example, you can also just have a go. Place a few labels. You don't need to place so many before you press the live update button. When you press that one, it does automatic predictions on your image. To be able to see the result, because it shows the probabilities, which are not so easy to see the boundaries, how it's really classifying. I usually turn that off. It has lots of different overlays that you can turn on and off to be able to explore the segmentation. I'll turn on the label segmentation. When I do that, I see that it's pulling out a bit more than I wanted to pull out. I'm going to place some more labels. You can turn on this uncertainty overlay. That identifies basically all the pixels in your image, of which the classifier is unsure of the class. By specifically labelling those pixels, you very quickly improve the predictions. I'm going to zoom in. It's always at the boundaries between background and labelling. That helps to place more labels. I'm going to switch. I'm going to say that this is labelling. This is background. So if you had dual colour staining or something, you could also label all the different colours. You can create as many classes as you want. The more classes you have, the more time consuming the updates take. It gets more heavy. I usually try to keep it to as few classes as I can, but definitely if you have two or three or four things that are interesting, you can try and segment in one image. Can you also classify the probabilities of class number one? Very certain, class number two a little bit certain, and class number three uncertain? You definitely could do it. It depends a bit on what you want to do with the image at the end. In my case, I just want to extract the labelling, because I want to take it into the quint workflow to allow me to do a quantification. In a way, there wouldn't be any reason to have this in between uncertain class. You just have to make a judgment, an educated judgment about where you want that boundary to be. You might want to use it for something else, another workflow or something, and then definitely you can do whatever you want to do. I'm going to zoom out. The more zoomed out you are, the longer these updates take, because that actually has to do a prediction of everything in the image. It's very important to be a bit patient and wait until it's updated, because otherwise the program can crash. It's a live thing. At the end, when you feel like you've got all of your things perfectly trained, you would zoom all the way out to do it? What you do then is you can move to... If you think that the image is very, very large, and you think that maybe it's a bit too much for the program to handle, then my recommendation is to train zoomed in and then scroll around to get a feel for how it's predicting in other parts of the image. When you're happy, you can actually select the next image in your series, because the whole point of training a classifier like this is that you want to apply it to maybe a whole series of images, but then you need to adjust that algorithm so that it fits not just for your one image, but also for other images in the series. These images that I've uploaded are in a way like training images, so they're a subset of a whole series. Then you'll run it later on. Then you can apply it to a whole series of images. You can apply it to hundreds of images, and it will export segmentations automatically. You can leave it running overnight, and you don't see anything, but you get that output for everything. This is another image. I'm going to look a little bit. The difficult part with this is always deciding what is labelling and what isn't labelling, is that you have to make your own judgement. It is, of course, easier to make those decisions if you have higher resolution images, so that's always the difficult thing with deciding should I work at a higher resolution, but then the extraction is more time consuming, it's more computationally heavy. I might not get as good output, but I think it's pretty good. It says current view, where you can open any image in a series, and then it automatically applies the algorithm to the next image and does a prediction. In a way, everyone can just play around a bit with their images until they're happy. Once it's finished updating, I'll show you what to do when you're happy with your classifier. Then you go to the prediction export thing here, which allows you to choose your settings for export. You can export different formats and you can combine it. What you want to export is going to depend a lot on what you want to use the image for, but in the context of our workflow, it's only compatible with PNG images, so I want to export a PNG image. I have to have the 8-bit, the unsigned 8-bit. You have to change the type of image to a simple segmentation. I want a segmentation image, I don't want a probability file. If you wanted to do an object classification afterwards to remove nonspecific labelling, then you would want to export the probabilities because that's the input that's required for the object classification workflow. These kind of things are all explained as a user manual on the Elastic website, so there's a lot of information there. Then you just click the export tool. If you want to apply the classifier to a whole series of images, you go to the batch export applet, and then you can upload hundreds of images and apply the classifier, and it will do an automatic export of all your segmentations, but we're just going to apply it to these training images that we have. It takes time, so I think for this number of images, it takes minutes. If you get that far, you can export them. Otherwise, I think we have some images that you can have a look at, some example output. Is there a way to download some of what the classifier is? The actual algorithm. I would have to ask the Elastic team. It is. It is. It probably is. They're quite active on Github, so if you have any questions for them, what to do with the programming side, I would contact them directly, because that's not... I mean, it's already set in the project file, so you can also explicitly write the classifier to disk and then version them and exchange them with the classifier to the images. I know that, because I'm not a computer programmer, I know you can work in headless mode and you can do all sorts of things with it. I stick to just using the user interface. What we're trying to do mainly is to make these tools accessible to people who don't have that programming background. That sounds great. We get questions into our help email at the elements. It's not really significant things. I don't know. That's true. If you have microscopic images with shading artifacts in the four corners, for example, how does the classifier... how stable is the classifier? How stable if you have... If you have continuous shading shift to the borders, there you would have a theme labelling if you want to detect that. How stable does that sound? It wouldn't be able to use the intensity thresholding because that would pull out just in certain parts of the image and not others. So then the textural component might be able to pull things out if it identifies that kind of border between that light to dark textural border that would be present both in the dark part of the section and might still be able to get a good segmentation. But you just have to have a go and see if it works or not. In principle, it's just a training example in the case of the... In that case, it would simply use two simultaneously in the corners and in the center of the image and it should be able to... It should be able to do it. That's kind of one of the advantages. It doesn't learn a threshold or something like that. It's much more complicated. It's a whole range of textural features. Future vectors I mean, you can select the features. It chooses from a whole range of textural features and then it learns a non-linear variation of these features. So hearing from these... fully descriptor I'm not sure if it has explicitly fully descriptor but mainly... You can choose them there. It's a feature selection over there. You select your own features. The features are... It is kind of texture and intensity, color are the features that I can recognize. First and second derivatives at different blur levels and all sorts of stuff. Yeah. When you were training the classifier, you mainly did the pixel classification. You didn't do the object. No. If I wanted to do object classification... This, for example, I think is... This is something that's not specific labelling. I think this was something... some artifact around... something. You could have circled some of those and it could have fallen out for you. If I wanted to do object classification on this image, I would export the probability maps. In the probability maps in the object classification workflow which looks similar to this in that you can... You also select your features. Which features do I want to include in my classifier? But then it has object level features such as object size, object shape, how many spines does it have, where is it positioned in your image? It's kind of... It's a massive list of features you can select from. So I can see that being useful if, for instance, we have people trying to train the classifier for analyzing behavioral videos of a mouse face or something like that. It might not be able to do something really intricate that it might be able to find whiskers if I don't find... Yeah. I think I've seen videos of elastic being used to track mice moving around over time based on they kind of recognize distinct features of the mice and how they're moving around in 3D over time and I don't know... You can do a lot of things with the software so it's definitely not just what I'm showing here. That's all those tissue bubbles. We actually have documented where all those things are. In the... Okay. They had some... Yeah. That's important. Tag them all. Yeah, okay. It's useful I should read a bit more the documentation. Um... People doing this to learn. Yeah. Which would have been a lot easier. Should we see? We can go to session 4. Um... Yeah, so this kind of shows some typical outputs. So this is after the um... Glasby lookup table has been applied because the output that you get from um... elastic is black. Um... I'm going to see if... It's the wrong format. That's silly. I've exported the wrong format here so I can't actually open them. Um... How's it going for everybody? It's kind of pulled out. A lot. Okay, I actually exported um... I was planning to export PNG images simple segmentations but I exported the wrong format and I haven't actually got examples of the black images but if you do export PNG images for the segmentations to apply colours you would use image day so I'm going to open an image in image day. And then obviously this one already has colours but it would be black and then I would go to um... image lookup tables and apply the Glasby lookup table. And you'd get out something like this so this is just kind of a random table of colours that it applies so it applies a different colour to each of your channels just and those colours are um... um... Yeah, it's just a table of colours but you can change the colours by going to image colours and then edit lookup table. So if I want... wanted to look a bit nicer and this is all explained in the manual so it's just kind of... it can be a bit when you're a new user and you start using the software and you just get this black image out it's just kind of oh my goodness it hasn't worked what did I do wrong? But yeah. And then you're ready for the next step which would be to... so if you have these segmentations then you have Atlas maps that you've exported from the quick knee software then you can use the new tilt software and actually get quantitative data per Atlas region. For the next part of the session um... I have some new tilt output so you can open there's actually in the handout there's a link to viewer which is our own um... 3D Atlas viewer called meshview I think the... this handout should also be included in the folder with session 4 so you can open the link um... and then it looks that's right I'm gonna open it and scratch yeah so here this is just to get you a feel for kind of what you can do with the output of new tilt so what I would go to is to hide all the regions in the Atlas and then just switch on the route um... and then you can navigate to some of the coordinate files which are the output of new tilt they're located in the session 4 folder in the new tilt output folder and their jason files so if you select this 3D combined that kind of is the whole the whole image series and then you can reduce the point size so it actually shows each pixel and then you can see how um... you know these are literally all the objects that have been extracted through the segmentation that have been those segmentations have been kind of anchored or matched with the Atlas maps and then the coordinates have been extracted and you can see everything in 3D and you can kind of switch on different regions to kind of see where things are located this is also something that you can just have a play with


Well, hello everybody and welcome back to my channel. Things look different. I am in Austin, Texas for the GoWild conference and I'm in this swivel chair and it's like really comfy, y'all. It's really comfy. I forgot, sorry if the lighting keeps going in and out. It's all artificial lights in here and I do apologize, but I forgot to do a what's in my carry-on before I got here and I literally just checked in maybe 20 minutes ago and I wanted to do what's in my carry-on for you guys. I know a lot of you guys are kind of interested in these things so I figured I would show you what I got and I didn't clean this up. It is like such a mess from the flight, but this is real life you guys. So let's dig into this. First I will show you my bag. I am using this bagalini bag. It's got this really pretty, sorry, it's got this really pretty like kind of chevron-y looking pattern on it and here I just got some basic stuff. I've got my Delta check-in stuff and I've got my receipt from my shuttle that I used to get here and then also, oh my receipt for my water which I will show you in a moment because I didn't finish it all. I've got my wallet. I've got my passport. Oh my gosh. It's a GoWilder person. Let's turn that down. I've got 20 bucks and then I also have my battery charger for this phone which by the way I need to plug in so let's do that. So that's all that's in the purse. I'm gonna move that out of the frame real quick and then here's my backpack. Um okay so I have these little letters on it.  Do you guys see like the side profile? I do have like everything open right now but this thing's huge. I got it from Amazon. I'm gonna link it down below. The straps are like super comfy and cushy and the back is really nice too. It's by a brand called Maitin I think. Um but anyway, I'll link it. So um the little FDE, those are pins and I have no idea where they're from and I apologize somebody gave them to me. So in the very front I've got some things. So I've got a book. Yay my business boutique book which I don't think I'm gonna read while I'm here but I feel like it figured you know let me let me bring them just in case. Oh I've got snacks. I've got some strawberry fruit strips. I need to put that into like a little kitchen area here and then I've got a couple of pens. I got my pilot ultra fine point permanent marker in the black and then I also brought my paper mate inkjoy gel in the 07. I brought some business cards. This is a Kate Spade business card holder. It's gold and then has you bought yellow. Wow sorry white and then it has like a little E on it. So I just got my favorite dotter shop business cards in them. I've got extra business cards because y'all I came prepared and then oh I brought my glasses and um contact case on the plane with me just in case they lost my luggage because y'all I need to be able to see things. Oh and then I have my gum. I can go with my food. Okay so that's the first little section. Oh I think I put something in here. Let's take a look and see. Oh I did. There's things in here. Let's see. Oh these are receipts so this is from the shuttle. Oh this is no this is my boarding pass from the shuttle and then oh I have another boarding pass for the flight so yay. So I did not show you that I have these um little badge things. The badges no they're like tags. I got them at erincondren.com. I'll put a link below. I'm not going to show you the other side because it's got my personal information on there but um I was able to put my logo on it which was kind of cool. So yeah okay so now we're getting into the big section. There's another big section but this is like for computers but this is the big section. Um so first things first I have my erincondren folder which has all of my like travel documents and itineraries and things like that so that's gonna live here on this desk and then I've got all of just some like random things. I've got like tampons and panty liners and ibuprofen and cuticle stuff because my hands are a mess um so that's just that and then I've got stacks, raisinets of course. I did not dig into those uh tic tics. I didn't dig into either but um I will at some point. I did have some myconykes on the plane. I will tell you that but I didn't that's all I ate on the plane and then I've got this. It's like a little organizer pouch that I got at Marshall's or TJ Maxx a really long time ago. They're just mesh travel pouches and this is like all of my cords and plugs that I need while I'm here. I've got my Beats headphones um that I love. They're like the noise-canceling ones and then and then I've got this um it's like Adrienne vititini um I've got some like extra like phone chargers and charging things in here so that's good to go in there. Oh I also have my water that I got at the airport which is gonna go over there and then the last big thing in here. So I've got my computer which needs to go right in front of me and I've got a lot of stuff in the way now. This bad boy is going in here. I've also got the charger connection for it. I brought my um camera doohickey cord to plug in from my camera to upload into my computer and then I have a rain jacket. The only rain jacket I have and um how fitting that it's like this really light lilac color because I'm currently at Go Wild where everything is purple. So that is it. That is everything that fits in this bag currently and um there's actually like a pouch back here which is kind of me like that. I don't know and then you can fit like this is like it's not elastic but you can fit like something there. I don't know. I just thought it was a really cool bag. I just really thought it was neat. So anyway that is it for what was in my carry-on for Austin Texas. Thank you guys so much for watching. If you guys have any questions about anything feel free to post them down below. Thumbs it up, like, subscribe, share, do all those things those youtubers tell you to do and um I will link some of the products down below too if you guys are interested and um yeah that's it from me. I'm gonna go to my conference now and I will see you guys in the next video. Bye guys. Well folks, it's time to kick it old school.


Abstract, this study investigates the role of extracellular regulated protein kinases, ERK, signaling an allograft rejection. Lycorine, an ERK specific inhibitor, was used to treat mice undergoing cardiac allotransplantation. The results showed that Lycorine treatment significantly prolonged allograft survival, suggesting that ERK signaling plays a key role in allograft rejection. Further investigation revealed that Lycorine treated T cells were less responsive to stimulation, leading to metabolic reprogramming and mitochondrial dysfunction. Transcriptomic analysis of these cells revealed an enrichment of genes associated with immune response, the mitogen-activated protein kinase cascade, and metabolism. These findings suggest that ERK signaling plays a critical role in T cell activation and allograft rejection, and provide new insights into the development of immunosuppressive agents. This article was authored by Xiaoxing Tan, Chongxing Qi, Xiang Li Zhao, and others. We are article.tv, links in the description below.


Welcome to Microterrorz. Scary stories for kids. Where it's always the spooky season. Full of chills. Thrills. And spine-tingling spooks. Microterrorz are family-friendly frights for those ages 8 and up. And while our stories are for younger years, we are still talking about things that go bump in the night. And some children may not be able to handle what others can. Parental consent is recommended. Now, for tonight's Microterrorz. The computer crash. Alex was nearly there. 40 hours and 36 minutes into the game, and the final level was almost complete. He had earned more than 500,000 gold coins, obtained all seven of the barbarian gems, and had completed every single side quest the game offered. Under the gentle touch of his hand, the mouse glided across the mouse pad with ease. He clicked rapidly in one area of the screen, sending his warrior character to the final treasure chest. In it was a golden crown with glowing decor around it. Got it, Alex exclaimed with a gleeful shine. A deafening roar was coming from behind his character that he spun around, clicking the mouse to get a better look at the encroaching evil force. Its life bar had nearly depleted. Another couple of slashes and stabs from his ancient sword would put the beast down for good, and finally bring a nearly 41 hours of gameplay to an end, restoring peace to the realm. That was until the inevitable sequel, of course. Alex would have been surprised if a sequel never came. This was by far the best, most exciting game he had ever played in his life. And if he could walk into school the next morning and tell his friends that he was able to defeat the death lord in just over 40 hours, his life would be complete. The computer screen went dark, and the hum from the backside of it faded to silence. Alex just stared at the black screen, his hand shakily hovering over the mouse. He felt his heartbeat pick up. No, no, no, he stuttered, clicking the mouse and hitting random keys on the keyboard. This can't be happening! But it was happening. Alex called for his mother, and together they tried to figure out the problem. The power button didn't work, the mouse didn't work, the plugging and re-plugging didn't work. We could figure this out later, Alex's mom said. Maybe when your dad gets home from work. No, I need it fixed now! Alex exclaimed, his impatience on full display.  It's just a game, Alex. Go outside and play something else. Alex just stared at his mom. She didn't get it. No one her age got it. Maybe it wasn't important to them, but it was to him. He needed the computer fixed. The longer the problem went unsolved, the more worried he became for his progress. He hadn't saved it since... Oh, God! Alex said, remembering his last save spot was before he'd entered the Dungeon of Destroyers.  All of that work, all the lives lost in the realm, all the power his warrior had acquired. If a random computer crash made all of that for nothing... Well, Alex refused to let his thoughts go there. His mom left the room and Alex was quick to get on his phone and search for computer repair companies. His dad wouldn't be home for hours and Alex couldn't wait that long. Scrolling through the list of local companies, one stood out immediately. PC surgeons, we operate stat. The clip art of a man in a surgical mask holding a wiry motherboard was also a quirky plus as far as Alex was concerned. Call for quotes was highlighted at the bottom of the page. Alex raced downstairs to his mom and showed her what he had found. They operate stat, mom, he said. They could come today and fix the computer. No, Alex, she said. You need to learn patience. Wait for your dad. He might be able to help fix it. I can't imagine a house call by a computer doctor would be cheap, either. Please, just call and see if it's too much. I'll wait for dad, Alex said. Secretly hoping it wouldn't be too much. His mom gave in more than likely just to get him off her back about the issue. She called the number and inquired about the house calls. Her eyes widened when the man on the other line told her the price. Okay, thank you very much, she politely said before hanging up. She added the phone back to Alex, just like I thought. They charge an arm and a leg. Please just wait for your dad. He'll be home before dinner.  He smacked the side of the computer, still not believing he was in this mess. I was so close, he said to himself. PC surgeons were still on his mind. His mom didn't disclose the price, they quoted, but surely it wasn't anything he couldn't eventually pay the mag for. Alex made a decision. The wrong decision. Through PC surgeon's website, he scheduled a house call. Within an hour, the computer surgeon arrived. Alex did his best to intercept a ring or knock at the door and let the man in, showing him upstairs to his room where his dead computer sat on the desk. Just crashed, huh? The man said. No warning, no glitches. No, Alex said. I was playing a game and it just went out. I don't know why. The man looked at the computer over and said, Yeah, I think I can fix this. Gotta open it up first. Gotta operate, he said with a wink. Man, they really like to stick to this surgeon bit, Alex thought to himself. Over the next 15 minutes, the man took the computer apart, did his thing, and put it back together. Alex kept a near out for his mom, but when he heard her answer a call from her sister, he knew she'd be busy for the next hour or so. Aunt Harley was a talker. The surgeon pressed the power button and the computer booted up like nothing had ever happened. Alex was ecstatic. Thank you so much, he said repeatedly. The repairman put away his tools and pulled out the invoice. Who's paying for this? He asked. Alex stopped. He hadn't thought about the payment other than paying back his parents at some point. Well, my mom's on the phone right now, Alex said. What about your dad? The man asked. He's at work, Alex said. The man smiled, catching on that Alex might have gone behind his parents back to get the job done. He sympathized with Alex. You know, I have a boy about your age at home.  Alex nodded, slightly ashamed. Look, the man began. I'm feeling generous here. I don't need payment this very second. Just give me one of their names and we'll collect later. Alex sighed in relief, giving the man his dad's name and information. He'd figure out a way to break it to them later. The surgeon tore off the top sheet of the invoice and handed it to Alex. Good luck with your game, he said. Alex walked the man out of the house, checked to make sure his mom was still on the phone, and then returned to his room. Within the next 30 minutes, he had defeated the death lord and returned peace to the realm. Giddy and thrilled, he called his best friend a gloat. Then there was a knock on his bedroom door. Alex ended the call. Then, he said, assuming it was his mom. The door opened and he was right, but she was crying.  Mom, what's wrong? Alex said, jumping to his feet and rushing over to her. It's your dad, she sobbed. What? What about dad? Something has happened to him. He was rushed to the emergency room. What? For what? Alex said, his heart now racing harder and faster than it ever had before. His leg was... Alex's mom sobbed and blubbered so much that it was hard to make out anything she was saying. She couldn't even form or speak a full thought. His arm, she exclaimed next. His entire arm, it was... She had a paper caught her eye. It was laying at the foot of Alex's bed. She focused on the clip art of the man in a surgical mask holding the wiry motherboard of a computer. PC surgeons, she uttered, snatching the paper up in her hand. Shot and betrayed, she looked over the invoice. You did this behind my back? She screamed at him.  Suddenly beating the game didn't seem all that important after all. I said no, Alex. Do you remember me saying no? His mom screamed, do you remember why I said no? Do you remember what I said they charged? Alex's mind raced searching for any answer that would get his mom to stop yelling and then he remembered. Now he remembered what his mom had said. And the words stung his entire body into numbness. They charged an arm and a leg. Thank you for listening to Mike Rowe Terrors. Join us each Saturday for another scary story. For more fun visit our website at MikeRoweTerrors.com where we will also have spooky games you can print out and play like wicked word searches, mysterious mazes and more. MikeRoweTerrors.com is also where you can find us on your favorite social media and even send in your own scary story for us to tell. Plus you'll learn more about our author Scott Donnelly who has other horrors for both young and old. I hope you'll join me again soon from Mike Rowe Terrors. Scary stories for kids.


Troops of Sector 2 Joint Tax Force, not East, Operation Had-In-Kai have been charged to remain resolute, undaunted, disciplined and patriotic in combating the country's adversaries. Chief of Army Staff Major General Tareed Lagbaja gave the charge during the Salah luncheon, with troops in the front line at the headquarters of Sector 2 Operation Had-In-Kai in Damaturu, the Yobes State capital. Lagbaja, who was represented by the Sector 2 Commander, Major General MLD Saratov, said the season brought to remembrance the supreme sacrifice officers and soldiers of the Nigerian Army made on a daily basis to ensure the sovereignty and territorial integrity of the nation were preserved at all times. I intend to consolidate on prior achievements of the Nigerian Army towards ensuring that the complex security challenges confronting our nation are completely decimated. Therefore, I enjoy you to redouble your efforts and give your very best in making this goal a reality. On my part, I pledge to make your welfare my utmost priority. I will ensure all avenues of improving the capabilities of troops in discharging their responsibilities are harnessed. On behalf of the security advisor, Iroh Absalam retired. I wish to congratulate all the Muslim Ummah, especially our gallant soldiers, for Eid al-Kabir u-Barak.