We'll look at this cost flow a few different times a few different ways but now we want to get an overview of that cost flow so we get an idea of where we're going. We'll then look at the cost flow as we go through a comprehensive problem. When we go through a comprehensive problem however we often start to look at the very specific component that we are on in a fairly long problem. So as we do that we want to get an idea and keep an idea in our heads of what the overall cost flow will be so that we know when we're focusing in on one particular component how it fits into the big picture that'll give us some more context, more motivation to learn the particular step that we are looking at. So whenever we think of manufacturing costs we want to think of materials overhead costs and labor and just about any inventory that we think of not just in terms of if we are the manufacturer they include these items in it. It's easy to think of inventory as materials so if we think of a TV we think of the materials that are in the TV but notice that a lot of that is going to be due to overhead and labor a lot of the cost a lot of the value a lot of what it is we just took the raw materials of a TV that wouldn't amount too much unless they were put together to format a TV. So it's important to know when we do a manufacturing company of course we are providing some of those products some of that value so we have the raw materials we're going to have the overhead we're going to have the labor we're going to have to account for all three of those in the cost of whatever we make we make a TV we got to include all of those in the cost of the TV we have to track all those costs so that we can include them in the cost of our inventory. How will that work then? Well if we start with our materials here clearly we will buy the materials whatever is going to be used to create our TV the plastic and whatnot that are going to be used to create the TV we're going to have those and that's going to be a part of inventory and then we're going to start to work on those and once we do that we're going to put it into what we call working process. So working process is us starting to convert whatever the raw materials are to the finished product the TV. So now our materials over here are going to be taken from the materials and put into a working process as we start the job as we start to get going with the process of making. Now we want to keep in mind that this working process this is going to be an account called working process and when we're thinking about a job cost system we're not going to be able to apply anything to this working process unless we can we can assign it to a job. So if it's within the working process we need to have it be supported by a job and that's going to be similar to if we had say an accounts receivable account we can't apply anything to an accounts receivable account unless we also have a subsidiary ledger and a customer to apply it to. We need to know who owes us the money but when we go to a job cost system for working process it's similar. If I put this materials from the materials to the working process account I need to know which job that we're working on and so that's going to be our criteria. Now if it's direct labor if we're making say let's go back to the guitars if we're making a guitar and we're putting the wood in the guitar we know exactly which guitar the wood's going to. On the other hand if we're talking about some of these materials that we don't know exactly which guitar it's going to things like glue things like small components that are going to be included in the guitar it's not worth us to track exactly which guitar they go to we're not going to get a requisition form and say I need this specific amount of glue to put together this guitar it would be not cost effective to do so. So what we'll do is we'll take some of this material and we'll put it into overhead. We can't put it up here yet we can't put it into the working process account because we don't we can't assign it to a particular job and nothing goes over here until we can assign it to a particular job. This overhead is also going to include any other type of overhead that we have. So when we think of overhead in general these are all types of things that we basically expenses on the warehouse where we make things. So that's going to include things like depreciation on the warehouse if we have a supervisor salary in the warehouse we don't know which job that they're working on so it's going to go into overhead if we have maintenance in the warehouse then all of that's going to go to some inventory but we don't know which job to assign it to so it's going to be in there if we have utilities


Hey there guys, how are you doing today? We are back with another video from laptop media And today I want to talk to you a little bit about a very fascinating mid-range smartphone that came into our office Is the Meizu M3 Note, so let's get started Okay, so we are dealing with a unipoddy aluminum construction At first sight it may not exactly seem as aluminum But it really is, we tested it and we can confirm that Additionally on the front we have a 2.5d glass which has curved edges and It's it really is very stylish. It looks great and feels great in the hand The screen size is 5.5 inches and the resolution is 4 HD As far as the pixel density is concerned, we are dealing with 403 ppi which is more than enough especially considering the price Now for those of you who love taking photos with their smartphone, we can say that the rear camera is 13 megapixels and it is accompanied by dual LED flash And its aperture is f2.2, so this is good for low light shots Selfie fans should not be disappointed because on the front there is a 5 megapixel selfie camera More important about this phone is the chip on the inside It's an octa-core Helio P10 which is a contemporary Mediatek chip And we are quite happy with its performance Additionally the battery on this big boy is 4100 mAh which is amazing And the capacity is really really big especially if you compare it to the more expensive model The Meizu Pro 6 which has a much smaller battery And we also mentioned that this one has a fingerprint scanner Which again is a more than welcome feature at this price That's all for today folks. Thanks for tuning in. Be sure to subscribe, comment, share And hit that thumbs up button. Till next time. Bye-bye


How to feed a baby bird?  It's only natural that you want to take the chick in and nurse it to health. But before you do, you will need to take some time to assess the situation and make sure you are doing the best thing for the bird. Has it really been abandoned? Is there a local rehabilitation center that could do a better job of taking care of it? If you decide to nurse the baby bird yourself, it's important that you understand the commitment you are undertaking.Baby birds are very delicate and need to be fed almost constantly. If you think you're up for the job, this article will tell you all you need to know about feeding and caring for a baby bird. Assessing the situation. Identify whether the baby is an altricial or precocial bird. The first thing you will need to do is identify whether this is an altricial bird or precocial bird. Altricial birds are those that are born with their eyes closed, without feathers and are completely dependent on their parents for food and heat. Most perching birds and song birds are altricial birds, for example, robins, blue jays and cardinals. Precocial birds are birds that are more developed upon being born, they hatch with their eyes open and have soft, downy feathers. They are capable of walking and immediately start following their mother around, pecking at food as they go. Examples of precocial birds include kildear, ducks and geese. Precocial birds are much easier to care for than altricial birds, but they are less likely to require help. Precocial birds usually make their nest at ground level and so cannot fall out or be thrown from their nests. If you find a lost precocial chicks, make an effort to reunite it with its mother before taking it in. Newly hatched altricial birds are completely helpless and will therefore require assistance. It is common to encounter altricial birds in suburban areas who have fallen or been thrown from their nest. In some cases, you will be able to put the baby back in its nest, in others you will have to care for it yourself. It is also acceptable to leave the baby bird where it is and let nature take its course. Identify whether the baby is a nestling or a fledgling. If you have encountered a baby perching or songbird who you suspect has fallen or been abandoned, you must first identify whether the baby is a nestling or a fledgling. Nestlings are baby birds who are too immature to leave the nest, as they have not fully developed their feathers and may not have opened their eyes. Fledglings are older baby birds who have developed the feathers and necessary strength to learn how to fly. They may leave the nest and they know how to perch and grip. If the baby bird you have found is a nestling, it should not be out of the nest and something is definitely wrong. It may have fallen out of its nest or been pushed out by stronger siblings. An abandoned nestling has almost no chance of survival if left on its own. If you have come across a fledgling however, you may want to take some time to assess the situation before you pursue any heroics. Though it may appear as if the bird has fallen or been abandoned, fluttering and chirping helplessly on the ground, it may just be learning to fly. If you observe the chick for long enough, you will probably see the parents coming back to feed it at regular intervals. If this is the case, you should definitely not intervene. If possible, put the baby bird back in the nest. If you are sure that the baby bird you have encountered is a nestling, and it is lying helpless on the ground, it may be possible to reintroduce the chick to its nest. First, see if you can locate the nest in a nearby tree or bush. It may be well hidden and possibly hard to reach. Next pick up the baby bird, cupping it in one hand and covering it with the other until it becomes warm. Look it over for any injuries, then if it looks okay, gently place it back in the nest. Do not worry about the parents rejecting the baby due to its human smell. This is an old wives tale. Birds actually have a very poor sense of smell and identify their young mostly by sight and sound. In the majority of cases, they will accept the fallen chick back into their nest. Once you have placed the baby bird back in the nest, make a hasty retreat, don't hang around to make sure the parents return, you will only frighten them away. If you can, watch the nest from inside the house, using a pair of binoculars. Be aware that, in many cases, placing the baby bird back in the nest will not ensure its survival. If it is the weakest chick in the nest, it is likely that it will be thrown from the nest again by the stronger chicks, as they buy for food and warm.If you see any dead chicks inside the nest, then the nest has been abandoned and it will be no use returning the fallen chick. In this situation, you will need to care for the chick, along with any of its surviving brothers and sisters, if you want to ensure their survival. Make a substitute nest, if necessary. Occasionally, entire nests may fall due to high winds, tree trimmers or predators. If this is the case, you may be able to save the nest or make a new one and replace the chicks. If the original nest is still intact, you can place it in a very basket or butter tub with punched holes for drainage and use some wire to hang the nest from a tree branch. Try to place the nest in its previous location. If this is not possible, a nearby branch will do. Just make sure that the location is sheltered, away from direct sunlight. Collect the fallen chicks and warm them up in your hands before placing them back in the nest. Leave the area, but try to watch the nest from afar. The parent birds may be suspicious of the new nest of first, but their instinct to care for their chicks should help them to overcome this.If the original nest is completely destroyed, you can make a new one by lining a very basket with paper towel. Even though the original nest may have been made from grass, you should not line your makeshift nest with grass, as it contains moisture which can chill the baby birds. If you're sure the baby bird has been abandoned, call a bird rehabilitation center. It is important to ascertain that a baby bird has truly been abandoned before taking it in. The most common situations in which a baby bird or birds will need assistance are, when you find a fallen nestling but cannot locate or reach the nest, when the fallen nestling is injured, weak or soiled, or when you have been observing a substitute nest closely for over two hours and the parents have still not returned to feed their young. The best thing to do in these situations is to call a bird rehabilitation center who can take the baby bird in. These centers have experience in caring for baby birds and will give them the best chance of survival.If you do not know where to find a bird rehabilitation center, call a local veterinarian or game warden who can provide you with the information you need. In some cases, there may not be a bird or general wildlife center in your locality, but there may be an individual, licensed rehabilitator somewhere close by.If none of the above options are feasible, or you are unable to transport the bird to the rehabilitation center, it may be necessary to care for the baby bird yourself. Bear in mind that this should be a last resort, as caring for and feeding a baby bird is extremely demanding and the bird's chances of survival are low.In addition, it is technically against the law to keep or care for a wild bird in captivity, unless you have the proper permits and licenses.


