Income tax 2023-2024, excise taxes, get ready and some coffee so we can recognize the code cracks when doing income tax preparation 2023-2024. Most of this information can be found in Publication 334, Tax Guide for Small Business for Individuals Who Use Schedule C Tax Year 2023, which you can find on the IRS website at irs.gov, irs.gov. Looking at the income tax formula, remember in the first half of the income tax formula it's basically a funny income statement. Most income statements having income minus expenses resulting in net income. Here having income minus various deductions resulting in taxable income. The Schedule C for the sole proprietor ultimately rolls into line one income of the formula which is strange given the fact that the Schedule C is basically an income statement of itself having business income minus business expenses, business deductions in other words resulting in net business income ultimately rolling into line one income of our income tax formula. Here's the first page of the Form 1040 where the Schedule C ultimately rolls into line number eight additional income from Schedule 1. Here's the Schedule 1 edition. Just a word from our sponsor. Yeah, actually we're sponsoring ourselves on this one because apparently the merchandisers they don't want to be seen with us.  Like our Accounting Rocks product line. If you're not crunching cords using Excel, you're doing it wrong. A must-have product because the fact as everyone knows of accounting being one of the highest forms of artistic expression means accountants have a requirement, the obligation, a duty to share the tools necessary to properly channel the creative muse. And the muse she rarely speaks more clearly than through the beautiful symmetry of spreadsheets. So get the shirt because the creative muse she could use a new pair of shoes. If you would like a commercial free experience consider subscribing to our website at accountinginstruction.com or accountinginstruction.thinkific.com. Additional income and adjustments to income part one where the Schedule C rolls into line three business income or loss from the Schedule C. Here is finally the Schedule C profit or loss from business which has a P and L profit and loss or income statement format income minus expenses. So now we're talking about excise taxes. Remembering keeping all these taxes straight in our mind the federal system for us to be funding what the federal government does which should be protecting us the military primarily we have an income tax the primary system. But we also talked about some other federal taxes which are often categorized as payroll taxes social security and Medicare but when we're sole proprietors on a Schedule C we have to deal with them with regards to self employment tax. Now we also could have state taxes remembering that the state taxes might tax on however the states want to because states should have the sovereignty to pay for the things that they're supposed to deal with not the military but like the police for example. So they might have an income tax on the state side and the local side you might have income taxes you might have sales taxes you might have real estate taxes and that kind of thing then we could also have the excise taxes which you could see basically on either level the federal level or the state level which could be directed more specifically towards particular industries. So they're going to be there for a particular goal typically in a particular industry. The most common example is probably going to be like taxes on gasoline the idea there being that the roads that are put in place because they're in between states because it's interstate commerce that's why the federal government kind of encroached on the state side of things in order to build free raise and whatnot which are going to go through different states and so on. The roads are for everyone the roads are basically free generally however that we have to pay for that some people get more benefit from the roads than other people some people they don't go on the road at all but they still benefit from it because they get deliveries and whatnot from people who do use the roads but even then they still use the roads far less than some businesses who could possibly make their entire revenue by using the roads. If you're a trucking company for example then clearly you're using the roads and making a profit on the infrastructure of the roads more over and above than like somebody else who doesn't use the roads at all but does get some deliveries from the roads and that kind of thing so the idea would be well if we tax gasoline which is necessary to drive on the roads that means that the people that use the roads more are the people that are going to be taxed more and we can use those proceeds to then fix the roads and in that way you're trying to allocate the cost of upkeep of the road to the people that are getting more benefit from the road so that kind of makes sense. You also get on the excise tax of things side of things things that are that possibly I'm not as in agreement with which are things to try to curb people's behavior and what I feel like is a manipulative way so they might say that we're going to give a tax on say alcohol and cigarettes and tobacco for example and the justification usually there is not so that we can get money to fund whatever we need to do like the roads or the military or the police it's a punitive thing the whole reason for the tax is to try to get people to stop using alcohol, tobacco or whatever by basically hitting them with the tax which will which will decrease the behavior due to economics meaning if it costs more they're going to do less of that that seems one a little bit manipulative to to me and two it also seems like it's hitting the people that are lower income it seems like a regressive tax oftentimes because the people that are indulged in these things are people that might have rougher times rougher jobs and so on and they're dealing with it with alcohol and tobacco and what not and now you're hitting them with a tax on that stuff so I'm not sure if that and three those things are addictive so the question is if you're dealing with something that is addictive does it really change people's behavior if you increase the price of it because it's an elastic right so really you're just increasing it you're collecting tax revenue from people that are addicted to these to these kind of things so but there's there's the argument for that you could you can make your argument on either side of that case so but that's the other and you can imagine if they start doing that kind of thing that it could they could take that this is number four reason why I don't like it there's a slippery slope once the government gets their finger in a taxation area they won't let it go right so you have these examples where people wanted to tax like large soda pops or something like a big gulp because they're trying to change people's behaviors to have them not drink sugary drinks and this kind of thing which again doesn't seem to me to be the way to teach people but you're trying to train the public to be smart and do things because they decided to do it their own choice is important to manipulate people to do a decision even if it's more healthy I don't think is beneficial in the long run to me but in any case major examples so this section identify some of the excise taxes you may have to pay and the forms you may have to file if you do any of the following so manufacture or sell certain products so operate certain kind of businesses use various kinds of equipment facilities or products receive payment for certain services so for more information on excise taxes you can see publication 510 excise taxes now we're not gonna spend a whole lot of time here because again these are industry specific things so if you're in a particular industry you're probably very aware of the excise taxes if you're not then the excise taxes might not be bothering you much right so form 720 the federal excise tax reported on form 720 quarterly federal excise tax return consists of several broad categories of taxes including the following so you've got the environmental taxes on the sale or use of zone zone depleting chemicals and imported products containing or manufactured with these chemicals so you might recall that before we had the crisis for like the global warming thing which basically they're going after carbon and the carbon dioxide I believe is the primary greenhouse gas that they're trying to figure out how that we can reduce we have the ozone thing before that where the ozone layer in a lot of spray cans and stuff had this ozone stuff in it and basically they made laws to reduce those types of chemicals now to my to my knowledge I'm not really sure it was the laws that really stopped us we did kind of make vast improvements on these types of things but to me it seemed like we what they did is they made the public aware of this problem and I think then capitalism I feel like is the thing that really drove the changes because they found out better ways to do spray bottles and what not without these chemicals which is what people desired and possibly was even cheaper in the long run so so I think and so that actually turned around now again you'll see some arguments on it well that's all because top-down government said this and that and that's what happened but I really I think it was more like public awareness and then the response that people had to people people wanting to do something about that problem and the and the innovation that really found their way out of it will have a similar kind of thing here with the with the carbon they want to put a carbon tax in place and that's the economic theory that that's the going economic which makes sense to some degree however it's difficult to gauge how that's going to work given the fact that it's not just us it's the entire world so it's going to be very difficult to imply a carbon tax on China for example who doesn't care at all about the these kind of global warming things all we're gonna you know we'll hurt ourselves at the cost of shipping the jobs over to China that are doing this kind of thing and so again interesting topic with these excise taxes communications and air transportation taxes you've got the fuel taxes so that's the big one if you're in like manufacturing and what not then you might need more like diesel fuel so here's another one where we're trying they're trying to move away from more clean fuels and efficient fuels but some kind of trucks and what not run better with like diesel fuels and and these types of things and then so now the question is do we put a tax on on those types of fuels and again those taxes somewhat makes sense as from the standpoint of I'm trying to tax people more that are using the infrastructure which everybody got basically through tax dollars and so it kind of makes sense to try to find ways to allocate the cost of the maintenance to people who get more benefit from like the roads so tax on the first at least in my mind these are my this is my thought price so tax on the first retail sale of heavy trucks out trailers and tractors manufacturers tax on the sale or use of a variety of different articles and then you got tax on indoor tanning services not exactly sure what that was about but form I don't have any tax tanning service businesses but they're popular where I'm at actually so but I don't know much about form 2290 there is a federal excise tax on the use of certain trucks truck tractors and buses on public highways so once again this kind of deals with that public highway situation which which is something that our tax dollars pay for on a federal level given the fact that their interstate commerce meaning the highways are going between states and therefore are not the responsibility of any individual state and so on so we need maintenance on those roads and who's in charge of the maintenance on those roads and how we're going to pay for that so the tax applies to vehicles having a taxable gross weight of 55 thousand pounds or more you would think that that would cause a bigger wear and tear on the road which means it might justify them paying more of the tax so that we can upkeep the road which kind of makes sense so report the tax on form 2290 heavy highway vehicle use tax return for more information you can see the instructions for form 2290 depositing excise taxes if you have a if you have to file a quarterly excise tax return on form 720 you may have to deposit your excise taxes before the return is due for details on depositing excise taxes see the instructions for form 720


