Welcome everybody. Good afternoon. My name is Micah Silverman. I am a senior security hacksore ad octa and that is my official title. I like to start off with a QR code here in the bottom that will bring you to a github repository that has this deck as well as a number of other references to github projects that we're going to be talking about. So feel free to grab that QR code. I also have the same QR code on the next slide and I'll have it on the very end as well. So don't feel like you need to take pictures of the slides although you're more than welcome to do so. Just a little bit about me. I contribute to a number of open source projects including the JJWT. These are projects that I'm very proud of and I'm primarily a developer. I also contribute to octa's blog and I did a three part OIDC primer which I have the the bit.ly link for right there and as well I got to co-author a book called Mastering Enterprise Java Beams 3.0 just in time for that technology to be kind of irrelevant. All right now I'm going to move on to the next slide. If you didn't get the QR code don't worry about it. I will have it again at the end. A little more about my developer background. I started writing code back in 1980. So first of all I want to invite you to get off my lawn. I was 12 years old.  I had a Vic 20 then I got a Commodore 64 and I did basic for quite a while until I got to college and in college my computer science program had at its language as its language of choice at the beginning Pascal if you can believe that and I can honestly say that I have never done production Pascal for anything it was only in college and fortunately soon after I started college we switched our program over to C which was much more useful and usable in the real world at least in my experience. In the 90s I picked up Pearl Pearl and Bash were my first CGI common gateway interface programs for the first websites that I launched around 1995 I helped launch the sci-fi channel's very first website and then in 1995 25 years ago Java was released and I was hooked right away I started going to some user groups that Sun put together at the time I started learning Java I even got Sun's Java programmer certification in 1998 and then after that I learned some JavaScript and then came the framework servlet no JS spring spring boot view JS I had a year of Ruby in there I worked for a company that had Ruby and I learned Ruby just to be able to work at this company I got the job and then they immediately switched over to no JS a couple of months after I joined so I had a very short run with Ruby but no JS spring spring boot have really been my main squeezes JavaScript in the browser jQuery and other such things and then along came view JS at least for me view JS was around for a while before I got into it about three years ago or so I started getting into view JS I started learning and I'm going to be talking to you today about some of those learnings but I do want to say that view JS is my newest framework so our agenda we're going start with spring boot we're going to layer in our first pass at view JS we're going to switch over to J hipster with view JS and J hipster using a progress API we'll be talking about that we'll write some view JS components we'll upgrade our security and then we'll wrap things up we have a nice tech stack here we have no JS and Java spring boot and view J hipster Docker and heroku we'll be using Docker to talk to or to set up key cloak as an initial security service for our J hipster app and we'll then switch over to octa and we'll get set up really quick with octa by using the octa heroku add-on which if anybody's interested I wrote I authored that and it's in beta right now we're looking for more beta testers so you'll see at the end and if you're interested maybe you can become one of our beta testers let's start with spring boot we're going to create a super simple API and we're going to build on that as we go the idea is it's a progress API like like you might use for a progress meter and it's very simple code it's kind of emulating a progress API so let's take a look at that first and what we're going to do here is use the spring initializer if you're not familiar with it you can go to start.spring.io it has a very nice web interface you can pick the different components of spring and spring boot and spring security that you want you can also interact with it on the command line using curl which is what I'm going to do here and we have very simple dependencies we have the web dependency so at this point we're not layering in any security I've given it a name called the progress API I've given it a basic package name it's going to be a maven project and it's using the latest version of spring boot so this grabs a tar ball I'm going to unzip that tar ball and within that tar ball it has everything that we need for a very basic project now over here in IntelliJ I'm going to open up that project and I have I have these live and preset folders just in the interest of time and making sure that we're not too reliant on the internet I have the preset folders all set up with these projects ready to go so I'm going to open up the POM as a project and in here we have a very basic spring boot application it's ready to go and I'm going to add a little something to it I'm just going to add a controller method that I'm going to call boot progress there we go and what I did is I just used a very as an aside here I used a very handy feature of IntelliJ called live templates and so I preset a bunch of these just so that you wouldn't have to watch me live type because that would be bad for everybody so let's talk about our little API here it's very straightforward it listens on slash api slash progress it returns a map of string object which is our kind of kind of keyword to clue us in that this is going to be a JSON response it accepts an optional parameter called percent so that is we're going to pass in optionally a percent value of how far the meter has progressed and then what we return a very simple singleton to map with a key of progress and then a value and the value is going to end up being five more than whatever we passed in or zero if we didn't pass anything in at all and it does a little bit of math trickery an optional trickery here so it's using optional the or else so if the optional is if there was no parameter passed in we're going to set the value to negative five and then we're going to add five to it just so that we can make it zero but if there was a percent passed in a value then that we're going to add five to that and return that as the result so let's see this in action i'm going to fire up the spring boot application this just takes a moment it's listening on port 8080 and now i'm using a command line tool called htd pi it's just a modern replacement for curl and i'm going to hit that progress endpoint uh let's see what it's complaining about oh yes i forgot one thing and that is we need to let spring boot be aware that i'm using this as a rest controller so that annotation will have spring boot react to incoming requests on that get mapping endpoint let me try that again there we go so with no parameter we get we get progress zero which is what we see here and now if i give it a parameter of percent let's say 20 percent i would expect that it's going to return progress 25 so it advances it by five percent whatever we pass in all right we're off to a good start here this is a very simple api in real life we would have a controller uh package and we'd have a separate controller class but we're keeping things nice and simple here next up we're going to take a first pass at view j s and to do that we're going to use the view cli and beforehand i did these two install commands view cli and view cli service and what we're going to do is we're going to create a project with tights type script and then we're going to install bootstrap view and axios bootstrap view is a view j s uh enabled version of bootstrap bootstrap is um used for uh for for for uh back end dwellers like myself it makes it really easy to set up a passable looking front end not a great front end um although i do have a few things in production if you if you used um if you did the developer challenge here first of all i want to encourage you to go over to the octabooth and do the developer challenge if you haven't already but that is a bootstrap view front end and then we're using axios kind of the defacto uh library for uh making making htdp calls from a view j s app all right so from here i'm going to do um view create progress front end and now we can take some defaults or we can manually select some features i'm going to manually select some features because i want this to be type script one reason is that type script gives us strongly typed java script which is pretty cool and also when we switch over to j hipster a little later on j hipster only has type script as its uh as its language so um this way everything will be consistent so after i do that i'm going to accept all the other defaults it's all about linting and where we're going to save configs now again this is going to take a little bit to load so i'm going to jump back over to intellig and i'm going to open up my preset folder here and i have a progress front end all set up and it turns out that intellig is actually a really nice environment for view j s and and type script all right so now let's just make sure that our basic view j s app is running and so i'm going to type npm run serve npm run serve that's going to launch our view j s app and i'm using a terminal right in in intellig which is super nice it's just going to take a moment to do webpack and now it's automatically listening on port 8081 because our java script api is listening on port 8080 so here is our basic view j s minimal app with uh type script so it recognizes that we're using type script all right so far so good let's keep going next we're going to have view j s make an api call we're going to use axios for this and axios uses promises which is a really great way to interact with async external services so axios is going to make a call and immediately return a promise and then when that promise resolves that is when the when the external http call finishes then we can have a function to handle the response from that and we'll see in a little bit that we're going to need to deal with cores as well that's cross origin resource sharing but let's keep things simple the first thing i'm going to do is jump over into our app dot vu e app dot view that's the main uh view here and what we have is a template that is bound to an object of the same name this is our type script object and i have some um some shortcuts here this again is a is a live template and it's complaining about axios because i haven't imported axios so let me do that import axios from axios there we go and now what we're doing here is we're calling our progress endpoint and we're passing in percent uh value of 10 when that api call resolves our then handler is going to take that response and we're going to log out the data that comes back as part of that response mounted is a standard function in view j s and what it's saying is that when this component is ready to go it's going to execute the mounted function once uh let's see it's complaining about our node path here bear with me one second i'm going to fix that maybe that's okay so let's go back and open up our console and we have good news and bad news the good news is that it is attempting to make the api call the bad news is that that api call is not successful the browser intervenes because it's blocked by cores cross origin resource sharing now if you're not familiar with cross origin resource sharing it's basically a system that makes it so that java script can connect to outside URLs to outside domains without permission so the browser intervenes when it when it receives the request to go to local host 8080 slash api progress the browser intervenes and makes what's called a pre-flight check if we look in the network we can see where is that pre-flight check that is not it all right maybe we don't see the pre oh here it is so it makes a pre-flight check and we have no control over that the browser intervenes on our behalf and it's waiting for the service in this case our spring boot app to say that this app is allowed to make a cross site request for it now we haven't configured our spring boot app for cores and so our spring boot app is saying is not responding to the pre-flight check and therefore the browser isn't allowing this to happen so uh this is a security feature of all modern browsers to make sure that you don't have rogue java script running on your page that's just trying to do malicious uh network calls to external sites now the good news is that it's super easy to uh to fix this situation and to do that i have a another shortcut here that i call bootstrap cores and what we're doing here is we're using spring boots configuration system we have an environment variable called allowed origins and that's going to resolve that's going to uh work with dependency injection that's going to resolve to be a string array and then down here we're hooking into this cores configuror bean and we have this cores registry and basically what we're saying is that we're going to add a mapping for this path so this is the universal root path and we're going to give it this list of allowed origins so that our spring boot app will now properly respond when that browser does the pre-flight check now i'm going to edit the configuration here and uh spring boot gives you a number of different ways to handle configuration one way is through application dot yaml another way is through environment variables and environment variables are super handy when you're deploying to remote services like heroku we can we can set these environment variables in heroku and not have to have them hard coded into files within our application so we want to make sure that the local host 8081 is an allowed origin and so now that i have that together we'll let this fire up one more time now i can go back to my browser and refresh it and now this time i get back a response of progress 15 so now at this point we've successfully made an api call from our view js app to our to our spring boot backend and and gotten a successful response because we've dealt with cores but this is kind of boring we want to we want to make the goal here is to make a progress meter that we can you interact with the api to advance that progress meter so the next thing that we're the next thing that we're going to do is use a bootstrap view in order to make a programmable progress meter that will reflect our api call so bootstrap view is for responsive or bootstrap is for responsive web apps bootstrap exists outside of ujs bootstrap view adds a bunch of convenience tags so that we don't have to have nested divs with lots of classes we can just use these bootstrap view tags it's got a lot of built-in components and as i said before it's really great for backend dwellers like myself so jumping back to our to our code here i'm going to add a function that will um that will that will update or advance our progress meter which we're going to add in just a moment so in order to do that i have a uh shortcut here ts advance and working with types typescript inside of this class definition this is going to become an object and now what i have is a few properties i have a max property and a value property and then i have this advance function and the advance function is going to uh hit our api backend and it's going to use the value property that's available in this component and then with the response it's going to grab the response and then it does a little bit of of uh manipulation here if the response is greater than a hundred it's going to set it to zero otherwise it's going to set the value to whatever came back in our response so what that the impact of that's going to be that once we reach a hundred the next time we call the api and it's greater than a hundred it's going to get set back to zero and we'll see our progress meter go back to zero now we can't see our progress meter yet because we haven't added it in here so let's add that in now with my boot progress no that's not what i want hold on i messed that up bear with me a second i want this one container progress there we go okay so i'm using a bunch of bootstrap view tags here i have a container i have a row that's center aligned i have a column that's taking up eight columns this is all part of the layout but here's the real meat and potatoes of what's going on first of all we're using the built-in view bootstrap view progress meter and we're setting the value and the max and typescript is automatically picking up those values from the object associated with this template which is our app object and then i have a button and when we click this button it's going to run the advanced function also found in our app pro object now this should auto refresh and it's complaining about a couple of things ah i see what it's complaining about so you'll notice it has some complaints here and this isn't rendering the way that i would want and what it's complaining about is that it doesn't recognize this tag be container well that's because i added all this bootstrap view stuff in but i didn't make my application aware of bootstrap view and in order to do that i need to go to main ts this is the main typescript and this is where we can set up some global environment and i'm going to use this ts bootstrap live template and it added these lines so it's importing bootstrap view and bootstrap view icons it's importing the css that goes along with bootstrap which we could customize and it's telling view to use it globally so these this is a global configuration now if i jump back over and this should auto refresh there we go now we have our very nicely rendered progress meter with an initial value that we set and now each time i hit the advance button it's going to hit our spring boot back end and now we see the result updating and when i get to 100 and hit advance again it goes back down to zero because i can see the response here was 105 and because the response was greater than 100 our code said to to automatically put it back down to zero so this is now kind of a complete application front end to back end there's no security there will be in just a minute but we have a view j s component that's talking to a back end and reacting to to what's going on there pretty cool we're making good progress here but there are some things that are missing one is security another is that we have these two separate projects even though it's really all the same app we have our spring boot app we have our view j s app what i want to do is bring that all together and that's what j hipster gives us j hipster is a free and open source application generator used to quickly develop modern web applications so prior to this presentation i installed generator j hipster and j hipster out of the box supports react and angular as front end options but view j s also has a very rich system for um for enabling other for enabling other contributions to the j hipster project they call them blueprints and you or i or anybody else can write blueprints and somebody's written a very well supported view j s blueprint so generator j hipster view is that view j s blueprint and what we're going to see is that we at we with j hipster we get view j s we get spring boot and spring security we're going to have our same maven project and we're going to link it up with oauth 2 for good security so let's see this in action and what i'm going to do next is i'm going to make a folder and switch into that folder called progress app and then i'm going to run my j hipster command and i'm going to tell it that i want to use the view j s blueprint now this is going to take just a moment we're going to select a monolithic application so we're going to have our view j s front end and our spring boot back end all live in the same project i don't want to use web flux we'll name the application progress app the default package name you can see that i that i've done this before i'm going to leave it as it is it's com a fit nerd uh progress api we're not going to use the j hipster registry we are going to use oauth 2 and open id connect authentication and you can see it works with key cloak and octa we're going to start out with the built-in key cloak service that j hipster provides and then just a little bit we're going to switch over to octa we're not going to use a database we're not going to use a cache we are going to use maven and we're not going to um use any of the other features our only option now is view j s because we told it we wanted to use that blueprint so we're going to select view j s we can use a default theme i am not going to enable internationalization i'm not going to enable any other test frameworks and now we can start it installing and so it's generating this application and now it's going to run npm install and just like before in the instant in the uh uh to manage time properly i'm not going to wait for that to finish what i am going to do is shut down our original progress api back end and i'm going to shut down our original view j s front end and now i'm going to open up the j hipster project that we just created and that's going to be in our preset progress app and we have a nice palm file there we can open it as a project in a new window and now we have everything that we need set up in this application so we have our progress app so this is our spring boot we also have this web app which is our view j s all right now just like before i want to wire this up to our back end so i'm going to set up our um uh i'm going to set up our our mapping and you can see there's a lot more to this it sets up a lot of uh stuff for us up front we're going to add just like we did before we're going to add our boot progress live template i just have to manage a few imports here there we go and just like before i'm going to make sure that spring boot recognizes this as a rest controller and now i can fire up our progress app back end and we should be able to hit this api progress now one of the nice things about j hipster is that security is a first class citizen and so now when i go to hit our api progress endpoint i'm going to get back a 401 because all api endpoints are protected by default now that's fine for right now we're going to deal with security in just a minute let's switch over to our front end and just make sure that our j hipster app is working so just like before i'm going to open up a terminal now this time i don't need to switch into a separate folder i can just run npm start and that's going to run webpack and get our front end set up running on its own port which will be 9 000 so that'll start up in just a moment there we go and here is our front end now for security to start with one of the nice things about j hipster is that it comes with a docker file for key cloak this makes it super easy for us to have oauth out of the box without linking to an external service or having a dedicated server anywhere we just run um uh the docker command to docker compose to bring this docker container up and i've already done that in this first tab here so i already have uh our key cloak server running now as a result of that in our browser i can sign in and the default password and email is admin admin and now i'm in an authenticated state so i get that um i get off as a first class citizen right out of the box really cool now let's make sure that our vj s front end can talk to the back end similar to what we did before and to start with i'm going to jump over to web app here and i'm going to open up the app view component and if you notice one of the things that j hipster does for us is it doesn't embed our typescript right in the template it keeps the template and the typescript separate by referencing an external file here so here's our app view and it has an app component typescript and it sets up this object just like we saw before so now i can add the mounted function and it's looking for axios so import axios one more time from axios there we go and it's going to try and hit our back end and um and then it's going to take the the response and show us the data now one of the other really cool things that j hipster does i'm going to get rid of this it automatically proxies request to the api endpoint to the back end so our j hipster front end app is running on port nine thousand j hipster is all set up to proxy any api request to the back end and that alleviates the need for us to um manually set up cores so now with this in place i should be able to go back to our j hipster app and if i look on the console it's getting 401 unauthorized because calls to api require us to be authenticated but if i sign in this time i get a response so now we have our front end talking to our back end in an authenticated way pretty easy and pretty straightforward to set up we didn't have to do a lot of coding all right now what i want to do is uh set up our progress meter just like we saw before only this time i'm going to go over to a core component and i'm going to use the home template the home template is what shows us welcome java hipster so that's what we see over here welcome java hipster now i want to put our um our progress meter component right above it but what i'd like to do now is to use the power of view j s components to make this nice and encapsulated so rather than having 10 lines of code embedded in this home view i can just have this tag progress meter and that not only makes this component look nice but it also makes it so that i can reuse that component in other places now in order to do that we're going to create a new folder here and we'll call it progress and inside that progress folder we're going to create a new file and we'll call that progress dot component dot ts so this is going to be the object that backs our our template our component and so here we're going to have i'm going to use the ts progress template that i came up with okay and this hopefully this code looks very familiar it's now just encapsulated into its own file so we have progress component ts that's going to be an object and it works just like we saw before it gets um it hits our back end uh using the value and it's already using the relative reference so that it will automatically be proxied and um it's going to grab the response and then um set it to zero if it's greater than a hundred or just set the value to whatever came back now let's add our template so i'm going to add a new template i'm going to call this progress dot view okay and now i have um this template i got to spell it right template progress and so now this is a fully encapsulated template and just like we saw with app it's referencing the progress component ts script so that we we have a complete separation of our code and our template and the template hopefully looks familiar now one thing that is a little bit different here is that with j hipster it uses a mix of regular bootstrap and bootstrap view it has bootstrap view all set up but it uses the bootstrap view component tags but it doesn't use the bootstrap view layout tags for layout we use the regular old bootstrap classes and so we have these different divs with different class names now why it decided to why j hipster decided to mix and match for the view j as blueprint i'm not 100 sure but this is the way that that our template changes all right now we're 90 of the way there we now have a fully encapsulated progress meter component now we want to wire that into our home view now we already put the tag in here but it doesn't recognize this progress meter tag yet in order to do that we need our home components view so that we can set it up to be injected or reference as part of this the home component and so the first thing i'm going to do is to import progress from and i'm going to use this at symbol so it's saying within this project go find shared progress progress view so there's our component and now i'm going to register it with the home component by adding it to a list of components that we want to make available and this is where we set up the tag name so the tag name is going to be progress meter and what's going to back progress the progress meter tab is going to be this progress component that we just imported all right let's see how we did here this is going to reload are we going to get it the first try no but that's okay we'll figure out what's going on so it can't resolve shared progress progress view so let's see what i messed up there oh i know why because i didn't put progress in the shared folder i meant to do that so let me move progress into the shared folder this is a component that we want to reuse so now progress is in shared and now if i let this update itself again still complaining let's see what it can't complain now what it can't find now not found can't resolve shared progress progress component t s let's see maybe oh i know it happened when i moved it into shared it automatically updated my reference here and that's not what i want so i had to put this back to what it was now we should be good fingers crossed there we go okay so now we have our progress meter component we have it nicely laid out within our home page and there's one other aspect i want to take care of here if i sign out i still see the component but now when i try to use the component i get errors because i'm not authenticated well one of the things that's built into j hipster which is very nice is this authenticated awareness and so right here i can say v if and i can say v if authenticated and what's that what that's saying is that it's only going to render our progress meter if we're authenticated so now when this refreshes you can see that it no longer shows our progress meter but once we sign in it does show our progress meter and now we can interact with it and now if i sign out i no longer see the progress meter all right now we're really starting to cook with fire we have off we have an encapsulated and abstracted progress meter component now the next thing we want to do is to switch from key cloak over to octa and we're going to see we have a couple of tools in our tool bag here to in our toolbox to make this super easy so we're going to provision an octa org we're going to create an oauth app within octa and we're going to see that provisioning and setting up that app is made really easy with heroku in particular the octa heroku add-on that i built now ordinarily you would have to go to octa you'd have to create uh and you'd have to sign up for an octa org you'd have to get an email and reset your password then you'd have to go into your octa org and create an open id connect an oauth application when you use the heroku octa add-on it does all of that for you so let's take a look at that in action so before i get into my j hipster configuration to work with octa the first thing i'm going to do is go to heroku.com i highly recommend heroku if you don't already have it and i'm going to create a brand new application i'll call it octa dev nexus one that's available and i'm going to create the application now this application isn't doing a blessed thing right now but if i go over to overview and i go to the add-ons tab i can search for the octa add-on and now i can click on provision and once i click provision over here we can see this these three dots are going to keep uh cycling like that until the provisioning is done it takes about 30 seconds but in the interest of time we're going to go to one that i've already set up octa dev nexus and when it's done provisioning there's a couple of cool things going on here one of them is that we have access to all of these variables all of these environment variables that we need to configure our application now this is good for two reasons one is that when this j hipster app is all set and ready to go we can deploy this to heroku and it'll just work out of the box but the other is that it makes it super easy for us to set up right now locally so i'm going to copy some of these values i only need three of them i need the issuer i need the secret and i need the client id in order to configure our j hipster app now where that configuration is is under resources config application yaml and by default it's set up with our key cloak instance that's running in our docker container so now we're going to replace these values with the values that we just copied from our heroku environment variables now that is all i need to get my j hipster application my spring boot application talking to octa just those three variables so i'm gonna i'm gonna restart my progress app spring boot app this will just take a moment all right there we go now i'm going to jump back over to our progress app and i'm going to attempt to authenticate and i'll give you a little spoiler alert it's going to fail but we're going to be able to fix it very easily now first of all we're going to octa which is good we want to be able to authenticate at octa but it's complaining that the redirect uri parameter isn't set right now for security purposes octa won't redirect just anywhere it has to be whitelisted so i'm going to grab the redirect that j hipster needs and now i'm going to go over to my octa org one of the nice things about the octa heroku add-on is that i can select the octa org here and sso right over to it i don't even have to authenticate directly to octa now this is the octa dashboard if you've never seen it and if i go to applications you can see that heroku created two applications one for a spa one for a web app the web app is the one that we're interested in right now and i want to whitelist an additional redirect uri for login and so i'm just going to paste that in here also while i'm here i'm going to whitelist a log out redirect and i just know that when we log out it brings us to the front door of our application so i want to set that up now all right now just so that we can see what this looks like i'm going to log out of octa okay i'm going to go back to localhost 9 000 which is our j hipster application and now i'm going to attempt to sign in again so this is good so far so good it sent us over to octa to authenticate and for a real application you could skin this login page to have the look and feel that you want for your brand you can even have a custom domain up here like login dot a fitner dot com so that uh you have you you can completely whitelabel octa out now the username and password i don't know they were generated automatically but i can come back here to my heroku settings and i can copy those values so that i can test out my app here so there's my password here is my username and now i'm back to being authenticated my j hipster app knows who i am it used oauth 2 to do it it used octa to manage that oauth flow and now i'm back to being able to manage uh my progress meter once again and i can sign out um as needed and this signs me out of octa as well so we've covered a lot of ground here what we didn't talk about what we didn't have time to talk about is view x that's the view j s uh pattern for um pattern and library for state management so for instance if we wanted our progress meter to maintain the its value across different components we could do that using something like view j view x we didn't talk about jpa most times your real life application is going to have some sort of persistence layer we didn't talk about cash cash is super handy to make things more efficient and j hipster supports cash and we didn't talk about deployment but with everything that we set up we could take this j hipster app as it is right now and deploy it to heroku and it's one of the great things about heroku and j hipster spring boot and view j s it's very easy to deploy it so that's all the time i have again here's the qr code which will bring you to this slide deck as well as links to all of the technology that uh that we discussed today so we should have some time for


