Road map

Next week, I begin my first semester as a grad student at KU, and my second semester teaching full time, teaching two sections of Discrete Math, and one each of Data Structures and Programming II. Moosader is also on my mind, and I feel like I have a bit more of a focus for what we should do in 2017. Marriage is also on my mind, though I’ve never been engaged before or planned for such a thing before.

 

Grad School

kuOrientation at KU opened my eyes to some possibilities that I had not thought of; I had originally just planned on doing it for the paper, to push forward my career, but talking to the EECS faculty inspired me a bit.

I like watching Day9’s Mostly Walking series, and one of the guests on that web show is Sean Bouchard. Sometimes he talks about his work, and though I don’t know much about it, it had piqued my interest prior to even thinking about grad school, and going to orientation made me think of some of the things he had talked about, which got me excited.

Now I see grad school as more of a journey than just a means to an end. Perhaps at some point I will switch from working full time and studying part time to vice versa – going back to being an adjunct and studying full time so that I can spend time on a research project, centered around software and education.

 

Teaching

This year, I’m an assistant professor. The previous semester, I was a full-time-temp, so I worked full time but I didn’t have the same responsibilities; it was like being an adjunct but with more hours.

I’ve been with my community college for a full year now – all of 2016. I really enjoy the teaching aspects, but this is the first place I’ve worked where I keep being put in the middle of faction politics. Perhaps I just hadn’t been at any software companies long enough to experience this, or I was always really low on the totem pole.

It isn’t making my job unpleasant at this point, per se; I mostly see it as weird, bizarre entertainment. But, it has affected my long-term goals there. That, and also being full time means I have more responsibilities now, such as attending meetings and a “butt-in-seat” policy (having to be physically present at the workplace to “prove” that you’re working, when really it just proves that you know how to look busy.)

I left the software industry to get away from arbitrary things that kill my productivity, such as required work hours and require work locations. If you want me to create my best work, you need to trust that I know how to best produce that productivity in me, rather than restrict me to silly standards that make no sense.

Anyway, this is part of why I’ve shifted my excitement towards grad school, and why I’m thinking of adjuncting after my year-and-a-half contract is up. Keep a foot in the door, but put my efforts elseware.

 

Moosader

fdeIn 2016, I was convinced that I could put out Fin ‘N’ Kit, rewriting it in C++ so that I could control more of its features than what the original engine had allowed for. However, this just ended up meaning I was the bottleneck and my team didn’t have anything they could work on. In 2016, we basically just re-released Gift Grab with new graphics as a free game with ads, since in 2015 we basically had about 12 sales.

So one of the things I’ve learned is that, this early in, we need to be building games with tools that increase our speed. Visual Novels in RenPy, or maybe using other engines or languages, rather than rewriting a full engine in C++. Fin ‘N’ Kit is in alpha, but there just isn’t much interest, so I guess it is suspended for now.

I put out a survey – in English and in Esperanto – with a list of some of the games we have prototyped, or just ideas for, to see where the interest lies. Mostly, the interest is around the language learning educational apps, moreso than anything that we’ve worked on purely for entertainment. Sure, there’s a little interest in a game where you’re a courier in a post-apocalyptic setting, handing out bills for peoples’ still-active student loans, and returning the payments back to the student loan H.Q. — Because, even after the apocalypse, student loans will continue to exist. Get it? 😛

And, honestly, it is hard for me to find inspiration for the “purely for fun” types of games anymore. This inspiration was severely killed off during my years as a software developer, as my soul was slowly killed as I zombied through the days. It was language learning that rekindled any sort of passion in me. As a result, I can easily think of games that I would like to play to help me learn languages, in the style that I best learn, so designing these sorts of games comes much more naturally. Coming up with something purely fun for fun’s sake outside the context of learning, my brain just doesn’t do that anymore.

 

