Thanks for attending here. Welcome fellow web assemblers. Today I'm going to talk a little bit about Python and how we can integrate Python into the component ecosystem that Luke talked so eloquently about yesterday. My name is Joel Dice. I'm a principal engineer at Fermion. One of my big passions, even before I started at Fermion, was better polyglot language support in the WebAssembly ecosystem. I actually showed this slide in a previous presentation last year, but I still like to look at it as sort of the vision, long-term vision, to really fulfill the polyglot promise that WebAssembly offers so that you can take source code written in any of these languages and more and compile it to WebAssembly and target a wide variety of hosts, whether they be embedded or browser or serverless database stored procedures, all of the above. And frankly, we're not there yet. We're getting closer year by year, day by day. In particular, we'll talk about Python today, but at Fermion, we want to see all these languages succeed and use this opportunity to plug Kyle's Brown's awesome special interest group for guest languages in the ByteCode Alliance. I'll have a link at the end of the presentation if you want to get involved in that. But we're spinning up subgroups for Go, first JavaScript for Python, maybe Java here in the near future. So if you're interested in this topic, please don't hesitate to join us. So the agenda today, first, we'll talk about some of the prior arc, some of the solutions for targeting WebAssembly using Python that exist already and the underlying technologies that they use. We'll talk about composing WebAssembly modules. There's a variety of ways to do that, each with their pros and cons. We'll look in detail at what Componentize does behind the scenes. Hopefully we'll have time for a nice little demo that showcases, in particular, the sandboxing capabilities that Python provides for running untrusted code in an otherwise trusted environment. And finally, we'll look at some of the next steps that are required to make this really ready for prime time for everyday development and how you can help out with that effort. So some of the prior art here, it's built on a foundation laid by the C-Python folks, particularly Christian Heims and Brett Cannon and others who have seen to it to provide first class WASI support in C-Python supported in large part by WASI SDK and other critical projects. Christian actually gave a great presentation that you can look up at KubeCon North America, WASM Day last year to get some details on that. And then I just had lunch with Chatham who is leading the Piodide project and that combines C-Python, M-Scripten and a rather impressive library of ported packages. Pure Python packages aren't that difficult to run on C-Python in M-Scripten or WASI. However, packages that have native extensions written in some combination of C, C++ and Fortran can be quite a bit more difficult and I'll allude to that a little bit later. Some of the challenges there and some of the cool sub-projects that came out of that project are PiodideBuild which is responsible for cross-compiling from whatever native architecture you're running on to WASI or in this case subscripten rather and then MicroPip which is responsible for resolving packages, the dependencies in your pyproject.toml for example and finding them either on PyPI or if they have native extensions possibly an alternative index. And then the last thing I'll mention about the C-Python WASI support is that currently it's at Tier 3 status. If you're familiar with the Python C-Python support status kind of the most popular platforms are Tier 1. Tier 2 has a somewhat relaxed criteria for being at that tier and Tier 3 are maybe the lesser supported less common platforms. Right now WASI is considered Tier 3 but Brett is working hard to graduate that to Tier 2 which involves more maintainership coverage and better support in C-I official releases, that sort of thing. And I sort of, I'm doing this out of order but all I should mention M-scripten I'll talk a little bit more here shortly about M-scripten but they've really paved the way with some tooling conventions like dynamic linking for static linking that have made supporting native extensions in WASI even possible. So definitely standing on the shoulders of giants here in building this stuff. So some people might wonder M-scripten's doing stuff, WASI's doing stuff where's the overlap, what's the difference priorities, goals, that sort of thing. The way I would like to sum it up is for M-scripten folks it's really about let's target WASM with existing software kind of fulfill the expectations of existing software probably written not for WebAssembly originally but rather for native systems such as POSIX and Win32 and WASI wants to do all that as well but we also want to kind of advance the ecosystem create a better ecosystem. Brendan Burns talked about this 1970s legacy that we have with POSIX we want to move beyond that. There's some definite warts in POSIX it was designed for a different era different sort of software development environment. And of course there's advantages to both of these you know the great thing with M-scripten is they're laser focused on a very specific goal and they've been able to move very quickly with that and thus pave the way for some of the work that I'm going to talk about today. There's also advantages to the WASI approach of course jettisoning some of this legacy baggage that we find in some of these native systems. Another way of looking at it is M-scripten is about the browser it's focusing on the browser and running all types of software things from like Figma to Photoshop a lot of traditional desktop applications in the browser so we want to give all kinds of software a home in the browser with WASI yes we want to do that and we want to run it everywhere else which may prompt a question doesn't traditional software already have a home after all it was written for these native systems these desktop systems and the answer of course yes it does but that home it needs a remodel I would say you know the equivalent of POSIX I would say if it was a house is it's got you know this 1970s stained linoleum countertop and it's got carpet on the toilet seats and we kind of we want to update it it was a different era back then and so these non-re-entrant APIs this global state that's hard to keep track of Erano all these things this is like carpet on a toilet seat all right so let's talk about composition here web assembly has a few ways of handling this composing code the first one is statically linking and it's not really module composition at this point this is before you even have a module and this is where you use whatever your tool chain if it's a compiled language you're separately compiling a bunch of .o files you're linking them together into a module and this is sort of a foundational way of doing things even if you're using a high level language the interpreter for that language the VM for that language is going to be built this way and the pro is it's very widely supported it's like the original way to compose code and it's very optimal there's no indirection there's no global offset tables that you have to call through or reference other data using but there's a long list of cons as well there's no complication it's harder to patch a binary once you've linked in a library statically you're not really going to tear that stuff apart again and so auditing and addressing security issues can be challenging there's no sandboxing it's all one shared memory space one set of global variables and then polyglot composition is awkward you're basically using C as the lingua franca passing pointers around most languages can do this but it's never fun to compose a polyglot app this way and so if you're familiar with sort of native development you've heard of shared libraries or DLLs and so there is the equivalent of such things in WebAssembly it wasn't a part of WASI until very recently that was part of the work that I had to do here but mscript again paved the way for this and some of the pros are less code duplication now you can actually have multiple modules link against a single version of your Java interpreter or your C library etc or your open SSL and then it matches expectations of existing software since this is a paradigm that's been around for native developers for decades and then it's also auditable and patchable still some cons here we still don't have a good it's all shared memories still at runtime so there's not really any isolation it's hard to virtualize APIs that use this still see API or ABI to pass pointers around and whatnot so some of the really cool use cases where you want to virtualize a file system or virtualize a random number generator for testing become rather difficult to do to kind of there's it's hard to insert layers between these, it can be done but it's not easy and then poly composition you're still using the C ABI not great hard to do high level things and then versioning if you've been around in the windows world you know DLL hell is a thing trying to get the right version of the right DLL and upgrade them in place easy and then the third way which Luke went into in great detail yesterday is component linking where you have a shared nothing boundary where you're passing sort of almost in an RPC style way between components but those components themselves each have their own memory their own global state and there's some big pros there it's very virtualizable it's easy to insert shims or between a guest and a host it's very polygot friendly because they can each have their own runtime in their own sandbox versioning should be easier especially with the component model because we have these high level types functions that pass application level types between them it's easy to audit and figure out whether two components are compatible with each other and then sandboxing for security isolating third party dependencies in their own sandbox and not giving them access to sensitive data can be a real boon and help address the supply chain issues that have become top of mind for a lot of developers but the con is it's a new paradigm it's not what developers are used to dealing with when composing software and so it can be hard to pour existing software and so since building this ecosystem building the foundations of this ecosystem we don't have established package registries the same way we have PyPI or crates.io etc so the question we see these pros and cons the question might come to mind is which one should I use it sounds like there's no clear winner there and I would say the winner is all of them I borrowed this diagram from a shared everything linking page under the component model repository on github but what we see here is on the left it's sort of the static dependencies where we have the application depending on a couple of libraries one that does you know something with images using image magic another that handles zip files and then those in turn depend on some C libraries which then each of which depend on the C standard library and then but dynamically we see that when these modules are actually instantiated within a component we have these red lines around these strictly enforced sandbox boundaries with very clear interfaces between them and we see each one has a libc instantiation so that the actual memory the malloc heap etc and the global variables each one gets their own version the codon disk is all shared but each one gets their own instantiation and so here we get the sort of the best both of all three worlds we're using static linking within each of these modules we're combining these modules within a component using shared everything linking or dynamic library linking and then we're composing the components using shared nothing linking and so as an application developer you can kind of you can isolate third party dependencies you can get the best of each get the strengths of each of these composition models and mitigate the drawbacks by choosing the right tool for the job okay so at a high level a componentized pie I mean I say so myself but I think it's a pretty straightforward flow of inputs and outputs at a high level you basically have to provide two things maybe three if you have a native extension in this example we have a world that we want to target maybe it's a wazzy world that's been standardized or it's just something I want to target a particular platform and it's got a whip file that I can target and I've got my app.py that targets that world that uses the interfaces imports the interfaces that the host will provide and exports the functionality that host will call and then in this particular example we also have a native extension that we know we're going to need at runtime so we're going to use wazzy SDK to compile that from C into a .so which is really just a .wazm module with some metadata a special custom section that provides metadata about how to link this thing with other modules and then we take all that input and we run it through give it to componentized pie and it spits out a component that contains everything we need to run that module including some stuff that we didn't provide that was actually built into componentized pie such as the C Python interpreter and libc and so on and we'll see that in detail in a moment here but hopefully pretty straightforward you know as a user this is all you really need to know you need to provide these things put them into componentized pie you'll get out a component you can then run it on the host that you were targeting with that world and so if that's all you want to know and you just want to use it you could just kind of tune out the rest of this presentation because now we're going to dive deep into actually how it works behind the scenes and there's quite a few steps it's a bit complicated as a matter of necessity because of the kind of the world that you know the legacy we have with Python and how packages are structured and so on we need to accommodate all that so I'm going to split this up into three stages roughly just because fitting it on one slide turned in an eye exam and it didn't want to subject you to that but at the first stage is what I call pre-linking and the goal here is to get all our modules that we're going to pack into a component get all those ready and staged to be to be linked together and some of those modules in the native extension case that was provided you know by the application developer maybe either explicitly or if they depended on a third party package we found that.so in a wheel which is Python's way of of calling packages and then but we also have a few other WASM modules that are built into for convenience are built into componentizepy that it will inject into the produce component that includes a runtime.so which sort of interfaces between the WebAssembly code that we're going to produce here in a moment I'll talk about that and the Python world and that uses py03 which is an excellent Rust library for interacting with Cpython. Cpython itself is packaged as libpython311 we've got libc which pretty much all these other modules will depend on this that includes the allocator and the interface to the host for doing things like file systems environment variables and so on and then we also have this WASI preview 1 adapter which because libc currently targets the WASI SDK libc currently targets WASI preview 1 and components need to target WASI preview 2 this allows us to transparently adapt between the two and then also we've taken that wit world and we've used a feature in componentizepy that generates bindings from that wit and those bindings have on this particular slide we're just showing one of those parts but there's two parts one is Python code which you're going to essentially import into your guest application to access that wit functionality call those imported functions and then it will provide if there's any exports it will provide a abstract base class that you can inherit from and then implement the export functions and the other part which we see on this slide is some WebAssembly code that we are synthesizing from scratch based on that wit world that handles the canonical ABI translations between the Python world and the host or the wit world the canonical ABI and so the canonical ABI as a refresher has concepts of integers booleans lists, strings, records, variants all these sort of high level types and so we need to generate WebAssembly code we could have generated Python code but it turns out more efficient in long run to generate WebAssembly code directly that will handle that conversion and then it works in tandem with this runtime.so that handles the bridge between to actually create the on one end create the Python objects corresponding to the to the wit objects and vice versa when lifting and lowering that's the terminology as we're converting between low level WebAssembly sort of bytes in memory and high level Python objects so we feed all that stuff above the wit component prelink into this prelink thing and that so those are all our input.so's internally and then those go into this prelink step which then synthesizes two more WebAssembly modules one is the main module and this is the one that has a memory all these other.so's all the other WebAssembly modules import a memory and so it's the main module that will export the memory and that will be sized appropriately for the total amount of memory that each of these .so's above the line have declared that they need needed in their metadata that I mentioned earlier and then finally we have an init.wazm which is responsible for doing sort of like runtime fix ups for the global offset tables for global variables sometimes you want to take the address of a global in the C code and we need to fix up position independent code so that it actually points to the right place at runtime so that's what init does plus a few other things that I won't go into so now we have all our core modules all of these are core modules there's no components in the picture yet but that's what we'll get to next in the next step which is actually linking so now we're taking all those .so's those .wazms they're all core modules we're going to feed them all into this with component link step and that's going to do things like it's going to try to topologically sort all these modules so that you know the ones that have the fewer dependencies will come first and then ones that depend on the earlier ones will will be able to kind of hook up all the imports to the required exports in some cases though we have cycles so we have to break those cycles via an indirect function table and so that's part of what this step is involved in and then finally we do this link and the output of all this is a what I'm calling the uninitialized component which is not quite done yet this component is ready to have python code injected to it because you'll notice we haven't actually used any of the python code yet so it generates this wasm file and this wasm file could actually be used at this stage if you wanted to kind of provide on the host file system amount so that it could actually find your python code and you could use it this way we want the interpreter and your application code and all the dependencies all to be bundled into the single component and so that's the next step which is this initialization or pre-initialization which to be clear all this happens at build time and this is at the point where our python code comes in and that includes the python code you provided and any dependencies and a synthesized set of python code I called it world.py it's actually multiple files but let's just pretend it's a single file here and that gets derived this is the second part of the binding generation process that I mentioned earlier that generates the python code that you're actually importing into your application and all that gets fed into along with our initialized component and the python system libraries all the battery included python features like the JSON all that stuff that you expect to be built into python that gets bundled in as well to a component and it step and you may have heard of wiser that's been mentioned in a few presentations so far this is the component so wiser only operates on modules currently I've been talking with net Fitzgerald about maybe integrating this component support but for now it's sort of a separate project and this does component pre-initialization and this takes all this stuff and essentially runs the python interpreter at build time running the top level of your application so it's satisfying any imports and basically taking a snapshot once that init function returns taking a snapshot of the linear memory that was produced and then creating a new component that represents that snapshot and that snapshot is ready to run it's close to my heart as Fermion a serverless application it's already resolved all the imports it's already run some code possibly loaded stuff from the file system at build time and it's ready to go and handle an incoming hdb request or an incoming Kafka message or something like that in under a millisecond because we've already warmed up the interpreter it's ready to run before I move on any questions about that, that was a lot of stuff I know okay it's demo time the demo I'm going to show you here is based on a simple world here this was actually prompted by a gentleman on the bytecode alliance Zulip who had asked what are my options for sandboxing untrusted python code say I'm reading it off an hdb request it came from somewhere that I don't trust but I want to run it in some safe environment so I got to thinking how could we use what was then an in progress componentized py with wasm time py which is essentially a python wrapper around the wasm time run time and actually do what this gentleman is asking for and so what I came up with what I felt like was the simplest way to use a val that would express this if you're familiar with python it has a distinction between statements and expressions and so if you're if you want to execute a statement you have to use exec if you want to execute an expression use a val but they're otherwise kind of the same thing so I thought okay we'll have functions for both in case you want to do both and and really it's just yeah it takes in a string which is some arbitrary python code your untrusted python code and so that's what we're going to do we're going to run this in a sandbox and we can restrict it also we'll see in a moment that we can restrict how long it gets to run in terms of time we can restrict how much memory it can use and we can basically cut it off from all host access to the file system and so on so that'll be fun so let's look at what this looks like at the guest level so this is importing sandbox the code that was generated by componentized pi from that WIP file we just looked at and then and then we're using that here it produced an abstract base class called sandbox with a capital S and we're inheriting from that and we're overriding the abstract bit methods to implement the exports for this for this particular world this particular example doesn't use any imports I just realized that maybe but suffice to say it does imports work fine too should've added a log statement or something and so basically what you would sort of expect what it's doing here is it's evaluating the expression using the built-in eval or exec functions and then for expressions it's returning the result as a JSON string which then the host can kind of deserialize at its leisure and then it catches errors and it can raise errors there's some details there about how we translate Python exceptions into the WIT contract which just wants strings but kind of just simple details there hopefully pretty straightforward and then we can look at the host which is using wasm time pi to do the same thing so wasm time pi has an equivalent generator to generate the host view of the of that WIT world which imports and the exports are sort of reversed in terms of like who's calling what but it will look very much very similar there's more in here because I actually have I've sandboxed I've implemented a timeout and a memory limit and so on I'm not going to go through this line by line plus we have to parse command line arguments and stuff like that not super interesting the one thing I will draw your attention to is right now we are talking about the WISI preview 2 even though wasm time itself does technical reasons you can ask me later why that is but so we have to provide our own sort of stub implementation and that's what we're doing here most of which is just we're saying you can't do this you can't you can't access standard id standard out you can't access file system etc and then finally based on what was passed in on the wasm time run the guest call the exec functions the valve functions and then print out the results all in a very sandbox secure way so let's go ahead and run this I'm going to peek at my cheat sheet here this is all I'll have a link to it in the presentation you can play with this yourself but I've already installed componentize pie and wasm time I also have a build a wazzy build of numpy there's no official build yet so I built one for your convenience it does use numpy behind the scenes and we'll exercise that so I did all that stuff and now we can run the demo so the first step is I'm going to run so I'm going to run this I'm passing in my I'm telling it what directory to look in for the WIT files I'm telling it which WIT world I want to target in case there's multiple worlds involved and then I want to the sub command is called componentize that PY is what we just looked at so we're telling it which module that we want to be the entry point for this application and then we want the output to go to sandbox.wazm takes a few moments there there we go and then next step is we want to generate the bindings on the wasm time side so we're using wasm time bind gen a sub module of the wasm time pie project and this is we're giving it not the WIT file but it's actually we're giving it the sandbox wasm we produced in the previous step and this will extract the component type and generate host bindings, host python bindings from it it also does some other stuff that I won't go into but it basically prepares this component for running in wasm time pie so we'll do that there and then finally we can run we can run this so the host pie is something I just showed you and we're going to give it a single expression which uses numpy and of course this is going to use the C extension capabilities that we kind of saw in the diagram there to multiply a couple of matrices we just kind of hard coded that matrices convert it back from a numpy list which can't really be serialized to JSON to something that is a python list and and there's the result so that all ran in a sandbox another thing we can do is run something that deliberately triggers the time out the five second time out that we've enforced here so it's an infinite loop well this is untrusted code it shouldn't be doing that misbehaving so we will let that run for five seconds and eventually it's a big ugly exception trace ignore that but it timed out so we're secured that way and then we also have a let me see if I can find it oh yeah so I've also got a little thing that tries to allocate more memory than we're going to give it access to we limited it to 20 megabytes so we're going to do that we're going to try and run that and we get a memory error I don't know why we don't get a stack trace there I should have given a disclaimer earlier I'm very new to python actually I've done about oh stop ok people are telling me to stop so I've reached the end of this feel free to catch me in the hallway for any questions thank you very much


