From artificial intelligence to mobile money and blockchain, digital innovations are helping us to address poverty, hunger, climate change, conflict and disease. Thus we need to reinvent and reimagine what development looks like in the context of the so-called fourth industrial revolution. We also need to rethink and reframe how we finance development in this time of profound change. I currently have the privilege of co-chairing the United Nations Secretary General's task force on digital financing of the SDGs, the Sustainable Development Goals, which examines the intersection between these three critical areas, finance, technology and sustainable development. The key takeaway of the task force's new interim report called Harnessing Digitalization is that the digital revolution in financial technology or Fintech offers major opportunities to accelerate financing of the SDGs. Primarily by putting more control into the hands of citizens. The report describes three disruptive ways that Fintech can shift the center of gravity of the financial system towards citizens. Firstly, by increasing the quality and user friendliness of relevant financial information. Secondly, by reducing financial intermediation that does not add consumer value. And thirdly, by presenting citizens with platforms for collective action. For instance, crowdfunding. However, one of the biggest challenges is getting game-changing technologies like Fintech into the hands of those who are farthest behind. Half of humanity still lacks internet access, mostly in developing countries, mostly women and often in countries emerging from conflict. Therefore, the work of the Broadband Commission to support high quality, low-cost broadband service in developing countries as well as underserved communities is absolutely critical to drive forward sustainable development. And I'm very pleased to be a member of this commission.