Hi and welcome to the session. Today we will learn about mode and median. We have already learnt how to find out mean and range of the given data. Now let us study two more measures of central tendency or the forms of representative values. That is mode and median. So first of all let us study about mode. Now mode of a set of observations is the observation that occurs most often. Let us take an example. Suppose we are given a set of values 20, 10, 20, 30, 40, 20, 40, 10, 20 and 40. And we need to find out the mode of this set of observations. So first of all we will arrange the numbers with same value together. Thus we have 10, 10, 20, 20, 20, 30, 40, 40 and 40. So here 10 occurs 2 times 20 occurs 4 times 30 occurs only once and 40 occurs 3 times. Now here 20 occurs maximum number of times that is 20 occurs most often. So here the mode of this set of values will be 20. Now let's see how to find out the mode of large data. Sometimes it is not easy to put the same observations together and count them if the number of observations is large. So in this case we tabulate the data and then we find out the mode of the given data. Let's take an example for this. Here we are given a set of observations and we need to find out mode. So first of all let's arrange this data in tabular form. So here in this table in the first column we will write the observations that is the number which occurs in the data, then telemarks and then number of times a particular number occurs in the data. So let us start with 12. Here 12 occurs 3 times. So we will write 3 in the column of number of times because 12 occurs 3 times. Now we will represent 3 as telemarks like this. Let's move on to 13. 13 occurs 4 times. So we will write 4 in the column of number of times and we will represent 4 as telemarks. Next we have 14 and 14 occurs 3 times. So let us write 3 in the column of number of times and let's represent 3 as telemarks. Lastly we have 15 and 15 occurs 6 times. So let us write 6 in the column of number of times and we will represent 6 as telemarks. Now let us find out the mode. Here we can clearly see that 15 occurs 6 times that is maximum number of times. So the mode of the given data will be 15. Now let's move on to medium. We already know that medium is a form of representative value or the measure of central tendency. Now medium refers to the value which lies in the middle of the data when arranged in an increasing or decreasing order half of the observations and the other half below it. That means we can also say that if we are given a data and if we arrange the data in ascending or descending order then the medium will be the middle observation. Here is an example for this. We are given the data and we need to find out the medium for the given data. So first of all let us arrange the given values or the given observations in ascending order. We have 11, 12, 13, 13, 14, 14, 16, 20. Now here we have 9 observations that means the 5th observation that is 14 will be the medium. So here 14 is the medium for the given data. Thus in this session we have learnt to find out mode and medium. With this we finish this session. Hope you must have understood all the concepts. Goodbye, take care and have a nice day.