Marriage?
rai22016 had mostly been good to me, up until a certain point. I began taking antidepressants/antianxiety meds, started my new job as an adjunct instructor, which I really enjoyed, and started my relationship with Rai, whom I met on Tinder. I had not been intending to find a serious boyfriend, and only date around to fill time, but we actually hit it off really well, and it had been the most healthy, supportive relationship I had ever been in.

In late October, however, the company that Rai was subcontracted under had budget cuts and rolled him off the project. He was given two weeks to return back to India. So, November 1st, he returned, where he continues waiting for another assignment and spending time training on Selenium.

We are still together, though “together” through WhatsApp. He is 11-and-a-half hours away, which is a difficult schedule. There is a chance that the company that rolled him off the project will be reassessing their budget from Q1, and be up for hiring him back in Q2.  I hate having to rely on corporations, they never come through and they have no respect or care for their employees.

Beyond that, I need to renew my passport, and I’m planning on booking a trip to India in May of this year, where we will go to Uttarakhand and meet his parents. I need to make sure to study Hindi daily, as his parents do not speak English. We’ve gotten approval from them already, but it is good to meet.

IMG-20170111-WA0016The marriage I’m willing, but weddings are a pain in the butt, and even more so now that we have to think of weddings in two countries. I like to keep things simple, but simple does not describe an Indian wedding. In the U.S., I figured it would be my parents, his parents, my sister, her bf, and my cousin and her husband. I do not want any more people than that. Simple, clean, low-stress, mostly casual. But how far apart would we have the two weddings, getting visas, and how all of this works, is just another stress on my plate when I already have so much to think about.

I finally am working full time so I can actually feasibly pay for flight(s) to India, but trying to fly myself and my parents, or flying his parents over, so many flights! So much money! Blarg.

You rock

I had a student who wrote some notes on their recent exam that expressed frustration and embarrassment over some problems. I haven’t returned the exams yet (it’s a once-a-week class), but I sketched in their exam and left positive notes. I scanned the exam for this student and sent it to them, and let them know that these next chapters will be easier – no holiday getting in the middle of the class, I’m doing video lectures to help students out more, and we’ll work together to iron out tough bits.

The response I got back was “you rock”, so that was nice. 🙂

 

