Maybe the week before like there was an NBA playoff game yesterday. Nobody cared So baseball baseball still hot in the streets man. I feel like there's probably another reason for that I don't know if you heard of the NFL. There's another sport, but like You know, it's it's a dose like everyone gets their dose of the NFL, whatever you were missing James. How are you doing? Oh I'm awful. I feel terrible and I wanted to go to that one of the worst part is Katie's gone for the Day she's gone yesterday as well. So it's just me and Mack home alone and where you don't have any garbage bags I haven't had time to go buy any yet.  So it just like I'm sick and I'm also living in squalor Yeah, perfect. It's like a bad combo every day Cameron can you see it? Hello Today is Monday 14 We're back at it football happened yesterday. That was cool Jimmy Notably usually there It's been replaced by a bunch of hats because they do better content.  I guess Katie was just sick and didn't have it So, I don't know.  We are doing the voicemail episode special guest Trevor Ploof as We hope Jimmy survives. I want you to Kind of check what I got going on here. Not only do I have the pinstrips. Yeah, I Got the Seahawks hat on. Yeah, because Russell Wilson is Also a member of yeah, New York Yankees. Yes, I Heard they were gonna take number three out of retirement and give it to him because he's that damn good Where'd you hear that from again? Where'd you hear that? I just made it up sources former twins games does familiar with me does talk does talking baseball has been to the second deck in left field one of the Two times I've appreciated Trevor Ploof this year The other one was because you told me you faced Mariana Rivera and I was like god damn it man. That's pretty cool. So Spend most my days talking to you anyways, but normally not in the Yankee circles. Where are you? Where you at with the yanks trev? I'm excited to be here because I believe I've watched more Yankee games than any other team this year And I'm listening with the home broadcast all of that. So I feel like I'm pretty caught up on the Yankees I've been kind of telling you guys to chill out a little bit. Yeah And here we are after did they sweep this weekend? They swept four games. They've won five in a row I mean, they're back.  Is it is tonight Taiwan Walker? It's Davy day for you It's Davy day. It doesn't matter who's out there baby day So yeah, Davy exciting. It's gonna be second time facing a team.  That's that's get a real gold chain You get the little baby this big then it's this big and it's it's a progression. Yeah, you went straight to the top Yeah, you know it Know it that looks like Miguel Sinos chain Yeah, God How different this would look on Miguel Sinos.  Yeah It's me Davy Garcia No, it's just Jake Well, or is it Tyler? I don't know Jean-Carlo Stan just got called up by the Yankees. That's in theory very good news Excited for that. I actually haven't thought about that. Yeah watching him play baseball I kind of ruled that out He was like our best hitter the first couple weeks because he's won an MVP, but we don't think about them. Um They said don't end of our which is a little sad because they kept Tyro who's been playing bad But I guess they want the infield running and who are is not gonna get at bats. I guess they want to get them at bats Against Clark Schmidt at the AAA site pretty bizarre and the other big news that just happened is they announced the MLB playoff format and They're playing every day. So like Hap or Monty would be starting games. So I think Clark Who could have been off might be back. They might get him a start. I don't know my mind's kind of blown by it. So Hey Here's what I got My biggest shot in the dark. I'm why Andrew Hart got sent down. They're stretching out Clark Schmidt Cuz he's got to start a game Cuz a we want him on our team And be they need to push Coles start back to line him up for the game one of the wild card Pedro And and who are is going to go to AAA and face Clark Schmidt for like 20 at bats That's what they're gonna do. That's all I got. That's my best I Kyle Higashiyoka the Yankees backup catcher Really cool, dude. We met him at spring training pretty reserved But just like cool dude guy you want to hang out with he He got some laughs out of us because he we had him on a podcast and He said he was like, yeah, I'm just not much for small talk and we're like dude That's all the podcast is But he was he was really cool and he had a dream night for a major league or three home runs Pretty awesome a guy that was drafted out of high school in 2008 Didn't make it till the majors till 10 years later. I was a minor league baseball player for a decade Finally gets his shot. He's up and down with the Yankees Romines blocking him He's the backup now He's catching Garrett Cole and he's doing a good job of that apparently because Garrett Cole's been really good Which has led to some controversy in Yankees land to go check out talking yanks But he has a three home run night and that's just really cool There's a lot of good baseball players that will never do that He's smiling when he's around in the bases. So he's realizing that it's kind of kind of silly So shout out to Higgster Good dude huge night. I can only imagine what the clubhouse was like afterwards I think they all went nuts on him. I've got something for JJR, which is a running theme I got trapped on the subway yesterday. Oh, so I'm on the subway and I wear my shark mask Roosevelt's We are live from the Roosevelt studio people have been loving the shirt today also Roosevelt's So I wear my shark mask whatever so I'm on the subway and the short fella gets on And he looks pretty normal. He's I don't know normal in shape short guy Probably a couple years older than me clearly pointing at the mask and he goes ah Probably before your time, huh? And I'm like what? Oh What do you think I'm I think is it technically they're jaws man I think so I'm guessing that's where so that's where he ended up And so he goes Jaws and I was like what what and then he keeps talking And he's like guess who old I am Like how did this happen? How did any of this happen? And I don't I don't guess I didn't guess and he goes I'm 68 and I was like no way like I would have guessed he was early 40s early 40s and so I was like ah Now I'm in I'm like fine. I don't have an out here. I was like good for you man. He goes out great He goes now. I'm not 68. He goes. I'm 52. It's like all right That's not a big jump to play this are you gonna lower the number again? Like is this another test? And he goes no, no, I am a I'm 52. I'm just in really good shape I don't know I don't I don't take that's for you to say I don't take any of the bad stuff I don't need any fast food. I don't drink. I don't even drink coffee, bro I don't even drink coffee, bro And I was like nice man like what? Yeah, you're in you're in nice shape And then he started telling me about his kids and he visited his kids got a kid Who's 28 and his kids friends couldn't believe that his dad looked like that and it's just a trap It's just always you just wanted to tell you he thinks he looks good. It was my first time walking into a trap like that You Gary Sanchez RBI double is he figuring it out Brett Gadna into the bullpen to run Homer to two game is now five two It's probably gonna make the Clint fans matter for being honest, but you know it's something like Guardi chases Anderson out for the blue Jays and that's how you burn people.  Maybe Gary He's the terrible shoot your butt And then yeah, probably him that's nuts man Thanks for back The direct center field No Zach happy Scared probably happy No Kind of not cool the eggs Start saving them Chase Anderson Take him It's nuts and tell you the last time Five home runs in an inning. I don't know if I've seen that Yeah, I take him out coach, I don't think he's got it today About the sweet the blue Jays are these all with two outs. No Hicks, maybe no. Yeah Oh, no, don't show this Caster trying to take my burn lines. We got better Tweeting it out things are going too well. I'm officially I Mean First team in MLB history to his six home run three straight games just had that off the top of my head Gary going Is Gardi good Gardi's got a recent streak. That's good. I don't know Things are exciting Things are exciting. I'm again riding my burns because I'm a working man and First game Davey went seven innings pitch three earned runs and like that's not even impressive So like our bar has gotten so raised I don't know man, I don't know exciting times So it's a losing to the heat. I got to keep burning How many times are gonna do that? Anybody Or that 101 away 101 outside always been a good pitch All right a little scary a little fun That's chatting somewhere now we go


