Very unhappy users continue to report screen time issues where the settings either don't stick or they ought to revert to the previous setting without any warning. Apple says that it's aware of the issue. What were the sort of things that you dealt with when they were younger? As a parent of 20 and 18 year olds, I am allowed to judge other parents, which I will do now. And listen, you got them to adulthood, you deserve it. I feel like that's a little odd to be like remotely settings, you know, screen time settings on your 16 year olds iPhone. I mean, I just want to admit I am judging because at some point they're gonna just have to figure it out themselves. I have one more thing to say on this, the article said, this was my favorite line in the article, it says, this can go unnoticed for days or weeks and kids don't always report back when they get extra time for games and social media. And it was like, yeah, they never report back.


So, I said my name is Sergei, so last week I was at the spring in Barcelona, actually that's my conference, which is the best, actually not the best only, but the only spring conference in Europe, right, and the biggest one. So Michael, one of the organizers of the Jack just asked me to deliver a talk here because I was here anyway for the Box Day. So, I didn't have anything ready to prepare, but at least we get to do a quick introduction to the new generation of spring applications. So how many of you use Spring Boot here? Spring Boot 2, some of you, Spring 5, none of you, weird, all right, so there have been a lot of efforts in the new releases of Spring, not only Spring 5, but also Spring Boot 2, which came out a couple of months ago, and most of the efforts have gone towards the reactive support in the core also, but in Spring Boot, but also in the entire portfolio. So that applies to spring security, spring data, spring cloud, spring integration and many other projects in the portfolio, right, because we're basically changing the programming model, right, so from an imperative programming style into a more declarative programming style, right, so we're going to see in the next slides, right, so what Spring 5 and Spring Boot 2 basically give us, right, as this new generation of applications. So going to lead you through a quick introduction on the new features, and then I'm going to try to start with the current model of programming, like traditional Spring MVC, and we're going to move it to a WebFlux model, which is what Spring 5 is introducing, right, if that's going to be in a demo. So we're going to basically move from the blocking kind of operations and basically models, right, because we have been using this model for a long time, right, so usually we had web applications with traditional server containers using the server APIs, right, interacting with data stores which were blocking, right, at the end of the day every single request got a new thread of execution, so we're basically having a bunch of threads, right, a thread pool that we shared, right, but this is not scaling anymore, right, so if we take a look at other languages like Node.js, Node.js had the concept of the event loop, and we basically had non-blocking operations and basically reusing the same threads for the different tasks that we had, so it was more an event-driven model, right, so it's not like a blocking model, but we're going to move into a non-blocking model, and this has a lot of benefits, right, so we need just a small thread pool, so we don't need a different thread for every single request, we can live with a small number of threads, and basically we'll be processing events on those threads, right, so we're not going to block on those threads, so the important thing here is to be non-blocking from end to end, so if you have a database which is blocking, if you're using JPA, if you're using a relational database and there's no asynchronous driver, well, you're going to block anyway, right, so actually we should be blocking from all the way down, so take a look at the current model, right, so the current model where we have the servlet API is basically based on a servlet container, so we use Tunket, we use Jetty, we use Undertow, we use any servlet container, on top of that we use the servlet API, right, so we all know a servlet API and we basically use frameworks that rely on the servlet API, and if you're using a spring, you probably use a spring MVC, maybe you're using Jersey or any other framework, but at the end of the day this is a blocking model, so we're going to move into a non-blocking or reactive model, so now we're not going to rely on the servlet API because it's actually a blocking, but we're going to use a container like NETI or any of the servlet 3.1 containers which support async operations already, so on top of that, I said we're not going to use the servlet API because it's blocking, but we're going to have some adapters which will use the reactive stream specification, so we're going to see that the project reactor which is part of the portfolio of a spring is an implementation of the reactive stream specification, so spring 5 introduces a new web framework which is called WebFlex, so it's important to understand that this is not replacing what we had, it's the spring MVC framework, so both models are valid options, it just depends on the use case, but we have both frameworks side by side, so we don't have to question whether we should use a spring MVC or a spring WebFlex, well both are options and depending on what you need you might be using one or another one, so if you're using a relational database which is blocking and you have blocking operations on the way down, so maybe you'll be using a spring MVC, if you have just non-blocking operations all the way down and you are using MongoDB or Redis or Cassandra and you have a non-blocking reactive driver, then you might be using a WebFlex framework, so we have actually these two different stacks that make sense depending on the use case that you have, so reactive spring came out not to be fast or faster, but to scale better, so if you take your traditional spring MVC application and try to migrate it to WebFlex, you'll see that you won't get any more performance or actually any more speed, so the speed will be the same, so the reactive support, the reactive web framework is not meant to be faster than a spring MVC, but more scalable than a spring MVC, so when you have slow consumers or devices like a mobile phone or application that might have a slow connection or you have slow producers as well, so that's basically where you're going to get more performance, so basically it's meant for scalability and not speed, so everything will be non-blocking as we have seen, and we're going to focus on events, so we're going to have events that we'll be subscribing on and we're going to react on those events, so that spring MVC is also an option, it's not that we have to use the WebFlex, the new framework that comes in spring five, so we have actually these two stacks, so spring five is using the project reactor underneath, that's one of the building blocks of a spring five, and now a spring boot as well, and every single project that uses all the reactive support, so the project reactor is basically an implementation of the reactive streams specification, and we have actually different implementations, it just happens that we have one in the portfolio set, this is not part of a spring, it's its own project, but the spring is using it underneath, so the two main types that the project reactor has are basically the mono and the flux, the mono specifies one single value, so that's saying well we have something right, and this something is defined as a type, parametrized, and the flux are basically zero or more values, so this is basically three more values, which is unbounded in time, so we don't know when they are going to come, but we are going to have a stream of values and we can react on those values, so all these types are going to be used everywhere in the portfolio, we can use them in the web layer, in the data access layer, and in many other projects like the spring cloud and so on in the spring portfolio, so we take a look at the WebFlex framework, which is a set, the new framework that the spring 5 introduces, which comes into flavors, so the first one is the annotation-based flavor and the other one is the functional flavor, so how many of you use the spring and vc again? Some of you? All right, so we are used to the traditional controllers, like the at controllers, rest controllers with the request mappings and so on, you don't have to relearn the framework, you can reuse the concepts that you basically know and use the reactive types on those controllers, so we are basically adopting the same programming model that we know, because well, even if this is a new programming style, we don't have to give away all our knowledge, so if you take a look at what happens underneath, the runtime is completely different, so we see that, well, we go asynchronous, non-blocking, compared to the blocking synchronous server API, but the programming style will be kind of the same, so if you want to get started with the WebFlex framework, maybe the annotation-based configuration might be the easiest way to do it, but if you are more a functional guy, we have also the functional support, so in here, we see an alternative to the controllers, which is basically a way to have control over how to map the request into a handler, so what we can do is to basically create the router functions and define that we have maybe, get request, and we pass this request to a handler, so we can inline the processing of this request, so you can define a lambda expression in there, or you can use method references that will go to a method to process those requests, so that's basically what we have seen, that's basically the WebFlex framework, so either the annotation-based or the more functional way to configure the WebPlayer, and well, if you take a look at the handlers, those handlers will return a mono, so we can return Flux as well, so we'll be using Flux and Mono at everywhere where we deal with reactive types, so we're going to see that in the demo. So Spring 5 also provides reactive WebSockets, so WebSockets have been supported in Spring 4 a long time since Spring 4, and actually we had support for raw WebSockets and also for sub-protocols like Stomp over WebSockets, so Spring 5 introduces their reactive support for WebSockets, we don't have a sub-protocol available for reactive WebSockets, but at least we can deal with the messages coming in, coming out, reactively, using Monos and Fluxes as well, so how many of you use WebSockets here? I've tried WebSockets, some of you. Another place where we have reactive support is Spring Data. Spring Data is the umbrella project to all the data access technologies, so it could be JPA, but also RedEase, Cassandra, Elasticsearch, Solar, so there are some community-driven projects and some other projects maintained by Pivotal. So the new Spring Data K release is basically having the reactive support, so that means that we'll have reactive templates, so the templates are these APIs like the Mongo template and RedEase template that have these one liner methods to basically interact with the database, and then we have also a way to create reactive repositories, so basically you can create the interfaces and get these instant repositories for reactive non-blocking repositories. So in terms of the reactive protocols, so currently we have MongoDB, Cassandra, RedEase, and Couchface, so of course JPA is blocking, so there's no way to have a reactive repository for JPA, so there are some works towards the JDBC asynchronous drivers, but that's, the work is ongoing, so there's no support for creating instant repositories for relational databases currently, but at least we'll have support for multiple non-SQL data stores. Spring Security is also another project that has embraced reactive, because if we take a look at how Spring Security worked previously, for a web request we usually had a servlet filter, so the servlet filter in accepted the request, it applied the authorization and authentication before delegating to our controllers, so now we don't have or we don't use the servlet API anymore, so that model is gone, we cannot use it, because we don't rely on the servlet API, so having or placing a servlet filter in before the controllers is not an option anymore, so Spring Security has done a lot of work to be able to integrate with a webflux framework, but also for the reactive method security, because previously the security context was stored as a third local variable, and we know that in a reactive environment we'll be reusing those threats, so we won't have a threat per request, so that's gone, that model is gone, so that means that what we had before, which was storing the security context in the threat local, is not a valid option anymore, so Spring Security is now using the context from the project reactor that actually works with a reactive environment, so Spring Security 5 can protect any request that is handled by webflux, any request which is reactive that goes into any method in your application, and also has some nice testing support, but if we take a look at the way to configure Spring Security in a reactive environment, that hasn't changed much from the configuration we had, it just happens that, well, again, we reuse the knowledge we have, but how everything works underneath completely changes, so this is kind of transparent to us, so internally we wouldn't use any cell filter, we wouldn't use any threat local, so everything has changed quite a lot. In terms of messaging, and especially when you build microservices, there's a project called the Spring Cloud Stream, so Spring Cloud Stream will help you deal with microservice communication by using any messaging broker, this could be Kafka, this could be RabbitMQ, but the main goal is that we have different microservices, and we kind of extract the messaging layer, and we send messages and consume messages from those microservices, basically abstracting from the broker we have in between. So, a Spring Cloud Stream basically uses Spring Integration underneath to provide this connectivity to different brokers, the set could be RabbitMQ or Kafka, and it also has our integration with the reactive support, so anyone used Spring Cloud Stream before? No? All right, so I'm not going to go in depth with that, but basically what we'll have is a channel, that's where we can get messages from, and this can be defined as a flux, so this is an unbound message stream, so basically consume messages as they come, and we can also send and publish messages to another channel that will be consumed maybe by another microservice. So Spring Boot Actuator has also had quite a lot of work in the Spring Boot too, anyone familiar with the Actuator? Some of you? So the Actuator exposes different endpoints, so you can know about the health of your application, or you know about the environment variables of your application, or the beans that are in the application context, and many other things. So now the Actuator works for Spring MVC, for web flags, or even with Jersey, so regardless of the web framework you use, the Actuator will give you all this information and metrics as well that will give you a lot of information at runtime. If you want to extend Spring Boot Actuator you can also do it easily, so in Spring Boot 2 there have been some annotations introduced so you can extend the Actuator endpoints and expose your own endpoints. One of the main changes in Spring Boot 2 and in the Actuator is that micrometer has been introduced, so micrometer is basically like SL4J, but for metrics, in SL4J we have different login frameworks, but we want FSAT on top of those frameworks that abstracts us from what we have underneath. So micrometer is basically the same thing, but for metrics. So we didn't care whether we used for myth use, or Netflix Atlas, or Influx, or Datadoc, so we want to have a consistent way or an abstraction on top of that, so we can use the same API, but just by changing the implementation we can actually use for myth use, or Atlas, or Influx, which is really nice. So previously in Spring Boot 1, if you use the Actuator metrics, we had kind of unidimensional metrics, so that means that, well, you could have the number of requests, for instance, but then if you wanted to drill down a little bit and you wanted to get only the GET request but not the POST request, you had to create yet another metric, so maybe HTTP request dot GET or dot POST.  So it was kind of unidimensional, so micrometer is basically giving you a multidimensional perspective on the metrics. So we're going to add tags to the metrics, so you can analyze these metrics by different tags. We're going to see an example in a second. Another thing that has been introduced, which is getting a lot of traction, is the Kotlin support. How many of you used Kotlin? Heard about it. So Kotlin has a lot of traction in the Android community. So Kotlin is an official language in Android, so maybe in Gradle as well, a little bit of traction. Spring 5 is also embracing Kotlin. So now when you go to the initializer, you can select Kotlin as a language. We have Java, we have Kotlin, we have Ruby, and it's basically a JVM language, but it's more concise, statically typed, and you have more elegant code, more concise. So I recommend you to check out Kotlin and the integration. So for now, we have Spring framework, which supports Kotlin, Spring Buddha as well, Spring data, and the reactor project. So set, when you go to the initializer, which is basically how we start a Spring project, you can select Kotlin as a language. So this will create already a Gradle or a Maven project with Kotlin. I'll take a look at some examples of basic things in Kotlin. So if you take a look at the main class, like a speaker. So we see that what we don't have to use or define the getters, setters, and this is actually more concise. So we define, this is like an immutable class. So we define the different properties of the class, like as ID, the name, the last name, and notice how the last name can be optional. So this is basically defined in a constructor with three parameters. And in order to avoid having more than one constructor, we are going to define one of these parameters as being optional. So this is a more concise way to define our classes. So take a look at the REST controller. So the REST controller, this is just a Spring MVC controller, basically defines the speaker repository as a dependency. And notice how we have these concise methods or these concise mappings, like the get mapping, where we define a function, which is the find all. And the type of the return of this function is basically taken from what the repository find all will return. So we don't have to explicitly define the type. So that's going to be inferred. And the same applies to the second mapping. So this is concise. We use the path variable notation, and we basically delegate to the repository find by name. HTTP 2. So using or enabling HTTP 2 in Spring Boot 2 is quite easy. So you just need to enable the property server.htp2 enabled in the application of properties. But that requires something else depending on the server container that we use. So for instance, on Tomcat, if you use Tomcat 9 with the JDK 9, everything works fine. Because the JDK 9 is what has the HTTP 2 support. But if you're using the JDK 8, then you'll have to use a library. So you can pass where the library is as a JVM argument. The same applies to Jetty. So it requires another library, which you have to pass. And in terms of undertow, everything will work with the JDK 8. So there's nothing to be configured. But if you need to use Tomcat, then either you have to use Tomcat 9 with JDK 9 or pass the library. But it's quite straightforward to enable the HTTP 2 support. All right. Any questions so far? No? So how much time do we have? Ten minutes. Ten minutes only. Okay. So I wanted to do the demo from scratch. But I think that we won't have time to do it in ten minutes. I have the same problem as before that this freezes my IntelliJ. I don't know why. It's actually the adapter which is freezing my IntelliJ. V.I., that would be an option, yes. It's kind of weird because I plug the adapter and then all of a sudden my IntelliJ freezes, but not my computer, right? So it's just IntelliJ freezing. So if you turn off the computer and try it off now, does it? Yeah, you can. Does it? Okay. Now it's working. This time and now my IntelliJ crashed. We'll have to focus a little bit. Hey, what's going there? Almost there. All right. So as we have like five minutes left only, I'm just going to show it real quick. So I'll try to build a reactive web application from end to end. So I have here my domain class which is a speaker. And if you're familiar with Spring Data, Spring Data is the umbrella project for a lot of different repository technologies. I'm going to use MongoDB in this case. So in JPA, we have the standard annotations to map our domain objects into the relational database. And Spring Data, as other data stores don't have these annotations, provides annotations so you can map those domain objects into the data source. As we are using MongoDB, we'll be using the add documentation. We're going to give an ID to this document which is going to be this string. All right. So now we'll create a repository. So this repository is a reactive repository. So we have reactive support for MongoDB. So if you're using Spring Data, you can use the reactive repositories. So we'll be extending from the reactive Mongo repository. So we take a look at the definition of the reactive repository. This is extending from the reactive sorting repository. And this is at the same time extending from the reactive repository and from the reactive repository itself. So we're going to inherit all the CRAT operations and sorting operations and all the Mongo operations for free. So these are called the instant repositories. So we don't need to implement anything. So we basically define an interface that extends one of the Spring Data MongoDB interfaces. And this will inherit all these methods. And at run time, there will be a proxy created that will have all the implemented methods. So you can just take this interface, inject it anywhere, and use any of the methods that have been created. But you can also define your own methods. And that's basically what we see here is that we create a find by name method. So we're basically getting a name and we're going to return a mono. So when you call this method, it will come back to you right away. So this is non-blocking.  So eventually, this single value, because Mongo is a single value, will be available to you. We take a look at the other methods. In the interface, we see that some of them return mono, some of them return flux, depending on the operation. But basically, we're going to get single values or multiple values depending on what we are doing. All right. So we take a look at the controllers, the reactive controllers. So this is just a normal spring MVC controller, or it looks like a spring MVC controller. But we are using the reactive types instead of returns like objects or strings and so on. So we see, or we have seen that now our repository returns monos and flux. So we think we can take those monos and flux and send them directly upwards. Oops. I just messed around with that. Sorry about that. All right. So we can just take those monos and fluxes and send them directly to the MVC layer. So now we see how we return flux. When we want to get speakers, for instance, we call the find all from the repository, we return a flux and we return a mono when we find a speaker by name. So one of the main things about the project reactor, if you have used ARAC Java or ARAC JS, you'll be familiar with that. But one of the main things of project reactor is the composition of the different methods. So all the mono and fluxes can be composed. And we can apply operations on those monos and fluxes. So then I have an entry point. So that's basically the springboard application. And what I have here is an application runner that will run just before the application starts. So I'm basically creating a couple of speakers. I'm creating a flux with specific names of speakers, Sergey and Michael. I'm going to map those into a speaker class. So I'm going to create a new speaker out of these names. And then I'm going to pass them to the repository to store them. So notice that this is just a flux definition. So we are moving from the imperative programming style from when this happens then do this to a more declarative style. So I'm taking these names and just mapping them to speakers and then please store them. So this flux definition is not doing anything until we subscribe to it. So this is basically the definition. This is our publisher. This is basically what will create the speakers. But when we write this, nothing will happen until we subscribe. So the subscription is down here. But before doing the subscription, we want to make sure that no speaker is on MongoDB. So the first thing that we'll do is delete everything on the database. And this is also a known blocking operation. So that means that if we just do delete all and then right away insert, well, the delete all comes back to you right away. So we have to wait somehow. And blocking doesn't seem to be the right option. So what we're going to do is to compose this call. So we're going to delete all and then let's do something else. So this is basically saying, well, just complete this operation. And then let's do something else. And I'm going to pass what I just created here, which is this flux, this producer. So I'm going to get those names, map them to speakers, and basically store them into the database. All right. And then we have here the alternative way to declare our endpoints. So this is the functional web framework. So now instead of using a controller, what we're going to do is to define the router functions where we define the route for the speaker name. And then we define here a lambda expression. So this is basically what will process the request. So when we get this, then we're going to get a path variable, and we're going to create an OK response. So that means a 200 status code response with the body being what's returned by the fine name method on the repository. So if we start this just real quick, I have the port open somewhere. So if I have it somewhere, that means that this is running somewhere. All right. So when I go to localhost, 8080 slash speakers, I'm going to see both of them. Speakers, I think it's a speaker's name or speaker. Can't remember. OK. So I see one of them. And the last thing that I want to show you is the actuator. So when we hit slash actuator in spring boot, you'll see a bunch of endpoints that are exposed automatically for you. So you'll see endpoints that will tell you the different bins that you have in the application context. So if you want to see everything which is in the application context, they are all listed in here. You're going to see endpoints that will tell you the health of the application, for instance, whether it's up or not. And you can have more information here. Things like the environment variables that have been passed. So this is basically all the environment variables that you have coming from different property sources. And one of the interesting endpoints is this one here, the metrics endpoint. So set in a spring boot, we're going to use micrometer for the metrics. So when you click on the metrics endpoint, it will tell you different metrics that you have available. And I said these metrics will have a multi-dimensional approach. So let's take a look, for instance, to the J80p servlet request. So I'm going to take a look at this metric. And we see that we got like 16 requests. And we have some available tags. So these available tags will give us this multi-dimension that we require to query this metric. So what if I want to get, for instance, I don't know, let me just go back, the 404 request or a 200 request. So I can just use this tag to say I want to get the metric which is called HTTP server request, but could you please filter them by this tag? And we can actually filter by multiple tags. I can say I want to get the get request that ended up in a 404. And we can do that by passing in a parameter which is called tag, and then we pass key value pairs, status, 404. So now we see that we have three requests that ended up in a 404. So that's basically the exception that we got with this request. All right. So I think that we'll have to leave it here. So that was real quick demo. But at least takeaway would be that, well, in Spring 5, Spring Boot, a lot of efforts have been going towards the reactive non-blocking support. So we have all the reactive non-blocking types, which come from the project reactor available, not only in the core, but also on all the other projects in the portfolio, like spring data, spring integration, spring cloud stream, and many other projects in the portfolio. So you can have an end-to-end reactive pipeline. And that's the important thing to end up having this pipeline from end-to-end. So not having any of these questions which are blocking, because otherwise you won't benefit from the reactive support. Do you have any time for questions? Like if there are any questions? A couple of questions, maybe? So authentication is blocking, but I talk about spring security integrating with all the web flux and all the methods that use these monos and fluxes. Of course you want to authenticate and you want to basically authenticate before reaching the dispatcher service. So this process will be kind of upfront, actually before what's done afterwards. Yes. So that's gone. So that's basically what we had, but as we are reusing those threads in different requests, so the one thread per request doesn't apply anymore in web flux. Spring security is using the project reactor context which is basically the alternative to the thread local. And that's where you can get the security context from. That's from the context of the project reactor. Any other question here? So I think we'll leave it here. Thank you.