I'm an MLG air horn you guys I know that song man Hey guys real estate gaming here today We're gonna be playing the beans simulator in Roblox, so this should be interesting look at all the memes They have I think they have some rare memes too, but I think we have to buy the game pass for that Okay, let's check out the game pass first Oh like there it is rare meme passes rare memes pass how much is it? but Can we buy it? Oh I think we have wait where do we buy it? Okay, let's reset Think we have to buy it like inside the game Okay, so let's just pick a meme right off the bat so we can go okay a sponge Bob Well, thank engine is that Thomas engine? Oh? Look at that What? What is that? Oh my god the lemonade? okay The update is here plays an egg. Hey mister open character options Remove shades. I don't want to remove the shades. You look so awesome.  I'm Thomas Where do you where do you go buy the stuff? Can we talk to this guy? Where do you buy it rules? Okay update? No Snoop dog. Oh Look at him. What's up Kaden?  What's his name is the potato head? What oh oh God okay Where do we go to the store? Oh, hold on. I think I have to buy it through the store on the on the game thing I'm done It should work now What it's not even working Why is it not okay the multi one work devil poof smile anger?  Oh my god Okay, let's go check out what they have over here What is over here? It's just a raster. Oh my god.  Oh My god, look at this you guys How weird is that oh?  Oh You walked in on me Kaden. I was poopy. Oh god. Let's go Okay, yeah, I Think there's like badges like hidden badges around the map, so we have to try to find them you guys But no not to poopy again How to get pizza, I don't know you tell me Or you get pizza by doing the obby. Oh, there's a slice of pizza the pizza's right here. Follow me Follow follow me You want pizza one pizza you want pizza is no Okay, whatever bro. Oh, yeah, there's a reward. Let's reset. I'm sorry Yeah, we have to go and we have to reset a lot in this game in order to pick it another emoji or another thing Okay, let's go to the game pass. Oh, let's go to the badge reward. This is who we'll get of There's no pizza badge reward I thought there was but there's not oh god Okay, so there is it how to be pizza. I don't know okay Oh wait, how do we be time now how to get the item you get the character. Oh really also you unlock different characters If you get oldest be John Cena What oh good even has a levitation animation. Hey that Ryan Hey, you can't see me mr. Skeleton. My god. He's so wild Okay, I See a vent over here. Let's go in there pizza man. What? No badge. We don't get a badge for finding this fidget spinner.  We got a badger guys. I had no idea. I just jumped up here and we ended up in this room What's up, mr. Eyeball? My god, that's so creepy. How do we get out of here? Badger pure you guys bad ship here pizza man Okay, so you definitely have to like snoop around Here here Kate and come to me. Oh No, we're skating. Oh look that guy is around me.  I'm sorry you guys. I'm trying to help these guys up their badges. You know I like helping people sometimes right here, bro.  Come on. You have to be MLG mountain do you have to you have to run press the run, bro Whatever I'm out Okay, that's enough helping people Let's go look for stuff Click run. Yeah, okay. That's it. You have to click run man So far you guys just run randomly Into the walls if you guys want to find the badges that helps a lot like you didn't even know Which you're gonna run into most of the time, but you'll find something random. Oh My god, it's you stuck. I'm inside around me. Oh No arrest the pizza around me. Oh god Okay, maybe there's well, okay. We already got the one in here, which was the pizza pizza Pizza I don't know he says it.  Let's go check out this room There's probably another hidden entrance in here somewhere It says meet the maker, but there's nobody Okay, I don't see anything else you guys. I'm trying to make this video as much as Informals it can So you guys can see where the badges are? Well, maybe up there Okay, I don't know if there's a way to jump up there. There probably is you never know It's always the most random things. Oh god that guy's a shiny star What come on Jocelyn I got I thought they could see us man Okay, uh Doritos no dog. I want to be snow dog. Okay, but I'll pick something that is very uh common Well popular nowadays like at least sort of I say it would be between big smoke, which is kind of old, but hey All these are kind of the reality. Let's see what the game passes. Oh, I air horn I want to go to the rare memes Come on. Why doesn't it work at least does the air horn work? Okay, the air horn works. Oh Where's the air horn No, that's not man. I'm the air horn Kaden I'm the air horn. I'm the horn Okay, uh, can we go in there Wait But wait, there's more. Oh god. That's a dark turtle. Was that a dinosaur? I don't know what this meme is. If you guys don't tell me comment below. I'm not sure Run Okay, let's go look in here normal regular map Maybe oh, okay. So maybe we can find more badges over here. Let's have a look around. I want that character Uh, there's no badge in there. It looks like a secret tunnel entrance, man Okay, let's check this place out Maybe in here wait, you can't even jump up there. Well, you can what? But there's no badge. Wait am I stuck? Oh, no, I'm stuck in here How did I get stuck? Is this like a troll? I think it's a troll you guys. This isn't fair. Oh god. Oh that's crazy guys.   I want to be Snoop Dogg Hot dog Why didn't you say hot dog? I have no idea why if you guys know the story behind that I'm Snoop Dogg Okay, so let's go to the normal world I want to try to get the badges because I like collecting badges I mean, I've only had my account for like two years and I already have like 20 pages Okay, that should be a hot dog. Oh what it dances Oh, wait, that's somebody right That somebody dressed as an easter egg, right Okay, it's kind of hard to find these badges because you didn't know where to go. Oh, that is somebody This is an egg where it lives In the strict swamp. No, shouldn't an egg be out like laying in the grass or something Not in strict swamp Oh, that's Caden No, wait, is that Caden? Yes, it is Caden Oh my god All right, you guys, let's thank you guys for watching. Thank you guys for the amazing support I didn't go to I didn't get to pick all the memes because this is hat have It has a picture of something. Oh, it's Snoop Dogg and I think Dr. Dre on that shirt Okay, well, thank you guys for watching I didn't get to pick all the meme characters But if you guys want me to make a second vid parts of this comment down below so I can Pick the rest of the other memes that I didn't get to choose on this video So thank you guys once again, and I'll see you guys next time