So, the last one is sort of a bonus, metric, a bonus use case, and the reason it's a bit of a bonus and kind of interesting because what I'm finding, the people that are in the room creating these standards aren't necessarily the people that adopt them, even in the companies you work for. So it's a hard dynamic, but it makes sense in a way because I think what you're doing as contributing these standards is you're taking all the knowledge that you have and vetting it with other folks that are in the room and then you create the standard and we're all adopting. I mean even the people that were in the room creating these standards for years are still in an adoption mode and now that I was in pre-sales, all these experiences that I shared with you were kind of on that customer facing sort of role that I had just applying and using IT for IT. The role that I have now, being an R&D, is to help shape the HPE portfolio to adopt and apply the same thinking to the products and services that we sell. So we've gone through a process of evaluating our portfolio. So this is the latest diagram and in this case, strategy portfolio level two. And what we've done is we've actually mapped our portfolio to see functionally what is our coverage. If we don't have coverage, is there a third party that can cover the space? So when I go back to my customers going forward, I don't have to start from scratch. I have a reference implementation and a diagram that I can follow to say my logic is very simple. The sales guys that are out there talking HP, if they want to sell things, they've got to talk in an IT language and an IT for IT gives them that context and that language and what we're able to do now is communicate the products that we're selling in an IT language, an IT language that you understand. And so some areas we don't have products. We have to use third parties. We don't do everything. We like the thing we do, but nobody does. And anybody read the news and the rumors and see some of our last couple of years, we're getting smaller. So we're going to be doing less anyway. So we're going to have to figure out what is our core competency? Where do we focus and where do we have and maintain our products and services and where do we actually partner and use third parties? So this, for us, is kind of really a key step for some of the things that we're doing and how we engage our customers going forward. Same thing down is done here for requirements to deploy. So we've got our picture here. And interesting story. I want to stop on this one. This is request of Phil. If you're not familiar with the standard, it won't take long. You've got books in the room. This is a request to fulfill value stream and how we've mapped it. The neat story here, our own adoption story, there's a product on here called Propel. This didn't exist what three years ago. It wasn't in our software portfolio. When we were going through this process of creating IT for IT and seeing how this knowledge came together and what needs to happen in IT shops to be successful, we had a little bit of head start by having this consortium and then before it became a true standard. And we ended up saying, well, there's a product that our services folks had created. Let's bring that over and we basically hardened it as a deployable product, and it was the same name, Propel, just a different use case. And it covers these boxes at a very high level. So we were able to kind of look inside and find out what do we do, what we not do, is there an opportunity to cover some of these functions because the market needs it. You'll also see one that's not covered called usage. You can guess. I don't have to communicate where we might be investing, right? You might know where we're going to be investing by looking at a view like this. So anyways, that's our high level internal story. We're still going through that process of implementing some level of governance, some level of analysis, some level of vetting, making sure our leadership is making the right decisions to kind of map what we do to what you do as an IT shop. It's that simple. Make sense? Okay, there's my pop-up. Forgot I had to put that in there. So Propel, new product for IT functions. And I'm just going to zip through there. I'm not here to talk about our software. Just know that it's mapped. We know what the heck we look like against this. And this is how I present my use cases to customers today. When I go to talk to people, my job, I don't sell them software. I'm not a great sale. I can't sell anything. But I can architect stuff and I can use these great assets, these IT for IT, to kind of talk to customers about what they do and don't do, and do these kinds of rationalization and transformation exercises. Functional maturity, very similar to that engineering company I talked about. And from there, because you have a set of dependencies, you know what you need to do for second, third, right? So you can, the roadmap planning process is naturally, it just emerges. You know where your biggest issues are and you know where your root cause issues are. And then last but not least is this new IT operating model. I think that's really kind of exciting. That's the part that I think is very transformative. It's the lack of that deliver value stream that has caused many businesses to source their own services in the market. Because we haven't paid attention to how they like the services, how they don't like the services, what services are commoditized that need to be in the catalog for everybody to get to. We just don't pay attention to that. We're not a storefront like Amazon. But that's the experience people want. People inside our organizations, right? They want an Amazon experience when they're engaging with IT. And we don't give it to them today. So they're going to go find it. So the IT operating model changes are actually pretty profound. And I think that's going to be where most of the, I think, value is. Other things are valuable too, a bit more tactical. But operating model is, I would say, the biggest opportunity. And so here's a mapping to some of those assets and some of those things that I talk about.


