Welcome. This is the Jenkins user experience special interest group. Thanks for joining us today for topics we got the Jenkins contributor summit. What's happened recently in UI improvements. Are there any other topics that people want to be sure we add to the agenda. Okay. Great. Well then let's go through so Jenkins contributor summit is being planned with FOSDOM 2024 this will be February to 2024. In Brussels. We have space for 30. And we have five plus already confirmed attending. Including Uli Hoffner, Alex Brandes, Stefan speaker, several others. So if you're in Europe. You, it's a relatively low cost trip to Brussels for most people. I hope to be there still trying to get funding approved. Any questions on the contributor summit at John Mark Mason is is assembling the agenda. I'm sure I'm spelling as well. That's right to ease. There we go. See community Jenkins that IO for more details. Any questions. The next topic then is what's happened recently in UI improvements. And here, the, the key things I feel like we've got some, some improvements happening in areas that are not as typical. So the console visualization pull request has been merged. This one allows plug ins. Oh, come on. This one allows plug ins to use an alternate build log visualization. So things like pipeline graph viewer, or, or blue ocean, or other build log visualization tools can present their own link in the console. And released in I think 2.433 or 434 so we'll be first available in the first available in February. LTS, right, meaning it's already available in weekly first available in February LTS in 2024. Then Marcus Vinter of SAP has been doing this space monitoring improvements. And this one I yes has also merged, and I've been using it. And I'm really quite pleased with it. So it, it's helping us have a better experience for agent monitor agent management and monitoring any questions on either of those two. Okay, so then agent status monitoring improvements this one again from Marcus has also been merged. And if I remember correctly this one resolves a particular issue that he had found due to disk space issues where it would, if the disk space was freed it would not come back online. And now it will be brought back online if enough disk space is available and configuration is code support for node monitors. So thanks to Marcus Vinter for his work here. I've been using this one as well and been very pleased with it it's only available in weekly so next time it will be the first LTS that will appear in will be in February of 2024. Any questions on the node monitoring improvements that Marcus is implemented. The topic then was on cloud management interface improvements and here. I think that slowed down. I'm not sure unless others are aware of one that I've missed where cloud management interface has got has received significant new changes. As far as I know we're stable there and well behaved. There's still the open issue of the discovery of the cloud reordering, which we discussed a while back might have been in October. I think the result there was that Christina would look at how this can be improved. Thank you. Okay, Daniel thank you very much Christina and I had this conversation. A day or two ago where she asked mark I know there was a thing I was supposed to look at the UI on what was it, and I had completely forgotten so Christina I assume you haven't looked at it because I completely forgot. Okay, so mark to create a ticket. Oh, go ahead, but please. Perfect. Thank you. Thank you very much. Alright, for Christina to help us help with a UI proposal. Good. Thank you. I'm happy to prioritize that then since it's been a bit. Excellent. Thank you. Thanks very much. Thanks Daniel. And I'll I'll create that ticket Christina. Thank you very much for being willing. No, I'm happy to anything else on cloud management interface improvements. The next topic then was configuration is code errors and this one I believe is still an in progress poll request to Jenkins core right now when there's a configuration is code error. Jenkins core stops, it drops a core drops a stack trace and says, I'm exiting. And the desire is to have it instead keep the HTTP server running and present that to the user through the web page. We could look at that PR effect. Well, I'm not sure it will help to look at it. Any questions there. All right. Any other topics that we need to bring to you exit today. Thank you for joining. Was there anything that you you needed to bring to us as a as a UX sick. Actually, no, that's okay. Great. Any others. All right, then just as a brief status report, the, the, not UX related but developer experience related the brown out for Artifactory was successful in that it showed us we're in a really good place in terms of removing the repository that was requested. So, successful brown out Daniel, reverted. Have you successfully reverted or is that still pending. No, I reverted most of it. Excellent. Okay, so, so brown out has completed all post a summary later for others to see exactly what we learned from it. I've got some more log analysis to do to be sure that we understand all the things that happened. That's all that I had then are if there are no other topics I'd say let's call an end to this meeting. Recording will be available about 24 hours from now. Thanks very much.