Hello and welcome to Monet Café. I'm artist Susan Jenkins. We're gonna have some fun today and if you're new here, please subscribe and hit that little bell icon to be notified of future videos. Hello and welcome to Monet Café. I'm artist Susan Jenkins and I'm excited to bring you this lesson on painting flowers. Now this is a lesson that's going to hopefully simplify some things and allow you to paint many different varieties of flowers with just a few tips and techniques to demystify what could possibly be a complicated subject. So we're gonna go over the structure and the composition of flowers and I think it should be a lot of fun. Alright, let's do it. Now we love flowers as artists. I would say most artists do. I mean they're the perfect subject matter for painting, right? Beautiful colors, awesome textures, shapes, and such a plethora of designs in nature. But it could get complicating. There are some intricacies to flowers. They're geometric patterns like I've talked about in other videos. The Fibonacci sequence and the golden ratio is just inherent to flowers. That also can help you to learn more about painting flowers to just learn more about the structure and the way nature works. But there are some simple artistic things that we can do to simplify painting all kinds of different varieties of flowers. And so one of the things we need to focus on and concentrate on is their structure. Alright, and by structure I mean the general shape of the flower, the gestural quality of the flower. Is it on a stock? Is it a big bloom? So that's really a basic principle for simplifying the subject matter is to think about the structure of the flower. Now the next thing we're going to do is to simplify that structure. Now I have a few different flower varieties that I'm going to show you some little techniques that will help you to do just this. Alright, here we go. Now this particular variety is a daisy of sorts. And the first thing we want to do is identify the structure. What is the structure? Well we know if we were looking from above directly down on the flower, the structure is typically round with a stem. Okay, that's just really basically the structure of a daisy. Now we could get very bogged down and overwhelmed in going in and saying, oh how many petals are there? How many rows of petals are there? And start to try to paint every individual petal. So that's what comes to the next step which is to simplify. So I know we've got a circular structure, but I also know that there's going to be different angles for these flowers. Some are turned different ways. So a little tip that you can do is to basically, instead of trying to draw the flower from inside out, let's draw it from its basic shape and work in. Let's say I wanted to do a daisy and I am going to focus on the center portion and then I'm going to start doing all of the leaves out and in towards the flower. Alright, so you know I've got the general shape and but it starts to look kind of amateurish, not very painterly. So here is another strategy of a way that you can simplify and not have to go in and try to be so specific with every petal. Alright, what is the structure? Again, it's like a circle and I'm going to basically, and it's turned a little bit, so I'm basically going to get the general shape of this flower. It's kind of like an oval turned to the side like that and I'm going to then work from within that shape. This is what step number two, simplifying this.  So we're just going to simplify it. So now I can just simplify by getting this general cone shape in here. I can kind of see the sizes of things and then I can gradually start working from, it's the same principle but it's just so much easier when we give it a simplified structure to work from. Alright, so now we can end up with a much more painterly result and then we could do the same thing with other flowers that are in the background. We can get their shape. Now this one's going to get in the way of that other Daisy, but the same idea. We work from the simplified structure and shape and go out from there. Alright, let's talk about this little particular flower. What would that be? I'm not sure. Let's see if it says it. It just says blue flowers. Okay. Alright, so here's one approach to this flower. I could look at all these, the little things on the flower seem to be like little, I don't know, cone shape types of things coming around. I mean I could like focus on them like this and how each one's coming out and then another one down here and then we could draw the stem. Okay or I could take and do it like, let's do this one up here. We're going to simplify this. What's the structure? Obviously the structure is not round like a Daisy. There's our general structure. Alright and now what I'm gonna do, I'm gonna actually use some pastels with this one. Now what I'm gonna do is I'm just going to suggest some of the elements in here. I probably should have put some dark down first. Let me do that. Let me get some darks in here. Instead of drawing out every petal like this, I'm going to get the general shape kind of like that. Now I'm working on news prints, so bear with me. General shape. Alright now let's get in some of these brights up here. Oh, I love these and I'm just going to suggest some of the little things that are kind of coming out from the flower. Now we did have some of that nice dark blue, but I'm going to come in here. Let's do this here. I've got some rich areas in spaces. Alright, so let's give it some some richness in here. I'm really just doing like a little value study. We've got some of the little shapes coming out. So instead of drawing the shapes, I'm going to add some light on top of this too. I'm carving and working with them. I'm going to do some more of these bluish colored flowers, but let's first talk about the third step which is to suggest. And now we could simplify and suggest even further by just even simplifying it more. Let's see this one back here, I'm speeding this up and I want to expound a little bit more on this about the concept of suggesting. Rather than focusing so much on every shape getting in or every petal, you basically, like I said, the steps to the left there. You get the structure, you simplify the structure, and then you just suggest. And now you suggest even more when it's not an object of the main interest. So if you want like the largest blue flower there, I lost layering ability. Again, I'm not even working on sanded paper here, so I'm kind of limited in what I can do. But you want to give the most detail on what your focal area is, and then you suggest even more for the areas that are not your focal point. Alright, now let's do another one. And I'm totally doing these random. Well, the sunflower is a little bit like a daisy in structure. So let's see if we can find. Alright, here's an interesting little structure with a B. Let's approach this one in the same way. First, I'll do one that's more focused on our brain thinking about every single petal. And I actually have a hard time painting this way because I try to focus on simplifying it so much. So it's even kind of hard for me. This one's even a little more loose maybe than I would have done many years ago. Alright, so now let's do one that's focused a little bit more on just the general structure. Okay, maybe a little gestural quality. Now, see how I just kind of painterly did a darker center, even though that daisy or whatever that is, dandelion is yellow primarily. We still need to get a little darker value to lay some of those lighter colors onto. It has some darker little petals underneath that I'm just suggesting back to the third step there. And then I could, if I was working on sanded paper, I could really get more layering than I'm getting here. But it's getting more of a, you see the difference? I hope you can see the difference. This one is more suggestive, maybe more free and gestural than the first one. And now I'm going to do just do a few more and get a little fun and crazy like I did with the blue flower one. And just like the last example, I'll have a few that have a bit more detail to create more of a focal point. And then the further the flowers get or they're buried deep down in the grass and you don't want them to be a focal point, they are going to be even more suggestive than your focal point flowers. And I had to throw in a little quick B. Alright, now let's look at this flower variety. And they are basically like stars. So we could do these flowers. Oh, it's like a star. Let me let me pick a spot right here to do these. We could say, oh, look at that. There's a little B down here. I'll draw my B. He's right in here. And then I'll start drawing all these flowers. Okay, there's one that is like a star right here. There's some space here. Here's another star. And you get the point, we could just keep drawing these little star shapes everywhere. Okay, well, one thing we're not doing here. In this example, we are not simplifying. If anything, we are making it more complex. And before you know it, it looks very amateurish. Alright, let's go ahead and draw a little star.  It's very amateurish. Alright, so how would we simplify this? Let me get myself a little border to work with because I seem to be going all over the place. In this last example, I am going to be even more suggestive. Now, as we often do in pastel painting or many other mediums as well as we get some darks down for contrast. And I just basically got in some nice purples and dark blues. Now, talk about suggesting. I am suggesting shapes and gestures, values and colors based on kind of what I see. Now, notice in this example, I am not doing individual star shapes, but just kind of suggesting them. And I know that as the painting progresses, I will get more specific about certain areas in the focal point area. And I've chosen to make the focal point. To me, it was kind of obviously kind of some of the center flowers that are a little lighter center to center left, I guess. And those will be the ones that have the most color, the most high chroma color and the most contrast and the most detail. Those are some of the strategies to create your focal point of interest. And some of you, I know, probably seen my focal point video that I did. So that's why particular flowers will have a bit more of the star shape structure. And some will just be almost not there. Now I've given a few centers to them. And once again, I'm pretty limited with what I'm able to do because of the unsanded paper. But I went back and played a little bit more, got even more suggestive with some of the flowers, added a little bit more darks to the pink and purple flowers. And even added a little bit of sky to some of these just to have fun. So I hope these principles of structure, simplify and suggest will help you with painting flowers. It also makes it so much easier. You know, we can get too stressed about having flowers be so perfect. And it's so much more freeing as an artist when we can learn that if we can get their basic structure, simplify it and suggest certain areas will not only have more fun as an artist, but we will also create a painting that is much more painterly and artistic. So keep those three points in mind. Create some painterly, fun, free flowers. Oh, and be sure to check out my Etsy shop. I've just added over 30 paintings. You can find the link in the description of this video. And please be sure to subscribe to this channel, like this video, comment. And if you'd like a little bit extra, you can become a patron on my Patreon page for only $5 a month.  And as always, happy painting. That will hopefully make painting flowers easier and