Hey, what's up YouTube? I'm Zeke and welcome to The Dream Green Show. Today, we're going to talk about how much money do you need to have invested into a dividend stock in order to retire around the world. We're going to take a trip around the world to see where can you guys retire today off of your dividend portfolio. But enough talking, let's get straight into the video. Hey, welcome back dreamers. If you guys want to be a part of the dream team, make sure that you scroll down and hit that subscribe button. And while you're down there, hit that thumbs up button because it really helps out this channel a lot. So if you guys been following along in the investing world, a lot of people have been trying to retire off of their dividends portfolio alone to see how long it would take for them to retire and live off of their dividends. Well, I've been growing my dividend portfolio for about a year now. And so far on a yearly basis, I'm going to bring in around $467. I know that's a lot of a lot. I use trackmydividends.com in order to track all of my dividends.  I'm going to leave my link in the descriptions to trackyourdividends.com. It's completely free to sign up. They do have a paid version if you want to have access to more of their tools. But if you guys just want to sign up and track your dividends, it's completely free and the link is down in the description. So like I said, I'm bringing in around $467 of dividends alone this year from growing my portfolio in a little over a year. I invest $200 every single week into the stock market and I buy dividend stocks growing my dividend income every single week. In order for me to find out where can I retire off of my dividend income right now, all you have to do is go to Google, type in average income per household for each country, and then they'll bring up the average income for that country in this list right here. And as you guys can see, if we order it from the most expensive places to live to the cheapest places to live, I can't retire anywhere. I can't retire anywhere not yet. So I'm going to continue to grow my portfolio. It's a cool little neat trick that I use to trick my mind, trick my mindset to keep investing into the stock market until I eventually retire where I want to retire. So the top three most expensive places to live is Lexingburg, Norway, and Sweden. With the United States coming in at number six, it's the sixth most expensive place to live on earth. So in this video, we're going to forget how much do you have to have invested into the stock market in order to retire in the United States. And also since I'm so far away from retiring in Sweden or Norway, we're going to look at two other places that I would probably like to retire, which is Portugal and Mexico. We're going to find out how expensive it is to live in those countries and how much money I need invested into the stock market in order to retire in all three countries. The dividend stock that we're going to use in this video is AT&T, tickle symbol T. It's in the S&P 500 and it has a dividend yield of 6.88%. They pay around $2.05 per share annually on their dividends. Right now, there are dividend aristocrats. That mean they have increased their dividend payouts for the last 25 years every single year. In fact, AT&T is on the 36th year of increasing their dividends. So they're well on their way of becoming dividend kings. Dividend kings are companies that are in the S&P 500 that has increased their dividends over the last 50 years. So AT&T has increased their 36 years. So they have a little ways to go in order to become dividend kings, but I think that is their goal in order to reach the dividend king status to become part of the elite dividend groups. Right now AT&T is around $29.95. So we're going to use this stock which is a pretty good stock, a great dividend stock in order to see how much money do we need invested into the stock market in order to retire in the countries of your choosing. The first country we're going to look at is the United States of America, the USA. The average income household is around $43,500 per household.  A lot of people would like to make much more than $60,000, $70,000 per year retiring off their dividends, but you can live in United States off of $43,500 and retire with that money and live a somewhat comfortable life. So in order to make $43,000 per year from investing to AT&T, you would need 20,954 shares and with each share you're going to make around $2.08 per share, meaning that you will have to invest $627,500 into AT&T in order to accumulate that many shares in order to retire in the United States of America. The next place on the list is Portugal. I see a lot of dividends investors starting the fire challenge in order to retire in Portugal. It's a pretty cool city. They have pretty beaches, cheap food, cheap houses, and it's an amazing beautiful sight to see over in Portugal. In Portugal, the average income household makes around $16,000 per year. So it's a big drop off from the United States, but you'll be able to live comfortably over in Portugal with pretty sights and pretty beaches and it's much cheaper to live over there. So that's why a lot of people are choosing to retire over there because it's kind of easier to get your portfolio to the state to where you can make $16,000 per year and dividends along. So using the same formula, we're going to take AT&T and invest all our money into this one company to see how many shares we would need to live in Portugal. Compared to the United States where you need over 20,000 shares, in Portugal you will only need 7,781 shares. So it's a dramatic decrease. It's a big difference in order to retire in another country than it is to retire in America. 7,781 shares come out to be around $233,000. So you need to invest $233,000 into your stock portfolio into AT&T with a 6.88% dividend yield in order to retire in Portugal. I find that's somewhat believable. I could save up over the next 5, 10, 15 years in order to get my portfolio to $233,000, invest that into AT&T and retire in Portugal in the next couple of years, well before I'm 50 years old. So that is why a lot of people are choosing to retire in Portugal. In the next country on the list is a place down very interesting and the beautiful country of Mexico, Mexico baby, it only costs $11,000 to retire in Mexico. $11,000 is the average income. So to be exact it's $11,680 according to Google. Now living in Mexico is a big difference in between living inland in Mexico and living in Cabo. I really want to retire in Cabo right there on the beaches, on the love bridge, on the love beach. Cabo is an amazing place to visit that I really would like to retire in. I know the price is going to be completely different than the average income of Mexico, but right now we're just going to take the average income of Mexico and use the same formula to see how much it would cost to retire in Mexico. So in Mexico you will only need $5,615 shares of AT&T in order to retire in Mexico. That is $168,000. A lot of people spend more than that on cars. I don't understand how they spend that much on cars, but they spend that on cars. Maybe that's what they're very interested in is cars, but a lot of people spend over $168,000 per year on stuff. I could see myself growing my portfolio and in the next couple of years in order to get to $168,000 invested into AT&T. By the time I do that AT&T is going to be a dividend king and I'll be able to retire on the lovely beach of Cabo. So yeah guys to sum that up I use trackyourdividends.com. It is a completely free website that I'm going to leave in the description. You guys can sign up if you want to. While you're down there hit that subscribe button and become a part of the dream team. I have a lot more videos coming out soon that you guys don't want to miss. Down in the comments section you guys tell me what country do you want to live in and tell me how much it would cost in AT&T shares in order for you to retire in a country that you live in now. So don't be discouraged that you guys have a small dividend portfolio just compare to where can you retire at today and then continue to grow to your portfolio until you eventually reach where you want to retire in the future. But other than that guys leave a big thumbs up if you liked this video. I'm Zeke bringing you the dream green show and I'm out. Peace.