And the House of Representatives on Tuesday in Abuja urged President Muhammad Ibu Hariri to declare a state of emergency on unemployment due to the spate of insecurity in the country. This came via the adoption of a resolution by the Speaker of the House of Representatives Fermi Bajabiamila on the consideration of its reports on the National Security Summit. The Deputy Speaker of the House Ahmed Wasey presided over the consideration of the reports. In his motion, Bajabiamila said the summit was held to generate ideas in tackling insecurity in the country, adding that the committee met with stakeholders and security experts in which suggestions were provided. He said that subsequently, the recommendations of the report were voted and adopted by the lawmakers.


Welcome to this lecture on digital communication using GNU radio. My name is Kumar Appaya and I belong to the department of electrical engineering IIT Bombay. In the previous set of lectures, we have taken a look at error control codes. In particular, we took a close look at the parity check code, the wherein the parity of the code word was forced to be even parity, meaning it contained an even number of ones. And we looked at the repetition code. So, if you take a particular bit and repeat it 3 times or 5 times, we saw that that resulted in a much lower probability of error on the binary symmetric channel. But the price we paid was that the parity check code could not correct errors, it could only detect a single error while the repetition code could correct errors, but it was very inefficient to use because of the low rate that it provided. To generalize our discussion on codes, in this lecture, we are going to take a look at linear block codes. And linear block codes are very commonly used error control mechanisms. And they form a building block for many practical error control codes as well. In particular, we will see the hamming code a little closely in further lectures. Let us now look at the definition of a linear block code. A linear block code requires two parameters to specify it n and k. So, you take a block of k bits that is you take your sequence of bits, take a block of k bits and then you map them to n bits where n is typically more than k using a binary linear transformation. The fact that you are performing a linear transformation is very powerful because it allows you to implement these operations effectively in software and hardware. The nomenclature we use, we have already been using this kind of nomenclature is that of n k binary code. And an n k binary code has rate k upon n. To implement these, we can use matrix techniques because it is a linear code. You will see that we can actually implement these using matrix multiplication with modulo 2 addition of course to implement the features. There are several useful results from linear algebra. For example, those are vector spaces that come in handy. While we will not discuss these in detail, I will mention some useful properties as and when required so that it becomes easy for you to understand. Finally, as mentioned, because of the fact that these are bits and you know operating on the field consisting of 0 and 1, the addition and multiplication operations are respectively exor and and therefore these are easy to implement using logical gates or even in software very very efficiently. So, let us just understand what a linear block code does. You have an n k linear block code that maps 2 power k k length binary sequences to 2 power k n length binary sequences. That is, if you take a block of k information bits, the total number of possible sequences that you can construct is 2 power k. These get mapped to 2 power k n length sequences where n is larger than equal to k, therefore there is redundancy added. For convenience, we denote the k length message sequence as a k size column vector m and the n length let us say n and the n length coded column vector as x. That is, you take the message express it as a column vector and the coded vector which is x is also an n length column vector. So, the k length column vector gives rise to an n length column vector after performing the coding operation. Now, naturally because we have this linear code, we can express this transformation as a linear transformation in the field of 0 and 1 once. That means, we can define a generator matrix G. The generator matrix G by convention however is defined in the transpose sense that is it has k rows and n columns. So, if you pre multiply by the vector m expressed as a row which is why I have written m transpose you get x transpose and the entries of G are 0s and 1s and each row is a code word. Let us understand what this transformation is doing. G is generally expressed in this way as a fat matrix meaning it has k rows and n columns. Each of the rows consists of something like a code word of this code because if you express if you take m as 1 0 0 0 or 0 1 0 0, it picks out that particular row each of those are code words because m can take 2 power k possible values, m transpose G can take a maximum of 2 power k possible values. Of course, if you take if you have some linearly dependent rows or things like that you may get less, but let us ignore that for now. So, if you carefully construct G you will get x for every m you will get an x and this x has enough redundancy. So, that even when there are errors you may be able to reconstruct them or you may be able to detect some errors that is the key. But let us understand this a little more practically before going into the actual mechanics of how you can use this generator matrix. Let us look at some examples that you have seen already. So, let us first start with our favorite examples the 3 2 parity check code and the 3 1 repetition code. So, let us look at these. So, if you look at the if you look at the parity check code we will actually write down all the elements of the parity check code it is 0 0 because we want even parity it is 0 0 0 0 1 1 1 0 1 1 1 1. Now, this code it turns out is a linear flow of course, a block code because you take blocks of 2 bits and map them to 3 bits we saw that in the previous lecture. But this is a linear block code why the reason is because we will show that you can construct a G matrix and use m's that is 2 length bit m's to generate all these code words. Let us see to construct G for this particular code word what we will do is the easiest way is to take some 2 linearly independent code words so to speak 0 0 0 is a trivial quantities you know you cannot really multiply it to get anything useful because if you multiply anything by 0 0 0 you get 0 0 0. So, let us actually define our G using any approaches I am going to take the second and third rows let us say I write it as 1 0 1 0 1 1 I took this one and this one. Let us now use the definition we have k is equal to 2.   So, you get 1 0 1 finally, if you take 1 1 it adds these 2 rows and you end up getting 1 1 0 now what do we conclude over here. So, there are many things the first the n length 0 vector is always a code word of any linear block code why because choosing m as 0 always results in the z n length 0 vector because that is a property of the linear transformation. Therefore, the n length 0 n length 0 code word is always an element of the linear block code that is the first thing. The second thing if you look at these these are the same as these in other words you are able to construct all your code words using this generator matrix G. This generator matrix G therefore, is a valid generator matrix for this code word ok great. Now, the mapping is 0 0 this is one mapping of you know m to m transpose G that is something which you have. The one other question which I have is of course, you saw that any linear combination of the rows of G is also a code word because you took 1 0 0 1 and 1 1 you got code words. Now, is this G unique where it turns out that this G is not necessarily unique because let us actually take a different G as an example. Let us take G to be for fun let us take it to be 1 0 1 and 1 1 0. You can show that you know these 2 are linearly dependent because you cannot just multiply the first and get the second ok. You cannot just add them up and get 0. So, these are linearly independent. Let us actually evaluate m and m transpose G for this again at 0 0 conveniently I am not writing the full form 0 1 1 0 1 1. If you take 0 0 you get 0 0 0 great. If you take 0 1 you get 1 1 0.  If you in look at this enumeration you get 0 0 0 0 0 is here 0 for 0 1 I will get 1 1 1 yeah and 1 0 1 is fine and for 1 1 I get yeah ok. So, now if you enumerate if you look at compare the comparison 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1. Now, this is another equivalent generator matrix for this code, but there is a slight difference look at the mapping from the messages to the coded vectors. In this case 0 1 became 0 1 1 this came 0 1 became 1 1 1 this came 1 0 became 1 0 1 1 0 remained at 1 0 1 1 1 was 1 1 0 here 1 1 is 0 1 1 here. So, the mapping between the messages and the coded vectors is different here. However, in terms of error performance or all other matrix these two codes are equivalent they are an equivalent code ok. So, you can actually come up with multiple equivalent realizations of the code this is something you have to bear in mind. So, for example, sometimes some people may say this is a 7 4 Hamming code and give you some generator matrix. I will then come up with 7 4 Hamming code and give you a different generator matrix which may have a different mapping nevertheless they are the same or equivalent code. That does not matter because the mapping between the messages and the mem transpose g's can be looked at as a table look up and you can always correct for it. So, couple of things to note are you can always just swap the rows and this is something I am not proving you also swap the columns of g without losing any performance the 0 vector is always a code word ok. Now, one thing to remember is when you construct the generator matrix you should take some linearly independent code words do not take 0 0 0 you will not get all the code words because 0 0 0 should not be a row of the g if you want a non trivial code ok. The next thing we are going to do is we are going to look at the n 1 let us take 3 1 ok. The generator matrix is very simple because if you have a 1 repetition code your m is a 1 element vector. So, g has to have only 1 row this is the only g that you can come up with because if you now take m is actually 0 or 1 since m is 0 or 1 m transpose g is either 0 0 0 or 1 1 1. So, for the n 1 repetition code the g is of this form ok. So, this is actually very very simple if you think about it. So, if I ask you for an n 1 repetition code the generator matrix is just a row consisting of n 1s because you are just going to multiply this by 0 or multiply this by 1 and you get the 2 code words because the n 1 code has 2 power 1 equal to 2 code words. So, the exercise is generate all code words and check the above g's we just did that and one other exercise is try to enumerate all possible generator matrices that are equivalent for this linear block code. Now, now one thing is that see how can we check whether the channel output is a valid code word. So, one thing you can do is you can go through all possible m transpose g's and then when the receiver you get any n block sequence you can keep checking whether it is one of those one of those one of the one of the code words if it is not a code word then you have to do something. But this kind of comparison with each code word is not efficient it is not the right thing to do because you have some interesting properties by virtue of this being a linear code. So, in other words whenever you receive an n bit sequence it is not a good idea to check this n bit sequence against all 2 power k code words to check which message it corresponded to. In fact, you should find out whether this is the code word by performing a linear operation the hint I am going to give you is that since the code words were generated by taking linear combinations of the rows of g all you need to do is to verify whether you are definitely in the linear combinations of the rows of g by doing by you know to do that you can always come up with a so called check and this kind of check is done by using a parity check matrix this parity check matrix is a pair matrix like g and h come in pairs whenever you generate your miss your coded word coded words there is code words using g there is a corresponding h that will check whether indeed this particular n bit vector is a code word of this code. What surprisingly one way to think about it is you have a total of 2 power n possible n length sequences only 2 power k of them are valid code words and these 2 power k form a vector space. Now what you can do is the remaining 2 power n minus k are not code words right. So, you can come up with a way to check this property using h. So, the h is a matrix of size n minus k cross n such that h m is 0 for all valid code words that is you need to come up with n length you know strings who which have 0 inner product with all the code words this is the one way to look at it. Another way to think about it is h times g transpose yields the 0 matrix ok. So, how does this work and why does this actually function well. Let us actually perform an exercise and try to intuitively guess the parity check matrices for the repetition code and our parity check code ok. So, let us look at the parity check code and we will take this particular version of g sorry ok we want. So, this in this case is a 3 2 code n is equal to 3 k is equal to 2. Now h is n minus k rows n columns n minus k is 1 this h ok should be 0 for all valid code words. So, in other words you want h times 0 0 0 is 0 that is fine h times 1 0 1 should be 0 h times 0 1 1 should be 0 and you want h times if you add this 1 1 0 to be 0. So, you want a parity check matrix that satisfies this. Now how will you get such a parity check matrix now we will try to guess ok. So, we let us let h see h is going to be a binary matrix. So, we can basically have entries a b c ok. Now what is the first equation tell you a plus c remember XOR is 0 ok. The second equation over here says b plus c is 0 and the third equation says a plus b is 0. So, we need to just come up with a b and c that satisfy this right. So, we need to come up with just a b and c that satisfy this condition ok. Now one way to do it is to guess ok. Now one guess I will make is that if I guess that h is equal to 1 1 1 does that satisfy this condition 1 plus 1 is 0 1 plus 1 is 0 in the binary sense 1 plus 1 is 0 1 plus 1 is 0. I am guessing that 1 1 1 is the parity check matrix. Let us check. So, remember our code words are I am ignoring 0 0 0 because that is always going to give you 0 this is 0 1 1 what do you get 0 plus 1 plus 1 0. If you do 1 0 1 sorry that gives you 0 great and do I need to check for 1 1 0 no because if I just add this 1 and this 1 I get 1 1 0 and I can check it or 1 1 0 is going to add the first 2 and I get it. So, in other words for the 3 2 parity check matrix 1 1 1 is the parity 3 2 parity check code 1 1 1 is the parity check matrix. So, h is equal to 1 1 1 is the parity check matrix. You can also verify that h times g transpose is 0. So, what is our g over here? Our g is 1 0 1 and 0 1 1.  So, this indeed is the parity check matrix of the code ok. So, what size should this be? See this is n minus k cross n and this is g is originally k cross n cross k. So, this should be n minus k cross k 0 matrix and that is indeed the case. Let us actually repeat this for our repetition code. Let us say 1 1 1 we want a parity check matrix. For this right let us actually take the approach of finding a h such that g transpose for h g transpose is 0. So, n is equal to 3 k is equal to 1. So, my h has to be a n minus 1 2 cross 3 binary matrix right. So, I need a 2 cross 3 binary matrix. Now, I want h g transpose is 0 that means, h times 1 1 1 should be equal to what is the 0 size. So, remember this is n minus k cross n this is sorry this is n minus k cross n this is n cross k. So, this is n minus k cross k in our case it is 2 cross 1. So, we want 0 0 we want something like this ok. So, now how do we get it what h do I choose ok. Now, it turns out that the parity check code I chose earlier and the generally you know and the repetition code I am choosing they are very connected. So, if you just use the same approach you know to say I want to you know I will choose the entries of a b c d e f and things like that and work it out you will find that the h is actually the generator matrix of the parity check code there, but let us actually not do it that way let us do it using a more systematic approach. See if you want h g transpose to be 0 you need to know choose 2 rows such that their inner product with h r 0. So, I can always just guess. So, let us say that 1 0 1 and 0 1 1 are my rows. So, you can check that if I choose my h in this manner this will satisfy this condition 1 0 1 times 1 1 1 is 0 0 1 1 times 1 1 1 is 0 also this is not the unique h you can also choose 0 1 1 1 1 1 0 this will also work. So, once again you can verify that the h is not unique ok there are multiple equivalent h s all h s are equally you know usable you can always come up with linear combinations of the rows and come up with different h s. So, this it turns out is the parity check matrix for the code.  So, now in this manner we are able to come up with parity check matrix and the reason it is n minus k cross n is because this n minus k is indicative of the vector space elements that are not in the k. So, it is like you are partitioning your 2 power n into 2 power k and 2 power n minus k that is the reason why it is you know n minus k cross n and in fact there is another result that says that these codes are duals of each other and there is a big literature around how you can use this geometry to good effect. Indutively we want to construct a parity check matrix and this parity check matrix is very very useful to check whether your code word is correct without having to do the comparison with all the g's all the m transpose g's. So, you can always just go through what we just did and we just did this what 3 length sequence yields 0 into 0 into product of 1, 0, 1 and 0, 1, 1 we found that it is 1, 1, 1 of course, 0, 0, 0 is trivial do not take that. If y is an n cross 1 received vector from the channel now here is the interesting part any 1 bit error will lead to h y is equal to 1 which is not 0 why because if you now look at the h where we chose 1, 1, 1 right it should have even parity right, but if only 1 bit is flipped 1, 0, 1, 0, 1, 1 or 1, 1, 0 or 0, 0, 1 any of these even if 1 bit is flipped if you multiply by this h 1, 1, 1 by the received code word you will get 1. So, the parity check matrix has a parity code has a parity check matrix if you multiply the received code word with this h if only 1 bit error has occurred you will always get 1. So, multiplying with the parity check matrix signal that a bit error has occurred. So, this indeed is an interesting way by which you can detect the errors of course, intuitively what you are doing is just exhoring the code words bits and checking that the parity is 0 if it is 1 then you can say that 1 bit has error has occurred of course, as I remember as you remember in the previous lecture if 2 bits 2 bit errors occurred or all 3 bits are flipped then of course this fails but still if only 1 bit error has occurred then this will correctly tell you that 1 bit error has occurred. Similarly, if you take the 3 1 repetition code as we just saw the generator matrix is 1, 1, 1 and this is one of the equivalent parity check matrices you can of course, check that all proper code words yield hx is equal to 0. So, 1 bit error directly yields the column with which the error has occurred how? See here is the interesting part if you take hs 101 and 0, 1, 1 if you then post multiply if you then post multiply by any code word. So, what are the code words? The code words are 0, 0, 0 and 1, 1, 1 ok let us actually just do this. So, this is the. So, if you take this if you take the parity check matrix in this manner and let us say that you send 0, 0, 0 but 1 bit error has occurred what do you get? You get 1 this picks out the middle column 0, 1. 0, 1 if you rate it in binary is 1. So, if you basically label this as 0 label this as 1 label this as 2 this indicates that a bit error has occurred in the second bit which is indeed the case and this is not magic let us try something like and let us say you sent 1, 1, 1 but the first bit was flipped ok 0, ok I am my labeling is probably incorrect, but it is ok maybe I will just change this change this labeling to this is 1, this is 2 and this is 3 yes because you did 0, 1, 1, 0 ok. So, now if you lose this approach 0, 1, 1 picks out the sum of picks out the sum of these 2 and I get 1, 0. 1, 0 indicates that the column corresponding to 1, 0 has an error which means the error is in this particular place and flipping it gives you the correct code word. So, in this manner using a repetition codes parity check matrix just by finding out the result 0, 1 that corresponds to the column where the error has occurred and that flipping that bit will give you a valid code word. So, this is something that will come in handy if you design your parity check code such that it has a nice parity check matrix finding out h times whatever it is received will give you the parity and will rather will give you the column or as combination of columns of the parity check matrix that will tell you the exact location where the error has occurred and you can flip that to get the code word and use that to find out which k bit message was sent. Therefore, this confirms that your repetition code can correct 1 bit error reliably. So, as we saw for these linear codes by multiplying by the received block of n bits you can easily find out whether you have a valid code word, but if it is not a valid code word most you know multiplying by h gives you a non-zero element and this non-zero element can tell you what the error is assuming that an error has occurred a detectable error has occurred. Let us take a closer look at the 3-1 repetition code as we just saw all possible single bit error vectors are 1 0 0 0 1 0 0 1 and with the respective h times the error being 1 0 0 1 or 1 1 this is for the parity check matrix that we saw earlier. If you take any of your code words x which is basically 0 0 0 or 1 1 1 written as a column vector I am writing it for convenience in this manner for an error pattern e with y is equal to x plus e. So, x is either 0 0 0 or 1 1 1. Now, one thing you saw that whether I sent 0 0 0 or 1 1 1 h times y always gave you the correct location of the error correct you know h times e y. The reason is because if you calculate s defined as h y s is also called syndrome h y is equal to h times x plus e and because this is a linear operation you can write it as h x plus h e. Now, you know that h x is 0 for a valid code word because when you multiply x when you multiply h by 0 0 0 or 1 1 1 you get 0. So, you get only h e as a result. Therefore, whenever you have any linear block code multiplying h by the parity check matrix gives you the same error pattern irrespective of the code word that you sent. In other words whether you send 0 0 0 or 1 1 1 if the error pattern is the same h times y will be the same value that is irrespective of what code word you choose the syndrome or h y depends only on the error pattern. This is the neat kind of result that we are going to use when we discuss single error correcting codes called hamming codes in the next lecture where we are going to use the syndrome to correct errors. So, to summarize in terms of any error correcting code, but in this lecture about block codes redundancy in the bits can help detect and correct errors and in particular we took the binary symmetric channel as our model and it is a simple, but practical model for handling errors in digital communication systems. As I discussed with you you can take BPSK over AWGN as one of the typical use cases of the binary symmetric channel, then we discussed the basic concepts of linear error correction and detection, linear error detection and correction and we generally basically gave some very simple example of linear block codes that can be used to detect and correct errors. Of course, we also discussed that whenever you take from k blocks to n blocks you are incurring an overhead. In fact, out of those n bits only k correspond to information bits and the n minus k are redundancy and this n minus k upon n is to be thought of as a redundancy. So, the rate of the code is k upon n, you want this to be as high as possible, but of course, you have to pay a price for the redundancy. In the next lecture we will continue our discussion on error control codes and in particular we will look closely at the so called hamming code. Thank you.