If you're an iOS developer, sooner or later, you're going to have to build an app that uses authentication or more simply put, an app that requires users to log in and log out.  It's one of those features that often turns into its own project and there are so many security considerations involved that it's often better to go with the service like Auth0. So in this video, you'll build an app in SwiftUI that implements basic login and log out using Auth0. Now, I've purposely kept the app really, really simple so we can focus on the important part, and that is integrating Auth0 authentication within a SwiftUI app. Before we begin building the app, let's look at the final result. Now, I'm running the final version of the app on an iPhone 13 simulator, which you can see on my screen. As I've said before, I kept the app really simple. So it only has two screens, one for when the user is logged in and one for when the user is logged out. Right now, we're on the logged out screen. All it has is a title and the log in button. Clicking that button starts the login process, so I'm going to do that right now. The first thing that happens in the login process is this alert box. iOS SwiftUI login wants to use Auth0.com to sign in. Now, this is a security feature built into iOS. It's there to notify you when the app is sharing information about you, the user with a third party, which in this case is Auth0. Now, I want to log in, so I'm going to click Continue, which will take us to the Auth0 universal login screen. Now, this is a WebView-based screen, and it's a cross-platform page that supports logging in, signing up for an account, offering different authentication flows, all kinds of things beyond what we're basically showing right here. But since it's universal, it looks the same whether it's running on iOS here, or Android, or Web, or any other platform that we support. Don't worry about the default look and feel right now. We're just using it for this exercise, but the look and feel of the universal login page can be customized to match your organization's branding, and color scheme, and general graphic identity.  So let me log in right now. Let's see if I can type right without fumble fingering it. So I am using this account, randomuseratexample.com, and let's type in that password. Okay, and as you can see, I'm logged in now. Now, once logged in, the app takes you to the logged-in screen, which has a little more to look at. It's got the title that says you're logged in, plus the user's picture, name, and email address, which we've extracted from the user's account. Then finally, there's a Logout button at the bottom. Now, clicking Logout does what you'd expected to do. Start the logout process, which begins once again with the iOS security alert box. Now, if you choose to continue, the logout process finishes, so I'm going to do that. And now I'm logged out. And as you can see, we've returned back to the first screen, the logged out screen. Next thing we're gonna talk about is the starter project. Rather than make you start completely from scratch, we've provided a starter project for this video's exercise and you're going to need it. So you'll find the link for the project in the description below. Go ahead, download it, open it. I'll be waiting right here. All right, you're back. Anyway, I've got the starter project, as you can see, open in Xcode on my screen. Now, I'm a believer in making starter projects that actually compile and run, so let's do that. I have already selected my go-to simulator, iPhone 13, pick your favorite, and I am going to click the run button. And in a moment, we get the app. Now, we haven't yet integrated Auth0, so the login button simply just takes you to the logged in screen. And as you can see, since we haven't integrated Auth0 yet, we have no information to display about the user, so we're simply showing some default information right now, a blank, a blank name field, a blank email field, and a person placeholder graphic for the user's picture. Clicking log out basically takes you back to the first screen, so it's this app that we're going to start adding Auth0 too. Let's take a look at the app's code. The really interesting stuff, it just lives in two places. The first one's content view, and that defines the appearance and behavior of the app's one and only view. Now, there's also another file, profile, and it decodes and stores data about the logged in user that the app gets from Auth0. We'll look at that in a bit. Let's look at content view first, and as you can see, content view has two state variables. The first one is authenticated. It's a Boolean that's true if the user's logged in and false if the user's logged out. Makes sense. The second one is user profile, and this contains information about the logged in user. We use it to get the user's name and email address as well as the URL for their photo. Now, content view's body is basically a big if statement. Now, remember, I'm trying to keep this start app simple. So this is an if statement that returns one of two vstacks depending on the value of is authenticated. So let's start with if is authenticated is true. So I'm going to change its value here and update the preview in the canvas. And there we have it. We are now at the logged in screen, and as you can see, it's made up of a vstack containing a text object followed by a view that I defined called user image. What it does is it takes a string containing a URL and asynchronously downloads the image and then displays it. And while it's downloading, or if it doesn't have a chance to download, it shows this placeholder person kind of graphic there. Now, below the user image is another vstack and this vstack contains two text views, one for the user's name, one for the user's email. And then finally, we have the log out button. Now, on the other hand, if is authenticated is false, which is the initial state of the application. So I'm going to change is authenticated back and refresh the preview in the canvas. We should see, there it is right now, the logged out screen. So anyways, if is authenticated as false, we get the logged out screen. Once again, made up of a vstack containing a text view, this time displaying the title of the app, Swift UI log in demo and the log in button. All right. Now, at the bottom little farther down in content view, I've got the code for the user image view, the thing that asynchronously downloads the user image and then a couple of view modifiers to style the on-screen controls. Let's scroll a little further down the file. Now, I'm going along with a practice that a lot of iOS developers I know have adopted and that is dividing structs and classes into state and behavior with the state part going in the main part of the struct or class and the behavior part going into an extension. So I've done that here. I'm highlighting it so you can see it. Yes, in an extension for content view, where the code for log in and log out live. Now, these methods are called by pressing the log in and log out buttons and right now all they do is they simply change the value of the state variable is authenticated. As you can see from the to do comments, we'll eventually add more code to them. Let's take a look at the starter apps other file profile. So after the user successfully logs in Auth0 notifies the app saying, hey, this user's legit, we know them and here's proof. And that proof comes in the form of an ID token which Auth0 provides as a JSON web token or JWT or as some people like to call it a JAW. Now, the ID token in addition to being proof that we're dealing with a known user also contains some very basic information about the user. Profile extracts and stores these pieces of information and in this case profile is storing six pieces of information all in string form and they are ID which is an identifier that uniquely identifies the user name which is the user's full name, the one that you normally display on their profile page. Now, if no name is provided, this defaults to the user's email address and speaking of email stores the user's email address, email verify, this stores value either true or false. It's true if the user verified their email address when they were sent a confirmation email after registering for an account. Then there's picture and that is the URL of the user's profile picture. And finally updated at which is the date and time when the user profile was last updated. Now, if you look down a little further down here at the extension, you'll see that right now profile has only one computed property called empty. And what that does is it returns an instance of profile whose properties are all empty strings. You'll also see down here to do comment which indicates that we're gonna add a little more functionality to this struct. We've explored the starter project and it's now time to start adding things to it. And the first thing we're going to do is we are going to add Auth0.swift. Now, Auth0.swift is the Auth0 SDK for all Apple platforms, not just iOS, but also Mac OS, iPad OS, watch OS and TV OS. It's our third most used SDK and it accounts for about 11% of all the API requests made to our systems. If you are building an Apple device application that needs to authenticate or authorize its users, you want Auth0.swift. Now, Auth0.swift incorporates what we've learned from securing applications on Apple devices for the past few years. And if you've used earlier versions, you're going to appreciate the latest versions which include updated error handling, support for async, await and combine, improve default configuration, new documentation and best of all, we removed some deprecated methods and legacy features. So if you're new to Auth0, on the other hand, you'll be pleasantly surprised at how little code you need to write to add authentication to your apps. Let's go back to Xcode and the starter project and add Auth0.swift to our project. So I'm going to go to the file menu and select add packages. Apple makes a whole bunch of Swift packages available to us and the one we're looking for is Auth0.swift. So I'm going to enter it into the search bar and there it is, the only results. So I'm going to select it and I'm going to specify for the dependency rule here, up to next minor version. I try and keep reasonably up to date. And yes, add to project. It is the current project showing right here. So we're good. I'm going to click add package and Xcode does its thing. In the end, it's going to ask us to confirm that we want the Auth0.swift package. I'm going to say yes by clicking add package. And now if you look in the project navigator, you can see that there are now three package dependencies that have been included with the project. Auth0, JWT decode and simple keychain. For this project, we're just going to use Auth0 and JWT decode. If you like to do some exploring, feel free to start poking through the code that makes up these libraries. You can see what they do. There's also some documentation in the form of readme, but that's all beyond the scope of this video. It's time to visit the Auth0 dashboard. If you've made it this far and haven't signed up for an Auth0 account yet, you need to do it now. Now we know that as a developer, you need time to take your tools for a test drive and Auth0 is nothing if not developer centric. Luckily, you can sign up for a free account and it's a good free account. It lets you add authentication for up to 10 applications and it supports up to 7,000 users for all 10 of those apps. This should be enough for evaluating the platform as well as prototyping, development and testing. Oh, and one more thing. If you want to know how to sign up for an account, look in the description below. There's a link there. Log into your Auth0 account and you'll be presented with the Auth0 dashboard. It normally takes you to the Getting Started page, but we're gonna skip past that and go straight to creating an application within the dashboard. So in the left side menu, click on Applications and a submenu will appear and then select Applications in that submenu. In a moment, the page will appear and it lists all the applications in your tenant, right? Typically, if you're starting with a brand new account, you'll probably just get a single app there, the default app. We don't wanna use that. We wanna create an application specifically for our app. So I'm gonna click on the Create Application button right here. What this is going to do is it's gonna ask for some details about our application. In this case, it wants a name and it wants to know what kind of app it is. So I'm going to go with the name SwiftUI Login Demo and it's a native app. So I'm going to select native. Once I've done that, I click Create and there you have it. We now have an application registered in Auth0 named SwiftUI Login. It is native and we're immediately taken to the Quick Start page. The Quick Start page features a bunch of icons that you can click on to get Quick Starts, which are pre-made projects for various frameworks and operating systems as well. So you've got Android, you've got iOS, React, native, .NET and so on. But we already have a starter project. So what we're going to do is we're just going to go to Settings. So click on Settings near the top of the page and here is where we're going to do two very, very key things and that is, one, get information that the app needs to know about Auth0 and two, provide information that Auth0 needs to know about the app. And some of these key pieces of information include the domain, which I'm highlighting right here. The domain is the unique identifier for your Auth0 tenant. The other thing I'm going to highlight is the client ID. The client ID is the unique identifier for your application. So what we need to do is we need to take this information and bring it over to our iOS project. Now, the Auth0.swift library expects to find this key information, the domain and the client ID within a property list within the iOS project. So what we're going to do is we're going to create a brand new property list specifically for Auth0 values. The way to do that is I'm going to select the iOS Swift UI login in my project and I'm going to create a new file. It's going to be an iOS file and just to make sure I can find it, I'm just going to type in the word property in the search box and it gives me the file type that I want, property list. So I'm going to select that and click next. The last thing it's going to do is ask me for a name for this file. I'm going to give it the name Auth0. So it is very clear that this is a set of Auth0 properties and I will click create. If you look in the project navigator, there is now a new file Auth0 and it's a property list. What I need to do is I need to create two rows for once again, these pieces of information, the domain and client ID, both are string. So I'm going to create these two rows just as sub items of the root. There we go, two new items. One's going to be called domain. So I will enter that in the first key row and then for the second row, client, capital ID. Both are strings and now that I've got a place to hold them, I'm going to start copying them over. I'm going to copy the domain from the dashboard and into the corresponding value inside the property list. I'm going to do the same thing for the client ID. Copy, switch to Xcode and paste. Now the app knows about Auth0. With the property list, you now have given the app the information it needs to communicate with Auth0. Now we need to do the inverse. In other words, we need to give Auth0 the information it needs to communicate with the app and we'll do it on the settings page. It's just a little farther down. So I'm going to scroll down to this section here, application URIs and the information we need to provide, in particular, are allowed callback URLs and allowed logout URLs. Now a callback URL is a URL that Auth0 redirects to after the user successfully logs in and there can be more than one of these. There is also allowed logout URLs and a logout URL is a URL that Auth0 will redirect to after the user logs out. And like callback URL, there can also be more than one of these. Now, at this point, you're probably thinking, hey, wait a minute, wait a minute. I'm writing an iOS app using SwiftUI. Doesn't have web pages that you navigate to using URLs, but you've got views and you're right. For native applications, the callback and logout URLs are the same string. And Auth0 sends that string to the app to inform it whether a user has logged in or logged out. Now, the string that native iOS apps use for both the callback URL and the logout URL follow this format. And I'm going to drag it onto the screen here. So it is the apps bundle identifier colon slash slash, your domain, in this case, the domain of your tenant, slash iOS slash the bundle identifier again, followed by slash callback. So what we need to do is we need to get your app's bundle identifier. That's easy to get. I'll show you how right here. Go back to Xcode and select the project in the project navigator and then select targets and make sure general is selected up top. The identity section contains the bundle identifier. It is right here and it is, of course, made out of your organization identifier and your app identifier. So what I'm going to do is I'm going to highlight it and copy it. Then I'm going to jump back to my text editor here and simply replace bundle identifier, the bundle identifier placeholder that is with my actual bundle identifier. Okay, so far so good. Then what I need to do is I need to get the domain once again that comes from the Auth0 dashboard. There it is. I'm going to copy my domain and then replace the placeholder with the actual domain. This is my actual callback logout URL for my application. So I'm going to take the whole thing and copy it, switch back to the dashboard and scroll down to the application URII section and paste it into both allowed callback URLs and allowed logout URLs. Well, guess what? We have provided Auth0 all the information it needs, but we need to save this. So scroll down to the bottom of the page where there's a save changes button and click it. I myself have forgotten to do that and then wondered why my app didn't work. So make sure you do it. If you just signed up for and created an Auth0 account, your tenant won't have any user accounts and you're going to need at least one to be able to log into the app. So follow these steps to create a user. So going to the dashboard, find user management on the left side menu and click it. Select users from the sub menu and the user screen will appear. We're going to create a brand new user. So I'm going to click on the create user button and I need to provide just a couple of pieces of information, basically email address and a password. So I'm just going to go with rando at example.com. So rando for random person and then I'm just going to pick a reasonably strong password. Let's hope these match. The last option to pick is connection, but there's only one. So just leave it at username password authentication. Click create and we are taken to the details page for our brand new user. With that, we now have a user that we can use to log in to the app once we've actually installed authentication into it. And we're going to do that right now. So let's get coding. It's time to implement login and log out. We'll start with login. So in its current state, the login method, which is in the content view extension. So I'm searching to content view and I'm scrolling down to the bottom of that file to the extension portion. Yeah, right now it only simulates login. All it does is simply you click the login button and we set is authenticated to true. We actually want proper login. So what I'm going to do is completely erase the contents of the login method and start. Now, since we have now imported the Auth0 package and all its dependencies, I now have an Auth0 object. And what I'm going to do is I'm going to create an instance of the Web Auth object. Web Auth is a client for doing web based authentication using universal login. Or in other words, when you call upon it and tell it to do its thing, it will put on the screen the universal login screen where the user can enter their username and password or authenticate themselves in all kinds of ways. So we're creating that and then we are basically saying start, do your thing. So we will use its start method and the start method takes a closure. And that closure takes a parameter called result. And we are going to do something based on that result. The result, it basically signifies either successful login or failed login. So I'm going to use a switch statement here. This is typically what we do. Switch based on result. And I'm going to just mark this ending brace because we get braces messes really quickly in Swift UI. And we need to handle two different kinds of cases. There is the failure case. I like to handle that one first. So case, failure. And it does give us a parameter called error that we can handle. And there is also the success case. Case, success.  And I'll explain what those are when we get to it. So let's handle the failure case and it's fairly simple. With the failure case, we're dealing with either, the user either pressed cancel on universal login. So the universal login has a canceled button if somebody decides, no, I don't want to log in, I'm fine. In that case, that's considered a failed login or something unusual happened. So we'll make a note of that. And in the failure case, what we're simply going to do is we're just gonna, for the purposes of this demo app, we're just gonna print a failure message to the console. Basically say, hey, oh, something unusual or unexpected happened, failed with, and I'll just put the error there. The more interesting case, of course, is the success case. And what I'm gonna do here is if the user has successfully logged in, they are authenticated. So I'm just gonna go self.isauthenticated equals true. Now, in the earlier version of the login method, we basically just said is authenticated equals true, but we're inside a closure now. So we have to specify self. The other thing I'm gonna do for debugging purposes, and just to get a better idea of what's going on, is I'm gonna print what this, I'm gonna print this credentials object to the console. So credentials, credentials. And one of the credentials that we get is the ID token. So let's print that out as well. All right, Xcode is screaming at me. And it's saying, I can't find odd zero in scope. And that's because I forgot to import it. Let's import that right now. Scroll back down and Xcode is now happy. That's good. Let's take care of log out next. Log out, you'll be pleased to know, follows the same pattern that login does. We create an instance of the odd zero object and use it to create an instance of the web auth object. And we call a method from the web auth object to do something for us. In this case, it's log out. So once again, I'm gonna go to the log out method, our fake log out method, and we are going to replace its contents with a real properly functioning log out method. So we'll start again with the odd zero object. And we will say yes. We want a web auth object again, because yes, this is even logging out, despite the fact you don't see universal login, is a universal login thing. Web auth. And this time, what we're going to do is we're going to use clear session instead. The clear session method also expects some kind of closure and that closure provides a parameter called result. And that result symbolizes either success or failure. So we're going to do that again, just like we did with login. So I'm gonna use a switch statement, switch result and handle the failure case. So case failure and failure does provide us with a error parameter. And then there's case success. This time in login, there's no parameter. Success just means we're logged out. So once again, with failure, it's kind of a weird case. So I'm just going to print the error to the console. And then in the case of success, I'm just going to set is authenticated and I have to use self because we're inside a closure. So we need to tell Swift which is authenticated we're talking about is false. And there we have it, the logout method. So we've implemented login, we've implemented logout. So I'm grabbing my lucky Einstein duck. Feel free to grab your own lucky charm, move your hand over the run button, say the magic incantation, this should work. And run the app and let's see what happens. Oh, so far so good, Swift UI login demo. I'm going to click on the login button. All right, the security alert box, that's fine. I'm going to click continue. Oh, okay, this time instead of being taken immediately to the logged in screen, I'm presented with universal login. So let's use that user we just created. In my case, I created one called rando at example.com and my fiendishly clever password. Oh, and it worked. Okay, and we're logged in. Good, but no, we're still showing the placeholder image and we've got blank name and email and the logout button. Let's first confirm that the logout process worked. So I'm going to click logout. Okay, security alert, that is a good sign. I'm going to click continue and yes, we are back on the logged out page. So it works, but we don't have that user information yet. There's a reason for that and that is we haven't extracted that information from the ID token. Now, remember, if you look at the code for login, I had a couple of print statements here. Print the credentials and print the ID token.  We've got credentials, which is a collection of some kind of information, which I'll explain in a moment. And then we've got all this gibberish here, the ID token. So the credentials are a big package of information that Auth0 sends to your app upon successful login. There's all kinds of stuff, but the thing we're most interested in is the ID token. Now, if you ask to print out the ID token by printing out the credentials, as a security measure, Auth0 redacts it. And it just basically says the ID token is redacted. But if you print out the ID token itself by printing out credentials.id token, access the ID token directly, you can get its value. So the ID token, once again, is this thing that Auth0 gives you and it's proof that the user is known. And within the ID token, once we decode it, is some identifying information about the user. What we need to do is extract it and we do that using the profile struct. Earlier in this video, I talked about the profile struct and its job was to decode and store information about the user that we received from Auth0. Now, what is this information about the user that we got from Auth0? Well, the key piece of it is the ID token. So look back at Xcode here. Remember when we ran the app after implementing login and logout, I printed out ID token to the console. So this is the ID token right here. So somehow somewhere in here is information about the user but it's encoded and right now looks like gobbledygook. Well, let me copy this and then I will take us to a particularly useful web page jwt.io and it's all about JSON web tokens, aka JWTs, aka Jots. And one thing it has, if you scroll down here, is a Jot decoder. So I'm gonna take that ID token that I just copied from the Xcode console and paste it into this field right here, the encoded field. Boom and boom, what have we got here? Nickname rando rando at example.com. In other words, this is the user that we created so that we could log into an our app in the first place and all the information is here. We have a picture. We have their name which is, which defaults to the user's email address. We have the last updated date. We've got an email address. We've got email verified. We have this information. We just need to decode it and that's what we're going to do with the profile object. So let's set about to give our app the ability to decode these Jots and we'll do it in profile. So open profile and one of the first things you'll see near the top of the file is a to-do comment telling you to uncomment this import statement, import JWT decode. So I'm gonna uncomment it. We didn't need it in the first version of this application because we weren't doing anything real, no real login, no real log out. We were just pretending but now that we actually are logging in and logging out using auth zero we're now receiving ID tokens which are encoded JSON web tokens that we need to decode. And luckily when we imported the auth zero package we imported the JWT decode library which gives us the capability of doing that. So we've imported it and now I'll scroll down to the bottom of the struct. We have another to-do comment, implement the from method. The from method is going to take an ID token and convert it into a profile object with all the properties ID, name, email, email verified because it's going to take the data encoded within the token and decode it and then just fill out these profile properties. Now, just to make life easier because it's a lot of tedious typing what I'm going to do is I'm going to copy and paste this from method and then I'll walk you through it. So I'm going to replace this to-do comments with the from method. Now, we'll walk through. The first thing you should notice is the guard statement. The guard statement is the nightclub bouncer of Swift. Certain conditions have to be met and if they evaluate to true you'll be allowed to stay in the club or in this case the method. Otherwise, you will be kicked out. You will have to return but you can also return a value. So the key to what's going on is in this line right here. What we're trying to do is decode the token that we've been given. Now, there's a possibility however slim that whatever token we got is corrupted or perhaps somebody's just passing this method some junk that we can't tell from the gobbledygook that is an ID token. So we try to decode it here and if that doesn't work, we fail and we simply return an empty profile. And don't forget an empty profile is defined right here. It's basically a profile struct whose properties are all empty strings. If we are successful in decoding the ID token we can extract the information from it including name, ID, email, email verified picture and updated that. Once we've managed to extract this information we simply use it to create a new profile instance with those values right here. All right, we now have a fully functioning profile struct. It's time to put it to use. It's time to make it decode the information that we received from Auth0 and use that information to display useful stuff on screen. So in order to do that we need to go to content view. Now, quick review, content view has two state variables one of which is user profile and in the very beginning when the app starts up we set it to profile.empty which creates an instance of a profile all of whose properties are just simply empty strings. And if you scroll down to the body of content view which defines the structure and behavior of the view you can see that we are displaying user image and user's name and email address based on the contents of user profile and until now we have only been using an empty user profile so it currently displays nothing. It's time to fix that and the place to fix that is in the login and log out methods. So let's go to the login method down here in the extension and just immediately after we set is authenticated to true in other words we know that the user is logged in therefore we have their information because we have their ID token. We can now update the user profile and say, okay it's no longer the empty profile but we are going to use the from method to pull the information out of the ID token that we received as part of the credentials object that Auth0 gave to us when the user successfully logged in, perfect. Now, not absolutely necessary but I do like cleaning up after log out. The success case for log out, what I'm going to do is I'm going to set the user profile to profile.empty. In other words, once again, the profile can compose an entirely of empty strings. All right, that looks good. I am clutching my lucky duck and I'm gonna click the run button and let's see if this works. Simulator's firing up, so far so good. I'm gonna click the login button. There's our security alert, that's fine. All right, universal login, that's good. Once again, I'm going to use the user that we created earlier, randoadexample.com. User's password, aha! And there we go. The picture that's automatically assigned to a user you create within Auth0 is basically just made out of the initials. We've got the name and email and remember we only provided a email address and a password, so the name defaults to the email address but yes, we've got that user information right there, randoadexample.com. Need to confirm that log out works properly. Click the button, there's our alert and we are back at the logged out screen. So guess what? We have the app. All right, well, high fives and handshakes all around. Guess what? You've completed the exercise. You have a working SwiftUI application that uses Auth0 to log in, log out and display information about the logged in user. That's great, so hey, congratulations and now music.