ítulo igher  applied to life and pleasure 〜 फ पवादी 〜  neglected by Pakistan 〜 〜 मने नान री 〜 Josh Bud La 〜 दा बाबो ँो डीग को every turn. 〜 आ पने वादी णाट़्ा नादeka तोगा since coming 〜 ऎंका सन्सा Buddhist ג conten  residents had been removedثر than the likably  dram 就是說  utar fsors the glittering political system umpar the excitement decreased ーい ก warn jun  έχ मम्ःandom रूँ � griev। पर्श्ळ मब खुत ार ल cand  गचा थम ます । 종on twopeople सातते है भी तसा 男PE Lucky चर्छ़ी या थ Troyरा countrySON Lukhli ने कॉ� まहती स्ब्ज्उप kite peshi-yai-routal दिए पर षाहड़ तूब था बकज़ीस मesis al-There is a big gravitas sub Goddess. वी स्विजे 9 वाई के सिन बार्सार्इ तुम �ionesप् CAD. आश् Bock, साध क्या ररूए तू�最 end of leaf & CQ eyes. तो सव्वा बार्ऩा putting under来 and  Darkness Beating Young Women ī Li Bian  triple   triple  triple  triple status six six six six six जी zumindest थी बमगरी फलıkt ड剂pe्टि ओगी आप्दे कि Familien ॉज़़ाा. नदन्बस्डव र�す कंट्रयो मआदी कि जवागषे नंची होए दर झा नदग சिनग लगा जी द्याल जी रषे की बै� each白  तो जќ़़ा बागा दर गूँनदे क ला सारे.區 of work is being finished for us. So i call my colleagues to dispatch us at 6 a.m. & inform them that our office is operating for the crime scene. So Tech is being shot over nine o'clock. De Kids are having lunch here at 6music. I call my colleagues to מה is it for us, test the CSOOOO, along with them, may I be happy and present. प्रंथो तmee ड़ने स् unw pay от moza. , ڈ Roy mx  beispiel  epile�  Cass plugins warned us with security measures  cran we should have için  Upper loan agreement ội ologne is being ablettered  син � 01 Kar Me K호-tani khele  удоб concentrate on our алеṋ  व कर AMP आए अत प् Oreo  सम यान मातगे  हम सब आम वित वि ना  सम और बात की ब वार गा अक तु�ali तुई रहा है.pend, perturbment verzite, प्र charac रके, ब्रक बक://pANAekur ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ  patience okol time water okol time water আতাসেবাসে আতাংঅ ঵ানিযাযুনে ইিনেযা তিযেযা তুযাযুনে এনি দাবুব আতাপুনীাযুনে তিতাপাধুনেবুব. ইিনা�ickনাসিআতুনরাযুনি আতিসি hnжگ fading  Guinea 7 & 8 & 6 & 9 & 39 & 13. �시  Fortune   panthuk                                                                                ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ ौ


