Hey everybody, welcome back to OpenShift TV. I am Chris Short, Principal Technical Marketing Manager on the OpenShift team here at Red Hat. I am joined today by a bunch of my friends here, but I really appreciate DevNation just now. That was a great show earlier. Thank you so much for that, the DevNation team. Sebastian Blankey did a great job, excellent work. So let's talk about what we're talking about this hour because we got another show following this one, OpenShift Commons, which is awesome. So let's get to it. We're talking about some code ready workspaces. We're talking about some Eclipse Shea, some DevFiles. Like let's do around the horn real quick intros and let's dive in Natali, all right? So who wants to go first? Natali, you're up. I'll go. My name is Natali, I'm part of the developer advocate team for OpenShift and I'm here with my mate, Ryan. Hey, how's it going? Ryan Jay, developer advocate on the OpenShift team as well. Yeah, we're excited to be talking about running hosted development environments using Eclipse Shea. Brian. Hey, so yeah, Brian Tannis. I'm also a developer advocate focusing on OpenShift. We got the whole team on here. No, we got some of the team on the call. Yeah, but it should be an interesting topic. Code ready workspaces is pretty awesome. We've talked about it a little bit before. But the latest stuff that's coming out and whatnot is really interesting and I'm kind of excited to learn some of this stuff myself. Yeah, code ready workspaces is a frequent ask on the channel, so it's good to have this out there. We'll have more and more as time goes on. More features get added. We're gonna have more content. So here we are again. Yeah, last week we actually had someone in our Twitch stream, dreams owner, I think it was suggested this topic. This very topic. Yeah, this very topic. So this is a response to your feedback. If you have questions along the way, please drop them into chat and we'll do our best to respond to them. And topics, make sure to let us know what you're interested in seeing beyond what we're covering today. Cool. So I think to start off, one of the main pieces of technology that we're going to try to focus on today is something called a dev file. Dev files currently we're using a dev file 1.0, but we're also going to discuss later on in the show kind of the future of dev files and how it relates to some of our other newly released tooling, specifically Odo 2.0. So I have a short demo I could show in regards to Odo later if we got time. But first, Natali has an environment already up and ready to go. This is an OpenShift 4.6, is that right? 4.5. 4.5? Ah, 4.5, all right. Classic. We're not talking to Serena. We're talking to Natali. We're not in the future. We're talking about, this is actually stuff you put your hand on now. We're not in the future right now. Yeah, yeah. Cool. All right. We're back to the present. And yes, I would like to show you this part here. So today, as we were saying, we are talking about, let me grab your desktop here. Can you see my screen? Yes. Yeah. We're talking about Code Ready Workspaces, which is an in-browser IDE, is the product name for Eclipse Share AppStream name. So the AppStream name is Eclipse Share and Code Ready Workspaces is the product that Red Hat put on top of OpenShift in order to have this multi-tenant in-browser IDE. So this is a little bit of context. And today, our focus is on this dev file. Why this dev file? Because the dev file is in this browser IDE, the way to create a kind of docker file for the building tool. So in our workspace, we need the runtime. We need the building tools. We need the environments variable. We need the commands, the tooling. All of that are encapsulated inside our work. Lost audio. We lost Natali completely. Whoa. Okay. Fun. Well, okay. We'll give him a minute to get back here. Yeah. What you got, Ryan? Man, let's see. Do we lose Ryan as well? No, Brian's here. Brian's here. I'm still here. All right. Yeah, man. Well, Natali, I'm sure, we'll be back momentarily. He's already rejoined. That was weird. It could have been worse. Last week, we lost the whole thing. Yeah, the whole computer crashed. Well, that was my mistake. I was trying to upload. So occasionally, I'll download all the videos from Twitch and then upload them to our G Drive for archival purposes, just in case, right? Like, and I thought that was a six-hour operation. But the second I, like, left my desk, it turned into a 16-hour operation. So flooded the upload pipe, completely smashed the box, crashed the whole system. That was crazy. It was nuts. Anyways, I put it back together on YouTube and uploaded it. Natali, you're back. Yeah, I'm back. Sorry. No worries, man. Not a problem. I crashed on Fedora. That's sometimes worse. Yeah. Yeah, but I managed to come back. Sorry for this new interruption. And let's see if we can continue from what we were talking about. So we were talking about those dev files. And the dev file itself is just a descriptor of our workspace where we will start adding our environment code-ready workspaces. And just to understand how it's made this dev file, very easy, is a YAML file, so very familiar to Kubernetes work, in which you describe which project do you want to work with in any IDE, like Visual Studio, IntelliJ, we start with project and the source you are starting with. So if it is a Git repo, if it is a zip file, if a local directory in terms of the workspace, so you can decide the source type. The second part is the component. So this dev file, this manifest file is component by a plugin list. And those can be also Visual Studio extension. You can use it with extension code-ready workspaces and you can refer to this plugin or extension. We will see also later how it works. And you can also tell which Docker image is your workspace. So you can start from a Maven Docker image, start from a Node Docker image and you can tell which image, which container image you want to work with. So we understood that this workspace is just a container image that contains some plugins mounted in this container in the Kubernetes word is a pod and you can inject environment variables and reach this workspace with commands like run configuration, like the one we used to have in any, a modern IDI. So I want to show after this little bit, a little introduction, I want to show you this on the cluster. So let's simulate a common use case.  So we were part of an organization on GitHub, the Red Wine software organization. I love that. Yeah. And I invited also you, Brian and Ryan, if you want to have the same part of this marvelous team here. So as we are part of this organization in GitHub, I had the configuration in OpenShift to allow this team to log in in the cluster. So we have a GitHub authentication here. I'm already authenticating on GitHub. So this is my name and this is my user. So I'm accessing the cluster in a multi-tenant way and I can work only in this cluster. This is my operational point of view. If we come back to the general administrator point of view, I can show you that we have this code ready workspaces, which is our product around Eclipse chat, install it in the cluster. And when you install this in the cluster, I can show you in the developer perspective of the topology on OpenShift here. In 4.5, the operator, so you install code ready workspaces from an operator. When you install from the operator app, we'll install in this OpenShift workspaces project. We'll create this for you automatically and you can create through a custom resource your code ready workspaces installation. So very easy for an operational point of view, installing, configuring and managing code ready workspaces. Let's switch to the developer view. So this is the ops view, installing through a operator and custom resource driving distillation of code ready workspaces. So you can customize your IDE environment server from here. From a developer perspective, let's go to the topology view of the developer console in OpenShift. And here we have the topology of the IDE. So there is a server serving the content that is a DevFile registry. So this is a registry containing our DevFile. If you remember, the DevFile are the manifest for our workspaces. So we need to store them there. You have also a plugin registry. So you can store the plugin in this plugin registry a database and a single sign-on with key block. So the only thing we need to do is give to our developer team. In our case, the RedOne software, we have just to give the URL of code ready workspaces and they can log in with the to authentication integrated with OpenShift. So now we are accessing code ready workspaces. So this cluster, just to do a recap. You installed OpenShift. So it's simple new cluster. You set up GitHub authentications with your RedOne software organization, right? Then you installed the code ready workspaces operator and that's where we're at. Sounds like it. Exactly. Yeah, yeah, yeah, exactly. I did this and I integrated the all to authentication because key clock is gonna map the user in OpenShift. And once you do this, you are authenticated in code ready workspaces also. So this is my view as user, as normal user, this is my view of the code ready workspaces that will reflect in OpenShift my project view. So we can start from here. This is the quick start. Any modern IDE as a quick start for creating new project. This is our quick start and I want to show you this one. This is, those are typically one tire. If you think about this, about fuse, quarkus. This is not JS MongoDB is too tired. That means in the same workspace, you have a front-end container and a database container. So you can just test locally. When I say locally, I mean local to my workspace pod inside OpenShift cluster, not on my laptop, because the sense of this in-browser IDE is just to give you the capability to develop directly on the cluster, on the platform, test coding, building, testing, pushing and then trying inside OpenShift. Once you do this, what happens under the hood is that it's creating a new container, a new pod containing your code ready workspaces workspace. So let me, let me go to the console here. I have a bunch of cluster in the history. Let me go here. I can access OpenShift with my all out to authentication. If you remember, I can still login with my GitHub integration. I'm allowed to because my team is allowed in the all out to integration. Now here, I have this project created automatically for me by code ready workspaces. So this is my user, my handle. And code ready is just some name appended by the server. If you look here, this is very familiar to us. This is just the OpenShift topology view showing us that there is a pod deployment with a pod that is starting. And this will be our workspace. So the workspace is a pod connecting, talking with the code ready server that we have seen in the other project that we cannot see here because we are not the administrator. But this is gonna talk with the code ready server and it's gonna instantiate and initialize the workspace. You can also look from here. There is the list of what this is doing. This is just the first time. And those workspaces are persistent. So you don't need to wait all this time for the second time you will start again the workspace because all the initialization settings are saved in the persistent volume. So we have a container. We have a persistent volume here created automatically by the pod ready server. So this is a two gigabyte workspace where we're gonna save the code, the assets, the builds and all the settings that we need for starting a coding our application. So we have everybody ready to go. And if you see here, we have also this route. We have actually several routes because when you test the application in code ready workspaces you can access the workspace directly through a route. So the process will listen inside the container inside the pod.  So now that we started the application everything is ready so we can start coding and see our application working. I wanted to show that this view that you see here I'm gonna increase also the phone is Tia, Eclipse Tia project very familiar to Visual Studio Code user, right? So this is similar to Visual Studio Code and in fact you can also run many of the Visual Studio Code extension inside code ready workspace and this is pretty cool. That was literally gonna be my question to interrupt you. The extensions are like, you know what makes Visual Studio Code powerful and having that available in Tia is pretty sweet. Exactly, exactly. And you can also customize totally your extension. If you remember that pod that we have seen before the plugin registry. So you can create a custom plugin registry in instructing the code ready custom resource and you can fill them all your custom all the extension that you want all the Visual Studio Code extension that you want because by default you have those extension here if you go to plugins you have a set of plugins those are present inside the plugin registry that is shipped from Red Hat so this is come from the Red Hat image and contains you know most famous programming language plugins for instance it contains the OpenShift plugin that we are going to install in order to work with our application. But yes this is our application, right? I want to show you that just this file here if this is the first time you see this dashboard so this is our application and Node.js we have two containers and we can review this if you go to open a terminal in specific container so we can go to the MongoDB container so this is the MongoDB container and if we do the PS command here we can see that there is a Mongo process running and also we can open a terminal going into Node.js so here we expect to find NPM Node binary so we have two containers in the same pod and we have some run configuration so we can run some tasks here for instance the most common one are to you know resolve dependency with NPM installing this case and start the application starting also our running configuration and all this all this when this task will finish we will have the output here so this is running NPM installed inside this container inside the workspace pod and when this finished we are ready to test our application and this is really cool so this is our initialization we can start testing our application if you do the NPM start inside the same context of the application this sample here is just a guestbook in Node using MongoDB so this is our guestbook this is pretty nice because we are basically working inside we are working inside contrary to workspace inside our workspace but we have an open-shift route if you remember and we can interact with this I can copy here in the chat if you want to say hello in the guestbook this is our guestbook setting the data inside the MongoDB workspace here yeah where's that link let's get the guestbook going yeah I passed the link in the can you see the link in the try to see if we can do a sequel injection try please send your burp sweet outputs to Natali evento please create an issue on the GitHub repo yeah so this is cool we can work, build and do stuff but imagine we want to start being collaborative let's look at the dev file so we talked a lot about the dev file but how it is this dev file so when you create a new workspace automatically code in your space will create automatically for you a dev file so you don't have to write it from scratch which is good right we don't have to do this so we can just look at how it's generated if you remember there was the if you can see the project section so the name of the project then if you look this it doesn't start from Git starts from a zip file contained inside the OpenShift dev file registry we have a list of components for instance the plugin the Visual Studio Code plugin for TypeScript then the Node.js the bug and we have our Docker image the container image that is actually running our commands if you remember we have two containers so we have this container that will have some environment variable here and the run configuration so we can also code this run configuration if you want to give to our team the run configuration command to just try start push deploy we can just act this one and create the dev file for this one so as an exercise now what we can do is you know adding some plugin to the workspace for instance if we want to also from this view the OpenShift connector plugin and this will contain although for instance OpenShift CLI so all the plugin that we need we can just click apply here what happens that the workspace is going to be stopped and restart because you need to mount the new plugin in the pod it's like a you know Docker volume in Kubernetes is a persistent volume you need to mount this and it will give us the OpenShift connector plugin visibility when it started so this is nice because from the UI we can do everything as we want but if we want to let our teammates to don't do this manually all the time right and maybe start from some git repository and not starting for instance from a zip file what we can do is just copy this file in our git repo and then starting creating the new workspace from the code ready workspace button that I can show you in a few moments so the idea here is just to create a code for our developer let's say we want to put in this organization here we want just to put this MongoDB example and this MongoDB example itself is part of a list of example in Eclipse Chef project so you can look at all of them and if you go here in Chef samples very easy on who has the dog I'm sorry is that you Nathali okay no worries I'm just curious so this is the very big dog of my uncle that usually start singing at 5, 6, 4 I don't know which reason maybe my voice so I'm sorry about it oh no worries I was just curious yeah as long as this the person speaking then yeah nothing can be done about it really other than take the dogs out no I don't bother with that it's fine like I'm used to having dogs around right like my dog is right there so yeah right my dog goes off every day 5 or 6 o'clock starts barking and I got to go take him on a dog or something he's predictable at least but yeah no big deal since we've paused we had a question in chat about setting memory limits on some of these environments I think you mentioned you had a 2 gigabyte limit on the development environment I believe is that correct so you can set the limits even you can set the limits in the depth file itself so for instance in this container here for Node.js there's a limit of 512 megabytes those are relevant to the workspace to the container right that's for the workload what about the at the upper level and OpenShift you can you can set quotas for the specific OpenShift project so this can could be done either from the custom from the custom resource when you start code editor spaces you have those custom resource here I'm talking about administrative limit so I can show you the yaml that you showed for code ready workspaces earlier so you're trying to so that you can set limits on the amount of workspaces that each individual user could have open at one time so that you're not consuming too many resources for each individual user you could do other things like memory limits for that environment yeah usually this type of question I would want to ask the person like okay well why are you trying to limit it and who are you trying to limit it for are you on the operation side and you want to restrict too much usage by developers or give developers a sensible ceiling that they shouldn't go beyond so they don't have memory leaks or maybe you're the developer who is trying to prevent those memory leaks I think they both need to have entry fields for folks the ones that are more limiting per project are probably what I might use for administrative on the administrative side but a lot of this I think is slightly a lot of what we're showing today is related to the setup of code ready workspaces and so a lot of what we're showing is a little bit more on the administrative side I think I think a lot of this could be reduced down if you were an average front end developer who wasn't really focused on containers or Kubernetes so this could be boiled down quite a bit more JP Dade is like right in my heart right now as he just said yes developers trust but verify I'm the ops guy those jokers will take it all if you want that's the motivation yeah so now we know right like there needs to be some limit on the amount of capacity that the regular you know user can consume as they're trying to break things right like oh DBAs is a good example right as they load in terabytes of database into memory potentially right like that's fun to deal with as an ops person I'm sure right like there's is there a way to limit that yes you can limit as we were talking about from an operator perspective or you can just give quotas to the project for instance in our cluster here there are some quota not in this case because I think I removed it but you can also set up a trigger or own a web book admission control and a web book in an open shift in Kubernetes that set up limits range or the resource quota in the new name space automatically so this can be a very helpful if you have a very large number of developer team and you want to just assign quota or limit the amount of resources that they can use because they could hack the file but they can't really act the limit range or the resource quotas yeah that's going to be your answer jp date for probably all those problems right like you're going to need that on every project right like that you're handing off to somebody or every names space that you're handing over to somebody like you should have resource limits in every container you should probably have resource limits on things that you're handing to people as well exactly exactly the code ready workspace custom res is very granular in terms that you can say okay the dog started again I'm totally fine with that I'm ignoring it at this point so you can tell okay you can use just two persistent volume pair user and the sites that can be maximum 2GB pair persistent volume so those are settings you can put in the YAML file here and you can drive the tuning of the code ready workspace instance on the storage side for instance but this is for the administrator part if we come back to the developer part what we want to do is I want to give to my team mate if you go to these check samples you can pick one of these for instance the one we selected is this Node.js MongoDB sample I want to give the capability for my team mate to create this automatically maybe with the OpenShift working connector without doing it manually so how to do it you can fork it in the in your organization so I'm going to form this repository here it's going to be forked in our Redline software organization and what I will do is create is adding a def file here so code ready workspace is with a mechanism which name is Factory will create the workspace automatically by clicking on a button and I can show you that it's really nice it's really easy so if you remember we have just to go back to our def file here we have just to change the source to type to git not using the zip file but everything then would be the same so working in our fork we just add the new file from the def file yaml so it's a yaml file we can copy the yaml file here and we can start modifying it so we say that this is git and we want to start for instance from this repository itself so we can keep the URL here of this one so let me add this and we can just copy this one so location is going to be this one so we start with a project name it's going to be a project something so the name will be not js mongo for instance and office hours we can so if somebody is doing this yourself I mean obviously make sure initially whenever you load code ready workspaces login and get the sample you created a note js sample so create one for you know whichever language there was all those choices right so start off with that and then you'll be able to easily switch out this over here right exactly exactly so once you have the death file here the nice things is to just in the redmi just click button that will start this automatically for you so in order to do this we can just copy we can just copy another death file and we can and I can show you for instance the one I was doing for the same example last time so let's go here let's go to my report I already did it let's go to the same example here so what I did is just adding this button here when you click here this will create the workspace for you using the death file and using the factory the factory so I can just copy this one going back to my example here it's somewhere we can just put here for instance and what you have to change is you have to upload this factory SPG which is the image or for this example here we can just give the URL doesn't matter but what you have to do is give the code ready workspaces endpoint so we have to copy the code ready workspaces endpoint in our case is this one so I'm going to copy here and you have to give also that you have to point to this rest API endpoint which is factory accepting the URL of the repo containing a death file in our case we just copy our repository here so we have just to go here and copying the repository let's go back and put the correct URL here HTTPS okay so this is our code ready workspaces factory file we want just to click here and start a new workspace in our user so if you imagine one of this team mate Chris Orion can just click here and when you click here everything is fine with the syntax of the death file everything is fine with the configuration of the work spaces this will load the factory endpoint so the factory endpoint will show you that we look at the death file and initialize the workspace and start the workspace so here I'm not allowed to start more than one workspace because the administrator didn't allow to do it for me so I can do two things I can relax the settings from the custom resource or starting the application or I can just stop this one because I don't need it anymore and I can let the other one start for me so we can just go back here and retry we are logged in here as normal user so we can see administrator developer view that's fine so we can start again we stop the other one so we can restart again if there is any other settings we can just relax this on the custom resource we can start more than one workspace and what happens under the hood again is that you create a new persistent volume in your server when this starts and when this pod starts you can have the workspace starting in your environment for your user so this is going to create again a new persistent volume this is going to create a new persistent volume for us when the persistent volume is okay it's going to create we can go back to the code ready here now it's going this will load our def file with the OpenShift Connector plugin with the same MongoDB and Node.js code so my teammate can start working using also the OpenShift integration we call the editor spaces you can see you probably can't see in the tally but everybody else could see and mine is also coming up now under my account you clicked the button I clicked the button I clicked that button so that I could create this workspace yeah and now we have a very limiting settings for the workspace so we can relax these settings I did it for instance for a demo with Minikube which is the same thing but using Minikube so you can relax these settings in the custom resource and you can say custom chair properties limit user workspace run count if we do this in our workspace and if anyone is not using that in the while because the chair server will be restarted then we can start multiple workspace per project you can see we can drive as administrator the limit count of the workspace and give more freedom to the developer team if they need to open more workspaces and usually they do they want to test, they want to try so now we started the workspace if you remember this is our code ready workspace the code is the same but this time the code comes actually from the kit repository so we have a kit view here if we do any change we will have the possibility to review all the change we made with our live diff, everything that a normal modern IDE is doing very cool that we have the OpenShift plugin integration and the Kubernetes one so we have OpenShift plugin integration this means that here we can create the application in OpenShift we have the Kubernetes one we can navigate all the kinds and work on that so we can really deploy this application and make it live that linked before was just living inside the workspace if we want to push inside OpenShift we can just doing from here it's going to create Node.js application in our project in OpenShift and then we can deploy in the thing so the nice thing that each developer me, you, Ryan, Chris Ryan can work in its own project so here I can work in my project, Ryan works in his project Ryan, Chris work in their project when everything is fine they test in their own project maybe they can use the tecton plugin for code ready workspace so we can have a tecton plugin here a tecton pipeline pushing the application to the platform so this is going to be the flow so now if you want we can deploy the application inside OpenShift or we can go through the talk about ODO I think the nice follow up here is that when you use code ready workspace is plugins for OpenShift connector here so you have the connector the connector to give you also a terminal inside your code ready workspace so here I have a terminal which is different by my Node.js MongoDB terminal and I have the audio so ODO which is the command line for developers pushing for pushing application inside OpenShift I have the OC command line so I have all the settings that I need only thing I want to do maybe is log into OpenShift class with the right context and I can verify that here I'm the right user and I can maybe create a new project where to put my application so this is very simple you can also mix the strategy for instance this repo has already among the already a MongoDB deployment file that you can deploy so you can use this strategy to deploy in OpenShift or you can just deploy from much much better and easier you can deploy your MongoDB instance from the developer catalog it's straightforward you just go here you pick the database in this case it's going to be Mongo you select also persistent database and here you have to put all the settings needed by the application for this application itself if we want to see how it's made we can just inspect the code we can go inside the code and we can parse for instance we can see the Mongo URI here it's user password very simple no but it's just for an example so if we want to create this we can create the database like it is expected there and when you do this you can have your MongoDB database ready to host the application to serve the application that you're going to actually push the plug-in connector this is a nice follow-up because now we're creating through an auto wrapper URI which is the OpenShift connector our application so we can just create the application we call it the guestbook we can let this application start from the workspace directly so we can start from this code ready workspace and it's okay grab the code for instance from the MongoJS the NodeJS MongoDB example so this means that audio will go there and try to deploy the application but we have to instruct and give the name of the component and the programming language so we just sell to the OpenShift connector okay use this is a NodeJS application please push it to OpenShift when you push the application to OpenShift this means that here you're going to create your application and that this will connect to the Mongo application you can do some grouping here for the application itself you can play with the arrows connect things the application is ready we can also access it from this plugin here nice that you can also create an OpenShift route so you can access the application if we call it in this case guestbook route remember that you have always to push your change because audio will push your change this is a UI wrapper for audio if everything is fine on the application itself and we can review this by logs if it could connect to Mongo with the right settings for instance if connected to Mongo yes so if everything is fine this is going to be our application which is available not anymore from my workspace but this is going to be available from my team in the cluster so this is our application that I can work in my OpenShift environment so I tested it locally when everything is fine I push it automatically with the OpenShift connector to OpenShift and thanks to that file if you remember thanks to that file I could automate this and let the OpenShift connector be the default choice for the transition want to start coding they start from my lightest change on the code and from their file using the OpenShift connector so did anybody put anything in the gasbook yeah let me check if anyone put something in the gasbook I can put something I can't click here let me say and here we go now great message from Chris yeah our inner loop no it worked out very good because we tested locally in terms of local workspace some good ops made gave to us the possibility to create workspaces persistent volume, add some storage and add the code ready server, the multi-tenancy so we implemented this developer loop here and this was for the file version 1 we know there is the file version 2 and I'm gonna pass the ball now to Ryan that can talk to us about the version 2 that can be introduced by the new version of audio you bet 11 minutes and 30 seconds go we also have a couple we have a couple questions in chat as well that I wanted to get to and we might have to save some of the dev file 2.0 for a later follow up meeting I can definitely give you the recap of what I tried last night regarding Odo 2.0 and dev file 2 but let's check in on chat real quick first so we don't lose these questions so there's a question around persistent volume groups or persistent volume and the containers for pods ncrw how many are needed what's that look like Natali do you know very much about how many pvs are used per crw session is it generally one pv per session or is a lot of that backed up in the dev file registry so there are a couple of pvs that we can show that actually if I can start shedding my screen again JP Dade was mostly interested in figuring out budgeting how many pvs per session and how many pvs per user I think he has 100 persistent volumes available I don't know how many developers he plans on onboarding but if crw uses 2 or 3 pvs just on its own and then your database might also be using a pv yeah I know I was successfully able to go into your github example click on the link to spawn my own hosted workspace it booted up and I ended up at first time it failed because I hadn't accepted the invite to the red wine software github org so I had to go back in and look at my group invites approve that yes indeed I'm a member of this github org and then I was allowed in to spawn my session so security is working which is good and I was able to just directly one click boot into a hosted IDE that also had a terminal session in there as well with git and odo and most of my tooling so thank you natali for successfully onboarding me as a junior dev that all worked I know you had to do a decent amount of setup live on the stream today we skipped over a little bit and that's partially one of the other things that JP did in chat was asking about what other work is involved in successfully rolling out this experience to a team because I'm not sure if our current documentation goes as far as connecting all the dots quite as well as what you've shown today to the point where all they have to do is just click on the github readme and they're in business right I think that like setup show is a great show right like that whole process could be a show all by itself and then you could incorporate dev files v2 and we could do that next week if you want Serena is down for v2 you're going to talk about it right now we need to check in with Serena I know Serena is I'm not sure if she's around in chat she had I think first rights to the topic for next week absolutely she knows best she says I am in next week and I don't want to stomp on if she already had a topic in mind I don't want to overrule whatever she had in mind I mean there's like two or three brewing right now so you know Serena's been watching we can talk and chat for sure but we're not stepping on any toes Serena's down for the cause right well I don't know she has things in the roadmap that it's like hey this is about to roll out and I need to talk about it at the start of September you know she's from the future and I don't know I know Serena also knows that she could get like future times for me if she wants yeah yeah yeah alright well definitely stay tuned for follow up episodes one thing that I can potentially demo or I would challenge you to try out on your own if if you're up for it if you're interested in learning more about dev files I posted a link to a github issue at the very start of this and I'm going to re-post it in chat that has a kind of the dev file 2.0 roadmap the URL it's github.com slash dev file slash api and then milestone one was the rest of the URL there and so that has kind of what's going into this dev file 2.0 release I know Odo 2.0 has been released I think this or there's like let me double check on that it may be an alpha state I think the latest one I grabbed was Odo 2.0 alpha yeah it looks like we're still on alpha releases for 2.0 which would make sense because the dev files are still kind of in progress for 2.0 but Odo 2.0 is targeting these dev file 2.0 format formatted dev files so that's kind of what we're working on out into the future some of that UI wise won't be available until I think OpenShift 4.7 is where it's currently slated feature wise so if you want to play a all future project to change but if you want to get a small taste of the future this is what I did last night I went into OpenShift 4.7 I picked the top right top right my top right option was developing on OpenShift and then the second after that you get into a submenu you can pick developing with Odo is your second top right selection in there that will automatically drop you into a catechota scenario that helps you it's different than using code ready workspaces but what I did was I went to the releases page followed the instructions for the Odo release copied in the latest Odo binary so I had Odo v2 and then went ahead and followed along with the rest of the OpenShift catechota learning scenario and it all worked perfectly there was one extra command line flag I needed to add in I needed to add in like a dash dash s2y on the java build that was a new flag that's been added but otherwise Odo 2.0 the alpha seemed to work fully backwards compatible with Odo 1.0 a new feature I saw was that you can configure Odo 2.0 you can run I think Odo registry and then you can add a dev file registry address and then Odo will try to work against that dev file registry to load, store, save and interact with those dev files I was almost expecting one to get output to disk or something I didn't see that but it almost kind of makes sense to do that but it's a little bit more architecturally to keep the IDE configuration somewhat outside of maybe the source code especially if I'm dealing with microservices I may want to decouple my IDE setup especially if a lot of people tend to configure that per user my IDE setup might not be your own but it's definitely nice having a link right in the read me that I can click on in order to load an IDE and then kind of hopefully merge some of my preferences as well so thanks again Natali great demo today we'll be back every week same time, same place thanks for joining us this week thank you to the folks in chat who had questions and we'll be back next time as well anything else to close us off with Chris no stay tuned for OpenShift Commons starting in 25 seconds alright thank you all so much see you alright thanks guys


