Welcome to the Fedora podcast. This is episode 24. This is a podcast where we teach you Sorry my I had a script. It was awesome and The script moved on me. So this is the podcast where we teach you all about how the Fedora community works We bring you news interviews and so much more on today's episode We'll be talking to our guest Matthew Miller the Fedora project lead and we're going to be talking about this little thing that happened just a few weeks ago called The the Fedora Linux release maybe some of y'all have heard about that but without further ado here is my here is my Friend and co-host mr. Matthew Miller. Welcome to the Fedora podcast. Hey, glad to be here It does feel like longer than a few weeks ago, but I think I still remember some of it So yeah, we had the release and then we had some shuffling and some schedule changes and it's it was just all kinds of crazy But we are here. We are live and really excited to bring a podcast to you on this Tuesday afternoon so I gotta admit I had to go back and look at the show notes because I've actually been running Fedora Linux workstation 38 for probably close to two months now and And that's just because I kind of I kind of took on the the beta Yeah, I tend to upgrade right around like beta freeze time as well at least one of my systems like Being a huge nerd. I have more than one computer to upgrade So I kind of kind of stage things out and keep one one safe just in case So I will not be cut off from the world if I mess up my own OS, but Yeah, it's it generally kind of adds all that attention around getting the release together and When things get into the frozen state tend to be pretty good and you know interesting if you if you if you like to live on the Leading edge of things. It's a nice way to do it But we also do put a lot of working making sure that the final release has the polish and lives up to the expectations and Kind of the drama going down to the wire each time of will we be able to bring everything together? And it shows how much the QA team takes that seriously and how much that really does make sure each release is really nice And we'll we'll talk about release a little bit the the release process a little bit later in the episode because We kind of had a milestone this this last time So we'll we'll circle back to that but first for those that are new to the podcast new to the community Why don't you introduce yourself and tell us a little bit about what you do? Yeah, so I am the Fedora project leader and I've done that for I guess Nine years now almost nine years next month. I think it's the thing which has been been a while I've been involved in Fedora since even longer before that I it's a project that I really love and it's my my family in a lot of ways. I I Am a distinguished engineer at Red Hat. That's what this fancy top hat here is for That's actually from some of y'all When I got that promotion people thought that the normal Red Hat Fedora doesn't didn't quite sound Distinguished enough so I don't know I got that. So I'm pretty happy about that As for our project leader kind of job is to try and keep everything on track and to make sure that The project sort of the natural state of any open-source project is to go in every direction at once Which is which is cool because it lets you let's you explore a lot of different areas and ideas And we we want to make room for that, but also if we want to have a big impact We want to make sure that we're actually Being relevant to people other than ourselves. We're going to make sure that we are You know kind of leading the world in Linux distros We need to talk about where we want to go and agree on Strategy so trying to get those conversations to be useful and functional is a lot of my job Also, basically everything that goes wrong is ultimately my problem. So I try to make sure that Few things go wrong as possible So in in most communities I'd say that it's like hurting cats, but that's that's not how you see your role Yeah, I mean well, you can't hurt cats anyways, but That's I was part of that metaphor is about you know the futility of doing that people people are here because they they want to do something they're interested in the community interested and we're doing and You know telling them that they are now part of a herd that is going to be shuffled in a certain direction It's just not going to work. So it's more of a you got to listen to people and you know, I have my own ideas But listen to what people are interested in collectively and try and make sure people are empowered to do those In the best way possible So I don't know it's I Don't know if I've got a cat-based metaphor for this Yeah, I'm not sure that that metaphor survives the the transition and into the fedora community, but I like how I Like how you you present yourself as you know, I am I am the chief point of contact not the not the lead I am I'm the person you go to when all else has failed kind of a kind of an approach Yeah, although that you can come to me at other times, too. It's not limited to that in fact It's nice if it's not when it's a problem, you know, I do try to help us, you know There's some things I try to push on things that I think are important or things that I see, you know Collectively seem to be important that I try to push forward So there's there's some amount of Leadership there I guess I hope but it really does come down to you know, making sure the community has the power Yeah, that's awesome So I know we've I know that the fedora podcast has on had you on a few times And we'll we'll probably have you on again here in the near future because we kind of want to talk about This this one's more retrospective, but moving forward. We want to talk a little bit about where's the fedora project going? obviously, there's a lot of big plans with with the fedora project and and Not to mention just the fedora community is growing like crazy So we definitely want to have you back on in the near future to kind of talk about future state about about your vision I guess the community vision would be more accurate But but today we're talking a little bit about our release here and and forgive me I'm having a look down to check the chat So if you are joining us live feel free to put in your questions and your comments We'll address those as we go through the conversation today because this is a conversation and not a presentation So that's why we choose YouTube. I see someone there has accused me of not being Matthew Miller There are a lot of people with this name Yeah, so there you probably probably saw someone else. It's a good way. I guess to hide if I if I need to Of the Matthew Millers, I am this one I guess The top hat wearing fedora project lead version of Matthew Miller, I suppose top hat owning I don't actually wear it because it seems a little I don't know Not not quite on my my humble brand As Matthew and I have learned doing a few of these streams together We can derail ourselves fairly easily like the conversation about having an IOT powered Roomba for monitors What was part of our pre-show conversation? We should have recorded that that was there's great ideas for the future of microprocessors and So how about how about release? Yeah, so this was a nice smooth release and as you said there was an interesting milestone. So one of the things that is a constant For a while was really an annoyance with the tech press our release process is all in the public We publish our schedule and we you can watch what's going on You can see you the go-no go meeting is is there in public. It's not like a secret thing in the back room We try to have no back rooms as much as possible. And so people seeing that process Often would say this release is delayed again late. Yep. That's fedora always late And there were sometimes where we were actually really kind of off schedule And it was you know several months later than we intended to but often what people were just seeing is that process Happening in public that if this were a in you know closed-source internal project or even an open-source project that was still You know developed inside a company and then you released to die here. We made it for you with that basically all the stuff happens Inside and secretly you might not even know what the release date is so it might meet Miss you know targets by it two months and you'd never know excuse me There's a cat walking right here. That is yes. She wants attention. This is Izzy. She Wondering why I am not done with meetings for the day. Hello attention. Okay, um the release process Internally like even read that Enterprise Linux doesn't publish release dates for that very reason Yeah, I kind of have an idea of when it's going to when it's going to land But you know there's no published date So it's it's very it's very counter-cultural to have that entire process out in the public Right, so we kept got tired of getting dinged for that all the time So we are actually holding more closely to our published schedule because one of the changes we made is if we do slip On a one release that doesn't reschedule the following release We used to be we used to like add six months from whatever it came out to the next one Which made it a little bit unpredictable and so now we have a fairly predictable, you know May or April May October November like that that time frame you can expect it which is a good for planning But also we made our schedule have a internal early target date or target number one and then the target date We tell people and we always strive to hit the first one But until now we actually never have we've only we've hit We've hit the the on-time date several times, but that early target has never been quite ready And so this time when it there were a few outstanding bugs at the last minute, but everybody was so excited That for the possibility that QA team people like stayed up late and released engineering put things all together so we could have this early early release Yeah, I was I was sitting on that. I was kind of idling in the room on on that go-no-go event just gash a couple of months ago now and It it was kind of funny because The the question came up like did we did we do it? Are we done? I mean do we do we push the big green button now? I mean Yeah Almost almost unexpected so that's right but it was it was really cool to see and and with with for the Fedora 39 planning already well and Underway I don't I'd encourage all of you if you're interested to just sit in and kind of watch the process It's it's amazing the amount of effort that goes into into an operating system release of this scale Yeah, and we can always We can always use help finding bugs of finding There's so much hardware out in the world and it's amazing that Linux runs in so many different weird laptops and everything We can't possibly test them all in some sort of formal way So having everybody's tests and feedback helps us get a good idea of you know if there is a problem with you know some Some laptops aren't resuming from suspend that happens all the time and It's important to know you know is that widespread is it a big regression? What how like can we fix this thing because we should we block the release for this? If we block the release you know what else what are the consequences for other bugs and problems So we want to like the more feedback we have the better right So let's let's talk a little bit about it because I mentioned that you know for a Linux 38 just came out a few weeks ago And now we're already talking Fedora Linux 39 even some ideations around Fedora Linux 40 So I imagine a lot of our audience having just moved into a video platform I imagine a lot of our audience is fairly new to Fedora Could you kind of describe a little bit what that release cycle looks like? Yeah, so we do put out a new release every every six months, which is fairly aggressive Our goal is to integrate as much of the upstream software we can that's you know ready for consumption into something that's available for you to use and To get it all working nicely together and that's kind of where that's where a QA process goes So Fedora in Fedora, we don't do very much development of the software yourself We're we know we're bringing Genome from the Genome project KDE from KDE and you know Linux kernel all those things So the upstream projects we bring them all together and integrate them and we found that six months cadence is kind of a nice Way of working we put out a nice solid release and then the QA and release engineering teams and everybody has a little bit of a Breather we can kind of work on the tooling and the processes things for a while and then back to make putting the release together Then each release has about a 13 month lifecycle. So you can actually if you Six months sounds intimidating you can skip the next release and to stay on land for basically a year Or and then do an upgrade and we've worked really hard to make those upgrades really Seamless they're basically just like a big update that has you know This time it's got a couple gigabytes of updates and there but then you should be on the next release. So That's basically the cycle and then we try to make it so our updates policy is basically Big changes should go in those release boundaries for some type reasons and because a lot of people doing the work here are volunteers we don't have a lot of Backporting fix security fixes and bug fixes to software is a lot of work You can often introduce new problems doing it. It's expensive. So that's our preferred thing But if it's not possible and there's a security issue will sometimes put a bigger update out during the release But we try to make it so the big changes are really on those release boundaries So that you don't have a thing where you wake up one Tuesday and discover that you know Your desktop is totally rearranged because the software is Okay but one one of the things you mentioned was being able to skip releases and Honestly, that's not been my experience with with Fedora Linux either in my home server lab or on my laptop Like this this device that that we're streaming from today. It's running Fedora Linux 38 I was I even ran it on the beta for a few weeks But the in-place upgrade process has been fantastic for you for a few years Yeah, you shouldn't need to but if you want if you want to you we make that an option for people And you know, there's everybody has kind of a different tolerance and taste for these kind of things. So I we often get asked, you know, where's the LTS and so, you know We've got that we've got the year there which I think is a pretty good balance for a lot of people Mm-hmm. Yeah And and the the last few releases have definitely been kind of that well, this is just a big update So I need to plan on not being on my laptop for you know, 20 25 minutes But I mean, it's it's been fantastic And and Conan in our in our chat kind of voiced what I was thinking But wasn't sure if I should say or not so someone else said it But yeah, if you want an LTS of Fedora, we call that red hat enterprise Linux I'm admittedly a little bit biased being a technical marketer for Ralph, but you know Yeah, and and that's you know, that's that's how I know that that is an expensive proposition right right and Yeah, the amount of work to make that actually be Maintained in a real way and for a long term rather than just okay now. We stopped updating it. Good luck which is another approach to that but Yeah, I know I one thing It does seem like from the desktop point of view It's sometimes a little bit like things are getting pretty nice and polished and there's not dramatic change It even when you know, I said we want to make sure that things don't surprise you along the way But often, you know when we're going to new GNOME releases now in infidora workstation Like you see a few things moved around but it's not dramatically different because kind of the polish is is there And so sometimes it's a little bit hard to generate some excitement about the release But we actually have a lot of like I was looking back through that the changes list features We have in this last release and there's actually some really interesting like under the hood things. I want to highlight That that aren't visible but are going to make things better One of them there's their steps towards what we call a unified kernel where right now This is getting into the geekiness of booting your system But we have a thing called initial RAM disk that loads with some it's basically like a kind of a minimal boot-up operating system that is initially loaded has some basic drivers and stuff and then then the kernels loaded Everything's loaded from there and then sorry kernel loads Anyways from there the real operating system eventually gets loaded the problem with this is that is is basically a Vulnerability point because we don't sign that and it kind of breaks the whole secure boot process So we're moving to a thing where we have a unified kernel that I'll put together on one without initial RAM disk No, and that are D and everything will be built and signed in infrastructure that will then Have a much more secure chain from boot to actually running. So that's like some steps are in place for that There's also On a security it's like supply chain security thing work towards reproducible builds Reproducible build basically means if you make a package if I if we build a package in our build system You can build that same package, you know at home or wherever else and you'll get a bite for bite Identical output Getting so excited. I'm talking faster than I can talk So like Dabian has been working on this for a while and we've been in some ways behind And The importance of that is you could basically if we can show that you can trust us I think you should should know you can trust us But previously, you know, this this lets you this is what trust would verify I guess this let's do the verify part of that right. That's it. That's a neat thing It's something where In some ways like like I'm Debian is ahead on this because they were able to leapfrog because they're We we have a central build system where all packages are built from get trees and built in our you know in our server rooms in our data center and Kind of a system under our control. So we have some basic trust in that and then can You can extend that trust you we sign the packages there. It's a Whereas it like in Debian historically, there was no central build system everybody built their packages, however, they wanted and then uploaded them which Yeah, there's like who knows what's going on. Is that person's machine compromised is all these things So having those be reproducible was a pretty important step for them because they didn't have that But it's something that would benefit us as well. We just didn't quite feel the urgency, but you know as these things Get easier for us to do because maybe the work work a lot of the work that Debian has done has made it easier for us We can bring that kind of security Features to Fedora as well, which is nice to see well, I'm thinking about the the downstream effects of that being able to run Fedora at work station across an enterprise or Being able to Being able for those changes to filter their way down into rel. I'm thinking of Large enterprises that have literally tens of thousands of servers, but to have that that unified build or I'm starting to Conflate terms here Having that having that identical build capability is is amazing to be able to know that whether I'm sending this little Little, you know pizza box size device out to to a telephone pole somewhere Or if I have thousands of these little 2u boxes that are running in data centers across the world It'd be good to know that everything is exactly identical on every single build Yeah, and so so we have some other things like that the OS tree stuff that is you Core OS IOT silver blue, you know, white those things and then some other File system verification like things that kind of do the similar kind of thing across the whole the whole image As well that are in progress Yeah, it's Some of these things seem like they're like big big fancy enterprise see those 10,000 servers or whatever use cases But they're also pretty useful for the home as well where you you know Well, you may be running, you know an IOT thing and you want to make sure there's no malware in there That's you know running crypto mining on your thermostat Or just on your own desktop like being able to verify that you know the system is what you expect it to be has that It's nice to be able to trust your own machine. That's right. Well, and and you mentioned the home I mean here in in our house. We've got a mix of Apple products. We've got I Think I've successfully eliminated all the windows partitions with the exception of I've got a couple of like triple-a titles That absolutely don't work with proton that that I still boot into from time to time But you know as my kids are getting older our youngest is getting ready to start kindergarten this fall And I'm looking at an age where I have things like a Chromebook or iPads in the house. It's like I don't really have much control over that so instead we could buy a whole bunch of of low-end, you know like netbook Capacity type laptops and using things like Ansible system roles and some of these other tools that come naturally in fedora I can make sure that all of my kids have the same build And they have all the tools that they need and then inevitably when someone breaks their their build because like my son's Showing an interest in technology curious what dad does Probably more the YouTube side of what I do, but interested in technology nonetheless And it goes and break something I can easily just Rewroll that image out and have all the all the data all the user data off on a on like a server and in our in our Furnace room Yeah, actually that's that's a really powerful thing. It's actually one of the things that got me like to where I am in my career I had a early early mentor I guess one of my parents friends who had we couldn't afford a PC in our house But they he was a programmer for a bank. He had a PC and you know, I could come over and play with it after school and He told me, you know, you can do whatever you want You can edit the config sys change the auto exact that you can't break anything so badly that I can't fix it It's gonna be okay I just go ahead and do whatever you want and like that freedom to do that was very powerful in being able to learn and I think Yeah, really like Given that being given that permission and encouragement go ahead break it right is like Essential to people, you know really getting to understand and knowing, you know how to work with computers people who are Hesitant to change things that kind of afraid. I what if I click that button and now it won't work That that could really hold back learning so I think the more we can Deliver an environment which makes it feel safe the better we are at in making people people feeling in control of their computing For sure So that that was really deep technical nerdy, which is where you and I spend most of our time Why don't why don't we zoom out a little bit and and and help some of the less Crazy among us maybe Okay, one of the we were talking about how This release didn't really have any new shiny features Which as someone who spends a lot of time doing marketing and content creation is just maddening because it's like This is this is what rel looks like nowadays. I've been on the last several releases on that front And it's like what do we talk about because it's just better improvements better better processes And then I can look at the fedora and it's like it's the same thing. It's the same problem except Except with Fedora Linux 38. We had a few new spins. We had one that was kind of promoted into an official spin You want to kind of talk us through I guess first. Let's let's level set and what what defines a spin and what What is the difference between something that is supported but not like a spin? Yeah, so we've got several levels of things and it is I'm sorry somewhat confusing But we have basically a spin is a install media variant of Fedora And so something like I think was it the budgie desktop is that the one right was so that was available You could install it, but there wasn't like a live CD media to run and test it and You know Basically have a budgie first experience and so now there is so that's that's what having a spin is it was actually one of the things that I Think we need to you know some of this is for the future, but part part of the problem is We should separate the install media from the delivery and like the what software you're running what a Lot of the teams you're running are like making a spin is is an elevation And we should have a way to elevate those things that isn't just now you have install media because the install media isn't it's only Used once it isn't really that exciting So and that but it requires a lot of work and process and so on to do that Well, so we need to rethink that a little bit, but yeah, that's a whole nother whole nother topic it's because they you and I could have an interesting conversation about image builder and And letting people run basically compile their own spins Compile yeah, good word. That's that's already used assemble a symbol. Yeah So yeah, the the budgie desktop and I had to look this up was was first packaged for fedora 37 But now is a fedora linux 38 Cat tail fedora linux 38. It's now one of the official spins and then The other one and I'm going to completely butcher this but sericea Yeah, actually if someone else says that out loud I would Anyone I want to type it phonetically in the But it's it's it's kind of interesting because it's it's rpm OS tree meets sway Which is a tiling window manager so rpm OS tree is is something that's rapidly gaining ground in the technology space being able to do upgrades of your operating system separate of like There we go. We have and I'm not even going to try There you go. That's phonetic Actually now that you say that I think I've heard other people call it that's Russia so yeah, so it's it's it's a tiling window manager and an rpm OS tree so There's there's some community. There's some conversation going on in the chat about OS tree and an rpm OS tree being Being a future topic and and I definitely agree that we'll we'll address that in a future episode but That I the tiling window manager people Wow that it is A different way of thinking about the world. I I appreciate you all It's a Windows 1.0. That's who got the UI right? That's that's that's the movement And I appreciate that we can make room for those things if you would like to try out a Different way of working with your windows and your desktop. We have that available easily to you now Yeah, I wish I could say more but you're you're absolutely right because I know several people that are I3 fanatics Oh, and it's just like I tried it for like a week and The people who love it a thing I made it a week and just like I cannot comprehend this The people who love it really love it. So if you haven't tried it, you may find out that wow This is suddenly your native language. I guess right No One of the things the names are fun, but kind of getting out of hand I Think we need to figure out a way to I would like to use the fedora atomic desktop brand for all of these to kind of put them together because Yeah, OS tree isn't really a great. I don't know it Not not that exciting of a brand and it doesn't quite it's not very descriptive from the the top level point of view It's not really immutable. So calling immutable images immutable like that's not that's not really what they are So I but I need to check with the brand people at red hat to see if I can Revive that I've got a really nice project atomic t-shirt over there already and everything so Let let me know let me know how that works out for you from from what I understand That's a fairly charged term now. Yeah. Yeah, we'll see yeah. No code names are fun, but like code names When they when code names then become something you have to decode in order to make a decision about what you were going to go On a website that becomes the wrong kind of code Here we found the tiling window manager fan pure productivity says the comment. Yes, exactly Yeah, that's a That that may be worth dragging you into writing a blog post there, Eric Maybe maybe show me the error of my ways because I've I've been a GNOME user for quite some time I've tried KDE and there's things I like about it. There's things I like about gonna more and I It's been a while, but I usually go back and forth the GNOME is is kind of where I live but I'm kind of a Walmart user of of technology. Anyway, it's like about 80% of the defaults work fine for me I'll tweak the other few the other few things and and have a happy life In the comments are talking about code names in general release code names and Mo Duffy from the design team points out that we still do have the door release code names, but they're behind the scenes as code names and they're used as the Sometimes a little bit far removed, but sometimes more direct inspiration for the wallpaper designs each release so and the wallpaper designs are like That's a really awesome community process where people work together to you go from these ideas inspired by the code names to You know the really awesome wallpapers we have in every release Yeah behind our pictures in the video here Yeah, and it's almost as the some most as if the Fedora podcast producer had had an idea to put the Fedora Linux 38 wallpaper is the background for a Fedora Linux 38 conversation but So the other the other spin that that garnered some news in the Fedora Linux 38 is a fosh, which Admittedly, I didn't really know was was still going. Do you do you have sorry to throw you under the bus here? But you have much to say on the mobile one, right? Yep I'm glad to see that there is starting to be like usable hardware that people can play around with these kind of things on you know, it's I Neals going to be in the chat like looking carefully at what I say because I was pretty pessimistic about Fedora on mobile for a long time and You know, it's like it's it's a hard market You it's a hard thing where you know, Microsoft couldn't succeed. They backed out, but hopefully I know it's starting to be enough It's one of the things where just like your computers like the first in the 80s or whatever in 90s Like every new computer was like 20 times better than your previous computer And and so like just the jumps were so much and phones and everything were that way for a long time And so it was basically impossible to make something that was maybe Workable at a hacker level and so now I think the technologies gotten to the point where it's you know You know the pine phone and whatever devices don't have to be the top of the line Google whatever Apple thing to still be pretty amazing and be a functional thing that you can do So I'm glad to see that happening I'm glad to see Fedora Linux running on there because it's a nice place where you can take you control back of Your life and your privacy and I have that all owned by big companies Yeah, I think you I think you struck a nerve with Conan there Was that was that nice enough for you there? Yeah, Ray bring brings up a good point on that front to just I remember the the old jokes about buying a computer and it's out of date before Before you even open the box. I think that was a weird Al song at 1.2 Yeah, and you know there was time where you know like You couldn't you wouldn't buy the latest generation of laptops if you wanted to run Linux because it probably wouldn't you know Probably wouldn't you had to buy last year's laptops. So that happened there too in some ways Yeah, and nowadays I mean We we've got a partnership between Fedora and Lenovo and you can Literally buy Fedora pre-installed on a laptop now. I mean, it's it's an amazing world Yeah, and we should we should get a mark from Lenovo on on this at some point Lenovo is is one of the episodes on on my backlog list. So I'm so glad you mentioned that So if if If you haven't noticed we're kind of finding our footing again with the photo or Linux podcast or the Fedora podcast Sorry, just put Fedora in front of anything and there's probably a project or community inside the larger community about it, but You know, it's we've got a lot of ideas always open to more so pre free public service announcement We've got a podcast room on the mid-matrix space. We've got we've got a Category on the Fedora discussions page There's there's stuff everywhere. So feel free to feel free to join in and submit some content ideas Volunteer yourself as a guest or as as a guest host either way While I love doing live streams while I I'm I'm very honored to be the host of the Fedora podcast right now It shouldn't just be my mug on on on this podcast. So, you know, definitely definitely feel free to get involved Free public service announcement there in between the the Fedora release talks So you mentioned getting things from upstream and there's There's been a lot of talk about about the GNOME foundation and the GNOME project since the move from GNOME 3.x to GNOME 40 and Fedora Linux 38 came pre-installed with GNOME 44 Excuse me And and kind of like Fedora Linux itself there There wasn't much in the way of of changes there. There's a lot of Updated updated looks some some rehabbed settings panel any anything really stick out to you. Well, I really like the The podcast of audio is important. I like the thing where you can easily switch between sound outputs and inputs on the quick menu I think that's really nicely done. That's all come together pretty well. I use that quite a lot but And yeah, I think it's some of the things that I've been doing I think some of the settings are a little more slick now, but yeah, it's really like not a lot of big change here I don't know. I think Sometimes soon, I think they're probably going to have a dock option. It's very controversial in the GNOME world But most distros ship with that by default For Fedora Linux, if you like that, there's extensions you can add we don't have that configured by default But we've done some user research and it's pretty popular. So It'll be interesting to see that'll probably be the next big UI change to see in GNOME but I I'm not even going to bet when that could possibly be Yeah, I mean the the the top right menu is Fantastic pretty much everything that I need to make changes to is right there as a quick access drop-down now Even some of the add-ons like I use the the caffeine add-on so that my system doesn't go to sleep Like if I'm on a meeting or something and I get up and pace around and I'm not there at the keyboard I don't want it to go to sleep in the middle of a meeting So like caffeine is one of the plugins that I always use and having all of that right there to be able to Even if I wanted to tether my laptop to my to my iPhone, it's it's right there It's easy to get to the menus are all there the settings are all there and and you can drop it down to To make changes is needed Especially as a content producer like you said the the audio input output changes is fantastic It's nice to have it right there easy to get to Yeah, it's one of the things where it's taken like that that menu's changed a lot over the releases It's one of the things that's subtle and it's gotten better and better and better. I think mm-hmm some of the Small small changes that you don't quite notice at the time But then if you go back and look from several years ago, okay Yeah, this has really gotten a lot of you know improvement based on actual use and input so I I noticed a comment a while back about bugs and bug tracking and bug reporting Yeah, I think it's a tough thing to talk about Yeah, you can stick in there So I the comment was basically that bug reporting is a hurdle and a hassle and are there any plans to streamline the process? Yes, loosely I would say and we have a forcing function coming up here Which is actually that so the bugzilla instance that we use for tracking all of our bugs in in fedora Is shared with us by red hat. It's the bugzilla red hat calm instance And that's actually like a big it's big slow and a lot of work to maintain that and For whatever out of my control reasons Red Hat is switching everything to JIRA internally for all the rel development Which is kind of a crisis because we're not going to switch to JIRA for fedora for Not merely because I personally don't like it, but that's that is true But also, you know, it's not open source. That doesn't feel right and also It is a very heavyweight tool that actually if you want to use it effectively You basically need someone on every team who is like your JIRA expert and configuration person or Or else you will end up not being very productive and I don't that doesn't seem right for fedora Bugzilla is nominally not going away, but on the other hand No resources are really going to be put into it and if the you know Dedicated cranky sysadmins not cranky there But you know old-school sysadmin people who are keeping bugzilla running. I think you know As kind of a passion project almost like that's that's not a quick We shouldn't be depending on that so we're going to need to find another Solution for bug tracking and I think that's a good time for us to kind of think about the overall process overall because There's It can be very good because as I said like we're an integration project We're not doing a lot of the development, but we want to be kind of the first responders to people's problems Yet also people doing the packaging are often Volunteers people who are you not necessarily there all the time. They don't have a lot of time for helping ever diagnose everything We kind of get a where should I have asked this question? Where should I put this bug kind of thing and It is also the case that filing a good bug report is a Skill or maybe even an art that not everybody has and then getting the information Needed to actually solve things is difficult. So This is a long way of saying I actually think we need some different layers to things and my main The main thing I want to do is Actually looked at we had a page about when should I file a bug that was written? I don't know 2004 2005 or something like that very early on and it basically said all the time if you see anything if you see something File a bug like that's TSA kind of level of Actually like that's exactly that's that's not what we really need because a bunch of bugs that need to be triaged and May not get answered that ends up with this you know frustrating thing we have where when we we automatically close all the bugs we The things we don't get to we say oops sorry we didn't get to that and then people who Feel ignored and it's frustrating all around So we want to send people to ask fedora to the forum Q&A site first when you have a problem you talk about it there and People can help you solve your problem can help figure out, you know where is this something that is fedora specific is something that that is maybe Something we can address in fedora or should this be taken, you know to KDE should this be taken to Canome Should that be taken to Firefox rather than to to you know fedora tracker somewhere And then when appropriate, you know find or file a bug, you know in in fedora packaging Space in you know bugzilla or whatever we end up with but make the the end user experience be really centered around that kind of forum Based help approach rather than about filing a bug kind of like how I don't know if you are a customer of a Linux Company like you could you can file a bug in bugzilla, but you're More direct approaches to you know talk to your support people and they can can hook things up And so we kind of have our community driven support Where we went users to come to and then hopefully you know become maybe contributors and More confident in it and filing bugs and you know knowing where things go But if you're kind of in that I don't know what to do state go to ask that's that's true today That's that's the best thing to do and I think we'll make that more and more centered in the future That's a yeah And and Mo Duffy pointed out what about GitLab, which is a former GitLab Or I can say yeah, we should we should look at GitLab and not Jira All the real real engineering looked at me and just was like no Yeah, right get GitLab is kind it's high on on the list of possibilities I can get into some technical details, but it's probably too boring for the podcast, but Yeah, I think that's that's that that's the frontrunner really But we have to work out, you know, actually how to get it running in our own instance things like that And get that to be supported So in the in the in the light of being Open and transparent doesn't necessarily have to be negative, but had a question that I wanted to surface for you You know, what's what's something that could have gone better in the development of for Linux 38? That's it excellent question Actually, I think this would really did go really smoothly we Haven't done a right. We're in a little practice of doing retrospectives for a while and we are not this time But I think it's a good thing to do. I things really did go so smoothly this time that I don't quite feel like There was a problem, but I'm probably jinxing it But some of it really is also, you know that release I'm I'm already thinking 39 and 40 and so I Don't remember the specific things. There are definitely things we could always do better But I think there's I think there comes a time where you do have to take a take a step back and celebrate that I mean releases and like like Conan Kudo mentioned Like Fedora Linux 37 hit some hit some some pretty substantial roadblocks and you know, that's that's been It's been kind of an issue in the past where things have have really derailed the release process And so you're you're looking at missing missing targets or or or at least, you know Mentally thinking man, we should have been ready for this. We should have we should have been there So I think there comes a time where you do have to take a step back and go, you know what? We did a really good job Could we have done better always but you know Fedora Linux 38 should now be the new bar at which each release should try and hit Yeah, and I think everybody again like going back to back to the beginning like you know It's everybody working so hard to make this happen that made that happen So I think we as a collectively everybody just did such a great job in this that Thank you everybody. Congratulations. All of those things all together. There you go Let's see So but the only thing left we'd had to talk about was some of the some of the deeper stuff like In Fedora Linux 38 micro DNF was replaced by DNF version 5 It's really quick. I can I can I can say yeah and uses a lot less memory Which is actually this is timely because I know there were we were starting to actually get complaints like there's some Some updates that like people couldn't upgrade their systems because the memory consumption of DNF was so high That they actually couldn't do the upgrade all at once So and it wasn't even like a super low-memory machine. So that Couldn't you couldn't come soon enough I just wish they'd be excited to rewrite it in rust and I'm only half-getting I could say thanks about that, but I'm I'm not I'm too tired. It's it's too late in the day Yes, we were a week early Well, we talked about that earlier, but Yeah, so everybody give Mo a hard time because I think she'll be our next guest Because as mentioned in the comments a little bit earlier the new website was also released the same day And so we we were gonna have Mo and maybe a couple of members of her team on to talk about the The big website refresh projects that's been going on for well over a year See the only other thing that The only other thing I'm sorry if you wanted to comment I was just gonna comment that that's a really amazing like community building success story because all the people who came together To make this we kind of were in a period there where we Didn't have a functional team and then yeah people Ashlyn A whole bunch of people came together to design and build and you know run this thing and has we have a Really great functional team of a lot of like new faces in fedora and some old You know people who've been around for a while who are more energized about it and it's it's a very cool thing Yeah, I Hesitant to start listing people because I know I'll forget some fun, but I'll do it here And I figure if I put her on the spot, then I'll find the the people that want to be interviewed on a video podcast The only other thing that I had on my list was some stricter compiler flags I know that's super into the weeds, but it kind of filters into what you're saying earlier about having a little bit better security being able to trust what it is that you're installing Yeah, this is I mean one of the things the compiler flags basically when when you're you know building the source code into binary machine code This there are certain new features that they're always being developed Either in the CPUs or just in the compilers themselves that Make it harder to Exploit if there's a bug you can make it harder to Hack the system and get around Think you find you turn turn those bugs into exploits that let you get rude access and do bad things So we tend to be pretty aggressive in turning on those new features as they come out which is actually one of the things that is Part of Fedora's function as a distro in the world. I think that the doing that Helps us find problems with those and find cases where those more strict flags actually caught cause bugs Or they interact badly with something that a program was expecting to do We help identify those and then we work with the projects the upstream projects to you know fix them and make sure that Their code works in a way that if we weren't doing that You would have a whole haphazard mix of software that was or wasn't using all these features and so by Working on that across the board. We really elevate the security of software in Linux overall in general So we're getting close to the top of the hour. We've pretty well addressed the conversations and going on in chat Is there anything you want to mention about Fedora Linux 39 or just just any closing thoughts in general? Oh See, I should have had a footer 39 thing prepared But now you know, it's it's in progress. We are work. We're working on it You know if you're feeling really brave you can upgrade to the the rawhide release that will become Like 39 in a little bit Yeah, I'm not sure what's what's in store there one of the things You know, we don't tend to have a year ahead road map So we'll see what people bring to it and see what improvements end up making it I'm sure it's going to be yet again our best release ever. So that's That's trajectory run I could make a year at the Linux desktop joke right about there, you know We're getting there. We're getting there. It's all it's already here if you some of us, right, right? Well, I gotta say thank you Matthew for all that you do for the Fedora community Thank you to the folks in the audience and to those who listen after the fact for all the hard work The Fedora community is is an amazing place to hang out and I'm really really excited to to finally be a Bigger part of that it took me a while to figure out where I could hang out in the photo or community and kind of contribute back But you know for years Fedora has been my my go-to if I'm not running rel then then it's usually Fedora So it's really really an honor and really a lot of fun to be a part of this community to be bouncing ideas back and forth And as I mentioned a little bit earlier Really appreciate all the ideas for episode content what I could really use right now is Victims I mean volunteers to to jump on the stream and and and to have about an hour-long conversation So if that's something you're interested in please reach out to myself or the the Fedora podcast matrix channel really appreciate everybody and Congratulations on Fedora Linux 38. I mean it's it has been amazing The only thing I might do is do a fresh install and try butter FS, but we'll That'll have to be for quieter season I'm in the midst of kicking this podcast back off red hat summits rel releases imminent and and So So definitely definitely a lot to be excited about in the community Yeah, I agree and thank you very much for having me. This has been fun Yeah, glad to glad to have you I was gonna say kick it back off, but Joseph had to had to jump in in front of that bullet last minutes and Thank you Well, we had fun we chatted and we joked around for an hour. It was a great time Well, thank you for joining us This was episode 24 of the Fedora podcast make sure to check out the show notes for links and additional resources pertaining to this Episode I give me give me a couple of hours to get that done I do have another presentation after this But check the show notes a few hours if you're catching this after the fact should be chapter markers additional resources And whatnot in the show notes will be alive Actually, we won't be alive in two weeks. I didn't update that in the episode guide in two weeks I will be at Red Hat Summit and Matthew, I think you'll be there. So if you're not gonna do it live from Red Hat Summit I mean we could try I mean I'm I'll have recording gear there We could try it It'll be at a different time than then than this time slot, but hey I'm I am more than happy to to throw something together. Let's do it So that's great about two weeks will be live possibly from the floor of Red Hat Summit But for sure the next the next kind of typical episode will be in oh my gosh And in a month in four weeks and we'll be discussing the website Property refresh So with that said see you all live from summit be sure to connect with both Matthew at Matt DM just about everywhere And I'm at IT guy Eric and in pretty much everywhere as well So if you if you want to reach out to either of us definitely definitely come and check us out On behalf of Matthew Miller my guest today myself Eric the IT guy Hendricks and the entire Fedora project community We will see you next time