Magnesium-based metals have been shown to possess desirable mechanical and osteo-inductive properties, making them promising candidates for orthopedic implants. However, there remain several challenges associated with their use in clinical settings due to their limited strength and poor biocompatibility. In this review, we discussed the current state of research into MG-based orthopedic implants, including their potential advantages over conventional materials, as well as the challenges they face before being used in clinics. We also highlight some of the innovations that have been developed to overcome these challenges, such as the incorporation of MG-based alloys into hybrid systems. Overall, the progress made in the field of MG-based orthopedic implants has provided a solid foundation for further advancements in this area. This article was authored by Jolly Wang, Jin Kuansu, Chelsea Hopkins, and others.


Hello everyone and welcome to my presentation, JavaScript-powered smart home with almost no code. So today I'm going to talk a lot about IoT devices. I'm going to talk a little bit about code, but mostly I'm going to talk about how you can avoid doing code. Not that as software developers, that's actually what we usually want to do. We usually like to write some code, but sometimes there are shortcuts that are really nice to use. So let's start by talking a little bit about IoT devices, and why should we care about them? I mean, sure, we've all heard about different internet-connected things, but I don't know if you've ever realized the amount of IoT devices that are available out there. It is actually expected by 2025 there will be 75 billion devices that will be working and will be connected to the internet. That is a lot of devices. And I was looking at that graph and I was thinking, how is that even possible? So I charted with the world population, trying to see if the world population followed the same trend, and not at all. I mean, it's just that we tend to have more and more devices. As a matter of fact, I looked at the number of current devices, which is around 50 billions, and divided that by their current world population, and that gave me something like six devices per person. But there's no way I have six connected devices in my home. So I started thinking a little bit. Okay, well, first of all, I've got two laptops. We've got a laptop for the family. My wife has her home laptop. So that's four connected devices. Of course, we each have our cell phones. And this is a household of two. We each have a tablet. Now, some people might argue that those are not IoT devices. They're connected to the web, but they're not IoT things per se. So I started thinking, okay, well, do I have any connected devices? Well, I certainly have a thermostat. Oh, right, I've got my smoke detectors. So I've got two of them. I've got, oh, I've got a smart TV, which is also connected on the internet. I've got, well, I've got some smart bulbs, which I'll get back to that. They're not that great. I've got some connected plugs. I've got three of them. I actually use them to turn on and off my Christmas lights and various things outside. And I've got connected speakers. So my speakers are connected to the internet so that they can stream music. And all right, my home assistants. I've got a bunch of those around the house. So I've got three of them. My door locks. I've got, yeah, front door and back door. They both have smart locks in there. And I have a vacuum, an internet connected vacuum because, well, you know, everybody wants to start the vacuum when they're not at home. So I started counting at that. And that's like 18 devices. That's nine per person. So I guess for someone who thought I didn't have that many, I still do have a lot of them. So IoT devices, why shouldn't you care? Well, probably because they're all over the place.  And in your professional career, there's a fairly good chance that at some point you'll actually have to deal with some IoT devices. So this is what I'm going to talk about today. So hi, my name is Joel. I work as a developer advocate for MongoDB. If you ever want to get in touch with me, Twitter is always, always, always the best way. So Joel underscore, underscore, there's two underscores there. So Joel underscore, underscore, Lord is the way to reach me. You know, just to talk about anything, whether it's databases, connected devices, or just to say hi, if you've enjoyed this presentation, feel free to tweet. I always appreciate a Twitter notification.  I like to tinker with stuff. I have a bunch of little connected sensors and various microprocessors that I just enjoyed that type of stuff. But I've never worked on a professional project with them. So whatever I'm going to say here, those are my opinion.  But if you want to hack around it and play around, I think that there's a lot of the content that you'll find here that can actually be interesting. Speaking of content, this is what I'm going to cover today. So I'm going to talk about IoT and JavaScript. So how can we use JavaScript to build IoT stuff and connect devices to the world? So we're going to look at that. Typically, we tend to think about C++ to build embedded stuff, but it turns out that you can actually do pretty a lot of cool stuff with JavaScript. I'm going to talk about local interfaces as well. Low code is kind of a trending thing. We see more and more of those interfaces where you don't actually need to code. And finally, I'm going to introduce you to IoT and low code. So I'm going to show you how I've managed to solve a few of my problems around my home by using both some IoT devices and some local interface. So IoT and JavaScript just like PB and J. As I mentioned already, we don't always think of JavaScript as the main language to program various devices that will connect to the internet. We tend to think of C++ typically, but it turns out that you can do a lot of things. As a matter of fact, just a few years ago, I was at a presentation where I had the privilege of presenting this tiny robot that was controlled by a Kinect sensor that you can see right there. It gets my skeleton and I can do gestures and the robot would fly off. So I was able to do all of that using JavaScript. So all the Kinect sensor, the detection of gestures, the actual little robot there, everything in there is all built with JavaScript. Let's see that again. There it goes. Okay, so getting started. How do you get started and start programming different devices using JavaScript? Well, I'm going to talk about many two different devices that you can use for IoT to get started, the Esprino and the Raspberry Pi. The Esprino is this tiny little device right there that you can see. It's based on the Arduino open hardware. A few years back, we talked a lot about the Arduino. There were ways to use the Arduino with JavaScript, but that wasn't really easy. The Esprino really, you can use JavaScript out of the box on the microcontroller. It uses the ESP8266 chip. That is a programmable microcontroller that also has a Wi-Fi connection on it. So this tiny devices goes for about 35 Canadian dollars, I think at the moment. So you get them for pretty cheap and you can do some really powerful stuff with that. So the Esprino Wi-Fi is the one that I've just shown you is a tiny USB and Wi-Fi enabled microcontroller. That can be programmed in JavaScript. So just plug it into your computer and get started in seconds with the Web IDE, no software installation needed. So that's from the Esprino website. You can find out more information there and that's actually one of the places where you can actually get your devices. So this is what the IDE looks like. So you can actually, there's a website, you can just go to that website and in theory you should be able to connect to your sensor. Now this one is running inside my presentation, so inside an iframe, so it gets a little bit tricky. But I actually have the IDE right here, right in the back. There it is. And I've got this little code that will just blink a LED. I've got a little tiny microcontroller right here that you can see. Let me just make that a little bit bigger. So you've got the microcontroller here. So what I can do from this UI, I can actually connect. I can connect to my Esprino board. There we've got it. I'm missing a semicolon here, thank you IDE. And now I can flash my device. Now that I flashed the device in just a few seconds, you should see the LED starting to blink. Pretty cool, isn't it? Yeah, so there it is. And we also have the status so you can see right there in the IDE, the status being updated on whether the LED is on or off. So that's a very tiny little example. That's kind of the hello world of IoT devices. Of course, I wanted to build some things a little bit more complex. And we've got here, you might have noticed that I do have something connected to it which is this tiny sensor right here. It's a temperature sensor. If I just go ahead and of course, I won't write all of the code for it but I'll just copy and paste this code here right here. And I can flash my device again. So next time that it starts, it will actually have that code on it. And what this will do is it'll actually connect to my Wi-Fi and it will, now you have my Wi-Fi password, there it is. And it will start making a call to a UI, so to a URL, so this URL right here. And I'll get back to that in just a few minutes. So now what it's doing is that it's actually just getting the temperature and humidity levels and just sends that over the Wi-Fi connection. All right, so let's take a look at the original code that I've shown you. So this is the blink, so the hello world of IoT devices is always a blinking LED. Usually there's a LED available on board that you can use. That is true for most little microcontrollers that you have access to, as well as the Raspberry Pi's or some versions of it. So the other microcontroller that you can use is the Raspberry Pi, and I actually have one right here, I'm not sure if it will let me just disconnect, nah, I won't disconnect it because it does take a few minutes to reboot but this is actually the actual picture of my Raspberry Pi. So that's the Raspberry Pi 4, which was just released recently. And Raspberry Pi's are actually a tiny dual display desktop computer and robot brains, smart home hub, media center, network, AI core, factory controller and much more. So that's also from the Raspberry Pi website. But basically what the Raspberry Pi is, is that it's a tiny computer on a board and it's tiny, it's about this big, it's very, very small and it's very powerful. That little device has eight gigabyte of RAMs, it has a hard drive that you can add afterwards, it uses an SD card for that. So it's a tiny computer that you can use and it has a bunch of little pins that you can use and connect devices on them or sensors or different things. So in the case of my tiny device here, I've actually plugged a LED on it and let's actually take a look at some of the code. So in order to be able to, oh, and another interesting thing, and let me actually show you the UI very quickly. So this is my Raspberry Pi and it's connected right now. And you can see that it's a computer, it runs Linux, it runs a version of Debian and it actually has Node.js pre-installed on it.  But you can see here that I have a terminal window and I can actually use it to do some different things like I can edit some code. This is my blinking code. I'll come back to the actual coding here in just a few minutes, but then I can actually run this code and run this, whoops, not this one, but I can run my Node.js application and it will just start blinking my LED pretty much similar to what I did with the Esprino as well. So in order to be able to program on your Raspberry Pi, you will need two libraries. You'll need Johnny 5. You actually don't need Johnny 5, but it does make your life a lot easier. And Raspi.io or Raspi.io that will be used to control the different pins on your Raspberry Pi. The code that I've just shown you in my terminal was exactly this code. So first of all, you required the Johnny 5 library, required your Raspi, and then you just initialize a new board. Now it's an event-driven type of programming. So you will have events like board on ready. This tells you that the board is initialized and ready to use. Once it's ready, I can initialize or declare a new LED. So by using the pin number, then I can use the method blink and it will just start blinking my LED. All right, so what should you use? An Esprino or Raspberry Pi? Well, they're both pretty cool. Actually, they're both pretty amazing little devices, but they do have some very different use cases. The Esprino is great for being tiny, tiny, tiny and I can just easily connect a little sensor on it. And there you go. I can just put that. I can connect the battery on it and just throw it somewhere and forget about it. And it just works and it's very, very power efficient. So I can just forget about it. The Raspberry Pi on the other hand, not as an energy efficient, it's actually a full computer. If you need to access it while you'll need to connect a keyboard on it, then you'll need to connect the display on it. But it can be very useful. If you wanna build a media center, then you can actually use that Raspberry Pi and then you can use those external pins for additional sensors or to add different little things to it. So it really depends on your use cases, but both of them can be very useful. All right, so I've talked about IoT devices. Now let's talk about the local movement. What exactly is low code or sometimes called no code? Well, local development platform provides a development environment used to create application software through graphical user interface instead of traditional hand-coded computer programming. A local platform may produce entirely operational applications or require additional coding for specific situations, enabling accelerated delivery of business applications. All right, so why should we care, right? We're software developers, we know how to code, so why should we care about local interfaces? Well, there's a few good reasons for that. Mainly you don't want everybody to rely on you as a software developer all the time, right? So sometimes you can use local interfaces to make it easier for other people in your team that are not as technical savvy to be able to contribute to your project. So using a local interface you can give access to some sort of reporting tool to your managers and then they'll be able to just, you know, add new sources of incoming data and they'll be able to generate new charts and stuff. So local interfaces can be very, very useful for that type of thing. But it can also be really helpful when you're building IoT ecosystems and you need different interface and you don't want to build everything from scratch every time. So there's a lot of tooling that you can actually use to help you with that. I'm gonna talk about two here, there's a lot more. IFTTT is a product that is available really made for makers, it's really, really simple to use. And I'm gonna talk about Node-RED, which is a project that I've recently discovered and I think it's an amazing product and definitely worth talking about. So IFTTT helps all of your apps and devices work better together. It makes it easy to build applets connecting various services. So you can find out more information on ifttt.com but what does it mean? Well, basically you've got if this then that so that's the IFTTT. So you can just create, connect a bunch of different services so you can say things like, well, if I've got a new follower on Twitter then start vacuuming. And that's actually running on my IFTTT account. So if you wanna follow me on Twitter you'll help me to have a clean floor cause it'll start my robot.  So I just know that I have a new follower when the vacuum starts. So you can see the type of services that then there's a lot of different services that you can connect to and you can see how you can just integrate each one of them together and create some of those flows. The other one that I wanted to talk about and actually just before I leave let me just switch back here, not here but I actually had my little, a tiny little device here which is probably still running. I don't have any, oh yeah, yeah, I just saw that link. So in a minute it will do another readout on my temperature sensor and it's actually connected to IFTTT as well and I forgot to put it. So let me just push this window right here and every time that it gets a new event every time it detects a new temperature so every minute or so it actually inputs a new day, a new row in here so I can actually see that the temperature right now is 27 degrees. It's a little bit hot here today. That's Celsius and 45% humidity. And if we wait and if I just talk a little bit more and I'm not sure what I'm gonna say but in just a few minutes you should see another row being added because it'll do another reading every minute. Should we wait? There it is, coming. Meh, let's just leave it there. I'll put it in the background so we might be able to see it in just a few seconds. All right, so let's talk about NoRED. NoRED is a programming tool for wiring together hardware devices, APIs and online services in you and interesting ways. It provides a browser-based editor that makes it easy to wire together flows using a wide range of nodes in the palette that can be deployed in a runtime in a single click. All right, NoRED.org, you'll find more information there. By the way, I was very excited but I didn't want to start reading but you saw that I got a new reading while I was reading this little presentation here. Okay, so back to my presentation. NoRED, how can you get started with NoRED? Well, if you have Docker installed, it's actually very easy. Just run this command and you're good to go. So it starts a web server on port 1880 and it will have NoRED installed and ready to be used. So what is NoRED? Well, this is the UI. So if you are running, and I'm actually running it in Docker right now and so you can see that I have it on localhost 1880, what can we do with that? Well, there's a lot of things that we can do. So first of all, let's start with the basic Hello World type of thing so we can inject something. I'll try to make this a little bit bigger. So there you go. And then I'm gonna use a debug statement. So a little bit like, you know, when we do console logs, when we were trying to do some JavaScript programming, I wanna see what's going on. We can use the debug right here. So we've got those two nodes. I can link them together and let's actually change here. So we won't send a timestamp. We'll actually send a JSON object. We can use the visual editor. So say I'm not, you know, very familiar with JSON or JavaScript programming. So I can say, okay, well, we'll send a message and the message will be Hello World. There you go. So I'm gonna send a message Hello World. And in here, I'm going to debug the payload. So I've got my debugger up and running. So right here, you should see messages. Let's deploy this application. There it is, missing Twitter credentials. Ignore that for now. But we can see that whenever I trigger this little node here, so I can click on the button and we get the message Hello World being displayed. Pretty cool, isn't it? Well, okay, well, maybe it's not that cool, but there's a lot of things that we can do with that. We can say, well, okay, let's change this and say we'll trigger Hello and we'll add another field. So let's use the visual editor again because I think it's pretty cool. Actually, let's just use the JSON. And we'll, you know, person will be Joel. So now we can send this object and we can still trigger it. Let's just deploy this again. We can trigger it and we get this new JSON object so you can see that there's a little bit more information in it. So that's good so far, but we can add a switch. And now with my switch statement, I can connect this to my switch and I can say, well, if it's equal to Joel, you know, output to node one and anything else. So if it's different from Joel, do something else. And let's not use message.payload, but message.payload.person right here. Okay, so now this should be triggered. Let's remove this link here. I'll add my debugger at the end. And in another case, we will create a function and let's open this. We will change the message. We'll say message.payload equals message you are not Joel. Okay, so I've got this new payload and now I'm going to output this as well to the same node right here. So if the person is Joel, it's going to output directly the exact payload. And if it's not, then I'm gonna output some other message. So let's deploy this application. There it is, let's click on this. Hello world, this worked. Let's actually change the name of the person to someone else, someone else. There you go, redeploy the application and boom, you are not Joel. So there you go. So you can start to create those more complex flows and you can start to add some conditional statements and so on. Another interesting thing that you can do is that you can actually go to manage pellet here and you can search for different things. So say you want to connect to Twitter. Well, you can actually go to Twitter and add the node red Twitter node. So that's a node that enables you to talk to Twitter. As you've seen, I already have it installed but my credentials are not valid here. If you want to connect to a MongoDB database, well, you can use the one right here, which is installed and it's a node to communicate with a MongoDB database which is pretty interesting as well. So we can actually go in here and I don't know if you want to give access to someone to your application or to build applications and you want to show them how to, or you need to show them how to connect to a database. I mean, that can be complicated. What I'm gonna do here is I'm going to add a insert operation on my MongoDB database which is already configured in the collection flow data. So there it is. And now whatever is the payload of my message, I'm actually going to just send the payload directly into my database and that should add a new statement to my database. So let's deploy this. We can see that we're connected and now if I trigger this whole flow, we can see that it worked. And if I show you, I actually have an interface to manage my MongoDB database right here. And we can see that we've just got our payload that was added right here as a message person, someone else as I've just typed. And if I change the inject here to actually say hello to Joel instead, there you go. Re-deploy this application, re-trigger this application and we should be able to see a new entry right there, hello world person, Joel. Cool, so you can start programming your applications and maybe you start to see where this can get really, really powerful. So it's really easy to integrate a lot of different services together into this application. So I'm already able to add some information into a database, do some conditional statements and all of that in just a few minutes on a graphical interface. All right, but the whole thing, the whole goal and one of the things that really led me to this presentation was I have some smart devices in my network, but they're not really that smart. I've already hinted at my smart bulbs and there's a few cases. So I wondered if I could make things a little bit smarter by using those technologies. So some of the problems that I have, the thermostat temperature is kind of inconsistent. Well, not that it's inconsistent, but it's in the middle of the hallway. And when we sleep at night, well, I like to keep the temperature a little bit lower, but I want to measure the temperature in the room, not in the middle of the hallway. My smart bulbs, they're great, but I actually have to open up my phone and press on, on or off, which is kind of annoying. I'd rather have a switch in that case. I managed to connect it to my home assistance, which this definitely makes it easier, but what if we could make that a little bit smarter?  Actually, there's a switch that I need to flick to, on or high or off, so not that great. So I wondered if I could make that a little bit smarter. And of course, my plans, they're not connected to the internet. So I figured, what if I could actually do that? Well, let's go back to our Node-RED interface here. So first of all, for my thermostat, what I did here is that I actually have exactly this type of device. So I've got my ESP, or my Esprino, connected to a temperature sensor, and it just sends the temperature every minute or so to my temperature sensor, or to my Node right here. So that's an HTTP, it creates an HTTP endpoint that I can actually ping. And then I'll check for the hour. So if it's during nighttime, then it will actually move on or check the time. And if it's not during nighttime, it just ignores the request. But if it is, it'll check the current temperature and based on the temperature that the sensor picked up, it'll either turn on or off. So it'll set the value one or zero, and then it will send an outgoing request to another web service. And of course, I wanna save that into my Mongo database as well. So you can see that I've just created this whole flow.  For my lights, well, I didn't really care about turning them on or off. What I wanted really was to end their exterior lights. So I wanted to base that on the sunset. So I've added this little node here, sun event inject. And this actually happens whenever there's a sunset, it triggers this event. I wait for an hour, because I want about an hour after sunset where it's really dark, then turn on the lights. And I use this trigger node here, which is really cool. It'll actually trigger something and then it will wait for four hours and then it will trigger another event. So the first time it has a one, the second time it has a zero, and then I'm able to send an HTTP request to my service that controls my lights using IFTTT, and it will turn it on or off based on the value that I've just sent it. Of course, same thing. Also save that into my database so I can actually see what's happened. It helps me to debug when I see or notice that, oh, the lights didn't turn on yesterday or things like that. My air changer. So I added a tiny little relay on it. So I'm actually able to turn it on or off now. And now I use an intro valve. So every hour I started for about 20 minutes. I do that only during daytime. So I don't want to do it at night because it's kind of noisy. So I do my check time as well. It's similar to what I did earlier. I triggered for 20 minutes and I just send the HTTP request to my little relay that I have plugged on my device. Now, if I have a, or not if, but I do have a little air quality sensor as well that I have in my kitchen. So if I burn something, the theory is that, but that never happens, right? So, but if I do, the theory is that it will actually send a request right here to this bad air URL. And that will actually trigger another 20 minutes of my air changer. So it will automatically clean the air in my kitchen. And what else do I have? Well, of course, my plants. I wanted to know when to water my plants. So I've added a little hygrometer that I put in with an aspirino. I changed the range. So it sends me a value from zero to 1,024 or 23. I changed that from zero to 100. And then based on the critical amount of water that it needs, whether it's under 25% or under 10%, it'll actually either send me an email or send me a tweet because I, you know, I'm more often on Twitter than I am on my emails. So it actually sends me a tweet when it gets critical. And then I save this event to my database again. So you can see how I can connect all those different services. I can send emails, connect to Twitter. And there's a lot, a lot, a lot different things that you can do with Node Red. And that's just, you know, a little preview of what it can do. So IoT and JavaScript. Can you use IoT with JavaScript or JavaScript with IoT devices? Well, it turns out that you can. It actually works out really, really well. It's nice because I don't have to learn new language. I don't have to learn anything new. I can just use my current knowledge and immediately start programming IoT devices. Local interfaces, really fun for a lot of different things. If you want to, you know, make it a little bit easier for different people to be able to add and contribute to your projects, then that's definitely a good way to go. But it's actually a lot easier as well than to have to program all of it. So IoT and local, they go well together, especially that this one is really event-based. So it waits for incoming HTTP requests and it just works so well with the whole IoT ecosystem. So this is what I had for today. So thank you very much for attending. This was my talk, JavaScript Power Smart Home with almost no code. There's a little bit, but not too much. Thank you very much for being here. And if you want more information, easy URL to slash JS no code. And you can find me on Twitter at Joel underscore underscore lord. Thank you very much.