You can do that with palms with the same technique. Now let's do it with the poxel. So one, two, three. So pop, hit, pop, hit, pop, hit. Pop, hit, pop, hit, pop, hit. Pop, hit, pop, hit. Power punch, very punch, very punch. Forward, forward, back.


What's up everyone? It's your girl Kenzie here from Layton Sports Cards and I'm ripping a personal year for George Y. Got an order of the 2022 Panini National Sports Convention VIP exclusive Silver Pax and also an order of the Gold Pax. These come in bundles of five year for your George. You got one, two, three, four, five on the silver and the gold. One, two, three, four, five. All right, good luck. I'm going to start here with the silvers. Got Anthony Edwards and Red, Kenny Pickett. Nice one there. 79 of 99. I don't know if I've seen any Pickett's yet out of these silvers. Nice. Jabari Smith and Orange to 199 Shrey Young. A Suzuki rookie and Purple to 25 Jama Rantz. Nice draw to 25. Got four. Jabase and to 199 a Spencer Torkelson rookie. Tigers. Tork. What's the name on the order? David Beckham and Red to 99 Justin Jefferson Vikings. 16 out of 99. Just need the first name and last initial. All right, Gold Pax here now for you George. Good luck. We've got Mack Jones rookie base and a Dan Marino on the pink disco that is 30 out of 50. Nice Dan Marino there. Yours is coming up shortly, Zork. We've got Ricky Henderson and cracked eyes to 99 Kate Cunningham. It's a 99 there on the cape. Barry Sanders and we've got Zebra. Mike Trout. Nice one there George. That's sick. Nice Trout on the Zebra. Beautiful hit. Pack four. Zion base. Pink disco to 50. rookie Justin Fields. It's up here for you George. Beautiful Fields. That one is 48 out of 50. Hand last pack. Furry and Hyper Joey B. Nice burrow to end it off for you. Alrighty George, that'll do it for your pack. Thanks again for hopping in and we'll get these right out to you.


