Income tax 2023-2024, taxable refunds, credits or offset of state and local income taxes, tax software example, get ready and some coffee so we can recognize the quacks while doing income tax preparation 2023-2024. First 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 trust me, I'm an accountant product line. Yeah, it's paramount that you let people know that you're an accountant because apparently we're among the only ones equipped with the number crunching skills to answer society's current deep complex and nuanced questions. If you would like a commercial free experience, consider subscribing to our website at accountinginstruction.com or accountinginstruction.thinkific.com. Form 1040 tax software example using LASERT tax software. You don't need tax software to follow along but if you have access to tax software, it's a great tool to run scenarios with. You can also get access to the forums, schedules, instructions at the IRS website irs.gov, irs.gov. Starting at our normal starting point with our taxpayer Adam Taxman just trying to avoid a dang taxman living in Beverly Hills 90210 starting off as a single file or no dependence. We have W2 income at the nice round 100,000. The standard deduction 13850 giving us the taxable income 86150. If we look at that in a formula format in Excel, we've got the 100,000 income. We've got the standard deduction 13850 giving us the taxable income 86150. And then the tax calculated by the software 14266 represented in page two of our software. There's the 14266. Let's go back to page one. Now we're looking at income that is flowing through through the schedule one. Now remember that if you were to construct a tax return, for example, you probably constructed something like this making a general outline formula and then having other schedules, worksheets basically feeding into that formula. However, because of the way the tax returns have been structured over the years, they wanted to try to fit everything on one page for a long period of time. And therefore you have all of this stuff basically on the first page of the tax return related to income. But now that the tax returns are electronic, it makes sense that you have more of schedules to increase the complexity rather than trying to fit everything on one page of a tax return. And you can see that's what they did more and more starting a couple of years ago. They added some of these schedules. So now on line eight, I'm going to put a little check next to it. We have the additional income from schedule one line ten. So let's take a look at schedule one then. If I go into schedule one, here we go. And then we have schedule one part one line number ten is going to be adding all of this stuff up, which will then feed into the first page of the form ten forty, which will be our income line item. We're focused on the first one here, which is going to be the taxable refunds credit or offset of state and local taxes. Okay, so the general rule for this one is that you will oftentimes get a 1099, I believe, G from the state. And that will be dependent upon the state that you're in and whether your state has an income tax system. If they have an income tax system that mirrors the federal income tax system, then it's likely that you're going to do the same kind of thing. You try to overshoot the payment of your taxes because you don't want to get hit with penalties and interest to stick from the state. And then in the following year, so if you overpaid your taxes in two thousand twenty two, you're going to get a refund. And when you get a refund, you might get that 1099 G that is telling us that there's a refund and also going from the state to the federal government to tell the federal government that you got a refund. And usually when there's a 1099, it has to be included in income. However, this one is a bit of an exception for many cases. And just to kind of recap why this might be the case, note, if we imagine this is the income taxes for the federal income taxes. Note in page two, we have an amount due at this point in time. If I was to imagine that we overpaid the taxes, let's go back in here and say that we overpaid and we paid like 16,000 of withholdings. Then of course we would have a refund, which we're trying to do to avoid that penalty. And so that's how we do it.  We're shooting for a small refund because I would rather have my money sooner rather than later having bigger paychecks rather than smaller paychecks. Now this of course is a tax return for tax year 2023 that we are filing at some point in 2024. If I tell the government that we have overpaid and we want to get some of that money refunded to us, it's going to be refunded to us in 2024 for payments that were made in 2023. Now if we get a check in 2024, we know the general rule is low money that we've received has to be included in income unless it says otherwise by the code from the IRS. But in this case, it wouldn't really make sense for us to include this in income because this is simply an overpayment. This isn't actually income. We paid them too much in taxes for tax year 2023. So when I received this overpayment in 2024, it wouldn't make sense for me to include it in income. However, when we look at the state taxes, we have a similar situation on the state tax return. So for example, I live in California that has a state income tax system and it kind of mirrors the federal income tax system. If I overpay on the state and I have a refund from the state, then of course I wouldn't include that refund on the state tax return as income. However, I might have to include it on the federal income tax return as income. Why would that be the case? Because sometimes the state taxes are deductible for federal income tax purposes on the Schedule A. So if I go to the Schedule A, you can see in the taxes, we have possibly the capacity to deduct state taxes. Now, the idea then would be, well, what if I pay the state taxes in, let's say 2023 in our case, if we paid the state taxes in 2023 and got a deduction for it, then what would happen if I overpaid the taxes and then they gave me money back in 2024? Then it would be like, well, now I got a deduction in 2023 for money that they just gave back to me. And that would of course incentivize people to do something like overpay their state taxes in 2023 so that they can get the deduction in 2023. And then the money is just going to come back to them in 2024 in the form of a refund. Therefore, there's got to be a fix to that. What's going to be the fix? Well, it could be that you only deduct what's in 2023 that is actually going to be incurred in 2023, but that would be an accrual principle and it's easier to do taxes on a cash-based system. So the general concept is if I paid the taxes in 2023, then I get the deduction in 2023. You could amend the tax return for 2023 once you get the refund, but that would be a big pain. So the easy solution is saying if you got a benefit in 2023, then you're going to have to record it in income of 2024, which kind of makes sense. That would be the easy thing to do. I'm not going to go back and fix last year. I'm going to say I got a deduction last year. Then I got a refund of part of the money that I got a deduction for. Therefore, I'm going to include it in income in the current year. That's the principle. Now, it seems fairly straightforward, but there's a lot of kind of caveats to it if I have to basically include it in income. It's also a bit complex as well because not all states have a state income tax. Some people might have a sales tax, some states and some states might have a sales tax and an income tax. And you might try to pick one for federal income tax purposes and which one to deduct, which we'll talk more about later. So if you have a sales tax, it's less likely that you're going to get a refund from the sales tax, but it's possible that you get some kind of refund of the sales tax that you overpaid, in which case you might be in a similar scenario. So the bottom line is this. If you get a refund, you're going to get a 1099 for it, but the 1099 might not be included in income and it wouldn't be included in income if you didn't get a tax benefit last year and you would get a tax benefit on the Schedule A. So if you're talking about a lower income individual, one typically that doesn't own a home because owning a home is usually what pushes people over to itemizing because of the interest or mortgage, the interest on the mortgage payments and the state taxes with regards to property taxes. Even if they own a home, they might not be itemizing. So the question is if you're taking on a new client, for example, which is usually the most difficult thing, then you would say, okay, last year, did they itemize? If they did itemize, I would suggest that they have a more complex return and you might want to take their prior year return and actually do the data input into the software for the prior year so that you can properly do the rollovers in the software from one year to the other because there might be some rollover impacts that the software can help you drill down on, such as this tax or do you have to include state taxes in income. If they didn't itemize last year, you're probably dealing with a more simple return and possibly you don't need to do that, you could just start doing the data input in 2023 because 2022 probably you can figure out exactly what happened. There's not a complex kind of rollover type of situation. That would be the general concept because note, if they did take the deduction last year, you might say, well, that's easy, I can just include it in income. If they itemized last year, then I will include it in income. However, that might not always be the case. Why wouldn't that be the case? Well, they might not have gotten a full tax benefit. Let's say they had a $5,000 refund from the state that they received in 2023. They itemized last year, which means they had the taxes that they were going to pay as a deduction but they were really close to being able to take the standard deduction. Let's say they were close to the threshold of the $13,850 to take the standard deduction and then they just barely, let's say their itemized deductions were $14,000. Well, then they didn't get the full $6,000 of benefit when they paid it. They only got the difference between what they would have got on the standard deduction and the itemized deduction. So now you don't want to include the full amount in income. You only want to include the amount if possible that you have to, which might be the amount that they actually got a tax benefit for. The other common thing that happens is they might be taking an itemized deduction but they live in California and there might be a cap then on the state taxes, which you can easily go over if you live in California or in New York because there's a high cost of living and the state taxes have frankly been taking advantage of the federal tax system which allows you to deduct state taxes on the federal return, which is basically subsidizing high-tax places basically, right? So they put a cap on that. So what if I have taxes that hit the cap, then I can't further deduct the taxes and I might not be getting a benefit past the cap that I hit on the taxes that were paid. So again, I only want to include the amount in income that I got a tax benefit from last period. So you can see how those kind of things will impact the calculation. You want to know them in theory and then use the software to help you to calculate those issues and then deconstruct the tax return for an explanation to make sure the software is doing it correctly and so that you can explain the rationale to a client or to yourself or to an auditor or whatever. Now one more kind of weird thing that could happen is that they could have state taxes as well as sales tax. You might be in a state that has state tax and sales tax and for whatever reason they might have taken the deduction or elected to deduct their sales tax because it was higher than the income tax for whatever reason and then you got a refund of the income tax. Well, now they itemized and they took the taxes deduction but it wasn't the income tax that you got a benefit from, it was the sales tax. So it's another kind of weird scenario that could come up. Okay, so given that this is the rookie mistake that most people will do. They'll get the 1099 and they'll go, okay, here it is, additional income for taxes. I'm going to jump to that in my data input and I'm going to say, okay, it's a 1099G and then I'm going to say this came from the California, let's just say it did and then we're going to go, okay. And then it's going to be a state and local income tax refund and let's just say it was $5,000. So then we're going to say, all right, then let's go back on over to the forms and you're going to go, what? It didn't show up here. I did the data input and it didn't show up in the return. Why? Because the software doesn't know whether or not the taxpayer got a deduction for it last year because we didn't roll over the tax return. So if you're not using the same tax software to roll it over from last year to this year, the software is going to by default possibly not include it in this line item even if you do the data input because it's going to assume that there was no tax benefit from it last year. So if there was a tax benefit from it last year, you got to say, okay, do I want to enter last year's tax return in the software in 2022 even though it might cost me some money because it's a more complex situation and then the rollover will happen and that might help me to calculate this software or basically I just want to force it to happen in the current year, right? So for example, this software has the capacity to basically do the data input like a worksheet so itemized in 2022 income tax deduction or sales tax deduction and you could basically go through this worksheet and that will help you to calculate the tax to see whether or not the refund should be taxable in the current period or you can force it with an override. Now note that most softwares have this kind of override thing for a lot of things and you don't want to use it most of the time because that means you're overriding something, you're defaulting something so you would probably want to in practice use the worksheet in most cases unless you're sure that it all should be included in income or you should again do the data input better, more better yet do the data input of the prior tax return in the prior software, roll it over and then this calculation will be basically done for you but I'm going to say I'm going to override it with tax return let's say a number one and then we're going to go actually I'm going to put the dollar amount here in the override, 5,000 and then I'm going to go back on over and then basically I forced it to happen now so now it's pulling over and I can see it and I go okay there it is and then I'm going to pull it down and say okay 5,000 5,000 is then going to pull over to the page one of the form 1040 so now I've got the 100,000 and the 5,000 is being pulled in from the additional schedule one form so the bottom line is you can force that to work but don't think that you have to include it just because you got the 1099 it's dependent upon what happened in the prior year let's do a quick adjustment to our worksheet over here because now we have the schedule one so I'm going to make a whole another schedule now so I'm going to right click on this and say let's actually just make a new tab over here let's just make a new tab and then I'm going to put it next to the income because I'm going to call it schedule one schedule one let's say income and so I'll make another tab I'm going to select the whole thing right click format the sales I'm going to make it currency negative numbers bracketed and red no dollar sign, get rid of the pennies and I'll make it large and I'm going to go this is going to be schedule as the schedule one income I should probably name it more formally additional income I'll just say income and then I'm going to say this let's make the whole thing bold and then I'm going to say this category is called see if they won't let me copy that taxable refunds let's just call it taxable refunds taxable refunds and so I might make this headers so I'll make this black and white due to home tab font group we'll make it black and white and I'll make this black and white black or bordered black white and then I'm going to say we have a refund we probably only need a couple lines for that so I'll make this bordered and blue and I'm going to say the refund the amount was 5000 and then I might have another line over here to see how much of it was taxable or not so that I can do the data input and then I can see how much is taxable which I'll be reliant in part on the software to help me calculate so I can see both sides kind of double checking my data input and then I can say the total total total taxable refund will be on the outside equals the sum and in this case all of it has been included I'm going to go back to my first and then this will be the total schedule one income which will be equal to this 5000 I'm going to include that in line one of my formula so here's my formula double clicking on it this is coming from this tab now I'm going to add a whole other tab which is going to have my schedule one income and so there's that 105 and then that comes down to 13850 and then that taxable income is 91150 so I'm going to go ok 91150 let's go back on over here and say do you we're at 91150 page 2 calculating the tax is now at the 15366 so I'm going to say ok 15366 and so there's our calculation now if the tax wasn't included say what if I still got the 1099 but it's not included in income then I can kind of see it in my data input form this way and say ok I input it over here into here but then the software saying it's not included in taxes which I'm going to trust the software to do if I properly rolled over the tax return so I can kind of double check it and say well why is that they didn't itemize last year they got this refund but it's not included and therefore should not be pulling over into my income line item because they didn't get a benefit from it last year so that's the general idea so if it's a basic tax return the basic idea is that you're going to get a 1099 most people panic about it and try if you're kind of a rookie tax preparer to put it in to the schedule and then it doesn't show up because the software didn't get a benefit from it last time and because this is a more complex return if they did get a benefit from it and you have a schedule A I again would recommend actually inputting the software the tax return into the prior software and rolling it over helping you to do the calculation or if you don't want to do that possibly because it'll cost you money to do that then you could use the worksheet to help you do the calculation because if you get a tax benefit from it last year doesn't necessarily mean that all of the income is subject to income taxes because some of the oddities that we mentioned