What's up you guys, I'll go back to another one. If you're new to the channel, I am Goldpony at the new car truck SUV reviews on YouTube. And today, we're in the brand new 2024 Nissan Sentra, courtesy of younger Nissan in Frederick, Maryland for more information on their inventory. Please feel free to check out the link in the description box below. And so we're in this one today because there has been a slight refresh or redesign for the 2024 Sentra. The interior is actually slightly refreshed as well. And believe it or not, this is a car, yet again, this starts at only $20,000. That is pretty stinking cool. So ultimately in this video, we will be testing out and going over everything about this one from acceleration to braking, steering field, ride quality, sound system, exhaust clip, all that fun stuff. So having said all that, what do you guys say? Let's just go ahead and jump right into it. And as always, let's start with pricing. As you can imagine, there are a few different trim levels for the 2024 Sentra. First one being the S starting at $20,630, which is a $680 bump from the 2023 model year, but that is the trim level that we have today. So that is pretty cool. SV trim for $21,560. And lastly, the SR going for $23,720. But regardless of trim level that you go with, the power plant on the Sentra is going to be the same. Powering this beast is a two liter direct injected inline four cylinder, putting out 149 horsepower at 6,000 RPM, 146 pound feet of torque coming in at 4,000 RPM. Power sent to the front wheels through a CVT, zero to 60 time coming in at approximately 9.2 seconds. We'll test that out here in a little bit, but MBG numbers coming in at 30 in the city, 40 on the highway, which by the way is a one mile per gallon bump from the 2023 Sentra. Why is that you might be asking? That's because there is a new engine start-stop system that comes standard for 2024. So whenever you're stopped at a red light, the engine is automatically going to turn off for you. And whenever it turns green again, you start to go, it's automatically going to turn on for you. So that is going to save you one mile per gallon in the end, but by the way, taking regular unleaded fuel, so that's going to save you somebody there as well. But before we do any kind of fun acceleration test here in the Sentra, I do want to mention to you guys, the drive modes, there's three of them essentially, you got the normal driving mode, which is what the Sentra naturally defaults to. You have an econ driving mode or eco, I'm sorry, by the driver's left knee, and then there is a hidden sport driving mode, which is the horizontal line found on the shifter. So that is what we're going to hit for this acceleration test. So having said that, what do you got to say? Let's go ahead and find a straightaway. Let's put this thing to the test end. Let's see how quickly we can get our new 2024 Nissan Sentra here up to speed. All right you guys, from a standstill, three, two, one, go. It's loud. All right, not the quickest thing in the world. I will say there was a good bit of pepiness when you originally hit the gas there. And that's typically what you find with less powerful four cylinder engines, like the Toyota Corolla for example. So I got to like the pepiness and do appreciate that. But once you really get on the gas, it is loud, not the quickest thing in the world, but it should get the job done for things like merging onto the highway and all that fun stuff. But anyways, to go along with that acceleration as always, braking is equally important. And the interesting thing about the brakes is it is going to differ depending upon the trim level that you go with. For example, we are in the S trim level today.  However, if you were to go with the SV or SR trim, you will get four wheel ventilated disc brakes that do come standard. And that obviously is going to give you the better braking power. As far as that 60s year stopping distance number goes for the SV and SR at least, that's going to come in at 114 feet. And I remember driving that, I believe in last year's review, and it was a very firm braking feel. It does immediately bring you to a stop. So I did appreciate that. As far as this braking feel goes, it is about average, I will say. It's not a firm braking feel, I will say that. It's not a soft braking feel like an SV either. It's pretty much as you would expect a compact car to brake like, but the other setup is going to be a lot better. The four wheel ventilated disc brakes are the SV and the SR trim. So I'll just put it that way, but that touching on suspension and handling up front, you're going to get an independent strut type front suspension in the back independent multi-link rear suspension, front and rear stabilizer bars. As far as ride quality goes, it's actually not too bad. I feel like it is better than the Civic, but you do tend to feel a little bit more of the road in compact cars. I'll just put it that way, but it's not bad. It's not bad. And again, it's not bad. But as far as cabin noise goes, that's okay. You do get a little bit of road noise. You guys could probably tell them going 37 miles per hour. There is a little bit of road noise coming into the cabin, but that's to be expected in compact cars yet again. So I personally don't have any issues there, but the steering feel, the steering feel guys, I'm telling you it is weighted on the heavier side of things. And that is one of the things I always appreciate about the Sentra. It is instantly pointing you in the direction that you want to go because of that heavier steering feel. It's kind of like the Honda Civic and it is a heck of a lot heavier than the Toyota Corolla. Toyota Corolla is like loosey-goosey, but the Sentra, I don't know, man, I like it. So absolutely new issues there. Touching on visibility, at least when it comes to rear visibility out of my rear view mirror, I can see 100% perfectly fine out the back there. But that pretty much wraps up the performance segment of this review, you guys. Let's now go ahead and take a look at the exterior of our brand new 2024 Nissan Sentra. All right, so here she is, you guys, the new 2024 Nissan Sentra finished in super black. In case you were curious of the exact exterior color name that we had on this one here today, but again, the Sentra has been slightly refreshed for 2024. There's slightly redesigned headlights, also the redesigned front fascia as well, specifically the grille. You guys see those chrome perimeters? Previously, that part was a little bit more inside, closer to the middle of the grille, and now they just pushed it out slightly, so just a slight little refresh up front. But anyways, let's go ahead and start with where the Sentra is made. Taking a look at the van, first character is the number three, indicating that the new Nissan Sentra is still built and assembled in Mexico. But touching up front here, Nissan V-Motion front grille with active grille shutters coming standard. So active grille shutters, meaning the grille shutters are gonna open and close dependent upon the engine cooling that is needed at any given time. So that's something I first saw on BMW, so I do like that feature. Of course, it's gonna be finished in either chrome or black. You guys can see there's chrome accents on our S trim level, but gloss black is available as well. Then taking a look at the headlights, halogen headlights coming standard for the S and S V trims, then LED headlights with LED daytime running lights for the SR trim, but either way, you still get the automatic feature like we have today. You still get automatic high beams for all trim levels as well. So if you have your high beams on at night and it senses a vehicle coming in the opposite direction, it's gonna automatically dim them back to low beams and when that vehicle is gone, it's gonna automatically bounce it back up the high beams for you there. So definitely a very nice feature there. But another thing that has changed for the 2024 Sentra is there is no longer any availability for fog lights down below. But I will say they were halogen, I believe anyway. So not a huge deal there, but I did want to mention it since it was a change for this model year. But anyways, that pretty much rounds out the front end. I do like the slight refresh. I think it still definitely looks good, but now let's go ahead and make our way to the side of the Sentra. All right, in some instances, you are around to the side of this one. Chrome belt line molding does come standard. You do have the floating roof line found on the C pillar there. Kind of hard to differentiate with a black exterior, but essentially it's that line that just separates the roof from the rest of the body more or less. Taking a look at the side mirrors, they are body colored power adjustable side mirrors. They will be gloss black for the SR trim, but then heated for the SV and SR and then integrated turd signals for the SR trim level only. We do have matte black door handles on our S trim level. So I do want to kind of emphasize that because on the SV and SR, you're going to get body colored door handles, of course. Then take a look down at the wheel setup, 16 inch steel wheels with covers coming on our S trim level, 16 inch aluminum alloys for the SV and then 18 inch aluminum alloys found on that SR trim level. But that pretty much rounds out the side profile. Let's now go ahead and make our way to the back. And something else to see around to the back of this one. First thing I actually want to start by mentioning is there is no shark fin antenna found on the roof of the center. That's something I typically find on like BMW and Mercedes Benz. I just think it's a very clean look. Obviously the radio still works and all that stuff, but there is no shark fin antenna. So interesting, right? Anyways, rear spoiler is going to come standard on the SR trim level only. If you do have a body colored or gloss black rear diffuser down below, gloss black is going to be on the SR trim level or available for the SR. Otherwise you're going to get body colored. So anyways, I think that always looks good on the center. So I do like that. And just below it all, you guys will find a single exhaust outlet tucked away. However, you will get a chrome tip for the SR trim, but since we don't have the SR, we don't have that with us here today. But nonetheless, I do believe you guys know what we have to do next. As always here is that exhaust clip. All right, so now since you are around to the back of the center, when it comes to opening that rear trunk, there is a button on the key fob. There is also a button kind of by the driver's side left knee. There is no button on the trunk itself for the SR trim level. I do want to say that. But once opened up, cargo capacity comes in at 14.3 cubic feet. If that was not enough space, there is a 6040 split, meaning the rear seats do fall down for a good bit of extra space. Then if you needed it, there is a cargo lighting back there as well. Grocer hooks are available. They don't come standard, but there is also a spare tire found underneath that cargo floor as opposed to the fix-a-flat in case anybody was curious. But so to make our way up to the rear leg room, that comes in at 34.7 inches. For reference, I'm in even six feet tall. This is how much space I had back there. I do want to say though, the backside of the front seats do have some give to them.  So that's kind of convenient. For your center armrest with cup holders does not come standard on our S trim level. Unfortunately, however, you can get them on the other trim levels. USB charging port also available, but we don't get that with our S trim level and typical compact car fashion, no rear ventilation. That's the same for the Corolla and the Civic as well, by the way. So that's a pretty standard thing, but then make our way up to the front seats, manually adjustable cloth seating for the S and SV trim levels, sport cloth with orange stitching for the SR trim level. And as you want to mention, there is an optional quilted leather available for the SV trim level only. So I'll put a picture of that on the screen. It definitely looks pretty darn good. Heated front seats that are gonna be optional on the SV and SR. Overall, believe it or not, as far as seat comfort goes, it was perfectly fine for me. I had absolutely no issues taking this thing around for a little test drive. So definitely no issues with seat comfort, even on our S trim level that we have today. But then take a look at the steering wheel and just tilt and telescoping. It's gonna be wrapped in urethane for the S trim level. However, it is gonna be leather wrapped then for the SV and SR. Another cool thing I like about the steering wheel is that it is a flat bottom and then if you wanted the heated steering wheel, that is gonna be available for the SV trim level. But now, let's go ahead and make our way to the startup. But let me start by showing you guys this fancy key here. Got your Nissan logo on the top, lock unlock and that button to pop the rear trunk there. But there is a remote start that comes on the SV and SR trims. That's gonna be on the key fob. But it is all keyless entry with a push button start for all trim levels. So all I'm going to do here is simply put my foot in the brake and press that engine start button located just in front of the shifter there. And so once started up, tachometers all the way to your left speedometer is on your right. There is a small digital display front and center to control what is on there. There are steering wheel mounting controls found on the left side of the steering wheel there.  Trip A, Trip B. There's actually a digital speedometer if you wanted to display that up there.  So pretty much everything you could possibly want on the digital portion of the gauges at least. But so to make our way to overall interior quality a power moonroof is gonna be optional on the SV and SR trim levels. Overhead sunglass holder though does come standard for all trim levels across the board. I like that. Dual zoom climate control for the SV and SR. Otherwise you're gonna get what you guys are looking at right now. It's just a manual dial basically.  Behind the shifter you got a little bit of storage there. You got dual cup holders and within the center armrest, a ton of space. Dang that is a lot of space. That's where the center really shines. Let me tell you guys, cause that is definitely more space than both the Civic and the Corolla. So if you got a lot of stuff this is gonna work out for you but honestly when it comes to interior quality it's not as bad as I expected. I gotta be honest. So you got a little bit of contrast stitching found in the doors. It feels like a soft touch material there. The elbow rest on the doors also perfectly fine as well. Nice soft touch material. I like the Audi-esque gauges found just below the infotainment screen. It gives it more of an upscale feel to it. Even surrounding the cup holders it's not finishing it just a matte black plastic. It's finished in kind of a texturized carbon fiber look kind of a pattern. So I like that as well surrounding the shifter you got a gloss black finish. And I know these things I'm saying aren't anything groundbreaking but for a car that only is going for $20,000 when you compare it to the competition that's actually not that bad I'm telling you guys. But now let's go ahead and make our way to the infotainment screen here.  However, that is bumped up for the SV and SR that puts you at an eight inch color touchscreen display. Either way you get Bluetooth and audio streaming. Either way you get Android, auto and Apple CarPlay. So if you have data on your phone that's free navigation displayed up there you gotta love that. You can check out your driving statistics up there along with your radio information. And so when it comes to the sound systems there are three of them in total. S-Trim level is gonna give you four speakers. SV and SR are going to give you a six speaker sound system and then there is an optional sound system available that is gonna be an eight speaker Bose sound system. So seeing as we have the S-Trim level with us here today we do that four speakers. So let's go ahead and turn on the radio and see what we got play in today and let's test out the clarity of this one. We both know what it's like to be. All right, a couple things with that four speaker sound system. I don't believe I've ever tested the four speaker sound system here in the Sentra. Bass impressed me and I've always said this. Nissan does an incredible job with the bass and their sound systems that they put in their vehicles. I didn't expect it to be that much bass. Having said that, clarity was like a four speaker sound system. I'll just put it that way, but the bass did really impress me. So for a four speaker sound system, it's not horrible, not the best clarity, but the bass was kind of impressive. But anyways, last thing I wanted to mention to you guys on the infotainment screen is when you do put the Sentra in reverse, you will find a rear view camera coming standard across the board, letting you know who or what is behind you, which is always is going to lead us into safety. And so first let me start by saying IIHS top safety pick. If you go with the SR-Trim level only because that's what gives you that LED lighting. Collagen lighting will never get an IIHS top safety pick, just saying. Front side, side current airbags do come standard, driver and passenger knee airbags as well.  That's pretty notable. I like that. And then if you were to go with either the SV or SR-Trims, you're going to get adaptive cruise control on top of all of that as well. So overall, when it comes to my final thoughts here of the century, great steering feel. I love the weight to it. It definitely immediately points you in the direction that you want to go. Excellent braking as well, specifically for the SV and SR, just okay braking for the S, but the fact that you can get 60 to zero on 114 feet at the car in this price range, that's a sports sedan number right there. So that's absolutely amazing. Excellent price. I think that is definitely what's going to get most people's attention on this thing. The fact that this thing starts under $21,000 is absolutely incredible, especially with all the inflation we are getting. So gotta love that. Very good looking car as well in my personal opinion. The two things I think I would change about the center here would be wireless Android Auto Apple CarPlay. That would certainly be nice. A lot of manufacturers are doing that right now. The wires are going to completely go away in the future I know. And LED headlights coming standard for all trim levels across the board. I think that is a necessity as well. Reason I say that is because both the Corolla and the Civic both give you LED headlights coming standard and that would also make the center and IHS top safety pick for every single trim level across the board as well. So that is something I would certainly add in the future. But let me know what you guys think of our Centra S in the comments section below. That is about it for this one you guys. Thank you so much for watching. Feel free to follow me on social media at the bottom of the screen if you want to see what's coming next on the channel before it gets to YouTube. Be sure to hit the subscribe and the bell notification button if you're new to car reviews because that is what we do here on this channel after all. Do appreciate you guys watching more than you know and I will see you guys all in the next video. Stay Gold.