On the surface, Super Mario Kart sure looks like a blatant cash-in, like some Nintendo executive somewhere was like, damn it, we need more Mario games, we're in a war against Sega here, I don't care what you have to do, just make a mode 7 game with Mario characters and be done with it. And really, they could have stopped there, but thankfully they didn't. And the resulting game was the birth of a terrific series that's still going strong today, with the release of Mario Kart 8 coming on Friday the 30th here in North America. But is the series' original incarnation worth playing today? I know that sounds like a silly question, but think about how far the Mario Kart series has gone. The sheer amount of tracks, items, and gimmicks, it's always a little tough to leave behind all the enhancements you've grown used to as you travel back to the past. But the original Mario Kart doesn't need all that stuff, it has a certain simplicity to it that's almost beautiful in a way. It reminds me of Mike Tyson's punch-out for the NES, just such a deceptively simple game that's overflowing with charisma and charm, and the game's core mechanics make the game just effortless to play. That literally anybody could play this game and have a good time, my freaking mom could play this game, I'm on, and have a blast doing it. And of course, when I talk about playing this game, I'm not just referring to the racing. There's the infamous battle mode, which has turned many, many friends into bitter enemies over the years. I remember my elementary school friends, little brother, used to hate me for beating them every time we played, to the point that he accused me of cheating, whatever kid. But again, the key here is how simple it is to pick up and play it. Hold B to accelerate, drive over a question mark to get an item, and A fires the item. Just cross your fingers and hope that whoever you hit doesn't promptly throw their controller at the TV. Now, if you've been spoiled by modern games, then the usual pitfalls of playing a classic game are going to come into play. Like the graphics in the artwork, for instance, they are very, very much early 90s and outdated looking, but they don't get in the way of the gameplay, and they don't hinder anything. In fact, I really like how jarring it is to get hit with an item. The whole screen seems to shake as you spin around uncontrollably.  In the later games, starting with the N64 version, you run into those question cubes. But in Super Mario Kart, there's a series of question boxes that you can drive over. It makes it way easier to get items this way, which I really appreciate. It always drives me crazy in Mario Kart 7 when somebody cuts me off and steals my item, or when the boxes don't regenerate fast enough. But in Super Mario Kart, you're almost guaranteed an item every lap, since they're so easy to get, and that in turn makes the races that much more fun. Also, it's worth noting that the tracks are much shorter. There are a couple exceptions, but for the most part, every course is pretty dang short, much shorter than you'd expect from the modern games in the series, and as a result, the races are five laps instead of three, and there are five races to a circuit instead of four. There, of course, is the special cup that you eventually unlock after winning all the other circuits. Good lord, Rainbow Road still gives me nightmares.  But yeah, you don't need me to keep prattling along to tell you why Super Mario Kart is still a classic. It has a timeless simplicity with an innate quality that allows absolutely anyone of all ages to just pick up and play and have fun. Some of the modern Mario games can be a bit complicated, what with the drifting and the crazy tracks where you're constantly falling off, so that in turn makes the direct and modest Super Mario Kart that much more appealing today.


