Landing : Athabascau University

Reid Wheeler's Notebook

  • Public
By Reid Wheeler October 18, 2017 - 2:19pm

Assignment 1

Assignment 1 went relatively smoothly for me. This was probably in large part due to the fact that not much actual network programming had to be done from scratch. It seemed that in both parts 1 & 2 of the assignment, the bulk of the problem was string processing. This can be finicky at times, but generally isn’t overly challenging. This isn’t to say that the assignment was not useful however. Before any String processing could be done to solve the assignment questions, all the example programs that were provided had to be fully understood. For example, before I was able to write any code for this assignment, I had to research asynchronous programming so that I could understand the usages of ExecutorService and Future.

For assignment 1 I also made sure to use a simple text editor instead of an IDE to write the programs. Surprisingly enough I do think this actually helped with my understanding of the program. Normally I would have just copied and pasted the entire thing and then tried to mess around with it until I reached a solution. Though I can usually get away with this, I found that typing out every single line helped me understand the program as I was writing it, because I was more aware of what I was doing. This way, if I didn’t understand something I could research it before I continued writing the program and make sure I understood it. By the time I had finished writing the examples, I felt I had a good understanding of how they all worked. The textbook descriptions of the programs were also very useful to this end. The result of all this was that I was able to implement my solution to the problems much more quickly and effectively than I would have been able to had I just copied and pasted the code like I normally would have.

Overall, I felt like this assignment was good for getting my first taste of network programming in Java. The programs were not overly challenging at face value, but there was a decent amount of understanding that had to happen behind the scenes.

 

Assignment 2

My first impression of assignment 2 was that it felt much more like actual network programming than assignment 1 did - at least that was the case for part 1 of the assignment.  It was interesting working with Sockets and learning how Java handles HTTP connections. The actual implementation of part 1 went pretty well for me. The example program didn’t need to be modified that heavily to allow multiple connections, so there wasn’t a lot of room for error. I enjoyed the aspect of making the HTML page for this program as well. It was interesting to see a semi-functioning website come into fruition that I had started from scratch.

As much as I enjoyed part 1 of the assignment, I can’t say the same for part 2. Though I felt like the concept of logging was not difficult, I had a really hard time formatting it exactly the way the instructions specified. Getting thigs like the date to format correctly was a huge pain. I felt like I was spending hours researching something that in the end seemed so trivial. I was constantly asking myself why it mattered so much that the log output looked EXACTLY like the weblog from assignment 1, and thought about just giving up on it a few times. Eventually I did get the solution, but unfortunately it felt a bit hacky to me, or at least the solution I came to did. I’m sure I didn’t go about it the proper way but as soon as my logs were formatted correctly I didn’t care anymore.

I understand that having informative logging is vital especially as a project grows in size and complexity, but I didn’t understand the emphasis on it in this particular assignment. Yes, I understand that weblogs are hugely important in network programming, but the creation of them doesn’t really use may networking specific concepts. All in all, I thoroughly enjoyed part 1 of the assignment, and felt the opposite about part 2.

 

Assignment 3

When I began assignment 3 I had no idea what to do for part 1. I was under the impression that the protocol I needed to create needed to somehow literally be read/used by the program in part 2. I spent longer than I’d like to admit frantically googling how to create network protocols before I finally asked on the landing and unfortunately received no response. I read through a few other people’s posts on assignment 3 and nobody seemed to be having any issues with part 1 except for me. At first this confused me, but then I figured I was just drastically overthinking the assignment. This suspicion was confirmed when I emailed Dr. Huntrods and received clarification on what I was expected to do.

From this point onwards, the assignment went well. I wrote up the protocol design document which simply had to explain how the server would respond to requests, unlike what I initially thought. The finite state machine was also pretty easy because I had done similar things for other classes already. The actual coding for part 1 implemented the protocol that I designed, and was similar enough to assignment 2 that I didn’t have too much trouble getting it to work.

Part 2 of the assignment was pretty interesting. I wouldn’t say it was very hard, because you mostly just follow a tutorial, but it definitely wasn’t easy either. The tutorial was a pretty good length and I would say it wasn’t the most well put together tutorial I’ve seen. Some parts probably could’ve been explained a little better and the instructions weren’t always that clear. However, after grinding through it, I got everything working the way it should and was able to run the program properly. Modifying it to match the assignment specifications was relatively trivial, as the issue of finding primes has come up alot throughout my schooling.

The toughest part about assignment 3 was probably getting everything to compile and run properly using the command line. It was a bit of a challenge to get the jars to work properly and I kept getting errors because I was using the Windows command line and it just doesn’t seem to like to work as smoothly as the terminal on Linux or Mac. I liked learning about RMI, and it certainly wasn’t something I expected to get coming into the course.

 

Assignment 4

(Included in project submission)

 

Course Reflections

All in all I would say that my experience with this course was very positive. It forced me to learn alot and in a way I had never done before. I liked the content of the assignments for the most part and the difficulty level felt good.

One suggestion I would make about the assignments would be to have more, smaller, assignments. I think it would be beneficial to have simple programs that we need to write from scratch to practice key network programming concepts. Instead of starting with an example and building a more complex program out of it, it might be good to just make small programs that just focus on one or two concepts.

My favorite part of the course was easily the project. Like I mentioned about the assignments, I enjoyed that we essentially got to build something from the ground up. I found the learning process to be very interesting and even when I was writing the documentation portion of the project it still didn’t really feel like work. Once I had everything in the project completed I felt very fulfilled and that is certainly a sign of a worthwhile assignment.

I also want to touch on the participation portion of the course. I think that in theory, enforcing participation on the landing could be a good idea, but perhaps not so much in practice. As I mentioned in my assignment 3 reflections, when I made a post on the landing I didn’t receive any responses until after I had emailed the course coordinator. Seeing as this is an online course, people can take it at different times and at different paces, which means that while one person might have a dozen people to interact with on the landing, I seemingly had none. I could have gone and commented on a bunch of people’s blog posts but unless they are in the course currently, it seems a bit pointless because I’m never going to get a response. I suppose what I’m getting at is I could see an argument being made that it is a bit unfair to have a significant portion of a mark be based on collaboration when there is a chance that you will have nobody to collaborate with.

That being said, as I previously mentioned, my experience with the course as a whole was very positive and I would definitely recommend it to others who are interested in the subject. I was very pleased with how quickly my emails were responded to and the marking was always done quickly and fairly.