OK, first thing, what is a Gnusda Publication Project? The Gnusda Publication Project, you see the URL at non-Gnusda.org. It's a reasonably old project, which has been around since 2002. Currently, it's under the process of being conditioned to a full Gnusda Project, after the question of Richard's climate himself. So you heard me and I'm proud of that. And we are making certain things out. Probably we will split up the project in two, and decide which part go into a full-blown Gnu project, and which will remain on Gnu, which still means it's open source project, just not under the Gnu umbrella. And probably we need to change the name. You can find us sometimes on our IFC channel, which is just because we didn't like the noise on the Gnu step channel. Now the Gnu step channel is so silent that we don't have the noise problem anymore, but it's useful because people sometimes expect to ask questions, and if they find us on how they return to the line. But in fact, the goal of the Gnu step application project is to fill the gap which Gnu step has of lack of applications. Because Gnu step has many users. So it's such an extensive framework. Some people just used to develop for it and target a specific platform. But actually, since it's an open step child, the goal of it is to have a complete test of environment with it. Since this is not the explicit goal of the Gnu step itself, which provides Gnu step project, which provides the main libraries and a couple of useful application and developer tools, the rest is to be supplied by other ones. Since picking out applications from different projects is always a mess and confusing for users, because you never know what to get things. Projects started to cut up and give up consistent environment. I don't know if we are the oldest of the background is older than us. I just know that that one is almost old, and so older, but I think it was a funny death. Yes. Officially, it's not there, if you ask them. But they didn't release something for two years or so. So essentially, we can express that the Gnu step class gap gives you our own space. A bit so amazing we don't have a window manager and some tools are missing, but they should have a usable environment. What didn't go up? The project originally started as a porting repository. So Gregory John Casamento, which is currently the Gnu step maintainer and project leader, he had the idea we would look for open step code and port it to Gnu step. Theoretically, it should actually compile. It's not that way, but what we discovered is that open source wasn't around then. It was not going down. So there is no more source of many of the three open step applications, which is sad. Some source code is lying around, but the authors are not willing to give it away. So we know a couple of applications which we do want and which we don't get, because the authors say, oh, the code is messy. I don't want to release it. No way, Gregory. Many times, just give it to us and we'll clean it up away. And finally, so this project is a bit on a dead end. So if something comes up, we will do it. But currently, it has been lying around. Of course, the application we will have, like a time monitor, which is a CPU monitor, has been ported, it's maintained. And so now we have the Macintosh code. So the applications come from that side. Sometimes they are a ban on project for Mac, not maintained anymore. We can just rescue them for them. So this is the other point here, rescued by other project. Sometimes people start a project, code a bit, and then we remain there. This is typical of open source. We have many examples. Sometimes these applications are fine, or even depend on them. And you don't have a place to download them. Nobody even patches them for, for example, trivial API changes. We have no steps. So essentially, it's a bit top, which is a pity. So we try to cut them here, and we have a couple of them. And we at least maintain them functional and improve when we can. So this is, I think, important for the end user experience. Because in one place, you cannot load them. And the applications, especially when we write an application, we will put in here. Like I said, I have not started any extra product anymore. Everything which I have to write, I put it in gap. So what's been outside for historical reason or anything there, application, utilities, very much everything which is needed. The goal is not to make something which has a lot of kits, where we depend on, so you essentially need to install the whole project, which is a bit more required. We try to be more lightweight. This is maybe not so exciting. We don't have so many extra features. But the idea is that Knustep actually has enough feature API features that you can write complete application. If we need a library, we will put in here. So complete this. Key people. Gregory Jones, as I mentioned, needs to be mentioned, because he is a founder in the project he does. So he needs to know, he is in the space and put in countries here. So tenders. And he will be disappointed with his body. Then it's me, I'm a co-leader. And I wrote most of the new applications, because Greg is more than 14. And I wrote original applications, which is like this Gucci, FTP, database, and battery monitor in other tools. Then there is Adam Fedor, which is a former Knustep project leader, and a gifted programmer. He's a five-person, but he actually maintains a picture of them, which is a very nice and cute application. Other people. Some are past committers, which disappear into nothing. Some are not very active. They can report, can attend, and they appear for six months. And of course, all the original authors, which I don't mention here, they're the authors. Not a long list of active developers. And for the first application, the Panamagica, it's an image viewer tool. It was inspired by xv. So you just open it. If you open an image, you have a list of images. You can click. It's in a single window. So if you have a list of images, make a slideshow in the window, or you can make a full screen. And it's currently, as far as I know, the only full-screen application in GNU-STEP, which is many images, and it works both on the Mac and on GNU-STEP. Because the main goal we define about one year ago is to try to port every application in both on Mac and GNU-STEP, the demonstration that we can do there. If it makes sense, it's not, of course, a system-dependent application. We won't do that. And this one walks, even the full-screen port walks on longer than this. Can I? Come in, come in. We should have a screenshot here, but since we can see some of this application live afterwards. It's also a reference for people, for example, wanting to make full-screen port and scaling port. It should be a lightweight tool, I think, especially. And there's an FTP application. The interface is pretty standard. It's a two-paying, low-climbing mode. It tries to implement the complete FTP specification, which is hardly found in modern FTP clients. It has both active-passive and default modes. If you ever hit them, they do work. And there's a special note here. It has been ported both to the Macintosh and to Windows at one point. I wrote the whole core socket code so that it can work with Windows sockets. Because I used plain, unique way to do it, and it was destined to work in hardly on Windows. Even if it should, it didn't work. No way. Now it works. It has some if-desk, but this application actually works on the Mac. On Linux, Unix, Solaris, and Windows. This is a major demonstration of the power of the core kit. It may not be perfect, but it's a useful tool. And I think they only maintain the FTP application. There were others, but where they are now, I don't know. I use it daily.  This is a very nice application. We are playing with that before the beginning. It's a vector, it's an application. I need to credit the original author, which is Enrico Cessale. He's a very politic Moonstep author. He wrote the World War Space, System Preferences, and other utilities. And he started this application eight years ago. I think it's from 2000. It was called GDO. It was written when Moonstep was still limited. It was very open-step-specific, post-coded code. And the application just remained in beta for eight years. It wasn't even completely functional with that updated Moonstep. And completely respected code. So it has a code class here. It's clean now. You can expand it. All the comments were written using the ZEPA. So it can also work on Poco, because Poco doesn't have displayed post-coded anymore. This is now portable code. The performance is good. Nice. It's really, it's a similar tool to this medium. For example, you can't do all circles, because what's in there, it was a portable original. So it did not get extended. I made it work. What I'm doing, I made a box walk. What's was to make a box walk in a clean way, and into the store, all the editors. You can save the format. It's compatible with the one format, even if I don't think there are many ties around. Of course, you can print. It's a document-oriented application. I think it's a nice application with a reasonable potential, it still needs some work. It's not official now, so you don't have to make yet a release of the new version. This inner space, this is a regular, personal toy. This is black space implementation. So essentially, you have a screen saver running on your desk, but maybe it's not very useful, but it's nice. It was a GT open-step application, and now you can use that. You can animate back drops, and the modules are compatible with the original version, but there are a couple of modules. Not all are included, because not every module has exactly a license, because people drop them in open source without giving it an open source license. So we can't include them here. And this is one of the problems that we might be able to move part of, probably, to take them out, or leave them somewhere else. Of course, it's easy to write new ones. Pictureframe is the address, the catcher. It's called Pictureframe, because the ultimate goal is to make a digital pictureframe. So it takes a screen, uses an old laptop, and made a nice one mount to the player. And it looks very nice. On the website, there are pictures of it after you're walking. This is actually a screenshot. And she did some nice blending code. It uses alpha channel, and it can display additional information, like how time, when you shoot the picture, whether it's, of course, intended to run unattended as a calculator. It uses, of course, a vast quality notation, because this is what I use. HP calculators are just superior, and I made it one. I was totally knuckling a real scientific calculator. It's not being elated under this name, but you could look for it with an old name, which is LPN Guy or something, but it's the same code. I got a change of license from BSD to GPF, because somebody asked that. I think it was Guy, or if he has a little better memory, he's going to be GPF, and BSD is too time-considered. I like BSD, but no, they're not sure. It has a couple of shortcomings, not as much in the Mac version, but in the Newster version, but it's really, really minor thing, because it's the same. There's only all the kinds you swap. There is only one thing which bugs me about this kind of one that's pretty obvious. There is a mathematician who can have a discussion on how to implement the exponential function for non-integer numbers, but I don't think it's interesting. It's just a personal problem. This is maybe the fastest class of application lately, and probably the iPhone, because the rest of the code is still unreleased. Because it's changing, it's overalder. As we discussed for years, we like to have an active Newster browser environment for two reasons. First, because our browser is expensive to have. Second, because it acts as a testbed for the underlying HTML framework, which can be used, of course, outside of the browser, because it's everywhere when you want to display hypertext. In this case, we use simple WebKit, which is a complete implementation in pure Objective-C of the WebKit API format. So it's a complete scratch on the item, which is, of course, a major goal. But it has many advantages, so the performance is cleaner. It's not Objective-C++, so it can run from GCC to an active-fibre app, which means it can buy some embedded devices on different platforms, so we can support a much wider audience into them, that's all. So it's nice. Since it's WebKit-compatible, on the Mac, you can build the browser. Again, simple WebKit on Poco, or even WebKit inside. So this helps, of course, debugging. And we can even display much better pages. The interface is extremely simple. Currently, it just has four buttons. History, but it has bookmarks, and it can read and write Safari bookmarks on the format. It is just convenient, because you can use it as a screenshot. So instead of page each other, it's already reasonably walky, non-substantial compliant. It's coming up. Not to speak about the browser itself, we can play to present a simple WebKit. They want extra additional information. Then we have terminal original answer from Backbone. So here we actually made use of the open source concept. We can take other GPA code and put it in our project. Because essentially, Backbone wasn't maintaining it correctly. They did not accept some patches. It was not affordable. And so at the end, I just put it in. I asked the author many times, and it was just not progressing as we wish. So we made compile the latest new step to O-Version, which was a major shift in Mac-wise. We added I-Version, I added code to make it compile in the platforms in the project. The emulation is based on the Linux kind of emulation. So for Linux machines, it's very convenient, because it's extremely comfortable for us. But it uses codes which were not available outside Linux. And I wanted to place them for this course, so I put them in Solaris. I know we have a user which uses them in Solaris. It has been a long requested function. It's a multi-window 10 minutes. It's fun to 10 minutes. It's usable, and it works very well. Others framework, which is sadly to say a rescue project, because the developer was brilliant, but I think he got busy with other projects. It's an implementation of the address framework of Apple. So API-wide is the same, essentially. And it has a front end. So the main use is, of course, the address book, but it provides the other services for other applications and new menus. So there is one major application which is framework. And this is also the most important reason why it needs to be kept up to date, because other alignment, I think it's very convenient, especially on Android devices. You want to have your addresses ready. Small utility for who uses laptops, battery monitor, time monitor, remote desk. These are small applications. I'm going to check the whole page. Battery monitor just uses your SDPI to display your battery status and some battery information. Time monitor is a CPU monitor. Remote desk is a front end to a desktop. So if you need to connect to Windows camera services, what's convenient, the time it doesn't set up online. It seems better. Flexi-sheet. The support. This was an application already written for Coco. So it's open source, a very long source watch. But the project's told me on the auto. And display. We wrote him. We are able to contact him. And we have the office of permission to put him in our project with SDPI. So it's fine. It's a quantity-stack spreadsheet limitation If you know one flex, it was a special kind of spreadsheet written for OpenStep. At the time, it was a major or sort of lotus input. They had the same concept to complete the spreadsheet. There is an innovative way of looking at spreadsheets. Let's see. Yeah, I should understand that it's not that clear. It's different for myself, because you can write that set here in columns, and each row is a Bucer data set. And then you can drag and create different views of the same data. So Excel eventually copied it to the Pivot table. But this one is actually more convenient. And the formulas are not written inside a cell, but they're global for the spreadsheet. Because so when you drag it out, and you change the view, essentially, you have a queue, and you are slicing it. It's a simple way of looking at a data queue. Can I call it a hypercube, more dimensionally? Essentially, it's a hypercube. And the formulas need to work on all the faces of a queue. This is why you can put them in a static place. Currently, the application is reasonably working on the map. Unfortunately, they auto-left it like a bitters page. So what we need to do is clean up the existing code for blacks, because there are some, even on the map. Identify the faulting difference between Cocoa and Knewstep, and either work them around in the FlexiSheet code itself, if it doesn't come to panels in Cocoa, or improve Knewstep so that it's a part of Cocoa features. We have a fairly good job, because the application started working here, which was six months ago, I wasn't thinkable, because not even the window was coming up. We are using complete nip, so we did not rewrite the interface. We did not change the code. So we just alumni file, and some details, but very few. So we had yesterday a presentation about portability. And this is a good example of how you can even rewrite the interface. Eventually, we have to do it to tweak some aspects and some fine tunes, but the general approach works quite well. The code itself has been made portable, because Mac programmers are quite sloppy. I've seen them on other projects. It wasn't the Mac that's fine. The Mac has one architecture. Now, OK, it has two, because it has Intel. At that time, it was just obviously, I think. So the code is absolutely reliant on a specific way, the API works, the processor works, the operating system works. So it needs to be made portable. Because currently, for example, it works reasonably on Intel, on Linux, but we tried on other platforms. We made it tweak. And at the end, everything is done. We make a release, and we can completely miss features, because they are missing features and expand applications. I think it's a major application, which is interesting, because there are currently no other open source at China Pixel, so if somebody is interested in this kind of spreadsheet model. Another portable project is Bing. It's called a simple working process on this project is called Gregory. This tool is a co-op board. We took the last version of Bing, which runs on 10.4 map, and called the code and put it in here. And this goes in the title down the wall, because it doesn't even have a main track. We used directly a PBX bit to build the X code. So it's pretty much the extreme way we do it. Completely unmanaged. Yes. It has an if-desk in the port, currently some of them can be removed. And this complexity really prompted a lot of work. Minor and major include the 2B protocol. And it's almost usable now, so it's very nice. There are still some bugs, which prevent it from daily usage and save problems with the FTF panels if you have images and X, but it will be walked out. And this is too easy. If you don't want to use text editor here, for example. Very simple. The screenshot is the tool that I guess might be used. The main will get interrogated from the man. Of course, they are separators, which makes no sense in the rest. But it works, so it's very good. The good thing is, before you have the same application on the Mac, and on GnuStep, which is the core of the GnuStep application project, you'll be able to provide this. It's much easier to exchange data. And you may have a Mac laptop and GnuStep workstation on the other way around. We have a couple of games, which are written by a gifted programmer and maintain them in the end of the speech on the GnuStep games. You can just play with games in the end of the speech. But the future of the GnuStep application project, we have another couple of applications we want to implement. They are actually had written, currently, but not maintained, because we shoot the tool. The last project, we have, like, TaxiSheet and Nihar, and Best Putschia, are consuming all of it because it's so big. And also, because this application I'm not so blocking, but it would be nice to have a login, which would be one way to implement it would be to be compatible with XQS Player Manager, for example, so it wouldn't be mainly unique, super simple, accessible for all of the booking. We are thinking about thinking starter for the end user, so if you don't want to use your distribution packages, which is one way to do it, we want to have an installer which just plays like the other one, but a bit more advanced because it should be able to handle different architectures. So the best thing we have our draft for that is to have a single travel, which contains, for example, Solaris, Linux, BSD, PowerPC, Intel, and then an installer which is for the point one. Dependency tracking and uninstalling our plans. Apple doesn't have them, we don't have them. Yeah, we have to do the pushup, or pushup. Some people say it's not useful, because maybe you want to have an interaction with the distribution installer that depends. Either use completely that one and the using installer, or if you have a clean environment, theoretically, you can just, if you just have genus that you just can use or install, you can install the system and mean how you use it on the Mac. I think it depends on the user. If the user wants to have a GNOME environment, or maybe Ubuntu, or what kind. It depends if it's a mixed environment or not. It's like if the user decides to use some environment and some packaging tool, maybe you should provide our programs for those packages tools. And somebody who wants to use a pure, pure, twisted environment can then use GNOME. It's not a goal not to provide packages for other distributions, if you want to set a kind of environment. And there's another tool which is an app that configs. The idea would be to have a tool to configure and mount an app that's just a convenience. Other applications of the same kind flow in the air, like system administration tools and systems here. So not portable applications, but which are convenient.  We're very tall, but first we make amounts of things about the editor, but sometimes it's handy to have a web editor for writing documentation. So something lightweight, we made it something really lightweight, where you write FTI to just write your titles. Not a complete CSS, not a real irreplacement, but a handy tool. Just to avoid the landing machine error. Yes, exactly, because often the goal is to have HTML in widespread use. It's a job effort to do, so you have documentations, program head, notes, in HTML. So that's what it is, tedious. Some people request an instant messaging application. Some people want Java, some people want Microsoft Messenger, Yaku, ICQ, and you can't name them. There are so many protocols. Even next projects have paid for that. So at the start, they work for a bit. They become uncomfortable, because they depend on some libraries, as libraries are not contained anymore. So there's a new one. It's a Moot area, and pretty people have started to work for it. More obvious of these applications. We have a big failure over Scratch it, but maybe not enough. But why do we have this with us, of course, is a big task. We have a Lighthouse application for Sun. We will never get them. We will never get them. Some people still dream of that, but that's not going to happen. So maybe that's not a passion, but if GNOME step gets more less documented, that might be a point to work on, because I think somehow people expect it. I mean, KDE has KO is in GNOME. You have GNOME office, because you have GNOME marriage, of course, there is open office, which is alien to everything. So everybody has an idea about it. And we'll see if other developers come in, they might bring your ideas on. Dictionary tool, because it's just a way to. There was one under OpenStep. We might think there is an OpenDictionary format. We were also thinking about something which integrates with Wikipedia, for example. Just something where you can get a look up in that space. The digital website application. You're thinking about the digital website application? Yes, it existed. There is already a translation dictionary by Robert Burns. So there are ideas for things around it. So of course, neither pressing, neither unessential. Nobody can do it. I mean, if you have it, you need to look up on the water. That's it, essentially, as far as gap goes. OK, you had the eyes on the list, which is an amazing location. I can present that in your presence. I have also a couple of sites on Simple Electric, which might be of more interest if you are on the web. May I ask some questions? Yes, of course. OK. How about a license? You said that you changed one project license from BST to... I can do that because I'm the original author. Yeah, of course. But why that? And is it OK to put a BST license project into the gap? Theoretically, it's OK because Sarana just requires an official open source license, which PSP is. But if we have the political change license, we prefer GPM and GPM. OK, that was decided by Gregorian. Essentially, I agree with it, because it's clear that way. And it's competent with Githniusdip itself, since we've already had license problems in the past. It's better to avoid them at the beginning. Next question. What about Knoome app? It looks like it's abandoned. Nothing changed over a long time right now. Do you know what's up with the author? The author is still alive. He says he has patches. If you report problems, he has an attitude that's saying, always a thing, no step problem, which is not always true. So it's a bit of a game. Whose fault is it? And I don't like his attitude in this case. It's a brilliant application. I think it's one of the most complete applications we have for Knoome app. I used to use it every day, all the time, under Knoome's. We don't have plans to import the app. We don't have the resources to track another big application. We have plans, actually, to rewrite the code. The whole group is hard-coded. The whole group is hard-coded. So on the Mac, the multiple users' nips and the new step fault uses hard-coding of GUI, which several applications do. Tamina is also completely hard-coded, because some author like that way. And at the end, we need one idea, gradually, of course, because it's a government-coded instance that everything should use to run. For Tamina, we already have the idea to write the interface to use to run, because it's normally never translated, because we are going to provide translations. Because some people request translations, which is of course correct. And with Go-on file, it's easy. Just provide another Go-on file, a language file. Do that with localized pain. You can do it. It's a useless pain, probably. And the same should be done for Knoome. But the idea is, if we do that, and we send him patches, what will he do with his patches? OK, he's not very... He's a positive, correct channel. He has a clear thing. He had provided 90 tablets on his website, so... Yes, they're not thought of, David, but it's much better than the last release. So it has features like better eyes. I don't know why the release never happened. Maybe you should poke them a little bit. We do that. Maybe I'd make myself two or whatever. Yes, maybe if it's always the same casting, poking in the world community is important, because I know that it has a wider usage here. The guy was contacted by Apple to pitch Apple Mail, and especially the mine thing, or Hunter Mine, to use the Apple. I don't know if that then it happened. That's a piece about the quality of his mine thing. OK. He told me that one. It's used by some colleagues of the mine, the pattern I'm playing on. Yeah, I do use it. Yes, but... Do you plan modernizing the interface of several applications, like adding the toolbars and stuff like that? Some only have the toolbars, some are incomplete. Yes, I know. It depends on applications. For some applications, definitely I'm going to... Definitely update the Grappos interface, which is updated and complete. And I want, first of all, to release like this, the original one, and then I plan to change the inspectors and update it to sort of be more coir-like in the loop, like use colorwares, liners, instead of... Do you know, in terms of the remarks, do you know Bookmarker, written by Marcus Miller? No. It's a small bookmarking application, which... What's the word in it, in English? It's heading German and... Provide and... Manage? Oh, yeah, which manages your bookmarks, and can open bookmarks from visiting the application to central place to manage all your bookmarks. And he ported it to Knuster once, but then he ended up... There's a use for it at Knuster, because there's no Knuster application who opens or sends them URLs. So maybe you should talk to him? We can... He's not around here at first, no? He was here yesterday. We can talk to him, because... I added an experimental support for services, if you know Mac, you know there are services. And on the Mac, you can already use the scoochie and say, open URL into... So it should be easily integratable. And I try to hack this on Knuster and it works. But you have a URL in mail, you can double-click on it, but you can select it and say... Which is a bookmark application. Maybe you could use... I don't know if he integrates, for example, with Safari. I don't know how he does it, but we can talk. My feeling is that it's competent with the Safari one. There's a sensor... A little bit given up on it too, because there's not much time for it, whatever. We could ask him for it. If it works on the Mac and it's... One of the key words of this integration, so the more we integrate, the more complete the user experience is. Did you look also in other projects, from the Mac side, like CyberDark and Colloclue? CyberDark is an FTP application. I don't know it. Maybe I'll show you it later. I remember... Yellow Dog. Yellow RubberDog icon. I remember CyberDog as an open-dog web browser. I mean it's like a duck. It's like the Donald Duck. No, the only FTP application I know was Wypo, which was interesting, but sometimes it was open by design and it implemented only possible FTP. So I added it up for every month. Do you know Colloclue? I don't know how it's... No, I don't. I know it exists, but I never used it. It's a chat application. I think the Atari guys use it. Yeah, they use it. It has support for that special protocol. The Atari guys use this slick protocol. But it's a Cocoa application and it could be... Maybe it could be ported. Maybe it could be ported. And then the OpenOffice guys are planning to use Cocoa for the MacPort. Actually, I know there has been talks about that, but I'm not sure. Presentation of a simple webkit. Yes, we can. It's going to be fine. This is the core of this bootchip. I said the goal is to provide a represented engine support and it's part of FunoStep. So it's not just a project. It's under the FunoStep. The main author is Nicolas Schaller. Managers, founders, you're called delicious computers. His main goal is to target 100 devices like that. He's a big business computer. He's the important of this state of computers. He works in the open mode of DAOS and all those small and nifty tools. So he needed that. It's more of an engine. He's the founder of the main programmer for the work map. It's me. I'm the tester. I'm the guy who insisted that he put his code open source and FunoStep, and I maintain the core of the main files. And since I use it in this bootchip, I also test. That's hard. I also mentioned Fred Keeper, which is a Korean bootman trainer. He did not write a single line code in simple webkit, but he has been very kind in fixing bugs and completing GUI so that it works. Because the webkit engine is really taking out the maximum FunoStep GUI. Because it uses a text-active NS text-optic thing inside the text cell to display the world web page. So it's an interesting approach. It works. It can work, of course, in the other bugs. Can it be future complete in the end? Can it display tables and stuff like that? Technically, yes. It can. It's not. Tables is the most complicated thing. But it's half-working on Mac 10.5. Mac 10.5 has a table, which can be embedded in text view. So since it can be done, it's just a matter of putting it. OK, it's not in Moostop, it's there. No, not yet. So what the main features should be our web comp, but it will drop in the placement. So the API is exactly the same. And in fact, the most basic as it's putty on the Mac can be combined either with the Coco webkit or simple webkit just by linking different target, Iran, and the same nation world. It's not the same binary for the original, how Apple manages frameworks, but it's not a big deal. Strong points. We are cross-platform, really cross-platform. Since Moostop is cross-platform, and the code is entirely based on the code libraries, we work on Moostep. It works in Coco. So the author continues to check the same code on Coco, Moostep, and Mystep. So we see the differences. What is Mystep? Mystep is like a smaller cousin. Moostep environment optimized for very small devices. So it's for handheld, hard devices. The author is here to show it. We are tested on many architectures. Since Moostep works, we have to do some Solaris on PSV, pre-PSV, open PSV, Linux, Linux PowerPC. Some platforms were not so easy. For example, we know that Spark has issues with nil structures, and how they help it when we work. I don't think that it works as well, because they don't need to. And pure Objective-C, I will say it loud again, it's no Objective-C++ search. Apple made another minion. It combines from GCC to 95 upwards. So this makes us extremely portable. And having support for all the compilers is very convenient for the angelic architectures. So on Linux, we have always four, one, or two, whatever. On other platforms, it's not always the way you're there back. So it's convenient to support any compiler. In fact, we run on Perth. We are one of the very, very few browsers that run in Google Perth and work. I hope we still work. We worked one month ago, so. And as I mentioned, so that is 2.5 on Spark. Let's put your hands. Open DSD Spark, where there are very few browsers that we run. This put print is small. So the answer to binary is between one and three megabytes depends on the processor architecture, of course. If it's a bit bigger, the size goes down, probably. This is probably the heritage from being an embedded framework. Possibly uses browsers, but still. Both on workstation and handhands. So the goal is, for example, if you need to run it. But it goes farther since the WebKit and the goals are similar to the WebKit itself. So you can have help and documentation viewers with HTML. And one of the expansion to a transit new mail is to support the viewing of HTML mail in mail applications. We have to ask Ludovic to look about it, because, currently, the framework is something simply to support, at least a simple email and HTML attachment. So the rendering of simple styles and headers is enough. So it would be already a big improvement. And another usage is like kind of, this is not implemented. It's not like to-do list, because everyone wants it and nobody wants it, so I can record it. It's in my step. So you must have been supported for sure. That's a matter of writing it a bit differently. Converting HTML to an NTR document. Since we display an NSR to route it today, you can do that conversion. And it can be very convenient sometimes. But in the future, we need to fix some essential issues like line items, tables, there are some bugs. We do have potential for JavaScript support. So, overalls are probably much wider than, for example, other embeddings, more cloud-less like dildo. Maybe you should ask, talk to David, she's now in this very advanced, but when it comes to runtime. We can learn with pictures and stuff like that. And you implemented several languages and scripting stuff. And maybe it's the right thing to talk to. We have JavaScript interpreter, so that one is pretty good. But we can at least pass the syntax much better than other simple browsers, of course. It's not Mozilla, but the little boxes of pages where we at least don't display anything because we pass code to the page. And another thing is CSS, at least inline is tiger. So complete CSS support is very difficult. But modern HTML, they call standard HTML attributes as CSS inline. And so it's still HTML as far as features go. So the dump tree you get is very similar. But it's written differently. And right now it's just ignored. So I think that should not be too difficult. And of course, tons of bug fixes. In the long-term roadmap, so where we want to go would be nice to have a complete JavaScript support, at least as far as ECMAS script specification goes, which doesn't mean you can do any JavaScript page because there are so many queries and works around. But at least you know you have some JavaScript you can use for example applications like Help. And most comfortable pages. CSS one and two is only to do this, but that will be probably the most difficult part. Speed improvement, there can be many. There should be auto optimization of the parser. And in the way we display it, because since we use a text view, we need to be a bit smart on what we are doing. Otherwise, we spread the text view. Throwing it back a bit too much. Other bug fixing, I can write it on every page bug fixing, and the goal of the author, Nicholas, is to have SVG processing because for 100 devices it can be very convenient. I know that not many web pages actually use it, but it's a nice feature, I think, because it's standard, and if you need to display graphics inside a page, it should be standard. It's not, I don't know why. That's it. That was simple web kit. And if somebody is instead interested in price, which was listed on the program, you can ask me personally, I'll go to the website. Other questions, I think I will end up on time. Yeah, Tim, so. Everybody asked, came late. We can see some applications live. What's next on the agenda? Next is Quentin in exchange for Nicholas Rott, but he did not show up yet. If he did not show up, you can look at Graphos, which is a drawing application, where you can show vector drawing using NSPCA path. These are squares, but I think they're all NSPCA path, and of course, more exciting, the CFS port. Here, we're using the art backend, which just optimizes this kind of practice. Anyone who's very moved and is very happy to zoom, I guess you should be able to zoom, maybe it works. But it's a good starting point for the application. If you are really adventurous, we can try the Rancho Spudgy, if we have network connection, because we have a project for it, because of FNF and FNM displays. What do you want more? What do you want? Music related. We can check out test files and see what we can. We also see the blocks with the shortcomings we have. You should have here. We see the title here, not quite sure they called it FNM, which is a shortcoming with NSPCA path. We have support for quite complete, special characters, like Omenar to the Gatures. The translation for drawing characters is good and the translation table is quite standard complete, which was a lot of work, but there are hundreds of simple something, called within the unique code and the display. But we see, for example, at the least, it's not complete, but it's coming out nice. This is intentional that we can say the bookmax because we don't have the right to write them. That's it, questions, otherwise we wait for a point in the house. Yeah. Thank you. Thank you.