All right. Okay, so yeah, thanks for coming to my talk. This is my first PioHio talk, actually second time attending, so pretty excited to be here. Excited that I could wear the shirt somewhere and have people get it, and instead of looking, you know, like I'm making some kind of political statement or something. So I'm excited for that too. A little bit about me. I've been in the software business for a long time now, mainly doing CC++, mainly doing CC++ development, but a lot of incidental Python. So I'm definitely not a FNista by any stretch, so any any misstatements I make are out of ignorance, not malice. And what, so this thing that I'm going to talk about today, Google Protobuf, is something that I've used in, it's popped up time and time again as a good tool to fix problems that I've encountered. So let's get on with it. What are protocol buffers? They're designed by, or developed by Google. It was developed as one of their, what they call, I don't know, 10% projects. They're extra-curricular projects, so, but it's been widespread adopted throughout Google. They use it in, I don't want to say all of their projects, but many of them. It's an extensible language, platform, neutral, efficient way to encode data. So, yeah. So, at its core, what it does is it takes, you know, various arbitrary data, makes it as small as possible, not using compression, but just using clever encoding. And as I said, it's widely used in Google. I think they're, I read on their web, in the GitHub page that somebody did a search of their repo, and there's over 40,000.proto files, which are kind of the source code of that. So, it's, and it's open source and pat-free. So, that's all good. The three benefits that you get from Protobuf that gets me coming back with it time and time again is the backward compatibility is easy to get. It's, they designed it for that, for that purpose, so they don't have to, you know, upgrade all their servers at the same time to talk the same language. The encoding is very efficient, and the code to parse these buffers is automatically generated. So, there's not a, not a bite of handwritten code where you have to, you know, oh, this is just kind of a field I need to convert that to, you know, an int or whatever. It's all built in. This was largely stolen from their Protobuf GitHub as well. Basically, they made a comparison to XML. The XML is great for a lot of things. I use it a lot. It's very, very readable. It's very wordy, though. If you're doing something at scale, so either, you know, something of the scale of Google where you have, I don't know how many, you know, tens of thousands, hundreds of thousands, whatever, however many servers they have, they need something that scales. And, you know, when they're, I don't want to see what their bandwidth bill is, but shaving one byte off of every pack that they send to their server, I'm sure saves them, you know, a lot of money. So, compared to XML, it's three to ten times smaller, twenty to a hundred times faster for parsing. The data accessors are automatically generated. So, there's a simplicity there that you may not get with XML, at least not that I'm aware of. It's really what, in addition, so what attracted me to it for this talk is that it's, in addition to using it at large-scale deployments all over the world, you can also use it for very limited bandwidth or limited RAM, limited storage, so forth. So, like, little devices. So, that's what I show later. I've got some kind of antiquated little devices, but that's what I had. So, that's what I went with. Did anybody go to Greg Svota's talk yesterday? No? Yeah. Okay. He showed off this little $5 monochip, the ESP8622, or 8266, yeah. And it was, he threw an Arduino into the audience that here you can have this. You don't need to use these anymore, because that thing is pretty awesome. So, I don't have those. So, I have something maybe hopefully a little more familiar to people who aren't into, like, small computing devices. So, and I should add that all of this, everything, the slides and my code and everything will be, it's on GitHub, so at the end there'll be a, you know, links page, and so you can pull all this stuff down and look at my terrible code. So, that's kind of the reasons to use Protobuf. Some of the reasons that you might not use it is if you have really big data sets. The Google Protobuf page says, if you're sending, like, more than a megabyte in a chunk, maybe think of something else. That said, I read in a forum recently that somebody was complaining about, eh, we're not so happy with Protobufs, because we're throwing around 64 megabyte packets and it's just not holding up. It's like, well, it wasn't designed for that. And as you asked, it's a binary format. They're not interested in making this human readable or editable. This is something that you put in the pipe, it shrinks it down, sends it over the pipe, or maybe you're saving data, you know, to hard disk or whatever, but the idea is it's not meant to be something, you can just open up a browser and say, oh, well, let's look at all the fields in this structure. That's not gonna happen. So, because of that, you can't do things like, it should leave other, like, if you're, like, XML is really easy to stuff some JavaScript or, you know, HTML or something like that in there, but this, you're not gonna do that. Okay, so, like, stop me if you've heard of this one, being Python developers, but they've kind of had a schism in their world, too, between Proto2 and Proto3. It's not fair to say it's a schism. It's, Proto2 came out 10 years ago. A lot of people use it. Last year, in July 2016, they released stable Proto3. It's recommended for all new code. It is, it is, but in terms of making your message definitions and stuff, because the part of Proto3 is they really made the language less wordy and, and just, it's better to use it this way. And it's, it's basically an iteration on Proto2. And, and yeah, they, they kept backwards compatibility as much as possible. But generally speaking, you wouldn't be mixing the two anyway. It's more, the backwards compatibility is more within when you set up, initially you set up your system and you have your packets and whatever that you want to send. And then later as the system grows and evolves, you're like, oh, we got to send new data. We don't need that data anymore and so forth. That's the backwards compatibility that I'm talking more about. But the only reason I really mentioned Proto2 is because a lot of the docs on, on the GitHub for ProtoBuff, all their examples are still in Proto2. So it's gonna just avoid, you know, prepare you for the possibility of confusion. There's gonna be, you'll look at the examples, you'll look at the, the language reference and, and they don't match up. Well, I shouldn't say that. All the examples will be in Proto2, but you want to do it in Proto3 and it's not hard to map one to the other. So how do you use it just from a, a workflow standpoint? So the protocol mess, ProtoBuff messages are defined in a plain text file, usually with .proto as the, as the file name extension. And those are then compiled down to the, the generated, your target language that you want to use with ProtoBuff with, use this Proto compiler to generate the data access classes in the target language that you're interested in. So Python 2 and 3, Java, C++. There's all the, yeah. And there's also a lot of additional third-party plugins. So these are the ones that they support just kind of out of the box. You can get additional third-party, you know, open-source plugins that people have written to support other languages, you know. So it's definitely a vibrant community. The, a lot of activity on this, this project's Proto, this project's GitHub is, you know, even now, even after 10 years. So it's definitely a thriving and broadly used technology. And you can get pre-built binaries, you don't have to deal with any of the problems of, you know, sometimes you've got to build the packages from source and all that. You can do that if you want, but especially with Python, you know, they've got the Python package index, I'm pretty sure. I know they have it for Python 3, probably have it for Python 2 as well. Just, you know, you can just do a hip install, ProtoBot. And you're done. So, so the, so the basic flow goes like this. You, you start with your, your Proto file. You run it through the Proto compiler. In this case, for our purposes, you know, it generates this foo underscore pb2.py. This naming isn't so flexible. They always append underscore pb2 even if you're in Proto 3, which is kind of, yeah, there's, there's a, there's some, some rough edges that I don't know why they haven't sanded them down. But just be aware of that, like you, because it's in the, it's in the Proto file that you specify which version of the language you're using. And it just, it generates the right thing, but it doesn't reflect the name.  Okay. So, as you might expect, any kind of data encryption language is going to have support for, you know, a lot of numeric types, so double float. They've got a bunch of different 32 and 64 potato types, which I'll talk about a little bit more later because they're, they're important distinctions about those. String support, most languages, UTF-8 only, Python, there's some kind of unicorn support that I haven't fully grokked, but you know, if that's important to you, it's definitely an option. Boole, we all know what that is. Bites, though, if, if their string type doesn't cut it for you, or, you know, you need some other bag of bytes, bytes is the type for it. Enums, if you're familiar with C and C++, they have the concept of an enum.  So those, those allow you to have kind of a set of predefined values that you can give meaningful names to instead of, oh, that's type one. You can say, oh, that's a, you know, that's a corvette. And then finally, there's this any type, which is, it's like a bag of bytes, but you can also give it a URL to say, this is how you interpret what this bag of bytes is. So I haven't used that before. It sounds pretty cool, but just haven't used it so I could, couldn't say too much about that. Okay. So yeah, I mentioned before that there's different ints for different uses. Most of them have a variable length encoding and that's, that's where protobuf picked up a lot of its compression, or I don't want to call it compression, encoding efficiency. But some don't. So it's important to know that the type of int that you're using matches what the values you expect to go into it. So for instance, if you have to have an int 32, which sounds like, oh, you can put any kind of integer in there. Well, no, if you're expecting data that's mostly positive integers, then int 32 is, is okay to use because if there's a possibility it might be, might go negative, then int 32 is probably okay. But if it's often that you're going to have signed values that go negative, then you would use the S int 32. And similarly, if you use, if you know they're always going to be a positive, then you'd use the U int 32. And the reason being that they've got, well, I'll get into that in a bit, I talk more about encoding. And then finally, doubles and floats are, they don't encode very well because, you know, generally speaking, there's, you know, you're going to, if you take the value of one over three and put that in a float, it's, it's, you'd probably don't care about the 19th digit of precision, but the protobuf is no way of knowing that. So if at all possible, scale your, scale your floats and doubles into int values that you can get a more compact range from and you'll get better at coding. Okay, some other notable features. Messages can be nested.  Likewise, you can use messages as fields within. So really, if you, again, if you know a C or C++, this is, you're going to see, I'm going to show a proto, a simple proto in a minute, and you'll see that it's basically looks like a C struct. And that's a way to, a good way to think of it if you're familiar with those. But also the, the language has associated maps so you can, you know, it's like a dicton in Python. They've also in, in proto three added a, in addition to the binary encoding, you can do a JSON encoding and decoding. So, you know, give you a little more flexibility with maybe existing deployments and such. And then you can also import definitions from other proto. So it's, again, using the C metaphor, it's, it's just like a header file you can bring in for, to build up more complicated messages because you don't generally want to try and stuff all of your message types into one proto if you don't need to. Okay. So here's a simple proto file. As you can see, it's, like I said, it looks a lot like a C struct if you're familiar with that. There's some keywords like, so message is a keyword. So there's data types that I talked about before. There's enum keyword. And, and that's the, a pretty good example of what a very simple proto buff message might look like. So here's, I named my message type sensor data. So it's got a temperature or humidity and an enum that I use so I can say which kind of units I specify the temperature in. And so now here diverges a bit from C. They have these, these tag identifiers. And this is kind of key to how they achieve their, their encoding efficiency. Because these, these tags specify basically the, the order in which messages are kind of serialized and serialized. And also they're, they're used to handle cases where, because all of these, I guess I should mention that that all of these fields are optional. So I could send an empty, well, not an empty sensor data, but I could send a packet that's got a sensor data message in it that I didn't change anything.  And in that case, it will send it very efficiently because, because these are all considered optional, the, the sender when they encode this message, they will, it actually shouldn't encode very many bytes at all because it's not going to send any of the values that I didn't set. It's just going to basically send a token saying this value should take its default. Right. So the question is, yeah, do you have to specify the tag idea? Yes. That's kind of an irritation. But it's, it actually turns out it's, it, I, I used to think, well, why can't they just do that automatically for me? But in a minute, I'll get to like, some of the reasons why they can't. But yeah, you have to specify them. Okay, so this is, again, I mentioned they, we use the proto, protoc compiler is what generates this code that does the parsing and encoding of the data that's specified in the proto files. That command line there is what you would typically use to generate a Python output. You can generate all the, all the languages that supports, you can generate them all in the same location of Botox.  And like any good utility, you can invoke it with help and it will help. And then the output is a, in, in the case of Python, it's a, it's going to be a static descriptor of each message type, which along with a meta class you can use in your, your Python program to access the class at runtime. So, here's an example of what they serializing that previous message would look like. You create, create an instance of one of these sensor data objects and some, you know, the name comes, the, the, the module name comes from the, you know, the file name that Protoc generated. So, simple in this case, PB2.  And like I said before, if you leave one out, it'll just get the default value and so I didn't have to set all these and I'd probably demonstrate that, probably shouldn't have set them all, but anyway. And then you call serialized string and that does just what you think it would, which is, takes that sensor data message, turns it into a little, little string bytes and then you're ready to do whatever you want to do, send it over the wire, whatever. On the, on the other end, the receiver of this data, they, they get this serialized data chunk. Again, they create a simple sensor data object called parse from string and then they can access the fields to do whatever they want. So, and again, if, if the sender hadn't sent a, say, a temperature, when, when I read this temperature here, I would just get the default value, which is typically for, for numeric values of zero. And, in fact, if you look back at this, one reason, one reason, see there's a, this enum here has got a, a value of zero, that's, you have to start your enums with a value zero because that's what Pro-Toc will understand to be the default for that enum type. You don't have to have them in order after that, but you do have to have a zero. Okay, let's do a little, little command line thing here. I'm just going to show a simple example of where do I want to do this, let me know. The projector's on, I think I can see the light in there. Well, this is unexpected bonus. Let's see if I can figure it out here. What's that? Yeah. Yeah, but this has never happened. It always works. Okay, so I'm just going to show you a little example of that. So here I've got that simple proto again. So this is what I showed before. In addition, I'll just point out here that there's that up at the top here, I specify the syntax of proto three. If it's not there, it assumes proto two. So again, this is just what you're looking at before. And now the, that example that I showed of, well, first of all, I'll show you. So pro talk, I can type Python. Okay, so that's, that's how you're on the compiler. Pretty neat, huh? And then we'll run a simple thing. So let me just scroll that up a bit here so everyone can see. So in that, so you can see the payload length is nine bytes. So this is, it's sending basically 12 bytes of data because we've got a, there was a float, an SN32 or a U32 and an enum. So mapping that again to like a C world, that would be, if you were just sending a raw struct of the wire in C, you might not even just dump the struct and that would cost you to call bytes. This is only nine. And it's also got the structure encoded in it. So you can see already, it's a reasonably, you know, decent encoding savings over just putting a raw, raw bytes on the wire without even getting the structure that you need. So I'm probably saying this poorly, but this is less, less bytes to send just the raw amount of data that you would otherwise. But you're also getting the structure of the data in that encoding as well. So is that clear if it makes sense? My job is done. Okay, so let's go back to this. You can see I'm an expert at giving presentations. Very smooth. Yeah, so there we go. All right. So let's talk a little bit about accurate compatibility. So pro two to pro three is not what I'm talking about here. It's this is more along the lines. If you've got, you've got a server or device deployed in the field, and it's using like the first the early version of your protocol definition.  What about stop that built in? And they just have a few rules to guarantee backward compatibility. And that is one of them is that those numeric tags that I mentioned earlier, you can't reuse those. Once you once you've deployed it, let's say I want to get rid of the temperature field. So that was tagged to once I've deployed that I can't reuse that if I even if I want to stop using the temperature field, it's, that's just part of the that allows the old deployed devices to keep functioning when they get a new message that doesn't have that field. So new fields are ignored by old clients. And likewise, if an old client sends a field that's been deleted, new clients or new users of the protocol will just ignore it as well. So that's kind of the beauty of it is you don't have to care what you don't have there's none of this. I mean, you can still do it, but you don't have to do an explicit check when you get a packet. Oh, is this a version nine of the packet, then do this and this. Instead, you just say, Oh, I'm going to read this packet. And if temperatures are great, if not, deal with that. But if you know upfront that you have to deal with the possibility of getting default or missing data, then, then versioning, you know, becomes not such an explicit problem, you just deal with it implicitly when you're deciding how to handle your packets from start. Okay, so and then the encoding efficiency. In that previous example, I showed there was, you know, nine bytes to send 12 plus the structure was in there too. The way they do that is by looking at the properties of the data and, for instance, like when you're sending integers, a lot of the times the integers you're sending are not two to the 23. They're, you know, 12. Yeah. So they, the guy Google, you know, figured, you know, that that's the common use case. So they use a couple of approaches. One is called bar ins, which is basically, if you're only, if you only need, say, a byte to encode a value, then just use a byte. And they do that by basically using the most significant bit of each byte to signify whether or not the value continues. So and that and zigzag encoding. So that's for when you have a situation where your values, excuse me, then jump around zero. So negative and positive. Zigzag encoding is another way. And you can read the details and get help about how it works. But basically, the idea is you keep all those small magnitude numbers should have small encoding. And as I mentioned before, the selection of the data type makes a big difference in the how efficiency, how efficient the encoding is. So if you use an int 32 or 64 for negative values, the protobuf is going to encode those using 10 bytes each for the 64 value in 64 case. And maybe even an int 32 case. So definitely you need to make some, you know, intelligent decisions about your type of data, your representation of your data. And then also the fields that you use that you expect to appear frequently, those should have lower tag numbers than those that don't. So like the first 15 tags should are going to be your most frequent tag fields. Those will get encoded using one byte for the tag information. And then the next step up is to 2047. So your first 20,000 or 2047 field values should be your most common ones. And then again, that, you know, it does matter. Okay, let's do another command line thing. See if I can use the slag in this time. Correct. Yeah, yeah, they don't have to be sequential. They just they just have the the those few restrictions about I think you have to have a one one that's got tagged one. And then but after that, you can go nuts with ordering. Yeah. Okay, so another example, showing the efficiency again. So let's see here. This one's a little more, it's not going to be. I'll just cat this here. It's a bunch of different ways of encoding that same message. What it boils down to is, I've got a proto here where I want to show how choice of data type can affect the encoding efficiency. So what I've done is I've taken that same sensor data guy again, and I've introduced this new sensor data history message type.  And in this case, I've written a little, you know, a little Python script to just bundle up a package of 20 of them. And just to show the efficiency, how the efficiency can vary based on the encoding that you choose for the values. So in every case, the it's sending 20 of those sensor data messages. And again, in a C++ world, that would be the equivalent of 12 bytes of data. So you've got your temperature is four bytes, the humidity is four bytes, and then the four bytes for the unit type. So in the first case, it's, I've used, I used a float to encode them. And also I varied the, the kind of range of values just to show you how the encoding can vary based on the values that you're putting in those fields. So here in this case, I've got some negative, you know, a lot of my all my numbers are negative. And so you can see sending this floats is still 220 bytes for 20 were 20 of those sensor data. So it's 11 bytes per per packet per per struct, which is still less than the total size on on on encoded or uncompressed. And it's got the the structure in there as well. But then you see if if I use asset 32 instead of a float, now I'm down to nine bytes per per sensor data message. And but now if I go down to now my all my values are positive. So now you can see the difference between using an int. So up here, I was using an 32. And I was putting all negative values in there. So I was ending up with 17 bytes per message. Now, using the right data type, I'm down to 180 bytes, so, you know, nine bytes per per sensor data message. So the point is data data type matters. And then get when you get down to really big numbers, you don't, you don't see a lot of say, yes. Okay, yes. So the question is, what's the difference between essence and int? Is that Oh, I was saying the int in 32 versus this in 32. Yeah, so yeah, sorry. Thanks for a quick thank you. Yeah. So, yeah, up here, all my all my values that I'm putting into my temperature are are negative. And I'm putting it into an in 32. So that's, I'm it's it that results in this really efficient encoding. But down here, my values are all positive, because they're right around 50. And so I, the the using in 32 doesn't penalize you there because none of the values have gone negative. All right. Oh, so not yet. Not questions yet. So now I wanted to give a more in depth worked example of how this all kind of rolls together. So I've got over here, I've got the raspberry pi and an Arduino mega, although I got working on a Uno as well. The point being, this protobuf is running on both of these. And you know, it's, it's this is a mega. So it's got 32 megs of 32 K, no 32 K of storage. This protobuf plus the whole ethernet stack, takes about 10% of the storage on on that Arduino. And then on the Raspberry Pi, it's, you know, we're not so concerned about storage and such. What what it's, it's, it depends on the language. So like, oh, well, so for C in particular, they have there's a there's a third party package called nano PB. And that's what I'm running on the Arduino. That's, I think they said three K, this is the, you know, the size of the library on the on the embedded device. So this, yeah, so that Arduino is running C, C plus plus, you know, it's the it's the Arduino language, you know, which we all know is C. And that's what's running on there. So all right, yeah, so what I've done here is I've got basically an extension of that sensor data class. So let's say I've got I've come up with a simple, I got my little network of Arduino is deployed all over my farm to give me temperature and humidity readings throughout the day. So and let me just show you what that looks like. How's my time doing? Okay. Okay, so here's, I won't go into all the particulars. But basically, this is the the message system that I've set up basically set up. This is kind of like the top level message that is used to communicate between between my deployed Arduino's and my controller guy that's, you know, sitting on my laptop and or my desktop or whatever at home. And this is like just a simple protocol that I've set up so that I can when when the devices in the field want to connect to the controller, they send one of these connect messages. When the controller wants to tell them to do something, the controller can send them a command message. And right now, the only command type I have is report. So that's what that third report is. That would be like the the deployed deployed nodes would be using report messages to report their data back to the controller. And here's the report looks should look familiar, at least for the temperature and humidity part of it. There's our friends answer data. So basically, here's an example of nesting. So I've got my report. And within report, I've nested the sensor data class or message type. And then down here is an actual instance of the sensor data field. So this report message has two fields. There's a device identification field, which is defined up here, which is an ID and a name string. And then that's used for a lot of the so for like connect message. Basically, I can connect to the controller and that allows me to identify it, who I am so that can control and keep track of who's who. So that's, okay, that's all well and good. But so now, I've written a little controller class that basically sits there and wait in a thread for network connections. Now, because I'm a coward, I didn't do this with like wireless devices. So it's all, it's all hard wired ethernet. But you know, don't let that distract you because it's, it works just as well. In fact, even better over low bandwidth connections. But this is just so I had one last potential disaster for this talk.  And yeah, I don't have the heart for that. So so I just did it all wired.  Okay, so anyway, I got my my controller is running here by laptop and it's waiting for UP connections from from anything that speaks that knows it's there. So let's see, I'm going to oh yeah, so I'm going to go ahead and so I've got, sorry, we know it's just set up. It just the first thing it does is when it powers up as it just tries to make a connection. So I'm going to just reset it now. And now, in a few seconds, we should see, you know, response coming to the controller that says, Yeah, yeah, all right, I got a connection from that IP address. And so now the controller is going to periodically send messages to the Arduino saying every second or I think every five seconds, give me a report of your current data. So you can see it's reporting temperature and humidity. I don't another power leading that I didn't have temperature sensors or anything like that. These are just random numbers. They're randoms. But they have variations. So it looks like it's realistic, but it's not. It's really not 27. Well, it might be 26 degrees Celsius. What's that? Okay, so yeah, that's neat. So now we got this this guy running and let's say now it comes along. And I've got I've got my raspberry pie here and I decide, you know what, that thing's got a lot of power. I can send a lot more information. So I'll send a little bit more. And that is not what this is. So this is fancy sensor. So if you go to my GitHub repo, you'll see all the code laid out. And you know, I think I called the Arduino one is called puny sensor. And this is fancy sensor and fancy sensor. So much more than puny sensor. So let's do the profile here. Cheat. No, it's called sensor version two. So now readable. Yeah, okay. I've added a few things to this protocol. So it now I've added this history. So I've got to denoted my changes for version two of the protocol with this comment here. Protobuf doesn't care about comments. So I've just put it there for illustration purposes. So inside of my device identification message, I've also added this new field keeps history so that the controller can act accordingly. Also, down, I've also added a new commands. So in addition to reporting data, now I can also tell the remote guy to report data history and clear your data history. So and then some adjustments here to the the sensor, the report message kind of scroll off there. But the important thing is now I've added this repeated sensor data data history field, which this repeated keyword tells protobuf, you can have zero or more of these whereas normally, like the field right above it data, you can only have zero or one. This repeated says zero or more. And then the top level message thing still the same. So, so like right now, if I run, if I run my fancy sensor, and yeah. So I'll pop over to this window. So you see it's it's recognized this new connection right there. So there's device at the meat. And the device name is a luchador. But you can see it's still only sending old, old data. So for here from 1337 or not old data, but it's it's only the controller doesn't know that this is a fancy sensor yet. So because I haven't upgraded the controller yet to speak the new version of protocol. So the new fancy sensor is already sending or potentially sending this new version of the protocol that the controller isn't asking for it yet. So now let's go ahead and kill that controller and run controller version two. So now let me reset this to get them get the old Arduino. You know, continue to send out its old boring data. But now okay, look at this, I disconnected my Arduino connected. So it's still using the old protocol. But it's the controller is reporting Oh, hey, look, it doesn't keep history. So now I know, when I talk to the old to the Arduino, I know not to send it things that are germane to keeping the history like these new commands like send your history and clear your history. It could send it. It's just going to get ignored. So it's not like you have to carefully check for this. It's just more for keep things same on the controller side. But so now if I go to fancy sensor, and run version two, I should mention here that so that fancy sensor was actually running the old protocol as well. But now it's running the new protocol. So I guess I lied there before, but now I should see here. So now it's, it's, you can see the the old Arduino is still using old protocol. So the controllers telling it just send me your one data chunk. But now the the the Raspberry Pi is using the new protocol, which keeps history. And now it's every on the Raspberry Pi end of things. It's, it's every five seconds, it's taking a new data reading. So it's taking temperature humidity, rainfall, so cumulative rainfall and barometric pressure. So what's what's going to happen here is it's gonna, you'll see it start to building up and then it gets once the controller gets to a certain number of iterations through this loop, it's going to send a clear your data history message. And so you'll see, you'll see all those values go away and it'll get reset too. So yeah, so there it happened there. So get a report and sorry, catching up again. But so here's where it in the time that it sent the last report and they got the clear data report. The Raspberry Pi had already taken two readings. That's what it's to there. But really trust me, it works. Okay. Excuse me. Yeah, so that's okay. So that's, that's, that's what I got. Any questions? What? Oh, yeah, I guess they ran right up to it. Sorry. But we have a break after this. So if there's a lot of questions, go ahead. Well, a little bit. So it basically it breaks down to there's an initial bite and that's, that's got like the specifier of what the first field that's in this message is. And then if there's, if that message is there, then that message is data, or that's sorry, fields data is there. And then and then it has the next bytes or bits really that tell it, okay, is field two there? Okay, if field two is there, then here's field two's data and and so forth. So that's kind of a big note that means but back there. Well, so, so the question is, how do you know when you've hit the end of your message, right? Yeah. Yeah, so this doesn't solve that problem. It's so like for my examples, what I did was, I took that encoded payload, and I send an extra byte as the first byte of the packet, it's the size of the encoded payload. But I know it's so if it's a TCP packet, it gets busted up or whatever. If I read, oh, they're supposed to be 19 bytes, and I only got four, I'll wait to get the rest of them. Yeah. Yeah, that's, it's, it's not going to matter. It'll, yeah, it takes care of all the network and coding. Yeah. I just repeat the question, does ending this matter? No, it doesn't. Sorry. Oh, so you want to reverse engineer the, the, whether, yeah, you, I think there's enough information on the protobuf GitHub to, you know, that describes the encoding that you could figure it out.  So if they only send the, you know, check for valid license key, you know, message every 20 minutes, you may not catch that. And, and you might not get the full protocol, but yeah, sure. I think you could do that. Yeah, so the, you're saying this is Warchar module for that. I think you have to have the proto file for that, though. I may be wrong, but I think that's what I remember seeing about that.  Yeah. So the question is, can you control the defaults, not the proto three? So that's one of the changes that I made from proto two to proto three. Proto two, you can specify an arbitrary default, which was a nice feature, but it made language generation a lot harder, at least for some languages. So now they have these rules like, oh, it's a, most numeric types of the default zero. The enum default is the tag zero default, is the default, and, and like that. So in my mind, that was kind of a sad thing to lose for, you know, between going from proto two to proto three, because I use proto two a lot in past stuff. But yeah, you get what you get. Well, just going on the proto buff GitHub, their comparison to like the equivalent XML parsing was that it was 10 times faster. So it's because it is so less wordy, you just have that many few bytes to chew through.  It's a pretty simple algorithm, so it's pretty fast. Right. Thank you for mentioning that, because yes, and, and so the benefit over that is you don't have to now keep, yeah, you have automatic parsing and, and you don't have to worry about, oh crap, I, we changed byte three to, you know, now it's two nipples. You don't have to do that. It's, it's all taken care of for you. And yeah, if you're an electrical engineer, yeah. I'm an electrical engineer, so I can, it's okay. Somebody who's raising their hand back there? Yes, no. Okay.  But if you've got any more questions, feel free to grab me. And like is it all the, I think? Yeah. Thank you. That's my, you can find all my stuff there. I don't, I don't do the Twitter, I don't do the Instagram, none of that stuff. So, you know, look me up on GeoCities though.