Hello, my name is Aaron Adderson, I work for AT&T Interactive, I live in Seattle, I'm a member of Seattle RV. My memory from online is 10 to 12 in my website. My top is called Journey to the Pointy Forest in the State of Exxonville, Paris, New York. But I don't really like this title because it makes me think of a journey or possibly like a unicorn or something like that.  Full disclosure, I am the author of Nova Geary and I also maintain Mechanized, which unfortunately makes me an expert in parsing terrible HTML. Warning, this top is a downer. It is a downer, but the good news is it will be done in 30 minutes. So it comes in four parts. We're going to talk about XML processing, HTML processing, data extraction, and HTML correction. And we're going to talk about a few different libraries that you can use in order to accomplish these tasks. So first up is a 30 second XML refresher. XML has nodes that look like this. They're well balanced. They do not look like this. This is not well balanced. We all know unbalanced cats fall. Nodes have attributes. For example, Jeremy is awesome. Documents are a collection of nodes. It looks like this. And an important thing here is that I want you to know that everything in here is a node. The cat's tag is a node. The text is a node. Even spaces between tags are nodes. Attributes are nodes. Everything in here is a node. But I shouldn't keep this up too long because if you look at XML too long, you'll shoot your eye out. So XML processing. We're going to talk about a few different XML parsing styles. Sacks, push, pull, and dog parsing. When you're collecting a style of parser, you need to take into account a few different things like the number of documents which you're going to be parsing, memory and speed constraints, how you want to extract data from the XML which you're parsing, program or time, obviously. And once you've mastered these parsing styles, you can become an XML ninja. So first up is the sacks parsers. Sacks parsers are event-based parsers.  So you instantiate a parser. You look in the events that you care about and then parse the document. The parser will then send events out to your callbacks. Current libraries which support this are rexML, libxML, Ruby, and Yojoo variant. Now rexML, this in Texas, looks like this. You create a new document class. You include a module which contains all of the defaults for the callbacks. And then you implement the callbacks which you're interested in. You instantiate a new sacks parser, tell about your document, and then parse the document. libxML, Ruby also has the same sort of style.  The only kind of strange differences here are all of these callbacks start with on underscore. Also, you have to tell libxML, Ruby what type of thing it is which you're parsing. You can't just pass it a thing. You have to say, well, this is a string, or this is an IO, or whatever. Then you set your callbacks and call parsed. Notary only made difference here is rather than including a module or inheriting from class, that contains all of your default callbacks. Instantiate a new parser, give it your document, and then parse the xml. I want to show a little bit of example sacks output. Given the xml that we looked at earlier, one might write a sacks parser which looks like this. Right here, all we're doing is printing out when we encounter an open tag, and then printing out when we encounter a closed tag. You can see basically the parser is just moving through the document, calling your advantage to sacks parser so that they're very fast. Sacks parsers are used inside of SOFRAR, for example. Disadvantages. Searching is hard. Document handles are verbose. Programmer expense is high. When you're implementing these documents, you're going to end up with a state mission eventually, because you need a key track of where you are within the document. This makes this document handling is push parsing. Push parsing interface works the same way as sacks. You give it a bank call-vax. The only main difference between a push parser and the previous sacks parser is that the program controls document. Document IO. So rather than passing an IO object into our indoor parser, you actually feed the data into the parser. This is useful for things like XMPP, or Java clients, where you're interacting with an internet-linked document, so you don't necessarily want to pass that socket off to the parser. You want to be able to feed that data into the parser. So Node Gear is the only library currently that the document looks exactly the same as a sacks document, because it is. In this example, I just wanted to illustrate that we can feed data into the parser. In this example, I'm splitting the XML of every character and feeding it character by character into the parser. So the programmer has fine-grained control over the IO that goes into the parser. And call-vax are called just like the previous sacks parser we looked at. The advantages of this are low memory consumption. It's quite fast, not quite as fast as the previous parser we were looking at. And it gives you very fine-grained control over IO disadvantages. Singing problems as a sacks parser. Your documents are going to end up looking like... Your document classes are going to end up looking like... Pull parsers. There's a different style of parser that we're going to talk about. The interface to a pull parser is handed XML and yielded a node object. But the node object is only yielded when the programmer actually pulls it from the parser, hence the name pull parser. The current Ruby library is supported in this type of parser. This style of parser, WrexML, put that somewhere in the node period. So WrexML is an app that looks something like this. You instantiate a new pull parser. You ask it if you can get an event and then pull the event out of the pull parser. These work like cursors moving through your document. So you have a cursor moving through the document and countering events. And you can pull the event as you see fit. The parse event has information about the current node that the cursor is on. So you can get a node name or attributes or whatever. WrexML Ruby. It looks like this. You'll notice that parser variable. Well, a couple things. Again, you have to tell what type of thing a parser is. The parser actually contains the parser. So as you move the parser through the document, you can access things on the parser like the node name which you are on. Node-peries interface looks like this. We use the each method instead. So every time this block is executed, another parsed node is yielded to the block. Advantages of this. Low memory consumption and extremely fast. According to the WrexML folks, this is the fastest hexagonal parser available in WrexML too.  It's not so programmer friendly. What I mean by this is that as you're moving through the document, when you need to find data, you only get one pass. So if you don't get the data which you need in that one pass, then you need to pass through the entire document again. So you need to make sure that you get it on the first pass. Now, so far, these stacks interface is to me like a poke in the eye. So I'm glad we're talking about DOM interfaces. These are my favorite and probably most of you are familiar with them. Given some XML, they build an in-memory tree and then they're easily searchable via XPath. So we can pass through the document as much as we want. So we're looking for the data which we need using a rich searching language called XPath. Current Ruby libraries which handle this are WrexML. The WrexML Ruby is for hot and open periods. So we have one more option here. WrexML looks like this. To create an in-memory document, it's very easy. Just pass a new XML and a new WrexML document new and you have an in-memory tree. Searching with XPath, you have to create it. Create a new object and then you can search for it using the XPath object. LiveXML Ruby, slightly hard to create in-memory tree. You have to instantiate a parser first. So again, you tell what type of thing it is with your parser. It instantiates a parser. Then you actually have to call parser to give your document back. Once you get the document back, then you can call find method on it to sort through. Age of product interface is much easier. One call to get here is xml.3. You can search through it with XPath and you can search through xml.css. Neither LiveXML Ruby nor WrexML Ruby do this functionality. One thing I want you to take note of here is that both of these methods are both... In order to search via XPath or CSS, you do use the same method, search. I'll talk about that in a minute. And no sugary. Very similar to age of product. One call to get your document back, but something different here is you have to specify that you're using XPath versus using CSS. So you call XPath to search via XPath.css to call to search via CSS. And the advantages of CompStyle partners are easy data extraction and they're very program friendly. Disadvantages are high memory consumption and paying speed penalty. Now, when I say that they're high memory consumption, I'm just comparing these to SAC style parsers. SAC style parsers don't need to keep anything in memory really. These DOM style parsers will keep you in the entire document in memory. So, part two, HTML processing. HTML style parsers. We have pretty much the same style parsers in HTML as we do in XML, but I'm only going to talk about DOM because the other two are exactly the same as HTML. You're just feeding HTML rather than HTML. Available movie libraries for this are NARF, LiveXML, Ruby, and NoBegiri, and HVAC. NARF is interesting. I'm guessing probably none of you have heard of NARF. NARF is the first HTML parser that Mechanae has used. It sits on top of WrexML and corrects broken HTML before it gets into the WrexML parser. So, basically you instantiate it like this. You create a new HTML tree in WrexML parser and feed our HTML in, but we actually get a WrexML document back. So we can treat that WrexML document just like any other WrexML document. LiveXML, Ruby, same style interface as the XML parser except that we have to call it HTMLParser.Strain and then parser.Pars, and then we get our document back. NoBegiri, easier. One call. You get your HTML DOM back. It's forgot. Even easier. You get your HTML DOM back. So, part three. Data extraction. We have a couple of techniques for this. CSS selectors and XPath queries. In these next slides, I'm really only going to talk about NoBegiri and Hverpot. No reason is because those are the only two which provide CSS selectors. They provide both CSS selectors and XPath queries. The other libraries only provide XPath queries, so these techniques do apply to all of them just as easily. CSS selectors, very easy. Hverpot, you call search, pass it to your CSS selector. You get a list of nodes back. You can deal with those. NoBegiri, very similar. Except you use the CSS method and you can get back a list of nodes. That's pretty much all there is to it. You can go to CSS, plug in your CSS, and you're good to go. XPath queries.  I don't think as many people are familiar with XPath queries, so I'm going to go over a little bit of XPath basics. This means find all food tags in my tree starting it at the root of the tree. This always means start at the root. That first slash means I want to search this tree and I want to start at the root of the document always. This query, find all food tags starting at the current reference node. That dot means that I'm starting from somewhere else in the document. I can be at any node in this tree and I want to find all food tags which are descendant of my current node. Start at the dot. Square bar. Find all food tags with a child bar tag. This matches XML that looks like this. We have a food tag with a child bar tag. So we're matching that food tag with a food tag. Now to be confused with food square at bar which means find all food tags that have an attribute of bar. This is simply saying that the food tag has an attribute called bar which exists. We're nearly looking at existence. So this query will match the first food tag which has a bar attribute. Is this query XPath or CSS? Does anyone know? If you plug this into a browser what would be colored in red and would this work? The answer is yes, it will work. It will work and this text would be highlighted right in your browser. Now the interesting thing is it's kind of a trick question. This is actually both a valid XPath and a valid CSS. So that means that ambiguity is a rise. For example, since each repository has one entry point for searching it can't tell whether you're asking for CSS or XPath. And you might actually be surprised that it treats this as XPath if you're looking at this as your reference. So you'll get back on it, right? This is why in no degree you're forced to choose whether you want to search for the XPath or CSS to eliminate those ambiguities. So I want to talk a little bit about XML namespaces which is something you inevitably run into when you are parsing XML. We have here an XML file showing forward.com's inventory. They have a couple of tires. Great. And we have another XML document here showing Schwinn's inventory. They have a couple of tires as well too. But we have a problem. If we're searching these documents we can't tell the difference between those tires.  We can't tell that one came from forward and one came from Schwinn. So that's where namespaces come in. We have a couple of options. We have explicit namespaces. The anti-amiduity squad came in and fixed up these XML documents. They declared namespaces in forward.com called car and one in Schwinn called byte. And something that I want to make sure you guys understand is that these names, car and byte are completely arbitrary. What is important here is the URLs. These URLs must be unique. The names are arbitrary. So we know in both these documents that tires are associated with cars. In the first one they're associated with forward and the second one they're associated with Schwinn. So when you're finding these in November you do something like this. You register the URL or define your bike tire or your car tire. The important thing here too is these names are completely arbitrary. I could have picked something besides a bike or something besides a car. The important thing is the URL. So our second option is implicit namespaces. The anti-typing too much squad came in and said, well, every one of our tags in this document is actually associated with forward and namespace with Schwinn. So we can set implicit namespaces. So rather than doing the explicit car pull and tire or bike pull and tire, we can set an implicit namespace. So all of these tags actually have a namespace associated with this URL. The tag names say just tire, but they're still associated with the URL so we can disambiguate them. Luckily for us, that's how it works exactly the same. No namespaces. We have to be able to tell the difference between tags that have no namespaces and tags that do have a namespace. For example, in this document, our first inventory has tires between namespaces and the second inventory has tires between non-namespaces. And that looks like this. If we don't add a namespace, if we don't add namespaces, then we get back tags so library supporting namespaces and we've got some old ruby, and I want to talk about hrepot. Hrepot treats these only works with explicit namespaces like this and the namespaces are actually used from the tag names which is that because those names are arbitrary strings. Both of these documents contain the word car, but one is still associated with twin and one is still associated with four and you can disambiguate them. You can't do that at every time. Implicit namespaces are not supported. Namespaces are as important as tags. Remember that when you start turning. Part four, HTML correction. Why is document correction important to us? We want to deal with 3R HTML like the browser that would be the least surprising functionality. I want to be able to look at a CSS selector that I'm using on my web page and find that same data when I'm searching for my document. I want to be able to pull up fire web select an object inside of my page and use that same CSS selector to find the data that I'm looking for. Both know that we're going to use non-correct HTML. Notary sits on top of livexml to you which actually does the HTML correction. These two libraries have different correction schemes, but how can we tell which is correct? We can detect the long differences. Long parsers store the document memory as a tree. For example, we have this reference HTML here. This reference HTML is going to be stored as something like this. We want to be able to take differences of these trees, so I wrote a library called TreeDif which you can find here. Take these internal memory tree representations of the pairs there. And I want to say that tree differences are interesting. The only trees which we're interested in are trees which are different from each other. The reason that we want to do that is because if two trees are different given one CSS selector the two trees will return different results. So we really only want to examine these trees which will return different results to us. So what I did was oh yes, also different trees indicate that the correction scheme is different. We have differences in our correction algorithms and we want to examine differences in those correction algorithms. I got 461 random HTML files and found that 336 of those parse trees were different. So what I did was I looked through those parse trees and examined the differences and I want to share with you five of my favorite differences. The first one is called Encyclopedia Brown in case of a missing slash TD tag. Now, I've reduced these HTML examples to the point where I get the minimum amount of HTML which produces two different in-memory trees. Now, the way that we look in the browser the browser corrects this by adding two closing TD tags after hello at the world. H-proc correction looks like this. I've added the red tags or the ones that H-proc has added. No one here corrects it like this. It's the same way that the browser does. The that's terribly green. The blue box indicates nodes that no computer has that H-proc does not. The red box indicates nodes that H-proc has that no computer does not. And the gray boxes are ones that are nodes that they have was created by the three different consequences of this correction. So, if you were a search for TD for its inner tags, you would get Hello World back which is not correct because we have 2D and it's corrected incorrectly. In node theory, we search for a TD tag and get back the right the right tags. In case of a valid HTML actually there is a you look at the P tag the P tag's align is missing two quotes. The way the browser corrects this, it actually just adds the quote tags so great, it's exactly the same pretty much. H-proc adds a closing center tag node theory adds the quotes. This results in a strange in-memory graph. H-proc actually moves the P tag underneath the center tag so we end up with a strange in-memory tree where node theory keeps the P tag underneath. Example number 4, font tags there's this 3 and it's hard. Here we have a great excellent HTML which I took from your web page Jim and reduced a little bit correction, obviously nothing has happened here H-proc got out of the font tag and you can see the differences in the trees here it's difficult to read but you can see that these sub-trees have actually moved. This is missing an equal sign in the body. The browser corrects it like this it looks kind of strange, closing table tags but there's actually a problem going on here that's a little bit more subtle which I'll explain in a little bit. This is actually a preach out of the tree this is what the tree looks like when it is printed out there's a more subtle problem going on. Node theory correction, it removes the text that's not valid for an attribute name so we're missing a little bit of beta but the tree structure is still in place and we actually have that our main memory trees are completely different completely different you'll notice here that it's kind of hard to read but H-proc is actually missing the body tag the body tag is gone if we search for the body tag we get zero back but where did the body go we saw it printed out and we printed out the document it's actually common so if we go through and navigate the tree ourselves we can find this as a text method I'll give it an example but it's not fun anymore 71% of the trees have differences I examined 15 of them in every example livexml2's corrections mirrored the browser the interesting thing about comparing these trees is they would find bugs in either one of them this wasn't biased towards one or another if the trees were different that means that one of them is correcting it differently one of them must made you wrong in every case livexml2 mirrored the browser and not the ones did H-proc come here or whatever conclusion use the best tool for the job it's soapbox time for me I believe that notepadir is better than rexml and H-proc because it is built on a more widely used xml and html parser people who use livexml2 don't just write in ruby they write pearl, c, c++ objective, c, pycon the list goes on I believe it is better than livexml ruby because it has more ecomatic ruby interface it also includes a css rexml has one test in 1.9 it has two tests so they have backported that to 1.8 1.8 might have to have two tests livexml2 was released in April 2000 livexml2 has always had an html parser ever since the first release that html parser is 9 years old interesting codes I have one second left interesting codes you can find them here I will tweet the slides I will tweet the slides when I post them and that is the end


