Spring 2021

Subsections of Spring 2021

Spring '21 Week 1

YouTube Video

Resources

Edited Transcript

Hello, and welcome to CC 410. My name is Russell Feldhausen. I’m going to be your instructor for this semester. And this is the first of the weekly announcements videos that I’m going to do in this class. My goal is throughout the semester, if I have anything interesting to talk about each week, I will try and record a video and post it sometime around Monday morning. I’m a little bit behind because it’s the first day of the semester, and I’ve had a few other things to work on. But in these videos, I’m going to briefly talk about what’s going on this week, address any questions we had during the previous week and give you a general overview of where you should be going in this course, my contact information is here, it’s also on the syllabus. It’s also in the intro video, you’ve probably seen it a few times. But if you have any questions feel free to reach out to me either directly or via the cc410-help email address that’s described in the syllabus and then the introductory material.

So CC 410 is a brand new course this semester. It’s developed based on the CIS 400 course that Nathan Bean teaches for computer science majors. And so a lot of the content is similar at the beginning. He teaches that class in C#, we’re learning in Java and Python. So a lot of the content has been adapted a little bit. But I’m still in the process of developing new content. So things may change as I figure things out for this course, or as I realize things that Nathan does don’t work as well for the course I want to teach. So please bear with me as we change things. And as always, your feedback is really welcome. If there’s something in particular you want to learn or something you think I could improve or do better in the next semester, I really welcome that feedback from you, as this is a brand new course for everybody.

So big picture in this course, what we’re going to focus on in this semester is object oriented programming. Also OOP is how the abbreviation looks. So we’re going to do a lot of class libraries and building really big projects, we’re going to focus a little time on graphical user interfaces or GUIs. And then toward the end of the semester, we’re going to look at some API’s how you can integrate either external code or write your own API with your code. So we’re going to look at a lot of those different things. throughout the semester, we’re going to do several hands on examples, you’ll get to see those where basically I set a project and then I record a video walking through that project, so you can follow along. And then you’ll take what you learn on those examples. And you’ll use them to complete this restaurant project that we’re going to do throughout the semester. It has about 10, or 12 milestones that we’ll do. And it’s directly built upon those examples. So once you do the example, you’ll have all the tools you need to do the restaurant project. And then in the background, you’ll also be working on a final project that we’ll talk about here in a second. And that’s going to be really your capstone from the computational core programs. So if you’re in the computer science certificate, or the integrated computer science curriculum, this is one of the big capstone projects that you’ll get to complete.

So in this course, we’re going to use some new technologies that you may not have worked with before. First and foremost is git, which is a source control system so that we can keep track of versions of our source. We’re also going to use GitHub classroom as one of the tools that I use to help manage everything. So you’ll get to learn how to use that in the Hello real world project that you’ll do first. for Java developers, we’re going to introduce Gradle, which is a compilation tool for Java, that helps make things a lot simpler. For Python, we’re going to use a tool called tox, which does a lot of the same things, just automating some of the things that we need to do in Python, Python, especially regarding introduced type checking the semester, which is something that Java developers have been dealing with since day one. For Python users, this is going to teach you a little bit more about how object oriented programming works and some ways that you can write better code in Python. We’re also going to cover unit testing. so we can write tests that make sure our programs work correctly, we’re going to focus on style checking, making sure that our code fits a particular professional style, which is really important. And we’re going to look at how we can write documentation in our code so that not only us, but other developers can help understand what our code does and how it works.

So as I mentioned, in this course, there will be a final project, the final project is self directed, you get to choose the topic for your final project. Hopefully, you’re able to find a project that aligns with your interests. So if you’re outside of the computer science major, if you’re in biology, or chemistry or statistics, there might be some interesting projects that align with that interest area. But the whole idea is to allow you to use the skills that you’re developing in this course and all the previous programming courses you’ve taken to build something of your own design. So as you come up with your topic, you’ll meet with me individually, we’ll kind of discuss the scope and some ideas for how you can implement that project. And then throughout the semester, there’ll be four different milestones where you’ll check in with me and see where you’re going on the final project. And then finally, at the end of the class on finals week, you’re going to create a presentation that will be shared with the class so they can see what you did with your final project. So I hope that’s a really good experience. It’s something very new in this course. So we’ll see how that goes.

So really quickly, a quick overview of the next few weeks and this course week one this week, which ends on the 31st. This week is a lot of administrivia, just going through the basic structure of the course. And then you’re going to do the first example, which is the Hello real world example. And this is a recreation of the HelloWorld project you’re familiar with. But using all of the new technologies we’re going to use in this course. So we’re going to write hello world that has unit testing and style checking, and is committed to Git and has documentation, comments, and a lot of things that you haven’t done yet. But it’s all really important stuff that you need to learn to become a professional programmer. I’m also going to have our first final project meeting. So sometime in the next two weeks, you’re going to schedule a time to meet with me via zoom, and we’re going to discuss ideas for your final project, we really need to get off the ground running with that. And then when we meet, I’ve got a couple of questions for you. I’m curious to see if you’re interested in live office hours via zoom or Discord. And I’m also interested if you’d be interested in communication platforms such as discord, we have a Discord server for the computer science department and I can create a channel for CC 410. It’s a great place where you can come and chat with other students and you can chat with me. But I don’t want to do that unless I’m sure that people are interested in having such a platform available. So we’ll discuss that when we meet for the first final project meeting here in the next couple weeks.

Week two, which ends on February the seventh, we’re going to build an open an object oriented programming class library for our restaurant project, we’re going to build a library that represents the menu of items at this restaurant that corresponds with the first milestone of the restaurant project. I spent this past weekend writing the model solutions for the first couple of restaurant milestones. And in my model solution, this one was around 2000 to 2500 lines of code, which for a lot of you, that’s going to be very daunting, because most of your projects in earlier CC courses were maybe a few 100 lines of code, some of the larger data structures might have gotten close to 1000 lines of code. Here we’re talking about a single week where we’re going to develop 2000 to 2500 lines of code so much, much bigger project. The nice thing is it’s mostly boilerplate, boilerplate code. So once you get one version written, you’re probably okay, you can copy paste a lot of that. However, I do warn you to be very mindful which as you copy paste, there’s a lot of chance to introduce errors into your code. And so you can actually make things worse if you’re not careful as you copy paste and make changes between all your files. So week two, it should take anywhere from I think three to eight hours to complete the week to milestone, it really depends on how familiar you are and how comfortable you are copy pasting and modifying code very quickly.

Week Three, which ends on Valentine’s day of February 14, we’re going to cover unit testing and documentation. And so for the second restaurant milestone, we’re going to add unit tests to our code. The unit tests are quite large. For my model solution, it took anywhere from 3500 to 4000 lines of code in the unit test files, which is a good rule of thumb, generally you think you’re going to have anywhere from two to five times as much code in your unit tests as you do in your code itself. And so all told, you end up writing at least 423 individual unit tests. However, a lot of those are repeats, you can reuse the same unit tests between files, maybe with small changes, and it’s a good chance to catch errors. I actually caught about a half dozen errors in my model solution for milestone one, by writing unit tests for milestone two, which shows that it’s really important to write these unit tests and how easily they can catch errors.

And then week four, and week five, which is the end of February, we’re going to cover inheritance and polymorphism. Again, this time, we’re going to go really deep into that and build interfaces and abstract classes for our restaurants. I have not finished writing that milestone yet. But hopefully by next week’s announcements video, I’ll have a little bit better idea of the scope of that milestone, I’m estimating that it’s going to be about 1000 lines of new code, but you’ll have to go through and change a lot of your existing code. So you may end up touching several 1000 lines of code, but you’re probably only writing about 1000 lines of new code. That one there, the actual project needs are the actual tutorials and examples are going to be due on February 21. But I’m giving you an extra week to work on the project part for that. So the restaurant milestone will be due the end of February. And that’s also when you’ll have your second final project milestone. And that second final project milestone is building the class library for your final project. So you’ll be doing a lot of the same stuff in your final project as you did in the first three restaurant milestones. And that all hits the end of February. And that’s really where I’m at in terms of the solid course development. I’ve got outlines for a lot of the rest, and I will be sending that out as I get that developed over the next few weeks. But at least for the first month or so we’ve got a pretty solid idea of where we’re going in this course.

So after that we’re going to discuss the big topic we’re going to cover is graphical user interfaces or GUIs. So we can actually build interactive programs. For this, we’re going to build a point of sale system like an ordering menu system for the restaurant, we’re going to look at how to integrate external libraries in our code, how to work with web API’s both pull data from a web API, and maybe even write our own web API to accept online orders from another service. We’re going to look at serialization how do we save the data in our program in between program runs and things like that. So that’s where we’re really going for the rest of the semester.

Some advice, this is a four credit hour course, if you’re in computational core, the last four credit hour course you would have taken would be CC 210, or CIS 200. And so this is a larger scope than the 310 and 315 courses. And so because it’s four credit hours, you can expect to spend at least eight hours each week working on this course. So that’s more than an hour a day, and probably several stints of a couple hours each working on these projects. So I really encourage you upfront to schedule your time wisely and make sure you have enough time to work on these projects. The milestones come really, really fast. You know, it took me most of this weekend to get through the first two milestones in both Java and Python. And so I expect for students, it’s going to take several hours to work through those milestones the first time. With your homework. Start early, make sure you start as soon as you can, so you have enough time to ask questions. Because this is an online course you’re not going to see me live in person all the time, which means that questions may take anywhere from a couple hours to up to 24 hours to get a response from me, depending on how quickly I can get to those questions. So leave yourself enough time to ask questions. Take advantage of Office Hours, take advantage of the ability to send emails to me, we’ll see if we set up a discord channel. But really make sure you give yourself a lot of time to work on these as your copy pasting code between your different source files, make sure you do so very carefully. It’s very easy to introduce difficult to solve errors by copy pasting code without paying attention. So copy paste a little bit at a time, like individual methods, tweak that method, and then continue on until you get comfortable with that. And likewise, once you learn how to use Git, don’t be afraid to commit your code to get very often. That way, if you do break anything, it’s really easy to roll back to your previous git commit and you can start over again. So you don’t have to completely unroll any problems you’ve made. Finally, I encourage you to use your online resources wisely. Especially in this class. We reference a lot of the Java API standards, a lot of the Python API standards as well as the documentation for a lot of tools that we’re using. Feel free to reference those just make sure if you pull any code from those that you cite that code. And you should only be pulling little bits of code like how to perform a particular action in a unit test or how to perform a particular structure in your code. Make sure you cite those with a comment. So I know where you found that resource. And that way, there’s no question about plagiarism. So keep that in mind.

