Episode: 2965 Title: HPR2965: instant feedback for students in maths Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2965/hpr2965.mp3 Transcribed: 2025-10-24 13:57:58 --- This is HPR Episode 2965 for Friday the 13th of December 2019. Today's show is entitled instant feedback for students in maths. It's hosted by Benny, it's 40 minutes long, and carries a clean flag. The summary is how we use old CAS software to give students instant feedback in their maths homework. This episode of HPR is brought to you by AnanasThost.com. Get 15% discount on all shared hosting with the offer code HPR15. That's HPR15. Better web hosting that's honest and fair at AnanasThost.com. Okay, hi. We're still at the Okam. My name is Benny. We're here for HPR. Here with me is Ken Falon. This is kind of weird because he's doing an interview with me, but I had to start for this to be my show. That's me handing over to Ken to ask questions. As we were talking, it became obvious that you were a math teacher. I was a math teacher and that's where this whole project and the conversation started. It was a math teacher until the summer. So you're putting together a website. This is a project of somebody else. It's not open-source, it's not whatever, but I still thought it would be an interesting topic for you to talk about how what you're doing. So you're doing this where? As you said, it's not my idea originally. I just came to the project later. That's why it's not open-source and stuff. We still try to make money. It barely pays for the bills. But the basic idea is we have my friend who actually had the idea for the project. It's also a math teacher. We always had the problems that students weren't so good at solving equations and doing all this manipulation of mathematical expression. It would be a good idea to have a web application where a teacher can hand out an exercise sheet and then students start solving the exercises. Instead of just solving the exercises and getting the first step wrong and then handing it back to the teacher and the teacher goes like, well, that's wrong. The application marks basically every step. Okay, so give me an instance theory of relativity is E equals MC squared. So the student would have to solve E equals MC squared and then they put in E multiplied by, or E divided by C squared and it's wrong. And then they continue doing the calculation. We get 42 at the end when that's not the right answer. And I was expressing my, I hope, frustrated. I found if I made a simple, you know, a numerical fault, but I got the process of taking the equation and extrapolating it out if I got that right, I would still, depending on the teacher, either get 90% or 0%. So your solution aims to help that. Yes, well, of course, it doesn't, it doesn't know what E equals MC squared means, right? Yeah, is it? Is it the MC squared? No, it's at C squared. It doesn't matter. Well, I'm thankfully, I'm not recording the show. So you have to edit it. You're the one editing. I'm not a physics teacher. So I don't have to know. And that's the point that the application doesn't make sense of what the teacher puts in there. It just knows the mathematical rules behind solving equations and mathematical expression manipulation. So how does that work? We're basically using, we're basically using maxima, which is a computer algebra system in the back. It's, it was written, started, I'm not sure whether it started in the 80s or 70s. It's written in common list. And this was, this was basically where I came into the project, because that's the hard part to make something that is written in common list, speak to a modern web application. So when my friend started off what he did, he wrote a PHP script that would start maxima every time a student enters an equation or a step of the equation. So it starts that maxima quits it again each time. So obviously this doesn't scale. So you're going to have 42 kids in the class for something, 32 kids, well, this was one. So it's 20, 20 kids in the class, but that's what I'm just Switzerland, why don't we? But, but still, I mean, we have multiple teachers using this and usually students do their homework in the evening, I don't know, 12, 12 and 9, there's something. Where was I going with this? So it's a running one instance. Yeah, exactly. Yeah, yeah. So actually, tell people what's what happens here. You put in a formula at the beginning and then Oh, oh, right. Okay, that's fine. No, no, it's fine. Carry on. All right. So well, first, first, obviously, it has to be parsed. So it's passed onto the parser that does the parsing of the expression and then it's passed on to maxima which now runs as a service and then basically does the whole evaluation of whether it's correct or not and then hence the result back to the application, which is place in. Exactly. That's about it. So, um, for example, what you might resolve and then the steps. Did you realize that you were sitting? All right. I mean, which we're an author in the lobby of the hotel, but just by the way, honestly, I didn't, I didn't write the functions in maxima. That's my, my friends work. So I don't exactly know what functions in maxima are called. So, for example, you, you, let's say, we have 2x equal 3 and now the student says, well, if I divide this by 2, I get x equals 3 divided by 2. Now, this is parsed first, the left hand side and the right hand side of the equation, then it's parsed in, in, how would you call the operations as in two numbers and then divided by is number 18. So, it's in the end you have this, this syntax tree, right? And then from this, we again extract the formula for maxima, which maxima understands and then passes on to maxima to handle. The, the interesting part for me, what, what if it's wrong? Sorry? What if it's wrong? What does the student say? The students, well, the student just says, just sees a retarical or green take and the retarical means it's not correct and the green take means it's correct. I mean, it doesn't, it doesn't give more feedback, it just gives, gives the feedback is correct or wrong. So, the student can try again and try again and basically to give more feedback is then the teacher's job who can comment on each step. But say it's a complex equation, say it's a complex equation, you can, so you're doing the simplified, you simplify the equation in 10 steps as you supposed to to show your work. If you do it in simple steps, then maxima can jump in and tell you, well, that part was right. Okay, now moving on to the next one, well, that part was wrong and you can fix that and then try it again and then continue on and eventually extrapolate your equation, maybe getting one or two steps wrong, but you're, is that correct for a start? Well, yeah, more or less. Of course, when you get one step wrong, the next step will also be wrong because it always compares to the last correct step, right? So, you have to find a next step that's correct. Oh, yeah. You can't just have one wrong step and then every step is correct again. But you get your, you multiply instead of multiplying two by three, you add them and then the next time I write that's incorrect. So, I will multiply two by three and now it's correct and you can proceed further. Yeah, exactly. Of course, it's a student's job to split this up in simple steps. Yes. The student could do one huge step that includes everything, but then our, it's called matraxy, by the way. It would just say, well, it's wrong, right? Then it's a student's job to understand that he or she should split this up in in simple steps. Yeah, so working from the outside in, dividing by thinking, transposing over things over to the other side, yeah, and showing your work essentially. Yeah, so I thought it was a really, a really good idea. And you guys are doing this. Is this a full-time job or enough? No, it's just something you're doing part of. Not at all. So, we both work full-time jobs. Yeah, so it's basically just a spare time like hobby that pays for itself, right? We do sell it to Swiss schools, so right now we don't even have a website, so all the marketing is done face-to-face, people we meet, and and people, teachers tell other teachers from other schools in the Swiss community, so now we don't really plan to expand them much because, well, unless it just happens, right? And we can accommodate without day jobs because if we expand, of course, it's more work. Yeah, and then it needs to pay. Yeah. So, yeah. Yeah, the interesting part, I'll just tell this because I found this, yeah, I found this, I found this entrance. Essentially a mic standard. I tried, when I tried to hook up the maxima to our application, I looked at the man page of maxima and it said, well, it has this TCP interface, and I thought, oh, well, great, I can start this up. It listens on a TCP socket, and then I'll just send whatever. Yeah. And I just couldn't get this work until I closely read the man page and realized it's not a TCP server, it's a TCP client, so you have to run a server, and then you get maxima to connect to this TCP server, so what we do now to this node to the TCP maxima is then the client, maxima connects to the server. Yeah, so now what we have is, it's basically a web service, well, a rest service written in. I think right now it's written in Go. The first try was in Python, and then rewrote it in Go, just because I thought Go would be cool, a cool language you'll learn. And what it does now, it basically has one HTTP interface and one TCP interface, and maxima connects to the TCP interface, and on the other end we just send rest a chase on. And on the other side, you then track the open API connections. You track the rest connections on the rest side, and then there's only one connection from the application to the client. I do have multiple instances of maxima, and there is a queue, and those instances just work the queue, because we can't avoid that the student blocks one instance of maxima, because we can't just exclude every case when the student could block one instance. So we have a timeout, which is, I don't know, five seconds, but we can't have the whole web application sent for five seconds. So at what point does the student do they have to press enter and then it goes, or is it constant? Yeah, we have a new version where the parser runs constantly, because the student doesn't enter a real math, well it's real as in there is a language they have to use to enter the expression, like a computer algebra system. And we now have a version, it's not online yet, but we have a version where the parser does every single letter or character the student enters, it parses again, and shows the student the result. So the student knows what he's actually typing. It's really all-school programme, it's like the next server, you run the server and you connect to the client. Yeah, yeah. I mean, apparently not all enough to know this, that's why I had some problems figuring out, but now it works, it works one well. Now that I figured this out, at first, my first Python version actually started maximum SACLI process and you send it in, send it out to communicate, and that's actually the one that's actually the one that's still running on our production instance, and it works, but it's just not very nice. How do you feel? Yeah, I think that's it. You've been listening to Hecopublic Radio at HecopublicRadio.org. We are a community podcast network that releases shows every weekday, Monday through Friday. Today's show, like all our shows, was contributed by an HBR listener like yourself. If you ever thought of recording a podcast, then click on our contribute link to find out how easy it really is. Hecopublic Radio was found by the Digital Dove Pound and the Infonomicon Computer Club, and it's part of the binary revolution at binrev.com. If you have comments on today's show, please email the host directly, leave a comment on the website or record a follow-up episode yourself. Unless otherwise status, today's show is released under Creative Commons, Attribution, ShareLite, 3.0 license.