To assemble your sonnet, begin by attaching the battery pack frame to the control unit. To attach the battery pack frame to the control unit, insert the hook on the control unit into the matching groove in the battery pack frame and push against the back of the battery pack frame until the release lever engages. Plug the coil cable into the control unit. Note the correct orientation of the coil cable socket and be careful not to use too much force. To attach the coil cable to a DL coil with a non-locking cover, plug the coil cable into the DL coil with the logo and arrow on the coil cable plug facing up. To attach the coil cable to a DL coil with a locking cover, remove the coil cover by lifting the cover from the front with your fingernail. Plug the coil cable into the DL coil base with the logo and arrow on the coil cable plug facing up. and close the cover by pressing the cover and base together. Insert the batteries into the battery pack frame with the positive poles facing out. Then slide on the battery pack cover and be careful not to use excessive force. The air inlets on the battery pack cover should be on the same side as the coil cable socket of the control unit. Turn on sonet, fully close the battery pack cover. The battery pack can optionally be locked to make sonet tamper-proof. To lock the battery pack, use the screwdriver provided with your sonet kit to turn the lock clockwise until the notch is facing sideways to the battery pack. Be careful not to use too much force when you turn the lock. Sonet is now ready to use.


Hold up. Wait a minute. Y'all thought I was finished? Not yet, baby. Who knew that rapper Meag Meals Was not just a rapper from Philly. He was also an agent a middleman a liaison a negotiator Who knew well, I guess we do now because Alba Brea Reported today and cuz of course, you know the owners they having the owners meeting right now Just finding out how they can keep most of their money how they can continue to keep most of their money While taking care some of the players in there, but anyway anyway Alba Brea reported that Patriots owner Robert Kraft He said that Meag Meals text him three or four days ago And of course, you know Robert Kraft super close with me with Meag Meals They've been close for years of anyway Robert Kraft said that Meag Meals text him three or four days ago saying Lamar Jackson wanted to come to New England and I was like, oh, okay New England has continued to be named as like this secret team that could come in and swoop in for Lamar Jackson And it would be sort of a under the radar team the team that's not getting a lot of attention Cuz right now there's been a lot of talk about the Colts, obviously And then I mean Larry me tonsil he trying to get some stuff started up about the Texans cuz he tweeted ways Hey come to the city, baby Yeah, we'll see what happens because again anything is possible till it ain't possible no more And then there's still a possibility that Lamar Jackson stays with the Ravens even though I don't really think it's likely You know anyway, and we'll talk about that more tomorrow, but anyway Let's get back to this report a Patriots owner Robert Kraft said Meag Meal text him three or four days ago Say Lamar Jackson wanted to come to New England now this answer is what got me this response said Kraft responded That would be Bill Belichick's decision so I thought that was slightly significant reason being because Normally even just a couple minutes ago a GM in that same division our jets GM I think or Joe Douglas who used to be with the Ravens But anyway, he was asked about Lamar Jackson and he said, oh no, that would be disingenuous of me to get engaged With contract talks with Lamar Jackson, da da da basically because they're going after Aaron Rodgers And I mean that's something that we expected to already be done by now, but it ain't done by now So we'll see what happens then but Robert Kraft And this wasn't just a regular deflection because he got a deflected this and be like, oh no, he's a Baltimore Raven I'm sure that situation to work itself out But for him to say that would be Bill Belichick's decision It's like you didn't shut it down We was also so used to GM's like when they get a question like that about another player Even if this player is available via trade, even if this play requested a trade Usually you hear so many GM so many head coaches and whatnot. They shut it down right away. They say no We're either we're not interested or we got a lot of our own stuff going on. We can't worry about that right now Nope Belichick's decision So he not only deflected it, but he deflected it to somebody within the same Organization and we know Bill Belichick makes a lot of the decision for the New England Patriots so That would be something I'm just thinking about it It would burn it would hurt really really really bad I Mean wherever he goes is gonna hurt really really bad to see Lamar Jackson Play for another team if that ends up happening I know of course with Ian rapper for his most recent report No, a lot of people thinking whoa, whoa, wait a minute buddy.  But again, we'll discuss that later but Let's see We'll see so Whether we end up seeing Lamar Jackson play for the Ravens That would be a beautiful dream or if we see him play for the Patriots or anybody else It will go from a dream to a nightmare. Shout out Meek Mills. We out