Other than that, that’s all I’ve got to share with this first week. If you have any questions, email me via the cc410-help email address. You can also schedule a time with me by finding my calendly link. It’s on the syllabus. It’s on the webpage. It’s also in every email you’ve ever received from me, it’s in the signature at the bottom, but I’m really rooting for you. I hope that you do well this semester, and I look forward to working with each of you as we go forward. So good luck.

Subsections of Spring '21 Week 1

Spring '21 Week 2

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week two announcements video for CC 410 in Spring 2021. So this week, you should be wrapping up module one and hello real world, the first example projects in this class, they were actually both due Sunday night. But if you haven’t gotten them completed, you can still turn them in right now, check the late policy in the syllabus for the exact details of the late policy. But you can still turn things in late for most of the points as long as you’re only there so late. Also, if you ran into any trouble doing the hello real world project, please email me and let me know so that we can work through that. As you’re aware, this is a brand new class. And so things may go wrong. And we’re still learning the best way to do some of these things. So don’t be afraid to reach out if you have trouble. And let me know so that we can get past that. Oh, and also the other big thing going on in Module One Don’t forget is each of you should be scheduling a meeting with me to discuss your final projects, you need to have that meeting done no later than February 7, which is next Sunday. Although bear in mind, I don’t usually meet with students on Saturday and Sunday. So you probably need to do that this week. But the whole point of this meeting is for me to briefly talk to you about ideas for your final project and just get a feel for where you’re at in the class. So far, since we don’t meet in person. Otherwise, this is a great way for me to at least meet one on one with you a few times throughout the semester and see how things are going.

So for this week, everything is due on February 7, you have the meeting again, for final project, part one, you’re going to be working on module two, where we talk a lot about object oriented programming, something that you’ve seen and worked with for several classes at this point. But we’re really going to dive deep into the theory and why it is the way it is. And so we’ll do an example project for that where you’ll actually build some open some object oriented programming classes. And then based on that example, you’re going to work on milestone one of the big restaurant project. And that is something you should probably start ASAP because that is not a small milestone, and we’ll talk about that here in just a minute.

So some updates this week, I sent out an email earlier to see if folks were interested in a discord channel, there were enough responses that I’m going to go ahead and set that up. So if you’d like to join the K state computer science Discord server, you are more than welcome. The easiest way to get there is to go to this website, discord bot.cs ksu.edu. It will have you sign in with your case ad ID. And with your discord user account. If you don’t have a discord user account, you’ll need to create one first. And then it will invite your discord user to the server. And once that’s done, you can go to discord open up your discord account, and you should now see the computer science server in your list of servers, it’s a great way for us to keep track of it. So feel free to go there. If you look over on the left side under classes, there is a class channel for CC 410. If you type in there, you can ask me and I will usually respond pretty quickly if I’m at my computer. But of course bear in mind, this is not the official support channel for this class. So if you have a question, and it’s not answered on discord quick enough, make sure you email it to cc410-help, I guarantee that those will be responded within one business day. So make sure you do that. for grading in this class, something to be aware of there are rubrics on canvas. There’s also rubrics and all the assignments. And so you kind of know how much each of each part of the assignment is worth. Generally when I grade, I will put the points in Canvas. And I may put small comments in Canvas. But when we’re grading code assignments, I’m probably going to also leave code comments in GitHub on that feedback pull request that you’ll get an email about whenever you set up a Git repo. So keep an eye out for that. If you’re not sure how to find those, let me know and I’d be happy to walk through that with you. Other than that, I think things are going so far so good. I haven’t heard too many issues in this class. Although we are a very small group. I think there’s only four students actively working on this class right now. So if you have any comments or feedback or things that are going well, or things that aren’t going well, please let me know. It’s it’s something that’s really hard as an instructor, teaching an online class that’s brand new is getting that instant feedback from students, it’s really up to you to reach out to me, and let me know what’s going well and what’s not. So feel free to provide any feedback.

For this week, you’ll be working on the first milestone of the restaurant project. Throughout this semester, we’re going to build on a single project the restaurant project, we’re building a point of sale for a fictional restaurant. And so the first milestone is a lot of the baseline packages and classes we need for the menu. The restaurant I think has seven entrees, four sides and five drinks. So you’re going to have quite a few menu items that you’re you’ll have to keep track of. The first milestone is a lot of boilerplate code. It’s creating a class for each one of those creating the attributes creating the getters and setters and some of the other methods. And so the best thing I can say for the first milestone is work on the most complex item, which I think is the sandwich called the Riker. And then once you have that figured out a lot of that code, you can copy Paste carefully into other files and adapt slightly and make those work. For this first milestone, the only thing we’re grading you on is your class structure itself. We’re not looking at style and documentation. However, you can make things a lot easier on yourself. Now by thinking about style and documentation, maybe including some documentation, comments, maybe running the style checker a few times to make sure you’re not completely out of it. You know, if you get your style right on a file before you copy paste the code, it’s a lot easier than having to go back and fix it later. I estimate for most students, this milestone will take anywhere from three to eight hours depending on how comfortable you are with the tools. And with the coding process we’re going through, I was able to do it in a couple hours myself, it wasn’t too bad, but it is a lot of copy, paste. So make sure you keep an eye out for that. And this project is going to feel significantly larger than any project you’ve done up to this point, most likely, I estimate that this project requires anywhere from 1500 to 2500 lines of code, depending on how you write your code and how much documentation you include. Thinking back to CC 310, and 315. Most of those projects were 1000 lines or less maybe. So this one’s going to feel quite a bit larger. You have a whole week to work on this. It’s due Sunday night at midnight. Feedback is very welcome. I’m trying to get a feel for the scope of this course. I’m very confident that I think each of you can achieve this milestone in a week. But it’s something that you’ll want to do a little bit of time. It’s not something you can start on Sunday and expect to get done on Sunday, that’s going to be pushing it. It’s not to say it can’t be done. But I don’t recommend it, I would much prefer you start on this and work maybe an hour a day or something on it just to prevent you from getting burnt out as you get toward the end. So that’s something keep in mind. But please let me know if you have any comments or feedback on this milestone, I’m really curious to see how how well this goes and whether I need to adjust either due dates or expectations or things like that to fit with the class.

So looking ahead after module two, the week after that will be Module Three, we’ll talk more about documentation and unit testing. And then your milestone for that week will be to add unit tests to your project which again is a really, really big milestone. module four, we’ll discuss inheritance and polymorphism. And then for that project, we will go back in and refactor our code to add some inheritance and polymorphism to it. And in module five, we’ll talk about debugging. We’ll also talk about the second final project milestone. And as a quick heads up module four, module five are going to blend into each other. I think what we’re going to do for module four and five is do a lot of the introductory stuff on week four, and then the actual inheritance milestone and some example projects and the final project meaning we’ll all be on week five. So modules four and five will kind of blend out. But that gets us all the way through the end of February. And then starting in the March and April we will work on GUIs, Web API’s etc. I spent most of this weekend writing some demo projects for the GUIs that I think we’re going to create in this class. So I will know more about that project here in the next week or so. But that’s what I’m iterating on right now. That’s really all I’ve got for today. If you have any questions, comments, concerns, anything like that, feel free to reach out to me at the c410-help email address. You can also find me on discord if you join the discord server. I’m always here to help just let me know what I can do otherwise Good luck this week and I hope to hear from you all soon.

Subsections of Spring '21 Week 2

Spring '21 Week 3

YouTube Video

Resources

Edited Transcript

Good morning, and welcome to the week three announcements video for CC 410 in spring 2021, this has been a busy second week of the class. But hopefully at this point you should be, you should have already met with me for your final project milestone one where we discuss some ideas for your final project. I believe I’ve covered almost everybody in this class at this point. But if you have any questions about final project anytime, feel free to schedule a meeting with me or shoot me an email or catch me on Discord. And I’d be happy to chat with you about that. You should have also completed the second module in this class, which is a deep dive into object oriented programming. We did a short example on object oriented programming. And then you should have started working on the first milestone of the restaurant project. And so in that milestone, you’ll create a whole bunch of object oriented classes. It’s about 1500 to 2500 lines of code. And hopefully you’ve got that done in submitted but if not, keep working on it and make sure you get it submitted earlier early this week. Remember that the late penalty in this class is 10% off per day that it’s late. So you can still keep on working on it and get a lot of the credit if you submit it either today or tomorrow. So make sure you keep working on that.

Coming up this week, we’re going to have three different little modules on documentation, unit testing and UML diagrams. And so there’s three little example modules that you work on. There’s three little tutorial modules that you work through. And then there’s one example project on mostly testing, but it covers a little bit of documentation as well. Specifically, you’ll make a UML class diagram as part of that example. And then you’ll work on the second milestone of the restaurant project. This one is where we add unit tests and code documentation to our restaurant project. And so it can be very substantial. At the end of that project, I estimate that you’ll have anywhere from 3500 to 4000 lines of code in your project. So it is a significantly large chunk. But the nice thing is you can repeat a lot of that code. So some quick updates, I did create a channel on discord for this class. So feel free to go check it out. I’ve seen most of the students there at least once so make sure if you have any questions, you can post there and you might be able to get a response from me pretty quickly. If you don’t hear back from me or you want to make sure you get a response, you can always also email your question to the cc410-help email address, I guarantee that I will respond to those within one business day. for grading, don’t forget that the rubric itself will be found on canvas. And so you’ll find your point values on canvas. But a lot of the code itself, I will review via GitHub. And so you might find code comments in that feedback, pull requests that every GitHub repo has for GitHub classrooms. So feel free to look at that. If you don’t find that or you’re not sure where that is, let me know. And I’d be happy to help you find that inside of GitHub. Otherwise, I think so far, so good. I haven’t heard any major issues in the class yet. I’m very curious to see how my milestone one on the restaurant project went. I’ll be looking at those later today and getting those gradients. So hopefully, you’ll get some good feedback for me in the next couple of days on that.

So talking a little bit about milestone two, in milestone two, you’ll be writing unit tests. My sample solution for this has around 423 individual unit tests that I wrote, which is a very staggering number of unit tests, I will admit, you also need to write documentation comments for everything to the point where it passes either the Java check style or the Python flake style checker. Your documentation comments for your actual source code in the source directory should be pretty complete. In the test directory, they can be a little bit more incomplete. mainly just talking about what the unit test does, they don’t have to be too descriptive. But that way, you have a little bit of a note of what each unit test and each unit test class does. Also, don’t forget, it’s kind of buried in the requirements. But you do need to create a UML class diagram for this milestone. So make sure you create that and store that in the root of your Git directory somewhere. Next, your README file where I can find it. Again, like I said, this is going to be 3500 to 4000 lines of code. In any feedback you have is welcome. Let me know if this feels a little bit too big or too redundant or if there are other things that I can do to help clarify or simplify this project a little bit.