Welcome to All Hands Update. I'm Petty Officer Andrew Johnson. These are your headlines from around the fleet. Latoral Combat Ship Squadron 2 was established November 7th at a ceremony held at Naval Station, Mayport, Florida. The command will support the arrival of Latoral Combat Ships or LCSs in Mayport starting in 2016. Up to 900 support squadron staff and ship crew members are expected to work at the headquarters. A new ship platform will be hitting the fleet soon. Textron Incorporated began production of the Navy's first ship-to-shore connector, or SSC, on November 17th. The SSC will replace the existing fleet of LCAC vehicles. SSCs will be high-speed, fully amphibious landing crafts capable of carrying a 74-ton payload and will travel at speeds of more than 35 knots. The enclosed personnel transport module can hold up to 145 combat-equipped Marines or 108 casualty personnel.


Okay, we should be live now. Let's check the sound, the video and everything. Okay, it's working okay. Go over what we are doing. For this, just an intro, these streams are for developing BarneyCals.com. There's a bunch of tools on the main page that you can go check out. Last one is still the EEG2 music conversion development. This is what it sounds like. There is a seizure in it, so you can hear what the epileptic seizures sound like by scrolling through this sample data. This data is from 16 channels. 0 to 15. Yeah, channel 12 was more. The sound it produces is a bit more cheery to the beginning of the file and make the window size 100. This will be the sound of the whole waveform. This is the seizure in it, so this is normal EEG before the seizure, then the seizure, and this quiet, which is normal for epileptic seizures, quiet EEG after the seizure.  You can either select the volume manually or do a auto volume selection. You can also do an auto duration that will play longer tunes. If you select the longer a window size and show the tunes. Yeah, so let me restart this for a sec. So when you load the page, it loads with a window size of 10 seconds by default. And default auto volume, you can actually select it yourself. If you had the auto volume turned on, so before seizure, it will be quiet. Seizure will become louder and louder. The end is much quieter as well, because as I showed you before, it's normally a very quiet EEG at the end of the seizure. In channel 12, you have a much higher amplitude seizure in it, so the sound will be louder as well. Channel 7, the seizure onset is more gradual, and this is the after the seizure, very quiet EEG. We should be right, but so another tool, we have this bunch of tools at the bottom of the page that currently do not work, phasologic and neural networks. And what we decided to do is take this ECG game, sorry for the ads, and adjust it and make essentially an algorithm abort that will play this game. So I explained it before, happy to explain it again, but let's just dive into coding and then we can zoom out if needed. Someone is asking questions that will be very nice. So we have this HTML, it has some explanation at the bottom, currently just explaining how to play the game, it has nothing This HTML code is for a web page titled, Cardio Quest ECG Waveform Scoring Game. It's structured to provide an interactive game experience focused on identifying abnormal ECG patterns. Key elements include, we also have this Python code and two JavaScripts, so we'll get there. Well, how about actually we'll do the waveform first because we not changing it today. So this is waveform JS. The waveforms, JS script is designed for generating electrocardiogram, ECG, waveforms, both normal and abnormal, that are used in your Cardio Quest ECG scoring game. Here's a breakdown of its key functionalities. Initial setup, it creates an array T values representing time points and defines parameters like new, sigma and amplitude for the waveforms. Gaussian function utilizes a Gaussian function to model the R wave, a critical component of the QRS complex in ECGs. Waveform generation, generate full waveform function produces a complete ECG waveform with optional variations for the QRS complex. It includes the P wave, QRS complex, modifiable, S wave and T wave. The waveform is adjusted vertically on the canvas 300. Okay, now we also have this game logic, just three format document, that's okay. The game underscore logic, JS script is the core of your Cardio Quest ECG waveform scoring game. It's well structured and integrates several key functionalities. Canvas setup, initializes the canvas for drawing waveforms and sets colors and fonts. Game variables, manages score, game speed, waveform data, an X coordinate for waveform scrolling. Draw waveform, draws the ECG waveform on the canvas. Draw score, displays the player's score. Clear canvas, clears the canvas for redrawing. Draw counters, displays hits, false alarms, correct rejections, and misses. Click handling, detects clicks on the canvas and updates the score based on the type of waveform clicked. Scoring logic, manages scoring with hits, false alarms, correct rejections, and misses. Scrolls the current waveform across the canvas. Generates a new waveform once the current one scrolls off. Waveform analysis, sends waveform data to a backend server for analysis. Displays analysis results on the web page. Game loop, a continuous loop that updates the game state, including drawing the waveform, updating scores, and managing. Okay, can we focus on the fuzzy logic design? I'll share the last piece of code, which is the Python Flask application. And then we will go from there. A current problem is that the features of the fuzzy algorithm are not displayed on the front page. Let's do this one quickly. Your Python Flask application integrates fuzzy logic for analyzing ECG waveforms. It's a crucial part of your system, processing the waveform data and applying fuzzy logic to classify the waveforms as normal or abnormal. Let's address the issue of fuzzy algorithm features not being displayed on the front page. Dataflow, the application receives waveform data, processes it, applies fuzzy logic, and sends back the analysis results. The front end end should display these results. Fuzzy logic setup. You've defined antecedents, input variables, for frequency, amplitude, and peaks, and a consequent output variable for abnormality. Membership functions and rules are well set up. Data processing, the app calculates dominant frequency, peak count, and amplitude from the waveform data normalizes these values and feeds them into the fuzzy logic system. Result generation, the fuzzy logic system computes the abnormality level and membership values for each input feature. Front end integration, ensure that the front end, your JavaScript code, correctly handles the JSON response from the Flask app. The response includes the fuzzy logic analysis result and the membership values. Troubleshooting display issue. Check if the response from the Flask app is correctly structured and includes all necessary data. In your JavaScript, ensure that the display analysis result function correctly accesses and displays the response data. Verify that the HTML elements, like raw frequency, normalized frequency, etc., are correctly named and can be accessed by the JavaScript. Use browser developer tools to debug any issues with receiving or processing the response on the front end. Debugging, use print statements or logging in both the Flask app and JavaScript to trace the flow of data and identify where the breakdown occurs. Addressing these points should help you resolve the issue of displaying fuzzy logic features on your website. If the problem persists, it might be necessary to delve deeper into the specifics of your front end code and how it interacts with the back end. The error message you're encountering, float, argument must be a string or a real number, not state per simulation, suggests that there is a problem with the way the membership values are being extracted and converted to floats in the fuzzy underscore logic underscore analysis function of your Flask application. This issue likely arises from these lines. The membership underscore value property is not a straightforward numerical value, but a state per simulation object in the context of a control system simulation. To resolve this, you should access the membership values after the compute method is called using the input method of the control system simulation object. Here's how you can fix it. This adjustment should correctly convert the fuzzy set membership values into floats and resolve the error. Ensure to test the updated code to confirm that it functions as expected. The error message <IP_ADDRESS>, the 1st of February, 2024, 14 hours, 15 minutes and 29 seconds post analyze underscore waveform HTTP 1.1 500 indicates that your Flask server is hitting a server side error when handling the post request to analyze. Since you mentioned that there are values in the terminal, but they're not shown on the front page, it seems the server is successfully processing the data or something goes wrong afterward, possibly in the fuzzy underscore logic underscore analysis function or when forming the response. This issue is causing the server to return a 500 internal server. Detailed error logging. Add more detailed logging in your Flask app, especially in the analyze underscore waveform function and the fuzzy underscore logic underscore analysis function to capture the exact point of failure. This could help in identifying a specific line or operation causing the error. Check fuzzy logic analysis. Ensure that all operations within the fuzzy underscore logic underscore analysis function are correctly handling the data. Pay special attention to any operations that could potentially raise exceptions. I'm thinking we changed the fuzzy logic analysis to make the numbers correct, but the analyze waveform haven't changed. Consistency in data types and formats. Check if the data types and formats expected by the new analysis logic match those produced by analyze underscore waveform. Any mismatch can lead to errors. Testing with new logic after updating analyze underscore waveform, test it thoroughly with various inputs to ensure it's working as expected with the new analysis logic. Analyze underscore waveform root in your Flask app looks well structured for handling waveform data analysis using fuzzy logic. Let's address the error that was occurring in your fuzzy underscore logic underscore analysis function. Receive and process data. The function successfully receives waveform data from the post request and processes it. Fuzzy logic analysis. You call fuzzy underscore logic underscore analysis with the process data. Ensure that the function correctly computes the fuzzy logic results and retrieves the membership values as discussed in the previous message. Response creation. The function prepares adjacent response containing the analysis result and the membership values for frequency, amplitude and peaks. It also includes the process data. Error handling. The try except block is a good practice to catch any errors that might occur during processing or analysis. Debugging. The print statement for debugging is useful. Once the error is resolved, consider removing or commenting out these print statements for production deployment. After adjusting the fuzzy underscore logic underscore analysis function to handle the state per simulation object correctly, test this route again. If the error persists or if a new error arises, review the stack trace for more detailed information about where and why the error is occurring. Ensure that all parts of the system, the front end JavaScript, the flask app and the fuzzy logic processing work seamlessly together for a smooth user experience. Guess the message. It's coming from fuzzy logic analysis, normality analysis, input.  Trying to access the normality analysis as if it were a dictionary but it's not the input option as an instance of the input acceptor class which does not support item as Simon used the view method instead. Another error is similar. It would be a different problem where the values are just not displayed. That doesn't look correct. Yeah, let's continue with GPT-4 instead. Can you regenerate the whole function? Sure, I can help you regenerate the fuzzy underscore logic underscore analysis function with the necessary adjustments. The revised function will process the data using fuzzy logic and correctly extract the membership values. Here's the updated function. In this revised version, the key changes in how the membership values are extracted after the compute method. Note that compute underscore membership underscore value is a pseudo method. You need to replace it with the actual method used in your fuzzy logic library, like psychic fuzzy, to extract the membership values correctly. The rest of the function remains similar to your original design, the finding fuzzy variables, setting up membership functions, creating rules and computing. Well, let's look to know that they compute, compute membership value. In this revised version, the key changes in how the membership values are extracted after the compute method. Note that compute underscore membership underscore value is a pseudo method. You need to replace it with the actual method used in your fuzzy logic library, like psychic fuzzy, to extract the membership values correctly. The rest of the function remains similar to your original design, the finding fuzzy variables, setting up membership functions, creating rules and computing the fuzzy logic result. Where is this compute a membership function value? It's a pseudo method. What does it actually mean? You're correct that the compute underscore membership underscore value is not an actual method in the psychic fuzzy library. My apologies for the confusion. In psychic fuzzy, you typically compute the fuzzy membership values before running the control system simulation. Here's how you can adjust the function to extract membership values correctly. In this version, the fuzz, in terp underscore membership function is used to calculate the degree of membership of each input value in each fuzzy set. This function is part of the psychic fuzzy library and is the correct method to obtain the membership values. So fuzz and terp is a legit method. It's getting different errors. In this version, the fuzz, in terp underscore membership function is used to calculate the degree of membership of each input value in each fuzzy set. This function is part of the psychic fuzzy library and is the correct method to obtain the membership values. Getting this error, let me explain. The error object of type in 64 is not json serializable suggests that there's an issue with converting numpy data types like in 64 to json format. In python, json serialization works seamlessly with native python data types, but not always with numpy data types. Here's how you can fix this issue. Convert numpy types to native python types. Before returning the data in the json response, convert any numpy data types to native python types. This can be done using python's native type functions like int and float. Apply the conversion in your fuzzy logic analysis function. You'll need to apply this conversion in the fuzzy underscore logic underscore analysis function, particularly where the membership values are calculated. Here is the adjusted part of your fuzzy underscore logic underscore analysis function. In this updated code, I've wrapped the results of fuzz. Interp underscore membership with float, which will convert the numpy float 64 or int 64 types into native python float or int types that are json serializable. This should resolve the serialization error you're encountering. Yeah, how about this one? Are you kidding? The error message you're seeing, crisp output cannot be calculated, likely because the system is too sparse, suggests that the fuzzy logic rules you set up in your system are not being activated by the input values. This typically happens when the input values do not sufficiently overlap with the defined membership functions, meaning no rules are triggered and the system cannot produce a crisp output. Here are some steps to troubleshoot and resolve this issue. Review membership functions, ensure that the membership functions for frequency, amplitude and peaks cover the entire range of possible input values. If there are gaps in the coverage, it's possible for inputs to fall into these gaps, leading to no rules being activated. Adjust membership functions, if your inputs are from zero or one, as in your processed data, make sure your membership functions account for these values. For instance, you might need to adjust the triangles or add new membership functions to cover these extremes. Check rules logic, review the logic of your fuzzy rules. Ensure that they're logically consistent with the membership functions and can be triggered by the range of input values you expect. Input range normalization, verify that the normalization of input values is correctly done. If the normalized values don't align well with your defined membership functions, this could lead to the issue you're facing. Default output handling, implement a mechanism to handle cases where no rules are fired. This could be a default output or a message indicating that the input values did not trigger any rules. Debugging, temporarily add more print statements in your Flask app to display the normalized input values and the degree of membership in each category right before the compute method is called. This can help you understand how the inputs are interacting with the membership functions. Certainly, let's focus on addressing why the raw and normalized values aren't being displayed on the front end. This issue typically involves ensuring the data is being correctly passed from the back end to the front end and then properly rendered in your HTML. Here are steps to troubleshoot and resolve this. Check JSON response from back end. Ensure that your Flask back end is correctly including the raw and normalized values in the JSON response. Use print statements in the Flask app to confirm that the data is being structured correctly before it's sent. Examine front end JavaScript code. In your front end JavaScript, ensure that the function responsible for handling the response, display analysis result or similar, is correctly parsing the JSON and extracting the values. Again, use console logs to debug. HTML element ids, verify that the ids in your HTML match those used in your JavaScript. For instance, if you're trying to display the values in elements with ids like raw frequency, ensure these ids are exactly the same in both your HTML and JavaScript. There is a thank you young slug. My microphone was muted. That helps a lot. That's why you need people in your joining your live. Sorry for that. Hopefully you can hear now. So just do a quick recap. We have this game you can access it on the site on Bionicures.com or free. You can play it. It's teaching you how to process ECG data, how to review ECG data. Still getting errors. Let's close this for a sec. So when you start the game, your score is zero.  And that task is to find abnormal AG, EEG waveforms. This one is normal, gave me a correct rejection. This is normal again. I expect another correct rejection. My score is 10. Normal again, correct rejection, score will be 20. I don't know why, but there is a normal again. So I don't have to do anything. This is abnormal. It's missing a bit in the beginning. So I clicked on it, got one hit. So the idea is you have to keep increasing the greens and reducing or not increasing the reds. So you need more hits, correct rejections. This is obviously abnormal. So I'm clicking on it, getting hit. Every time you get plus 100 points, it becomes faster just to give you more of a challenge. This looks normal. Anyway, what we're doing now is trying to replace me playing the game with a port, with a machine learning algorithm, a simple one at this stage. It's normal. And here at the bottom of the page, we see the features that we're looking at. We're looking at frequency peaks. Let's see if the peaks are even working okay. Don't think they, right. So they are changing. That's good. Yeah, we don't want to normalize the number of peaks. The peaks should be okay. So we're still working on this working progress. I don't know why the frequency is always zero. Should not be zero. We'll check this in a sec. We have, okay, we are live streaming now. So we like you to do it quickly because we don't have much time left. The frequency seem to be always zero. How do we fix that in the code? I need an actual code specific to what to the code I shared with you before. Also the number of peaks, if we're assuming that the number of peaks, peaks, not peaks, if we are assuming that a specific ECG should have a certain number of positive and negative peaks should have three positive peaks and one negative, then we don't have to normalize these numbers as well. So we need to adjust the code accordingly. Understood. Let's address these issues quickly. Review frequency calculation. You're using the FFT fast Fourier transform to determine the dominant frequency. The NP dot abs frequencies are max approach finds the index of the maximum value, which may not be the correct way to find the dominant frequency. You should calculate the frequency from the index Python copycode hash assuming your sampling rate is defined, e.g. samples per second. Sampling underscore rate equals hash to find this based on your data. Frequencies equals NP dot FFT FFT for Q, LEN NP underscore data D equals one sampling underscore rate. Dominant underscore frequency underscore index equals NP dot abs NP dot FFT dot FFT NP underscore data are max. Dominant underscore frequency equals abs frequencies dominant underscore frequency underscore index. Let's say okay, I should check for zero data. Okay. Ensure your input data Wait for underscore data. It's not a flat line. Clear. More clear works. I'm using co-pilot github co-pilot. Yes, it can. So it's better at coding, obviously. Which one is better to use for this project? GitHub co-pilot or chat GPT for coding? Chat, chat, chat, chat GPT. Anyway, the both can do the task but Choosing between github co-pilot and GPT, like chat GPT, for coding in your project depends on your specific needs and the context of your work. GitHub co-pilot, asterisk integration. Okay, just do it quietly. Yeah, obviously integration is better. Context to where? Yeah, so that's not quite clear. Language support, yeah. Both of them support the same language. A GPT can hold more context, that's for sure. So this page will hold the context for the whole conversation. Okay, we might have to continue it next time, maybe later today. So I'll see you in a bit. Bye.