So, I decided to hook up the logic analyzer to the hold, hold, act, and IAQ lines of the processor because I woke up last night in cold sweat. As sometimes happens, my subconscious was chewing on data while I was asleep, and it came up with a red flag. A quick review. I can ask the processor to stop when I assert the hold signal, which in this case is active low. The processor acknowledges that it has stopped by asserting its hold act signal. Also, the processor's IAQ signal indicates that it is reading an instruction from memory. IAQ stands for Instruction Acquire. Okay, I hit step a few times. Let's zoom into one instance and see what woke me up at night. Well, that's no good. That's no good at all. That's like an 11 step, not a single step. The reason is that my AVR-powered pseudorom is too slow. Remember that's a single step, I want to release the processor just long enough for it to execute one instruction, then stop it. Executing a single instruction could take as little as under a microsecond, and my pseudorom takes something like 12 microseconds to react. And if we look at the very first step after reset, we can see another problem. The processor said it was running, but it took quite a long time for it to go fetch the first instruction. That's just how long the processor takes to come out of reset. The original plan was to assert hold as soon as the processor said it was running, but clearly that's not going to work in this case. I have to assert hold after the processor says it has fetched an instruction. So that's two problems. Yay, subconscious. Alright, so here is a timing diagram of what we want to see now. So I have a hold signal here. This is actually a positive active signal, unlike the one that actually goes into the processor, which is active low. The reason that I did that is just because it's easier for me to keep track of the fact that this is positive logic instead of negative logic, so I'm just not getting confused anyway. So the idea is that we start off in the state where the processor is being held. So it stopped, it's not doing anything. Hold is high, and hold acknowledge of course is also high, and the processor is not executing any instructions. Now, we flick the step switch, and when that happens, we unassert hold, and eventually the processor acknowledges that by starting to run. And when it runs, it executes an instruction. So now the idea is that when we detect that an instruction is being fetched and executed, we immediately assert hold again. And eventually, when the processor finishes executing its instruction, it will acknowledge that hold. Now the processor is stopped. Now if we were to flick the run switch, then what we want to do is unassert hold again, and of course the processor will unassert hold acknowledge to signal that it's running, and it goes and fetches instructions and executes them and keeps going, until we press the step button, which is now also a stop button. When we hit that, we want to hold the processor. The processor will, maybe it's in the middle of executing an instruction, maybe it's in the middle of fetching an instruction. It doesn't matter. The point is that when it's done, it will acknowledge hold, and at that point we can say yes, the processor is stopped. And after the processor is stopped, we're back in this state in the beginning. All right, so let's draw that out as a state machine and see what we get. All right, and that's easy enough to do. We will just start in state zero. That's going to be here. And we're going to say, all right, we will flick the step switch. Now the step switch goes up, and at that point we want to wait for the step switch to come back down. So the step switch comes back down. At that point we want to unhold the processor. So what I'm going to do is I'm going to put a little arrow here saying hold goes to zero. Okay, so at that point hold acknowledge goes low, but we don't care because we want to know when the next instruction starts getting executed. So what we're going to do is we're just going to wait for IAQ to go either high or low. In this case, we're just going to let it wait until it goes low, and at that point we want to set hold equal to one. And when hold equals to one, what we want to do is simply wait until that hold is acknowledged. So hold goes, sorry, hold acknowledge goes high, and then we go back to the beginning because now we're back in the state where the processor has stopped and we're waiting for either step or run to be hit. Great. Now what happens if run is hit? Well, what are we on state for? So this is run goes high, and we want to wait for run to come back down, okay? When run comes back down, we want to set hold to zero, and basically we just want to see that instructions are being executed. So we're going to say IAQ goes low, and when IAQ goes low, now all we're doing is we're basically waiting for the step switch to be hit. We don't care if the run switch is hit because we're already running. So we'll go to state six, we'll say step needs to go high, state seven, step needs to go low. And when step goes low, we want to wait for hold acknowledge to go high, and that means that we can make it go to step three because we also want to set hold to one. And that's it. That's the state machine. Now we'll just fill out the rest of the hold signals. So here, of course, we're not doing anything, so we're holding at zero, holding at zero. Here we're hold is one, here hold is one, and here hold is one, and that's it. So that's basically the state machine, eight states. So we're going to implement this as a state machine with three bits for the state. So state is three bits, and we've got a number of inputs. We've obviously got step, and we've got run. We've also got hold acknowledge. We've also got IAQ. And the one thing that I didn't show in the state machine is that there should be some sort of a reset signal, which will set the state machine to state zero. So we want a reset signal. And so that's the input, and the output is going to be the next state, which is also three bits, and also the hold signal. And that's one bit. So in the input, how many bits do we have, eight bits of input? And for the output, how many bits? Four bits. So that's a 256 by four prom. And again, such things do not exist anymore. They used to, but now they don't. So of course we're not going to use our pseudo ROM because we know that our pseudo ROM is too slow. So we're going to use something else. So the ROM that we're going to use is this Atmel 8k by 8 parallel electrically erasable prom. It is, believe it or not, the smallest prom that has parallel output. Most, well actually all, of the smaller proms are basically used for things like configuring FPGAs. They're usually little eight pin guys, and they are serial output. So they output one bit at a time. And they're also serial input in terms of address. So that's absolutely no good. We want to be able to, in parallel, put an address in, and in parallel, get eight bits out, or four bits, but in this case, there's nothing smaller. So we're stuck with this huge dealio. Okay, so that leads to another problem, which is this thing right over here, the access time. What that means is, if we look at this timing diagram over here, is that when the address is presented to the chip, it must be stable for 150 nanoseconds before the output becomes valid. So if the address is changing, well, the data is going to change. And even if the address is not changing for say, 50 nanoseconds or 100 nanoseconds, the internal components and circuitry may not settle on their final value, which means that the data is just going to be all over the place. So it's only 150 nanoseconds after the address has been presented and is stable to the chip that the output will be valid. This is the chip enable line. It's active low. We're going to keep it low. This is the output enable line. It's also active low and we're going to keep it low. So the time from chip enable to data and the time from output enable to data doesn't actually matter. So the only thing that matters is this access time. So that's 150 nanoseconds. Now the thing is that we are essentially clocking, here is the inverted phase two clock. Remember that there are four phases, they're staggered, and we're using the positive edge of the negative phase two clock in order to clock the next state into our register. And at the same time, what we're going to do is we're going to clock all of the input signals to the ROM chip so that the input can remain stable until we evaluate it and get the output and then the output is going to be stable and we latch the output and that's the next state. So let's put together a ROM, load it with data and add a register that will register the inputs and the outputs and see what happens. So here it is. I have hooked up the ROM in the breadboard right over here and next to it is an 8-bit register, which I use to register all of my input signals like the reset step and run line. The hold acknowledge and IAQ lines actually don't need to be registered by us because that is registered by the CPU already. And the next state is also being registered as well as the hold signal. Great. Single step actually seems to work and I can run the processor and stop it and single step it and that's pretty good. Let's take a look at the logic analyzer. Okay, so we can see I've stepped a few times and then I hit run and after I hit run I also stopped the processor and stepped it a couple of times. So let's take a look at one of these signals. We can zoom in and see what happens and make sure that only a single instruction gets executed and yeah it looks like a single instruction is executed. So when we hit step we release hold and the processor acknowledges that so it starts running and this is the first time after reset so it takes a little while before the first instruction actually gets executed and that's normal for this processor it just takes a little while. Once the instruction starts executing we assert hold and after the instruction is finished executing the CPU acknowledges hold so that seems to work pretty well. Let's take a look at the next instance of the single step and here we can see that we release the processor after the step button is released and the processor acknowledges that and starts running it executes a single instruction pretty quickly this time and then we hold the processor and it acknowledges so that works pretty well. Now in the case of letting the processor run I don't show the run signal but you can imagine that I've pressed the button we release hold the processor runs and it starts executing an instruction and another instruction and a whole bunch of instructions and then finally I hit the step button and then release it whoa there's a whole lot of scruff on that release I wonder what's going on there maybe there's a bounce that I didn't take care of well anyway eventually the hold signal is activated and the processor acknowledges hold and that's really all there is to it so that seems to work pretty well here is another step after I've stopped the processor to show that yes after we stop the processor in single step we execute one instruction well hopefully I can get a good night's sleep now I hope you enjoyed that and maybe I should start working on the front panel and maybe adding some RAM to this thing since I seem to have single step working pretty well until next time see ya


