Canvas API & the Microsoft Ecosystem including API, dotNet, github, and App Development
I developed a C# API wrapper for Canvas that is open source and with minuscule dependencies that is used by 40+ other institutions. I will show participants presentation via live coding examples how to use the NuGet package to run queries, develop applications and make their lives a little easier.
My name is, Juul Simon. I currently work at University View Academy. I would have said UVA, but everyone's like, Okay. The the university. No. I work for a k twelve institution.
So that k twelve institution has a flourishing development team. That that's it. And I I was kind of thrown into the role. I was actually from the field of UX, a former teacher, former instrument tech, former electrician. Alright.
That's that's better. Alright. I gotta this is weird. So I was a a former teacher and they they threw me into this position because their former development team just left on them. And then like, Jewel, you can do this.
I was like, I can do what exactly. They said everything from their databases to developing the software that they're just now changing SIS and LMS. I was like, okay. I will try. And a few years later, I'm still here, and we are developing new things every day.
Alright. So this is Alfred Ken Moore. I call him Ken. You all can too. And again my name is Juul Simon.
Alright. So we're gonna go ahead and kick this thing off because I whenever we ran through this one time and we only did it one time with my daughter in the room and she's three years old, And, yeah, let's go. I didn't make forty five minutes. Alright. So today, we're gonna demonstrate a few of the applications that we have built for our institution and we've also published, just open source.
So anybody that wants to use it, you can. The reason being is we are developing for education. And if I can help our kids Hopefully, we can help your kids as well. We're gonna demonstrate how others can use, some of the compile tools that we have and that's some of those small applications. A lot of these are command line applications.
Also, I wanna show you all some of the new gift packages for those software developers, those programmers, and and so on, we publish the nougat packages that you're able to just build your own applications. The sources are also published as well. So before you run anything, go talk to your IT people. Make sure that it's safe. That's something that I would advise anyone to do.
Alright. Lastly, well not lastly. We're going to demonstrate how the nougat packages work. How to use them because the nougat packages actually come from GitHub versus nougat dot org. Lastly, we're gonna have q and a.
Alright. So when the first things, I have a QR here. I don't like QR. But I realized that we're in a a room and you can't really get that link. So I was like, okay.
I'll put a QR code there. So the first one in my naming conventions suck ass. So that is just what I called it. Anybody anybody, working with Canvas data too now or in that transition period? Alright. So if you're in that transition period, That is awesome because I built a little tool to just pull those those packages, and all you have to do is set up a Kentucky So it's a tool that integrates with Canvas attitude and allows admins to download the data files provided by Canvas and the format in which they desire.
What format is the format that Canvas has for you? So whether that be CSV, TSVs, JSON files, parquet, Yeah. They have parquet too. Parquet files and and so on. What problem doesn't solve? So Canvas provides the information, but unless you're technically savvy, there's no way in hell you're just gonna read through all that documentation, figure out how you're gonna pull it and then pull it down. So CD two, cron, or DB.
We'll put down, we'll pull down the files for you and put them in a folder in which you could do whatever the hell it is that you wanna do to it. And then the the the name is actually there because either you could do a cron job or you can push this straight to your database. So in our case, we're pushing this directly to our database, but I wanted to pull it back for a second. And if you are doing some other type of cron job, or if you just want that right then and there, you can just it. Okay? Alright.
So now I I don't like the the slides and stuff like that. They they do know justice. So we're just gonna jump right into a live demo. And if you've never been to a live demo before, if it breaks, I'm sorry. Alright.
So You okay, babe? Yeah. I'm looking for you. This is our second Boy. So it's it's right there on GitHub and so you'll see two things. You'll see the sword which is this first one, and then you'll have the compiled version.
I keep on forgetting to to put the mic to my So if if I don't just yell out, can't hear you or something. So the there's the source and then there's the compiled version. So we're gonna do is we're just gonna work right with the compile version and show you how to set up the config file. And then we're gonna delete our tokens right away. So, you know, y'all don't jump into our data because they didn't give us, an, a database, not not a database, but like a play database to work I'm like, what's up with that instruction? Also, bear with us because we are not windows developers.
Well, he is. We mostly use Max I'm using a window now windows machine, so it might be a little finicky, but anyway, so, we're not gonna actually download anything from GitHub. We're gonna just, we already have everything pre preasly downloaded already. And we're just gonna We're getting the WiFi through the yeah. Basically.
And so, we're gonna go through the process of unzipping the file filling out the config file and etcetera. So you won't see us go back to GitHub anymore, but that is the link, and you did get the QR code. So you can refer back to that. Oh, awesome. I mean, for those that are nontechnically savvy, we can actually just show them how to to get the file from GitHub.
I don't wanna pass up that part. So, we're gonna go to the compiled version of it, and all you have to do is There's, there's going to be a big button. See, this is why I'm scared of WiFi. Okay. There's going to be a big green button right there that says code.
You just click it. Click it. Yeah. And you hit download zip. Once you have the zip, you know how to handle a zip file.
I hope. Alright. So, we're just gonna go ahead and extract it just like we acted like we just downloaded the zip file. And what you're gonna see is a config file along with a whole bunch of DLL files and everything else because that's how it's set up. So What you're gonna do is you're gonna go to the config file.
And again, I cannot stress to you. Go talk to your IT people. If you're IT and you're cool with it, the source is right there. You can compile it yourself. But, yeah, talk to your IT people before you run any type of EXE, please.
Alright. So We have everything that you see that has a hashtag in it is comments. It's what you're supposed to do in that next line. Wherever you see like client, key, full past name and everything else that have these little quotes next to it, that's where you put the information. So first one is this deals with Canvas Data two.
Canvas Data two has a new portal, not new, but it's it's it's the identity dot instructure dot com? Correct. So you go to that. You find your client and key. I'm not gonna go do it now because we've run out of time really fast. So I think you're putting them on a Txt file all.
Yeah. So we just went ahead and did that through it on TXC file and we're gonna go ahead and put it in because this is a live demo we're just gonna do it right here and now. Just make sure that it works and that you all have a chance to use it if you choose to. We will revoke these as soon as we leave this room. Actually, I might not even leave the room.
I'm just gonna go ahead and revoke them. As Ken executes his careful copy and paste command, Alright. So you have your client a key. Next thing you need to know is where the hell you want to put your files. So you give it full path of where you want to put those files.
If you don't know how to get the path, you can actually just click at the if you have a Windows device, click in the empty top space, and it'll give you the address. And you can just copy that address. As Kim was saying, we are actually both new to windows of environments. So prior to this, I was full debut and it was it's a big change for me. So even learning where the hell the control is versus command is is just this is weird to me.
Alright. So one thing that you might notice is line number six, you have double backslashes, forward slashes, this backslashes? Okay. Thank you. So, you have these double backslashes and whenever you copied your your path, you don't. You need them.
So it's basically it's an escape character and I wanna escape the escape character. Alright. So we have where we want the files to go. Next is what file types I want. Do I want CSV parquet, TSV, JSON file, so whatever So this is case sensitive because this is a TOML file.
So you go ahead and just put in whatever you want. Thing you need to know is what what tables you want. I'm not gonna go and show you, you know, their their documentation and stuff like that, but find out what tables you want, put them right there. So, yeah, we're just gonna copy the the example that's right there, but there's a crap ton of tables and find out what you want and use it. The only thing is that this is a string.
So there are no carriage returns or, enters. Like the it's just one line. Okay? Next thing we need to know is are you writing this to a MS SQL database? For most people, it's gonna be no. So you're gonna be writing If you are writing it into a database, the the is actually generative. So it will find the columns name the columns the same as they show up in Canvas attitude in your database.
Word for word. The problem is this is canvas attitude and they're in key value pairs. So it'll say key underscore assignments. Or value underscore assignments or whatever else. And I'm just left at that because I didn't want to do any extra work.
It's perfectly fine with me. I just give them an alias after that. But you can actually set yours up however you want to as well if you go into the source. So are we gonna write it to a database? No. Are we gonna have a connection string? Well, I'm not writing it to a database.
So, no. Next thing I need to know is am I gonna purge the CSV files after I'm completed? If you're not writing this, database, you do not wanna purchase the CSV files or TSV files or whatever else because you wanna do something with it. So you write that false. Lastly is do you wanna purse the Charbaugh files or the the the dot g z file? And in most cases is yes, nobody has any need for those. Okay? Alright.
So once you set that up, you can open up the terminal or, I'm sorry, the, command prompt. See? Is still is the learning process for me still to this day. Open up the command prompt. Is it? Okay. Fantastic.
And just drag in the EXC. And again, I have CD22 two tables because and then the the file differently from that. Alright. So once you hit enter, you're actually gonna see a string of text. The text is actually a an output, hopefully you'll see a string of text.
So the the string of text is basically the output and it lets you know what has been written? Where has it been written to? And again, this is a live demo. So things happen. No reference. Did you save it when you were mentioned? Did you save it in the big congress? Did you get new client keys today? So it's probably because our client keys have expired and we set them to twenty four hours or something else whenever we're testing it. But yeah.
So What that will do is it will actually push your CSVs to a folder and they're there for you to use. You can run this as many times throughout the day, CD two has a refresh rate of four hours in most cases. So if it is just a one off case that you wanna run something and just grab those files from, like syllabus or I don't know, whatever else that you want to pull from that time, at that time. Are you grabbing new keys and client? The identity. Yeah.
Alright. Sweet. So as he's doing that, I will go ahead and just start the q and a now. Yes. Oh, why? Go back.
Terminal? Oh, you got it in there twice. Oh, no. You should be able to press up, actually. No. That's it.
No. That that's fine. No. It's probably because the, the we didn't pull It's probably because we we didn't generate new keys. And he wanted to sabotage my presentation.
It's fine. And see, this is why we did this is why we kept on a t x c file. Fantastic. I love it. Any other questions or comments? So what are we supposed to see? So what you'll see is, it will pull down.
It will go to CD two, grab the tables that you wanted, even if, they are in a multiple So what you'll get is sometimes there are parts and we'll find those parts, combine them and spit out CSVs for you. And some of these tables are very large, so you'll have multiple CSVs. So we'll just max out the CS V and if it does come to the end of the CSV, we'll actually create another one for you. And it is command line So you don't really see a lot. There's no UI actually baked into this one.
But the next one is, using the same set of tools, we do have a UI as as well. Do you have to Why am I not doing it in the Mac? So The the reason is that it it was written for windows. Yeah. So she's she asked, why am I doing this in Windows? Why am I not doing it on a Mac? And it's because that's what the environment that I I was welcomed into. I would have much preferred to do it on other things, but now I've gotten quite comfortable with it, and it's it's just a new learning experience, really.
Just like this one, I feel very humbled right now. Now that we have no connection or anything else. Yes. You wanna connect to my Oh, you're doing it. So from my personal experience, reading.
The the documentation is where I handle out of it. Actually, the community. If there are certain aspects, the, Canvas community could definitely have tons of different answers. If you had another answer? Okay. Alright.
So as he does that, we're actually going to I don't wanna just waste time, you know, looking at something that doesn't doesn't work. What we're gonna do is he's gonna connect to his phone hopefully pull down the entire thing again. The the client and the key again. And then, Yeah. The whole presentation requires the internet.
So if the internet's not working, do you have the AP API key in your tech Okay. So the API key should still be working. Okay. Alright. So We're gonna come back to this one just to show you that it does work and stuff like that because that was one of the main points.
What we're gonna do is actually just move on the next application, the next application does not require that same token, that we just had. So the next one is actually Canvas end. Anybody currently use, not not anybody. I work in K twelve. And one of the things that was required is that we be able to send a message to parents and students.
And I had a little JavaScript mod that I built to do that in Canvas. And they said, Hey, Canvas said, Hey, that little mob that you made? We don't need that anymore. You don't need the hooks to to to be able to do that in more. Let's let's just take that out. So they they basically killed it, and they killed, another developers he had a little JavaScript mod that did the same exact thing for k twelve.
When they redid the conversations API or whatever else they were doing to it. So once they broke the tool, I got a flood of messages from teachers saying, Hey, I cannot message my parents and my students anymore. What do I do? And since I was already working within the Canvas, API building this API wrapper for it. I said, Oh, I can just build one really quickly in like a just an application, basically. I can just build a small application that'll allow you to do the same thing and allow you to to group or just select the students that you want and then automatically add their parents.
And it was I built this application is a stop gap because I'm actually building an LTI tool, that will just suffice inside of Canvas, but I need some time to do that. And I need some time for the teachers, you know, to, to be okay until I get So we developed, Canvas Send, and Canvas Send is basically a a little UI that allows teachers to send messages to their students, and parents at the same time. Now I know many of you are in the higher ed and don't have that same problem, but what you might have, and this is what I found out is that there are some students that actually have, assistance along with them. So talk to your ADA coordinators and so on, their their assistants are actually observers in their course. And sometimes the observers Well, it depends really.
But sometimes their observers actually, need to see those messages as well. So this is a third party to I'll say third party because we developed it. That allows the administrator to to to send message to their students as well as their non teacher observers. Our school, we actually have some of the teachers set up with some of the as observers to small groups of students that are are, that are having problems or we fly there's like, oh, we might need to keep up with these kids because, you know, I don't because of their grades or or slipping or anything else. Any of those flags that come up? Okay.
We need to pull them. We need to have them separate and they get set up as a server so they can start to see the teachers and so on. So What this tool does is it allows you to grab sections, and subgroups. So if there's a subgroup within a course section, you can actually just send them messages as well. So what problems did it solve? Well, Canvas broke the little tools that we were doing within Canvas that we were doing a JavaScript.
And this is basically a stop gap for that. Alright. So this is basically what it looks like. Again, we are a Windows institution. All of the the kids get Windows devices, actually the devices that we have now, which is the surface.
So hopefully we run this one and this one works. No, man. This one is the send. Is it that your names from your names are different? Which one is it? No. Is it this is the send one.
Are you gotta do it for me? No. It's just it's call us in campus. Alright. Fantastic. We went over this last night too.
Alright. Everything is going great. So, oh, you're on the interwebs? Oh, sweet. Alright. So he's gonna go ahead and just get this from the repo again.
Again, this is the it's under my repo not the group repo. No. It's the one for Jewel because we're not we're not updating this one anymore. It's a stop gap measure. J capital j e w e one one.
Oh, crap. Where are you? This one. Thank you. Oh, yeah. It's not an org.
This is mine. Thank you. I love y'all. Yeah. So repo's Canvasind Alright.
Go Yeah. You might have deleted it when you whenever you purge them so we can start from scratch. Alright. So Fantastic. We got everybody else back.
Thank you for connecting to your phone. And So what this is is it's just a little application that requires the teachers or whoever else is using it, just to put in their API token. Now that was the hardest part for me. It's just creating a video to say, hey, teachers. This is where your API token is.
Make sure you copy the entire thing. But I was surprised whenever I was doing a live stream and thirty of them actually got in. And, like, were able to do it. So I was happy. So in our system, we only have two hundred and fifty teachers.
We are statewide we're in the state of Louisiana, and we have four thousand students and about two hundred and fifty teachers. And all of them are required to send messages to their students and is checked in, whatever else. Okay. So we sent our information to windows or to Microsoft so we can be approved, but that's still sitting in the queue. So you'll see this little thing come up and it's just said you can just hit run anyway.
And you already have Canvas in on your computer? Alright. So he's just starting over from scratch. Alright. So once it's installed, it's gonna create a shortcut on your desktop and it's also gonna show up in your in your start menu. So Awesome.
And it's installed through an MSI so you can actually uninstall it through the same you know, you don't have to have any special tools. You go to all applications and uninstall the same way you do any other application. So the first time you launch it, just launch it as an administrator down at the bottom. Oh, yeah. So in your start menu, Yeah.
Launch it as an administrator. And the reason for that is because the API token is going into the same folder that the application is in. And that application rests in the the same application folder that all of your other apps are in. So in order to push information to it, you just have to run run it as an administrator the first time. After that, you never have to touch that again.
So once you have your API token, you will be able just to throw it right there into the creds. And like I said, I made a little video for it too. So to to show the teachers, hey, this is how you get your API token. Alright. So once you paste it in, yeah, you just hit reset and that arrow should not come up anymore.
Is it that same token? It was, No. It was different tokens. The thing is that he he did this last night and I think we set it up for twenty four hours. So it shouldn't have expired, but I think all the tokens are dead. Yeah.
Version of Canvas. And it's important, like, because you're a creature's okay. And speak about the tokens and the rights in New York. Yeah. Just generated.
I was so ready. I was like, Nothing's gonna go wrong. It went right last night. I made sure. Alright.
This morning. Alright. So he's grabbing his token. He's generating it. And bam, he's gonna launch it this time as an administrator because it won't work if you just do that.
So he's gonna launch it as an administrator. And then throw in that token. And then, I swear to god. It better work. And Harry said, please have one thing work for me today.
Hey. It worked. I I think it worked, Drew. That's As far as I know, it didn't do an error because the error is actually just show up right there in red. Alright.
So he's gonna have, under the courses, he's gonna be able to select the course yeah. Go ahead and select the course. Go ahead and select so this is our test course. So I just created some sections last night. So there's boogers technology team and whatever else.
It does has spell check integrated into it. So, this is just for sending messages and stuff like that. And the underlying hooks on this are the same ones that we built the first command line application. The same things the same underlying skeleton runs both of these things. It actually is running my Azure functions app as well.
So that that's that's one of the key aspects. These nougat packages are running all of these things. Are are and are are are able to do or carry the load of everything. In the send to, you can actually this is where the it shines. So you can select all parents, and that's certain section, if you don't want the kids to know.
You can actually select parents and students, or you can select just certain students. So that's why I'm talking about the subgroup of a section. So here you're able to select it and it actually show all of the students that are in that section. So these are just student names. There are no, you know, there are no, parents names in this list.
So once you select the the students, the parents will automatically show up. I think the only parent that I added was when Canvas yeah. UVA canvas does it count to you. So these are us and some of our team. So you could just select a bunch of them.
You don't have to hold shift or anything else. Just select the ones that you need, then you'll get a preview window. In that preview window, is say what your message is, and it will say, yeah, do I want to do anything else. Also, you can attach files here. So there's the little file attachment thing there.
I'm not gonna go through all that because we're running out of time because I suck and then go to send and it'll actually send out. We're just mean, you already opened up Canvas, hit send. Oh, so what you'll see here, you don't need to see the student names again, but you'll see the parent names come up right next to them. And if either you have a parent that has multiple kids and stuff like that, or I'll say, I'll say in parents, but is actually observers. You'll see all all of the the students or their kids along with them in a list.
So, yeah, just go ahead and hit send and just pull it up there. And then, grab that identity token for a canvas data too. Alright. Sweet. The whole process is being created.
So in here, you actually look up the universe. Oh, look. See, teaching thing. Yeah. Yeah.
If you're if you're very new to the campus attitude. Alright. So this is a new thing I believe. I was told the identity and stroke dot login. This is gonna be moving forward for different identities.
So what you'll do is look up your institution. Aros is University View Academy. So we went that in real quickly. Yeah. So Yeah.
We're doing this live. Okay. So University View Academy, and you're gonna log in already logged into Canvas, you just have to authorize it because it's acting like an LTI tool. And you just generate a new key. And what that key is gonna give you or is actually two things.
Yeah, expire in one day. Thank god. Just hit save. It doesn't matter what it's called. Yes.
It's on institutionally used by default. So he's gonna grab these and then go back to that first command line application and the TOML file for it, actually. And paste them back in. Yeah. Config out Tomel at the top.
Yeah. So when they say twenty four hours, I'm not sure of when that that thing stops. Or it's a full twenty four hours. I don't think so. It might just stop at a certain time and it just says, Hey.
Yeah. This is no longer valid. Alright. So he's putting that back in, and he's gonna run that. And we're gonna talk about that third application, and I'm gonna quickly run into those nougat packages.
And show you how simple that is. So try to okay. Try to run that again. And while you run it, you can actually show that the messages send in Canvas end. The terminal's still up, or the command line's still up, right? Yeah.
Just press just press enter again. The TOMO files are hot look. As soon as you put it in, the information is there. Also okay, painful, fantastic. Yes.
So It was the authentication that see, you see that big old error right there? If you get that, you know your alt is bad. Okay? So all this is education is okay and what you'll see next. And like we said, these things are this is all running off your phone right now. So, all of our things were internet's had to have it. Okay.
So what it's doing right now is it's fetching each one of those tables and it's gonna write it out for you. As that happens, we're gonna go ahead and switch over to Canvas and just show you that what you what we just sent in that course actually I mean, in that little application actually went to Canvas conversations. Or the inbox or whatever the hell it's called. Canvas conversation is the API endpoint. In inbox is what it's actually called.
So you go to inbox, and you go to As you see here, we're developers. We don't actually look at any of the things that we do. So go to inbox right? Yeah. Go to the course at the Yeah. Technology course.
There we go. Cool. And then go to send. And not inbox, go to sent. Are you Sent? Yes.
So you see Hello world and it was sent as of today at this time. So that sent. That worked out well. The LTI. I'm sorry, not the LTI.
But the application should be running and that it is. As you see here, it grabbed the account it put it into that folder that he specified and is going on to the next one. Yes. Does it send as a group or there's an option? Those are individuals. Those are individuals.
Yes. I was scared of the group thing. So I went with the individual Thank you. The the last one that we have here, Do y'all wanna go to the last one, or do you wanna go straight to the nougat packages? Because we don't have much time. Last one? Okay.
So the last one is actually the, multiple grading periods. I don't know how many people have had to use this but unfortunately, I worked with k twelve. They wanted that information now. They didn't want it from yesterday. They didn't want a twenty four hour period.
They want what's going on right now. So I'm pulling it for the from the reports. And now the reports sometimes they say they're twenty four hours, but what I found out is that what was in the reports and what was in the API was actually kind of what and what as far as the grades go. So I just went ahead and pulled it through from the reports instead of having to do twenty thousand API calls in order to get the grades for each one of these these uh-uh courses and stuff like that. Also, if you ever had to use the MGP reports, you see that you have to select each term, then wait for the thing to run.
And then it'll send you an email that's on them later, and then they'll give you a link to download it. To to actually get the files. And sometimes you'll have zip files. Sometimes you'll have just CSV files or whatever else. So this next tool just says hey, I just want to get all all of my current terms.
So what current terms is and I just put this in like a formula format is if the term end date is greater than today. Now, I didn't have an end because and the tool itself, if it's less than one megabyte, it'll throw it away. So if there is a term that is blank, like if you have future terms set up and everything else, it'll just discard those because it sees that there's no data in the in those in those files. Calls. What is this one? Alright.
So I just told you actually what it solves. So it solves the whole UI thing and having to select each term that you wanna run. Also it provides an inline filter. So if there's certain terms that you want or certain CSVs, like clubs or any type of, I don't know, whatever. If there's a particular term that you wanna filter out, you can do Alright.
So my god, I don't know what I'm doing this again, but yeah. Let's try it ready. So same. This is the command line tool as well. Same underline under pinnings, which is that those nougat packages.
And hopefully this thing will run. So you'll see here there's going to be a TOMO file. In that TOMO file, I'll just go ahead and explain what's there. Alright. So in this Tom will file, you're gonna have an API key.
Actually, you just generated an API key. And threw it into the Canvas data. I mean, the Canvas send. Hopefully, it's still up. Well, so Actually, do sign by side if you're gonna be doing something else.
Oh, okay. Alright. We got like two minutes. Fuck me. So, let let's just go through the time profile.
When I'm might not be able to run it. Okay. So, you're gonna just throw in your token. You're gonna have a base URL. That base URL is If you're cloud hosted, it's gonna look just like that.
If you're self hosted, yours is gonna look different. You again have where you wanna put the things. That's what folder you want to throw them into. The term filter, and I gave examples of my own, Ashley. These are the terms that I'm filtering out.
If, if it has advisory club or leap, I don't want them. That's not the data that I wanna see. The CSV file, if there are CSV files that end in year, so or CSV files that contain so you can actually find unique terms and just find those CSV files. So if my CSV files have dual enrollment, which have a different type of grading scheme, or if they contain year, which is actually gonna have a whole semester that has, like, no grades or whatever else. Then I don't want them.
Do I wanna purge files before? Well, if this is not if you're doing a cron job, you might want to do that. So all those files that are there that you're you're probably pushing somewhere else, you wanted to delete them beforehand. So you can set that to true or false. And do I want to delete them after? If I'm using them, probably not. But if I have this hooked into something else, I might need to.
So that's why it's there as well. Alright. So, you go ahead and try to run this and while you're trying to run this, I'm gonna be talking about those nougat packages. So the nougat packages are essentially the c sharp API wrapper. It's a c sharp APR wrapper for Canvas data too, as well as UVA Canvas, as well as the API for Canvas.
We set it up through GitHub because that's where my Travis CI is. So my Travis CI writes all the documentation. So all of the documentation is actually there. Travis CI is just continual integration. It it will just fetch all of the classes methods and stuff that I made.
And write the documentation for it so other people can utilize it. Alright. So as you see here, it's actually writing. Fantastic. And you can show them where it is actually publishing those things that it's grabbing.
So he has an output folder. There's an unzipped folder from the prior application and there's a download folder from another application that the previous application that was just running. Okay. So it looks like my time is, but if you are interested in the nougat packages, I I will sit in the hallway and I will talk your ear off about it. Okay? Yes.
I do. They should be publishing these presentations as well. So the QR code for the new gift packet. Oh, I don't. I I don't.
Thing. Yeah. So the link is actually there in order to grab the the nougat packages from GitHub. I can show you how to add them to whatever whatever, IDE that you're using and and so on. So Thank you all for bearing with me, and I appreciate you so much.
So that k twelve institution has a flourishing development team. That that's it. And I I was kind of thrown into the role. I was actually from the field of UX, a former teacher, former instrument tech, former electrician. Alright.
That's that's better. Alright. I gotta this is weird. So I was a a former teacher and they they threw me into this position because their former development team just left on them. And then like, Jewel, you can do this.
I was like, I can do what exactly. They said everything from their databases to developing the software that they're just now changing SIS and LMS. I was like, okay. I will try. And a few years later, I'm still here, and we are developing new things every day.
Alright. So this is Alfred Ken Moore. I call him Ken. You all can too. And again my name is Juul Simon.
Alright. So we're gonna go ahead and kick this thing off because I whenever we ran through this one time and we only did it one time with my daughter in the room and she's three years old, And, yeah, let's go. I didn't make forty five minutes. Alright. So today, we're gonna demonstrate a few of the applications that we have built for our institution and we've also published, just open source.
So anybody that wants to use it, you can. The reason being is we are developing for education. And if I can help our kids Hopefully, we can help your kids as well. We're gonna demonstrate how others can use, some of the compile tools that we have and that's some of those small applications. A lot of these are command line applications.
Also, I wanna show you all some of the new gift packages for those software developers, those programmers, and and so on, we publish the nougat packages that you're able to just build your own applications. The sources are also published as well. So before you run anything, go talk to your IT people. Make sure that it's safe. That's something that I would advise anyone to do.
Alright. Lastly, well not lastly. We're going to demonstrate how the nougat packages work. How to use them because the nougat packages actually come from GitHub versus nougat dot org. Lastly, we're gonna have q and a.
Alright. So when the first things, I have a QR here. I don't like QR. But I realized that we're in a a room and you can't really get that link. So I was like, okay.
I'll put a QR code there. So the first one in my naming conventions suck ass. So that is just what I called it. Anybody anybody, working with Canvas data too now or in that transition period? Alright. So if you're in that transition period, That is awesome because I built a little tool to just pull those those packages, and all you have to do is set up a Kentucky So it's a tool that integrates with Canvas attitude and allows admins to download the data files provided by Canvas and the format in which they desire.
What format is the format that Canvas has for you? So whether that be CSV, TSVs, JSON files, parquet, Yeah. They have parquet too. Parquet files and and so on. What problem doesn't solve? So Canvas provides the information, but unless you're technically savvy, there's no way in hell you're just gonna read through all that documentation, figure out how you're gonna pull it and then pull it down. So CD two, cron, or DB.
We'll put down, we'll pull down the files for you and put them in a folder in which you could do whatever the hell it is that you wanna do to it. And then the the the name is actually there because either you could do a cron job or you can push this straight to your database. So in our case, we're pushing this directly to our database, but I wanted to pull it back for a second. And if you are doing some other type of cron job, or if you just want that right then and there, you can just it. Okay? Alright.
So now I I don't like the the slides and stuff like that. They they do know justice. So we're just gonna jump right into a live demo. And if you've never been to a live demo before, if it breaks, I'm sorry. Alright.
So You okay, babe? Yeah. I'm looking for you. This is our second Boy. So it's it's right there on GitHub and so you'll see two things. You'll see the sword which is this first one, and then you'll have the compiled version.
I keep on forgetting to to put the mic to my So if if I don't just yell out, can't hear you or something. So the there's the source and then there's the compiled version. So we're gonna do is we're just gonna work right with the compile version and show you how to set up the config file. And then we're gonna delete our tokens right away. So, you know, y'all don't jump into our data because they didn't give us, an, a database, not not a database, but like a play database to work I'm like, what's up with that instruction? Also, bear with us because we are not windows developers.
Well, he is. We mostly use Max I'm using a window now windows machine, so it might be a little finicky, but anyway, so, we're not gonna actually download anything from GitHub. We're gonna just, we already have everything pre preasly downloaded already. And we're just gonna We're getting the WiFi through the yeah. Basically.
And so, we're gonna go through the process of unzipping the file filling out the config file and etcetera. So you won't see us go back to GitHub anymore, but that is the link, and you did get the QR code. So you can refer back to that. Oh, awesome. I mean, for those that are nontechnically savvy, we can actually just show them how to to get the file from GitHub.
I don't wanna pass up that part. So, we're gonna go to the compiled version of it, and all you have to do is There's, there's going to be a big button. See, this is why I'm scared of WiFi. Okay. There's going to be a big green button right there that says code.
You just click it. Click it. Yeah. And you hit download zip. Once you have the zip, you know how to handle a zip file.
I hope. Alright. So, we're just gonna go ahead and extract it just like we acted like we just downloaded the zip file. And what you're gonna see is a config file along with a whole bunch of DLL files and everything else because that's how it's set up. So What you're gonna do is you're gonna go to the config file.
And again, I cannot stress to you. Go talk to your IT people. If you're IT and you're cool with it, the source is right there. You can compile it yourself. But, yeah, talk to your IT people before you run any type of EXE, please.
Alright. So We have everything that you see that has a hashtag in it is comments. It's what you're supposed to do in that next line. Wherever you see like client, key, full past name and everything else that have these little quotes next to it, that's where you put the information. So first one is this deals with Canvas Data two.
Canvas Data two has a new portal, not new, but it's it's it's the identity dot instructure dot com? Correct. So you go to that. You find your client and key. I'm not gonna go do it now because we've run out of time really fast. So I think you're putting them on a Txt file all.
Yeah. So we just went ahead and did that through it on TXC file and we're gonna go ahead and put it in because this is a live demo we're just gonna do it right here and now. Just make sure that it works and that you all have a chance to use it if you choose to. We will revoke these as soon as we leave this room. Actually, I might not even leave the room.
I'm just gonna go ahead and revoke them. As Ken executes his careful copy and paste command, Alright. So you have your client a key. Next thing you need to know is where the hell you want to put your files. So you give it full path of where you want to put those files.
If you don't know how to get the path, you can actually just click at the if you have a Windows device, click in the empty top space, and it'll give you the address. And you can just copy that address. As Kim was saying, we are actually both new to windows of environments. So prior to this, I was full debut and it was it's a big change for me. So even learning where the hell the control is versus command is is just this is weird to me.
Alright. So one thing that you might notice is line number six, you have double backslashes, forward slashes, this backslashes? Okay. Thank you. So, you have these double backslashes and whenever you copied your your path, you don't. You need them.
So it's basically it's an escape character and I wanna escape the escape character. Alright. So we have where we want the files to go. Next is what file types I want. Do I want CSV parquet, TSV, JSON file, so whatever So this is case sensitive because this is a TOML file.
So you go ahead and just put in whatever you want. Thing you need to know is what what tables you want. I'm not gonna go and show you, you know, their their documentation and stuff like that, but find out what tables you want, put them right there. So, yeah, we're just gonna copy the the example that's right there, but there's a crap ton of tables and find out what you want and use it. The only thing is that this is a string.
So there are no carriage returns or, enters. Like the it's just one line. Okay? Next thing we need to know is are you writing this to a MS SQL database? For most people, it's gonna be no. So you're gonna be writing If you are writing it into a database, the the is actually generative. So it will find the columns name the columns the same as they show up in Canvas attitude in your database.
Word for word. The problem is this is canvas attitude and they're in key value pairs. So it'll say key underscore assignments. Or value underscore assignments or whatever else. And I'm just left at that because I didn't want to do any extra work.
It's perfectly fine with me. I just give them an alias after that. But you can actually set yours up however you want to as well if you go into the source. So are we gonna write it to a database? No. Are we gonna have a connection string? Well, I'm not writing it to a database.
So, no. Next thing I need to know is am I gonna purge the CSV files after I'm completed? If you're not writing this, database, you do not wanna purchase the CSV files or TSV files or whatever else because you wanna do something with it. So you write that false. Lastly is do you wanna purse the Charbaugh files or the the the dot g z file? And in most cases is yes, nobody has any need for those. Okay? Alright.
So once you set that up, you can open up the terminal or, I'm sorry, the, command prompt. See? Is still is the learning process for me still to this day. Open up the command prompt. Is it? Okay. Fantastic.
And just drag in the EXC. And again, I have CD22 two tables because and then the the file differently from that. Alright. So once you hit enter, you're actually gonna see a string of text. The text is actually a an output, hopefully you'll see a string of text.
So the the string of text is basically the output and it lets you know what has been written? Where has it been written to? And again, this is a live demo. So things happen. No reference. Did you save it when you were mentioned? Did you save it in the big congress? Did you get new client keys today? So it's probably because our client keys have expired and we set them to twenty four hours or something else whenever we're testing it. But yeah.
So What that will do is it will actually push your CSVs to a folder and they're there for you to use. You can run this as many times throughout the day, CD two has a refresh rate of four hours in most cases. So if it is just a one off case that you wanna run something and just grab those files from, like syllabus or I don't know, whatever else that you want to pull from that time, at that time. Are you grabbing new keys and client? The identity. Yeah.
Alright. Sweet. So as he's doing that, I will go ahead and just start the q and a now. Yes. Oh, why? Go back.
Terminal? Oh, you got it in there twice. Oh, no. You should be able to press up, actually. No. That's it.
No. That that's fine. No. It's probably because the, the we didn't pull It's probably because we we didn't generate new keys. And he wanted to sabotage my presentation.
It's fine. And see, this is why we did this is why we kept on a t x c file. Fantastic. I love it. Any other questions or comments? So what are we supposed to see? So what you'll see is, it will pull down.
It will go to CD two, grab the tables that you wanted, even if, they are in a multiple So what you'll get is sometimes there are parts and we'll find those parts, combine them and spit out CSVs for you. And some of these tables are very large, so you'll have multiple CSVs. So we'll just max out the CS V and if it does come to the end of the CSV, we'll actually create another one for you. And it is command line So you don't really see a lot. There's no UI actually baked into this one.
But the next one is, using the same set of tools, we do have a UI as as well. Do you have to Why am I not doing it in the Mac? So The the reason is that it it was written for windows. Yeah. So she's she asked, why am I doing this in Windows? Why am I not doing it on a Mac? And it's because that's what the environment that I I was welcomed into. I would have much preferred to do it on other things, but now I've gotten quite comfortable with it, and it's it's just a new learning experience, really.
Just like this one, I feel very humbled right now. Now that we have no connection or anything else. Yes. You wanna connect to my Oh, you're doing it. So from my personal experience, reading.
The the documentation is where I handle out of it. Actually, the community. If there are certain aspects, the, Canvas community could definitely have tons of different answers. If you had another answer? Okay. Alright.
So as he does that, we're actually going to I don't wanna just waste time, you know, looking at something that doesn't doesn't work. What we're gonna do is he's gonna connect to his phone hopefully pull down the entire thing again. The the client and the key again. And then, Yeah. The whole presentation requires the internet.
So if the internet's not working, do you have the AP API key in your tech Okay. So the API key should still be working. Okay. Alright. So We're gonna come back to this one just to show you that it does work and stuff like that because that was one of the main points.
What we're gonna do is actually just move on the next application, the next application does not require that same token, that we just had. So the next one is actually Canvas end. Anybody currently use, not not anybody. I work in K twelve. And one of the things that was required is that we be able to send a message to parents and students.
And I had a little JavaScript mod that I built to do that in Canvas. And they said, Hey, Canvas said, Hey, that little mob that you made? We don't need that anymore. You don't need the hooks to to to be able to do that in more. Let's let's just take that out. So they they basically killed it, and they killed, another developers he had a little JavaScript mod that did the same exact thing for k twelve.
When they redid the conversations API or whatever else they were doing to it. So once they broke the tool, I got a flood of messages from teachers saying, Hey, I cannot message my parents and my students anymore. What do I do? And since I was already working within the Canvas, API building this API wrapper for it. I said, Oh, I can just build one really quickly in like a just an application, basically. I can just build a small application that'll allow you to do the same thing and allow you to to group or just select the students that you want and then automatically add their parents.
And it was I built this application is a stop gap because I'm actually building an LTI tool, that will just suffice inside of Canvas, but I need some time to do that. And I need some time for the teachers, you know, to, to be okay until I get So we developed, Canvas Send, and Canvas Send is basically a a little UI that allows teachers to send messages to their students, and parents at the same time. Now I know many of you are in the higher ed and don't have that same problem, but what you might have, and this is what I found out is that there are some students that actually have, assistance along with them. So talk to your ADA coordinators and so on, their their assistants are actually observers in their course. And sometimes the observers Well, it depends really.
But sometimes their observers actually, need to see those messages as well. So this is a third party to I'll say third party because we developed it. That allows the administrator to to to send message to their students as well as their non teacher observers. Our school, we actually have some of the teachers set up with some of the as observers to small groups of students that are are, that are having problems or we fly there's like, oh, we might need to keep up with these kids because, you know, I don't because of their grades or or slipping or anything else. Any of those flags that come up? Okay.
We need to pull them. We need to have them separate and they get set up as a server so they can start to see the teachers and so on. So What this tool does is it allows you to grab sections, and subgroups. So if there's a subgroup within a course section, you can actually just send them messages as well. So what problems did it solve? Well, Canvas broke the little tools that we were doing within Canvas that we were doing a JavaScript.
And this is basically a stop gap for that. Alright. So this is basically what it looks like. Again, we are a Windows institution. All of the the kids get Windows devices, actually the devices that we have now, which is the surface.
So hopefully we run this one and this one works. No, man. This one is the send. Is it that your names from your names are different? Which one is it? No. Is it this is the send one.
Are you gotta do it for me? No. It's just it's call us in campus. Alright. Fantastic. We went over this last night too.
Alright. Everything is going great. So, oh, you're on the interwebs? Oh, sweet. Alright. So he's gonna go ahead and just get this from the repo again.
Again, this is the it's under my repo not the group repo. No. It's the one for Jewel because we're not we're not updating this one anymore. It's a stop gap measure. J capital j e w e one one.
Oh, crap. Where are you? This one. Thank you. Oh, yeah. It's not an org.
This is mine. Thank you. I love y'all. Yeah. So repo's Canvasind Alright.
Go Yeah. You might have deleted it when you whenever you purge them so we can start from scratch. Alright. So Fantastic. We got everybody else back.
Thank you for connecting to your phone. And So what this is is it's just a little application that requires the teachers or whoever else is using it, just to put in their API token. Now that was the hardest part for me. It's just creating a video to say, hey, teachers. This is where your API token is.
Make sure you copy the entire thing. But I was surprised whenever I was doing a live stream and thirty of them actually got in. And, like, were able to do it. So I was happy. So in our system, we only have two hundred and fifty teachers.
We are statewide we're in the state of Louisiana, and we have four thousand students and about two hundred and fifty teachers. And all of them are required to send messages to their students and is checked in, whatever else. Okay. So we sent our information to windows or to Microsoft so we can be approved, but that's still sitting in the queue. So you'll see this little thing come up and it's just said you can just hit run anyway.
And you already have Canvas in on your computer? Alright. So he's just starting over from scratch. Alright. So once it's installed, it's gonna create a shortcut on your desktop and it's also gonna show up in your in your start menu. So Awesome.
And it's installed through an MSI so you can actually uninstall it through the same you know, you don't have to have any special tools. You go to all applications and uninstall the same way you do any other application. So the first time you launch it, just launch it as an administrator down at the bottom. Oh, yeah. So in your start menu, Yeah.
Launch it as an administrator. And the reason for that is because the API token is going into the same folder that the application is in. And that application rests in the the same application folder that all of your other apps are in. So in order to push information to it, you just have to run run it as an administrator the first time. After that, you never have to touch that again.
So once you have your API token, you will be able just to throw it right there into the creds. And like I said, I made a little video for it too. So to to show the teachers, hey, this is how you get your API token. Alright. So once you paste it in, yeah, you just hit reset and that arrow should not come up anymore.
Is it that same token? It was, No. It was different tokens. The thing is that he he did this last night and I think we set it up for twenty four hours. So it shouldn't have expired, but I think all the tokens are dead. Yeah.
Version of Canvas. And it's important, like, because you're a creature's okay. And speak about the tokens and the rights in New York. Yeah. Just generated.
I was so ready. I was like, Nothing's gonna go wrong. It went right last night. I made sure. Alright.
This morning. Alright. So he's grabbing his token. He's generating it. And bam, he's gonna launch it this time as an administrator because it won't work if you just do that.
So he's gonna launch it as an administrator. And then throw in that token. And then, I swear to god. It better work. And Harry said, please have one thing work for me today.
Hey. It worked. I I think it worked, Drew. That's As far as I know, it didn't do an error because the error is actually just show up right there in red. Alright.
So he's gonna have, under the courses, he's gonna be able to select the course yeah. Go ahead and select the course. Go ahead and select so this is our test course. So I just created some sections last night. So there's boogers technology team and whatever else.
It does has spell check integrated into it. So, this is just for sending messages and stuff like that. And the underlying hooks on this are the same ones that we built the first command line application. The same things the same underlying skeleton runs both of these things. It actually is running my Azure functions app as well.
So that that's that's one of the key aspects. These nougat packages are running all of these things. Are are and are are are able to do or carry the load of everything. In the send to, you can actually this is where the it shines. So you can select all parents, and that's certain section, if you don't want the kids to know.
You can actually select parents and students, or you can select just certain students. So that's why I'm talking about the subgroup of a section. So here you're able to select it and it actually show all of the students that are in that section. So these are just student names. There are no, you know, there are no, parents names in this list.
So once you select the the students, the parents will automatically show up. I think the only parent that I added was when Canvas yeah. UVA canvas does it count to you. So these are us and some of our team. So you could just select a bunch of them.
You don't have to hold shift or anything else. Just select the ones that you need, then you'll get a preview window. In that preview window, is say what your message is, and it will say, yeah, do I want to do anything else. Also, you can attach files here. So there's the little file attachment thing there.
I'm not gonna go through all that because we're running out of time because I suck and then go to send and it'll actually send out. We're just mean, you already opened up Canvas, hit send. Oh, so what you'll see here, you don't need to see the student names again, but you'll see the parent names come up right next to them. And if either you have a parent that has multiple kids and stuff like that, or I'll say, I'll say in parents, but is actually observers. You'll see all all of the the students or their kids along with them in a list.
So, yeah, just go ahead and hit send and just pull it up there. And then, grab that identity token for a canvas data too. Alright. Sweet. The whole process is being created.
So in here, you actually look up the universe. Oh, look. See, teaching thing. Yeah. Yeah.
If you're if you're very new to the campus attitude. Alright. So this is a new thing I believe. I was told the identity and stroke dot login. This is gonna be moving forward for different identities.
So what you'll do is look up your institution. Aros is University View Academy. So we went that in real quickly. Yeah. So Yeah.
We're doing this live. Okay. So University View Academy, and you're gonna log in already logged into Canvas, you just have to authorize it because it's acting like an LTI tool. And you just generate a new key. And what that key is gonna give you or is actually two things.
Yeah, expire in one day. Thank god. Just hit save. It doesn't matter what it's called. Yes.
It's on institutionally used by default. So he's gonna grab these and then go back to that first command line application and the TOML file for it, actually. And paste them back in. Yeah. Config out Tomel at the top.
Yeah. So when they say twenty four hours, I'm not sure of when that that thing stops. Or it's a full twenty four hours. I don't think so. It might just stop at a certain time and it just says, Hey.
Yeah. This is no longer valid. Alright. So he's putting that back in, and he's gonna run that. And we're gonna talk about that third application, and I'm gonna quickly run into those nougat packages.
And show you how simple that is. So try to okay. Try to run that again. And while you run it, you can actually show that the messages send in Canvas end. The terminal's still up, or the command line's still up, right? Yeah.
Just press just press enter again. The TOMO files are hot look. As soon as you put it in, the information is there. Also okay, painful, fantastic. Yes.
So It was the authentication that see, you see that big old error right there? If you get that, you know your alt is bad. Okay? So all this is education is okay and what you'll see next. And like we said, these things are this is all running off your phone right now. So, all of our things were internet's had to have it. Okay.
So what it's doing right now is it's fetching each one of those tables and it's gonna write it out for you. As that happens, we're gonna go ahead and switch over to Canvas and just show you that what you what we just sent in that course actually I mean, in that little application actually went to Canvas conversations. Or the inbox or whatever the hell it's called. Canvas conversation is the API endpoint. In inbox is what it's actually called.
So you go to inbox, and you go to As you see here, we're developers. We don't actually look at any of the things that we do. So go to inbox right? Yeah. Go to the course at the Yeah. Technology course.
There we go. Cool. And then go to send. And not inbox, go to sent. Are you Sent? Yes.
So you see Hello world and it was sent as of today at this time. So that sent. That worked out well. The LTI. I'm sorry, not the LTI.
But the application should be running and that it is. As you see here, it grabbed the account it put it into that folder that he specified and is going on to the next one. Yes. Does it send as a group or there's an option? Those are individuals. Those are individuals.
Yes. I was scared of the group thing. So I went with the individual Thank you. The the last one that we have here, Do y'all wanna go to the last one, or do you wanna go straight to the nougat packages? Because we don't have much time. Last one? Okay.
So the last one is actually the, multiple grading periods. I don't know how many people have had to use this but unfortunately, I worked with k twelve. They wanted that information now. They didn't want it from yesterday. They didn't want a twenty four hour period.
They want what's going on right now. So I'm pulling it for the from the reports. And now the reports sometimes they say they're twenty four hours, but what I found out is that what was in the reports and what was in the API was actually kind of what and what as far as the grades go. So I just went ahead and pulled it through from the reports instead of having to do twenty thousand API calls in order to get the grades for each one of these these uh-uh courses and stuff like that. Also, if you ever had to use the MGP reports, you see that you have to select each term, then wait for the thing to run.
And then it'll send you an email that's on them later, and then they'll give you a link to download it. To to actually get the files. And sometimes you'll have zip files. Sometimes you'll have just CSV files or whatever else. So this next tool just says hey, I just want to get all all of my current terms.
So what current terms is and I just put this in like a formula format is if the term end date is greater than today. Now, I didn't have an end because and the tool itself, if it's less than one megabyte, it'll throw it away. So if there is a term that is blank, like if you have future terms set up and everything else, it'll just discard those because it sees that there's no data in the in those in those files. Calls. What is this one? Alright.
So I just told you actually what it solves. So it solves the whole UI thing and having to select each term that you wanna run. Also it provides an inline filter. So if there's certain terms that you want or certain CSVs, like clubs or any type of, I don't know, whatever. If there's a particular term that you wanna filter out, you can do Alright.
So my god, I don't know what I'm doing this again, but yeah. Let's try it ready. So same. This is the command line tool as well. Same underline under pinnings, which is that those nougat packages.
And hopefully this thing will run. So you'll see here there's going to be a TOMO file. In that TOMO file, I'll just go ahead and explain what's there. Alright. So in this Tom will file, you're gonna have an API key.
Actually, you just generated an API key. And threw it into the Canvas data. I mean, the Canvas send. Hopefully, it's still up. Well, so Actually, do sign by side if you're gonna be doing something else.
Oh, okay. Alright. We got like two minutes. Fuck me. So, let let's just go through the time profile.
When I'm might not be able to run it. Okay. So, you're gonna just throw in your token. You're gonna have a base URL. That base URL is If you're cloud hosted, it's gonna look just like that.
If you're self hosted, yours is gonna look different. You again have where you wanna put the things. That's what folder you want to throw them into. The term filter, and I gave examples of my own, Ashley. These are the terms that I'm filtering out.
If, if it has advisory club or leap, I don't want them. That's not the data that I wanna see. The CSV file, if there are CSV files that end in year, so or CSV files that contain so you can actually find unique terms and just find those CSV files. So if my CSV files have dual enrollment, which have a different type of grading scheme, or if they contain year, which is actually gonna have a whole semester that has, like, no grades or whatever else. Then I don't want them.
Do I wanna purge files before? Well, if this is not if you're doing a cron job, you might want to do that. So all those files that are there that you're you're probably pushing somewhere else, you wanted to delete them beforehand. So you can set that to true or false. And do I want to delete them after? If I'm using them, probably not. But if I have this hooked into something else, I might need to.
So that's why it's there as well. Alright. So, you go ahead and try to run this and while you're trying to run this, I'm gonna be talking about those nougat packages. So the nougat packages are essentially the c sharp API wrapper. It's a c sharp APR wrapper for Canvas data too, as well as UVA Canvas, as well as the API for Canvas.
We set it up through GitHub because that's where my Travis CI is. So my Travis CI writes all the documentation. So all of the documentation is actually there. Travis CI is just continual integration. It it will just fetch all of the classes methods and stuff that I made.
And write the documentation for it so other people can utilize it. Alright. So as you see here, it's actually writing. Fantastic. And you can show them where it is actually publishing those things that it's grabbing.
So he has an output folder. There's an unzipped folder from the prior application and there's a download folder from another application that the previous application that was just running. Okay. So it looks like my time is, but if you are interested in the nougat packages, I I will sit in the hallway and I will talk your ear off about it. Okay? Yes.
I do. They should be publishing these presentations as well. So the QR code for the new gift packet. Oh, I don't. I I don't.
Thing. Yeah. So the link is actually there in order to grab the the nougat packages from GitHub. I can show you how to add them to whatever whatever, IDE that you're using and and so on. So Thank you all for bearing with me, and I appreciate you so much.