Hi everybody. My name is Jason Klein. I'm the Senior Director of Education, Partnerships and Learning Solutions at Northern Illinois University. And I'm part of the NIU Illinois CTE project team that is working closely with the ISB CTE and Innovation team. We're here today to talk to you about potential CTE standards. Marcy, would you like to introduce yourself? Hi, I'm Marcy Johnson. I'm the Director for CTE and Innovation at the Illinois State Board of Education. So today, we're really excited to have you watching this video. This is another important part of outreach on behalf of the Illinois State Board of Education to try and gather input from teachers and other CTE educators working in schools and districts about the idea of CTE standards and what would make those most useful in Illinois schools. And so that's what we're here to talk about today. And very importantly, after you've watched this video, we're going to ask you to click on the link below and take a short survey to give that feedback to us. So this is what we're going to cover in this short video. Marcy is going to talk about why CTE standards. And then I will walk you through these draft standards documents that are meant to be an exemplar so we can get feedback on what would or would not should or should not be included. And then again, we'll talk briefly about the survey that we'll ask you to take. So why CTE standards, we get calls on a regular basis from educators that say, I want to start a new course, or we get questions about how to start a whole new program. And then what the one thing that's always missing is we need standards, we need something that helps guide us on what we need. And we feel that CTE standards would help students and educators be able to address the needs of industry by having these guidance documents that will support career and technical education. So the ultimate goal of this presentation today is for us to have an answer of one of three things. One is, do we adopt just the competencies? Do we adopt the national standards? Or do we adopt the advanced CTE standards? And when I say national standards, I just want to be clear that that means that there are other organizations in the United States that have created national standards such as the National Health Science Education Standards have been developed just recently. SkillsUSA has standards. And so we're thinking that that might be a better way to adapt and also address the equity issue because then all educators will have the same standards and all students then will be learning the same information. So with that said, I'm going to toss it back to Jason. And Jason is going to give you a little more information about these individual standards and the direction on what we need you to do. Thank you. Thanks so much, Marcy. So again, we're going to break down these documents and I want to just stress again, at this point in this process, these documents were developed earlier this year to be exemplar documents so that we could get reactions about what should go in a standards document. These are not official Illinois state CTE standards at this point in time, but they're here so that you can react to them today. So with that said, we're going to walk you through the document itself so you'll understand what you're looking at. First, there are seven of these documents. They are organized by career pathway. So in Illinois, these are seven college and career pathways now. These were developed online with the career pathway endorsements that we now have in place as a result of the post-secondary careers readiness act. So within these seven career pathways, what still exists while these are preeminent are our career clusters. So there have been historically the 16 career clusters nationally. And you see those listed here as the bullet points underneath the headers that are the career pathways. In Illinois, we actually have 17 career clusters because we include energy as a career cluster. So these career clusters map to the different career pathways. And you'll notice right away that each of the career pathways definitely does not have the same number of career clusters. Some of the pathways like agriculture, food and natural resources or information technology align with one career cluster. Other career pathways like finance and business services or manufacturing engineering technology and trades have multiple career clusters that align with that career pathway. And one of the implications here that we just want to point out is when we use the advanced CTE standards in these documents that we've got linked below, the career clusters are how those advanced CTE standards have been written. And that means that our state-level career pathway standards documents vary widely in length. In other words, the career pathway areas with more career clusters become much longer documents. That may or may not be an issue. We just want to make you aware, especially if you're clicking through and looking at the different CTE standards documents for the different career pathways. So with that said, each of the documents, well, maybe different lengths has a number of things in common. They use the same structure. And there's three main content components of each of each document. First though, on top of all of those content components, there is a cover sheet. The cover sheet provides background information as to where this has come from and what the different elements are. And you'll also notice that throughout this cover sheet, there are hyperlinks. The bottom portion of the cover sheet is essentially a linked table of contents. If you click on those links, it will take you directly to the page where that appears. So while these documents can be printed, they are intended to be electronic documents to take advantage of the hyperlinks. On to page two, we get into the content. The content here is the cross sector essential employability competencies also referred to as the essential skills. These essential skills have been developed as part of the work around the career pathway endorsements. And these are critically important. So when we talk to teachers and school district administrators, when we talk to EFE directors, everybody throughout Illinois is hearing about the importance of these in local workforce conversations. Additionally, this past spring is be launched a CT industry feedback tour across the state with in person meetings in southern Illinois, central Illinois, northern Illinois and an online meeting. The participants from across a wide range of industries and consistently they talked about the need for students coming out of their early childhood through 12th grade education to be really strong and really sound with the essential skills. So these occupy page two they're identical in all seven of the competency areas. Page three is where we get to the technical competencies. And these are different for each career pathway. So each career pathway had a committee of educators and industry professionals that met and defined what were the critical competencies for students who earned an endorsement to be proficient in at the end of that career focused course sequence and the work based learning experiences. And so typically there's 10 competency statements here. And the communications and human and public service competencies are organized a little bit differently but but they're all essentially the same and in terms of in terms of structure with 10 items and then a descriptor definition explaining what that item is. And again this occupies page three. These are customized for each career pathway. So we get to page four and beyond. We get into the advanced CTE standards that Marcy mentioned a few minutes ago. The advanced CTE standards come from the work that advanced CTE did on the common career technical core. And this is by cluster that these were developed. And so what you have here is on on each of these. So number one and then towards the bottom number two statements that is your top level standard, and then you have your one dot one and one dot two and one dot three statements that are more specific. So, number one utilize mathematical concept skills and problem solving to obtain necessary information for decision making business, and then one dot one solve mathematical problems using numbers and operations. So those actual standards, we also included here from advanced CTE, these sample indicators, these are performance indicators, sometimes standards documents include performance indicators with the standards. Other times standards documents will just focus on having the standards. The benefit of having the performance indicators is they provide direction for us as teachers to develop our lessons and our assessments and know that students are hitting the desired targets. The drawback to having the performance indicators is they make the actual standards documents more complex, and those performance indicators could live in a supporting document. Which is better, we're going to ask you about that the follow up survey, so you can give us feedback on which you think is a more helpful approach for teachers to use and so that's why it's really important that we have feedback from lots of teachers. Again, this section will go on for as short as three or four additional pages, and for as long as more than 20 additional pages. So, as mentioned earlier we have created the seven standards documents by career pathway. Each of these is linked below. So you can open them and you can look at them in more detail, and hopefully this little video helped walk you through what you're looking at when you open those standards documents. In addition to the standards documents, again, all of which are linked below the video, then we have this survey. A couple of things about the survey. So the survey asks you in the in its opening question to define which career pathway, you are answering the survey and you are only going to answer the survey for one career pathway at a time. If you teach across multiple pathways you maybe teach a finance and business services class, and a manufacturing engineering technology and trades class, you can absolutely take the survey twice, once for each of those pathways. Likewise, if you're a department chair, for example, you might want to take the survey for three, four, even seven of the career pathways. What we ask you to do in those cases is to click the click the career pathway that you are taking the survey for, and then focus your answers on that. The reason is because in previous feedback gathering that we've been doing over the past six to nine months with educators throughout Illinois, we have started to see patterns of how different career pathways may have different needs with regards to the standards. And so we want to know that and be able to accommodate those needs. We ask you to take the survey after having watched this video you've now done that. So thank you so much. Please share the link to this web page with the video, the links to the standards and the survey with friends and colleagues who may be interested in this, and we really appreciate your feedback, which is going to help the State Board of Education set future direction. Thank you so much.