at we have any data on or is this something we're just going to start the process and see if it works because you have three four bedroom rental apartments they're going to be expensive to rent no i mean no matter how much help the state gives or incentives that they get it's still it's going to cost a lot of money they can be subsidized through like deak was talking about place-based vouchers if we have ways to reduce the cost for projects that create those units that can also be taken advantage of by an entity like the vermont housing finance agency to build more affordable housing so that is what we're talking about here is the goal is to create units that are affordable and correct and i think i think you're on i think this is we're on a wavelength here that is a need and i'm just being pessimistic where if a four bedroom unit goes for $2,400 that's $600 a bedroom and they get half the help they still have to come up with $1,200 in a low-income family that's going to be most of their income that they bring in so that's i'm just trying to think this out before we try to start implementing this three four bedroom and do all this work we i think we have to be practical maybe even get a consultant or ask the developer how this is going to work because i'm i just know what rents go for i've rented before and i know and i know what people pay in burlington you know look at the college kids that rent these four or five bedroom houses you know what those places go for i mean it's crazy that in the the rental incomes these days it's just it's it's almost out of control dick did you want to add something yeah just that um owing to a limit to how much you can charge in in rent with the place-based voucher those cover those assure that the renter pays only 30 of their income so so there is that that protection i think the other thing is people like me are sitting on equity in in properties we'd love to reinvest but we i i'm looking for a way to do that efficiently um you know so if i can bring a million maybe more to the table um that's just plain old get a leg up um that's great um but i want to get as many units as i possibly can out of a strategy like that and that's part of what i'm here for is get you know potentially out of the gateway where we own land already or the land isn't you know people want to develop in their backyard or whatever there's just some opportunity to do this in ways that aren't your traditional multi-unit multi-story unit um but i think we need to to look at that um residential zoning to get there thanks jim i think it might be worth aligning this recommendation to the housing commission recommendation which explicitly addressed that mike um we when the housing commission talked about it they explicitly recommended a parking considering a parking reduction for three bedroom units that were affordable to 100 percent am i um so i think the housing commission and the planning commission have discussed that already as well that this uh this multi bedroom unit have some affordability constraints yeah so to that point and what eric shared um that we can make that recommendation uh just to be clear just in alignment with that that we want to see an incentive that supports those priorities and then i think to deke's point do we want to also say please look outside of the gateways at other ways to incentivize the creation of this kind of housing and from the sound of it that would be kind of around two for zoning updates that the planning commission looks at next fall i mean maybe maybe not like eric was saying there might be something outside of form-based code heather i just want to remind everyone that um we do have an application in for a bylaw modernization grant um we'll be finding out about that in the next uh month or so and that was to look at um city-wide zoning for ways to support our housing goals so that would be to hire a consultant specifically to walk through this with the planning commission and also that the housing commission has a memo prepared that is going to planning commission i believe this week um which also has recommendations about using the zoning for great neighborhoods guide from the state on how to make our um zoning across the city more amenable to creating affordable housing and i think those i mean those two i think there's resources lining up to support that i think it would be helpful um i i certainly think it's helpful for councils to be giving direction on this right now given all these pieces you and eric have been lining up so i think this is a good timing to have this discussion and decide if this is a priority council jim can you restate please you said that the housing recommendation is the housing recommendation last made was for free bedroom housing for free bedroom units affordable to 100 percent am i you consider for parking reduction how do i have that right from our housing commission memo that was the previous memo um and and then we have the memo that is just going to planning commission now which is about using the zoning for great neighborhoods guide and the specific areas to look at in city-wide zoning okay so can we can we provide this guidance to say that we support that recommendation we support a focus to incentivize three bedroom housing um housing up to 100 percent am i and would support looking beyond the gateways to create that housing i don't know who went first i think jim's hand yes jim did yeah all right i never lowered it okay mic so i'm not a housing expert or a zoning expert so if we're gonna go outside the gateway with the zoning are we talking about building are we looking to build same kind of structures to protect the neighborhood integrity or you talking about putting three-story buildings in a neighborhood or are we talking about putting six plex or four plex in a residential neighborhood outside the gateway is this the kind of thing that we're discussing here or are we gonna try to find a way to add the duplexes that have the three four bedrooms that incorporate into a neighborhood it's the latter mic so like what deke was sharing earlier we have these areas that are zoned for like single family but already existing there are duplexes triplexes larger um and zoning for great neighborhoods gets to that as well of like creating these more efficient multi-unit buildings that still fit within that kind of neighborhood because it's already um was the deep the phrase deke is the zoning is more restrictive than the existing character of the neighborhood anyway so like looking for opportunities to realign it to what it actually looks like on the ground heather i just want to say if it helps mic i did a little analysis of the rc zoning and there are blocks within rc zoning where you aren't allowed to have more than i believe a triplex or maybe it's a duplex um where 40 yeah it's a duplex i'm sorry um where 42 percent of the properties within that block don't meet that zoning so i think you know just updating the zoning so it reflects what's actually on the ground is what we're talking about deke yeah and and i had to look at use if you look at um lot coverage and fars and stuff um it's it's even more than 42 percent or just not couldn't be built today um i wish i could find that map that i had because it was really striking how you know it was well over 60 percent of the buildings that we have don't meet the current zoning just because they were built before zoning existed um and then the restrictive zoning you know creates a barrier to to actually develop or even redevelop so i i wouldn't see mic that we're talking about you know building four stories you know on um pick pick a street belview um franklin um but you know are there ways to do within the character and the frame of the building three units at rather than two or at elm street and westwood there's there's land there could we build six townhouses next to each other that look exactly like everything else around it um and would that would that make sense because we can't do that now and building duplexes is just just adds to the expense so that's that's kind of what i'm proposing is just looking at that that model not not four stories form-based code yeah to be clear we are certainly not saying we want neighborhoods to have giant buildings like we have in our gateway areas brinn um so we're in some cases we're saying we're pretty restricted with form-based code because of the current zoning standards but doesn't plan unit developments allow an opportunity to provide the type of development at elm street that you're looking for deak uh puds are listed puds are limited to duplexes in the rc district right now so no i couldn't i couldn't actually build another set of what's there under current zoning unless eric corrects me i believe that that i'm i've got that correct yeah no that's correct the the the plan unit development still needs to follow the underlying zoning as far as what the the type of uses that are permitted and in the residential c zoning district we we don't allow anything more than a two unit building we allow up to three total units but it can only be configured as a duplex and then a standalone unit either as a detached cottage or as an accessory dwelling of some kind so we don't allow for three units to be connected to one another there any other questions comments this has been a good conversation about this though i appreciate all of it yeah and we'll see um the specific recommendations coming from housing to planning will be posted or they already are i'm uncertain this week um so appreciate all of the input thus far it is a really complex topic there's a lot here and i think it makes sense that we're getting a little in the weeds but you know the goal here is just to share what our priorities are to eric's point we want to see more three-bedroom units we want more affordability to 100 percent area median income and are kind of leaving it to our commissions to figure out how to do that hearing no more comment i will move us to item g so this is on for discussion approval it's a letter about the people waiting study task force and my apologies this wasn't added to the online agenda until today there's been some fast-moving pieces here um so essentially in vermont our education funding is based on the number of students in a school and students with higher needs like poverty limited English proficiency um are counted at a rate higher than one to provide adequate resources for those kids so like these higher counts are called weights the legislature had a uvm do a study a couple of years ago to evaluate whether our waiting formula was actually equitable and um it's called the people waiting factors report of 2019 uh found that they were not that the weights are really outdated and need to be updated that we've essentially been underfunding the these kids with higher higher needs or who need more resources um they charged a task force with figuring out how to implement those recommendations that task force has been working for the last several months and is not on a path to actually create a plan for implementation but is going down a path of actually looking at other changes to the funding structure most recently the most recent recommendation i've seen they would be accepting all of the reports recommended weights except for funding for english language learners which they want to treat separately using a different funding mechanism that continues to underfund those students um our school district staff and board are really concerned about this trend we think it's going to result in further reducing resources to when you ski students and so what i have here in the agenda is a draft letter that we could sign on to alongside burlington so we've been um burlington is also really impacted here in concerned and so i want to ask the council if you would like to put all of our names on this to say that we we want to tell the legislature that they need to implement the updated weights that were recommended in the original study and not consider these other pathways that are going to reduce supports to our kids um given how late this was added to the agenda i i will pause and give you a moment to take a look a mic yeah i got a question you said other sources of income what do you know what they were talking about oh other funding mechanisms okay so instead of what the report says is to update the weights in the formula that already exists and so they've been looking at like changing the formula altogether um so pulling the the weight for english language learning pupils out completely and then providing um essentially like a block grant that would be significantly insufficient so the weights the recommended weights would provide 25 around 25 000 per english language learner and what the task force is currently proposing would be five thousand dollars per english language learner so it's a really significant reduction and what they shared is that this was based on prior funding but like the funding has already been inadequate like that's what the report is telling us so to base those dollars on that is pretty egregious meanwhile they would be updating all of the other weights so um kids in rural communities kids who are uh in in poverty which certainly applies to us too right but to update the weights for all of the other students in that formula and then say for english language learners you're not going to get increased funding is not a good track to be going down um not for educational outcomes for kids who are english language learners and not for the school budget of wunewski um if we based on modeling if they go down that path if the this recommendation was accepted by the legislature we would be talking about losing hundreds of thousands of dollars in funding in wunewski and that means either cutting services in the school or raising the tax rate which we know already is not something that we want to keep doing um and it would be a significant impact we do have um the finance director here from wunewski schools district and nicole i don't know if you want to add anything we'll bring you over just in case brin um can you just remind me who drafted the letter so i worked on this along with um a member of the burlington city council and then the nicole correct me if i'm wrong i think it's the vermont education equity coalition for student equity i'm sorry can you repeat that the vermont coalition for student equities thank you thank you and are you anticipating that this coming up with i think they're burlington next meet next council meeting is next week is that right yeah so they would be considering it for next week okay but we have we do have i am hosting an event with mary weinberger with um chinden county senators and our representatives this is a topic we plan to speak about later this week to share information with them and so having i think the full council behind it and not just myself adds weight to to this advocacy are we anticipating this school board signing on are we just kind of keeping it at the council level for burlington and wunewski at this point i mean we we could do both so like our school staff and school board members have been advocating and participating in this process for a while and i want to to we want to add the municipal voice as well to say that we also are concerned here um i for my two cents i would say i'm 100 behind us and if anything we can make it more aggressive um and and stronger um i think that we we need to be fierce advocates for our students and for our residents um it will severely impact the quality of education and that we we need to hit that home pretty hard thanks mike yeah i i'm kind of confused of why they would take the english learning language out of this since this is a priority of education um is it because there's only real two communities in the state that have the majority of the english learning language and are they are they feel that the state's going to the other counties or cities or towns are going to be out of disadvantage by paying into something that they're not getting out of like it's just coming all from the educational fund right yeah so the other issue here the proposal gives you like a flat fee of um i don't know twenty thousand dollars if you have one english language learner and then five grand per kid after so it actually their proposal would benefit smaller schools more than us that actually have more kids who need those services um it also proposes to use something called categorical aid and my understanding is that the waiting formula the funding formula that's what's coming out of our the education fund um that the categorical aid approach would actually require them to raise additional revenue i don't know where that comes from but presumably some other tax or fee in vermont right so it i i i think is going to cost us more either way while simultaneously reducing funds to our school i don't really understand the rationale behind it um the folks on the task force have said that we would make out better with their model than by implementing the weights but they haven't actually shown us any numbers to to say that and the analysis that the school has done shows quite the opposite is is going to be true okay so how come the task force hat isn't up the par on this then i i'm kind of confused why they're trying to implement something and then not give an answer to it because i don't want to jump the gun either if there's laps if they're if they do find a better solution and then we get on board on this and ends up costing the residents of onuski more money and i'm behind the students i i i agree with this strong school system but i'm just trying to be double's advocate here and say how can we can't put pressure on that task force to give us their their model to show us the difference that is one of the goals of sharing this letter is to push them to show us their models they are not going to find another solution i believe they wrapped up their work this week they're supposed to be providing a recommendation to the or providing a report or whatever to the legislature on the 15th so what they have is what they have and we don't believe that it is going to be we believe it's going to be very detrimental to us um here in onuski now how they arrived at that solution i don't want to speculate on motivations um but for some reason they feel like english language learning students should be treated completely different than all other students which is troubling it is troubling because i've been asking those questions for years now on how our population of english learning students seem to be there's got to be more help be whether it's state level or federal level or that school system to provide the best possible education for all its students yeah that's it jim go ahead and i i would say i think that the school is doing a great job and the prospect of cutting hundreds of thousands of dollars in the budget because i think in reality we can't i mean up to the school board to decide what budget to propose but i think the ability for new ski to maintain those services in the face of this significant funding cut is pretty unlikely and i think this is going to be it's just not i think what you see in our community in that school has invested so much in its students and i think it's paying off in the shows and i think that we need to continue that and strengthen it and not take this step backward so i think given that we know with some certainty and i i guess i'll defer it in a call if um you feel it's not so certain in your modeling but i think you understand pretty well what this is going to mean for new ski students and um if this is even if you're even half right this is extremely troubling and we need to take some action and i just clarify the the figures that um may or lot cited actually come from the task force's own analysis it's not my analysis so um thanks so that they know what what they're doing they have they have done the modeling they have shared the modeling and um that difference $25,000 versus $5,000 is uh on their website yep so i think that's that's immense i mean that's not i don't think we can stand by and accept that that's that there's some that way this imagine would be better for students any more questions comments here brinn sorry quick process question so it sounds like their report is do the 15th that's standing yeah right um and then it's a what like what committee does that go to the the you know both houses the education committees um um in the legislature what's the what's the next step of the process for review and consideration after the reports complete i do not know which committee it goes to but it that report is delivered to the house and senate um my assumption is that it runs through the the education uh committee but eventually it would go to the entire legislature right how do you have insight to share yeah i i think you're right mayor i think it goes to the education committees um and um i i i just think the more pressure we can put on this process the better um and it just so happens this impacts the two most diverse schools in our state districts in our state so um i i really support joining burlington to to let them know this is unacceptable do i have a uh do i have a motion to approve i'm gonna so move second motion by house second by gym all those in favor please say aye aye motion carries thank you for your support on this we'll keep you informed i think this is one of the the most critical issues that is coming up in the next legislative session so we will be following and thank thank you nicole for staying late with us you're welcome um this brings us to the end of our regular items we have worn an executive session pursuant to um one vsa section 3131 f confidential attorney client communications made for the purpose of providing professional legal services to the council regarding champlain housing trust and 32 mallet spate avenue i am looking for a motion to find that per vsa 313 we should move into executive session to have this discussion motion by brin second by jim all those in favor please say aye hi hi motion carries so i need a motion for us to move into executive session inviting along wendy harrison heather kerrington john rousher angela aldeary and michael monti from champlain housing trust so moved second motion by brin second by mike all those in favor please say aye aye motion carries you should have the zoom link in your inbox uh we're going to move to a different zoom line for this discussion we will only discuss this topic we'll return to this um main meeting after afterwards we went to one vsa 3132 the negotiation of real looking for a motion to find that we should move into executive session as discussed discussing these negotiations in public would put the city at a disadvantage motion by jim second by brin all those in favor please say aye motion carries so i'm looking for another motion to enter into executive session inviting heather kerrington john rousher wendy harrison bob depolma bill necate doug netty and jeremy farkas i should be in angela aldeary so moved motion by mike second by jim all those in favor please say aye hi motion carries we're going to move out to another zoom line for the executive session we will return to this zoom line only to adjourn the meeting uh we won't talk about anything besides the executive session a lot seven d i'll move motion by mike second motion carries as the end of tonight's agenda i am looking for a motion to adjourn don't move second motion by mike second by jim all those in favor please say aye hi all right motion carries the meeting is adjourned good night everyone good night everybody