from Korea to Germany, from Alaska to Puerto Rico. All over the world, the United States Army is on the alert to defend our country, you the American people, against aggression. This is the big picture. An official television report to the nation from the United States Army. Now to show you part of the big picture, here is Sergeant James Mansfield. Welcome to the big picture. Today we bring you the last in our series of programs dedicated to the American combat infantryman, the soldier who proudly wears the blue badge of courage. We will show you a pictorial history of the famous 29th Infantry Division, from training camp to victory, amphibious maneuvers in England, the battle of Normandy, St. Low, Brest, and then the march on Germany.  So now for more about the program, we take you to the office of Colonel William W. Quinn. How do you do, ladies and gentlemen? Today marks the 13th and last week of the blue badge. Consequently, on this program, we'll stress and review some of the points that we've made during the series, as well as honoring the increment of the 29th Division. We plan also to trace for you the evolution of the rifleman from 1776 until the present day. But now the famed 29th Infantry Division, the blue and the gray. And in the Revolutionary War, when the 29th was called the Colonial Militia, General George Washington was our first commander. It took a civil war to team up the blue with the gray. And after that, the North and South became one side, the United States. In World War I, our slogan was 29, let's go. And we went to catch up with the Kaiser. And when World War II exploded, the 29th was on the go again. Believe me, brother, we made tracks because we had a date. But with the equipment of those early days, it looked like we'd never make it. It was 29, let's go, rain or shine. And a 10 minute break felt like a two weeks vacation with pay. It was go, go, go all the time. We sweated it out on land. And units of the 116th wet their pants on amphibious maneuvers in the cold of January, 1942. Then we were ready, we were all set to go places. But nobody told us where we were going. All we knew, we had a date to keep, a business date. Scotland greeted us with music and a heavy cold fog. England looked better in the guidebooks they gave us. English fog and rain in the moors. But the training was strictly American style. 12 hours a day, seven days a week, and no pay for overtime. And if we ever forgot for one minute why we were there, why Jerry would send over his reminder notes every hour on the hour. London, Coventry, Dover, the rich and the poor, the sick and the healthy, the weak and the strong, all received the same pounding from the sky. We had our chance to see what happens to an apartment house when it meets up with the bomb. Then the top brass realized that all work and no play did Joe no good. Oh, we toasted merry old England, drank enough tea and warm beer to float the whole British Navy. Spring was in the air, so were the latrinograms. The date, anybody's guess. But everybody knew we were going to meet up with Jerry soon. Lumps in our stomachs were as heavy as the packs on our backs.  But each guy inside felt mighty lonesome. We tried to follow each word in that final briefing, but somehow we knew when the going really got rough, each man would have to make his own decision. Over 1,000 planes went in ahead of us, but not just to show us the way. 7,000 yards of steep cliffs and sandy beach, a little summer resort nobody ever heard of. Omaha Beach, June 6, 1944, dawn, D-Day. The Navy laid down a barrage that was heard round the world. The force provided that much needed umbrella. Even with this support, Jerry's steel pill boxes on the cliffs sliced us in two like a butcher's knife. And you can't hide on a flat beach. We graduated from kindergarten that first morning. By the next morning, we had gone through college and got our master's degree by pushing back the so-called master race. It was 29, let's go, and we went. The going was slow, but sure. We had made a date, and we were going to keep it. We never stood still. We moved up to Sand Low, 20 miles covered with blood, sweat, and tears all the way. Julius Caesar fought these hedgerows 2,000 years ago. It was a picnic for him compared to what we took. We dropped leaflets behind Jerry's lines. They read, your leaders have promised you that the Allied troops would not stay even nine hours on French soil. We've been here four weeks, but here was the only language Jerry understood. So we tore into Sand Low with a fury of a tornado. A silent tribute to Major Tom Howey, famed Major of Sand Low, whose See You in Sand Low became our battle cry in that fight. In five weeks, Jerry was blown out of Sand Low. The road was cleared for Patton's 3rd Army Drive on Paris. The last time I saw Paris. For many of us, there wasn't even a first time. We had to leave them behind in Sand Low. The cost? 7,000 killed and wounded. The battle for Sand Low was the bloodiest in the history of the 29th. The boys we had to leave behind were praised by our division commander, General Charles Gerhardt. He didn't mention that we all had earned the Croix de Guerre from the French. The old men took time out for the luxuries of life. This was one time we didn't mind standing online. Almost tasted as good as home cooking. They took care of the inner man and the outer man. A few luxuries, a chance to clean up with soap and hot water, rush up on a little American humor, and catch up on letter writing. Somebody must have read our letters. They answered special delivery. Before we knew it, it was 29, let's go. Our first look at towns untouched by bombs.  We didn't see an able-bodied man. It was with a poor town of breast. The wise boys were saying Jerry was on his last legs. It was only a question of days and he'd be tossing in the towel. They said, but the shells Jerry tossed at us told a different story. They held on to every apple orchard as if it were worth a million bucks. Then it was our turn. We hit them with everything but the ring posts. Not a single pound of Limburger cheese got into breast in one piece. Earl Simpson and Gerhardt were on hand to map out any change of plan. We found out what Hitler meant when he gave the order. Whole breast at all costs for three months. That order cost many a Jerry his future. Our planes flooded them out of their holes with flame. Washed them out into the open, gasping for breath. But the thousands of prisoners we took didn't pay for a single buddy we'd lost in the taking. The newspapers said we were mopping up. But Sherman had a better word for it. Hitler said three months. His timing was screwed. In three weeks, we personally exterminated and caught more rats in this waterfront city than all the quarter masters poison and traps could kill. The plague was cleaned up, 29th style. 13,000 little Hitlers having a lot of fun. Up came the 29th. And then there were none. Just a couple of battle weary boys crashing the act. Nothing was left alive in that skeleton city on that warm September day. The port of breast lay dead before our eyes. 20 feet of reinforced concrete. The submarine pens were made for resistance. Uncle Sam served eviction papers. No more wolf packs could board here. We relaxed with the USO. After a new lease on life, we moved 650 miles across France to another heavy date at the German border. The war had stopped there and was waiting for us to catch up with it. All we'd known so far was hedgerow fighting. But this was Germany, flat and dank, Jerry's own home grounds. And we knew he'd hang on to it. Concealed pillboxes, concrete emplacements. Every kind of man-made obstacle was thrown in our path. We blasted through town after town. Kreuzrat, Birgden, Hotarat seemed like we began every battle in the dead of night. Nobody ever got any sleep anymore. Every man who went into Schirwald and Roth was either killed or captured. Company K of the 115th was completely wiped out. When Company C ran into a crowd ambush, it looked like curtains. But Company B crashed the party just in time and forced Jerry to hand it over. When it was too early to hit the sack, we ambled down to the kitchen and watched them beat up the batter for tomorrow's pancakes. The Rhineland was waiting for a mopping up. And our Air Force were just the ones who could do a little accommodating. 24 hours a day, the Air Force dropped their heavy loads on industry, railroad yards, and marshaling points with pinpoint precision, leveling everything in their path. Settering, where a lot of our Joe's won the Distinguished Service Cross posthumously. Durboslar, the land so thick with mines and booby traps that we learned to take the shellfire standing up. Alden Hopen, Niedermans, it was every man for himself. Every day a counterattack. We fired over 1,700 rounds of smoke in one day. But as one Joe said, if I had to pay for it all myself, it would be worth every penny. Sooner or later, Jerry found himself mixed up with American steel. The heat was on. Each time he looked skyward, he was greeted with the burst of American calling cards. On December 9th, the West Bank of the Roar River was cleared. We hold in from December to February, staring at Eulich from the West Bank of the Roar River. While the First Army pressed closer to Jerry's seven giant dams, we waited out the winter, anxious to finish this assignment. We had our own Christmas Eve. We heard the Jerry voices across the river. Funny, they were singing the same songs. Our guards were alert for enemy patrols day and night. Many an innocent rabbit caught it from our nervous nellies. By February, the Ninth Army had secured the last dam. But Eulich, 2,000 years old, which had known Julius Caesar, Bismarck, and the Kaiser, still lay across the river, untaken. Twice the brass made plans. And twice the river floods changed them. At last, we were ready to roll. We sweated out the command to cross. 23rd was the date we left to give the crowds their roar cleaning. Our smokescreens blew back in our faces. So we gave them up and went for Eulich without cover. Our replacements became old men in the dawn of this new day. 30 seconds of combat is all it takes. The attached truck battalions got tired hauling ammunition and took positions in the gun crews. Those Negro troops earned themselves a letter of commendation that day. We even located the key to the city of Eulich and presented it to General Gerhardt. Jerry was crying uncle. But we were going so fast we couldn't even stop to listen. We took the attack into Munich and Gladbach on the 1st of March. The Nazi mark was branded on the faces of the DPs. And then we had a quick view of the Rhine. Chemical engineers supplied the smoke. Navy supplied the boats. 29th Division supplied the men. We captured the entire German V2 rocket division. And the end was near. And when we met the Russians, it was easy to translate VE Day. Victory is the same in any language. We packed up our medals and our victory. And we put aside our guns and took up prayer books in rooms still hung with Hitler's swastikas. The million and more men and women in our army are instruments of the nation's will for security and peace. Sustained by public confidence, they will succeed, true to the army's proud traditions. They reflect the spirit of our nation. For your army is a part of the people. It is composed of your sons. It is a faithful implement of democracy. And the American soldier. For the American people, my family, my fellows, my sons to come, I carry arms. Remember how I began? Born of explorers, columnists, hunters in deer skins, schooled in the wilderness, fighting for a continent. Remember Concord Bridge, 1775? Here it was, here at this bridge. I fired the shot heard round the world. Then I was the Minuteman, the embattled farmer, the son of liberty, raw militiamen, hardy continental. I was the hope of freedom on the frontier. I carried arms for the rights of man. Remember Valley Forge, I was the winter soldier, starving, marching, freezing, fighting, and praying at night, alone in the snow. Look at my battlefields, Bunker Hill, Ticonderoga, Lake Champlain, Manhattan, King's Mountain and Kalpins, Yorktown, marching, I made America great, north to the parallel 49, south to the Rio Grande, west to the mountains, marching, I made America free, working at peace. I built America, explored with Lewis and Clark, with Zebulun Pike, with Kit Carson and Davy Crockett. 1860, 1865, I was the blue, I was the gray. Marching, I made America free. Marching, I gave America peace. Marching, I found the American spirit. I led the way. I called to America, follow me, follow the American soldier, follow the trail I've laid. I convoyed the wagon trains, moving west, fought the tribes with Custer, rode the Oregon Trail, patrolled the wild American continent. My lonely outpost grew. My camps became crossroads. My frontier forts took root, roads from the prairies into cities. My infantry marching made paths. My cavalry riding made trail. For cities rise, I made the hikes to lay the tides and drive the spikes, uniting my country with rails. I am the American soldier, pioneer, Samaritan, vanguard. Wherever I was needed, whenever I was called, I stood and delivered. I came through. I was America on the march. I'm the regular, strictly GI. I'm the rookie, made soldier. I'm up from the ranks, hell for leather, right on the line, straight from the eye. I'm the rifleman, canineer, trooper, skier, engineer, gunner, scout, signalman, sentry, mechanic, flyer, in the eyes of the cannon, the marching refrain, the brains of the tank, the nerves of the plane. I'm the heart of the shell, the courage of truth. I'm the Liberty Bell. I'm the song of our youth. Your army is not just a man in uniform. Today, your army is part of an active combination of forces for national defense and world peace. And security is not taken for granted. So now, ladies and gentlemen, we bring to a close our blue badge series. We hope that you've enjoyed it, and we hope that you've become better acquainted with the combat infantryman who asked you to look twice at the wear of the blue badge, for it's the mark of a man. The big picture is a weekly television report to the nation on the activities of the army at home and overseas, produced by the Signal Corps Pictorial Center, presented by the US Army in cooperation with this station. You can be an important part of the big picture. You can proudly serve with the best equipped, the best trained, the best fighting team in the world today, the United States Army.