Donald Trump made a voluntary appearance at his New York civil fraud trial and used it to complain that it is distracting from his campaign to reclaim the White House in 2024.The former U.S. president and front-runner for the Republican nomination also took the occasion to criticize a limited gag order imposed by a Washington judge in a separate criminal trial. Related to his attempts to overturn his 2020 election defeat, Trump appeared in a New York court on Oct. 17 for the third week of A. Civil fraud trial which has centered on allegations that he inflated his net worth to secure more favorable loan terms. It's a DC setup, a total disgrace, Trump told reporters outside the courtroom. All it is is election interference. It's all election interference and it all starts at the DOJ. It starts with Biden. Trump chose to be at the trial which he is not required to attend. He has repeatedly used his legal woes as a campaign fundraising tool. I think Jim Jordan will be a great speaker. I think he's going to have the vote soon, if not today, over the next day or two. And I think he'll end up being a great speaker. I think everything he does is political and unfortunately everything he does doesn't work out very well. Thank you very much. Mr. President, there's been a lot of you saying that you think you're about to take place. What do you think about the problem?  It's a very, very unfair and all of this is election interference. It's all election interference and it all starts at the DOJ. It starts with Biden. Thank you very much.


Can you see me? Can you see my slide? Okay, then let's start. So again, things like will come to my office here. So, unfortunately, like we cannot meet each other in person, but hopefully like it will be possible to present at least this way. And what I want to talk about is the history of online and mobile. Yes, I've remembered that. Unfortunately, I didn't remember everything, I'm afraid. So like if you can think of some milestones that I'm not listed here, please just share it here as well, because like lots of people contributed here. Lots of companies actually co-funded this and it will be pity not to mention them. So, if I can see how to get there. To the next slide. How comes I cannot go to the next slide? What happened? So I'm afraid like we are going to be without the presentation. Are you using a LibreOffice to present it all from a PDF? I'm using the LibreOffice. But if you export the PDF and use some PDF, you have to show it to me. Or the design mode. Like I'm even touching the next button on the presentation and it's just not showing. At least I am going to export as PDF and show the PDF and then because it's fast. Like it all worked like a charm yesterday. Okay. Tendi, we can see typing your password. My password? I haven't typed my password. Are you sure? I'm sure. Much better. It was not the password, it was LibreOffice. So I think now it's kind of works. Yes. So, terribly sorry for these five minutes. And so it actually the online and mobile like trying to all, trying to get the tons of code that is in LibreOffice and previously was it's open office and star office. To something like a mobile platform and online started all with a mobile app. So originally it was some kind of like research project back in the Suze days where Thor and Michael started cross compiling to Android. And it was not only like cross compiling to Android like we were trying to cross compile to other things as well. So most notably Windows because at the time like the build times on Windows were just terrible and so like we were trying to use MinW for things to like make it faster. And part of that was like, yeah, well, when we are cross compiling, like why not to try Android as well. Like there were lots of limitations at the time. So the linker in Android like had a limited number of libraries that it could handle like it was something like 96. So it was necessary to shrink the app and actually like make it fit the limit. So lots of things had to be like statically linked all together, lots of work there. Of course, like there were some like third party libraries like font config, we were like somehow using the assets for the fonts or some hacks on top of that so that like files can be shared by Android as assets and can be somehow loaded from the assets. All this merge lip, Matush Kukain spent a lot of time like taking the components into some bits that can be like statically linked inside and run from the code first loader. Deeper game was a total nightmare.  And yeah, lots of lots of things there but it resulted in the first version of LibreOffice actually on the Android. So it was not usable for real work but you could see something that like still exists. Some things very similar still exist as an app in the Android, this Android open office or how is it called? Looks like this actually, so like the full UI but like for us it was not enough like we wanted to go further. So in the following years, the approach like changed from this like entire UI visible in the app into something that was like rendering the whole pages. So for a viewer, this was a great step ahead because like now the UI could be somehow like Android but the content inside where just one page fully rendered. So like when you try to zoom inside or anything like that, it didn't work real well because like you would have to re-render the entire page in some much bigger resolution which would take a lot of resources and a lot of time. So it was not good. Of course, scrolling the entire document it was not possible either. So we were thinking like how to get it further and the answer was thought rendering. So it was not only that we would be the only ones thinking that the thought rendering is the right approach to this. So it started in 2013, just after like this collaborative productivity where it spun off by Suze and we were lucky enough that we have got a client called Cloudon who needed a mobile app on iOS because so far like they had a lot of installation of their existing app but their existing app was something very weird. So like they had a lot of virtual machines that were running Microsoft Office inside and they were kind of streaming like what was happening behind the scenes on the server down to the iPhones and iPads. So like you can think like how it could ever perform but like it actually performed because the video was like compressed quite well and when just there was some cursor blinking or something like that, the video was handling that just okay. But like they wanted to switch away from this approach to the app and instead like build a native iOS app and we were helping with them with that and they wanted to have the tile rendering because they thought that was the right thing to do. Also like it was visible that like PDF viewers at the time used the tile rendering as well and like in some of the PDF viewers at the time you could see that they were rendering tasks and like the iOS even had a convenient widget for that. So like you could have a widget over your entire screen that was asking for the tiles for different resolutions and it would even like support the transition from one layer zoomed to another layer and stuff like that. Just to remind like what is the tile rendering for those like who do not know. So it is technique that we are using in the code for like displaying the content of the document. So basically like what you are seeing on the screen is not like the font as you would imagine that. So like character by character, but you see it as small images like 256 to 256 pixels that are like one next to other. So it is actually like a picture what you are seeing that is consisting from small pictures and that is like what is being updated when you type. So in this 2013, this LibreOffice Kit was started as a thin C and C++ API to access the internals of LibreOffice Core because we thought the you know API was like not serving the purpose that we needed for. It was not performing well. So we needed something that was like much tighter into the code and like where we would be able to directly like instruct the core of LibreOffice to do the things that we needed for the tile rendering and later for the editing. So the callbacks of the events that come from the call are that can be triggered by the timers or the user's actions like basically like sent back through the LibreOffice Kit as well. And so the continuing here in 2014 and 2014 was like further for the use of the LibreOffice Kit for rendering. So it was introduced into the Android app thanks to Smooth who helps co-founding this at the time used the compositing code from Mozilla because as I said, like on iOS, there was an widget that was able to handle the tile rendering but it was nothing like that on Android. But Mozilla was using this in their Fenec project, this tile rendering as well. So we thought like, yeah, sure, let's take it so that we do not have to reinvent the wheel. So that was that. The Java part was supported from that. And then editing was made possible later thanks to Miklos Weina and it was done under the TDF tender, the initial word to start the editing in the Android app. So you might be wondering like where the online final comes to the play and it is exactly like here. So in the 2015, finally, we have found some co-founding for the developing of online. So thanks to Icewarp, we were able to create a viewer and then shared editing. So the viewer, that's obviously like what does it do? So like the user was able to open the document and see what is inside and scroll there and zoom to things that they wanted to see. But then the next thing was shared editing. So first like one editor could edit and then even like it was possible that multiple people were able to see the document, but only one of them was editing. And there was a button in the UI that allowed the user to say, well, now I want to take over the editing. So I'll be editing instead of the person that is editing just now. And from that on like they switched to the other person editing and like the person was editing from the norm. And of course it was not enough. We wanted the full collaborative editing. And that was something that we like totally feared of like how we are going to do that, how we are going to provide like multiple presers, how we are going to provide multiple selections and everything. And luckily we remembered and realized the multiple views feature in LibreOffice that I've never seen so far anybody used on the desktop. Like it is the thing you have in the window menu like next to the help that allows you to open like next view of the document. So like you can see the document like twice and even have like one selection in one of these documents and another selection like in the other view of the document, but like why one user would use that? And suddenly like this happened to be the core of everything for the collaborative editing. Luckily like this feature just works very well for a feature that I just cannot imagine anybody using on the desktop normally. And so like it provided the multiple presers, the multiple selections and it even provides the possibility to have like several dialogues open at the same time, which is awesome. Of course like whatever we have to improve in the collaborative editing will now like improve even this feature, but luckily like lots of things just worked out of the box. And then it was more about the binding that into the online itself than like having to develop it somehow extensively. So for the online, of course the server part was in C++ for the client side. Like we didn't want to write everything from scratch. So we were searching for some project that would provide some title rendering and the best at the time seemed to be leaflet which is a mapping software, so which uses styles as well. We had to hack it very extensively. So maybe looking backward, maybe it would have been very like if we invented something on our own and develop it on our own, but at the time it looked like the reusing is the right thing to do. So that's what we did. So then on the other hand in the mobile apps in the Android, like more features they're added to the toolbars and elsewhere thanks to many people. And during this time on the other hand in the online the routing of dialogues from LibreOffice was introduced because until now, like all of the things that needed some users interaction were done so that we had to re-implement the stuff in JavaScript. So the various dialogues, like search dialogue had to be re-implemented then like dialogue for inserting tables and stuff like that. So it had to be reinvented which seemed like not a good approach because it was like increasingly hard like when we wanted to introduce all of the paragraph or character properties like it would be just too much work. So we came up with the concept of routing the dialogues directly from LibreOffice. So we didn't use the dial rendering for the dialogues instead like when they are invalidated we just asked for the exact part of the dialogue that was invalidated because it seemed as an overkill for the dialogues to use the dial rendering because the dialogues are just much smaller than the document itself.  Lots of corner case, this is very fixed because for example, like different users can need the dialogues in different languages or even like it has to be possible that the like two users actually opened the character dialogue at the same time. Due to that and due to lifecycle of the dialogues in LibreOffice Core, like we had to change the dialogues to be asynchronous. So like it is still possible to have the dialogues because it was so that like when you were waiting for some interaction of the users it was not the main loop main event loop that was like waiting for the users actions but the dialogue when it was executed like it run a different event loop like some sub event loop. And so the outside event loop like was able still to handle things like re-rendering the document and things like that. But the problem was when two users actually opened the same dialogue because at that time like the dialogue was waiting until like when there was like one type of the dialogue for example, the character properties and two users opened that at the same time like until the user, until any of these two users was able to continue typing like both of them had to close the dialogue. So we had to do it so that actually the main event loop is used all the time and these dialogues are asynchronous and just using this main event loop. So lots of the dialogues that be exposed in the online had to be like changed to this asynchronous approach. And it's turned out in 2018 that just maintaining two, three things at the same time is just too burdensome. So having this web version, having the iOS and Android disting implementations of all these things is just unbearable anymore. So Jan Iversen at the time just started prototyping and Tor like took it over and took it to the next level that like the mobile app itself would actually consist of big web view. And we would be using the same online code for the mobile as well. And surprisingly, the performance of this solution was very reasonable. So we went ahead and continued with that approach. And so the online, so the Android app was actually like changed to this approach as well in 2019 and done the web view as well. So from that on again, like there was shared code that like when the online was improved for the mobile things, it was possible to have it in the apps as well. Lots of investment into that was thanks to thanks to Edvinis who helped go finding the iOS part of this, which was awesome. And it was still not enough like this, like having this disrouted dialogues. So we were considering what to do next and the next was actually like just providing the information about the look and behavior of the elements that are happening in the LibreOffice core and wrote them to the mobile app and their render them via JavaScript. So actually, like when you see here, like this is the mobile app. I will move myself somewhere else. So this is the mobile app and inside this, this is the sidebar. This is the sidebar that you know from the LibreOffice but it is just like provided the information like what are the elements inside the sidebar and the actions like that should be called back. And like most of them are you know commands, but of course further for some additional elements in there we needed some additional tricks. And so the additional trick was reusing the UI test API. So you may remember the Marcus Morehart's UI test framework that is like used for the testing of the UI in LibreOffice while the building in Jenkins and the CI. So basically they are using the same thing because like that way allows us to nicely hook into the dialogues and see like which elements are in there and change them in the way that is needed. And also like get the callbacks from that. Like when there's an action happening in the dialogue like see it on the online side and re-render the JavaScript accordingly which was then base for the further work on the notebook bar. So now in the online you can see a beautiful notebook bar which is actually the same notebook bar that you have in the desktop application but the information about that is rooted via JavaScript from the core and the actions are like updated according to the UI test commands that are sent back and consumed by the core. So now we are getting to the future. So for the future we would like to use this the JS dialogues for everything. So instead of the pixels that we have to use for the dialogues now use nice JavaScript rendering for that the sidebar in the desktop case should use this as well. But of course like we cannot do it as this control by one finger but something like more advanced that looks more like the sidebar in the desktop case. We would like to reuse the usage of leaflet JS and like use canvas for all the rendering instead. So now writer calc impress do that now but they still need bug fixing in master because like the zooming is not working there well and stuff like that. We would like to reduce the use of Poco just because like it makes things harder to compile and like the STD library is increasingly getting the features that we are using from the Poco. So the hope is that we will be able to kill it at some stage as well. And of course lots of papercuts fixing. So for the mobile apps we get a lot of great feedback from the Google Play reviews that helps focusing on the things that the people are actually using. And that's it from me. So big thank you everybody too who has contributed and everybody who has co-funded the work that we are doing here. So thank you so much. I'm just trying to share any questions please. Yeah, Candy, this is Gabriel from one and one. Yeah, hello. So I just wanted to ask that the direction is to remove the native dialogues that are rendered on server and replace them with the JavaScript dialogues? Well, that's the hope. Like it's still a far future but we would like to that but the dialogues like technically still live on the server. So basically like you would be still running the dialogue on the server like remotely but like you are not seeing the pixels rendered from that but instead like the... Yes, I understood the concept. I understood the concept. Okay, yeah but why? I mean, it's not more easy to just render the dialogues from server as image and some... It has various problems. So the traversal of the cursor is not like very, like you still have to go with every round trip to the server and back. Like for example, like you click a button for example, sorry, you switch checkbox or radio button and everything and like it has to go to the server and back. You cannot do any like nice animations and stuff like that. When you have that as JavaScript dialogue like you can style it with JavaScript just beautifully as you wish and it is still the same dialogue and you still have the same functionality. So that is basically the motivation. Yeah, yes. Like it is not a total priority but I just, this my personal... Yeah, but this doesn't mean some overhead on the client side for duplicating, let's say the dialogues or the user interface. Like you mean from the programming point of view or from the performance point of view? Yeah, yeah, from developing. From developing? No, because like we are taking the dialogues that are in LibreOffice and actually like traverse the content in VCL and create the JSON from that. So it is just scanning the dialogue like add this inside the structure of the widgets that are there, dumps it into JSON and then sends it to the online. Yes, yes, that I understood but still the user interface the graphical appearance of the dialogues. Should be made on the client side, right? Yes, but like that is very trivial. So like the, it's just HTML and JavaScript. So like the browsers are demise to it. Yeah, and the functionality is on server. Yeah, I understood. Okay, thank you. Yeah, thank you so much. Okay, I'm afraid I need to finish so that the next presenter can go ahead. So she won't.