You guys blink you don't want to miss it one of one Sander Bogarts gold auto Bided to stare near souls to fill the brakes


Hello everyone. How are you? Good. We're going to start in about one, two minutes. Who of you is working on data or stream processing area? Just to get a notion. Oh, it's time. Well, my name is Eduardo Silva. I work at this company which is called ARM. We used to be treasured data, a company who was acquired by ARM one year ago. And I work as a principal engineer, but my main role is the maintainer of this project, which is called Fluent Bit, which is a part of this presentation, but not about the main topic in general. And the main thing about this presentation is all about data. And the goal of half data means that we aim to extract value for something, right? We can't have many data, but if we are not able to extract data value, there's nothing that we can do. And we are just wasting space in memory file system. And to extract value, actually what we need to do is perform analysis. If we do analysis, we can extract the value, but we assume that data exists somewhere. It's located into the file system, a database, or any kind of centralized service. And there's acute times of challenges here, because data comes now in multiple ways, in multiple formats, over TCP, file system, system D, sensors, we can say mobile applications, or whatever. There are many sorts of data, hardware. Most of the old hardware, or firewalls, ship data over UDP, over the network. And how do we accomplish this? Basically, a hardware of a software emit some record, which is an event, some bytes, this data gets centralized in a database, and then we access that data so we can perform our goal analysis. So with analysis, we can extract the value. But one of the problems is that we don't have just one single unit sent in data, right? Nowadays, this is increasing a lot. So we have many software, many hardware, sending data and centralized, all this information becomes more complex. And if we think about analysis, it will get delayed, right? Because as much data you have in the ingestion site, the data processing takes more time and your results and analysis takes more time. So extracting value takes time. In the normal workflow, we have that we collect data, we filter the data, then we aggregate the data somewhere, usually a database, then we index that information, because without indexing, sometimes it's hard to realize where to look for the right specific information that I really care about. And then we can perform data analysis. But data indexing sometimes is becoming the bottleneck. And it doesn't matter which kind of database you're running, even can be some kind of elastic search or I don't know, my SQL you have indexing. Without indexing, it gets hard. But if you have more data, your feedback loop takes time. And here's where we start talking about stream processing. We start connecting the dots here. Stream processing, it's the ability to perform data processing while it's still in motion. Likely, it's still in memory. And we can say that stream processing can have a different variation of the explanation of what it really means. But basically, it's the ability to perform all this data processing before this data hits the file system, hits the hardware site, and be stored. Because what we want to do is to avoid indexing. And in the stream processing, for example, we assume that everything is the kind of event. Records are emitted by applications, but we assume also that the events are structured messages. We have unstructured messages and structured messages. And the composition of every event or in logging is always pretty much the same. You have a timestamp, meaning when this message was created, generated, and you have the message. Consider this kind of a JSON as a pseudo format. Like, you have the timestamp, and you have temperature value of 53. One is the key, the other is the value. And we can have many keys and many values. And if you have different applications, the records will be different. Right? So how do you unify all of these? How do you process all this data? With low penalty. Because our general goals are fast data processing, avoid to have tables, indexing, and all that things. I'm not saying that we want to deprecate databases. Because that's not the goal. Our goal is to get faster data insights. But for that, we need different workarounds and different ways to solve the problem. So how do we do it? This kind of approach is like, okay, we put some kind of stream processor on top of a database or anything that can get the data right away and perform all the data analysis in memory. And then we get some kind of real-time analysis. I know that real-time, it depends what it means for who you ask for. For example, for the embedded people, real-time is something that happens in the order of 0, 0, 0, 0, milliseconds. For us, it could be that 20 milliseconds and so on. So the stream processor aims to be in the middle, like a middleware or a layer that allows you to query this information and get the results back faster. So one of the things that we need to have is, like, we receive structure events. And we also, if you're going to query the information, we need to expose some kind of query language, right? Because if you want to query, you have to select keys, you want to do filtering, you want to aggregate certain records and wrote results somewhere. And of course, all of these happen in memory. And when we talk about DH and the cloud, DH can be anything, right? Can be an embedded device. For the cloud space, DH can be a Kubernetes node. So DH is quite a particular term. But most of the deployments of stream processing, we can say that the stream processor runs in the cloud side. And that is good. That is not bad, what I mean. But also, we can do it better. And on our scenario, what people do is usually put some kind of log collector or middleware layer in the edge side, right, where it aggregates all the information from the different hardware software and then shift the data out to the cloud where you do another kind of stream processing. This is a common approach. You can use this or this. That is pretty normal. And this is kind of models. I'm not talking about which product you should use. But how we can make it better? So can we do a stream processor in a different way? And this is where we start talking about logging. And logging has similar challenges. Logging deals with data coming from TCP, the file system, system D, sensors, and so on. Pretty much the same thing that we are dealing with in the other scenario. And if we consider, for example, data from log files, you can realize in Apache log format, it's different than a JSON map and many others. All of them are like raw text format that, for example, you can understand what Apache logs means. But if you keep that value, that string to a computer for them is just a row, you know, an array of bytes and that's it. There's no structure. Maybe you can say that JSON has a structure. Yeah, we have a parser that we apply on top of that and you can read all the information. So a simple message like open source summit and logging gets the message, gets the timestamp, but also the stream from where this message was generated. This is the case, for example, from a Docker container. The application generated a open source summit North America and it created a JSON map or kind of structured message with more data. And for example, if you are using Kubernetes or running a big cluster, usually what you want to add is some kind of context from where this message is coming from. It's not enough to say, oh, this message is coming from this application because that application can be replicated in 10 nodes and you can have many replicas of them. And that's why a log processor also needs to take that information and append metadata, saying, for example, this message is coming from this node and that node and from this pod and that's a pod name, that's a pod ID, the namespace and all that kind of information that gives us context. Because when you do analysis, you want to say, hey, please show me a statistic of all these records that are coming from this specific pod and maybe that pod exists in many nodes. This is from a Kubernetes or classic point of view. So logging becomes complex too.  And this pipeline is very well known and this is where we start talking about the project which is called Flu embed, which is a full logging solution which is part of Flu and D project that aims to solve all these logging challenges. Flu embed started in 2015, it started originally as a solution for embedded Linux, but in a few years it started evolving as a solution for the cloud space and of course it's fully open source in Apache license. It's written in C language, it's tied for low memory and CPU footprint. We say that we use around 500 kilobytes, but if you're ingesting thousands of records of data, your memory will go up, so it depends on how you look at it, and it has a plug-able architecture, we support more than 50 plugins, and plugins means inputs, parsers, filters, or places where you can send your data out, and it has built-in security with TLS and networking I.O. And in logging, in our case, it's pretty much the same, the application generates an event or a record for us. That record has a timestamp, we got the message, and that message all becomes serialized in binary. We don't use like a kind of internal JSON, because it's quite expensive to compute, but we use message pack which is really performant. And when we get this data in Flu embed, then we perform all this kind of aggregation internally, we group all the records by tags, they go to the storage interface, and they're wrote it out to any kind of output plugin, because maybe you want to send the data that belongs to Apache to Elasticsearch, and maybe you want to send all your syslog data, I don't know, to a custom HTTP endpoint. So you decide how to collect the data, and where to send the data out. Nowadays, Flu embed is deployed more than 200,000 times every day, so which is a lot in the cloud space, and it's being adopted widely by AWS platform, and Datadog is contributing back to, because they want the Flu embed can talk to Datadog cloud service, that is upcoming work. So how this correlates, meaning stream processing, login, and the edge. And the proposal here is pretty much connecting all the dots, because we're solving the same problem over and over in the cloud and on the edge. Having that now, the edge can be anything, and also if you consider embedded Linux or any kind of gateway, we have enough power to do a lot of processing, so we can defer some processing inside, do it in the cloud, you can do it on the edge. And the big reason for this is because performance, and performance, I mean, get our insights or extract the value faster. So if you look at the login paints, actually most of the paints is accessing the file system, collect the data, do the parsing, and then we have the data indexing, which is more expensive. And this is where Flu embed 1.2, which was released like a month ago, comes with full stream processing capabilities. Full, I mean a basic set of stream processing capabilities for the edge and growing. So this is usually the model that we saw a few slides ago. And actually what we do, since the new version, is that we integrate a full stream processor in the same Flu embed project, which runs in C code in a few hundred kilobytes, and it's very reliable. And why I say that this is really important, because if you want to do stream processing for small things, you have to deploy something maybe like Kafka, Apache Spark, or something that you don't want to deal with. Maybe it's very useful for a lot of amount of archive data, and maybe you don't care too much about the response time for data processing. But when you are on the edge, when you have thousands of notes, and maybe you want to get some alerts, but trigger something A, the CPU is going too high in a fraction of seconds, you need something like this. You cannot wait minutes. And how this works, in the same pipeline that we had, after we stored the data, well, in the storage engine, we send the data to the stream processor, and the stream processor is able to ingest back results in the same pipeline. And how this works, actually we provide a way to run your own SQL queries to select data, filter, and create your new streams of information. For example, you can do stream selections. You can select keys. I think that you're quite familiar, but here there's no database, there's no indexing. Actually, you get the same fields because all of them are key values, and you query the streams, which could be your tables, where the data is coming from. The difference is that the data is always flowing, and you perform the queries as soon as the data is flowing through the engine. We can do aggregation functions, because if you're doing stream processing, actually you want to aggregate the data and perform calculations right away, so you calculate average, minimum count, and so on. And, well, for embedded, also, this is really useful where you can do some kind of window tumbling, meaning that, for example, every five seconds calculate the average temperature of this specific device. And this is really useful because, for example, for each things, you want to measure CPU, you want to measure memory, or you want to measure any kind of things that generate information in your device, you can do it because you can connect to internal metrics of the system, you can collect data from log files, or listening for any kind of, I don't know, system D information, and perform some actions with the results that you get from your queries. And this is a way to create streams. We're going to see it in a demo right now. And, okay, let's do a demo. I think this is more easily. And the demo, the first demo is just a log file, it has a million records in a file, and actually, I only want to retrieve all the records where country equals United States, and number is equal to 80. So let me show you here. Can you read it? It's okay. Okay. And let me show you the data file. I'm going to code it. Okay. This is like a plain file that has many records. I just applied JQ to see how the data is formatted. We have a date, an IP, a word, a country, a flag, and num. And this is where we're going to apply this kind of query. And the query will be pretty simple. First, we're going to create a new stream with the data we just care about, right? And let me show you how we configure all of these, and we can start working. So we're going to do, like, basic stream processing and then do something more advanced like data forecasting. Fluent Beta, it runs as a service, and it has, like, a configuration file or you can run from the command line. Basically, you define input, and you define output. You can add filters in the middle, but we are not using filters here. What we're doing here is using the tail input plug-in. Tail just follow a log file and consume the new entries that we have. We're setting an alias called open-source-summit and going to read the file which is called data.log and apply a parser JSON. Because if we look at the data that we have here, for example, I'm showing the first line of data.log, you will see that there's a byte of strings. But internally, you want to have this kind of map in a binary version with key and values. And for that, you need a parser. Okay? That's why we're using JSON. And are you familiar with Elasticsearch? All of you? Okay. Let's do a test with Elasticsearch to see how it operates. Meaning comparing how to do Elasticsearch and without Elasticsearch. Let me check that it's running. Okay. Elastic is stopped. Let me start it. And we are going to wipe Elasticsearch. Because I don't want to have any kind of old information. Don't do this at home. Okay. And just wipe the database. And if we query the database using the HTTP endpoint, we can see the data that we have in the database. There's nothing. There's just headers. When you get data, you get more records saying the number of documents, bytes, and so on. So what I'm going to do here is to query the HTTP endpoint of Elastic every second on the right. Okay? And on the left, I'm going to flash data every one second to be more friendly. And we're going to send the data not to the standard output but to Elasticsearch. And we're going to format the data for them. Logs-format on. You can have many outputs. But now we are going to take the data from one log file and ingest the information into the database. We're not going to use the streams now. Comment it out. Okay. Should be good. Okay. And now we are seeing the documents. Let me increase this one. Oops. Terminal thing of something happened. It's running but it's not responding to the HTTP endpoint. And this was expected. When you're sending too much data to a special database like Elastic, sometimes it takes so much time to index the data that stop responding to the data ingestion. And some of you are smiling because you know that this is true. And the goal of this is not to explain how a simple database you can crash it, but how the data indexing can hurt all your data ingestion and pipeline. And computing everything is about buffering. If you have a huge buffer of data, and you know the output can handle this, you're going to get back pressure, but you're sending more data, and sometimes if this guy cannot handle that, it will stop working like that. So Fluentbit is trying to send the data. Say, hey, I got a connection problem and stop it working. And we just tried to send some amount of records. Happens that we did it too fast. We filled their buffers and it crashed it. Okay. Okay. Let's stop. Well, I don't need to stop it. Because what it wanted to do is to replicate this. I wanted to insert the million records in Elastic and then be able to query the data. Now, if I wanted to do that, maybe we can try this. This is the friendly elastic search setup where we decrease our buffers and we put our limits. This is the important line here. Mem buff limit means that I'm not going to ingest more than 10 megabytes at a time. So I read 10 megabytes and try to ingest 10. And I keep waiting. On that way, Elastic might succeed. Let me start it again. Let's wipe the database. Oops. Let's not start. It's running. Okay. And we're going to now ingest. I just started Fluentbit again. Just put some limits. And you will see that the number of documents here is growing. So if I decrease the amount of data ingesting, it's able to work. If you call any kind of database company, of course they will tell you, hey, put two more nodes, three nodes, four more nodes. And sometimes you can handle that in the pipeline. And this is working. But as you can see, it's taking some time because we are trying to index a million records. Okay. So if that took like a minute, it will take like two minutes in total. We are half of it. Okay. And this is working. I'm going to stop it because we don't really care about it. The thing is I don't want to wait until that finish to perform my query because I want to have my information. Okay. I'm going to stop Elastic. I don't want to run out of memory. I will stop the engine here and let's do something right now. The stream processor, it's able to provide your SQL queries to run on top of your data. So we are going to create a new stream of data with the query that we have there. We are going to create a new stream called results. We are going to tag those results with the name results. And select just specific fields of my original data from a specific stream which is called open source summit which comes from tail. And then with that specific condition. Nothing fancy. And if I'm not wrong, that query is in this configuration file, which is here. The only bug is that we support one line configuration. We are going to fix that otherwise it becomes unreadable. And I'm going to enable stream files. I don't need the limits. And I'm going to send the data to the standard output. I'm not going to send the data to Elastic search because I want to get my results right away. So this is not needed. I'm going to flush the data faster. Let me do it this way. I forget to do something. When you are doing the standard output, it's always good to format the data. Format JSON lines. So you get all your data. Oh, but we are not getting the, oh, we are getting all the data. My fault. Because we just want to match results. Streams, that should be fine. So now we are getting the results from the stream processor. We are parsing to the standard output. I'm trying to say with this that you can do a lot of processing. It just finished it. A lot of processing in the edge. And you don't need to defer that to the cloud. And what are the benefits? One is performance because you get your data faster. Second, you don't need to saturate your network band. Your network, right?  And not thousands of records. And now think if you are in the embedded space and you have a thousand of sensors, you want to send all the data samples of every sensor to the cloud? No. But that's what we are doing, right? With this, we can do it better. Meaning we can put some gateway or the same sensor device just leaving how much data we are really sending to the output destination and we are getting data faster. Right now, I'm sending the data just to the standard output. This is just for a demo. But we can send it to an H2DP endpoint. Maybe you could connect to a Slack or whatever and send this result what you really care about. That is one of the use cases for extreme processing on the edge side. And the other, if you like about machine learning and all that stuff, and honestly, I'm very new in that area, we just, one contributor for ARM just provided this linear regression implementation where you can do some forecasting for time series. It was a quite simple implementation, but let me show you how it works. The query is like this. We have one plug-in and flow-in bit. We just collect memory, say, how much memory we have, how much is used, and how much is free for the system that is running. So we created a new stream called forecast. We are adding a new tag and we are selecting the data using a time series forecast function, which is a linear regression internally. When we pass a timestamp, the memory is set and a special number is atop. The stream, and this is important, a window tumbling of 10 seconds. That means do all this forecasting every 10 seconds. In reality, you want to do it every minute, every 30 minutes, or you want to do some kind of hopping. The first window will be 30 seconds, the second window every 40, 50. You can configure that. Okay, so let me show you. This is the stream's file. Now we get more complex because we want to create a new stream with the first data of the memory because at the moment we don't support nested functions. For example, here, this is something I wanted to explain, we are using time series forecast because here we still don't support to put this function inside the other. So we create two streams and it works like a chain. So it's the same thing, but it will be beautiful to have some kind of unix timestamp, something like this. But it's not supported, but you can send as a patch. Okay. Oh, yes. Okay. And the configuration file for that one is this. The difference is that I'm loading the other stream's file configuration. I'm collecting data from the mem plugin. I'm tagging that with mem stat where I'm putting an alias. And I'm going to send to the standard output all the results from the memory calculation. But for everything that matches a forecast, I'm going to send it to a remote endpoint. On this case, I'm going to use one flow embed and another flow embed that the other will receive the results over the network. And this is pretty simple. I'm going to load flow embed here from the command line. I'm going to receive messages or collect data from the forward protocol, which is a TCP protocol that we use in flow embed. And I'm going to send the results to the standard output and format JSON lines every second. Okay. On the right side, I'm just listening for the forecast messages. And this guy is going to connect to this one. And if I'm not wrong, the forecast will run every 10 seconds. So right now on the left, you are seeing the snapshot of memories because the input plugin collected many data and just printing that information to the standard output. But every 10 seconds, I'm getting a forecast on how much memory will be used in the next 10 seconds using linear regression. We're not going to explain all the algorithms right now because I didn't write it, honestly. But this is the idea. And the idea is we're planning to add a many kinds of machine learning algorithms on this. And of course, you are more expert than us on this. And if you have some ideas, use case, we would like to hear about it because I think this is really useful because this is just to run on the edge. And we are just running a few kilobytes. There's not a database. There's not a Java environment. And I think that you got my point at the moment. That was the presentation and takes on March for attending. We have time for questions. If you have any questions, comments, what would you like to see? For the parsers, we got many kind of, we have different ways to parse the data. One of the backends that we have is using regular expressions. And down here, we also support a JSON backend. We support a log format, which is kind of how Golan created the login format and so on. So the thing is that you configure your own parser for your own data type. We have more internals of fluent bit if you want to see how it works. Okay. So we have time before we go to get some beers. So basically, it runs as a single engine. It runs in asynchronous IO with input line filters and everything is asynchronous. There's no blocking calls internally in the code. And this is really important to say because people say, hey, how many threads are you running? We are not running threads. We are running coroutines. So every time that we are going to do some kind of IO to the network or to a service, we defer the task to the kernel, we get back to the event loop and just wait for the notification to wake up the functions. And this, for example, if you consider the output plugins, we are going to ship data out, which is a more complex task, I would say, is that there's a common workflow, create a TCP connection, convert the internal representation. Do you remember that we talked about the message pack? Okay. Because elastic search is waiting for a special JSON payload. But we have message pack. So every output plugin needs to format the data for the output. We write the data, wait for a response, and report the final status. And all of these lines that we have been read, most of them are like blocking calls. If you write any kind of programming language, unless you are doing a synchronous IO, you need to perform some weight on that code, or a visual weight. This is a plugin, and this is a fraction of the elastic search plugin. And what it does, basically, in line eight, using the Fluent Bit API, is connect to the remote endpoint, on line 14, format the data from message pack to JSON. We create on 17 an HTTP client, but that is not blocking because that's just a context, but on 21, there is network operations. And what we do in the code, if you use this API, if you look at the function, you will see, oh, this is doing step A, B, C, D, and so on. But internally, when it hits number eight, it tries to connect, but it suspend that function on that moment. And return to the loop to collect data, transform parser, and at some point, that function is resumed once the connection succeeded or got an exception like an error. And we did it on this way because we as developers, we are very good at mess-up things. And when you're dealing with networking, you don't want to defer that job to the developer because a socket can fail, maybe you can get a status server that you're not handling, and you want to abstract all of those things. And it's the same line, the same with line 21, when we send the data to the server. And when we send the data out, we can return a status saying, hey, we flushed the data, okay, we need a retry. A retry means the database was down, I was not able to perform the connection, or maybe an error that means that I'm not going to retry this data. Maybe the data was malformed or the client cannot handle it. We have built-in plugins, sorry, built-in helpers, like HTTP client, upstream connections with TCP, TLS, OAuth2. The only one that uses OAuth2 is the Google Stackdriver plugin, timers, and we support LuaGit, so you can write also your own filters in Lua.  We have more than 50 plugins, but this is just a few samples of the ones that are available. Input to collect on tail, kernel log messages, serial interface, we can filter the data, put some limits. If you're using Kubernetes, you're going to use a Kubernetes filter, and output like Splunked as your Kafka, or anything that you are running. This is like a simple Lua filter, because in some filters, you said, I would like to remove some special entry from the record. But you're not going to write a C plugin for that. We wanted to have something more simple that you can write in the configuration, and you can use a simple function in the configuration, like a Lua table, and you just add or remove records easily. If you like to do monitoring, and I'm sure that everybody does it, we have a custom HTTP endpoint, so you can get a matrix of how the fluent bit and the pipeline is working, and we also can export the data in Prometheus format. So if you use Prometheus, you can collect and pull the metrics. That's the last slide. Well, that was the presentation, and I will be around. If you have more questions, feel free to do it. We have the project stickers if you want to. We don't have t-shirts this time, but we hope it should be. That's it. Thanks for coming.