Rachel,
I really appreciate this email and thank you for your positive attachment! That was nice, but I can be really self-deprecating, so that’s where that came from.
I will let you know if I have any questions. I will get to my Discrete Math ASAP today; I’m such a procrastinator:(
You rock.

Video Lectures

A screenshot of a video being rendered

When I was a student, it was aggravating to no end, just knowing that I heard my professor say something in class, but not having it in my notes and not remembering what exactly it was.

I know I’ve dealt with being confused on a math topic and pouring through the book and examples and still not understanding; trying to find YouTube videos on the same topic that wouldn’t confuse me further.

Some teachers would record their entire in-class lecture and post those up online, but these were often over an hour long and difficult to parse; if it were a class session where the teacher was just coding the entire time, it would be hard to figure out what part of the class they said the thing I was looking for!


 

However, done right, video is a great medium for presenting information. For my CS 200 (JCCC) and CS 201R (UMKC) classes I taught in Spring 2016, I spent every weekend writing and recording lecture videos for them to watch as homework – then we’d spend the class period actually coding. This also means that I can reuse these videos – both for any other CS 200 sessions I’m teaching, but also to provide as review videos for classes after CS 200 – such as data structures, if the students need to review some core C++ topics!

More recently, as a result of having a Monday-only three-hour Discrete Math class and Labor Day nuking the class period for the week, I ended up recording a video lecture for the class that should have been that week. And, actually, I recorded video lectures for that entire chapter, to help my students study for the exam the following week. And it was pretty well received.

Part of building lecture videos is boiling down the book’s contents to its important bits; like panning dirt to find gold… or at least some cool pebbles.

An in-class lecture can be boiled down to 10 minutes when you’re building a lecture video by a script, rather than just hitting record and going for it. It also results in cleaner, easier to follow content.

The downside, however, is just that it takes time to do. For a standard lecture, I will…:

  • Go through the book, figuring out the important parts.
  • Write some presentation slides, then export them as separate images.
  • Throw those slides in my video editor (kdenlive).
  • For each slide, record narration (with audacity).
  • Then to work examples of the problems, record myself writing out and solving the problems in a paint program. (This requires GIMP, my Wacom tablet, and OBS) – If it’s a programming class, then Code::Blocks and OBS to record coding through some problems.
  • Putting it all together in the video editor, making sure it flows well.
  • Rendering!
  • Uploading to my server and/or YouTube.

Unfortunately, it can be a lot to ask any random teacher to build something like this. But I have the capability (I guess I’m from the “YouTube Generation” so a lot of us can handle a video editor), and the drive to do so. I feel like creating the video lectures also helps me understand the content even better, so that in class I can give a better lecture and answer questions better.

It also means that, even though it is a lot of work now, it will be less work in the long run.


 

You can view my educational content over at http://edu.moosader.com/

Programming Poems

Was just playing around with words to try to think of ways to get students to remember that they need == when comparing two values.

To compare if two values are equal,
Your equal sign needs a sequel. (==)

 

I posted it on FB, and was given the response “===” so then I wrote:

If you need to check the type and value both,
your equal signs will need another growth?

 

But a friend of mine, Chris M, also wrote a poem:

If checking type is on your minds,
why don’t you use three equal signs?

 

I just thought it was funny and cute. ^_^

 

Feedback during the 3rd week of my C++ class

Dang! It is always nice to get good feedback like this.

This was in one of the mini-essays I assigned in my C++ class (reading about & discussing problem solving techniques), so I wasn’t expecting it!

“Coming into the class I was very nervous. My friend who has taken this course before by other unnamed teacher said it was the worst and that if I didn’t understand this class that I would struggle going forward. Scary right? For me it was. But as I continue to read the content you have written to teach and share with us, I am put to ease. I find myself smiling and laughing at your videos and text, which is something I did not expect coming into the class. So while I am still terrified of falling on my face, I have faith that I will make it. And that is not something that I previously thought.”

Programming for Discrete Math

  • Josephus Game
  • Magic Trick
  • Tennis Matches

I like using programming in the classroom. I’ve never seen programming really used much in any of the math classes I’ve had in the past, save from some odd MatLab projects (of course I opt for NumPy or SciLab – Go FOSS!), and sometimes reading paragraphs of math problem examples in a textbook just makes my eyes glaze over. Rather than try to demonstrate this stuff on the whiteboard, I decided to write some quick Python/PyGame programs for the examples from the textbook we’re using.

Another pro of this is that it helps me “grok” the content. I might read over something and think “yeah, that makes sense”, but I don’t really know it until I put it into practice, and the best way for me to put it into practice is to make it a program. When applying it in code, it’s more likely I’ll remember the fine details much better, just through the entire process of working on the program step-by-step.

Not sure if I’ll have my students do any coding (various prereqs, they might all know different languages), but it might be nice in the future!

random test generator

random test generator

What do you do when you want to write a take-home exam, but want to discourage students from simply copying off each other?

If you’re a programmer, you write a random exam generator. 🙂 If you’re not a programmer, then you can probably find an existing one out there much nicer than mine… but oh well.

This is a C++ program that reads in text files – each question position has a “deck”, and a deck file has a list of questions that are interchangible (e.g., “declare an int”, “declare a double”), and then you have a series of decks that represent the amount of questions in the exam. Each question item in a deck has a serial number as well.

The exams are generated and output to .html files (I decided to do this because it’s easier to maintain the formatting if I copy it into a LibreWriter file), and a key is also generated, with all the decks and all the questions and their answers.

I’ll probably go extend this to list point values as well, I like putting that on exams. Then I have to go write my Programming Fundamentals exam 1. Whee!

Jeopardy for Computer Science

Sometimes, class gets quiet. Especially during review days, students usually don’t speak up on their own to ask questions. So, this semester I wrote a little Jeopardy program and used it for both of my classes.

The students at the community college I’m teaching at seemed to enjoy it; I was even asked to make more questions and come back with candy as a reward next class. So I will. I upgraded the Jeopardy program and wrote new questions dealing with different topics in Computer Science / C++, and it’s all ready to go!

This program is written with C++ and SDL2, as well as my Kuko framework. Since the class is about C++, I thought that it would be good to write the program with C++, instead of doing it as a webapp (which would have taken less time, admittedly!)

You can download the game code here: https://github.com/Rachels-Courses/CompSci-Jeopardy

It also requires the Kuko library: https://github.com/moosader/kuko

As well as SDL2 and Lua 5.2!

Kind words

When I was a student, I always tried to leave nice messages on my final exams / final submissions, so it is really nice to get the same from my students now that I’m teaching. 🙂

I’m going to keep these for posterity!

I’m sorry it’s late. Have a great summer, and thank you for being such an awesome C++ teacher and teaching us how to get a good job as a programmer. 🙂

 

It was a great semester learning from you and you definitely helped me to accomplish my goals in starting to learn the basics of programming. I wish you all the best […] Saying thank you isn’t enough for what you did to help me learn and giving me the Arduino as a gift but I promise I will learn from it and will always remember you 🙂

Visual problem solving with SDL2

I am assembling some projects in my Challenge Topics repository on GitHub (https://github.com/Rachels-Courses/Challenge-Topics). These are projects that I’ve written to show in class, asking the students to come up with a better algorithm to solve some problem.

Here are some examples:

Screenshot-Searching

With this one, a linear and a random search are implemented to search a sorted list. The challenge is to ask students how a better searching algorithm can be done for our sorted list, where we do searching more intelligently than just going from the beginning to the end.

You can also expand this to talk about creating a data structure that auto-sorts when items are inserted, and whether to implement this by sorting immediately after an insert, or do a smart-insert and look for the appropriate position for the new object.

 

Screenshot-Travelling Salesperson

For this one, a list of cities are generated at random points on a map. The random paths generator essentially adds paths between cities in the order that the cities were generated. The challenge here is to ask students how to build a more intelligent route, visiting all cities once, and returning home afterward.

So for example, in the above screenshot, the salesperson goes from Grandview to Leawood to Raymore, which is a bit nonsensical.

You can also demonstrate Dijkstra’s Algorithm as well.

 

Screenshot-Collision Detection

Another problem we can look at is detecting how two objects are colliding, such as in a game. There are multiple ways to handle it – for example, you could do bounding-box collision detection and check the perimeter of the images themselves, each edge. Pros and cons? Could be empty space colliding, such as the top-right of the bunny and bottom-left of the dog.

Another option is to use the distance formula and figure out what a good distance is before considering the two images colliding. This works well for circular objects, but might not work as well for an oblong object.

Or, you could do a combination of both, maybe each object has several bounding boxes within it (like the dog’s head, and dog’s torso).


 

The idea behind these exercises isn’t to necessarily get the “most efficient” algorithm to any given problem, but to have students brainstorm and actually think about the problem visually, instead of having everything be intangible. Having pure console-based applications using just cin and cout can be boring, and even when implementing something modelled on a real-life system, it can be hard to really get into it. Even many command-line programs use something like pdcurses to give more organization to the presentation of the program.

So by using the SDL library, we can still write C++ code and demonstrate some problems in a more graphical way. Even if SDL is not available on the students’ school computers, if the teacher has a laptop they can install SDL2 on their own and display it to the entire class for a more social lesson.

Learn more about SDL at: https://www.libsdl.org/

And my challenge repository is at: https://github.com/Rachels-Courses/Challenge-Topics