So today's question is from Samuel and he says I'm really into lucid dreaming I've just started my reality checks my dream channel I am a beginner, but I've already had two lucid dreams that I can remember although they weren't that vivid I Want to ask you if I can try the wild technique the wake in juice lucid dream technique already or if I just have to wait And see what happens naturally dream in juice lucid dreaming Recognizing your dreaming spontaneously through reality checks this sort of thing. I had a horrible sleep paralysis experience So I'm a bit scared of having one again But I think I know how to fight it this time. Do you think I should try it or not? Right, so you're obviously still in the beginner stages of lucid dreaming, but it's good that you've had two lucid dreams already. I would say definitely keep going with reality checks in the dream journal as I always suggest but Consider trying Many different techniques not all at the same time, but I would advise especially beginners I would advise you to just throw everything at the wall and see what sticks so just try A different technique every week, you know change your reality checks Regularly don't just do the same one all day every day do you know, maybe three different checks Throughout each day. Okay, just really just change everything up until you find what works for you because Everyone is different and of course everyone is going to get different results with different techniques different reality checks and so on and so forth So I would suggest yeah, go go for it. Give it a shot the wake in juice lucid dreaming technique is Not one I would recommend for beginners because it's slightly difficult. It requires Sort of prolonged focus which meditation can help with but if you think you can then I would highly suggest that you just go for it If you find it difficult or you don't get results without just maybe keep going trying for a week or so And then try something new try some try a different technique try the the way back to bed technique You know try maybe using a supplement for example try taking vitamin b6 it can help with recall and lucidity that kind of thing Change your reality checks You know just try and try and change things regularly so that you don't just get accustomed to doing one thing especially if you're not getting results with that one thing because Otherwise you're just going to get demotivated you're not going to want to continue You're not going to want to keep growing and pushing yourself. So I would suggest try something new every week Technique wise and try a new reality check every day, you know do two or three different ones every day Not just the same one combine the physical reality checks with mental ones So don't just for example try and breathe through your nose because sometimes If your expectation and beliefs are out of line Sometimes you can be in the dream you do the reality check off trying to breathe through your pinch nose for example And you won't be able to breathe you'll find yourself struggling for for air in the dream Even though there is no air like in the matrix. There is no spoon So just be aware of that your mind can sometimes trick you so it's a good idea to keep changing the reality checks up Don't just do one All day every day like I said Because your mind can trick you in this way So I hope this has helped if you have any questions send them into the channel. I will do my best to answer them I'm working through a long list of questions at the moment from when I sent our email to a lot of subscribers a Few months ago. I'm still working through those questions, but I'm guessing they're slowly But surely if you would like to support me, please go ahead and support me on patreon Even one or two dollars a month is perfect. That will really help me out The link is patreon.com forward slash how to lucid the link is in the description as always and Hope you have a nice day. I'll see you in the next video


Next speaker is Aya Cebe, who will speak about young women's leadership. Aya is an award-winning pan-African Tunisian blogger, gender advocate and peace activist, and she's won many prizes over the last few years. So over to you, Aya. Thank you very much. So when we say civil society in Tunisia, we actually talk about civil action. That's how we influence civil society, and that's how we play a role as political actors. We use civil action as a powerful tool to claim our space and to make our voices heard but in masses. So we've been inclusive to everybody to stand with us in masses. I know that civil action is not something new for civil society, but I think as young people we change the way we mobilize. We have regenerated the importance of civil action in today's world, and we revolutionized this way in innovative and creativity for social media. So we turned the social media platforms that have been used to socialize into a drive for social change. And with a Facebook event we could mobilize masses of people. So with having these two spaces online and offline, there is a threat to our space of activism. The civic space of civil society is unbelievably shrinking. So instead of giving us more space, we are censored. Our NGOs are shut down. And our restriction in public spaces, many women in the world are being restricted to public spaces. In Asia for example, Yara Salam and many other Egyptians have been in jail since 10 months now because they protested for the law of assembly just because they protested their public space. So I think that governments need to respect our public space. An institution like the UN need to support and protect our spaces online and offline. My second point would be about fragmentation in civil society versus inclusiveness. So there is this fragmentation that we need to address. In Tunisia for example, there is this political debate going on about secularist versus Islamist. And so women who are in civil society and feminists are having a relationship of distrust. Women on the left and Islamist women. And this distrust created a total break of their communication. So as young women we are not just excluded from the discussion because we're young and because of our age but also because I wear the veil or not because I come from that city or region from the north or not because I speak French or Arabic or Berber and then I'm discriminated because I'm indigenous. And the list is so long. So for us as young people we want to go beyond political manipulation of civil society and exclusion based on gender, race, age, sexual orientation, color, ethnicity and other diversities that we should have been celebrating instead of discriminating against. If we continue this fragmentation and exclusion in civil society we will end up working in silos and that will make us weaker in the fight for gender equality. We young women want to work with inclusion and inclusiveness and we prove that through our civil action in the streets. So there is somehow also this disconnection between the grassroots, the national and international level. And that's maybe one of the reasons why at the global level we don't have a strong agenda not because we disagree at this level but because we don't have as many voices from the grassroots and what is civil society than a grassroots? Then there is this generational gap. So the main impression that we are a rebellion generation and we do things differently and we don't listen to the elder generation but at the end we are a continuation of the previous generation struggle and we look up to female figures like the ones next to me. So this generational dialogue is needed because it's a continuation of our struggle and our action together. I want to conclude by stressing the fact that we young women are leading change already. Many people still tell us you are the leaders of tomorrow. We're not the leaders of tomorrow. We are the leaders of today. We have been leading movements, leading NGOs, leading campaigns. We kicked out dictators. We have been tweeting president and we turned upside down the up-bottom discussion. So we are already leading and towards working on 2030 we need bold decisions and we are a bold generation. So our full and meaningful participation has become needed, essential and it's unacceptable that we're not on the table of the discussion. We are the leaders of today, not tomorrow, not next week, not next year.