Data has shown that 91% of product managers today came from non-product management background. So, which means that the majority of you guys might come from the same background, you might be a data scientist, you might be an artist, you might be a marketer, you might be a software engineer, all of us transition from a different discipline into product management. Now, there's also a small percentage, which is 9% of them, they went to Harvard and Stanford. For undergrad, they first dropped out of college, they joined Google, so those group people, we don't compare us with those lucky people in this video. But, if you're those 91%, you should understand that the majority of things you've done in the past is very relevant product management. For example, ask you this type of question, did you interact with customers? Did you understand what the needs, desire and pain points? If so, you have done voice-to-customer interview. But if you even know, you have done that before and you didn't know the right methodology how to do it.


have to go man. I'm sorry. You're gonna have to get your legs Let's just move along All right, let's see. Let's see if we can rip on his mom some more There is always in the middle of my day when my mom isn't there to cook the uh chicken for me a 15 minute sequence Where I will rush over Throw the video up on my phone Okay, oh he's claiming he watches it.  Hold on. I just got a weird text message I'm not watching it on stream.   This this never happened I just want to understand that's times three speed when you see it do the thing These these are enormous gaps in his arguments in the middle of his passion defense He's like I got distracted by my phone Hold on You do it these these gaps are huge. Yola. It's you're just watching him like Yeah, you were halfway through making your point, but okay This feels a little bit weird, but you do you I guess Let's do a prediction. Is he actually gonna come back to the point or is he just gonna move on? I think you're wrong. Oh, dude. I think I very clearly remember. I don't really know either way I've seen through this point on I have seen this part on wood Well, uh, maybe let's let's see I guess Hold on. I just got a weird text message.  I don't believe this potentially mean that it's on Watches himself not streaming How do I just save though by the way like I don't buy it this I can't believe it No, I don't I don't really buy it either, but like he's lying But this makes it even worse.    Yeah two minutes have passed between And Prove it he thinks this is an insanely pathetic lie Um, he thinks and his audience is somehow convinced by this. This is an argument This has nothing to do with the art like it's relevant Like whether or not you're watching it is not the problem That's what he thinks though.  So he's like, no, no, no, no, no What I did was while I was gone not streaming on my stream Why was pooping what I was doing was I actually pulled it up on my phone So that so that I could actually so I was watching it actually the whole time.  He's adding on certain commentary And he's like, what are they talking about? I'm adding so much to this. I don't understand Oh my god Imagine being like you played the video almost exclusively without any commentary for for nothing on the stream without without credit and go Yeah, well, I was watching it on my phone Like yeah, I was watching it with you guys That didn't how did you miss? I was watching with you guys and not adding any commentary. Wait, wasn't that the criticism? Oh, yeah, right. Yeah, you'd think that he could have picked that up, but never mind Why doesn't he even bother streaming? Why doesn't he just like send out a message? Hey, here's what I'm watching today. Let's all do Are his fans such simps that they just want to watch the same thing he's watching at the same time The the parasocial thing gets pushed real high up with these sorts of streamers And they will literally be like you want to hang out with me watching videos with you friend They'll get that sense and they will just be hooked in there's no other way to explain how people be watching his full streams every day There is just nothing else to hang out with this on every day. Yeah, you're like, oh, I can't wait to tune in see what he's up to Mahler, I have a confession to make. Oh, no I feel like the time is right and I feel like Hassan is the He is the I guess you get the vehicle With which this confession It is so this sounds serious I have to because I drink a lot of you know water and I I take of my my Take secret pee breaks, don't you and I when I know they're not secret Uh, I have them often I I drink a lot of water. So I pee a lot I I don't when I'm when I'm peeing I don't bring my phone with me And then pull up the youtube video that we're responding to on efab and watch it while while I'm peeing What what I do it will in my mind. Well, let me explain. I know But here's the thing so in my mind what my thought process was Was that I would just just focus on peeing Efficiently so that I could come back quicker. I didn't think of like Hands aren't really doing that much while I'm peeing. I could be on my phone There's no watching Did does your mother facilitate any of this Mom well, sometimes I have to Well Does she I think you're on something because you know when razz goes to the bathroom, you know He's got his hands full, right? He can't hold the phone and pee and look at him But if but if only his mom Make it stop no Well, I bet she holds the phone. Do you you're at pervert? I don't know what you're talking about that I'm okay. She's just holding the phone. Well, I was gonna say that I because I I'm like I often forget my own password all the time But so she wrote a little sticky note on the back of the phone that has my password on it So I always thanks mom for doing that for me four digits is a lot I can't you know The son and I we can't quite you know this remember No one is really hard for me to memorize. I'm shocked. I did it there But uh, yeah Well, there we are Well, look don't you feel better coming clean, right? Yeah, you'll be able to sleep tonight. Yeah, I feel like I feel like this weight has been taken off my shoulders Like I feel like uh, I think you owe a thank you to his son Thank you so much. His son you're inspiring you I'm so priceless man. Look what you've done Watching it.    He's just admitted It's like I would have come in and said something if I had something to say It's like that's not good.  Who is buying this nonsense? And I guess that's a really frustrating part of the whole thing as well Is like jay actually put work into that he like wrote a script Uh produced this big video did all the research the voices the editing. It's like that's a lot of work And what what were you doing? You weren't even watching you were just elsewhere cooking the nuggies Yeah, that's right. He had to sort out his nuggies. You're right. Did jay build that house though? Yeah House's content. Okay. Oh look look in the chat from his own chat I always wondered how you kept up with videos off cam.    You gotta go to the loo. You know nature's calling Um be back in just a moment Hang right in there and then I would leave And then I would focus on getting my business done as fast as I could Finish it all with a good wet wipe as we all should and then I'd come back I'm like, hey, that went well. Thanks for asking Did you put the lid down flush clothes every door in the house? Lock it triple lock it put the bolt back on Put the caution tape and the x again. Yeah the times where I left the bioshock or laska streams I literally just found a place the character to look at that looked kind of neat If there was like a fire or anything just moving and I'd be like, right I'll be back in five minutes or 10 or whatever. It's really wet wipe or bad Just use toilet paper. No, no you use toilet you finish with a wet wipe Always finish with a wet wipe you want to keep it You don't you want to keep it nice back there?   Oh, okay The quality improves when he leaves the room. I agree. We get an uninterrupted jaxi video. This is Hassan randomly going. Um Um Why is there some bathrooms next to each other? That's not a that's not a bathroom. I mean, it has the word room in it. I I don't you can you can just hear Bub off to the side of the screen like that's a toilet, honey. That's not a bathroom Bathroom has the word room in it. It's a room Oh, we haven't dumbed this language down enough for you It's extremely weird that people have been conditioned to believe that because you are an entertainer that you need to conform To some type of guidelines have set in their own mind Um, well, so this is the great part. It's actually conforming with just copyright more like Well See, that's that's the thing I feel like I would totally try to appeal to that at some point But I would just first and foremost be like, don't you think this is just really lame and like just unethical Yeah, don't you think you should set your bar a little higher for your standard of content? You know, don't you think that maybe you shouldn't just you know leave? Like what if yeah, what if someone what what if you bought a ticket to Uh Who's a famous performer? Who's the guy with the tigers? Um, I don't know this whole map Siskel and yeah, I do too But we're gonna we're gonna veer off of the tigers and we're gonna go to david copperfield Imagine you bought tickets to see david copperfield and he was he was in the middle of a magic trick And then he just he just fucks off for 15 minutes It's just everyone's just sort of left there like Everyone's like, oh, I guess no, no, no, no Hulls out like a tv screen and he plays david blaine performing a magic trick and he walks off state No, he says there was a play a nuggies watching it with you You just notice that he's appeared next to you and yeah, yeah, yeah, you're watching david blaine That's the trick or chris angel mind Um, but yeah, so it's extremely to see that people have been conditioned to believe that because you're an entertainer You have to conform to some type of guideline that they've said in their own mind That would be a relevant comment in some other discussion. Not this one though well I mean, it's weird that people have been conditioned to believe that entertainers should follow the laws like everyone else I mean, I don't know why you would Well, that's a repressive capitalist constructs like entertainers do have to follow certain rules Like stuff to do with copyright law and then of course like if you're making a film There are rules in terms of how long people are allowed to work union pain stuff like that Does that not matter? Well, how about how about this history motherfucker or mf? Um, I think it's extremely weird that people in hasan's audience have been conditioned to believe that stealing content is content Yeah, right. Yeah, well considering. Yeah What is it? Is it weird that hasan thinks destiny should follow his guidelines of saying the n word? I don't know Can you please make the stream black instead of leaving comments leaving the comments of while you read text?  What does that mean?  He pulls up their name and is like pulls up their icon Whenever they say something that he disagrees with I will say It's pretty important This was him looking at the history to see if they were more specific in what they meant by you did this So he's he's looking to find out what they meant and obviously they've only said you've done this to yourself, which by the way true You he brought this upon himself by being such as like zero transformative reactor and he's like frustrated that it's happening It's like you did it to yourself, mate. That'd be nice if youtube had that same ability to do that Yeah, that's a great feature right there.     He did If if Hassan ever gets like arrested someone's gonna have to defend him in court Like legally and they're gonna have to like sassan. No, no, no, no, no, no, no, no, stop English isn't his first language. Okay, you don't understand. He doesn't mean any of this. That's a good name Excellent man Nobody in the seat.