Tiny but tenacious, the tick is one of the most dangerous creatures on earth, and perhaps one of the most misunderstood. Because while typically associated with Lyme disease, ticks can actually harbor more than 120 different species of bacteria, each a unique source of infection. Unfortunately, the one-microbe, one-disease myth surrounding the tick extends well beyond the court of public opinion. The lack of broad spectrum diagnostics in the clinic means that a single sufferer of tick-borne disease may spend up to $60,000 or 54,000 euros on more than 11 visits, doctors, and tests just to get a proper diagnosis. A 2018 blood analysis of 432 individuals showing symptoms of Lyme disease puts the problem in perspective and calls for revamped screening procedures that decrease the probability of missed or missed diagnosis. Each individual was confirmed positive for Lyme disease following criteria established by the Centers for Disease Control or alternative test platforms. They were then tested against 20 different microbes. These included various species of Borrelia, the bacteria linked to Lyme disease, tick-borne co-infections, and opportunistic bacteria and viruses. An astounding 65% of patients responded to multiple microbes, and 72% of specimens deemed negative by the CDC criteria responded positively to Borrelia's persistent form. Overall, the research indicates that 85% of individuals, regardless of their Lyme disease diagnosis stage, following the CDC's two-tier criteria or other methods, will respond to multiple microbes. According to the authors of the study, that effectively debunks the public health misconception that tick-borne disease is limited to Lyme. Screening for multiple microbes, they say, would reduce the rate of misdiagnosed or undiagnosed cases and increase the health-related quality of life for all patients. That's crucial because by the year 2050, tick-borne disease is expected to affect 35% of the global population. The authors argue that a paradigm shift in clinical diagnostic practices for tick-borne disease is long overdue. Now is the time to curb the growing tick-borne disease epidemic around the world.