All right. So before I get started, I want to actually give a couple of shout-outs to a couple of people. So if you checked out the schedule before, basically yesterday, you may have noticed that I wasn't originally on the schedule. So first of all, originally my colleague, Sumera, was going to give it. But for health reasons, she couldn't show up. She's OK. But she couldn't travel. And then secondly, thank you to Ganesh and Ruslan for agreeing to swap their slots last minute as well. So do check out their talk. They gave the talk today at 10.50 in the morning. So thanks to everyone for all of your flexibility so that we could end up giving this talk. All right. So as Bartek already said, we've already heard about profiling a couple of times today. We've talked about extending open telemetry to have a standard for profiling. And hopefully today, I'm going to be able to give you at least a little bit of an insight of what formats are there, the kind of different trade-offs that different formats have chosen to implement. And what I think could be an interesting format for the kind of profiling that we're seeing in this new cloud-native era. Because I think it does differ a little bit from what we've seen traditionally. So before we get started on formats, maybe a show of hands who here knows what profiling is and has used profilers before. All right, that's a good 70%, 60% of the room. How many of you know how profilers work? OK, that's considerably less. And then last but not least, who here has an understanding of how profilers actually persist the data that they obtain? All right, cool. So hopefully after this talk, pretty much all hands are going to be able to go up for all of those questions. So without further ado, profiling. What is profiling? Profiling is really as old as software engineering itself is. Because with profiling, what profiling allows us to do is understand where resources of our software are being spent. So when our program is running, what pieces of code are using CPU? What pieces of code are using memory? What is allocating memory? What is holding memory? All of these kinds of things in order for us to be able to improve it. If we don't have the data of what code is actually causing a lot of CPU time, what code is causing a lot of allocations, what code is holding a lot of heap memory, for example, we're in no place to fix that. Best case scenario, we would be poking in the dark. And maybe because we know our code base really well, maybe we can make good changes. But really, with data, we're so much more efficient. So that's kind of the why. We want to improve the performance of code. And ultimately, that could have other effects as well. It could be because we're now doing the same task with less CPU, for example, that could mean that we're spending less money on our infrastructure. Today, we actually heard several times, how do we reduce cost of our observability infrastructure? And two of my colleagues actually recently did a livestream where they showed how to identify metrics that were being produced on hardware components that their cluster didn't even have. So we were spending a ton of CPU cycles on something that just fundamentally didn't make any sense. And we were able to see that using profiling data. So using profiling, we can improve CPU. We can improve memory usage. We can just about improve on just about any dimension. And fundamentally, what profiling data is, is we're taking a function call stack, and we're assigning a number to it. In essence, that is all that profiling data is. And so I want to take two main categories of profilers, but primarily speak about one. And so I'm going to get the one out of the way that I'm not going to speak about much today, which is tracing profiling. Tracing profiling is essentially we're truly recording at a very, very granular level when does function A start, when does function A end, when does this other function start, and so on. We're actually tracing the program execution. And so this is useful, but generally speaking, this is not done very much in production because it has a very, very, very high cost. And so typically, in production, we use sampling profilers. And so what that essentially means, and I'm going to specifically talk most about CPU profiling because that's the one where we tend to get the most gains. The way that sampling CPU profilers work is we truly just, let's say, 100 times per second, look at what is the current function call stack, right? So 100 times per second, we're recording this. And if we're seeing the same function call stack multiple times, we just count up by one. And we can use this data then to kind of build statistics to see where is that CPU time being spent. Because if we see the same function call stack multiple times, that must mean, at least statistically speaking, that's where we're spending our time. And most sampling profilers use something in the range of 5% to 10% overhead. If you use the right techniques, and I'm going to talk about that later, you can get it as low as 0.2%. But these are kind of sampling profilers where we're profiling, let's say, at 100,000, at 10,000 hertz. So we are collecting 10,000 samples per second. We can considerably get this overhead down using a couple of techniques. But we'll talk about that later. All right, so I have a very small piece of example code here. So first, we're going to have a function called iterate long, which has just a for loop that iterates 10 billion times and just doesn't do anything. We're just trying to produce some CPU time, right? And then we have the same function that does the same thing, but with 1 billion iterations. And so I made up these numbers. But the point being, the second, the iterate short, takes 1 tenth of the first execution, right? So we have 20 samples that we observed for the long and two for the short. And what we're actually seeing on the left side, sorry, on the right-hand side here is our first format. It's called folded stacks. I think I'd consider this to be probably the simplest format out there. It's a very human-readable one, but as we'll see later, it also has a lot of kind of shortcomings. So let's talk about formats. Now that we have kind of a simple understanding of what profilers are, what kind of formats, and what formats, at least in spirit, represent, what are some very concrete implementations of these formats look like. And one that I particularly like, and I think is very, very widespread, especially in the cloud-native ecosystem, because the go runtime natively implements profilers that produce profiling data in the PPROF format. So that's the first one that I want to talk about today. PPROF kind of descends out of what is generally referred to as the Google Performance Tool Suite. This kind of went through a couple of iterations until Google eventually published this work. And PPROF is Protobuf, as so many things in Google. And this is a relatively, my slides look different, even though it's mirrored. OK, weird. So in essence, what PPROF is, is it's a list of samples. The sample, and we'll look at this in more detail in a second, the sample is just a stack trace and a value, right? Like a recurring theme that we'll see throughout this talk. As I said, that's truly the essence of what profiling data is. We have a stack trace and attached a sample to it. What the meaning of that sample is, depends on the profiling data, right? It can be CPU time. It can be allocations. It can be heap memory held. It can be a lot of things, right? Whenever we can make an association between a function call stack and a value, it can be put into profiling data and used. And profiling tools can be used to analyze this data. So these are the kind of four main components, I think, of PPROF. There's a bunch more metadata, but I think this is the core. So we have samples, stack traces, and values, mappings. And we'll go into mappings first. In the next step, we have locations. So these are kind of an abstraction for function call frames. And we'll look at that in a second as well. And then just functions. That's function name, line numbers, file names, and so on. So mappings. I think the reason why I wanted to specifically call out mappings was because when I was very new to all of this, this was the one that kind of confused me the most. Because what does this even mean, right? Like what is it talking about? Address ranges, file offsets, file name, build ID. What's even a build ID? So I want to give you a very, very quick demo of what this actually is. And I'm on a Mac, so I actually had to ask a co-worker who is on Linux to actually provide this for me. Because what this is, is typically when we, I hope everybody can see this, but when we're on a Linux system, the way a program executes a setup to execute code is the operating system memory maps the executable code to be executed. And the mappings file, which you can find in this scheme, PROC PID maps, on any Linux system, will tell you which kind of object code is mapped into which address space. And that's essentially what these mappings mean in PIPROF. It tells us, so what we have here is the memory mappings of system D. We just happened to choose that because PID 1 of that machine. So we can see Lipsy is mapped as memory mapped here.  Why do we need this? And where did the build ID come from? So the build ID, and I have another quick demo here, is something pretty interesting that is kind of an identifier for binaries. And so what PIPROF is saying, whenever there's an address in this address space, look at this binary with this build ID to figure out what an address space means. So I have the code that we were looking at earlier here, and I compiled this. And what we can then do using some standard tooling is, I mean, I hope everybody can see this, but if not, basically there's a tool called adder to line where we can say pass this executable and an address. And then it can tell us which file this function name belongs to, the function name. And in this case, we're actually seeing multiple functions. And what this means is that the compiler made a specific optimization called inlining, where it decided setting up an additional function call is actually too expensive. We're just going to do all of this in one function. So it's a short story. But that's what mappings are about, so that we can do the translation of an address into actually something that we humans understand. And in the folded stacks, that's not really something that we can communicate. The only thing that we could do with folded stacks were strings. And so here we already see a difference between PIPROF and folded stacks. PIPROF is obviously designed to be able to support what we call asynchronous symbolization. So next components of PIPROF, the sample. Like I said, truly, the sample is only a list of locations. Remember, I said locations are kind of an abstraction over function call frames. And what we're seeing now is a location can be, what a location can be is just an address. It just has an address and a mapping ID. That is a possibility for a location. So we don't have to have the symbols available in the PIPROF formatted profile. That can actually happen at analysis time. And this can save a ton of information, a ton of space in storage or data that needs to be transferred, and so on. So again, all a sample is is a function call stack, which happens to be an abstraction mapped to a value. So what I wanted to show here is, so I took the kind of folded stack trace that we had earlier, and I converted it to a PIPROF profile using a tool created by someone in the community. Shout out to Felix for creating it. And what I wanted to do is kind of show this PIPROF, exactly the same data that we had as the folded stacks, now in PIPROF. And what we can already see is that this data is much more kind of complex, right? But it comes at a trade-off, right? The folded stacks were very, very easy for us as humans to understand. However, PIPROF is able to represent much more complex situations and be much more efficient in doing that. The first thing that we'll see on the right-hand side here is that PIPROF actually makes a very great attempt at deduplicating as much information as possible. So it has a string table. It tries to deduplicate locations as much as possible and therefore kind of try to save as much space as possible. So we see the string table, and whenever we see a number, for example, in the function names, we just see a reference into this string table. So in this case, 0, 1, 2, 3, 4, 5, 6. So the last function that we have here is the iterate short function, right? So all I'm trying to say is this is a binary format, and it's able to represent a lot of very complex situations that may be interesting to handle. So that was the PIPROF demo. The next format that I want to talk about is speed scope. Speed scope I specifically wanted to cover because it is able to not just kind of map a single stack trace to a single value. It's actually able to also say kind of the relationship over time. And so it can tell us not just over these 10 seconds, there were two seconds spent in function x, y. It can also tell us it was actually called first at time t1 and terminated at t2, but it was again called at t25. Like, it doesn't really matter. The point is that it doesn't just have an aggregate view of the data. It can also tell us about the timeline of it. And so the way that this format, I don't know why this is doing this. OK, if I go forward and backward, I see everything on the slide again. Anyway, what we're seeing is that in the shared kind of section of the specification. And by the way, I specifically chose PIPROF and speed scope because they actually have specifications. There are a lot more profiling formats out there, but many of them, the implementation is the specification. So I wanted to specifically take two that have an actual specification. And so in speed scope, you can define frames. So the same thing as we saw in PIPROF, but not quite as optimized. It doesn't have a string table or something like that. So it's somewhere in between, right? It's saying, OK, frame one is our let's take our example of the main function. Frame two is the iterate function. Frame three, the iterate long. And frame four, the iterate short function, for example. And then you can define these profiles as evented or sampled. And this is exactly the difference that I wanted to show. So the sampled profile speed scope, essentially, is very similar to PIPROF there. It only shows us the aggregate view across the entire timeline. So this is really exactly the same thing, right? Like we have a sampled stack, but it's just numbers into the frame array. So this is different representation, but in essence, kind of the same thing as PIPROF. However, it does not save the address space. It does not save addresses and so on. So it does not support asynchronous symbolization. So therefore, we would always have to have these frames already symbolized at collection time, which can be very, very expensive to do. Or maybe even impossible because symbols may not always be available on a host where you're doing profiling. But the really interesting thing that I wanted to look at with speed scope is this one, the evented profile. So what we're seeing, I don't know why it's doing this, what we're seeing is that it kind of differentiates in two types of events. Opening a frame and closing a frame, right? So what it's doing is it's telling us this hierarchy of different frames and when they're being opened. So we see the at attribute, for example. That's a timestamp. And the kind as well as the frame number. So again, quite similar to what we were seeing before. However, it's also telling us, in addition to the frame, it's also telling us it was opened here at this particular point in time. Or it was closed at this particular point in time with this value. So quick speed scope demo. Actually, I'm going to use this cool example that they have on their website. So I'm going to kind of start with just the left heavy one. So this is what we would see as kind of the aggregate view. Like all we're seeing is always the whole aggregation across the entire time frame. So this is what typically sampled profiles look like. But the really cool thing about speed scope is that it can tell us about the timeline and how things behave over time. So we can select just this portion of the profiling data. So that's super cool to see how did this actually evolve over time. Where was my CPU time spent over time? Because this could be interesting to use when we want to figure out was this called multiple times? Or was this called once for a very long period of time? That can make a big impact on how we're going to actually improve this code. All right, that's pretty much all I wanted to show for speed scope. Oh, no, one more thing. The actual format then looks exactly like I just said. It kind of defines the starting frame from 0, as well as the end frame to value number 22. And then we have the opening frame, another opening frame. And we always have the reference into the array for our functions at the very top here. And then eventually, it needs to actually close it, and so on. So this format is a little bit different to what we were seeing before, right? It's not just a list of locations or frames to values. It's actually already telling us something about how we're going to visualize this information. So that's kind of unique about speed scope in that sense. So how am I doing in time? Need to speed up a little bit. So lastly, what I want to talk about is continuous profiling. So so far, I've only talked about kind of this point in time profiling, right? I'm looking at a process for a 10 second period of time. I'm doing very high sampling, so 10,000 samples per second. And that, obviously, as I said in the beginning, has some overhead, so 5% to 10% in overhead. Continuous profiling kind of takes the kind of extreme opposite approach. We're always going to profile absolutely everything in your infrastructure, but we're going to do it at very, very low sampling frequency. So the profile that I happen to work on actually only profiles at 19 hertz, so only 19 samples per CPU core per second. And so we've been thinking about there are some very drastically different trade-offs that we've chosen for continuous profiling. Do these formats that actually took very different approaches for collection actually suit this kind of profiling? And while the obligatory XKCD applies, we did think that because there are such fundamental differences in the collection of this data, there is actually a huge amount of possibility for improvement. So at Polar Signals, we actually run a continuous profiling service where our customers send us profiling data. And so we were thinking about how much of this data is actually could be optimized away. And one core with our product, and this is roughly the lowest that I'm aware of, it produces 675 megabytes per month per core. And so if we multiply that by relatively small infrastructure size, 10 nodes with 128 cores each machine, we get almost a terabyte of data that needs to be transferred out. Let's say our infrastructure is in GCP. Our customer's infrastructure may be in AWS. They're actually paying egress cost to use our product, aside from paying us for using our product. So we want to make sure that that kind of cost is as minimal as possible while still communicating the same intention. And so if we were to use Pprof, and that's what we're doing today, we're producing this amount of data. We're just kind of marshaling all the stack traces every single time, every 10 seconds, and sending those off to the service. So we're producing roughly $80 in cost just by sending this amount of data. And so we did some analysis and found out that the stack traces that we're sending, just the function names, file names, and all of these things make up about 80% of all of this data being sent. However, with continuous profiling, we're looking at the same processes across time. And the kind of reality is that long running processes tend to roughly do the same thing. And so what we're doing is we could just keep over and over and over sending the same stack traces all over again, with 100% granularity and detail. And so that means if we could optimize these 80% away, we could actually save our customers, or anyone running continuous profiling infrastructure. Everything that we do is open source, by the way, under the Parkour Open Source Project, PARCA. Then we could make everyone's life better, right? And so what we've been thinking about is something I call peeprof, but with a twist. And so essentially what we would be doing is instead of us kind of sending the same stack traces over and over and over again, we actually only send the hashes of the stacks. And only if this hash is not known to the backend, do we actually kind of retry and send everything at 100% detail, right? And so the reason why I'm kind of calling this peeprof with a twist is this is actually only a single field difference to what is currently known as the peeprof format. So I believe this could actually be an interesting change that we could propose through the peeprof format in order to gain this efficiency gain. However, it is not just the format, right? That's kind of the important thing, and why I also find it a bit awkward to put this into peeprof. Peeprof is a file format, right? So I should be able to kind of read this information from disk, and it should have everything it needs, like self-contained in this file. And so this kind of actually changes it into sort of a stateful protocol, right? The client kind of says, hey, I want to send you some data for stack XYZ, and I observed it 123 times. The server says, ah, no, actually, I don't know what the stack is. Can you tell me what the stack is? So the client kind of retries and says, actually, at full detail, this is the full stack trace, at which point then the backend can say, OK, cool. I'll accept that. I'll write that to storage, and I'll kind of remember this hash for the next time. So my point here was kind of trying to show. And by the way, this is my opinion. I know there's a kind of working group within the OpenTelemetry project, which we also participate in. The thing is, I personally think this type of stuff is not really explored quite well enough. So my personal belief is that I think we're a little bit too early to kind of standardize these things in the profiling space, because I think most of these things that I'm proposing here haven't really been tried and tested. And if we were to kind of set and stone these protocols today, I feel like we're kind of blocking ourselves from kind of innovating in this space. So while I'd love to have some standard, at the same time, I feel like there's still so much to explore here that we just haven't done yet. So that's kind of my overview for profiling and profiling formats, and why I think we should kind of emphasize innovation in the profiling space, because I feel like there's still so much left on the table to explore. Thank you. We are out of time, but one quick. Let's go. So it seems to me that there is no clear winner on the transport side of things. Is there a clear winner on the storage? I get on the storage on disk, on the presentation on disk. So if I understand the question is, clearly, or at least my opinion is, the protocol hasn't really been set and stone is the storage set and stone. I don't really think so. We happen to invest very much into kind of a column or a database to store this data, but actually the symbol storage is much, much, much, much more complicated. And so no, there's definitely still very, very much innovation left to be done in this space. I'd like to think that we're getting better out of it, but definitely we're nowhere near the maturity of metric storage or log storage with profiling. And I think there's still a lot of efficiency that we can gain. OK, I'm sure Fredrik can answer more questions around here, but it's time for another talk. So thank you.