One thing I want to talk about, though, real quickly is hints for milestone two. These are all in the milestone document itself, but I wanted to cover them really quickly in this video. First and foremost, when you’re writing your unit tests, do not look at the source code that you wrote for milestone one, go back and look at the requirements from milestone one and make sure that your unit tests actually test those requirements. Basically, you want to test what you should have written not what you actually wrote. In fact, in in practice, you might actually do this backwards where you write the unit tests first following test driven development, and then you write the source code. But it’s really important that you don’t look at your source code while you’re writing these unit tests. For example, in my first model solution for milestone one, I went through and wrote unit tests for milestone two and I found no less than six errors in my own model solution for milestone one. So It is very important that you catch and find those errors using your unit tests. The second thing I will say is use global attributes in your unit test classes to help make copy pasting a little bit easier. I’ll show you an example of what that looks like on the next slide here. Also, don’t be afraid to try and generalize things. For example, if you need to check all the condiments, you can, in your global attributes have a list of what the condiments should be. And then in your unit test, you basically have an if statement that says if the condiment is in the list of condiments that should be there, you check to see if it’s there, or else you check to see if it’s not there. And so that way, in one unit test, you can cover all eight condiments. However, the ingredients do become tricky, it is possible to generalize the ingredients like ham and cheese and sausage and bacon. But you have to do that using either Java reflection or meta programming in Python, it gets very, very complicated, I didn’t even try and do this for my model solutions. It can be done, but I really don’t recommend it. Instead, I would just explicitly write the unit tests for all the different ingredients like ham and cheese and sausage, it gets a little repetitive. But it’s much simpler than trying to do the meta programming or the reflection tricks needed to actually look up an attribute by name instead of one that’s stored in a list or a dictionary. And finally, don’t forget to look at parameterize tests, you can parameterize your tests based on enums. In the document, I gave a link for how to find that for each language. So make sure you do that. But anytime you’re writing a test across all of the different enums, like bread types, or sizes or condiments, there’s usually a way that you can parameterize that down to a single test. So keep that in mind.

So when I’m talking about generalized tests, this is what I’m talking about. These are snippets of code actually taken from my model solution. So congratulations, I’m giving you a couple of freebies here. But basically what I’ve done in my test class, at the very top of the class, I define a whole bunch of global attributes things for like the price and the calories. And the you could do this for the different sizes for sides and drinks, you could list all of the condiments that are expected on an item, things like that, the default bread type, the default size. And so I have all these lists at the top, and then toward the bottom. In my unit tests, I just refer to those attributes when I’m testing. So if I test that the price is correct, instead of having the price typed in in that unit test, I just assert that the price I get from the item is the price value that I have the top of my class. And so in that way, I can copy paste large chunks of this class. And the only thing I have to change are the items at the top, I go back to the menu, I change the price, the calories, the condiments, whatever. And then I can use the same test code in multiple places. So this is a really smart way to make this project a little bit simpler. So be thinking about ways that you can quickly generalize your tests and make it a little easier to copy paste code between the different objects.

So looking ahead real quick. This is module three, covering unit testing and documentation. Next week, we’ll cover module four, which has a lot of inheritance. Then we’ll have module five, which covers debugging and it also is the second final project milestone. So you’ve got about three weeks to work on your final project and be thinking about classes and inheritance and things like that. module four will be due next week, module five, and the final project two will be due all the way at the end of February. So keep that in mind. And then we’re going to move into graphical user interfaces or GUIs. And so I’m hoping to post module six later this week, and possibly also module seven, which will cover GUI design basics and Event Driven Programming. And then as we go further in the class, we’ll do some more work with GUIs. We’ll also look at Web API as possibly serialization, all sorts of different ways that we can reuse our project code.

So that’s all I’ve got for this week. You’ll be basically feeling like a test printer writing all these unit tests this week. So I hope that you enjoyed this project. As always, if you have any questions, feel free to let me know via cc410-help or on Discord. Otherwise I look forward to hearing from you and good luck this week.

Subsections of Spring '21 Week 3

Spring '21 Week 4

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week 4 announcements video for CC 410 in spring 2021. So you should be wrapping up at this point all of the stuff for module three, which is the documentation, testing and UML module. It’s one of the larger modules in terms of tutorial content. And also in terms of the actual final project, or the restaurant project content, writing unit tests is a lot of code. And so hopefully at this point, you should be turning that in, I just checked this morning, and it looks like most everybody has turned that in. So that’s really great. So keep up the good work there. This week, we’re going into kind of a weird two week period where we don’t exactly have a restaurant project due this week. But we have a lot of stuff due next week. So make sure you pay close attention to both module four, and five, because they kind of mix together.

So this week with module four, we’ve got a tutorial on inheritance and polymorphism. It’s a topic we’ve covered a couple of times before in this curriculum. But this time, we’re going to go really deeply into why it works and the way it works and things like that. And then we’ll do a small example project. That example project is the example you’ll need for the third restaurant milestone. So as soon as you’ve completed that example, you can start working on the third restaurant milestone, which is actually listed as part of module five, which we’ll get to in just a second. The other two things in module four, there is a start stop continue survey, that’s just a quick chance for you to tell me if there’s anything I’m doing this class that you’d like me to stop doing, if there’s something you’d like me to start doing with this class, or if there’s something I do that you’d like, and you want to make sure I continue doing that. This survey will be open throughout the semester, so you can fill it out any time. It is anonymous. So unless you put something identifiable in Qualtrics, I won’t know who you are. But it does send me an email as soon as somebody fills that out. And I will do the best I can to take all of that feedback into consideration as we continue to work on this course throughout the class. Some other things that you can do this week, you can start spending some time on the final project. Basically, we only have these two weeks, we only have one milestone due. So it gives you some extra time to work on your final project.

Because when we get to next week, module five, and I really encourage you to finish module four very quickly this week. So you can get on to module five, because there’s a lot of things going on in module five. In module five, we have two tutorials, we have one on debugging and logging, and one on lambda expressions that are both pretty short, they shouldn’t be too bad. We do an example project on debugging and logging. But it doesn’t actually impact your ability to work on the restaurant project, you’re not required to do any logging in the restaurant project. However debugging might be helpful depending on what you’re working on. And so the end of next week, February the 28th. About two weeks from today, you’ve got the third restaurant milestone, which is adding inheritance and polymorphism and refactoring some of your code. And this is the final milestone for the class library part of the project. And then also, we’re going to have our second final project meeting sometime next week, just to see where you’re at on the final project. So hopefully between these next two weeks, you can spend some time on the third restaurant milestone, which is not as big as the second one. And then you can also spend some time working on the final project. So you’ve got some stuff to report for the final project meeting. Like this vision for the final project is that by this by end of next week, you’ll have some classes built. But depending on what your final project is, you might be setting up the framework you’re building, you might be working in a game engine. And so as long as you’ve got something reasonably interesting to show for your second final project meeting, that’s really what I’m shooting for, I just want to make sure that you’re continuing to work on that project throughout the semester, instead of just saving until the end of April, like a lot of classes.

So for milestone three, like I talked about, this is the first milestone that requires all of the general requirements we learned in the Hello World project. So this is the first one we’re we’re enforcing the style requirements. So make sure all of your code passes a style check. In this milestone, you’re going to be adding inheritance to the modules, you’re going to be adding some base classes and interfaces, things like that. And so once you add that inheritance, you’re going to have to go through and refactor all of your existing classes. To take advantage of that. You’ll also need to update and add some new unit tests. I believe after this milestone, you should have 526 unit tests. So there’s about 100 new unit tests that get added. You’ll also need to update the UML diagram. So make sure you don’t forget to do that. In this milestone, my code was about 1000 new lines of code and about 500 lines of code that were removed because they were redundant. So it’s actually not that big of a project when you get down to it. But it is kind of complex to get all of this inheritance working correctly and get all of the code refactor. And as always, Your feedback is welcome.

So some hints for milestone three. The biggest hint I can give you is work in small chunks, try and do one little part get it to work. And then use Git to commit early and commit often make sure you’re constantly committing as you get stuff working. That way, as you work on the next chunk. If something else doesn’t work, you can roll back to that previous commit. There’s lots of good instructions online for how to do that. But try and work in small parts. This milestone is also a great chance to try test driven development. If you want, you could go into the unit tests and add the unit tests that are needed first, and then work on writing your code to pass those unit tests. That would be something that’s really interesting that you could work on in this project. It’s not explicitly required in the requirements. But I do really recommend once you write the order item interface, that you go ahead and inherit order item on your base on tray side and drink classes. Instead of inherit. Instead of inheriting that interface directly on each of the entrees, drinks and sides. It does make your code a little bit more complex in the base classes. But it does make the rest of the code a lot simpler. And I’ve got a little blurb in green on the milestone itself that discusses this. But if you have questions on it, let me know. One of the big things for this milestone is going to be syntax there are especially in Python, there are a few instances where syntax gets a little crazy working with interfaces. And as best I could, I tried to model all of that in the example project for inheritance. But if you get to a situation where you’re like, I think this looks right, but the syntax it keeps complaining on it. Feel free to post in discord or let me know via email at the cc410-help email address, and I would be happy to try and help you figure that out.

So looking ahead as before, these next two weeks, we’re working on module four and module five, like I said, they’re kind of mixed together. So don’t wait till the end of this week to do module four, because then you’ll feel a little bit behind when you get to module five. module four, and five are all together, you’ll have a restaurant milestone and a final project milestone at the end of that two week sprint. And then once we get into March, we’ll start working on our graphical user interfaces or GUIs. And so module six is GUI basics. Module seven is Event Driven Programming, making your GUIs actually interactive. And then from there, we’ll work on some other GUI topics. We’ll work on web API’s, etc. As we go toward the end of the class.

So that’s all I got. I hope you enjoyed your Presidents Day weekend. Unfortunately, we don’t get Presidents Day itself off. Hopefully you’re staying warm out there. You can see today I’m wearing my hoodie because it’s cold everywhere. But as always if you have any questions please feel free to contact me on discord or via the cc410-help email address. I’m always happy to help and good luck this week.

Subsections of Spring '21 Week 4

Spring '21 Week 5

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week five announcements video for CC 410 in spring 2021. So this week we’re wrapping up the second week working on modules four, and five. So hopefully by now you’ve turned in the stuff on inheritance and polymorphism along with the example that gives you a good idea of what you’re doing in milestone three. There’s also some other things you can do right now, the start-stop-continue survey, which is really good chance to give me feedback, if there’s anything you’d like me to start doing in this class or make sure I continue doing or if there’s anything that I’m doing that you’d prefer that I stopped doing. These are all examples of things that you can tell me about. That just helps me build this class in a way that’s really useful for students. And I’m hoping that you can spend some time this week and next week working on your final project. And then hopefully each of you meet with me sometime this coming week. So that we can talk about your final project and see how things are going so far.