Hey everybody if you're looking for a low carb breakfast I've got one for you today I'm making almond flour pancakes And I'm also going to add a little bit of coconut flour in there to sort of improve the texture because I think it's a little bit better That way it's a little more fluffy and light more pancake like what this is going to do for us is give us a lot more Protein in our breakfast more fiber and it's going to be low in carbs, and it's really delicious So I'm rockin Robin, and I'm going to show you how to make it right after this So we're going to start off our recipe by mixing all of our dry ingredients into the bowl first So first up is our almond flour now You want to use almond flour that's blanched because it's a fine a finer grind on the flour Which means that the texture is going to be much more Regular flour like so you want to use that so it's not grainy next up is our coconut flour Which I'm using here that's organic, and then we're going to add some cinnamon some baking powder We're using quite a bit of baking powder here to help give some lift to our pancakes. We'll add some sweetener now I'm using monk fruit sweetener here. I get this at Costco monk fruit sweetener won't raise your your blood sugar So that's why I like to use it, and it's a very nice, you know, it's a very good sweetener It's a one-to-one type you know replacement for sugar, and you know, you're not using regular sugar So that's good now. We'll use a pinch of salt, and then we'll blend this all together Now we're going to work on our wet ingredients so in this bowl here. I've got a couple of eggs I'm just going to scramble these a little bit just so they mix in a little easier without too much mixing Into that I'm going to add a little bit of vanilla extract That's probably about a teaspoon or so, and in go our wet ingredients So I've got a couple of tablespoons of avocado oil. I'm using avocado oil here You could also sub in coconut oil. You just have to melt it if it's hard, you know if it's solidified and Then we'll just add our eggs to this And some almond milk. I'm using unsweetened almond milk. You can use any milk that you'd like They'll all work and we'll put that in And then we're going to take the whisk and blend it up And if it's still a little thick you can always add a little more almond milk to this There we go. That's all there is to that It's ready to start cooking So I've got my pan a large frying pan here non-stick over some medium heat Now I'm going to put a little bit of butter in the pan. You can use coconut oil if you prefer It's always an option And let that melt and just kind of coat the bottom of the pan with my my butter here You don't want to put your pancakes in there until you see the butter starting to you know bubble up And you know the pan is hot Okay, you know just Put a little dollop in there smaller pancakes are just easier to handle don't overcrowd them in the pan And I think you can see kind of the bubbles that are in the pancakes and that's from our baking powder So I'll put four in the pan All right, you can see our pancakes have fluffed up a bit and we'll have a peek see how they're ready Oh, they're nice and golden. So we're gonna flip them over Now if you make them too big they're harder to flip So that's about as big as you want them to be So we'll cook these for you know, three or four minutes per side depending on how high your heat is And then we'll flip them over and cook the second side until they're golden brown All right, check the second side These look like these are done So I'll set these aside and cook up the rest of my batch I'll add a little more butter to the pan So we got seven pancakes out of this batch. You can easily double this recipe So what you're looking for here is the top of the pancake gets sort of the dry look to it And you can see the bubbles and that's how you know, it's time to turn it over All right, so here's our pancakes. They cooked up nice and quick Nice and golden brown. Check that out Now you want to serve these up with some nice real maple syrup And if it's cold from the refrigerator go ahead and heat it up in the microwave And that way it's nice and warm to add to your nice warm pancakes All right, so I'll just drizzle a little bit over And we're going to take a taste here Now you can see here nice and fluffy It's got a nice buttery taste to it because of course we cooked it in butter It's got a little crispy edge on it, which is nice And there's a hint of coconut to it not it's certainly not overpowering but very delicious guys Give this a go And let me know what you think Now if you'd like to try another almond flour recipe of mine I have one for you that you really should try. I'm going to leave a link for you It's my banana bread almond flour Recipe and so just click that check it out. Let me know what you think of that one. Thanks so much for watching I do appreciate it. Don't forget to subscribe and we'll see you next week for another delicious recipe