If you haven't noticed in the news lately that eggs are no longer good for you, I wouldn't believe you, considering how many articles have been published over the past few days. CNN, Fox, USA Today, CBS, Daily Mail, New York Times, Science Daily, Walshy Journal, Today, AP News, Gizmodo, Time, WebMD, NPR, WTOP, and I'm sure I missed at least another dozen. Now, all of these articles were based on a study published several days ago. By a student, I might add, with no peer reviewers outside of a specific medical school for the most part. But before we go into that, why wouldn't they want us to eat eggs? Definitely profit, and possibly the nutritional properties of eggs. The profit margin on grains are substantially higher than eggs. The percent farm share for eggs is about 54%, whereas the marketing bill share is 46%. Cereals and bakery products have an 8% farm share and 92% marketing bill share. This simply means that there are so many more businesses invested in grain sales from a profit perspective that when we consume eggs instead of grains, they are losing a lot of money. Do they really want us not consuming eggs because they're concerned about cholesterol giving us heart attacks? Well, I find that incredibly unlikely considering the profit of medicine, statins, getting people sick, and if people consume vitamins, they're not going to be so sick. Eggs are incredibly good for you. They have all the vitamins, minerals, and fatty acids that are essential to the body. Truly a super food. And eggs are one of the only foods that contain these nutrients that people consume on a daily basis because of the fear oriented around other animal products. If you guys want to know more about the health benefits of eggs, definitely check out my video that I'm going to link at the end. Onto the study, Associations of Dietary Cholesterol or A Consumption with Incident Cardiovascular Disease and Mortality, published by Victor Zhang, a PhD student at University of Washington. So I started googling the peer reviewers associated with the study and Linda von Horn came up as another peer reviewer on a study on Seventh Day Adventist Adolescence. Now the Seventh Day Adventist Church has a religious belief in a vegetarian diet and I thought this was just a coincidence because there are plenty of studies with Seventh Day Adventists. But I actually googled the name of the medical school and on a map I noticed there were quite a few Seventh Day Adventist Churches in the area. But this didn't seem irregular because most cities do have Seventh Day Adventist Churches, although not nearly that much. But then I looked even further into the studies Linda von Horn was associated with and a lot of them were from the American Heart Association. One of the founders in the American Heart Association was Dr. Paul Dudley White who was a Seventh Day Adventist. Winston J. Craig, another Adventist who has reviewed papers for the American Dietetics Association, mission has been quoted to prepare dietetic and nutrition professionals for service to their church, society and the world and to influence the community at large to affirm the Seventh Day Adventist lifestyle, including the vegetarian diet. Well with that out of the way, it's safe to say the study shouldn't even be looked at but let's see what they actually did here. The main claim is that for every egg consumed or amount of cholesterol in the diet the risk for cardiovascular disease goes up by approximately 6%. But this was gauged by a relative risk of 1.06 which means 6%. The issue with this is relative risk is not absolute risk. Because if relative risk was absolute risk then technically anyone who consumes a certain amount of cholesterol is going to die of a heart attack. You might notice the word adjusted a lot in this study. That is accounting for confounding factors as well as the method they used in this study. The method they used in this study wasn't actually based on egg consumption. What they did was they took 6 large cohort studies of hundreds of thousands of people. They plugged the data into some sort of algorithm and they used that algorithm to try to figure out how much cholesterol was in the person's diet, how many eggs were in the person's diet and then they adjusted for these confounding factors such as smoking, age, they probably didn't account for other lifestyle confounding factors in this algorithm. Now there are dozens of variables that they can account for and they can choose which ones they want to, which can drastically alter the results. If you change one variable that you're plugging into your algorithm that will make the difference between you finding a positive and a negative association. This is why relative risk in the context of epidemiological studies is garbage. The relative risk of cigarette smoking is 70, 80, 90, 100. It's a 10,000% association with lung cancer and cigarettes. Egg consumption, 6%, if you actually understood science, this is a joke. I could put this in my stand up routine if I could actually make it entertaining. So here is a chart from a study on cancer rates on food ingredients. Each of these dots represents a relative risk association for cancer rates and every single food on here has a negative and positive correlation with cancer ranging from 0.5 to 2. The issue stems with the ability to remove whichever variables don't fall in line with what you believe in. If any single individual food can have a relative risk of 0.5 to 2.0 in the context of cancer and most epidemiological studies on nutrition fall in a range of 0.8 to 1.2, that says something pretty significant about the studies these people are actually using to make health decisions. Fortunately for Frankie Boy, in the limitations of this study, they essentially debunked themselves. The first limitation is measurement error in self-reported dietary data and it relied on a single measurement of egg and cholesterol consumption. This is something that is already ruining the whole study because the size of an egg depending on where you're located, depending on what eggs you purchase is so different and the size of the protein that you consume based on your depth perception that you're reporting to this study is also an error and that error is way more than 6%. The next issue is exposure misclassification. What they did was they applied an average of egg and cholesterol consumption to every single person involved in the study, but this isn't true at all. It's like going to a beach and saying that everyone is in the ocean because you drained half the ocean out, it literally doesn't make any sense. Heterogeneities, the next issue, is variance in data collection methods and as you can imagine the more diverse the data, the harder it is for the algorithm or any person to analyze the data and draw conclusion from it. If you have 10 people conduct an interview, you're going to have 10 people do an interview in 10 different ways. Collustral confounding was likely, which means they didn't account for certain lifestyle factors such as sedentary activity that could easily have changed that relative risk substantially. They also didn't have detailed cause specific mortality. This means that they're just blanketing all the cardiovascular events from stroke to heart disease, whatever it may be, to cholesterol consumption. This is not good science considering there are so many different metabolic processes in the body involved in some of these other cardiovascular events that have nothing to do with cholesterol. Different nutrition and food environments can debunk this study on its own. A standard American diet mixes fat and carbohydrates, which is not good for metabolism. It causes lots of oxidative stress through reactive oxygen species. This is because the body is running on a glucose-driven metabolism and fats are not getting metabolized. That results in more free fatty acids in the bloodstream. As you can imagine, more free fatty acids in the bloodstream make more fats prone to oxidation. The context, guys, is always standard American diet bad. Nothing else really matters if you're on a standard American diet. You have to remove the foods that are an issue first. High carbohydrate, high fat, processed food, high omega-6, oxidating, vegetable oils. And finally, the studies are observational and cannot establish causality. How much evidence do you need? The profit margins on eggs. It has nutrition that they likely don't want us to have. A student wrote the paper. There's a religious affiliation with the paper. The paper itself is telling you it's not valid. If that hasn't convinced you, this will. In 1980, China consumed 2.5 kilos of eggs per capita, just over 5 pounds. In 2005, that number increased 10-fold to over 20 kilos of eggs per year. 44 pounds of eggs! So, shouldn't they be dropping dead, right? No. If you look at cardiovascular mortality during that time period from 1990 to 2005, it went down substantially. So, if I increase my egg consumption 10-fold and cardiovascular disease risk goes down, guys, these are simple statistics. Egg consumption per capita and cardiovascular disease mortality. Answer this question very, very simply and easily. There are even studies that demonstrate each 10 milligram increase in total cholesterol is associated with a 4% decreased risk of in-hospital mortality. This is wacko-dacko-cracko stuff, guys. I don't know. I really don't know what to do. The appeal to authority is unbelievable. And the media presence and people fear-mongering stuff is such a powerful tool. You have to fight against it. And the best way to fight against it is to call out the BS, the propaganda-type stuff that we can use. Oh, there's religious affiliation. Oh, these simple statistics, China's egg-capita consumption, these simple things that are very easy to understand are what we need to use. It was written by a student, huh? There were no peer reviewers outside of the medical school. These biases and these things that are very simple to understand that discredit the study is much easier to do than explaining why the study itself was done incorrectly. And someone that's more advanced, you can just show them the limitations of the study and explain why. Most people aren't going to be able to grasp the whole concept, but hopefully I've helped you guys do that and you guys can go enjoy your eggs. As I said earlier, definitely check out that egg video that I'm going to post here at the end. Eggs really are a super food. Thank you guys for watching. Please like, subscribe, hit the bell icon, and share the video if you can. Down below is my Patreon. That is a great way to support me as well as get personalized question support one on one. There's also my Amazon shop where I have things like my vitamin D3 supplements, things I use in my daily day to day life, nutrient dense foods like cod liver. There's also my Instagram guys, Twitter, I try to post on social media every day. If you guys do want to reach out to me for one on one consultations in regards to increasing the nutrient density in your diet and becoming the optimal version of yourself, you can reach out to me, frankatufano at gmail.com, you can reach out to me on Patreon, and you can also reach out to me on my website frank-tufano.com.