For this week, there are a couple more tutorials on debugging and logging and lambda expressions. These are things that we’re not necessarily going to build into our projects at all. But it’s really cool stuff that you’ll see a little bit and it might be very useful for you. But the big thing we’ll be doing this week is spending a lot of time working on your restaurant milestones. So milestone three is due at the end of this week. And again, hopefully, we’ll be doing some time working on the final project, thinking about it doing some design work, and then scheduling a meeting to meet with me and discuss the final project.

So quick reminders about milestone three, this is the first one where we are enforcing all of the general requirements. So all the style documentation unit testing requirements. So far, it seems like everybody has been doing a good job taking care of the style requirement in the background anyway. So I don’t think that will be too difficult. The biggest thing you’ll be doing is adding some inheritance to this project refactoring some of your classes, updating some unit tests and then updating the UML diagram to match. This one is about 1500 lines of code. I think it was about 1000 new and maybe 500 lines of code that I actually removed from my model solution when I did this. And as always, feedback is welcome. So if you have any questions or comments about the milestone, please let me know.

Some quick hints for working with milestone three. work in small chunks, this is probably one of the biggest project milestones were working in small chunks is important. Try and make one little change committed, see if it works, make another little change committed, see if it works. So commit early commit often that way, if you do have any problems, you can roll back in get, and you can get back to a previously working state. This is also a good chance to try test driven development, you can actually go in and write the unit tests first, and see which ones fail and then go through and modify your code until they all pass again. In the instructions, I’m not very clear, you can actually inherit the order item interface either on each individual class or I recommend inheriting it on the base classes, the entree drink inside base classes, which will then be carried forward on those classes that are inherited by all of your entrees, drinks and sides. The other big thing is make sure if you have any questions on syntax in here, there are some strange things, especially in Python for how you do abstract classes that are also using properties. So if you have any questions on the particular syntax of that, let me know I do have a working model solution that I can refer to. So I can help you get past those if you run into that.

Looking ahead, like I’ve said for a couple weeks now, once we get past this week, the next module will be on GUIs. So we’ll be building a graphical user interface for our program. So module six is all about just scaffolding the GUI making it look like you want getting the interaction between the screens. And then module seven, which is the project I’ve been working on this week is Event Driven Programming, actually building the button handlers and things for your GUI so that you can create orders and populate a list of items in an order. Then module eight, which is the model solution, part I’m going to work on this week is going to be on design patterns and combos, we want to actually be able to create a combo meal in our interface. And it actually turns out that that is an interesting structural change to look at. So that’s something I’m going to be working on. And you’ll be doing that in module eight, about three or four weeks from now. Module nine, the plan is to work on an external library, I’m going to try and get or build a library that references a cash drawer. So we can see what working with external libraries looks like. Those four modules will probably be the next big chunk of the class. And then like this week, we’ll have a week after that, where we will take some time working on the final project. And then going forward as we get to Module 10. and beyond. We’ll start talking about web API’s and some other ways we can expand our project out.

So that’s all I got for this week. It’s a pretty short week because there’s not a whole lot that’s new going on. Hopefully you all survived the cold weather that was the this past week. I know it was really rough here in Kansas City. Thankfully, we didn’t lose power but a lot of my family I have some family down in Texas who did lose power. So I hope you’re all doing well. I hope you’re all staying safe. staying warm. If you have any questions or concerns please feel free to contact me any time either via either via the cc410-help email address or via Discord. I’m always here to help. Otherwise Good luck this week and I will see you next week.

Subsections of Spring '21 Week 5

Update to Example 5 Python

It appears that I missed an interesting error when developing Example 5 for Python. It is a bit complex, so I’m relying on the advanced formatting of this webpage to help explain it better than I can via email or in a short post to the class. I’ll start with a short version, and then include a longer discussion of the problem and how I came to a solution that I feel is very helpful reading for anyone learning to program and solve these issues in their own work.

tl;dr - The Short Version

Currently pytest has a bug that causes errors when logging to sys.stderr when running code inside of pytest.

As best I can tell, pytest tries to capture all output being printed to sys.stderr by redirecting it to a buffer (a virtual file) when running the tests. Once it is done, it will close the buffer and redirect output back to sys.stderr. Unfortunately, our logger does not realize this, and it may continue to try and write data to the buffer that is now closed, resulting in the ValueError: I/O operation on closed file error message seen in the output.

There are several methods to determine if code is running under pytest and disable logging in that case.

I recommend this method:

import sys

# get the root logger
logger = logging.getLogger()
# disable if pytest is running
if "pytest" in sys.modules:
    logger.disabled = True

You will need to add this code to any file that you add logging to, in order to prevent errors from pytest. Alternatively, you can disable the handler that prints to sys.stderr and instead just use a file handler.

The Long Version

Since this is an advanced programming course, I figure that it is worth a bit of a “deep dive” into this situation so you can understand what I found, the efforts I went through to solve it, and how things are really working behind the scenes.

This is a bit of cognitive apprenticeship, where I attempt to show you my thought processes and how I go about solving a problem like this. My hope is that you’ll be able to learn from this process and possibly use this knowledge to help you solve your own problems in the future.

Unfortunately, in the world of higher education, we spend way too much time focusing on narrowly-scoped, previously-solved problems, to allow you to learn in an environment where we know a solution is possible in a set amount of time. In the real world, however, you’ll be constantly presented with broadly-scoped, open-ended problems like this one, where you’ll have to do some exploration to find possible causes and solutions, and then use your own background and knowledge to determine what solutions, if any, are available.

So, here goes.

The Error

When you run pytest in Example 5 after adding some logging code as directed in the video, you will see many pages of errors printed to the terminal. In my testing, the terminal in Codio printed errors for several minutes before finally stopping. A screenshot of a small portion of those errors is below.

Errors Errors

When this happens, you may be able to use CTRL + C to stop the output, but in many cases I simply had to close the terminal tab in Codio.

What Happened

When I developed this example, I focused on the debugging portion first, and then later added the logging code. However, I neglected to run pytest after adding the logging code to my model solution, and did not encounter this error in my initial testing. That was an oversight on my part.

As you work on this project, you may end up adding the logging code first while still working on debugging the errors in the project. In that case, you will most likely run tox or pytest to run the unit tests contained in the project with the logging code in place. That will cause the error to appear. As soon as I ran tox in my existing model solution, my code presented this error.

How I solved the problem

The process of finding a solution for this problem went in three phases.

Phase 1 - Searching

First, I attempted to Google some of the error message and a few things that I suspected were at play. I already had a hunch that the error itself was coming from the logging code, since I had added that to my model solution last. After reproducing the bug in my solution, I set out to solve it. Some Google search phrases I used:

  1. pytest logging stderr write to closed file - Including keywords pytest and logging as well as the stderr stream and a bit of the error message.
  2. pytest stream.write(msg) I/O operation on closed file - adding more details such as the line of code causing the error and the exact error messages.
  3. "pytest" stream.write(msg) I/O operation on closed file - putting "pytest" in quotes will find results that always include that keyword

There were others, but this was the most fruitful.

Phase 2 - Isolate the Error