Hello friends and how are you all today? The question says solve the following differential equation. Here we have the differential equation as dx square plus xy into dy is equal to x square plus y square into dx. That is, x square plus xy into dy is equal to x square plus y square into dx. Or we can write it as dy by dx is equal to x square plus y square upon x square plus xy. Now here let us put y equal to v into x. So this implies dy by dx is equal to v plus x dy by dx. So on substituting these two in here we have v plus x dv by dx square plus vx the whole square upon x square plus x into v.     Now further we can write it as here we have dv so taking these terms left inside we have 1 plus v upon 1 minus v dv x by x. Integrating both the sides let us integrate it as 2 minus 1 minus v upon 1 minus v dv equal to log A1.  Solving it we have this v minus substituting back the value of v or before doing that let us solve it we have minus v. Now here let us take our constant also as log so as to simplify. So we have 2 log 1 minus v minus log c1 equal to v it can be written as log v whole square minus log x minus log c1 is equal to v. So we have log 1 minus v square 1 minus v the whole square into x into c is equal to v. So we have log x into c 1 minus v the whole square equal to v or we can write it as cx 1 minus v the whole square is equal to e raised to the power minus v. Now putting back the value of v as y upon x we have 1 minus y upon x the whole square equal to x minus y upon we have cx x minus v the whole square upon x square equal to e raised to the power minus y by x. Simplifying it a little more we have minus y the whole square upon x equal to e raised to the power minus y upon x or we have now the answer as c into x minus y the whole square equal to x e raised to the power minus y by x where x is not equal to 0. Right so this completes the session hope you understood it well enjoyed it to have a nice day.