Today, I want to talk to you about what it takes to build a super fast mobile web experience. And to do that, well, it's going to require us to plan for our performance. Here's my pitch to you. You've all been in that meeting room. When your manager or boss has asked you, well, does this site work on mobile? And you think, well, sure, it's worked on a small screen size on my desktop. And I wrote some CSS, so things scale. So definitely this works on mobile, but that mentality has a flaw. And the flaw is the mobile web is no longer just this subset of the web that you think about at the end of your development. The mobile web is just simply the web. And we see this through the numbers. Mobile traffic is actually outpaced desktop traffic now since 2014, and it's only continued to grow since then. So whether or not you like it, the users that are visiting your web app or website are on a mobile phone. They are not on a desktop computer. They are not on the laptop that you're developing on in your office. But you as a developer, you're like, OK, that's fine, Sam, because I have a mobile phone in my pocket. Yeah, just right here. Well, I'm just going to test my website on this, and it's going to be great. And I will have accomplished everything that you told me to do. But that's not completely complete. That's not the right approach, because that phone that you have in your pocket is a $600 phone. It's the brand new phone, because you're a developer and you want the best thing. So you have the best thing. But the phone that your users have, well, they look like this. As Alex touched on, these are the low-end phones. These are the phones that you get for free when you sign up for a cellular plan. These are the free phones. These phones have a gigabyte of RAM. These phones have a single core.  On the average Android device that checks in, they have, on average, a gigabyte or less of RAM. So not great. And this has some real performance implications on mobile websites. Believe it or not, the average load time for mobile sites is 19 seconds. So from going to the URL in your browser to that actually loading in your phone and being interactive, that's 19 seconds. 19 seconds that your users have to wait. Now, you've seen this graphic before, I'm sure. But it's really important to think about, because the web that we're shipping today has a 19-second average load time. And the users expect, when you just ask them casually, they expect a page to load in two seconds. And most users, if that site takes longer than three seconds, they'll just leave the page. So that web app that you're delivering right now, if it takes longer than three seconds, you're just throwing away half your traffic. OK, we have 19-second load times. We are shipping experiences that don't match what users want. So how do we align the web that we're building today with what users want? To do that, I think it's important that we take a look at what it takes to load a web page from when you issue the request to when that page loads in your browser and when you can interact with it. What exactly happens between when you hit Go and it shows up? So I've taken the network stack and everything that happens in between and simplified it down because it's a lot to talk about into three phases. And the first phase here is requesting the page and the server getting that page and then shipping back an HTML document to you. As I've so beautifully illustrated here for you all, this is what it looks like. You go to the website on your phone, it hits the server. The server then generates a document and has to do some processing work to figure out what exactly we're going to send to you. And then it ships that document back to the browser. And don't forget, that request has to go across cellular towers and then find its way through the internet to the computer that's responding. And then when it gets it, it has to send it back. And so that round trip cost on mobile phones, it's real. All right. So we have the document. The server has responded. So the browser has to do some work now. We have to parse the HTML. And we have to figure out what exactly is required on this page for us to actually show it. So we have to find these critical assets. And once we've found these critical assets, the browser says, okay, I need this JavaScript file. I need this style sheet. I need these two images. And when I have that, I'll be able to draw something that you actually care about. But we have to issue requests for those. And those requests go over the wire, through the cellular towers, onto the server. The server figures out what exactly we're sending to you, the server then responds back. And all of this takes some time. So all right. We have our high priority resources. We've made that initial connection to get the document. And here we are in my favorite phase, the parse and execute phase. We have the assets. The browser isn't showing you anything yet, because it actually has to compute what all of these individual pieces look like when they're combined together. So we have our HTML, our JavaScript, our CSS, the JavaScript parses and compiles, so it can actually be evaluated by V8 in Chrome. It runs some JavaScript, maybe it adds some DOM onto the page. The browser then tries to render, takes your styles, it calculates where all the positions of all your elements, it lays them out, and then it composites any layers. And then you end up with a beautiful page. But this is just the loading phase. This isn't interactive yet. This is just getting something on the screen. All right, given all that, I think it's important that we take a look at this network phase. If we're gonna optimize one layer to start, the network seems like a good opportunity because we're issuing a request to the server, the server has to respond, then we issue more requests, and there's a real cost here.  I started out with a pretty simple baseline. I didn't bundle any of my assets. So I have individual assets for everything, not one big blob. I then set up an HTTP2 server, and I simulated a 3G network.  So we got some real world sort of metrics. So let's take a look in DevTools, how we can get a feel for what this is like. All right, so here's shop on the left and here's our recording that I've done before and saved this off. So you'll notice I have this pane up here which you might not be familiar with and this is the network view. Network view is usually hidden away until you check this box. And then you see this beautiful waterfall of all the things that are getting downloaded. And you might be saying, what is this gray line? I've never seen that before. Well, of course you've never seen it before because the patch line did yesterday and I have it right here. So what this means is this gray part is we're just waiting for content. We haven't gotten anything. The request went out but we haven't taken any action yet. So you can see that in this case it takes 1,500 milliseconds until we actually get a response from the server and then we're downloading the content.  And so all of this results in a paint that takes around 5,500 seconds, or milliseconds. Okay, so five seconds, 5.5 seconds for this on a 3G network, it's not terrible. It's nowhere near that 19 second average. So we're starting off from somewhere that's not horrible. However, as a developer we can see like clearly there's some room here for improvement. Yeah, so again, I'm just holding down shift here in the timeline as I drag, I can actually measure how long. So right, so 5,500 milliseconds roughly between when we got our first bite from our server to when we rendered a screen. Now shop paint something pretty quick. We have this frame up here, so the shop but really that's not useful to the user until we actually have content. So this is the first content full frame or the first meaningful paint and this is what I like to measure till. So we see we get these network resources, the browser then executes some JavaScript here just for a tiny bit and then we decide to paint. All right, so HTTP 2, no bundling 3G, 5,500 milliseconds until first paint. Okay, let's look at some techniques that we can apply here to drive that number down. Now, I don't know if you've heard of this really cool feature that's in Chrome called link rel preload, but what this does is it allows you as a developer to basically say, I know exactly the things that my page is going to need before it's displayed and loaded and so what I'm gonna do is tell the browser what those are and the browser's going to see this and say, okay, I'm going to download these. I know you haven't requested them yet but like I know something as a developer, you're like something is going to request these to start, so the browser will download these, they will sit there and so when your browser finally issues a request for them, it's like, oh hey, I already have this, so you don't have to hit the server again. So I took the site, working off of our base with no bundling going on and I looked at all of the assets that were required before we actually issued a paint and so I did link rel preload, put it all in the head tag and let's see what the effect of this is. Oh, so this looks quite different. It's now very flat. We no longer have this sort of stepping effect of dependent resources on dependent resources that eventually resolve into a painted page. Instead we just have a flat line of things. It's like, hey network, just grab all these, thank you. And then when we have them, we end up with a paint. So from our first byte here to when our first contentful frame was, we're down to 3,300 milliseconds. So we've cut out two seconds roughly. Just by avoiding that network work of having to download, discover, download, discover, download, discover and flattening that out. Now you might be thinking, okay, but why would I ever have a site that was daisy chained like that and have all these dependent resources and this is totally contrived, fair point.  If you're taking advantage of some of the new module splitting features of build tools, you probably have lazily loaded JavaScript files. And those are all late discovery documents. So what you can do is you can use link rel preload to sort of say, hey, start downloading these because I'm going to need them. Which can be a real win and in this case, a massive win. All right, we're down to 3.3 milliseconds on a mobile network which is good. We're getting closer to that two second time that people want, but we aren't quite there. And we still, if we look here, we have this cost that's kind of crazy. We have this initial connection cost which is five seconds, which is insane. But then once we finally get a bite, we're spending essentially 1.6 seconds just downloading this document. And we're not taking advantage of the network during this time we're saying, give me this HTML document, please give it to me. Thank you, I'm receiving it. And then once I have it, I download more stuff. It seems like a wasted opportunity. Like it'd be nice if we could jam some requests in here as well. Turns out there is a solution for this. That solution is called H2 server push. How does this work? What is this? Well, it's the basic idea that your page when requested from your browser, it hits the server, it opens this connection. The server, as like while it's responding with HTML, the server says, I know you're gonna need these assets. So I'm gonna go ahead and push them to you. You didn't ask for them. The browser has no idea that they're coming, but I as the server know the world. So here, just take them. And when you finally need them on the client side, well, they're already there. This compared to the previous approach that we were doing, which was two round trips, which was get the document, scan the document, request all of the critical assets, and then we can paint. So in this case, the server is pushing the assets to us. It changes who's responsible for what. Now, you're probably like, I read a blog post about H2 push, and that blog post told me lots of things that were not so great about H2 push. And I probably read that same blog post. So let's talk about them, because it's important too. H2 server push, it's not cash aware. What does this mean? Well, this means that the server doesn't have an idea about the state of your client. So if you've visited the page before and you have these assets cached, the server, it can just say, hey, I'm gonna push main.js again, because I don't know if you have it. And by pushing it, the client's unable to cancel that right now. And so it causes this network contention and can cause a real cost to your users, because you can basically push everything that you want. And the browser's just going to take it. So not great, and can actually slow down your page quite a bit. The second is that H2 push doesn't have resource prioritization. All right, what does this mean? Well, it means that the browser natively is pretty smart about what things it requests, because it's able to determine that like, this is critical, this is not critical, I can defer this work. And so it tries to optimize for its network activity.  It just pushes it to you. It's like, here, just take all of it. And the browser's like, okay, I'll take it. So it's not so great. But there's a solution for this, which is kind of the first P in purple. It all revolves around this one idea. It's that H2 server push plus a service worker is like this nirvana, it's a magical thing, because it avoids the big downfall, in my opinion, of H2 server push. So let's step through this so we can understand it. On our first load, the browser requests to our server. The server then pushes the critical assets and at the same time delivers our document. Our document is then scanned by the browser. The browser says, okay, I need these files. Go out and make the requests. But oh, you already pushed them to me, so I don't have to hit the network, great. Now on your next load. You have installed your service worker as represented by this beautiful green square with the letters SW. The page you go to your page, but it doesn't even hit the server. It hits your service worker. The service worker intercepts this request and it says, hey, I have index.html, so here you are. And oh, you want these assets too? Well, I have them cached as well. And what this avoids is you are not even opening a connection to your server. So because you have not opened a connection to your server, the server can't push you things that you don't need. So by combining H2 server push plus service worker, you can get all of the benefits of that first load with H2 server push and avoid the majority of the downfalls of getting pushed assets that you already have cached. So this is really good. So let's take a look at what shop looks like if we actually used H2 push. And this is the default thing that the shop site actually uses, which is really awesome. So here we are, we have the site. This timeline looks really different, like really, really different. So it looks like we're still paying that really high cost here to get our initial page and we're still spending, you know, 800 milliseconds or more inside of that initial request. And then we see this very interesting sort of representation of what's going on. And what you're seeing here is actually the files being pushed to you from the server. Now these in reality are probably being pushed out here, but right now it's shown just right here, which is fine. So we look, we see, we get all these assets that are sort of sticking around, they're all marked as lowest priority, all right. Then we scroll down and here's that wrapper element, that root element, that shop app, HTML. We see the moment that this is finished right here being downloaded, we then fire off all these requests. But you'll notice that these requests are really fast, 63 milliseconds, 78 milliseconds, 62 milliseconds. How are we doing that? Well, it just so happens that these are those assets right here. And when we request them, the network says, hey, do I have this? Go into the network stack of Chrome. Network stack of Chrome says, why yes you do, here they are in my cache, please take them. Which ends up making for a super, super fast experience. And we can see from first byte here to when our page actually renders, we are under two seconds, which is amazing. So we went from 5.5 seconds to 1.7 seconds on a 3G network for our initial load with no service worker installed. So that's pretty impressive. All right, what did we learn? Network takeaways. Link rail preload. What is this good for and when should you use it? Well, it's good for moving the start of downloads earlier during that page parse. So the browser parser can instantiate those requests before the browser knows that it really needs it as a dependency. H2 push. H2 push, when you boil it down, it's good for cutting out one full round trip to your server. So the most optimal delivery of H2 push is you're going to save at max one full round trip. And that's important because when you're measuring your site and figuring out where to optimize, you wanna optimize your biggest cost. And so if your latency that exists for a round trip is your biggest cost, well congratulations because you are in a minority because that is amazing. And H2 push is probably your solution. All right, we've talked about the network, cool. We know how to get our assets to our browser quickly and how to get that first paint, that first meaningful paint, pretty quick. But paint in that first frame is only part of the story. The real interesting bit, in my opinion, is getting to interactive. And the costs for modern websites to get to interactive, well, it's our friend, JavaScript. Just sitting there, like, hey, you need to execute me and parse me. And on our phones, that tends to be kind of slow. To understand just how slow this is, well, we need to look at what JavaScript deliveries have been like. And these are a gzip size. In November, 2010, we were shipping on average 100 kilobytes of JavaScript, pretty good. Today, we're shipping four times that, on average, 408 kilobytes of JavaScript on every page load. Okay, so what? Well, there's a cost there. There's a cost to shipping this parsed code. If we look at some older devices, like iPhone 4 or Nexus 1, our parse time for 300 kilobytes of JavaScript is anywhere from 300 milliseconds to 500 milliseconds, half a second. Remember, users want that page to load in two seconds. But you're looking at this and say, Sam, these are ancient phones. This is a terrible graph, not applicable to me. Well, remember, the phones that your users are actually on are those older devices, which are very, very similar to these phones listed here. But it's fine, I understand your concerns. Because I have a chart for new phones. All right, four megabyte of JavaScript because you're shipping all the frameworks all at once. On a Nexus 5, it's a pretty new phone, I like that phone. We're at like 1,800 milliseconds of parse time. iPhone 6 with the latest operating system. We're at a full second of parse time. S7, about a second. All right, there's a cost here. Users want it in two seconds. You're shipping a megabyte of JavaScript. All that time is gone. Sorry, you lose. Try again. All right, so let's measure this because I can talk about numbers and we can talk about goals. But I find it really helpful to take a look at something that represents the real world. So I found a cool little app, it's a budget app that uses some technologies that you're probably familiar with. Webpack, React, Redux. Awesome, sounds fun. So let's load it up here. All right, here's our app. Let's clear this out. This is, you know, really good budget app. I'm gonna say, what do I wanna buy? Cat food, great. Let's spend 100, no, I spent $100 on cat food. I got the fancy kind, so great. Okay, I'm really struggling with my guitar and the Trader Joe's food. All right, so let's record a profile here. And as you've heard today, we can enable this CPU throttling, which is not a real device, but it helps kind of get slower. So this is on a MacBook Air? Yeah, sure. And we're just gonna do a 5x slowdown, which should make things slower, not quite a mobile phone. And we're gonna look at the JavaScript costs, just for the simple site. So we'll do a reload, command shift R, we record the timeline. It comes in, here we are, my friend, all of our friends really, just this chart. Okay, well what does this mean? Well right here we see that we have this bulk of yellow, it's goldenrod color. And that's a great sign, well actually it's a bad sign, it's JavaScript executing. And we're spending this frame 421 milliseconds just handling this. So where, what's our cost here? Why is this taking so long? So I click on this frame here, which gives me a bottom-up view of the JavaScript here. And we zoom in here and we can see 140 of the milliseconds is spent in T. Obviously it's T, of course. T, T, oh, T, I can't, why did I, okay. So I'm not really sure what that is, but we can find out what T is. And looking at this code really isn't useful so I can pretty print it. Okay, great, oh there's T, hello T. Oh, I don't really know what this is. But I kind of know what it is, I don't mind. It's actually the sort of module loader that Webpack uses. But what's strange is this doesn't look like a very expensive piece of code, it's not doing anything that's explicitly slow. So it feels like the numbers that are reported to me in DevTools are lying to me, or not completely accurate. This cost is being associated here, but I don't think it's actually here. Yeah, so I really think that it's probably parse time, it's parsing that JavaScript just from just some experience that I've had. So we start here, we have this T function, okay. But I want to see the parse cost and I know that I could step down into about tracing and click those checkboxes and reload it and then find it, but it's hard and it always confuses me. So wouldn't it be nice if there was a way that we could see those V8 metrics inside of DevTools? I agree. Well, I'm happy to say that in Canary, we have an experiment, V8 internal metrics are now in timeline, which is exciting. Screenshots are great, but demos are better. So here we are, let's have a demo, great. Enable our CPU throttling again, awesome. Let's just reload the page. Command shift R, wait our three seconds. One, two, three, okay, here we go, four, great. Ooh, whoa, good, 739 milliseconds that time. All right, where's our cost? Oh, that's different, parse function. That's what I thought, parse function, compile code lazy, compile full code, compile script, function callback. These sound like native V8 runtime things, excellent. And we could go into exactly why this cost is there, but there's a lot of blog posts that describe how to optimize, and this at least gives you a starting point, so you can understand the real parse cost of your website. Okay, but parse time, that's part of it, but you have parse time because you're shipping JavaScript, and so when you're shipping JavaScript, it's really easy with npm just to require everything and then say, okay, great, it works. So it's never been more important to actually understand what you ship. Webpack recently had a plugin released, it's called the Webpack Bundle Analyzer, and this actually shows you what's in your bundle, your Webpack bundle, and you can explore this tree map and see the GZip size, the bundle size, everything great about it. You can find out why you have three versions of jQuery on the page to improve things. And then for those of you using BrowserFi, there's a similar tool called disk, which has a sunburst chart, which is beautiful. I'm always so happy when I see this. I'm able to find disk size, et cetera, same information.  Okay, well, how do I ship less parse code because I'm shipping JavaScript and I wanted to be parsed? That's a good question. Well, there's two techniques that I like. Well, pretty simple to do. You know, the script tag, it always has that type on it when you set source. Well, you can change that type to be whatever, and if it's invalid, and the browser doesn't know how to handle it, it will download the script file for you, but it won't do anything, it'll just sit there. And so you can put type inert, type poo emoji, it all works, you'll get that script tag. And then what you can do as a developer to say, oh, I have some idle time here. Let me go ahead and evaluate this JavaScript. Take the contents, put in a script tag. This gives you control over when the parse time happens, so ideally not at that initial boot up experience. Now, you can also have another script tag where you wrap your code in comments. Okay, so you ship down JavaScript, that's commented out, but then when you wanna evaluate it, you just strip those comments out. And then the code is now evaluated. So some techniques for manual shipping of inert code, which can help you to avoid that parse cost, which is non-trivial. All right, that seems pretty manual, it is. Wouldn't it be nice if there were ways to do this automatically in my framework of choice? And there are. The community has been listening and solving these problems for you, so it's much easier to do these things. Angular 2 actually ships with lazy module loading by default in the ahead-of-time compilation, so you can do per route JavaScript bundle downloads, which is pretty remarkable. Polymer CLI, which built the shop site, has per route fragment sharding, so it's aware of your page and all of your routes. And it's able to say, I know that this bundle is gonna be for this route and this one is for this other route, and so here are these independent bundles that you can download when you feel like you need to. The other way is a little more manual, but still really amazing. Webpack has a plugin called aggressive splitting plugin, and it redefines the semantics around require to add require.insure, and what this does is it essentially builds a dependency graph of your requires so that Webpack can say, okay, I'm going to split this JavaScript bundle, this one, this one, this one, this one, this one, and you get like a lot of JavaScript files, but they're great, because they're really small and you can manually control when you download them, which is so awesome. All right, so we looked at network, we looked at JavaScript, we looked at DevTools and visualizing it and measuring our cost, so what do I want to leave you with? Well, as you've heard time and time again today, it is a mobile world. It has never been more important to test on real devices, not the one on your pocket, the one that your users are experiencing your website with. And it's not just testing on a mobile phone, it's also testing on a mobile network, not the Wi-Fi in your office. You need to go and you need to go get a 3G network and say, okay, here I am on my phone, on a 3G network, what does my Web app feel like? Is it slow? We should probably fix that. Now, given what your users visit your site on, it's critical that you optimize for network utilization by using techniques like service worker, link rel preload, HTTP to push. These things can help you get super fast first loads in under two seconds. And on reload, it's instant because you have that service worker just sitting there. And finally, my favorite, it's a JavaScript parse cost. JavaScript that you ship has a cost because it has to get evaluated, it has to get parsed. So when you ship more JavaScript, parse time goes up. There's no way you can really avoid this. So the trick is you ship less JavaScript, you ship less parse JavaScript. The end result of all three of these is that your users have a blindingly fast web experience and everyone wins. Thank you very much.