In several of those searches, I came across a few bug reports on GitHub, specifically within the pytest project’s repository. Bug reports and discussions on GitHub are usually very fruitful when looking for technical errors that include code and error messages, so I looked into a few of them.

  1. ValueError: I/O Operation on closed file (#14) - this was the first one I found. However, I quickly ruled it out, as it was first posted in 2010 and mainly seemed to use Python 2 instead of Python 3. After scrolling through the discussion, nothing really seemed to fit the situation I was in, so I ignored it and moved on. However, it did reference the next issue…
  2. Improve error message when tests use closed stdout/stderr (capture) (#5743) - this one felt like it was a bit closer. In this report, they discuss the fact that pytest will redirect and close system streams such as sys.stderr as part of the test. It was also much more recent, and some of the error messages they were running into were similar to what I was seeing.
  3. pytest 4.5 floods the output with logging errors when logging from atexit handlers (#5282) - similar to the one above, this one was getting closer to the issue I was seeing, though it wasn’t an exact match. By reading these three thread, I was starting to get a feel for the crux of the error - if our logger is trying to write to any of the output streams, like sys.stderr or sys.stdout, then most likely pytest would interfere with that and cause this error. Thankfully, the last two issues both referenced this issue…
  4. pytest capture logging error still happening (#5502) - this report had a lot of discussion on it, but pretty much sealed the deal for me. One of the core pytest developers posted a message that included this text:

What I believe is happening is:

  1. pytest changes sys.stdout and sys.stderr to a buffer while importing test modules.
  2. If there’s user code setting up logging and/or creating a logging.StreamHandler at the import level, it will attach itself to pytest’s buffer.
  3. When pytest is about to finish the test session, it will restore sys.stdout and sys.stderr to the original values, and close the “capture” buffer.
  4. Here the problem happens: if any message is emitted at this point, the StreamHandler will try to attach itself to the buffer, hence the error.

So, we’ve now found what we suspect is the error. All we have to do is figure out how to resolve it.

Phase 3 - The Fix

Unfortunately, issue #5502 is still open as of this writing, so we needed a way to get around this error. With some quick testing, I was able to confirm the error went away if I removed the StreamHandler from the existing logging code. So, I decided that the best way to deal with this was to find some way to disable logging while the code is running as part of a unit test. This is a somewhat common, though discouraged, trick in programming. Ideally you don’t want to hide any code from the unit tests, but in some instances you want to make sure that the unit tests don’t actually change live data, such as the actual database used by this program. So, you can “protect” the code that connects to the database and make sure it cannot run as part of a unit test.

A quick Google search for determine if code is running under pytest python quickly lead me to a StackOverflow post discussing this very issue. Great! I had quickly found a pretty good resource that might lead me to a solution.

Within the discussion, there are a few solutions suggested, and helpfully ranked by the upvotes from other users.

  1. Solution 1 - simply check if "pytest" in sys.modules: since the pytest application will always be loaded when running a test. This solution seemed pretty simple and didn’t have many obvious side effects, provided your application didn’t load pytest as part of its normal execution.
  2. Solution 2 - a solution that points to a section of the pytest Manual that shows the preferred way of doing this. In short, we place some code in the conftest.py file, which is only executed as part of a unit test, to update a value in our code, and then check that value where needed. This looks promising, and is probably the correct answer that would work in all cases, but also requires significantly more code and adds a structural dependency between our code and the conftest.py file.
  3. Solution 3 - a third solution suggests checking for the existence of the PYTEST_CURRENT_TEST environment variable, which is set when pytest is running. This may also work, but has the side effect of being outside of our control - any other application on our system could also set that variable, including another instance of pytest, so it may not work as reliably as the other two.

In the end, I chose Solution 1, and updated the code at the top of my main() method in TicTacToe.py to the following:

import sys

# get the root logger
logger = logging.getLogger()
# disable if pytest is running
if "pytest" in sys.modules:
    logger.disabled = True

That code will simply load the logger, and immediately check if the "pytest" module is loaded. If so, it will disable the logger globally in my program.

An alternative solution would be to just disable the StreamHandler and allow the FileHandler to remain enabled, but I felt that logging from unit tests is not helpful and chose to disable it entirely.

Summary

I hope this discussion is helpful - I’ve found that sometimes the best opportunities for cognitive apprenticeship happen directly as a result of the class, so I wanted to take this chance and share a bit of my own problem solving process here.

If you have any follow up questions about this, please let me know!

Spring '21 Week 6

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week six enhancements video for CC 410 in Spring 2021. We’re over a third of the way through the semester at this point. So hopefully should be wrapping up the stuff from last week, which was on debugging and logging and lambda expressions. There was also a restaurant milestone, this is the last of the data part of the restaurant milestone before we move into the GUI part. And also, I think each of you should have met with me for the final project. So looks like everyone’s final projects are going really well. But feel free to meet with me throughout the semester if you have questions. Otherwise, we’ll have our next final project milestone toward the end of March.

So this week, we have a pretty light week where we will basically be going over the basics of building a GUI or graphical user interface for our program. And so all you’re really going to be doing is exploring that example. And then working on your next restaurant milestone, which is building a GUI outline or a basic GUI for your restaurant. And so in this milestone, basically all you’re going to be doing is creating the overall GUI structure of your restaurant project. So all of the different panels, the buttons, the things that you’re going to need, the only thing we’re really going to build that actually works is the ability to click buttons and switch between panels. That just makes it easy. So you can build all the different panels that you need. And then next week, we’ll actually do Event Driven Programming, where we will wire up the rest of the GUI and make it all functional. In my example, I’m going to build on the Starfleet treats that we did way back earlier this semester. And one of the examples, we’re going to build upon that and build a simple GUI structure. The one thing I want to make very clear is I give one possible structure for the GUI. That doesn’t mean that you have to follow my example, this is just the one that I found to be the easiest to build and the one that made the most sense to me. But feel free to use your own design. If you want to customize your UI, make the buttons look different, make the layout different anything like that, it’s totally up to you, I’m going to show you the parts that you need to build the functionality. And then you’ll be able to work on the design and layout yourself. So feel free to get creative and do whatever you want on your UI as long as it kind of meets the basic requirements that we’re going for. Also, on the milestone at the bottom, I give some helpful hints for how you can automate some of the UI building process. for better for worse, building GUIs by hand is very repetitive. And it’s very, it’s a lot of repeated code. And so I’ll give you some quick shortcuts on how you can bypass some of that repeated code and simplify that a little bit. So I hope you find that very helpful for this milestone.

So looking ahead, like I said, after this week, the next week, we’re going to do on Event Driven Programming, where we will actually wire up the buttons and different things in our GUI, we’ll also add some unit tests to be able to verify that our graphical user interface is working correctly. Module eight is going to be on design patterns and combos. And in that module, we’ll also bring introduce unit test mocks, which allow us to fake some things in our unit test, which makes our unit tests a little bit easier for that part. And in module nine, we’ll work on bringing in an external library to handle our cash drawer and how we would actually do the checkout process. So those are really the next three modules. These four modules six through nine are going to be all GUI based modules. And then from there, we’ll have modules 10 through 12 or so that actually cover some other stuff like web API’s. So that’s where we’re going so far.

Otherwise, I think things are going well in this class we were through over a month at this point. The feedback seems pretty positive. But if you have any questions, concerns or anything I can do to change please let me know. Otherwise, keep rocking it out there and good luck this week and I will catch you next week.

Subsections of Spring '21 Week 6

Spring '21 Week 7

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the announcements video for CC 410 in spring 2021, for week seven. So some quick updates for this week I posted last week. But hopefully you all saw this I have moved all the course deadlines from Sundays to Mondays. Part of that is to give you a little bit more time to work on the projects. But also a lot of that is to give you the chance to work on the weekends, and then give me a chance to catch up with questions on Mondays. Unfortunately, the next few weekends are not going to be as available as I had planned. And so I wanted to make sure I give you ample time to ask questions and get a response for me before the projects are due. That said, it’s a really good idea if you can start on the projects before the weekend. That way, if you do run into any early questions, I can help solve those really quick. Hopefully the example videos do a pretty good job of getting you set up for the projects. But if not, feel free to ask questions, let me know things that I can clarify. So as far as content, I just released module seven on Canvas, I’ve got module eight on deck, I’m just waiting for the example videos for module eight, and then it will be released. And then I’ve got modules nine and 10 written I’m just waiting on finishing the examples and getting all the videos recorded in modules nine and 10 will be kind of the last modules of this chunk of the class, they’ll be very similar to what we did for weeks four and five, where there’ll be two weeks together. Also, I do realize I’m a week behind on grading. So I’m going to be doing a lot of grading probably today to get caught up on grading. So you should be a lot of see a lot of grades post to Canvas pretty quickly so I can get caught back up.

So this week, we’ve got two topics that we’re covering, we’re covering parallel programming, which describes a little bit about how we use threads and processes in our computers, I have to cover this topic because it leads into what we do next time, which is Event Driven Programming. With Event Driven Programming, we’re actually writing the events that work within our GUIs. And our GUI requires multiple threads. So I had to spend a little bit of time talking about parallel programming. The parallel programming example is not very complex, it should take half an hour or so. And then you’ll be able to do the example for Event Driven Programming after that.

For the milestone this week, milestone five, this is where we start doing events in our GUIs. And so this milestone you’re going to take the GUI that you developed last week where you have all the buttons, and you’re actually going to add a lot of the button click handlers to those buttons. We’re also going to refine the GUI structure a little bit. In my original example, I was intending to use a list in the sidebar, I realized as I was working on this milestone that that’s not going to work very well. So we’re going to go through and refine that to use a tree structure. Instead, I show you all the code how to do this in the example video for that project. So check out the example follow that code, you should be able to change it pretty quickly. Once you get done with this milestone, you should have a mostly functional GUI you can create orders you can customize items, you should be able to populate that sidebar with any order. And then in the next couple of milestones, we’ll look at actually building an order object, we’ll build a combo objects, and then the milestone after that we’ll actually integrate that into our GUI and finalize the project using checkouts. Do make sure you read the hints for this project. There are some hints at the bottom of the milestone of unit tests you might want to include and some different methods that will help you jump back and forth between different parts of your GUI. This is one of the milestones where it starts to get a little bit more complex where I give you a little bit less structure. And you have to figure out the structure yourself. For example, in one of your GUI panels, when you click the Save button, how do you actually get the item from that GUI panel into your sidebar panel, there are some things that you can do to make that happen. So this one starts to be a little bit more open ended. So if you’re not sure how to do something, feel free to ask and let me know. As with all of these I have written a full model solution. So I at least know that it does work and there is at least one way to do it. So if you get stuck, let me know.

One thing that we are running into with these projects as they get larger is testing issues. Especially if you’re taking the Java version of this class, you’ve probably seen me in some of the example videos get frustrated with Gradle. This is mainly due to the fact that the Codio boxes we’re using only have 512 megabytes of RAM and Gradle tries to use a lot more than that. So there are some things you can do to get around that. In Java, if you’re having trouble with Gradle if you do Gradle space dash dash stop from within your project directory that will stop all the running Gradle daemons. If you get any messages about stopped or hung daemons or anything like that you can stop those. You can also go through and restart the Codio box that is running your project. If you click the project menu and click Restart box, it will come up sometimes it takes 30 seconds or so to do that. And then after you do that refresh your web browser and everything should work a little bit better. But sometimes with Gradle if you see messages where the Gradle process crashes, just try it again and eventually it will go through in Python however We did discover that the pytest method that we’re using is very memory inefficient. And so the easiest way to get around that in Python is to run the tests in batches instead of running them all in one talk all at one time. So I show a new tox.ini file that you can use for Python that allows you to create batches for your tests. And actually, in the later milestones, we refine that even further because I continued to have this problem. But either way, you should be able to get around that absolute worst case, if you’re interested, it is possible to do these projects outside of Codio. The biggest benefit to that would be, you’d be able to work on your own machine and you’d have a lot more horsepower. The biggest downside is I wouldn’t be able to directly see your project in Codio so you’d have to commit your code to git and I can walk through it there. So if you’re interested in that, let me know, my eventual plan for CC 410 is to include a video toward the beginning of the semester explaining how to do that. I didn’t get to that this semester, but it’s something that I’d like to add in the future.

So looking ahead, as we’ve talked about module eight is going to be on design patterns and combos, I’m super excited about module eight, I’ve always wanted to teach design patterns. And so I think this is going to be a really interesting opportunity to see how that works. As part of that, we’re also going to look at test doubles. So test mocks and stubs and how we can make our unit tests a lot more efficient. Modules nine and 10, we’re going to deal with external libraries and how to create a release of our project. So by the end of module 10, you’ll know how to make a JAR file or a Python wheel file and how to actually make your project available as an external project for somebody else to use. So week 9 and 10 is going to be very similar to weeks four and five, where we have two things going on at the same time. So that’s something to keep in mind. And then of course after week 10 will go into things like web API’s and some external stuff. Mostly those restaurant milestones will start to be a little bit smaller, and it will start giving you a little bit more time to work toward your final project as we get toward the end of the class.

So other than that we’re very close to halfway through the class so I hope you’re enjoying things so far. If you have any questions, comments or concerns you can always contact me via via the cc410-help email address or on Discord I’m always happy to help. Otherwise, I look forward to seeing your GUIs when I start grading them today, and if you have any questions just let me know. Good luck.

Subsections of Spring '21 Week 7

Spring '21 Week 8

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the CC 410 video for week eight in spring 2021. So this point you should be wrapping up restaurant milestone five, which is where you add a lot of event based programming into your GUIs. And so hopefully it’s been going well, I realize I’m a little bit behind on grading, but I will be getting caught up this week, as we’ll talk about here in just a second because I have something to do this week.

This coming week, week eight, we’re going to be focusing on two really interesting topics. These are two of the topics I was really excited to teach in CC 410. Because a lot of students don’t see them this early in their curriculum. The first one we’re going to cover is design patterns. These are ways that we can structure programs in a way that is familiar to other developers. And I think it will really open your eyes to some of the ways that we can improve the code structure of our programs a little bit and make things a little bit easier to work with. I know for me, it was really enlightening when I really learned how to use design patterns correctly. So I hope you get the same result there. We’re also going to look at test doubles. Sometimes these are referred to as mocks or stubs or fakes. But there are ways that we can build unit tests that use fake objects instead of the real one so that we can control what we’re actually testing in our unit tests. And so to go along with that, we’re going to create a couple of classes in our restaurant called order and combo that we can use test doubles to actually mock the rest of the functionality and test just those two classes themselves. So we’ll have a short example where you’ll do some design patterns and work with some test mocks in a really quick little example projects. And then for restaurant milestone six, as we’ll talk about the second you’ll implement those orders and combos. One thing for me this week this week is the computer science educators conference is a virtual conference, but it’s every day from like noon to 8pm. And so because of that, I’m going to have some limited availability this week, mainly because I’m focused on keeping up on the conference. The nice thing is I can usually get grading done behind the scenes while I’m listening to the different conference presentations and interacting there. So I will be getting caught up on grading, but I won’t be doing a whole lot else this week. But I will do my best to keep up with email. So if you email me, you might get responses at weird hours as I try and catch up with email. But otherwise, I may have kind of limited availability this week.

So for milestone six, you’re going to be doing a couple of different things, the big thing you’re going to be doing is adding orders and combos into your restaurant projects. So those two classes allow us to exercise some design patterns, we’re going to go back into the data package a little bit and add some more features there. Specifically, we’re going to focus on a few of the design patterns that you’ll learn about this week, which are the factory method pattern, the builder pattern, the singleton pattern and the iterator pattern. And so you’ll build those two new classes, you’ll also build some quick adaptations so we can use them. And the main focus is on building those orders and combos and building all the unit tests to make sure that they work properly. This milestone has few changes to the UI, there’s just a couple of things I’ll have you add to set up for the next milestone, which is milestone seven. Milestone seven is a pretty large milestone, there’s two major parts to it. But it will be spread across two weeks, just like we did milestones, I think it was four, three and four. Early on, we spread one milestone over weeks three and four.

So we’re continuing to have some testing issues and Codio. If you’re using Java, you’re probably having Gradle die every once in a while, as I talked about before you can get it to work, you just have to restart the box, refresh the browser and try again several times, but it will eventually work. For Python, we found that the best method is to run these tests in batches. And so at the bottom of milestone six, I provided an updated tox.ini file that you can use for Python. If you really run into issues, I have started the work of taking these projects outside of Codio. I do have them set up on my desktop, I have my restaurant model solution set up in Windows subsystem for Linux, it seems to work really well. I think you could also do it without windows subsystem for Linux. If you have a Mac or if you run Linux, it should be really easy to install tools like Python and Gradle and Java, and do these tests outside of Codio. So if you’re interested in that, it’s something that I’ve intended to do and CC 410. But I do like the features of Codio, especially when I have to help with different questions that you have, I can go look through your code. But if you do run into big issues, let me know and I can help you pull these outside of Codio to run some of those tests.

So looking ahead, this is week eight. Next week, we’ll have week nine and week 10. We’re going to do those as combined. So there will be one milestone across week nine and week 10. But there will be two different lab modules that you’ll go through. Module nine will cover external libraries for you’ll add a library to represent a cash register for your projects that will be a lot of fun and that will be the major milestone is incorporating that cash register into your project and also incorporating the orders and combos that we built in the previous month. milestone module 10 is kind of a quick milestone where we’ll look at what it takes to actually actually package your project and make it available as a release. This is something we won’t actually do. But you’ll do it as part of an example just to see what that looks like. And then, of course, because this is one of those combined weeks, sometime before week 10, you’ll need to schedule a time to meet with me for your final project. Again, hopefully, by this time, your final project is starting to take shape, or at least you have a pretty solid idea of where you’re going. As we move into April, the milestones for the restaurant project should get a little bit smaller. And that’s supposed to give you more time to work on the final project as we go forward in April. So that by early May, you’ve got a pretty good final project that you’re ready to present. And then of course, as we go through April, like always, we’re going to talk about web API’s probably look at some serialization, things like that.

So as I said, we’re at week eight, we’re finally at the halfway mark of the semester, it’s going to be a very long semester, because we don’t have spring break this week. If we do reach a point where we feel like everybody’s getting a little overwhelmed, we can kind of back things off a little bit, but so far, I think everybody’s keeping up there’s just a small group, but if things are getting a little overwhelming, let me know and we can adjust things as needed. But otherwise, keep up the good work. Keep pushing at it, and we will see you next week.

Subsections of Spring '21 Week 8

Spring '21 Week 9

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week nine announcements video for CC 410 in spring 2021. So this week, I’m a little bit behind getting stuff post to the Canvas, but it will be posted shortly. I’m waiting on the last couple of videos to get rendered from our videographers. But this week, we’ll be starting on working with external libraries. And so we’ll learn about those external libraries we’ve been installing in our programs, how to use them. And then we’ll actually do an example working with an external library that I created. And so you’ll actually use that you’ll explore that a little bit and then we’ll take that into our project. This week is like week four, and five we did earlier where we will have weeks nine and 10, kind of combined together. And so this week is going to be pretty short. But hopefully, you’ll be able to start in on the content in week 10, because you have both a restaurant milestone and a file final project milestone due next week, we’ll also give you a chance to do the start-stop-continue survey again. So if there’s any feedback you have for me on things you’d like me to start doing in this class, the things you’d like to make sure I continue doing in this class or anything that I’m doing that you’d like me to stop doing, because it’s not useful to you. That survey is where you can let me know.

So next week will also be published very shortly. Hopefully it should be out later this afternoon. Next week is all about creating releases, we’re going to briefly talk about how to take the software you’ve written so far and package it up as a release, so that you can make it available to other people. This we won’t directly use in our software project. But it’s a really cool thing to have. But the big thing we’re working on next week would be the seventh milestone for the restaurant project. And then also the third final project milestone covering GUIs.

So for milestone seven in the restaurant project, there are really two parts to this milestone. The first part is to finish building the combos that you created in milestone six by actually building the GUI for that. And as part of the example, you’ll learn a little bit about how to build that in one of the example projects. So hopefully, you can adapt that into this project as well. So part one is mainly just getting the combos working, getting all the buttons out into the GUI, updating the sidebar panel, so it can handle combos, things like that. And then part two of milestone seven is checkout where you will use the external library I wrote to mimic a cash register. And so you’ll have users click the Checkout button, they’ll get to choose either cash or credit card. And then based on what they choose with credit cards, it’s pretty simple with cash, you have to accept an amount of cash from them and then calculate the correct amount of change. But in either case, you have to interface with the register library properly. Make sure you read the documentation for the register library very closely. I’ve also made the source code available to you. So you can look at that I’m not sure if I’m going to do that in future semesters or not. But this semester, you get to look at the source code. It has a lot of exceptions that it will throw so you have to do things in the right order in the right way. So make sure you read the documentation that I provide you for that register library to make sure you understand how it works. And then at the end, you’ll print a receipt. And you’ll write some unit tests that verify some of your functionality works correctly here. To go along with that for the final project milestone three. Hopefully by this point, you started doing some coding on your final project, you should have kind of an idea of what your class library might look like, you might have some sketches of your UI, or maybe even a framework for your GUI. But keep in mind, we’re now over halfway through the semester and things are gonna start getting really fast really quick. Once you get done with milestone seven, you’re going to have basically five weeks left to really work on your final project. It’s a 16 week semester, but you really have about five weeks to get to week 15. And then the 16th week is finals week, where you’ll be presenting and working on other stuff, you know the classes, so it speeds up really quickly once you get past this halfway point. So keep that in mind.

Looking ahead, I’m going to start working on module 11. This week, the next few modules are going to cover a web interface for our program, I don’t think we’re going to get as far as actually accepting orders via the web interface. But I will work with the menu and we’ll work on some web topics. Mainly this is to give you some of the skills you might need to take a project like this and actually make a web based interface for it instead of a traditional GUI interface for it. Because that’s really where a lot of the industry is going. So I think this is a really useful skill to have here in CC 410. The next few milestones for the restaurant project I’m thinking will be a little bit smaller. I’m trying to reduce the size of those milestones for this last chunk so that you’ll have a little bit more time to work on your final projects each week. So we’ll see how that balance comes out as I work on that module.

Other than that, we’ll be working on getting our applications onto the world wide web. So hopefully that’s exciting to you. As always, if you have any questions or concerns, feel free to let me know either via discord or via the cc410-help email address and I’d be happy to help you out. Otherwise, good luck with this double week working on milestone seven, the last big gooey milestone in the restaurant project. And hopefully we’ll get to the Web Project very shortly.

Subsections of Spring '21 Week 9

Spring '21 Week 10

YouTube Video

Resources

Edited Transcript

Hello and welcome to the CC 410 week 10 video for spring 2021. You’re working on a double week this week so this week is basically continuing the stuff that you’ve been doing for week nine and week 10. So this week you’re going to focus on releases where we actually take our software and package it into a release package that you could then share online you could upload to some of the package managers that we’ve seen. So you can do lots of cool stuff with that we’re not actually going to use it in our project but it’s a really cool tool to have in your back pocket.

But the big thing you’re working on this week is milestone seven for the restaurant where you’re building the checkout system and actually integrating the orders and combos that you built in milestone six. This is one of the larger milestones, but it’s one of the last big milestones for this project. Also this week you should be scheduling a final project meeting with me. Hopefully this time you’ve got some ideas for your final project you maybe got some code written down and you have an idea of where your path is going forward. We’re just about getting into April which means you’ve got one month and a little bit more than that to work on your final project over the next few weeks. We’ll still have a few more restaurant milestones, I’m shooting for probably either 10 or 11 milestones in total so there will be four, three or four more but you’ll have more time to work on your final project. These will be slightly smaller milestones than the ones you’re used to just to give you a little bit more time to work on your final project.

So we talked about milestone seven last time, so i’m not going to talk too much more on that. Big thing is getting the GUI for the combo created and then integrating the checkout portions using the external library that i gave. So hopefully this works really well. It’s very much an open ended milestone; there’s a lot of different ways you could accomplish this so if you have any questions on style or usage or anything like that feel free to ask me via the cc410-help email address or via Discord and I would be happy to help you out with those.

Looking ahead, I’m working on the next modules right now, probably later today I’m going to record the example for the module 11 which is going to be on web interfaces, and so the next milestone in the restaurant project will be building a simple web interface for the menu but it really starts to open your eyes to what you can do with web technologies in this project. But, like I said we’re going to have more few more milestones; there’ll be smaller than the previous ones for the restaurant project and the hope is to give you more time to work on your final project toward the first of May.

So that’s all I’ve got this week. If you have any questions you can always reach me via the cc410-help email address or on Discord. Otherwise, good luck on your milestones, I look forward to meeting you all this week for your final project and keep up the good work!

Subsections of Spring '21 Week 10

Spring '21 Week 11

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week 11 announcements video for CC 410 in spring 2021. We’re on week 11, which is starting the next set of restaurant milestones. And so this week, we’re transferring our focus from actual desktop GUIs to data driven websites. So this chapter, we’re going to introduce the World Wide Web, we’re going to talk about all sorts of different web technologies. And then you’re actually going to learn the basics of building your own website using the application that we’ve already been working on. And then for the milestone, we’re going to actually build a menu that is driven based on the data in our existing application. However, I want you to keep in mind this week is the start of the weeks leading up to your final project presentation. And so these milestones are meant to be a little bit smaller and give you a little bit more time to work on your final project. So set yourself a goal to work on your final project a few hours each week, so you can keep iterating on it and keep improving it as we go along.

So for milestone eight, we’re going to learn about how to build a data driven website. To do that, we’re going to install a web framework into our existing restaurant application. And then in that framework, we’ll set up some routes will set up a controller will set up a Master Layout template. And I’ll actually show you in the example how to load a template from bootstrap, which is a great place to get a lot of template and CSS content. And then you’ll set up the templates for those routes. And at the end, you’ll actually be able to build a data driven menu, a menu that is built entirely on the fly based on the classes that we built in our restaurant application.

Looking ahead the next module after this, we’re going to spend a little bit of time on getting data from the web browser. So we’ll talk about web forms. And we’ll use that to actually create a filter for our menu. We’re also going to look a little bit at serialization. And I’m still taking a look at web API’s. I haven’t come up with a great way to include that into this yet. But my goal is one of the last milestones will at least cover some of the basic information or web API’s, probably linked into the restful stuff that we’re going to do in the next milestone. As a reminder, like I said, these are meant to be smaller milestones, I’m hoping that they don’t take quite as much time as last few restaurant milestones have. However, if you’re not familiar with web programming, or HTML and CSS, it might be a little bit of a transition for you. Don’t worry too much about how your website looks. We’re mainly focused on the functionality. But if you want to spend time working on the looks just like you did with the GUI project, you’re welcome to do that. My goal for this class is for the last restaurant milestone, either milestone 10, or 11. Depending on how big I make the last couple. I have that due on May 3, which is the first day of dead week. And that basically gives you all of dead we can all finals week to wrap up your final project, have a couple of project meetings with me and then schedule and present your final project presentation as the wrap up in this course.

So that’s all I’ve got for this week. We’re getting into the world wide web. I hope this is exciting and interesting to you especially because a lot of applications today, you really see more and more applications being used directly on the web. And so I think it’s a really cool skill for anybody in programming to have. I hope these next few modules are really useful to you and interesting. As always, if you have any questions you can contact me on discord or via email at the cc410-help email address. Otherwise, I look forward to seeing your websites and good luck this week.

Subsections of Spring '21 Week 11

Spring '21 Week 12

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the CC 410 announcements video for week 12 in spring 2021, so we’ve made it to week 12. And this week we’re working on HTML forms and the REST architecture. Most of them are going to focus on HTML forms in the example and in the project. But we’re going to talk a little bit about REST and some other things that will set the stage for what we’re going to do in the next milestone. And as always, during these last few milestones, I’d like you to remember to keep working on your final project, I’m trying to make these milestones a little bit smaller and a little bit easier to work with. So you’ll be able to have some time left over to work on your final project.

So for milestone nine in the restaurant project, what we’re going to do is add an HTML form to the site, we’re actually going to do two forms, we’re going to do a simple search form based on keywords that will allow users to search for a particular word or phrase in the menu and then pull up the menu item that matches that will also build a more advanced search and filtering mechanism where they can filter based on type of dish, they can also filter on calories and price. This will be very similar to what we’ll do in the example project where we’re going to build a simple filtering mechanism for the movies. So hopefully, you can take a lot of that information from the example and bring it directly into your restaurant project. To finish this milestone, you’ll also write some static search functions in the menu itself. And so those search functions, I’d like you to write unit tests. For those unit tests, I highly encourage you to try and use test doubles, that will make your tests a lot easier to work with as you’re doing this.

So looking ahead, I’m planning on there being two more restaurant milestones after this. So we’ll get to 11 milestones in total, we’re going to try and cover the rest architecture and serialization for sure. And then we’ll also try and hit some external web API’s. If we have a little space in those two milestones, I’m still working on building out those last couple of milestones and making sure that they’re the right scope for this project. But like I said, they’re going to be smaller milestones to give you more final project time, the final milestone will be due on May 3. So that will give you effectively all of dead week and most of finals week to work on your final project. And then a little bit later, we’ll talk about final project presentations and how that will work. So stay tuned for that they’ll probably be a video coming out for that here within the next couple of weeks.

So one thing I wanted to make you aware of is at K-State this Friday, April 16 is the well being day on campus. I’ve put the full reasoning behind it from the Provost in this slide, you can take a look at this, you’ll probably see a posted in K-State today. Basically, the idea is because of the pandemic, we don’t have a spring break this year. But we do recognize that having 16 weeks straight of class is very brutal for students as well as faculty. And so they’re giving us a well being day this Friday that is meant to be non instructional, no homework, no meetings, no classes, no nothing. It’s a time for us and for you to take a break and spend the day on your mental health. And so what I’d like you to do on Friday is don’t think about this class. Hopefully don’t think about any of your classes. Hopefully the entire university follows this policy like they should. Instead, try and take Friday to relax and have fun. Don’t treat it as a catch up day. Don’t treat it as an extra day to do some other work if you can. But really see if you can find some time on Friday to relax and have fun, do something that is fun for you, whether it’s read a book, have a really good meal, go out and walk in nature, take a nap call family or friends. Whatever that means for you. I really encourage you to take Friday and do that. Your mental health is really, really important. And especially as we’re getting toward the end of the semester, things are going to get more stressful, you’re going to be very busy. And so don’t be afraid to take those times to recharge your mental health and your physical health before you attack those problems.

So that’s all I got for this week. I hope you get to take a page from Garfield’s book and find some time to relax on Friday. I know I am. My wife and I were actually planning on going camping this weekend. So hopefully the weather stays warm and dry and we can do that. As always, if you have any questions about CC 410 feel free to email me via the cc410-help email address or you can find me on Discord. But hopefully you can get through these next few milestones and you’ve got some good ideas for your final project and I look forward to seeing what you do. Good luck.

Subsections of Spring '21 Week 12

Spring '21 Week 13

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week 13 announcements video for CC 410 in Spring 2021. So we’re at almost at the end of the semester and this week, we’re going to be covering restful architecture and how to build a RESTful API in our web applications. This week, the textbook chapter on web API’s is not quite finished as of Monday when I record this, so I’ll be posting that probably later this week. But you can go ahead and get started on the example and the restaurant milestone for this week. The textbook content is not really required to understand what’s going on since we actually introduced RESTful architecture last week anyway. So keep your eyes open for that. I’ll send out emails as soon as we get that done. But this week, the major goal is to take our web applications and build a RESTful architecture inside of it to in this case, we’ll actually be managing custom restaurant items, which should be really fun. And then of course, don’t forget to keep working on your final project, you basically have three weeks left at this point. So hopefully, you’re getting some good work done in your final project. And you’re starting to see the end result coming together.

So for this milestone in the restaurant project, like I said, we’re going to be building a RESTful web application, specifically one that allows you to add and edit custom menu items for your restaurant. So in addition to building the rest of a web app, we’ll also be reinforcing a couple of design patterns in how we handle those custom items, specifically the iterator pattern and the singleton pattern. And then also, as part of this milestone, I’d like you to update your UML diagrams to include the new classes for the web application, it really shouldn’t be that hard. There’s just a few new classes you’ll need to add and some linkages you’ll need to put in there. But it’s something we need to do every few milestones to make sure we’re up to date.

So next week is week 14. It’s the last actual week of the semester before we hit dead week and finals week. So week 14 is going to be the last major restaurant milestone. And we’re going to cover things like serialization and form validation next week. And so we’ll have a textbook section and example and restaurant milestone, like always. This is not going to be one of those double weeks, I plan on having everything due on the 3rd. But it’s going to be a small milestone like these last couple, so it should be manageable. And then also sometime next week, you’ll be scheduling your fourth final project milestone with me to catch up and see where you’re at on the schedule. This one’s supposed to be talking about external libraries and API’s. But we’re we’re really just talking about wherever you’re at on the final project. And then of course, keep working on your final project as well.

So once we get past next week on May 3 is when everything’s due there, the only things you’ve got left during dead week and finals week, if you’re all caught up is I’ll probably have a textbook section for dead week that’s just extras. Mainly these are things that I wanted to talk about this semester, but didn’t get time or things that are important, but maybe don’t deserve their own chapter. So it’ll be a lot of just little tidbits. All there will be is a couple of quizzes in that textbook section. And that’s it. For some of those, I may do an example as well that you can work through, it should be a really simple example, kind of like the parallel programming one where it’s going to be really small, but give you a chance to play around with some of those. And then the big thing is your final project is due the end of finals week, which is Friday, May 14, that’s when you need to have everything into me by 11:59, Friday, Friday evening on the 14th. That is the absolute last time that I can accept anything for this semester. So on your final project, I encourage you to take a look at the final project requirements page and make sure you’re keeping up with all of that. For the final project, remember, we’re doing kind of a criterion grading, where as long as your final project has all of the parts that are required, and that they make sense. you’ll most likely get 70% on the project just from that. And then the rest is how well you implemented it, how well your presentation goes, things like that.

So I’ve had a few questions about what exactly do you need to turn in on the final project, the big things you need to turn in is you need to have a release tag made on GitHub, just like everything else we’ve done this semester. And you’ll submit that URL to Canvas. So make sure you read the requirements page, make sure your code meets all of those requirements. It’s pretty clear. But if you have any questions, let me know. Your code should also have full code documentation. So all of the documentation comments in your code, so that we can generate the docs using either javadoc or pdoc. So make sure you’ve got that done. It’s not explicitly required, but I really encourage you to either write a README or some user documentation on exactly how to use your app. You can write it from the view of someone that has access to your GitHub, what would they do after downloading your code and being able to run your code? What commands do they need to use what things they need to install, and maybe a quick tutorial about how they can use the application to do whatever it does. So some user documentation or README documentation would be very helpful for your final project. And then of course, the last big part of your final project is the presentation. So, for the presentation itself, I’d like your presentation to last around 30 minutes, you’re welcome to either pre-record your presentation, and I’d be happy to help you with some software for that. I currently use OBS to record these videos. But you can also record directly in Zoom if you’d like. So you can pre record your presentation if you’d like, or you can present it live to me to present it live. I’ll send out some details a little bit later. But you’ll just schedule a time via calendly. And we’ll meet up there. I’ll also when you present, I’ll ask you if you are okay with sharing your presentation and your project with the class. Normally, in a in class scenario, we would do this as part of the final. But since this is online, a synchronous it’s kind of hard to do. But I will ask if you’d be willing to share it with the class. The other thing I will send out real quick is a poll seeing if there’s any interest in actually doing a live presentation session for the folks that are presenting their final projects. So if there is enough interest in that I will set up a live session we can all get together, check out each other’s project, chat about whatever’s going on in computer science, things like that, sometime during finals week. So I’ll send out some of that information via canvas here in the next couple of weeks.

The other question I usually get on these is what exactly should my presentation include. And so here’s a really quick suggested outline of what I’d like to see in your presentation. It doesn’t mean you have to do all of this, it doesn’t mean you can’t do something different. But if you’re not sure where to start, here’s a good background. This is very similar to what you’d see for a standard research paper template. So you have an introduction section, obviously talking about your project. background is really looking at why you chose to develop this project, maybe in other related projects are inspired by projects, things like that, but kind of explain to me why you chose to do this particular project and what you’re hoping to get out of it. implementation is the big part talk about how you built your project, what tools you use, to how the code works, all sorts of things like that fall under implementation, that’s probably the biggest section. Evaluation is your look at how well your project came together. Typically, for a lot of programming projects, you’d look at performance, or you’d look at usability, things like that. Since we’re not doing any formal evaluation. This is basically your how happy Were you with the project? How well do you think it works? future work is pretty obvious. It’s anything you’d like to do in the future to continue to improve this project. And then you’ll have a quick conclusion. And then at the end, you’ll have time to actually open up your project and do a demo. Of course, you can do some demos, or some quick things as part of the implementation and evaluation sections as well. It’s kind of up to you. But I kind of like to do the demo at the end. So you don’t break the flow from the presentation having to jump into your application. But if you pre-recorded or you’ve got it set up pretty slick, you can jump back and forth pretty easily. That’s not too bad.

So that’s where we’re at for week 13. Week 13 is usually the scariest week of the semester because you’re getting close to the end but you’re not on that downhill slide of dead week and finals week. So hopefully you can stay courageous and you can keep working on stuff. As always if you have any questions in this course you can contact me via the cc410-help email address or on Discord. I’d be happy to chat with you anytime. And if you have any questions, let me know otherwise, good luck this week and I will see you next week.

Subsections of Spring '21 Week 13

Spring '21 Week 14

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week 14 announcements video for CC 410 in spring 2021. Well, we’re on week 14, we’re almost at the end of the semester. And so this week is really the last week of new content that we will be working with. So this week, we’re going to cover serialization in the textbook, which is the process of saving your program state to a file and then restoring that state from the file later on. We’re also going to cover form validation, which we talked about in a previous chapter, but we’re going to see an example of how that actually works. And then for the restaurant projects, you’re going to implement both form validation and serialization with your custom items, so that you can create those custom items, save them and restore them when your program reloads. And also, this week, you’ll be working on your final project. And so this week, we’ll have milestone four, where I’d like to schedule a meeting time to meet with me and discuss your final project and see where you’re going from there.

So this week, like I said, for the restaurant milestone, there’s two things you’re going to work on. The first one is form validation so that as you submit your custom menu items, it validates to make sure that they fit within the range. So it helps ensure that your form data is correct, and it will display some help layers to the user If it isn’t, and then really all, you’ll also work on serialization. So the ability to store your custom items to a file, and then when your program reloads, it will load those custom items from the file and display those to the user. You’ll also be able to choose whichever text or binary format you want to use. So you can explore different types of serialization formats. It’s entirely up to you which one you want to use, but the textbook includes examples for all of them.

For the rest of the semester, after this coming week, there are two weeks which is dead week and finals week. So the only things that you’ll be working on in this class after May 3, when this milestone is due, is there will be an extra section in the textbook, I’ll try and get that posted sometime in the next week or so. All that is going to be is some pages of things that we didn’t cover this class. But I feel like you’re important to at least mention, there may be a couple of short quizzes to go along with those, but it’s not going to be too difficult. I had in the plan and a plan to do an example project for the extras I’m not sure if that will come together or not. So if I’m going to do it, I’ll post it soon. If not, I will let you know that you don’t have to worry about it. But my goal is by middle of that week, any of the extra stuff will be posted and you can take a look at that. But really the big thing you should be working on after May 3 is your final project. And your final project presentation needs to be scheduled and performed either via video or via zoom with me no later than the end of finals week, which I believe is may 14 this year. So make sure you’re keeping that in mind.

We went through this last week, but I’ll quickly go through this again for your final project. The major deliverables are creating a release tag on GitHub with all of your source code, your source code should have code documentation inside of it explaining how it works, I highly recommend creating either a readme file or a user documentation or something that explains how your project works and how to use it. And then also in your Git repository, make sure you add your presentation materials, so any slides or notes or anything you use for your presentation. Also make sure you submit those along with your code. And then you’ll actually give a presentation to me, you can either record it and send me the video file or you can do it live via zoom, it’s up to you which you prefer, your presentation should be around 30 minutes in length, you can either pre record it, like I said presented live. If you pre recorded I do probably I probably will email you some questions and have you respond to those just to get that q&a part. If you do a live we’ll do the q&a part directly during the zoom. And then I will be sending out a quick survey to see if you’re interested in sharing your presentation with the class. And we’ll figure out how to do that. For several of you that are available, we might try and do a live session. So keep an eye on your email. And I will send out more details about that within the next couple of weeks.

For your presentation, the outline is the suggested outline is here. It’s entirely up to you whether you want to follow this or adapt it. But I have a lot of students see asked me what I expect in the presentation. And this kind of goes over it. I added this also to the final project page that gives a little bit more description on these sections. The big thing is you’ll have an introduction, introducing your project you’ll talk about background, which is where your project came from any inspirations anything related to your project there. The bulk of your presentation will be the implementation part which describes how you wrote the project, the code, the architecture, the structure, things like that. Your evaluation is basically how well you feel like the project you created met the goal that you set for yourself and how well it compares to any similar projects. If there are any. You’ll briefly discuss future work. If you could keep working on this project. What would you do next? Then you give a quick conclusion and then at the end, you can give a demo where you share your screen, bring up your project and actually show us how it works and what it does.

So we’re getting toward the end of the semester. I always like to use this GIF about this time of the year. The end is near home Hopefully it doesn’t feel too onerous onerous on you. But if you have any questions as always, you can let me know via the cc410-help email address or you can get in touch with me via Discord. I’m always happy to help. But hopefully this is your last big week of work in this project before you work on your final project. And as always, good luck and let me know if you have questions.

Subsections of Spring '21 Week 14

Spring '21 Week 15

YouTube Video

Resources

Edited Transcript

Hello, and welcome to the week 15 announcements video for CC 410 in spring 2021. We are on week 15, which means it’s dead week, there’s just this week and next week left in the semester. So there’s really not a whole lot left to this class. If you’ve been keeping up and you just turned in the last milestone and the last big chapter in the textbook, you’re pretty much almost done. So the only things that are left this semester, by the end of the finals week, there will be a extras section in the textbook, you will just have a textbook quiz ended, it won’t have anything else attached to it. I’m going to try and get that posted sometime this week. And then you’ll have through the end of finals week to go through those pages. Take that quiz. And then you’ll be done with that. You also have your final project milestone five, which is your final project presentation, you should schedule that sometime either this week or next week so that it is done by the end of finals week. And I’ll talk a little bit more about that later. And then also, you should be getting an email from the teaching evaluation system. In the next week or so I would really like you to take the time to fill out the TEVAL for this class. It’s very important to me because it helps me understand your views of the class what you learned how you experienced the class. And it gives me a lot of information that I can take and use to improve the class. And it also helps me improve my teaching style. So any comments that you have on the TEVAL are always welcome. Please feel free to be honest and open about anything you thought about this class things you liked things you didn’t like, because that will help make it better for future students to take this class from the next semester and beyond.

So really, the only thing you should be working on at this point is your final project. So don’t forget to the final project deliverables, you need to create a release tag on GitHub. And that is what you’ll submit on canvas as your final project. Make sure you read the requirements page for the final project to know that your final project meets all those requirements. It does use a form of requirements grading or specifications grading. So I’m really just looking for a final project that meets those requirements and does so in a fun, unique, useful, interesting way. Your code should have documentation in it. So you can generate the documentation using either javadoc or pdoc, you should also probably consider including either a README or some user documentation to help both me and any future users understand what your project is how it works, things like that. And then of course, you will give a presentation. And so for your presentation materials, any slides or anything, please make sure those are inside of your code repository on GitHub, you can just make a folder for that. But then you’ll need to schedule a time with me to give the presentation either live or you can record a presentation video, and submit that to me. But I’ll still want to meet with you live for the milestone, so I can do some q&a with you. Even if you submit the video. For your presentation time or your q&a time, go ahead and schedule with me using the Calendly link just like we do for all the other milestones. And it should be easy to do.

So like I said, your presentation should be around 30 minutes in length, you can either pre record your presentation, or you can present it to me live via zoom. If you would like I’ll ask you, when you get done, I will share it with the class if you’re okay with me posting it. And then it’s up to you. But we’d like to do some sort of a live session as part of your milestone just like for all the others. So go ahead, even if you’re going to pre record your presentation, go ahead and schedule a meeting with me via Calendly, if you pre record your video or watch it beforehand. And then we’ll use that as a q&a time instead of a time for you to present live. And it’s a good chance for me to wrap up with you see how things went ask if you have any last minute questions, things like that.

The presentation again, this is the suggested outline for the presentation. I’ve gone through this a couple of times. And I’ve also updated the information on the final project page with this. This is of course just a suggestion. A lot of students like to know what I’m looking for in a presentation. And this gives you an idea of what I’m looking for. You don’t have to follow this outline. You can rearrange it however you want. But this is my suggestion of the types of content that you should have in your final project presentation.

So that’s really it. We’re close to the end of the semester, you can see the checkered flag and the distance. So I hope everything is going well with you I will work on getting a lot of grading caught up today. So if you submitted stuff on time yesterday, I should be getting that graded today and you’ll get that back and you’ll have a pretty good idea of where you’re at in the class. If you have any questions, concerns, anything comes up please let me know via the cc410-help email address. Also please bear in mind that unless you have talked with me and have made some other plans with me, everything in this class is due Friday of finals week, which is May 14 at 11:59pm. I cannot accept any late work after that I cannot accept any projects after that. That is the absolute last deadline that I have in this class. So unless you’ve made other arrangements with me, make sure you have everything turned in by that deadline so that it gets it in time for me to get it graded and get it posted as part of grades early that next week. So I wish you the best of luck as the semester wraps up, you’ll see one more of these announcements videos next week. That’ll be pretty short and sweet. But I wish you the best of luck and if you have any questions please let me know.

Subsections of Spring '21 Week 15