how to swap to variables in Python. In Python that is very easy. I'm gonna create two variables, variable A and variable B and then if we want to swap them then variable A is gonna become variable B and variable B is gonna become the variable A. Let's print variable A and variable B and let's run this code and as you can see these two variables are swapped.


Who says you can't have it all? Not Appalachian Wireless. We know what you want. Appalachian Wireless offers the hottest smartphones and unlimited data plans, all on the region's number one network. Dozens of business leaders from across the region gathered Friday morning in Pikeville for a sore leadership breakfast, where they heard from the director of athletics at the University of Kentucky. Mitch Barnhart is really impressive with what he's done in the University of Kentucky athletics program. And to share some of his insights and leading people and putting teams together was just incredible. I want to make sure that we're understanding that the next generation, other ones are actually counting on to be leaders. And the only way you have them be great leaders is if we lead them the right way. Barnhart, who is in his 17th year as the athletics director, spoke briefly about his accomplishments, but he focused more on the importance of being a good role model to our youth. And they're paying attention to everything that we do. They don't miss anything. And so they will feed off everything that we give them, but it's up to us to feed them the right things. So our executive director Jared Ornette says there is often a lot of excitement and anticipation surrounding some of the athletic programs at the University of Kentucky. And he says he feels a similar excitement growing within Eastern Kentucky. And we want people to be excited about the future of this region. And we believe there's a reason to do that. We believe we're on the right side of momentum and new companies are starting with technology and the way we're getting connected. We think there's opportunity here and we need everybody to believe that. Barnhart also made another appearance at noon as the big blue caravan carrying several athletic teams and coaches made a stop to greet fans. In Pikeville, I'm Shannon Deskins, EKB News.


One of the most common questions I get asked is, you know, how do I start day trading? So what me and my mentor about it for our viewers on YouTube is create a free mentorship course that reveals our 12 secrets that every single brand new day trader should know before they get started. But please take note that there is limited seating every single week. So please reserve your spot at myinvestingclub.co. Link is in the description. All right, enjoy the video guys. I posted this and then we're gonna talk about Moderna too. Time to restart coronavirus talks, what? Mitch McConnell is calling the Trump administration correction of Democrats to restart negotiations on a fifth coronavirus deal after talks collapsed late last, oh, this is basically where all of this started. Stimulus talks are at a stalemate and the market went, ugh! So I guess in theory that everyone that is judging bullish or bearish finds it bullish to increase our debt. So I'm kind of like, it has the inverse effect. Whereas normally a stimulus package or an increase of debt to the federal government would be like a big metal finger to investors. Apparently it's not, apparently it's pretty bearish. Apparently people want the package. Oh yeah, old Joe Biden announced his running candidate, Kamala Harris, is that what it was? Yeah, Kamala Harris. I'm sorry, Kamala, but this just seems like a power play, to be honest with you. Asian American, female, black, oh my God, couldn't have hit the nail on the head better, Mr. Biden. I mean, you couldn't have played to everybody's likings better. Like holy shit, did you just not, you just secured, not to say that I don't agree with Kamala Harris's beliefs and politics and stuff like that, but it just seems, it just seems like less, it just seems more strategic than anything. All right, that's all I'm gonna say and I'm gonna move on from that. It just seems to me, that's a middle finger to the minority classes.    Sorry, and I'm not racist by any means, prejudice in any scenario. I'm probably the most open-minded Texan you'll ever meet. To put it like that.  I mean, that was just a slap in the face. Anyway, okay, I'm not talking about carrying into expiration, but this is a way to determine value. If I hold these, $13, all the way to expiration, and I exercise, right? My new average is going to be 500 shares from 1740. So I need to justify either selling my options or holding the stock, which 99 times out of 100, this is the less profitable example, okay? You're almost always going to sell the option because it's going to yield you more money. Unless you're just trying to turn into a long-term shareholder, which I think is, beside the point, you can always just sell the options and then just buy the stock, realize the profit and just buy back the stock.  Yeah, you sure can, you sure can. And just risk whatever you made, 50%, 25% whatever you've already yielded, et cetera, et cetera, okay? So let's talk about understanding Delta here. The theory or the question was and is, I won't make any profit until my calls are in the money. So let's say I buy the $11 strike or the $13 strike when the stock is trading at 11, what happens? Well, okay, and I'm going to clean this up so you guys can understand a little bit better, but let's get rid of this. Yes, yes, Orin did warn me on Dell. He did warn me that Dell moved super slow. Intel, INTC, what about it? Looks gross, that's my thesis on Intel.   What's AMD doing? I haven't checked on all AMD in a few days.  Hey guys, my name is Toss Bradley and I'm one of the head mentors and monitors at my investing club. If you have any questions about getting started in trading, getting started in the MIC, and MIC in general, text me at<PHONE_NUMBER>. This is not a robot, it is me directly on the other end of my business line and we'll get you in the club. We also have special promotions going on that I can get to you depending on your trading needs. Hit me up, back to the video. Forward splits earlier when a company creates a different class of shares, why does that dilute the stock price? For example, Berkshire class A, class B, but it seems it did not dilute when they created the class B shares. If I'm not mistaken, they don't all trade class A and class B in that same instance. If I'm not mistaken, Berkshire Hathaway trades class A and class B, which is very similar to Google, which is why you've got Google and then you've got Google. This is the class A shares. This I believe is like the conglomerate option. It's just different avenues of shares trading openly in the market. I'm sure somebody else has a fancier answer for that. That's my best 40 up. So, win resorts. Oh, look at that. Yeah, yeah, when resorts is doing all right, it seems. I'm not very interested in it because I was never really interested in the casino resort stuff at any point.  Yeah, ZM, I do like the potential of a first green day on ZM. I really love this 220 line. All right, like that there. It's been a long time since I've traded Zoom. Hope tech comes back. Yeah, or what must set dodge coin. Oh, Jesus. You know, I don't, what did Disney finish at? I've been watching Disney. What's Snap doing? Nothing. Oh, there's another one, not in tupperware. What was it? Pins, Pinterest? What's Pinterest at? 3440? You know, I kind of like Pinterest around 34. Can't hate on it. I don't know if this works in small caps, but when you have something that is really efficiently priced and it's riding a trend, if there's a moment of panic like this, oh man, it works so well. To just, it's just an additional confirmation that way that I don't buy the midpoint. And so to give you guys an idea is I like this, and I can share this indicator with you guys, it's really nothing fancy. I am not left-handed, but by God, if you looked at my drawings, you would think I am. So when the deviation bands are set further apart like this, so look at the difference. You see how close these are like this? Close, super close. This is what you call an inside day, okay? The guys over at Tasty Trade kind of like coined that term. So the way I define it is when these bands are super tight like this, I don't like to buy panic because it's not real panic, okay? It's not panicking or anything like that. I like there to be a good distance between the bands like this. Good separation because then I can actually get down and dirty into this. So you can see how these bands are tight, tight, tight, and then they start to spread. When they start to spread out and you're coming into this pivot point, you can have a lot of faith in that level there, but you are trying to pick a bottom. And so you have to size accordingly. Here's my settings. So you guys can see this day, think, script or yes, no, one, two, three. This is how it looks. If you just upload that right there, it should have my settings already. It should show up like that. So in Amazon, notice this right here. In Amazon, when the bands finally spread out, it's still kind of too tight. This is one of those scenarios where you could take a trade, you catch the bottom, sell in the push to VWAP, and there you go. Same situation here. We would not be long into this panic zone. Why will we not be long into this panic zone? Because there's no pivot point. There's no point to match up with this, okay? Zone plus line. So in the same situation, this is a white, you see these zones, how they're wider? These are wider zones are more spread out, okay? This is when we have euphoric buying, okay? Spread, these zones get spread out, but notice how long it stays in this euphoria. This is why you don't try to pick tops on the short side. Notice how long it stays here. And you flip this in reverse, and you notice when they touch the panic zone into a pivot point, it's like one candle, and then bloop, there's your bounce.  These are five minute bars. So this is five, 10, 15, 20, 25, 30, 35, 40, 45 minutes. Finally, for the love of God, it finally pulls back, and it doesn't even go to VWAP. This is why it, yeah, right? And then bounces. It's just like, oh God, here we go again. So it's just one of those situations where I'm not the biggest fan of it. I don't do it in the afternoon. I like it in the morning. It's kind of that morning panic situation. All right, folks, well, it's been fun.  I have to tell jokes twice when Ed sends around because he's like, hang on. I don't understand that word in English. Say it again. He's like, I got a process. One second. Say it again. Oh yeah, phase like, I'm sorry. Windows 95. All right, folks.  So, adios, ladies and gents. Until next week, when we do it all again. See you later.