Nowadays with quantum physics you know they're really showing some of you saw that movie what the bleep do we know it was it was showing that that there's thoughts in consciousness and they're reflected in in things like peptides and chemicals in the brain and those chemicals influence you know how you feel in the body you're feeling pleasure pain if you're feeling horny if you're feeling hungry if you're feeling thirsty it's all starting with thoughts and consciousness and beliefs and that is getting reflected in the chemistry in the brain and that is getting reflected in the body but now quantum physics is taking one more step they're saying no you know the people that you meet and the environment that you perceive isn't out there we always were taught that you know the sound waves came in through the ear and hit the ear drum and then impulses came to the brain of all backwards these are not receivers we've been taught we've been brainwashed to believe that the ears are like receiving mechanisms even the way they're shaped they would always teach us that the sound waves are out there in the world and that they come in these are like speakers like this the sounds that you hear the world are coming starting off with thoughts in your consciousness then moving is brainwaves and the body is more like the projector the body's eyes are like like little lenses and projectors and everything you perceive as light they used to teach us light coming in through into the retina and then being reversed and then sending the impulses in and teaching us that we saw with external stimuli coming in now quantum physics is showing they certainly demonstrated what the bleep that no it's completely reversed that the body the eyes the ears these are projectors of the stimuli they're just it's an outward picture of an inward condition that starts with consciousness then it goes gets projected on the body chemicals and I know when I was doing it one-on-one with Maria Beatriz she was like but what about the cells in the body and don't they hold the memory no the body is is part of the projection as well it's the mind where these distortions and memories are and even a chemistry in your body that seems to have a direct effect on how you feel is just a projection of these thoughts everything starts and ends in consciousness and the body and the world are just projections as we've been talking about and that when you clear away the false concepts in your mind and the beliefs and you come clear consciousness completely then you do see a whole new world like the song says a new fantastic point of view because it's all starting on the inside and getting projected out that's why nobody makes you feel bad like the children say you heard my feelings you make me mad mom he did this he makes me I'm unhappy because of what he did you know it's all backwards and the mom was put out there by the projector and the kids and all the people and the environment and the Sun and everything it's part of the environment and the entire cosmos is projected out from an inward picture and there's only one ego there's not six billion separate little egos that are each projecting it's like all those bodies are all part of the one projection and there's only one mind dreaming and that's why Jesus says in the course when I awoke you were with me because people have asked me that question for years it's like well if Jesus already woke up why are we still here dreaming and it's like and I hear Course in Miracles teachers and say we all we all we all who's the we all who is the we all there is no we all as long you know one teacher said they ask him does God know about any of this and the teacher said God doesn't know about us who's the us that God doesn't know about of course God doesn't know about the us because there aren't an us you know it's not there God knows Christ God knows oneness God knows eternity