So this lecture is part of an online algebraic geometry course on schemes and will be examples of Picard group of a scheme X So you remember that for reasonable schemes the Picard group is the same as the group of Cartier divisors Which is the same as the group of vay divisors. So we want X to be I guess notarian integral and Locally factorial Which will automatically be true because we're just going to take X to be non singular So what I'm going to do is give a sort of survey without proofs of some examples of the Picard group Most of these examples that I'm about to give take a fair amount of effort to actually prove Picard group of something if you're given something you can usually work out its Picard group But it usually takes a fair amount of effort So some of the earliest examples were due to Gauss in his book disquisitione is arithmetic I so what Gauss did was he worked out things like the Picard group of Picard group of I guess the spectrum of our but our is the integers of an imaginary quadratic field Actually Gauss didn't state his results in terms of imaginary quadratic fields or real quadratic fields He stated them in terms of binary quadratic forms, but there's a sort of easy dictionary that allows you to go from one to the other So for example, if we take R to be Z root minus five in the Picard group We've sort of more or less seen was is of order two and It's quite difficult Understanding how the Picard group behaves for example Gauss found that if R is Z one plus root minus one six three over two then the Picard group is just trivial and Gauss asked if the if this was the largest Imaginary quadratic field which had Picard number zero or I guess Gauss didn't actually talk about Picard number because Picard only came a century later Gauss talked about the class number So this is the famous class number one problem Are there imaginary quadratic fields beyond this with class number one and this is finally solved by Stark and Haigner and Baker There's a very complicated history about this that Haigner sort of almost solved it But there was a minor gap in his proof So his his paper was ignored for several years until Stark pointed out it was easily repairable. So that's You know understanding the Picard group of imaginary quadratic fields is quite tricky There's a if you talk about real quadratic fields again, you can work out the Picard group of these and Again, there are some basic open problems. So we can ask for real quadratic fields. Are there infinitely many with Picard group of order one and As far as I know, this is an unsolved question. In fact, it's an unsolved question about whether there are an infinite number of Imaginary quadratic fields of any degree with class number one There's theoretical and numerical evidence that sort of suggests the answer is yes, but no one's been able to prove it yet So The work of CUMMA on Fermat's last theorem and reciprocity laws also is essentially about Picard groups so CUMMA worked out the Picard groups of Of the spectrum of R where R is a cyclotomic field. So Z of zeta Where zeta is a root of X to the p minus one over X minus one So these are the famous cyclotomic fields and What CUMMA one reason CUMMA was interested in them is that he showed that if P does not divide the order of the Picard group of the cyclotomic field with some prime Then Fermat's last theorem is true for the exponent P And Yeah, until Wiles came along. This was the basis of the The best results we had about Fermat's last theorem For example, he showed that the Picard group of R Is equal to one if P is less than 23 but the Picard group of R is Ciclic order three For P equals 23 So this is the first case when it's non-trivial and there are cases When P does divide the order of the Picard group So he found the first case when this happens is the Picard group of R was Z over 37 Z for P equals 37 And the Picard group can get quite spectacularly large for example if P is 257 Then the order of the Picard group of cyclotomic fields Is given by the following number you get five four five two four eight five oh two three Four one nine and I have to continue two three oh eight seven three two two three eight two two six two five five five And I haven't finished yet nine six four four six one four seven six four two two eight five four six six two one six eight Three two one okay, so it's got about well over 50 digits. So so There's a theorem of Minkowski that says the Picard group of The ring of integers of an algebraic number field is always finite but as you see from this finite doesn't mean small Next we can look at Picard groups of Curves C so C is going to be a projective non-singular curve Over the complex numbers so non-singular Projective curves over the complex numbers are more or less the same as compact Riemann surfaces So analysts work with Riemann surfaces and geometers work with non-singular projective curves and the Picard group Of this we've worked out in two cases. First of all the Picard group of the projective line We've seen as just z and we saw that the Picard group of an elliptic curve Fits into an extension nought goes to the elliptic curve goes to the Picard group goes to z Goes to zero where this map is the degree And this is the connected component of the of the Picard group So in general the Picard group is described by the Arbel Jacobi theorem And it depends on the genus Of c and you remember the genus of c is the number of handles So c is a sphere the genus is zero And if c looks like a torus the genus is one and if c There's two handles like this. It is genus two and so on So the projective line and elliptic curves are the case of genus zero and one So for higher genus And it looks like this first of all the space of holomorphic one forms As dimension g As a complex vector space a holomorphic one form is something that looks in local coordinates like f of z D z where f is a is a holomorphic function And what we can do is we can pick some point c nought in c And then we try and define a map from the curve c to the dual Of the space of one forms So one forms might be denoted by omega and what we can try doing is we can map a point c to the integral from c nought to c of omega So this is linear in omega and here we're just integrating from c nought to c. Well There's a little bit of a problem because there may be more than one path from c nought to c. Well, if the paths are homotopic then that's okay because by Cauchy's theorem We can just move them around But there may be lots of paths from c nought to c that are not homotopic to each other So this is not actually well defined map Instead what we get Is a map from the curve to the dual Of the space of holomorphic one forms Except we've got to quotient it out by The first homology group H1 of c with coefficients in z So the first homology group kind of describes the different homotopy Group of paths So these you can think of as being essentially described paths From c nought to c up to homotopy or some homology or something like that Um So, um This thing here This group here on the top Is a complex vector space of complex dimension g On the other hand this um first homology group Isomorphic to z to the two g And the quotient is something called a complex torus So as a topological space Is isomorphic to a two g dimensional vector space quotient it out by two g um Free z module so it's isomorphic to a product of two g copies of a circle um so um So we we get a well-defined map from c To this space here, um, which depends on The the choice Of c nought and we can extend it to divisors So we get a map from um divisors To this space um Where we take one forms Dual and quotient it out by h one Um, and we can restrict it to degree zero divisors And it turns out to be well-defined modulo principle divisors And this map here is an isomorphism This is the arbel jacobi theorem. So arbel proved It's injective And jacobi Proved that it's onto So, um, this gives us Um a description of the picard group. So this group here is the famous jacobian of the curve And the arbel jacobi theorem just says we've got a map taking nought to the to j which is the jacobian To the picard group to z To zero where this map here is just the degree um, so in the special case of The projective line the jacobian is just zero because there aren't any Holographic differentials on the projective line apart from zero and in the special case of elliptic curves. This is just the map from the Elliptic curve to the Picard variety and in the case of an elliptic curve it's isomorphic to its own jacobian Um for curves of genus greater than one the jacobian has dimension greater than one So what we do is we end up with the curve as a sub variety of the jacobian um so, um, this works for um Curves over the complex numbers Um, you see where we're doing complex contour integration in order to define this map um, they extended um to curves over fields Of characteristic p greater than zero So he managed to find an analog of the jacobian variety only he had to do it algebraically and his his original constructions rather complicated In fact, it was so complicated. It wasn't even obvious that Waze jacobian was a projective variety. Although this was later proved by chow um, so These jacobians turn out to be projective varieties. This isn't quite obvious from the construction here, but it's not too difficult to show And projective varieties that are also abelian groups are called abelian varieties and are Notoriously difficult to handle um So next we're going to look at some examples of picard groups of surfaces um, so we've already done the projective plane That's just got a picard group, which is the integers. So let's look at a degree two Quadric in p3 so it might be defined by w x equals y z and if we set um um So so in in in real space, this ends up looking like a sort of hyperboloid of revolution So we get surfaces that kind of look a bit like this um Now these surfaces are easy to deal with because they're isomorphic to product of two copies of p1 And you can see this because if you take coordinates ab and the first p1 And cd and second p1 you can map this to a c ad bc bd in p3 and if this is W x y z you can check that w z equals x y. So I suppose it's slightly different from that but never mind um, and the picard group of this Turns out to be just z times z and we get um, you can sort of see this Geometrically because if you think of this as being a product of the first p1 and the second p1 and the first um p1 gives you a device which gives you the first c and the second p1 gives you the Another device in which which gives you the second z Um incidentally, it's not always true that the picard um group of a product is the product of the picard groups Of the variety so we can ask suppose we've got a picard group of x And a picard group of y We can map this to the picard group of x times y And ask is this an isomorphism?  We could just take y to be empty um, it need not be surjective And again, we could just take say x to be p1 with picard group z and y to be two points Then you can easily check that The Picard group of y is just trivial So this side is just c and this side is z plus c Well, you might sort of fuss about this I mean the first example is definitely cheating by choosing an empty variety in the second example Well, this isn't connected. So you might think maybe if it's connected then Maybe something would happen But there's another example with where it's not surjective You could just take x equals y to be say a curve of genus greater than zero And then what happens is if you look at x times y and draw it as x times y You can get several sorts of devices. First of all, you can get these vertical devices and you can get these obvious horizontal devices So that gives you a z for the vertical devices and a At least a z for the horizontal ones, but you can also get Diagonal devices So you can just have the point x equals y in x times y and that gives you more devices Which don't come from products of the Picard group of x and y Well, they do if x and y have genus zero, but they they don't in general Next we can look at um a degree three surface in p3 And in this case the Picard group Turns out to be z to the seven And I'll just explain very roughly Where this seven comes from Well, the degree three surface is the famous cubic surface Which is isomorphic to a projective plane blown up at six points and the projective plane has Picard group z and blowing up at a point means you replace the point by a copy Of p1 roughly speaking and this p1 gives you a new divisor And if you analyze what's going on it gives you a new factor of z In the Picard group. So every time you blow up a point of a surface You increase the Picard group by a factor of z So so a cubic surface is obtained by blowing up p2 and six points So so the Picard group is a free group on seven generators And it's kind of obvious you can carry on blowing up points as much as you like and obtain Surfaces whose Picard group is a free abelian group of rank as large as you like um Next we can find a surface with the Picard group sick click Of some finite order And this is easy We just take um The projected plane p2. Let's take a non-singular Curve of degree D let's call this curve c and take our surface s to be p2 with c removed Then um, we've got a map from the Picard group of p2 to the Picard group of s so If you take any divisor in p2 Well, it may have a component in s and if it's got a component in s you can just sort of shift it a bit to make it not so So it may have a component in c and if it's in c you can just shift it a bit to be not in c And check this is well defined So we get a map from Picard of p2 to Picard group of s and this is obviously onto because if you've got a divisor in s If you've got an irreducible divisor in s you can just Take its completion and get a divisor in p2. So this group is onto um the kernel is just generated By the curve c it's pretty obvious if you take the curve c in here then it's becomes trivial in in in s so um The image of the curve c Is just d times the divisor here because that's the degree Of of c. So we get a map z goes to z Goes to picard group of s Goes to zero. So the picard group of s Is just z over dz um I should say I've been kind of cheating with these examples of surfaces because Every single example of a surface I've calculated the picard group of is actually a rational surface That means it's birational to the projective plane and surfaces that are birational for projective plane It's particularly easy to calculate their picard groups You may have noticed that the picard group was always a discrete group and didn't have some sort of continuous component Similar to the Jacobian of a curve


