- MCP server with stdio transport for local use - Search episodes, transcripts, hosts, and series - 4,511 episodes with metadata and transcripts - Data loader with in-memory JSON storage 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
138 lines
12 KiB
Plaintext
138 lines
12 KiB
Plaintext
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.
|