The six-day Gurupurni Makua Immersive with Maharishi Kapriti will take place from July 17th to July 22nd, 2024. The six-day Zurich Immersive will take place from August 4th to August 9th, 2024. For more information and to register, click the links in the description below. Namaste. What's your name? Natasa. Can you say that again? Natasa. This is my first time coming to see you and listening to you. Oh, can you hear me? Yeah. It was very interesting listening to the other questions and speaking about the ideology around violence. And when you were speaking, for me, the main, most violent ideology is white supremacy and patriarchy. And from a woman doing this work in a woman's body where gurus are mainly men, I've got two questions. One of them is around what your experience has been like doing this work in a woman's body speaking as a woman. I feel that I have been more supported in my work by men. And not men who looked at me as a female, but men who deeply appreciated the knowledge that I was bringing. And where I have met the highest resistance is from women throughout, throughout. And I've always pleaded with not just my women disciples, but also the women that have come to the satsangs. I've spoken about it time and again that if women don't support women as spiritual guides and teachers, we are doomed to having only men as our spiritual teachers. It is the women that have stood in the way, without exception, through envy, jealousy. I do understand that there are many spiritual seekers, women who are quite developed beings in that specific area of spiritual transformation. Or want to be gurus. I can understand that there is a degree of envy because of all the akutkhmas of dharmic guruvada, gurusisya parampara, which are seen as something to aspire to, and then envy grows there. There have been open discussions about it, in fact even in satsangs. So it's not something that is a hidden thing. And I go so far as to say in Atasa that it has been women who have prevented women from being spiritual guides, not in the far past, but certainly in the 20th and 21st century. And so I think the power of men has been overestimated. It is more the power of women. If women stand up, I can do a hundred times more. Each woman who stands with me is actually empowering me more than ten men would. But the support has come from men, not from women. And not because men are more powerful, not because they are more powerful and can achieve more in this world. The battle is much more when you don't have women to support you. And I do have very, very staunch and loyal female disciples. You need loyalty as a spiritual guide because you say things which are not always nice to hear. And if you have someone who is loyal with you, you have more backing. And I'm not talking about what they speak, I'm talking about the internal feeling towards me. So, and by the way, since you had mentioned white supremacy and the patriarchy, it's the white patriarchy that has supported me. And I don't see the white man today as anything powerful. They have the highest suicide rates in the world because they're losing context. Although they do have a position because the white male has created a lot of the systems that we rely on to survive.  And that damning has now turned against the very ones who are doing it because those men who upheld the systems that supported our societies are incapable. They're not even men anymore. They've lost the ability. They don't even know what they are anymore. And it's growing. I mean, if you look at the trans movements in America, the gender questions, they are very interesting because they're transformative and they are pushing the paradigm of the conceptual. It's one thing to push that paradigm of the conceptual and to move into a transformative state. Another thing, when that entire thing is extrapolated onto a functioning society and that society is expected to continue functioning as it has before it won't. It can't. And that becomes dangerous. It becomes dangerous to the, to all the structures in society. And danger is okay. Danger is good if you want to transform something. But what are you transforming it into? Where are we going with the gender discourse, with the white supremacy patriarch discourse? Where is it taking us? It shouldn't take us in that direction where we lose our individual freedoms. And there's a danger of that. That the Western secular democracies will devolve into socialist systems. There is a palpable danger of that. Thank you. He mentioned about the transformation. And so in order for there to be transformation, the women, the feminine had to rise in order to become more equal within the world, as you were explaining before, that still isn't the case. So there needed to be a push. There needed to be a transformation. The gender thing is maybe part of it. But what would you say the role as a woman, regardless of color, religion, is within transformation, within their own spiritual practice and within the global kind of increasing the global consciousness, forgetting about geopolitics? The women's liberation movement was important. It had its validity and just as you were saying, these movements have helped women to rise to equal status in society. And there is just no discussion about it that it was needed. You have the first wave of feminism followed by the second wave of feminism and then there's a fourth wave of feminism. And that fourth wave of feminism is stoop to conquer, bend in surrender, give the man his rightful place in the world again while maintaining your strengths. Your strengths arise not from criticizing the male, but from surrendering to the truth within, to the antar guru, the antar atman. It's a very real thing which women should consider seriously to live in this new world, to live with a sense of dignity and strength also. And that posture is one of bending down and surrender to the truth within, trying to distinguish between this loud, never-ending, demanding, insisting, pushing, yearning, opinionating voice of the ego and the very quiet, centered truth impulse. If you as a female are able to discern between these two and act from the truth impulse or at the very least refuse actions emerging from the ego, you are already more in a surrendered state. You're already more in a state of strength which then qualifies you to give the man his rightful position back and so create a dance which you yearn for anyway. Women even today, however powerful they are and however woke they are and however tough they are, and I'm talking about heterosexual women now in this context, they appreciate a strong man to support them, to stand with them, to bear them children, to support those children. They do and those women who don't see the positives of raising children are another discourse, that's already another discourse, but if you can sense somehow that you can contribute to society and firstly to yourself by raising kids, then you would learn, you would teach yourself how to be with a man so that he is allowed to do what he is good at and you can deepen in what you are good at and that then results in that Leela, that dance between the male and the female, which is what the whole story is about. If women continue to give in to their ego to that extent, they are not going to be able to deal with men anymore. Men become redundant for them and when men become redundant for them, they also start replacing them with women because there's a deeper understanding, but the juice of life then is less and then there is an emptiness and a void that arises from that. So that's why I call it the fourth wave of feminism, stoop to conquer, bend down, know who you are, that is the key, not putting down the male and trying to rise above him. You don't rise above him by criticizing him and you don't have to rise above anything but you strengthen to support. Men are fragile creatures. They are not what they are made out to be and more so increasingly. They are fragile creatures. I used to say they are like Ming vases. Keep it nicely on the shelf and polish it every day and put some flowers in it, that's what men are and they need to be treated that way. If they are not treated that way, they retreat and retract and then they just foray out to get what they want, which is sexual encounters and they don't want the responsibility and they don't need women other than for that, which is not how the idea is because now women are giving in to men in order to satisfy their desires as well but they are losing out in the long run because the one key to the magic cave that they had has now been taken away from them. The doors are all open, there's no magic cave anymore so no one has to pay anything to enter and then what is the negotiating instrument that women have? That is their negotiating instrument, it's always been. So the fourth wave of feminism locks the cave, there's entry, it's negotiated. I mean talking about strategy by the way, that's a strategy and I'd like to see what's wrong with it. It's not anti-feminism, it's not sexist, it's not anti-male, it's pro-truth. So unless one has tried out that strategy one can't really know if it works or not. So that's how the whole thing could evolve into something more, how else do we see society then in 50 years if things go on this way? Where's it going? Sperm banks, strange women, sort of beings that are not grounded in their own material realities, not grounded in their bodies, this idea of various genders and that sexuality, the female sex, the male sex is not determinant of the gender or how a person feels. These are all outgrowths of an ego that has gone beyond the ability of the body to handle. So the more the ego grows and the more desire grows, the more the fulfilling of desire becomes the raison d'etre, the main reason for existence, the less the truth is allowed to play out in any situation and the more the suffering increases, it's physical suffering, it's emotional suffering, it's conceptual suffering, it's transformative suffering, the reduction in the ability to create anything, it's unity consciousness down to zero, the inability to feel oneness with the other. So you have increasing numbers of people that are focused on fulfilling desires and it has reached a point where it's a very big mess and the whole transgender phenomenon is part of that phenomenon of the collective push towards the transformative, no doubt about that, which is happening and America is always the boiling edge of any transformative movement in the last couple of hundred years, even though it is happening and it is transformative, it also is destructive. It is destroying a lot because it's arising from this over-inflated ego, which means the next step is that those egos have to deflate. What is going to deflate those egos in the transgender movement is the fact that people will realize at one point that it doesn't bring them happiness. The happiness they sought as teenagers, as young adults in changing their gender in order to live better is a false promise and it hasn't held up and so that will be the beginning of the deflation which has already begun but the price that is paid for is the problem. Could I ask one more thing? Yeah, my question would be about then what would be the role with men who aren't able to see the feminine in their form, appreciate the feminine in their form and are seeing them for only those gender roles and I feel like the feminist movement has come a long way but the masculine movement, I don't know what to call it, still has a way to go in order to kind of come to that balance. What would you say would the role be for the masculine, for the man? The feminist movement arose because the male was not able to sense the female outside. He was not able to sense what he's dealing with and so he behaved in a way which antagonized the female outside. Why did that happen? It happens because he's not tuned into his own truth. Why is he not tuned into his own truth? Because he's under the specter of religion which top-downs to him how he has to behave and how not. In the interests of greedy capital, that's the play. When he doesn't tune in to the soul, to the truth, to the centre of his being, in other words, becoming aware of when the ego is taking over, when he doesn't do that, he also is unable to connect with the woman outside because the impulse of the soul of a male body, in a male body, will impulse that male body in such a way as to deal with the female outside. That is his biggest challenge. That is his biggest challenge from the day he's born, how to deal with the female outside. And if he's tuned into the truth, he's going to be able to do that. If he's living in a top-down culture, he goes with what is told to him and he's instrumentalised and the ego is supported in that whole process. So he's not able to relate to the female outside, which is why feminism had to rise. It had to. There was no way around it. And so he now is faced with a world where he has no more responsibility. He's becoming gradually redundant. I'm talking about over hundreds of years, not just tomorrow, but it is something one sees already. If he wants to take up his real role in society, he has to train himself to bend down in surrender to that source, to that truth, because that is where the guidance will come. He'll strengthen up into being more of a male. The more male he is, the greater his chances. The real male-ness arises only in a male who is connected with his truth. The more he's connected, the more he's in surrender, the more male he is. Not the other way around, because that surrender process is to pick up the weapons and that is the way the world should now evolve, with each individual going more towards their own truth, trying to discern between the ego and the truth impulse. That is a concrete material thing a man can undertake to strengthen his own male-ness. Does he want to do it? That's another question. He has to figure that out. But that will give him his true male-ness. And women are challenging.  If a man has to deal with her, he has to know himself, else he's in trouble. The six-day Guru Purnima Goa Immersive with Maharishi Kapriti will take place from July 17th to July 22nd, 2024. The six-day Zurich Immersive will take place from August 4th to August 9th, 2024. For more information and to register, click the links in the description below.