now. So I'm your TechSoup Connect Ontario chapter host for TechSoup Canada and TechSoup is or well TechSoup Connect I guess is a global network for tech for good meetups. So TechSoup if you aren't aware of them is a nonprofit that helps other nonprofits get implement and use tech effectively and they we are a global network so we have meetups all over the world and this one here that I host is here in Ontario Canada but we have I've had speakers from all over actually and Matt joined us from you're in Hong Kong right yeah so we're from all over the world so some of the things that we value we welcome everyone we put our community first because we're all here to support each other we build stronger nonprofits through technology and that's why I love to share as well and we love for people to participate so we can all learn from each other so if you have something to share or teach us especially technology related let me know if you're interested in presenting anything I'm always looking for speakers and presenters and we always treat each other with kindness and respect as well. So TechSoup Canada at you can find them at TechSoup.ca brings you a whole bunch of technology at prices you can afford and what's missing from this slide is also Google workspace in order to validate to get the free Google for nonprofits you would have to go through TechSoup and there's a whole bunch of other discounts you can get through TechSoup as well. And as I mentioned we would love your help I'm always looking for people to host events so if you know somebody in the tech space who might have something great to share with nonprofits please let me know and if you have any other ideas of what you'd like to see please let me know I do my best to try to find speakers on certain topics and I know Airtable was one that was highly requested when we had a previous event which is why I sourced out Matt to come out and help us. A little bit about me I am your host for the Ontario chapter I have over 20 years of experience implementing all sorts of systems for nonprofits as well as small and large organizations and government organizations as well. I am Google cloud certified and I do do Google workspace implementations but I also do a whole bunch of other system implementations including Zoho one and Microsoft although I don't focus as much on Microsoft but I can help with quite a few things there as well and a whole bunch of other systems what I really love to do is help bring people processes and technology together so that people can people in businesses nonprofits anybody can work smarter not harder so sometimes it's something as simple as you know helping somebody figure out how to organize a template for something to full out implementation or optimization or automation. I obviously need to update this slide because we're no longer Toronto organizer it's Ontario for TechSoupConnect and I am also the president for a nonprofit myself I am the president of the one parent family association of Canada and I think that brings me to the end of my little deck and there we go and now I would like to pass it along to Matt who is here to help us learn more about Airtable so Matt I'll hand it over to you to do a little intro tell us a bit about yourself and I'm really excited for your presentation. Sure thanks Andra really appreciate the introduction and the invitation to come and talk to you guys so yeah I'm Matt born I'm currently based in Hong Kong clearly not from Hong Kong but based here currently originally from the UK and for the past few years I've been working with businesses and organizations to help them implement no code or low code tools Airtable being one of them which we work with extensively and how that then leads on to kind of better organization and automation ultimately of your of your business needs so very happy to be here and and share my love of Airtable with with you guys and so I can go ahead and share the screen right Sandra? You should be able to yep I give you a try okay so if you just let me know you can see a slide deck okay yeah I can see it great okay so I guess you know if anybody has questions then you know please go ahead and put them in the chat for now hopefully there'll be time at the end to address any questions that you might have but hopefully as we go through we'll answer some of your questions as you go so that's the plan at least okay so let's jump in first slide okay so today and apologies I'm not looking at the camera I have another screen here so today I'm going to give you an introduction to Airtable a brief overview of kind of what it is what it does talk about why you might want to use it over and above a spreadsheet based solution which is obviously very common and then we'll go through a quick basic build as an example I put together an event volunteer base that might be of interest to those of you in the non-profit charity space to help you kind of organize those those events and keep up to date with those many moving parts and then I'm going to touch on some slightly more advanced stuff just to kind of give you an understanding of the capabilities that Airtable has we only have a short time today to talk about an overview but just to kind of wet your appetite so I'm not sure everybody's level or familiarity with Airtable so I'm going to keep it kind of at a fundamental level for now but you know please connect in the future if you if you'd like to learn more all right so Airtable is a platform that's been around for I think probably six or seven years now and we've been using it or I've been using it basically since it since it came out it was you know a real find at the time and has been very very helpful in in previous jobs and of course in our agency now and what Airtable is is essentially an easy to learn tool to create a relational database and the benefit over that from something that could spreadsheet which will kind of work through some examples is that it gives you the opportunity to kind of organize your information and link it all together so a relational databases being able to build relationships between pieces of information without having to kind of duplicate and duplicate so why might you want to use Airtable? Well I guess the best description the most common one is that Airtable is a spreadsheet on steroids so what normally people mean by that is that it's something that's very easy to use it has a familiar spreadsheet type layout so it's not an alien kind of platform to to dive into it has that relational database functionality to be able to link information together very easily there's real-time collaboration as you would find with something like Google Sheets but within the context of Airtable so you can you know tag other collaborators in your base and message them in context of what you're doing there are also hugely powerful automation capabilities built in and native there are lots of integration opportunities by connecting Airtable to other apps that you may use we'll touch on that a little bit later there are visualization capabilities you know so charts and summaries and all of those sorts of things to help create dashboards and they have a growing number of very powerful native apps within the Airtable ecosystem itself so we'll touch on that as well a little bit later but just to kind of give you some reasons why you might choose Airtable over and above a traditional spreadsheet solution and one that I like to to share is that you want to replicate your data not duplicate it so those of you that have many spreadsheets that are probably very similar you have a different view for a client a different view for management different view for yourself you know and you're kind of having to duplicate information all over place and it's hard to keep it all up to date so Airtable will will help you manage that process by replication not by duplication very important but we'll we'll touch on that a little bit more so now we're going to jump into it I'll walk you through a few initial things about Airtable first and then we'll dive into the base itself and we'll cover in that giving you some pointers about how to prepare your data if you did want to transfer your information over to Airtable the transfer itself how you might go about formatting that data and then linking it all together to really take advantage of the power and then we'll go through a fully built out example of an event volunteer base with some little Easter eggs in there of some slightly more advanced functions that just might be of interest for you and I'll give you a very brief introduction to the automations features and the app functionality within Airtable as well and so there's quite a lot to cover I'll jump right in and let's give the try so I'm switching a table now hopefully you'll be able to see a Google sheet let me know if for some reason you can't so what I put together here is a is an example of I guess something that may look very familiar to you we have a simple Google sheet with five different types of events that we're managing but I would imagine there would be many many more events to keep track of and there's commonality between all of them but the beauty of a spreadsheet is that you can structure the information however you would like you can have it in a row you can just use a single cell very very flexible so in this case you know we've got the the important data points here organizer date location volunteers that have signed up okay but if we hop into another example obviously the event information is is different but some of the volunteers are the same so how do we keep track of that without having to you know constantly information and so we're going to I'm going to show you kind of an example of how you might prepare data that will be in a similar structure to this so let's look at our organizers first everything's on one line which is a great start and an air table has a structure which works in it looks at its information in records so a row in a spreadsheet is referred to as a record so everything in this whole row would be referred to as a record we can keep going and going as long as you want to a column is referred to as a field so all of the information in the column or the field must be the same type within the entire column so we can't have one cell as one type one cell as another type like we can within next cell at the moment so a slightly different fact to that so the other thing is that the first column is always what's referred to as the primary field so we want to make this sort of as descriptive as possible to help us so here we have a full name first name last name email phone number and we've got them all nice and neatly in records with a nice descriptive title at the top so far so good then in events if I just hop back here so our event tab previously was a little unstructured you know nice and easy to use not a problem in a spreadsheet but we need to do a little bit of work to prepare that if we were going to transfer so again our primary field giving it the title of our of our event obviously the date location address etc and then we have an organizer field here and we're going to use that organizer field to automatically link that information back to our organizer table so at the moment we've got the organizers here and Maggie has has two two events and this will link back to this information so I'll show you how we do that shortly and then for volunteers we have our full list of all of our volunteers obviously the usual data points and then under our events section this is what we're going to use to link all of our information to our events to be able to identify them really quickly and easily so where people are going to multiple events we can just separate that with a comma and that and that will tell our table when the time is right how we want to separate that data out okay hopefully that makes sense so depending on how big your spreadsheet is it can take a little while to format your data but this structure is going to really help us make it a quick and easy transfer all right so let's set something up so first of all we're going to download the CSV file which just gives us all of our information that are really easy to use in a processable way and we're going to do that for each of our tables here and then finally our events okay we've got everything we need now we're going to hop over to what would be our air table account as you can see I have many in here but we're going to add a new base and we could start with a template there are many templates available just to get you started today we're going to start from scratch and that will create us a base we'll give it a name and then we can choose the color let's have a nice there's a pink thing and then we could choose a little logo if we wanted to like so an air table will automatically create us a table and some default fields but we don't need that at the moment so we are going to add a new table and we're going to import from CSV there are various options for us to import by the way we can just connect our account together and then we can import information directly from excel or from apple or trello if you've used that before so there are some some nice options there but today we're just going to use a CSV because nice of you and am I going to find the information okay and we'll import events first okay simple as that it will have a go at guessing what the field types are we're just going to turn that off because we can change that in a minute okay and all of our event information is brought in we can remove this we don't need it let's rename so we know what we're doing and then we can add a new can you zoom in please it's a little hard to read sorry apologies thank you sure how's that i was speaking on on behalf of someone that put a message in the chat maybe they should yeah thanks that works yeah yeah it's hard to uh hard to see that the chat went on sharing the screen thank you um sorry that's my bad i wasn't keeping an eye on it so let's create another one again we'll add we'll add our information this time we'll have organisers i'm going to switch that off i'll show you how to change it in a minute and those are organisers and then our last table here they're volunteers and then off import that okay we're all set everything's in and so you can see if you prepare your data really thoroughly then it's a very very easy process and i'm going to show you a couple of things and then we can move on to our built out version so in here let's go over to events you can see that it's all very nicely structured here already and we can add a new record i'll show you that shortly um we can change the field type so let's say we want a single line text here we could change the date to um to an actual date field um if we go to volunteers because let me know that there's an email address we can change this to email and it changes the field type and there are many many different types of fields that will give you specific controls which you can't do obviously within within a spreadsheet so let's link these up so i think let's first of all link our organisers in our events so we're going to do this by changing the field type to a linked field and we want to link our events to our organisers allow could one event have multiple organisers i guess it could but for now we'll leave it okay and you see that that format has changed straight away so if we hop over to our organisers now it's now linked to their event so Maggie has two events linked to her so if we click on one you can see that it's connecting us immediately two events even though we're inside the organisers reference and you could have access to all of the information in here all right so simple as that and we'll do the same with volunteers so we're going to use our events field and change it to link and we want to link it to events please in the name and it's all done and to pre-vet go to events and there are all of our volunteers brought in so one of the cool things we can do now is we can use one of our special field types and we're going to count up how many volunteers we've got there so if somebody has added or removed this number will update automatically so keep really easy eye on how many volunteers we've got for each location which volunteers are going to which you know some are going to one some are going to many but it's all linked back to their individual record and of course our organisers can do the same so now if we want to add a new a new event it's really easy to do I now have to think of the city in Ontario and then we put in our dates and our location and so on and so on and so on we can link it to our organiser let's say Heather is going to do it this time we linked Heather to it check that go to our organisers and Heather is now linked to the Ottawa soup kitchen as well okay and that's as simple as it is and it's all connected up now maybe we had some volunteers already or we wanted to add a new one we can do anything like that from here so maybe there's my favourite name in here these are all randomly created names by the way but my favourite I think probably is DD Dunkelberger which is objectively hilarious so let's have her in there for now to get us started but you can see how quick and easy that was now very very simple to do and now we have all of that information in one place all transferred and now we can do more or less whatever we want with it so so far so good so now I'm going to hop over to a base that I prepared earlier and I've added in a few extra parts here so we have I've created a formula field here to help us you know bring in more relevant information I have added let's go to volunteers so I've added some look-up information here which you can do because of the records in our linked so if we want to look up a piece of information in another location in the events tab we can just look it up so we're bringing in the date of the event as a raw piece of information the address which didn't exist in this table until we linked it and so you can start to see the power as it goes through and I'm going to show you just a couple of other things that are possible now so in our events tab we've got all of our raw data and we can visualise that in various ways so there is a calendar function which now we can see in a really easy to understand way when all of these items sorry all of these events are going to happen and if we were to drag this we can move it around you know there's something happens a date changes gets put off postpone cancelled whatever you know we can handle it and it will be reflected in the data and because that data is linked to other items it was reflected there immediately as well okay so it becomes a super powerful tool with when you don't need to you don't need to replicate your information if you go around you can sorry you don't need to duplicate you can you can replicate Matt does an event calendar get created automatically for as long as you have dates in your columns not automatically but down here we have different event types so and for all things sorry this is a calendar for all things that we can then create another one and we could just filter so say we only wanted to see excuse me so for this one we only want to see things in Toronto so this is a calendar for Toronto now because it's only going to show us Toronto all right um so some various different types of views I'm going to show you a few more organizers nothing special going on there but for volunteers we have a few different types of views we have a card view which just visualizes the information in a slightly easier to understand way you know you can take a snapshot of each card of each volunteer or whatever data point you're using no problem so it's just a different way of visualizing we have what's called a Kanban style so maybe people need to confirm and at the moment Argentina we can move her into a waiting response and if we go to her data she's now been tagged as a waiting response but let's say we're in this view now and actually she can't make it anymore and so we go back to our Kanban view and now she's been moved into the correct pile if we move her back into uncategorized there so everything updates regardless of where you make the change okay that's the power of the system there because you have all the information you're just visualizing it manipulating it in a different way um so there's another tab here which I've created called donations which I'll save as a little surprise for you um so we also have a form capability so these are all of our fields that we have within the volunteers table but we can use them to create a form to make things easier for us and we can use this form if we go to open form that table is going to create a URL for us that we can share anywhere public URL so this is dedicated for this form you can share it as part of your marketing activity you know you could give it to you know to make a QR code and people can scan it and still get to the same website at the same form you know whatever it is that you would do to kind of drum up interest in volunteering at one of your events so let's do it I need to think of a famous person from Ontario one of the Ryan's Ryan Gosling you form in London um but this is my mail address not his sadly I don't know I wouldn't give it to him um I say we're going to go through here and we can choose here which event we want to go to so you can see that the Ottawa one has also been added um and well he's from London maybe he wants to clean up London um and we submit that okay and this gives us a nice little message this branding can all be removed by the way um and now if we go to our volunteer data we can see that Ryan has been added at the bottom here for the London cleanup and he's all linked in to to that particular uh that particular event and he's all set so keep an eye on this field down here because what I've done also with this is I've set an automation to create um a confirmation page and email it um to Ryan uh so that he knows and he has all the information and everything's nice and nice and squared up so it takes a couple of minutes for that to trigger and whilst we're waiting for that I'm just going to hop back into tell you a bit more about that table itself so as far as pricing goes um they have already very competitive pricing but they do also have a non-profit pricing structure which I think um is definitely worth applying for um uh all of these features you know the pro plan is has just got so many more additional features um with the apps that you can use the amount of records that you can have in the base um and so on and so forth so it's very very powerful solution um and you can check this out you know I'll share this link uh with the you know share my presentation and there's a few links in there that you can go and check things out um so it's pretty competitive as it is now um but they will be even better I think through the non-profit uh that they offer the 50 percent of the monthly cost which is a fairly generous discount um so you know share all of these links with you and you can you can check that out when you're ready so let's go back and see how we're doing here okay nothing's propped in yet um but we'll keep an eye on that um let me just check let's see if there are a couple questions if you want those while you wait yeah let's have a quick let's have a couple of quick questions there's um so Fash was asking about um importing data from other places so it sounds like they need to have people input data every week into an online form will AirTable automatically update it um well will AirTable update the the form so I'm not sure so I'm not sure where your source data is coming from Fash but I believe and I think you were showing me this uh Matt that if you connected to say a Google spreadsheet if you update the Google spreadsheet for example would it automatically update AirTable with that information um uh yes there is a sync function as part of as part of AirTable solution so I probably need a few more details to give you a comprehensive answer but yeah theoretically yes or if not um you know you could certainly do something like that with Zapier which I'll touch on very briefly in a moment so but I think I think the answer to that is there's going to be yes yeah I think Matt pretty much can find a way to do anything with automation and integrations we'll see about that we'll see about that but another question is can Notion do what AirTable does um Notion is a great platform uh there I mean a lot of its capability is relational database capability um they've only recently brought out access to their API which means up until this point automating anything within Notion has been very difficult I'm not a huge Notion user at the moment I'm more an AirTable guy but um certainly I can see some good use cases for for Notion I think uh it's not as well connected um and some of the integrations are still being developed so they're probably a little bit more heavy lifting um but there may be certain advantages over AirTable but for your individual use case so you know I'm not gonna I'm not gonna be down on Notion um but I would say also check out coder coder.io maybe you can put that in the chat um as a Notion alternative which is in my view much more powerful um so if you're thinking about Notion also check out coder.io all right let me jump back in here then so uh if we look at the attachments field here Ryan has got his attachment and I'm gonna pull in my email here hopefully you can see an outlook now and it sent us an email and this has all been powered through Zapier okay so I'll explain how that happened shortly but it'll send any anybody who signs up hi Ryan thanks for signing up to volunteer we can't make to meet you for the London cleanup this is the address blah blah blah and if we go into the attachment uh we've automatically created this document using a system called document which I'll talk about shortly um and I am a terrible designer so you can make it look as beautiful as you want to um but then it's brought in all of our variable fields so thanks for making a difference Ryan this is the what you're helping us with this is the date this is the address and I've also added in here a little Easter egg for you which is a donation link so I'm going to just click on this one and show you very quickly so this is using a platform called Stripe which some of you may be familiar with the payment processor and one of the features is that we can create a link for specific amounts they are working on variable amounts as well so they could choose how much to donate and you're not kind of forcing them down a road and it just makes it very easy for you to include a link in any of your communications to to help with your donations as well so I'm just going to fill this out really quickly and I'm going to show you how powerful this is so if you remember this bit that I'm doing okay because you guys are going to have a go in a minute so four two four two just keep doing four two until you can't fill it in that's like a fake credit card number um put in any date in the future and you just four one two three and I'll have that and I'm going to pay that okay so our payment has been processed and if we go into donations there we go the that literally just came in it came in faster than I could actually get to the tap and this is being done by some automation which I'll show you in a in a moment just you know to show you I guess some more advanced features now you've got all your information in here how you can link things together and then we could then link this to our volunteer or you know create a new account for them or whatever whatever was needed um so just some extra little pieces there to um to wet your appetite um so uh who wants to have a go um can I open the chat from here let me get back to chat hmm I'm just going to stop share for one moment copy this into the chat okay and uh if you're if you want to give it a try that's great I will hide the email address part so you don't have to worry about anybody seeing your email address we'll hide that so feel free to give it a try and we can watch these roll in as they happen so that's quite nice and I can tell you a few other features in the meantime while we're waiting for those um so um yeah when you get to the credit card one just 4242 and keep typing that in and then any date in the future for the expiry and just any number for the cdc um please use a real email address for the for the form because otherwise you won't get your uh email notification but all the rest of the information can be saved of course there we go absolutely one from one from Jane already that's great so you can see that came in just instantly there uh and in a couple of minutes Jane Jane as you Jane isn't actually your name um you'll get your notification but we'll we'll I'll I'll dip into automations really quickly and we'll hop back here in a moment uh so let me share my screen again okay we're back hopefully you can still see the air table here so there's Jane's record has just come in at the bottom there well that triggered really fast so you should get yours in a moment and so I'm going to hop into automations and apps and then you should have time for some more questions um so for automations um this is the automation that I set up that received the information about the credit card so there are lots of triggers um there are all sorts of different types of triggers here when a record is created updated can run it on a weekly daily schedule we're using something called a webhook here which is a quite advanced function um for those of you more advanced users or wanting to be more advanced users um but there are plenty of also triggers that you can take from integrations with other platforms so maybe from your Outlook or from your calendar as your trigger event and then we would have a series of actions in this case we're just going to create a new record here um but there are lots of actions that we could take um so if we created a customer then let's use any trigger uh and in our action step we can use this to send an email through gmail send a message through slack update a google sheet um even send a tweet if you wanted to so um this is a hugely powerful automation platform is native within um air table and is part of any plan actually depending on how many runs you want to use so uh just a way of automating some of your work um that has been a game changer and a relatively new feature within within air table um this wasn't possible to do natively um six months ago uh maybe seven actually um and then there are some other integration platforms called zappia which i'll touch on before we finish um but that's kind of a very brief introduction to the automation capability then we have something called apps um and we can add an app with that i see fasc is also submitted um so this is like the google app store or the the apple app store but for anything within air table very specialized items here document this is the program the app that i use to create the document it's actually something that we developed um and we're pretty proud of it we have a native app in air table as well as a zappia integration so if you wanted to know more about that in the future please feel free we also have a nonprofit uh payment um payment discount as well so happy to talk to you about that so there's a load in here that might meet some specific needs that you have this is one that i really love it's just a summary but it can help us create um a dashboard so this is going to take and give us a summary number just going to count our number um so let's you would say you wanted to keep a track on how many volunteers you have as well okay and then and then when if somebody adds another one you'll see that number change live but let's add one more and we also want to keep track of donations okay to want to get a running total uh of donations um and matt with the running totals for the dashboard is there a way to have both number of donations and the amount given side by side yes yeah we could just yeah we could just create another another window and have it have it together and organize it that way um this is just uh you know an example of what you could do so at the moment we got volunteers and donations but we could have number of donations number of donations value of donations donations today for the month you know we can do a we can do a load of things um with it yeah um uh so i'll just click in a couple more things uh and then i think we'll be ready for any more questions that you might have so um this is strike this is the payment processor that i was talking to you about they also have i think a non-profit discount going um great one to check out this is what i use to create the document this is a template within document again this is our platform that we developed um other document processors are available by the way um but we're pretty proud of what this one can do um so these are all variables here and we just link those up together to create a new document every time a record is run um but you know we can make this as pretty as we need to be as i said our design is not my forte um and then finally we have zappia um and zappia is an automation platform which is probably familiar to a lot of you but if it's not it allows you to create triggers and actions so you would use this where an automation is not available within air table natively so if you wanted to connect to a platform that didn't have an integration with with their table you could do it through something like zappia so in this case uh when a new volunteer submits the form it triggers a new record in air table we create a document in document as per the template i just showed you um we update the record with the uh attachment itself and then we send all that off in an email to whoever's sent us the the form and i think that brings me uh sort of to a conclusion let's just see if okay so i've basically covered all this now but um you know air table is a highly connected platform um the benefit of is it is you can keep it as your single source of truth um so you can import all of your information into air table and make it all visible in one place whether that's you know operations, marketing, finance whatever it might be there are connections available to help you help you build what you need like we've done through zappia or through you know more complex apis but all of those options are available to you uh within the air table platform and i think that's me excellent um there is a question here about integration and i'm not sure if you're aware because um it's a canadian uh thing but um if you know if there's an integration with canadahelps.org which would then issue the charitable receipts and or integration or app that would send out the tax receipts in accordance with all the cra's complex requirements um i i would yeah i would expect there like unless canada helps has an api it probably wouldn't be able to integrate with it but i think what you probably could do is set up some sort of uh automation in order to send out receipts from wherever you're sending them from so if they're coming from if you've set them up somewhere already it can probably trigger it and send it or you can create your own probably using document yeah yeah you absolutely could if you i mean um yeah if there's no api that's going to be hard uh if there is an api it's definitely workable uh any kind of api um uh but if you if there's like um a certain structure or protocol in place and the and the receipt must meet certain criteria and have certain data points then you could definitely just create a template within document or within you know within google docs or something um and we can uh then populate that information into that format um and issue that receipt you know whether it's for a donation or any other any other reason i'm trying to see i don't think i missed any questions if i did miss any questions feel free to pop them again in the chat or come off mute and you can ask matt yourself yeah i was just wondering if the demo form that you used for the signing up for volunteering is that going to be live beyond this training just in case we wanted to show our team just like the kind of tools available and what's capable in your table yeah 100 yeah yeah that that link i'll leave open no problem okay thank you yeah it's uh michael just made a great suggestion if you wanted more powerful reporting you can link it with power bi yeah yeah yeah there's a there's a whole load of other options available to to export the information into something like power bi or um you know google data studio or those sorts of things you know if you have the technical nows to do all that it's all open there for the taking excellent um i guess last call for any questions all right i guess that's looking like it matt thank you so much that was really uh insightful and exciting and interesting and um i think we all got a lot of great uh information out of it well good look i i really appreciate the opportunity thank you so much for um for inviting me on and and be happy to take any questions if you wanted to contact me about anything in particular then um i think sandra you've got a copy of the um presentation to you know share with whoever wants it uh if they yes i do so feel free to reach out um matt i'm trying to remember what your email was again i was going to type it in the chat for people it's it's matt at five x five dot co five we spelled out right or is it the number five uh the the the the spelled version five x five dot co right yeah dot co yeah okay so there's my email address there's matt's email address uh if you want to reach out for anything you know how to reach us otherwise i'll let you guys uh have a great wednesday okay thanks so much everybody thanks so much matt have a great day thank you bye bye bye bye bye