Assalamu alaikum. In today's lecture, we are going to talk about the animals. Animals are the most important part of the ecosystems, of the biospheres. Animals are placed in a specific kingdom, in the five kingdom systems called the animal kingdom. In this group of organisms, we categorize some specific group of living organisms, which are eukaryotic, which are multicellular, from very simplest sponges to very complex mammals, as complex as the human beings ourselves. Animals, they are highly adapted to their environments. Because they are the heterotrophs, that is, they have to obtain food from the environment. They have to depend upon the producers and sometimes other organisms, the other animals that is the consumers, for their food source, they have to adapt to specific types of environments for acquiring that energy and for reproducing themselves, to continue their race. Animals are widely distributed in almost all types of habitats. Animals are present in aquatic habitats, in ponds, in lakes, in oceans, in seas. They are present in all types of terrestrial habitats, like the forests, almost all kinds of forests, in the freezing cold, in the very very hot deserts. Animals are widely distributed. Even they are present in the air. We know the birds. Birds are the animals, which live for some time on the trees, which live for some time in the air, that is, most of the time they are flying inside the air and finding their food or maybe finding their prey, if they are carnivore animals. Animals are the very important parts of the food chains and food webs. We know that animals, they are heterotrophs and they are consumers. They have to consume different types of producers, maybe sometimes plants, maybe sometimes algae, sometimes maybe some other animals. So, animals are of various kinds. There is a huge diversity of animals present on the planet earth. They are eukaryotic, that is, their cells have a true nucleus. Animals consist of eukaryotic cells. They are heterotrophic. They rely on the organic carbon source. The carbon, which is provided by the producers in the ecosystem or maybe by other consumers, which are the herbivores or the primary consumers. So, animals are present at every level of, every trophic level of the consumers. Animals, they may be independently living or they may live as parasites in or on the bodies of other organisms. We know that the deers, the lions, the rats, the moles, they live as an independent organism. They may make the groups and families. There are many other animals, like roundworms, they are also animals, and they live inside the intestine of human being and some other animals. There are some other types of animals, which live on the bodies of other animals and we call them ectoparasites. For example, the ticks and mites, which live on the bodies of other animals and we call them ectoparasites. For example, the ticks and mites, which lives inside the hair that is on the skin of the cattle. So, ticks and mites, they are ectoparasites that if they are living on the bodies of some organisms, other organisms, animals or maybe sometimes, plants. So, animals are very, very important for human beings and for the ecosystems, for different types of ecosystems present on earth because they makes very important part of food webs and the food chains. For example, if the herbivore animals are not present in an environment, then the plants may grow to very, very high extent and this imbalance may harm the ecosystem. If the carnivores are not present, then herbivores may increase to that extent that they eat upon all the grass and the plants of the ecosystem and ultimately, they will also die. So, they make a natural check and balance mechanism inside the environment. Now, we talk about the diversity of animals. Animals are present in diversified habitats. They are present almost everywhere. They are widely distributed. There are two major groups of animals called invertebrates and the vertebrates. All the animals are categorized in either invertebrates or vertebrates. Invertebrates are the organisms who do not have a vertebral column. Actually, we say invertebrates do not have a vertebral column and the vertebrates, the organisms, the animals who do have a vertebral column and their nerve cord, the nervous system is running in that vertebral column. Animals, they are wild. If they are living in their natural habitat, they are wild. We call them wild animals. Animals are domesticated. That is, if we keep them in our homes or we keep them in our farmhouses, they are domesticated. For example, we keep pets and we keep some animals. We keep some dogs. So, they are pets. Some other people actually culture them for their personal or commercial purposes for getting eggs, milk or some other products. For example, people keep the hens in the cocks. They are also kept for beauty. Beauty of the nature. For example, some people do have peacocks in their houses. Some people keep the animals like the beautiful animals like the pheasants in their house, which are very beautiful birds. Animals could be kept into a captivity or a controlled habitat. For example, we know that we actually grow animals in the zoological gardens and in the safari parks. Zoological gardens, which are commonly known as the zoos. For example, we have a zoo in a very good big zoo in Lahore called Lahore Zoo. There is a zoo in Islamabad. There is one in Karachi if we talk about Pakistan. And there are very big zoos in the world. Zoo is an environment where the animals are kept in a specific environment which is not very actually near to their natural environment. And animals could also be kept in the environments which are more near, which are more close to their natural environments. We call them safari parks. There are big environments. There are big areas, huge areas, in which we try to create an environment which is closer to the natural habitat of that animal. We call them mostly safari parks or sometimes the national parks. Pakistan do have many national parks. One of these is very important one, the Ayubia National Park in the Khabar Pakhtunkha area, which have lot many animals.