Everybody Matt here for latent sports cards ripping two boxes of 2022 Panini select football Asia T-Mall Edition. These are for Kevin B Good luck Kevin St. Juan dragon scale Dawson Knox dragon scale lamb Jack dragon scale Rookie patch auto red wave Kyle Hamilton. That's an awesome looking card. Glad I pulled this and not Sam True Ravens fan here. There you go. Kevin.  I don't do it for your boxes. Appreciate it. Kevin. We'll get these right out to you


The Floyd County Sheriff's Office recently made a request for the public's help in solving several theft cases and the community answered. The department arrested 35-year-old Cory Pitts following several tips from the community on January 27th. So a couple of the cases that we highlighted earlier in the week that we were investigating, one of those cases in the David community we really got some good tips and information on. Some of it came about by witnesses or neighbors who might have seen a vehicle or seen something. That led the deputies in one direction and then also we were able to receive some anonymous tips, some text of tips through the deputy's in-car computers where people were giving information. Some person said he had done somebody tried to sell them something that matched the description of what we were looking for. So one tip or one bit of information led to something else and over a period of about 24 hours they were able to go to several different locations and recover all this property. At Audiology Associates of Prestonsburg you can live your life the way you want and find the freedom of better hearing. With 40 years of being in the hearing care industry you'll experience patient care that is specific to you with exceptional follow-up care that ensures your hearing and balance needs are being met. Audiology Associates at 1428 Northlake Drive in Prestonsburg. Pitts is being charged with theft by unlawful taking over $10,000 and in the citation Pitts stated he had stole the items for drugs. Obviously it's important to the victim and people who lost all this property. You know you're talking about some money when you talk to ATV side by side $30,000 worth of motorcycle that some little kid or maybe some adult rides you know $2,000, $3,000. You start adding up all the fishing equipment, all the camping equipment and tools that people work with. That's a lot of money for someone to lose and for them to be able to get that back. Really just because the neighbor helped them give some information or some anonymous tips that we received those people are most appreciative as it comes out of their pocket. So they're obviously very appreciative and we were too. To make a tip using the text to tip line, text<PHONE_NUMBER>. Reporting for Mountain Top News, I'm Brianna Robinson.


Traditionally, biobutanol is produced with the abeak, acetone-butanol ethanol, process using clostridium species to ferment sugars from biomass. However, the root is associated with some disadvantages such as low butanol yield and byproduct formation, acetone and ethanol. On the other hand, butanol can be directly produced from ethanol through aldol condensation over metal oxides slash hydroxyapatite catalysts. This paper suggests that the chemical conversion root is more preferable than the abe process, because the reaction proceeds more quickly compared to the fermentation root and fewer steps are required to get to the product. This article was authored by Bin Daba, Aichi Anzu, and S. Marks.


This study compared the risk of developing diabetes according to different definitions of fatty liver disease, FLD. It found that people with metabolic dysfunction associated fatty liver disease, MAFLD, non-alcoholic fatty liver disease, NAFLD, or both had higher risks of developing diabetes than those with neither condition. Additionally, the presence of excessive alcohol consumption, hepatitis B virus, HBV, or hepatitis C virus, HCV, infection, and metabolic dysfunction all increased the risk of developing diabetes. People with MAFLD alone had a greater increase in diabetes risk than those with NAFLD alone or no FLD. This article was authored by Sohee Park, Jeon Park, Sohee and Kwon, and others.