Live from Las Vegas, Nevada, extracting the signal from the noise. It's theCUBE covering Informatica World 2015, brought to you by Informatica World. Now, here's John Furrier and Jeff Frick. Okay, welcome back everyone. We are live in Las Vegas for Informatica World 2015. This is Silicon Angles theCUBE, our flagship program. We go out to the events and extract the signal and noise. I'm John Furrier, the founder of Silicon Angles. I'll draw my co-host, Jeff Frick, our next guest, Mark Smith, CEO and chief researcher of Vantana Research. Welcome to theCUBE. Thanks, great to be here. All right, great to get the analysts on now.  Okay, we had Soheb on, the CEO and chairman. You know, great messaging, top-line messaging hangs together. How could it not hang good? The date is hot. But the reality is, there's a lot going on, right? So, give us your take.  What are some of the key things that Informatica and others are challenged with right now in delivering the customer value now in today's market? Yeah, absolutely. I mean, if you look at organizations today, they're going through a massive change in IT, right? We've got application data architectures that are changing radically. We've got business going out and still kind of being good renegades or bad renegades, renting applications, creating new data repositories. And then you've got the poor analysts that are trying to figure out how to get the data together, do some analytics, right? So, the environments are significantly different across organizations. The politics are still pretty heated in many places. So, Informatica gets quite challenged in trying to figure out how do you be nice to everybody at the same time and get them to move to the new world of how we interact with applications, cloud, data, and how their tools kind of, you know- Tell us about the politics. Is that something that we haven't talked about yet is that how deep and how nested are the politics?  Is it just turf wars on IT? Is it people? Is this just normal politics? Is it all the above? What's your- Well, I think the politics are sometimes a misunderstanding of each organization, right? So, you go into any company, right?  They run their own destiny. They're held accountable for their business processes. IT is a service center. So, when IT comes out and dictates, this is how you run your business with these tools and this approach, it doesn't necessarily always mesh, right? And so, in the last three to four years, cloud has actually taken off because businesses said, I'm going to run apps. I'm going to onboard. I'm going to use tools that actually my team can use, not your team, the service organization. Yeah, telling me what to use, but I don't want to use. Same thing in the BI and analytics space, right? IT said, no, this is the one way or the highway, and the realities didn't work, right? So, the politics are healthy tension in many cases, but not necessarily a good understanding of each other's kind of timelines.  Yeah, and this comes back down to the philosophy of how people with a data warehouse and distance intelligence. It's some fenced out data set that people send reports out, truckload reports come back, slow lag, and it's just a resource. Now it has to move to the front lines, if you will. That's the shift that's happening. When you agree, that's the problem. Oh yeah, I mean, analysts who work out in those line of business areas, they're responsible for analytics, they're responsible for information. And over the last five, six years, our research has found the biggest time sink for analysts doing analytics is data. It's data preparation, right? Preparing data, reviewing data, right? Data preparation's not some new hot term. I mean, these analysts have been doing this stuff just the old fashioned way. Sometimes control C, control V, and spreadsheets, and or actually doing their own kind of little Skunkworks projects. Now we're seeing actually that there's actually dedicated tools to help them that they can use without having to have IT over their shoulder or IT saying, I'll get you next month. So what's state-of-the-art right now? So for customers who say, okay, we got a lot of wasted time, we got a lot of control and C and V and spreadsheets, all that's going on. I want to have accessible ingest of all my data everywhere. Is it pipelining, is it connectors? What's some of the things that are hot right now that are working for customers? Well, when you get in the business side, they start from the front end of what they're trying to accomplish, right? So they're trying to actually do some discovery, exploration of their data, they're trying to gain some better insights. It's basically faster and smarter. How can they become faster and smarter? And most companies have realized that just putting out more visualization is really a dead end.  Right? And- I had you say that all the time. I actually was. This is like a billion data points. It's like, what am I looking at? What does that mean?  What am I supposed to do? The practical side of what is- Are you assuming the data's right by the way? It's not old data. Well, yeah, I mean, how do you know when there's all these pretty pictures and what you're supposed to do? So the status data really is that the analysts are really driving new needs for data in different form shapes, interaction data, behavioral data, and they're looking for faster ways to bring that data into their own repository, kind of like an own departmental kind of operational data store, right? It's kind of an operational department store of data that actually people, these analysts actually use. Now, that's actually conflicting with IT data architectures, but guess what? The business has got money. They have the priority and now they have to figure out how to interconnect those systems, which actually comes back to Informatica, right?  And then you've got all the whole and other batch of public and other third-party sources that you weren't even kind of integrating into the process before. Yeah, there's a lot of talk about how you bring in Twitter data, weather data, I mean, all these things, they're not that easy, right? I mean, it's a pretty, you know, how do I align that to my territory for my products during this time period? I mean, how do you dynamically bring that data and blend it? It's not an easy task. Yeah, absolutely. Let's talk about data lakes. When we were talking earlier, you know, that turn has been kicked around. Your thoughts on data lake? Well, I think that we spent a lot of time last two years doing these silly analogies, lakes, streams, oceans. You know, we got to get back to how do we build the right kinds of information architecture?  What we're all trying to do is have a new conversation around information systems where we have certain kinds of data repositories that have to be interconnected, they have to be able to support our applications and our analytic systems. So I don't really waste time in talking with our clients or in our research around lakes, streams, pipelines, swamps, I heard earlier. Now we agreed to what we said, yeah. Yeah, you guys came up with, you know, talking about swamps. Only to play off how ridiculous data lake is, but that's okay. People want to have a visualization of what a concept... It starts a new conversation. But customers don't talk in data lake. No, they don't. That's not their language. They're not building data lake architectures, right?  They're building data architectures, enterprise architectures. They have to interoperate with the cloud on premise because they have to run massive production systems. So they have to look at what technologies can do that. So I got to get your take on this. And we talk about it on theCUBE all the time.  Hortonworks just announced Samarini State. They did it pretty better than the last quarter.  But it just never seemed to be an industry called big data. I mean, it's not a sector. It's like it seems to be more horizontally spread. What's your take on, is it a market? Is it just a feature of other segments? Is it a notion of a fabric? Does it move up and down the stack? I mean, as a researcher, how are you putting that puzzle together? And what are some of your findings? So I was pretty skeptical around big data at the beginning. But, you know, as things begin to evolve, it's a good framework to have a conversation around kind of the next generation information management architectures. And it's a framework to have a conversation around where are our data sources, what are our integration strategies, what are our storage strategies, what are our computational strategies? How do we access and analyze that? So it really is a next generation data warehouse conversation, let's be honest. But it does provide a framework of a higher velocity compute that's necessary in companies to work with their architectures. And so, but we don't look at Hadoop. And in the last five years of our research, we've been looking at big data and we've been asking organizations, what is the primary mode of your big data strategy, right? Is it a relational database system? Is it a new Hadoop? Is it in memory? So we have some in-memory technology starting to gain some more traction.  The reality is it's all of them. Okay, so the reality is companies have all of them. Okay, there's not such one thing of one big data technology. So, you know, these are all evolving and companies have multiple strategies replacing different bets to see where they play out. I would totally agree with that. But has the rate of data generation with all this extra stuff, right? We hear 95% of all the world's data was generated in the last two years or whatever. You know, has the rate of that and kind of the economic pressures on systems that weren't necessarily designed to hold and process that much data economically, not so much feature-wise. Is that part of what's really changing the conversation? It does, because it's all about net new projects. It's not to say that people are going in and taking their old historical time series based data warehouses and ripping them out, right? A lot of those are important for reporting, you know, corporate reporting type of structures, right? But on net new projects, you're absolutely right, because those projects have higher demands for the data they need. And they need newer technologies that can be able to support that, which is why you find Hadoop in memory kind of architectures, but you find these kind of things blending together, right? If you go look at Oracle, IBM, Teradata, guess what? These are hybrid machines now. They got a little Hadoop, they got some in memory, they got some relational database. Oh, by the way, they got some flat files. So we're moving to- Sequel on top. We've got some Sequel on top, and it's all coming together. It's Sequel and Hadoop, that's a big thing. Everyone's got it. It's kind of big deal. It's like what's next, right? And so we're moving to more of a hybrid machine kind of approach, and we're not that hybrid machine is virtualized on-premise or in the cloud. It's up entirely up to the customer and how they want to manage the system. And that's a cool thing, and I got to ask you on that note, I want to ask you. I mean, we're just joking yesterday at the IBM event. I never heard a customer in the Cube say, I want less compute, right? You get more threads coming, power rate, all this other stuff going on in the compute side. You got Amazon, cloud. So compute's rocking and rolling. You're going to have supercomputers, flash mobbing them, whatever. What is that going to do to the data architectures? What's your vision there in your research? How are you seeing that? Because that's going to enable some new opportunities, right? So you're going to have some horsepower to throw at, analytics, you're going to have some new stuff, maybe it's machine learning and memory of the spark, low latency, so more horsepower is coming to the table. And where that horsepower is actually, where is it taking advantage of, right? So we're really moving to this distributed big data architecture, right? Because for some companies, the big data architecture might be able to compute on your mobile phone that could be staged up into a cloud instance up with Amazon, which then could be actually being, you know, streaming the data off of some other, you know, repository somewhere else in the cloud or on premise. So we're really, you know, what we see is all this big data distributed architectures actually changing how companies actually operate. And it's not easy because they're not used to doing that. They're not used to actually, it's been more of a centralized kind of approach. Now it's a very big distributed data architecture. That's a systems management problem. It is. It's a systems compute. It's a operating system, not mindset. So that's a new kind of talent, right? Yes, absolutely. And that is also where there are the impediments of looking at this is around, now how do we deal with data security, right? How do we mass data across the wire? How do we actually ensure the right access rights? Because now we have data being cached. It's not disappearing. It's hanging out there somewhere. And how secure is it, right? So- And who's touching it? And who's touching it? For what workloads, right? Yeah, big data security is a big issue that we really as an industry haven't got our heads around yet. But it is a big issue that people building these big data architectures know they got to get their arms around because if they don't fix it, guess what? They're looking for a new job. Now the good thing is, those jobs are hot jobs. They may actually get a raise for screwing up. Going somewhere else, get a raise while they screw up on site. Failing up, that's Silicon Valley way, right? You see? I'm telling you. So that's not good for the industry. But it is important that we actually bring that to- But it's an opportunity right now from a security standpoint to like throw all the mistakes away, do over and build it in because now with no perimeter it's on the data guys to own it, right? That's what you're saying. Yeah, and we're streaming the data across the internet. And we know that sometimes the data could be safer in the cloud that is on-premise looking at some of our big corporate data failures in the United States over the last 12 months. But we are moving data across all around us, right? It's streaming across the phone, you're accessing a report. That might have my information on your phone, right? So it's a big issue. Mark, we're getting a hook here. Thanks for coming on theCUBE. We really appreciate it. Quick plug for your research. What do you guys coming up? Yeah. What's happening for you guys? Yeah, actually in this month we'll be announcing our brand new data and analytics in the cloud research. We spent the last six months benchmarking over 300 companies looking at what they're doing on data and analytics. And we just closed up our next gen predictive analytics benchmarks. Going to look at kind of how things are going, how we move towards that data and rocket science activities in companies. And URL they can go to? Go to ventanaresearch.com. All right, Mark Smith, thanks for sharing your insights and color into the industry that Informatica 2015, Informatica World 2015 was theCUBE. Sharing the data with you, broadcasting live, we'll be right back after this short break.