As I told you in the beginning, I would like to actually share with you an experiment in take home tests that we have been doing and we have found it extremely useful. So, let me explain to you what that notion is and in the process, I will also give you a set of additional problems which we had used in one of such take home tests and their solutions, all of which has been uploaded in the Moodle. So, you can examine those things in details. I just wish to briefly explain the concept behind this. As I told you right at the beginning and as my friends, Professor Sridhar Iyer also have explained that learning has many facets. Classroom learning and lab learning is one thing, but assessment and learning through assessment, treating assessment as a learning tool is an exciting possibility. We try to implement it here through take home test. We will see a sample take home examination paper after examining what exactly we mean by a take home test and then we will just see one sample model answer and question, but later on as I said you can look at the details later. Now, first before explaining the concept in any more details, let me show you a sample announcement that you can make to your students. The basic concept is very simple. Instead of conducting an examination in a regular classroom where all 60 students come, there is a 2 hour exam. Let us say you set a paper, give it to them. They all write the answers. So, you spend your 2 hours in conducting the exam and then you spend 10 hours in evaluating those papers. Now, you have to do this if this evaluation is mandated by the university and you have to count it towards marks, but suppose you want to give the students an experience of learning through examination, then why should you have to waste so much of your time and why should students have to come merely to get that experience, although no marks are going to be added to his or her total grade. The take home sample test is a concept where we give a test. The students attempt the test at home. The students self evaluate their answers and the students discuss those answers with others. Thereby, they learn more. Two things are realized by this experiment. One, they actually get a realistic feel for an actual test or examination which will be conducted later. So, this is a trial experience for them. Second, they are not tense because their score or their answers are not going to count towards their mark. Third, they can do it at the leisure of their hostel room. Fourth, although we prescribe a time of 2 hours, they can spend 1 hour now, 1 hour later. Fifth, although we say 2 hour test, they can actually take 4 hours and write their answers because they are doing it for practice and for fun. Sixth, after they do it, they get to evaluate it themselves. Now, how do you evaluate? You have to look at the model answers. Please note that if I have actually given a test, I am sure I have made some mistake. I am more keen to read the model answers and compare what I have done and I would like to do it immediately, not 2 weeks later when you return a formal answer book led to me. Therefore, there is a greater chance that I will learn more by comparing my answers and the model answers that you have given. In another attraction, we suggest after doing this, please discuss with your friends why you think your answer is treated as wrong answer in the model answer case or maybe you have found an alternate way of doing things which is also correct and more importantly, when you discuss with 4 or 5 friends, then learning increases. Please note that these discussions and such things the students will do even when you actually conducted exam, but the difference is you conduct the exam today, then you will take your 5 days, 7 days, 10 days to correct those papers because you do not have time and by the time you return those papers, the only thing students are interested in is finding out how many marks they got, not the exact details of the mistakes and learning. Some students may be interested. This experiment we believe has permitted us to do all of these things. So, let me show you a sample announcement similar to what we make here. A take home test is published on the Moodle. Of course, we use Moodle. There would be colleagues who do not have a learning management system. So, you should also make it available in a printed form. The expected time to be spent is written here. It was 2 hours for the sample test that I have included in this session. Next instruction says, solve it on your own before such and such time. Why? Because at this point in time, I am going to publish the model answers and the marking scheme. So, obviously they should finish this off, otherwise there is no fun. They will already know the answer. There are some detailed instructions which are useful because they are handwritten answers. You would like to share, to be shared with other colleagues and you would like some commonality. Otherwise, people will come up with 20 different sizes of papers. So, here is a session that uses a set of A4 papers. Write roll number, name and lab batch on the top right corner. Note start time and time. When you finish and write the duration. Now, here is an interesting instruction. Discount any time when you are not attempting the paper. So, suppose I start at 12 o'clock. At 1 o'clock, I get hungry and there is lunchtime in the hostel. I go for lunch, come back at 2 and continue. I should be permitted to do that. I will not count that one hour in between. This is an interesting instruction. Two hours is an indicative time. Do not worry if you take longer in your attempt. But remember that regular examinations will have such type restrictions. So, simultaneously, I am telling the student two things. One, be relaxed. However, remember that you are doing this practice to later on appear for an exam where there will be a constraint of time. It is unbelievable how students very properly respond to such things. By the way, we ask students to do this self correction, consult other students and understand it better and then submit their answer books to us just for our perusal and recall. When students do that, we just look at the duration of the time spent and so on and we find some very interesting things. There are people who take longer time. There are people who have completed the paper earlier. People who have completed earlier might have got more marks or less marks, all kinds of things. And invariably, all students have responded almost without exception that they have enjoyed this exam, which means they have learned better. Anyway, the other specification generally is open book exam, but the attempt has to be your own. That means do not copy from anybody. It is not worth it. It is not required. Anyway, I am not going to count these marks for anything. This experiment is followed by a sample paper. The additional announcement says after you complete the paper, just keep it aside. Model answers will be put upon such and such date. Evaluate your paper. Count the total marks you score and write it below your name on the front sheet. Discuss your performance with your friends and with colleague members of your lab group. Why? Because the lab group is like a team. Three or four or five or six people are going to work on a project. And if they are going to work on a project together, it is better that all of them assimilate this knowledge amongst themselves very well and discuss with each other. I have found this to be an extremely useful thing. We ran it twice, once before the mid-sem and once before the end-sem. They also got a hint of what kind of, what type of questions may come in the actual exam. As I told you, I have included a document called sample examination paper and model answer. The document contains both the questions followed by answers. The sample paper was of course shorter, but this is the sample with model answer. The question one says the following program segment is executed with input formed by the last two digits of your roll number. If your roll number is 11d50038, input is 38. Write the exact output. This is a four mark question in a two hour test because we can imagine that one need not spend too much time in it. In fact, this is the simple type of question. Notice what the program does. It reads the value of r that you given. Then it is some fancy calculation. It divides r by 10. Then it adds modulo 10 to it and then it takes modulo 10 of the whole thing. That is the value n. If n is 0, n is reset to 10. We just check whether the student can quickly do these computations with his own, his or her own roll number whose last two digits were input. The first output that comes out of the program is value of n is so and so. Please remember the question is write the exact output. This is not the program. This is just the starting part, but one output is prescribed here and he writes the, he or she writes the n here. Next, for some value 0 of a, it runs an iteration for k equal to 1 to n. Adding to a, the value of k every time. k is also incremented. So, this is a iteration without anybody. The actual activity is happening inside the iteration control statement itself. You can very clearly see what is happening is that since k is being incremented, it varies from 1, 2, 3, 4, 5, 6, etcetera. Since I am adding that to a, I am clearly trying to find out the sum of n natural number. The output is a is this. Next, b is equal to 1. m is equal to 1. While m less than n by 2, b is equal to b star a. You can again find out what it does. I increment m and in this, I iterate around this and I output b. I have given some fancy calculations here to find out whether the student understands how these iterations, how these computations work. At every stage, I am creating an output a here and output b here. Similarly, there is an output c here with some other iteration. Now, notice what I have done. I have written a program which has four segments. You will recall my discussion earlier on auto grader where we said I should be able to give partial marks to a question even if a student has made a mistake in one place. In this particular case, the student might make a mistake. Let me go back. The student might make a mistake in correctly calculating the value of n. His roll number is something and the n that he finds is something else. However, in his answer, he is going to write what n he has found out. Now, with that value of n, I can examine the remaining answers and still give mark for the correct interpretation of this code. Here is a model answer to question mark. It says first find n by adding the last two digits of the roll number, then calculate modulo 10 remainder of that sum. If n is equal to 0, reset it to 10. That is all that small piece of code. Now, for 10 possible values of n, the values of a, b and c will be as under. So, here I have listed. If n is 1, a b c is this. If n is 2, a b c is this. If n is 4, a b c is this. Please note and let me revisit this program again. The calculation of n depends only on your roll number. The calculation of a depends only on n. The calculation of b again depends only on n. It does not depend on a. So, these are all independent segments. What it means is, if you look at this model answer, a student may make mistake in any one of them, but it will not affect his or her effort in the other segment. These kinds of questions are useful in discriminating student. The more meticulous people will never make a mistake in any of these. Somebody is smart enough to understand, might goof up in calculations and make mistake somewhere else. But I would be terribly worried if someone makes a mistake in all four of these. That means that student has not understood the basic concept of computations and simple iteration and is a fit case to personally meet and handle. In fact, this is the main reason why we collect all the papers from the student. It tells me two important information about two important groups. Students who desperately require some help because they have not understood the basic concept and students who have scored extremely good marks in this take home test. Why do I need to know them? I must know them because I must call them on a Sunday and tell them, you guys are very smart, but now try to solve these hard problems and encourage them to attend something much better than what they have so far ahead. So, you see it is a learning experience for the students. It is also a feedback to the teacher given by the students in an absolutely homely environment without any tension of the exam or something like that. My recommendation is please try to do such a thing and give me a feedback and get yourself a feedback on whether you find such an attempt useful to both students and to you or not. Please remember you still have to spend time in setting the paper and setting the model answer, but once you do that the rest of the work is distributed. Evaluation is done by individual students, discussion is done by individual students, all that you get is collect back all the mark and you are not interested in the mark, but you are instead interested in finding out groups of people out so that you can pay more attention to both the extreme, the very well performing students and very poorly performing students. Not waste your time, I have written this note to the workshop participant. Go through the sample exam paper and the model solutions which have been loaded on the workshop model. It is a full paper, there are nine questions. Go through these, you will notice that no marking scheme has been given and thus partial marks cannot be awarded by students. Please note, there are not experienced teachers who are evaluating the paper. These are students. In fact, even if you and your TAs would have a problem in evaluation, if you are not worked out the partial marking schemes or marking scheming here. Now in this case for question one it is simple, one mark for each correct output, but for question two, question three, question four, there are totally nine questions, I think nine or ten. Of course the answers to the last few questions are not given because one was an optional question. That means it was a bonus question. If you solve it you get more marks. What I have done is I have included only the model answer, but I have not included the marking scheme. Similarly, I have not included answer for a what you call the optional question. My request to you is when you meet in the team in the lab session after of course you examine and explore those five processing programs and so on, do the following timbers. Allocate questions between members of your team. Define a marking scheme for the allotted questions. So, you have four of you or five of you or three of you, allocate these nine questions. Quickly go through the answers. You do not waste time in solving those problems. Model solutions are given. Read through those solutions. Again you do not have to be very fidgety about reading each and every line. Broadly find out in what components you can divide that answer and how you could award partial mark. Somebody had suggested negative marking. You may also indicate that this if somebody does something like this it should be given minus one mark or whatever. After that discuss these and finalize the marking scheme for all questions in the sample paper. Now I do not want you to do any submission for two reasons. One it will waste your time and second it will put a load on model and model is already cracking. But it is important that this small effort that you do. It may not take you more than half an hour or so. But my request is please spend that time. Why? Because this is the kind of collaboration that your team would be doing subsequent to end of this workshop. Remember you have to set quiz questions of simple, medium and complex difficulty and you have to set a test question. You have to give model answers for all of them and you have to of course define a project that is a separate thing. This little exercise of half an hour will tell every one of you in your team exactly what is the approach each one takes. You will get to know each other more in the context of this kind of exercise. I believe that it will help you coordinate your activities better later. No submission is required on the model as I said. There is a submission required related to your team activities and that submission is to describe the logistics that you are planning to complete this assignment. That is how have you allocated work. So you will have to have a major discussion in the last session today where you will say alright I will do complex question, quiz question, you do the test question or two of you will do this, maybe project definition or something like that. You first volunteer otherwise the project team leader will have to allocate that task. You will have to define the logistics of when you will interact, what is the deadline for first submission. There has to be some kind of a peer review. So you must send emails to each other on or before the deadline. Then you must review in the stipulated time and give a feedback and within one or two such exchanges you must come up with the final form in which you might want to submit simple question, medium question complex. You must give enough time to the coordinator to type in, you will always give soft copies or email but the coordinator will have to consolidate these in the format in which the final thing has to be uploaded. Now this is not an extraordinary exercise but I want you to utilize this to define collaborative mechanisms and understand them better and follow them better. So I have now, we have done the college of engineering. My question is related to structure. When we define the member of structure once we specify the bit field. So what is the actual use of that bit field? Now we have not discussed the bit data type. The bit is actually one bit and you can define an array of bits. These bits are often used in programming an individual bit can only be used as a flag. It is either true or false. It is either zero or one. Now there are several situations. For example, you want to represent, let us say certain, let us take the case of the student record itself. A student has roll number, a student has this, a student has that. Now consider that you have a record in which you are keeping information about the marks scored by the student in four different examinations. You are keeping information about whether the student has paid the fees or not. You are keeping the information about student has cleared the hostel dues or not. Now that information will be there in the fees paid on this date or the marks scored so many etcetera, etcetera. But if you just want to know whether the student has done this or not done this, then you might define a bit field, an array of bits in fact, say 8 bits or something in which each bit is set to either zero or one depending upon whether the student has appeared for the exam or not appeared, whether the student has cleared the hostel dues or not etcetera. In data processing, when you read the record, you need to just look at these bits, do some and or operation and you will be immediately able to discover things without processing the details of other information. This one such you said, you can think of many you said, wherever you need to keep information about yes or no kind, a bit field is adequate. But please remember, if you define a component which is just one bit, the actual storage allocated is always minimally one byte. But as far as you are concerned, you have only one bit and you can do and or operations, bitwise operations on those bits. Good afternoon sir. My self diversion act from S&PIT demo center. My question is, can we use doc file or executable file in C plus file handling environment? Of course, you can use absolutely every file. In fact, please remember that a dot exe file is also stored in the desk and the operating system actually reads that file and actually loads it in the memory. What you will do with that doc file or what you will do with that executable file is not very clear to me. The doc file is often read by a program which has created it, such as Microsoft Word. Microsoft Word knows exactly what component of doc file contains what, unless you know the format, you may not be able to do much meaningful thing. Similarly, the exe file will contain some header record and some other information and mostly executable code. But absolutely surely, you can open any file, read any file, write to any file. In fact, a very naughty thing would be to open somebody's executable file, write some gibberish byte somewhere in between so that that executable file can never execute in life. I am not suggesting you do that. I am only saying that anything is possible. Right. Dilai Institute of Technology in Durga. I am Shruti Khattacharya and my question is related to pointers. We teach our students that there are three types of pointers. They are near pointer, far pointer and huge pointer. When it comes to giving examples, we really don't have some good examples of programs based on far and huge pointers. But there is a very good book by Mr. Yashwan Kanithkar that is Understanding Pointers and See. But the programs provided in that book are too lengthy and I think it is out of scope for a first year student. You are very right. The far pointers and huge pointers nearly represent pointers which point to very large memory consuming objects. Programmatically, there is no difference whatsoever. A pointer is a pointer. So, just as you will say that an int pointer is different from a float pointer, it is different only in the sense that it points to a specific type of data in exactly the same way the far and huge pointer, long pointer. They are all pointers which point to different type of values. Otherwise, there is no reason to distinguish them from any other pointer and they should be used exactly in the same way that normal pointers are used. It is only the word far and huge which create a very interesting doubt in people's mind. But I don't think you should worry about it. You said, you use the term that this is outside the scope of first year student. Instead of using the word scope, I would use the word that they do not need it while learning computer programming and even later in most of the programming they would need it. But whenever they require, they would be able to read it and understand it. So, do not worry about that. Vivekanth and College of Engineering. Good afternoon, sir. I am Malathi from Vivekanth College of Engineering for Women, Tamil Nadu. The question is, can we multiply two pointer variables? Can we multiply two pointer variables? That's a very imaginative idea. So, let me tell you a story. Somebody, this is about ten years ago I read, you know correlation in statistics. You can correlate data of different things and find out what is the correlation. Somebody actually studied the growth of population in China and the growth of number of electric poles installed in United States and found that there was very high correlation. The question was, why would anybody on earth try to find out that correlation? The reason I am telling you this joke is that why would you think of multiplying pointers at all? A pointer is pointing to a memory location. Another pointer is pointing to another memory location. In fact, you would never even think of doing arithmetic operations amongst pointers. So, adding pointer, multiplying pointer, subtracting one pointer from the other has absolutely no sense. Pointers are pointing to an entity or to a set of entities such as an array. The pointer arithmetic should therefore, in my opinion, be limited to a, extracting the value of the address of an entity and assigning it to a pointer, be incrementing or decrementing the pointer appropriately so that you can scan over consecutive locations typically in the context of an array. I humbly suggest that any other operation with the pointer is completely meaningless in the context of programming. So, if your student has asked you this question, what would happen if you multiply into pointers, your polite answer should be chaos will result, that's all. Vidya Pratishan College of Engineering. Good afternoon, sir. This is Dinesh Jinde from Vidya Pratishan Baramati. My question is what is the difference between a null pointer and a void pointer and what are the applications of that? I am happily surprised that you are asking a difficult question. I had never used a void pointer in my life, although I thought I had done a lot of CC plus programming in my time. I have a friend here. Why don't you tell them your name and give the answer? Yeah, good afternoon. My name is Pratish and I am presently an M.Tech student at IIT, Fombe. So, what I feel is that when we use, say, int star x, what we mean is that we have an x. X is a pointer variable that points to a variable which contains an integer value. But when we say void star x, so we do not define what type of value x is pointing to. So, before using void, we actually need to do typecasting. So, we have to typecast as in to specify what type of variable x shall be pointing to. Okay, okay. I have now understood. Thank you very much, Pratik. And thank you very much for asking this question from Baramati. I now understand a void pointer as some kind of a placeholder. I do not know where I will use this pointer. So, I define a void pointer and keep it around. Now, depending upon where I want to use it, I will do a typecast so that temporarily that void pointer becomes pointer to either an int or a float and after doing that typecast, I can use that pointer for that purpose. I presume that it also permits me that somewhere later in the program, I can read typecasting to something else and use it in connection with someone else. Wonderful. So, this means I can define an array of void pointers without letting the compiler know initially what I am going to associate with it. I think this is some kind of cheating, but that is good. Thank you for very interesting questions.