I've been toying around with the idea of like a dreamed symphony as a very interesting analogy for the nature of reality. And so whatever that source or that implicate or that infinite consciousness that that dimensionless singularity that's indescribable and indivisible that that is in manifest whatever the function may be. Of self determining its infinity, whatever the function may be. In a sense, we can analogize what exists right now as a symphony in the sense that all of us are artists in the symphony, and that again the idea of the illusory individual the artists just not what it appears to be, but that we we have this like unique contribution like you're going to play the clarinet I'm going to play the piano someone else is going to play the sax, and we're even if you play the same instrument still going to play a different melody or a different harmony than other people will. Some people are maybe playing a little bit more out of tune because they're in like the service to self mentality they're still thinking themselves as the ego and separate and other people are in the service to other they're playing into mentality. So, and our like slowly our like symphonic evolution has like the, the conductor is like the attractor, we can say in a mathematical system towards like an oral boros or whatever the telos is. So how do you like that like dreamed symphony analogy. I think not only is it an excellent analogy it may be the only viable analogy. Let me try to tell you why oh by the way, I would prefer to say that I am the violin being played and you are the cello being played and I like that better. Expand on that to more for us. Because otherwise you have a very dual thing right I am playing the violin as if the violin were outside of you. And then you have to account for that duality while if I am the violin being played, I am the result of the play. And that's why I'm different of you from you and you were different from somebody else we are all unique notes being produced by this underlying instrument. That look at the idea of notes abuse the vibration what is a vibration in air, which is produced by the vibration of a string or a hammer or a column of air in a in a in an organ. And it is crucial to have this as the metaphor it's the only metaphor I found so far because it allows us to make sense of diversity. If all there is is oneness. It's the only way for you to explain diversity. If you postulate that only oneness is truly real. Because diversity is then the variety of vibrations or the variety of excitations of that oneness. And if a guitar string can you can produce different notes with it by plugging it with in different ways, or by holding the chord different different points, holding the string at different points. But there is nothing to anyone of those very different notes other than that one string. But the only thing that's going on is string in movement, but there is nothing to denote, but the string. If you remove the string there is a note. It's like a ripple in water that there is nothing to the ripple but the water in movement, you can't take the ripple out of the water. You can't do that. If you take the water away there is no ripple. The ripple is the water there is nothing to the ripple but the water, yet. There are ripples of different frequencies patterns of movement heights, momentum direction. I mean, that's how you get diversity from oneness. Yes, it's the metaphor of vibration. So I think you're right on. Wow. I love that. And I know that Shri Arbindo said that the, the, the diversity of the oneness is the mathematics of the infinite. Look, even science is coming. Well, a philosophical part of science that arguably is not real science, but, but it's very interesting nonetheless. M theory, the idea of M theory is that everything, all reality is constituted of patterns of excitation of a hyperdimensional membrane or brain as they call it. And you can write all the mathematics for that. So even, even physics seems to be heading in that direction. I think it's an unavoidable insight. Patterns of excitation. And I know this is getting so interesting. I'm so pumped for, for further explorations here. Who else have you heard talk about the dream symphony because I want to research them as well. Well, I have a good friend called Fred Matzer. He's publishing a book next year. He has a film out called Beyond Me. And he talks about it, but I sort of plagiarized him a little bit because he's the one who said, I am the violin being played. Interesting. I'm not playing. I am being played. And his idea is that individuals don't really exist. They are illusions. So if they don't really exist, they can't be playing anything because they're not there to play to begin with. But they may be being played. They may be, they may be being played. Yeah, yeah. Good. And Orobindo also talked about the body as the receiving station for universal music. And yeah, that's another metaphor, right? Yeah, same metaphor. Yeah. So this is so interestingly triangulating on the nature of reality. And I'm so pumped to embed these beautiful wisdoms that you've been able to share with us, plus also that you've been teaching and that are also from all of the leaders because both of us. We stand on the shoulders of such massive giants. And this, this big synthesis that I'm super pumped and passionate about is really the, it's the culmination of like the apex of critical thinking around the nature of reality. And it's really, really important to use metaphor. It's so important. It enables conversation at the highest levels of abstraction. Exactly. And the way you started the interview, you made, you said something in the beginning that I didn't react to, but I didn't forget.  Yes, they are. And they ultimately hold no water because there is ultimately only one thing going on. The problem is, and that's what you alluded to right now, to get into the discourse, we have to make a concession to the current rules of the game. So I make a dualist concession when I label my view idealism as opposed to materialism and all the rest, because if you don't do that, you don't get into the conversation. Now, once you find the conversation, you can make the conversation implode from within my evil plan, but I have to get into it first. This is such such an interesting way of viewing it is that there's this, there's this like bell curve that we could call like, you know, somewhere around maybe 95% or so people fit within two standard deviations and we could call this like the evolutionary mixer, where many people are focused on survival and reproduction and many of the symbols that are being exchanged, like memes are of kind of that's that that they're not at the, the the edges of the the bell curve at these because what's going on at the, the regressive tail are still some people violence and slavery and it's all these bad things, but at this very progressive tail. There are people beyond two standard deviations that are the ones that are at the highest levels of abstraction that have to then create some sort of stories and metaphors like we got to do some Harry Potter. Like Pixar Walt Disney style communication of the stories to get the center the evolutionary pacer for people to kind of like level up like we're shooting portals in a sense for people to jump through. There has to be a sometimes this like concession, just because you can't bypass the gatekeeper, unless you do these concessions or maybe if you embed the stories in animations or music, or other things but even then, like, I really like your point on we need myths. We absolutely need the myths. Otherwise, otherwise we don't have a democratic process. So we need modern myths and we need to take myths seriously, not literally, seriously. Oh, Bernardo. Wow. Such a powerful conversation. Thank you for joining us on the show. I had a lot of fun. It was a pleasure. I just looked at the clock and it's been almost two hours. Yeah, yeah.