Greetings, everybody, and welcome back to EuroPython. We just finished our lunch break. For the next two hours, I will be the session chair for this room, and then we will have another brief break. The first talk of this session will be with Juist Lek. Have I pronounced your name correctly? Hey, Alan. So I could hear the ads, but I can't hear you, and I'm not sure you can hear me. I can hear you. Oh, dear. This is odd. Can you hear either of us? We can hear you. So you can hear the both of us? Yeah, both. That is very unusual. Hopefully, everyone else who's listening can hear us. I'm not actually sure what you're asking. This is horrible. Well, Christian, thank you for confirming that you can hear us both. It is unusual that Juist cannot hear me. If he asks, I've said incredibly nice and fantastic things about him. No, I can hear you. So yeah, Juist, how is your full name pronounced? This is a very good question. You start off with yogurt, and you end with toast. So it's Yoast. That makes a lot of sense. That is good to know. I think it's always important to ask people how their names are pronounced, because you never want to make assumptions. And it's the most important word in any language. Before you begin your talk, is there anything you'd like to share about yourself that wouldn't be obvious from your bio? No, well, maybe that you can potentially hear that I have a bit of a cold. I tested it. It's not COVID. I'm really happy to have that. But I did spend a bit of time in bed this week to try and be as ready as possible for today. But if my voice sounds a bit odd, then that's the explanation. All right, good to know. Thank you very much. If you're ready, you can begin your talk. That's cool. I am. So welcome, everybody. My name is Yoastlek. And I'm not a programmer, but we'll get into that. So I started my life in 1982. I grew up here, just south of Amsterdam, in a village called Langeraar. Even though the Netherlands isn't very big, there's a lot of agriculture going on. And especially in this area known as the Greenheart. Nearly all of the bigger buildings you see here are greenhouses for growing flowers and produce. And my dad worked in one of these growing flowers. And the very first answer to the very first answer I remember giving to the question, what do you want to do when you grow up? Was to be like my dad, even before I knew what a job really was. After a few years had passed, and I too went through my fireman phase, I started turning my eyes to the sky. And at the end of the 80s, space was quite huge. Also in the Netherlands, we actually had an astronaut in space. And after a visit to the Space Expo, where this picture was taken, I decided I would become an astronaut. I hung a poster of Ariane 5, one of the main European rockets of the time, over my bed. And I dreamt of flying out to space one day. Now, the fact that I'm here at EuroPython, giving you this talk, instead of giving a TED talk and you're watching it on YouTube, probably gives it away. It didn't really happen. I got into computers instead. And computing was a bit different back then in the 80s. My parents, neither of them worked desk jobs. And I had pretty little exposure to computers at the time. It took me a while to get acquainted with PCs. By the time I was in my teens, I could connect to the internet from school occasionally.  At 15 years old, however, I bought my first computer. And it would take me another year or so before I could serve the web on it. After reading about it in a magazine, I managed to get started on Linux at the time. I bought Red Hat 5.2, which is actually codenamed Apollo. And I bought that as a set of a hefty instruction manual and some installation disks. It was a huge challenge to keep it running on my little PC. As I had really no mentor and no idea to fix any issues that occurred, as Googling wasn't really a thing at that time. None of my friends cared for it too much either.  But it sparked an interest in me. And though I wanted more, after finishing high school, I lost track of my space ambitions. And I started my bachelor's in computer science at the very ripe age of 17. The year was 1999, and in that industry, the sky was quite literally limit. Dotcom bubble hadn't popped just yet, as you can see from this graph. And if you could so much as write a line of code, you were practically guaranteed to get a job. I learned to program in Python, there in Java and in C, but I didn't find a ton of joy in doing that because there's something you need to know about me. I'm very lazy. I just had a hard time finishing tasks. And this unfortunately materialized in my studies as well. I finished the first 90% of my bachelor's in the allotted four years and the last 10% would take me another five. In the meantime, I started working in what we would now call startup. We worked on voiceover IP systems and a banking app that would immediately be surpassed by PayPal actually while we were launching it. Let's just say PHP was involved and I'd like to keep that app. I did discover something about myself, which is I'm not really a programmer. I like the puzzling aspect of it, but it's just not the thing I can do for months and months on end. I did figure out that I'm good at fixing things and I still like computers. And I also got pretty good at fixing things that are broken and need to get fixed fast. And that led me into more operational territories. After my final internship at a Unix consultancy company, I stayed there to work for their clients. It was mostly about keeping Unix systems and some networking stuff operational. This is also the time when I started learning Python. This was an excellent platform and a language for me to get things done quickly without exerting too much effort, which was a critical point for me. So fast forward another couple of years and I'm settled into a career that's very lucrative, but doesn't challenge me too much. And the work just wasn't keeping me engaged at all times. I had amassed tons of knowledge on Linux systems, on network design, on administration, and also actually on Python programming, but I was coming up on 30 and I realized I hadn't become all I could be yet. I was slightly skeptical, but intrigued when a recruiter for Optiver approached me. I knew exactly nothing about trading options or finance in general even. And I applied there and I started working as an application engineer. It's mostly an operational role. And when I started, there was a very sturdy wall between ops on one end and developers on the other end. A while after joining, it became apparent that this way of working within scale. We went through a DevOps reorg. This was a great time for me because as one of the more programming and Python-oriented engineers, this fit me very well. And I actually started teaching an internal Python course for a while, which I enjoyed a lot. Since then, we've actually made our first steps to transition for an SRE model. And people on the operational side of things are spending more and more time writing code. Right now, as we're speaking, I'm coming up on 10 years now, which also tells you a lot about my age. And I haven't been bored a single day over there. This is actually where I work. As an SRE, I sit on the training floor and it's my main responsibility to ensure that we keep trading at all times. It's work where I get to collaborate with traders, with C++ developers, with infrastructure engineers, and also fellow SREs. Python and C++ are the main languages for our company. And Python is the one I'm most familiar with. And it's also the one where most of our operational tooling is built in. Think about monitoring systems, deployment systems, managing hundreds of the bare-metal systems we use for, that we use and optimize for latency. One day working there, I spent some time under the hood of Python 3.6, actually in threading the Py module to fix a bug in one of my tools. And in the course of doing that, I came across the Python bug tracker. Of course, the bug wind up being in my code and actually the bug itself isn't relevant to today's presentation. But that's how I wind up browsing this page, which I really hadn't come across previously yet. Now in my spare time, I'll occasionally program a little bit on sites, for instance, like Exorcism, which I really enjoy a lot. But I've always felt this slight discomfort from using all of these open source tools in our work, but never really contributing back to them. And so it dawned on me, and that evening, I started browsing the Python bug tracker. And I thought, you know what, maybe I can help. After clicking through these thousands and thousands of issues listed, I was very impressed at all of the work going on that I really hadn't ever considered. And actually, it was more this work pending to be worked on, right? Because these are all open issues that still needed some attention. Clicking the random issue link a few times was pretty fun, but it wasn't really my forte. And my eye fell on the easy issues link. A lot of these did not seem super easy to me, or I expected them to be very tedious. There's also a lot of them on the C side of C Python, which is fair, but it's just also not my area of expertise. Then I spotted this one, which is a simple class missing from the threading library that I had been looking at for the bug that I encountered in my code. The issue had been there for a couple of days, and so I had a chance of being the first guy to work on it. It couldn't be too hard to help out and fix it, right? And you know what, it wasn't even that hard. I checked out the code from GitHub, and actually, I think I spent about 30 minutes, maybe an hour hacking away at it until I had built a class that satisfied all of the tests and essentially fixed the bug.  It's not terribly interesting for this presentation, but it's essentially a simple lock for a module that doesn't even really use threading. After writing a code, I made a pull request on GitHub on April 24th of 2019, and there was immediately a bot commenting on it, saying that I needed to sign a contributor agreement. I didn't expect to be signing documents in the course of this little quest, but here we are. So of course, I read through it in detail as everyone should with a document that requires a signature, right? It's basically an agreement between a new or a past contributor to the Python Software Foundation and for all sorts of complicated reasons, they feel a need to be able to redistribute whatever code you share with them and your signature on this specific document grants them that right, forcing you to either use the academic free license or the Apache license for your software. The document itself is actually really nice and short. It fits on this single page, which is impressive for any document with a legal standing. I don't think it's unreasonable and after signing it and sending the document back, I went about my business and patiently waited. Some two weeks later, one of the maintainers provided a few helpful comments on what were obviously missing doc strings. What do you know, you know? Rookies make rookie mistakes, right? I quickly went in and I fixed those that evening and I pushed my code and another month went by. I sort of forgot about the whole endeavor, to be honest. Until the 70s of June, when I got an email saying that my PR had been merged, at that moment, I got this email, I was sitting on my couch at home. I was reading email on my laptop, while my better half, Mirte, was watching TV. Now I was quite pleased with myself and I immediately informed her about my significant accomplishment. Her not caring about anything relating to computers and working in an entirely different field, was probably a big factor in her rather unimpressed reaction. But I guess that's fine, right? I certainly didn't do it for fame or fortune, but I did reflect back on the whole process. It was very smooth and I'm happy I took the time to contribute something back, however small that might have been. If you've never done that, I would really recommend browsing through the easy bug lists on bugs.python.org and if you have some spare time, see if you can contribute back. There's a lot of different categories of issues there, including ones that simply are documentation fixes or like this, missing tests or small bits of missing code. It's a great introduction to what's under the hood of the Python engine. Now that would have been the end of this story, but sorry, that would have been the end of the story. And when I first talked to my colleague, Nikola Demarchi, about giving this specific talk, it was going to be titled, It's Very Easy to Contribute to Python. The thing is, even though I hardly use GitHub for work reasons, I very occasionally do log into it from home and one day this year, I spotted this badge. I was again sitting on my couch. Again, actually, my partner was sitting next to me watching TV and I remember telling Mirta next to me on the couch saying, apparently some of my code was used for the Mars helicopter. And she said, no way, that's really cool. And I couldn't help but agree. I felt a sense of joy and pride to be connected to a small little helicopter that hovered over the red planet. Unless you've been living under a rock, you must be familiar with this helicopter, right? It launched from a much bigger perseverance Mars rover and it's fairly small, but still its rotors are 1.2 meters wide. It's been performing very, very well. After its first flight on April 19th, the mission was already deemed a success, but it kept going beyond that. And earlier this week, it actually completed its 10th flight. Ingenuity seems to have paved the way for future Mars exploration by unmanned craft, even craft that can fly. What an exciting time to be alive. Now, it would of course be really cool to say that I contributed to that specific helicopter. That's not really the case. The GitHub badge we saw earlier was assigned to all contributors for a set of open source projects selected by Ingenuity's engineers as having powered this flying robot. While all the code running on Mars is C++ based, the ground control systems, the flight modeling and the data processing used Python as a base. So however small my contribution was to the overall project, it was really exciting for me to see how a tiny contribution can provide for such an inspiring story. I hope you too will remember to build the shoulders that future giants will stand on by contributing back to open source software. And that's actually all I had for you today. I'd like to thank you very much for listening to me for providing a great community here at EuroPython and I very much look forward to meeting you in person at a future conference. If you have any questions, now's the time. I actually have a question for you. There you go. Out of curiosity, this is because weirdly a lot of what you've mentioned actually rings very true for me. Not only in terms of like your educational background but also your experiences getting into development. Do you have any advice for people who are not only looking to get into contributing to open source but also balancing a desire to contribute to open source with the balance of their general work in life? Because as many people who work in tech are aware, it would be optimal to leave work at work and it's difficult to explain to your non-tech colleagues sometimes why you're spending maybe an hour or two on an evening you're not meant to be working doing a little bit more. It is, it's a really interesting balance to strike I think, if you're asking me for advice one of the very best things to do is the example of my colleague Joel actually he presented earlier this week on Wednesday. A project that he worked on within our company called Vulcan. It's a build tool for Python where we had a very specific need that wasn't being met and this is the textbook way of contributing open source software where he saw that need. He built a tool that is very functional for us. It works very well, but it's not competitive in any way. It's not something that we have any value for keeping to ourselves. So we released it back to the open source community and I think if you wanna contribute to open source software that is the very first step you should take. Assess your environment, see what kind of tools you're using and if you're building those tools in house and you say, this is providing value to me but it's not unique. It's not unique to my business. It's not unique to, it's not proprietary in any way. And then by all means contributed back to the community. That's a first step you can take. When it comes to balancing things, working on things in your own private life that's really finding where your passion is. For me, the other open source, well, contributions if you may call them that have been in the embedded space. I really like working on small, like I use a ESP8266 controllers and I write some Lua code for that. And so my GitHub profile has some Lua code for these small embedded microcontrollers. And that's, I like the home automation component out of it. And I find that that's an easy way to balance still contributing something back, still publishing something in that sense and getting some gratification out of it in my private life. Does that answer your question? It does, it does actually because certainly it's something I've thought a lot about. I would, I do kind of have a follow-up question but I'll ask, I'll maybe DM it to you because we do have an audience question. Hi, my apologies if I'm pronouncing your name wrong. Hannah C. Devenham asks, why have you only contributed to Python once? Now that you've done it, are you likely to pick up another issue at some point? That's a really good question. I am likely to, however, life has gotten a little bit in the way since the commit I made my second child was born. Life has been a little bit hectic balancing corona, working from home changes and all of that. It's certainly something that I find, it brings me some joy and I'll be looking forward to doing that more often. Yes, that's true. On the other end, I'll also be realistic. There have been changes to my job which pushed me to doing less technical things at work and so that that avenue is somewhat close for me as well. That makes a lot of sense. I think we probably have time for one more question. And this seems like it was partially tongue-in-cheek. Why Lua and not MicroPython on the ESV8266? I, you know, while I was answering that question, I could almost predict this one coming. To be honest, the work I did on Lua predates even this commit and I think even some of the work on MicroPython. I have yet to take MicroPython for a spin in that realm. I've heard really, really good things about it. I've actually watched the conference talk a couple of months ago on MicroPython and it's on my to-do list, but the list is a bit long. All right, that makes a lot of sense. I've always insisted that the best tool for a given job is the one that you'll actually use. Yeah, thank you for your talk, Joost. It was very inspiring. And I think we all hope to see more of your contributions to the ecosystem in the future. Thank you very much, Alan. Thank you for having me. I had a great time and thanks for the conference because it's been lovely. Hey.