 John, what happened? Anyway, so we're here today. I'll start it, Tim. I'll get us going. So this is Reclaim Today, and we are here today with John Stewart, who's the assistant director for the Office of Digital Learning at the University of Oklahoma. And John, why are we here today with you? What happened? Well, Tim was, I was here in the Reclaim Nerve Center for Demand of One's Own and Beyond. And Tim was reading his feed reader, and he moved over to the table and said, hey, did you see what John Stewart had done? I said, no, I had no idea. He said, it's pretty cool. Come here and look at this. And I said, you know, what is he doing? He's like, well, basically, he's blocking at scale with Google Sheets. And I was like, what? And he showed me, we read the post, we looked at it, and we were really fascinated by your experiment. So I said to Tim, you know what? Maybe we should ask John to come on a Reclaim today and talk a little bit about what he's doing. In particular, John, I'd love to hear about what pushed you to do it. What are you doing? And what are some next steps? Does that make sense, Tim? Absolutely. Yeah, so the general idea is that I'm just trying to help a class that has 950 students. This is, I think, the largest class at RU. It's our Intro to Psychology course, PSYCH 1113, I think. And so this one faculty member has two sections of 475 students each, I think. And so I went down and talked to her about blogging. And my original thought was that we could set up a WordPress multi-site for, and each of the 950 students would have their own multi-site off of that central hub. And I was talking to Tim, and the problem was just that we had basically no budget at all for this project. And so it wasn't going to be super expensive to do this, but rather than, you know, try to find money for it, I started looking around it. What are some of their options to stand up something like a blog? And I've played with using Google Sheets as a database for web projects for a while now. Martin Hoxie kicked this off. I think both of y'all worked with him and with his stuff a little bit. And then Tom Woodward's been playing with, you know, Google Sheets as a back end for all sorts of WordPress projects for a while now. And so I thought, what if instead of a SQL database, there's just no SQL database. And I'm just calling everything from Sheets. How would I do that? What would it look like? And so I started playing with it. Originally, I thought I would just build a Google Form and then collect all the data from a student would go to the Google Form, type in the name, a blog post, maybe upload an image. And then all of that would just get saved to a Google Sheet. And then I'd use jQuery to call the Google Sheet and sort of present that blog post. And that was the idea. And then every step of that process turned out to be far more complicated than I anticipated. And so I've been blogging a little bit about how I solved each of the problems. But that was the general impetus is, how do you get 950 people to be able to blog, basically for free? And then how do you, the other problem is I want to make it super sustainable from the faculty member side. I don't want them to have to touch basically anything. And if they do have to touch anything, I want it to be like one or maybe two HTML files that have very little stuff going on in them. And so I can tell you a little bit about how that works. I've read your post and one of the questions that was really cool and it was a cool solution is you didn't use Google Forms ultimately because you needed to actually allow people to link, include images, et cetera. So you want to step beyond Google Forms and you basically created your own form. Is that correct? And that's where people are actually posting and blogging. Yeah. Yeah, so the initial pitch to Jeno Cavasos, the professor on this was, it'll be easy. I'll just stand up at Google Form, no problem. Like she's used Google Forms, this'll be easy. And then I go to do it and Google Forms can't take file uploads. So we can't have any sort of images in our blog posts, which make for not very good blog posts. And then the other thing is that Google Forms don't have any way of taking rich text. So if I have a paragraph, a large text input box, it's just going to be text. And so that was really limiting. But I found Tom Woodward again turned me on to this one guy who had written some scripts that will handle file uploads. And so I started working with that. And basically it just, it's a form that's run by Google. And so you attach this form to your Google Sheet and run it as a Google Script. And so you upload, you created an HTML form. The student uploads a file and then the Google Script tells your Google Service to store the file in your Google Drive for you. And so it's a fairly straightforward script and it did everything I wanted. But then I wanted the Google Sheet to record the location of that file. And that's where I had to bring in Hoxie's work to after I'd stored the file, I wanted to save all the data to the Google Sheet. So Hoxie had some scripts for that. And so I just sort of welded the two together. And that part took a little while, but it's working great now. And then I started figuring out all the little nuances. How do you store rich text in a Google Sheet cell? And the answer is as a JSON string. And so I started using something called Quill.js, which puts together these, it's a rich text editor on the front end and then exports as a JSON string. And again, just all of these little pieces that I thought were just gonna work and I tackled them one by one. Right, and I would imagine, I don't know, maybe you can speak to this. There's probably a particular use case for this that starts to fall apart as you would need more things like categories and tags and a more robust architecture for building a post. I imagine when you're building your own form like this, as a post editor, it's not, you're not gonna get like, a lot of people are talking about the WordPress Gutenberg editor, you're not gonna get anything really amazing, although a lot of these editors that you can embed into sites have gotten fairly decent at sort of mirroring at least what the traditional WordPress editor is like. Yeah, Quill.js, which is what I settled on, looks a lot like the traditional WordPress editor. And my initial thought was that I don't, so Tom's done some stuff where he's taken Google Sheets and then used that to feed WordPress. So again, I thought I would do that at first, but I didn't think I needed a lot of categories and tags and a lot of what WordPress does. Right. I thought it'd be much more lightweight and maintainable just to have HTML as the front end. But later on, I decided I did want categories and so I've gone back and added those in and so you can do some of those things. It's just, it takes a couple of extra steps. You'd have to add them in ahead of time, is that right? And then the user would just select them as opposed to the user being able to add their own, yeah. Yeah, you could have the users add their own, but they wouldn't be consistent enough. And so it turns into, yeah, soup. So there's a dropdown list now where the students can say I'm submitting assignment number one or two or three or 12. And those then can work basically as categories or tags, however you want to think about it. And they end up getting past as parameters into the HTML. I think one of the coolest, most creative things about this, and really when Tim started talking to me about it over the table, it really sparked my imagination is the idea that you said, we didn't have the money to put up a full blogging platform for this class. Google's doing all the heavy lifting of managing 900 users going there so you know the site won't go down. Which is freaking brilliant, right? And it's kind of like back to this idea of headless web development. Like you're doing all this stuff through a form that's pushed out to Google Sheets that then is just being pulled into an HTML site. So at the point that Google Sheets maybe doesn't sink or something goes wrong, the HTML is still loading and it's completely responsive and lightweight. I mean, it's a super, super thoughtful creative solution to a 1200 person blogging course. And I really like when I saw that and Tim really laid it out for me, I was like, that is freaking awesome. And it returns to this idea of headless. Like I'm actually kind of like, I'm de-grooving and digging on the idea that you avoided WordPress for this. You just basically said, no, I'm gonna go straight to HTML. What's your thinking there? The headless piece was really the big selling point for me in that I felt like it was more sustainable from one semester to the next. And so at the end of each semester, the professor can go in, just make a copy of the Google Sheet for herself to archive it effectively and then clear out all of the data in the Google Sheet and she'll have a fresh set of everything for the next semester. Or she can go in and copy all of the HTML files and they're only, again, like a handful of HTML files in her OU Create account and tweak a few settings and have that stand up a new setting. And so she can go at it from either direction or both and replicate it semester to semester. And so that sort of headless feel to it I felt like would make it very easy for her to copy over from one semester to the next. And when she's training other people, her TAs or other instructors to take the stuff we can replicate it into their OU Create account so we can replicate the sheets with a couple of clicks. And so it's feel sustainable. Like you said, it's like even the side benefit of like not only that, but it's also because you're using HTML and JQuery, it's fast, right? Like it's way faster than WordPress can do by doing dynamic database calls and that kind of thing. So it's like you get the side benefit there. I'm wondering, do you get any sense, we talk about like Google scale, but I do wonder, are there any rate limits? Have you looked into it and because you're talking about even still a very large scale, depending I guess on how many concurrent people are submitting the form at the same time or anything like that? Yeah, it looks like for the form itself, there's a rate limit of 100 forms per 100 seconds. And if we start getting more submissions, more than 100 submissions every 100 seconds, more than one a second, that could be problematic. I don't think that'll be a problem at, even at deadline time, you get an assignment due on Tuesday at night. I doubt all 1000 students are going to submit within a 10 minute window and it could be a problem if she has all of her 450 students in one section submitting something during class to do it in weights. So 100 submissions per 100 seconds is one rate limit. The other one that I'm more worried about appears to be 500 file uploads per day. And so if both sections have an assignment due and if every student uploads something, we might hit that wall. It's unclear from the way that the quotas are written, whether that particular quota applies to this account or not. Google's just not very clear on what's a free account and what's a paid account in terms of their tiering. They're not as granular as they actually are. That was going to be my question because you talk about paid tiers paying for Google services or could you pay for elevated API access for more calls? Yeah, so I think their paid accounts, the education and the enterprise accounts and a couple of their other paid accounts have much higher limits. And that's actually what we're on in this case. And because the education accounts tend to have higher limits, I think a lot of users who might want to adopt this might already have those. It might already have higher limits. Yeah, absolutely. And so those, I don't have it in front of me, but I think those are more like 1,000 or 2,000 file uploads a day. And so that'll take care of our needs. I think the needs of most people. Again, if you have a smaller, not a smaller class, but if you have a normal sized class of less than 500 students, that's not an issue. I mean, it does really pose a brilliant workaround. And the professor who you're doing this with, Janelle Kavazos, is that right? Am I saying that right? She seems into it. Like, I think I saw her comment on Twitter. So that means like, you know, she's a partner that you're actually able to do this with and say, hey, look, we hit a limit here. We got to figure this out. But I mean, very cool, just example of a great partnership for an instructional technology project, that solves a lot of problems. One of the things that I was interested in, and I talked with Tim right away, is like, not only is the archive taken care of with different sheets. I love that. Like, well, here's my archive. It's a Google sheet. What could be easier? But what does it mean if like students do want to say, take their stuff out of that sheet and import it into a blog? Could you imagine writing a script where it's like, hey, the stuff you did, you can import it to whatever space or whatever, or downloaded as an HTML file? Like, I know I'm always thinking about that stuff, but, and this is early stages. So I'm not saying like, where is that requirement? I'm just wondering, are you thinking about making this a fully featured set of options? No, that's a great, that's a great idea. Someone had asked that on Twitter and I didn't have a good answer, but I think you just answered it for me. It's just, yeah, it'd be relatively trivial to go into the sheet and just filter for a given student, copy those entries and paste them into another sheet. But it's not much harder to actually write a script so that you could have a second form that says, just fill in the student's name and that'll create an export for you. If you wanted to have students be able to do it themselves. We're trying to limit access to the sheets themselves, even from TAs, just because we don't want anything getting messed up, but very easy to create a copy of the sheet and then let people do whatever they want to with it. So yeah, I think that's the answer. I think you just, yeah, you let students export their cells into another sheet and then I could write a script that would put those into WordPress or do whatever else they want to with them. Cool. Yeah, and then from a privacy standpoint, I think you talked about how, while the URL is technically public, it's similar to like a YouTube link being unlisted. Unless people actually know where to go, it's not a huge concern. And then similarly, if somebody was doing a private class, I guess you would just password protect the HTML site where it's rendering, right? Or something along those lines rather than having to do it on a post by post basis. Yeah, yeah. If you wanted the entire site to be private, it wouldn't be that hard. As you said, Janelle's been great about all of this. She teaches some workshops for us on using Google in the classroom. And so she's very comfortable with sheets. She's good with HTML. And so the initial index files that I gave her, she went in and made them look a lot better. And so that's been great for me. And yeah, it's been it's the initial, figuring out the architecture was a bit of a pain and teaching myself jQuery was a bit of a pain. But at this point, they run themselves pretty well. I'm trying to optimize them a little bit right now as the last step of, I'm going from copies for each of the different teams of the files to just consolidating it into one file and passing variables to minimize the whole thing. And it's getting close. I think I can get it down to about three HTML files for the whole system and less than megabyte probably for the entire system. That's awesome. Yeah, and it's great to think through not even just in this scenario, but just in general as sort of a Swiss army knife, like in what ways can you use third party services to your benefit while still doing work on your own domain and having that be the place of record, but kind of offload some of the more intensive, heavier processing aspects of it to Google or even to other services. I've seen classes where they're doing a lot of posting on social media and then pulling it all together at the end as a way to not have to tax WordPress or whatever application you might be running on your domain have a lot of that content initially live elsewhere and then pull it in remotely. Well, it reminds me too of like, and it seems to be of like a genre of folks doing work. And you mentioned Tom Woodward already, like he was working with Michael Wesh on this Anth 101 course. And they were running that and hosting that with us, but WordPress was getting hit by, and that case like 500 students and it was bringing down the server. And so one of the ways in which they dealt with this is they out offloaded and integrated with the Instagram API. So the site was just basically allowing all the uploading and writing that happened on Instagram and pull it in and frame it on the actual Anth 101 site, which is another group we got to get on to talk about this because your work is very much in line with that notion of like almost like Paris, I don't wanna call you a parasite, but like that idea of like a remora living off the great white and as they eat, like you can basically benefit off of their prey by allowing that to scale for 900 people and Google won't feel that at all. And Instagram might be really useful for me also. If we do hit these file limits of uploads, maybe instead of pushing it into Google Drive, we push it into Instagram. Yeah, yeah, I find all of these systems together, just their architectures and relying on their APIs. And I think that the tricky balance there will be in terms of that archival aspect. Of course, if you put everything on Instagram, then the question is, are you pulling it in later somewhere else if Instagram were to go away or you lose access to those files and that kind of thing versus I can see a more permanent aspect to something where the file is in your Google Drive and you can copy it, move it as you need to and that kind of thing. Or even with WordPress pulling it in after the fact with RSS or something like that, just that you have your own copy that exists outside of that third-party service. That's right, like they did that for Tumblr. Like when we were syndicating in Tumblr, like there was a plugin for WordPress that just copied all the images from Tumblr. So as that Tumblr went away, like you still have the archive of it. Which I thought was ideal. And if you could do that for Instagram or whatever you would have on Google, I mean, I really like it. It's almost, like I said, it's like piggybacking on these systems. So one huge course. Another third-party service, Disgust for commenting. So you're using a third-party commenting system which I actually like. That's what my blog uses as well. And I've switched between a few different content management systems. I've been pretty consistent with Ghost in the past couple of years. But I used to be WordPress and one point I was using, one called Anchor. And I've used Disgust throughout it all, which is kind of nice because those comments have stuck around regardless of the platform I've been on. So I've already been a pretty big advocate of using a third-party commenting system as opposed to the one built into the CMS. So it was kind of cool to see that you're using it here as well. Yeah, and I'll have to think about how to make the comments more permanent. I was just thinking about when we wiped the data sets at the end of the semester, you might accidentally have multiple blog posts sharing a blog ID. And I'll just have to make sure that doesn't happen. But yeah, I think, the other option, I guess, for the commenting system or the other thing that I thought about anyway was using, again, Google Speeds as the commenting system. And so it would push a comment back into a second sheet that was tied to each blog post and sort of keep, effectively keep the comments in a CSV. But Disgust was just easier. And the way that I'm passing the parameters, it worked really well. I was shocked at how easy it was to turn on. I had sort of set aside a week to figure that out and it took about an hour. So that was good. Most things worked out better than I thought they would really. Getting the CSS to play nice and getting it all to display well was harder, but that was just me teaching myself as I wouldn't. I think, I mean, one of the exciting things, there's many things to discuss here, but one of the things I think is really cool, just listening to you talk about it, reading the post, talking with Tim about it, is that it opens up all those questions. Like, how would I do this? How would I archive that? How would I integrate third parties? Like, you're asking some really cool questions to rethink some things for your faculty and students that is really kind of cool. So like kudos on just some really creative, thoughtful, experimental attack. I mean, it's what I'm always most excited about when I see this stuff. And your project was just, you know, I don't know. I thought it was really like eye-opening. Like, wow, like why hasn't someone thought it is sooner? It's really cool. When a couple of things, at least for me, one of the things that I found interesting was looking at the sheet itself, you know, it exposes the data in different ways than we normally see it, I guess. And that stuff's always there, right? If you're using WordPress, you've got a SQL database that's the same thing. It's just not what we normally see. But I can see the column that has all of the text for all of the blog posts. And if I wanted to, I could just take that column and do data analysis on it and text mining, which is something that we don't normally do. But Adam Krum actually wrote his master's thesis on cinnamon analysis in student blog posts. And it's something that a psychology professor might be really into is, you know, starting to dive into some of that data. And so I think, you know, we need to be careful with the ethics on it. And we need to be careful with having students opt in for that kind of study. But just having that sheet there and looking at it, I think it doesn't open new possibilities. It just reminds us of the possibilities that are there in terms of displaying the data in other ways of an nutritional blog. Well, you know, reclaimed today, on behalf of me and Tim just want to say to you, John, you're a superstar of the good work. Don't stop believing. Very cool. And before we go, we should give a quick shout out to Saturday Night Fever for Pat Lockley, P. Gaggy Web Stuff, sent us this amazing laser disk. Not that we need to make this a reclaimed video episode. Maybe that would be a separate thing. Is this web stuff? I just wonder, is a laser disk? I guess it came to us via eBay. So it's kind of web stuff. Yeah. I think in customs, he actually had to check it off as being web stuff. But... So he's our official sponsor for this episode. Thank you, P. Gaggy Web Stuff for sponsoring John's unbelievably creative work with Google Docs and, or Google Sheets and Google Scripting. That's right. Basically, Google Sheets to blog at scale, just loving it. Between that and the artwork from Michael Branson Smith running on the TV in the background here, it's a community effort all around. And that's where it is. It gets right back to community, which is the heart of ed tech. And if you want more on John's work, go to johnnastewart.org. You can see this is only the first of a three-part blog series. And I'm looking forward with Bated Breath to parts two and three, because part one, frankly, thumbs up. It blew me away. Thanks. I hope to have part three out tomorrow if I can make time to write it. These are getting long. They're about 2,000 words each. And so it's a bit of a long series, but if you've got the time for it, hopefully part three will be out tomorrow. Well, thanks for documenting it too. I mean, who said blogging is dead? So, very cool. John, thanks for joining us. Thanks. All right, take care. Bye-bye, everybody. Bye.