Friday, April 4, 2014

FINAL ROUND: PROGRAM

Week 12

a-Maze-...ingly confusing.

My vision of what the maze was going to look like.
The final programming project was a lot more challenging to understand than I had originally expected.  Obviously, the "TODO" sections that I had to do were much easier than the definitions and designs that were actually given.  The hardest part was understanding how the "TODO" parts contributed as a whole to the entire program.  I had no idea what the final project was supposed to be like so I often felt like I was blindly programming, only to make it so that the given check-expects all passed.  After finishing all the parts and clicking run, the program ran smoothly but I wasn't sure if it was supposed to have a finish line of some sort (because mine did not) and I still do not know if I am indeed missing something from the program.  I tried my best to dig into the definitions that were "beyond the scope of this course" but found it very difficult grasp, especially when they began to nest into each other.  In the end, even though the program ran and pressing the directional keys moved the person around the maze, I was unsure whether or not I had done it correctly or exactly what it was that I did.

Wrapping up...

I had a great time working through all the material throughout the course and hopefully I have developed a methodology - a computational way of thinking - that I can apply to any situation out in the real world.

I would like to thank Professor Gary Baumgartner and Danny Heap (never really figured out if the video tutorials were made by the same person as you), and all the TA's that made this course very accessible to all!
A sincere, state-of-the-art thank you!

Sunday, March 30, 2014

Week 11

Long list of things done this week:

- Filtering unwanted elements from lists

It's true.  That's all that was done.

Looking forward too...

- Programming project II: Maze program

Oculus Rift - Virtual Reality Headset

For those of you who don't know, virtual reality has been a focal point in the new age of technological innovation and development.  Perhaps at the forefront is Oculus VR, who recently joined Facebook and are developing a virtual reality headset that appears to be very promising.  You can learn more about Oculus VR and their products here.


It's extremely exciting to see virtual reality advancing the way it is.  Although the first thoughts of its possible uses pointed towards the gaming community, I can only imagine the amount of impact it can have as a global communications device (hint: Facebook is in on it).  As an extension of video programs like Skype, imagine being able to record your environment and what you see, 360 degrees, and then having a friend or family member across the world put on the virtual reality headset and see what you just saw.  In fact, think of what Google Maps has been able to do over the years and their Street View function.  Users could possibly put on the headset and have the ability to look around the location that they want to go to!

Or... you can use it for pure entertainment value with friends and family like this.


Sunday, March 23, 2014

Week 10

Term Test "10"

A little binary notation.

I've never really gone in depth with binary notation before the past week so it was interesting just to see how basic arithmetic was performed and the idea of "base 2" instead of the canonical "base 10".  Here's a fun little game I found that really cemented my understanding of binary representation of the base 10 numbers we are most familiar with.

Cisco Binary Game

Besides that, I had wondered why the binary system was chosen for computers, and I learned that (in simple terms) there's either an electrical current (on) or there is not (off) and they are represented by "1" and "0" respectively - known as bits (or binary digits).  Currently it's not possible to have a base 10 computer system because the computer would have to have 10 different states, besides just "on" and "off".  Thus, the things that are displayed on a computer that are familiar to us are simply represented using the binary system.

For the second term test, my primary worry heading in was any technical knowledge regarding computer hardware since those types of questions were present in previous tests.  Luckily for me, the test was heavily programming-based with a little binary notation and arithmetic of which I was comfortable with.  The most challenging part of the test was the last question, where we were asked to write the definition for what turned out to be a recursive program.  It took awhile to wrap my head around the combination of functions involved.  I had to "test" the definition by running a few "check-expects" in my head and seeing if they matched the results that were given, and then made any adjustments necessary. In the end I think I was able to get it right.

That was about it for this week.

Looking forward to...

- new programming functions
- Programming Project II
- beating the game 2048 - or 100000000000 in binary

Sunday, March 16, 2014

Week 9

Wikipedia Contribution Assignment - Part II


For my Wikipedia contribution, I enjoyed working on four different posts.  I was able to edit various spelling and grammar errors on:

- Health issues in athletics
- Sexless marriage

I also updated a section of "Failed suicide attempt" after learning that India no longer criminalizes the act of attempted suicide, under the assumption that the person was suffering from mental illness at the time.

I also expanded a stub article of Chloe Kim, creating a brief biography with the information currently available.

What intrigued me the most was not the information learned from researching the four topics, but what I learned from the editing process and the Wikipedia community as a whole.  Unfortunately, I have not yet had any responses from other community members on the Talk page, however this assignment has made me realize how fluid the unofficial publication of information can be on the internet.  Especially since Wikipedia is a well-known source for anyone interested in a brief overview of virtually topic, anything posted can impact many people.  Because of this, Wikipedia boasts a strong community of editors and editing functions that allow articles to be kept up to date and also notify the community which articles require more work.

Personally, I was surprised with the simplicity behind editing the articles I chose to work with.  Everything was well-structured and any questions or concerns I had were readily answered by either the Help feature right above my editing sandbox or the Community Portal.  It was very satisfying to see the results of my edits each time I pressed "preview" or saved my changes, since they modeled the professional appearance of any other article on Wikipedia.

Aa-aah-choo!

This week, we were finally able to utilize the functions we had dabbed into throughout this course to create a simulation of the spread of an infection within a population.  At first, it was a challenge to interpret the functions being defined.  I was required to experiment around with each given function, sometimes purposelessly leaving out parts of the definition in order to fully understand the role that each part played.  Then, for functions like left-cycle and right-cycle, I would write additional check-expects to make sure that they worked.  Some of the more difficult functions were already defined however, and I was sort of relieved to see that.  Still, I tried to break them down in order to better predict what was to happen when the program was run.

Most of the changes to VIRULENCE, DURATION, and IMMUNITY produced results that were to be expected, given the definitions of the values.  Increasing virulence increased the rate at which the blue dots were spreading (infection).  Increasing duration increased the length of time the blue dots remained, and increasing immunity (away from 0) resulted in more red dots (immune).

All in all, it was an interesting assignment that required a multi-layered understanding of the programming functions learned up to date and I was glad to be able to produce the final product.  Looking forward to the second programming project!

Challenges

Aside from the assignments, the past two weeks had focused on recursion which personally, has required much more attention than all the previous functions.  I found that the best way to dig into any recursive function is to begin with the base case (n=0) and build up from there.  I did well on last week's recursion quiz however on the quiz at the end of this week was a little tougher for me.  I had trouble picturing the size of the next circle compared to the previous circles.  Hopefully I did it right.

Next Week...

I will be focused on studying for the second term test.  Important topics include:

- deconstructing and recomposing images
- applying functions to lists
- recursion

Saturday, March 8, 2014

First!

There's a first for everything.

And for a computer science course, this will be my second.  My first computer science course was back in high school however the program we used was Alice and it involved only drag and drop commands.  I was excited to take this course knowing it would involve "coding" for the most part, and that it wouldn't be as intensive as CSC108 might be.  For the most part, I have been satisfied with the level of programming that the course has introduced to me together with a little history along the way.  It's safe to say this has been my first, closest thing to computer programming that I've done but perhaps not the last.


From Week 1 to Week 8

It's now the end of week 8 and time has really flown by for this course and this semester in general.  For the first two thirds of the semester, I have found the level of programming to be very straightforward and "kind".  The material has been easy to absorb and concepts and functions have been easy to grasp.  I found that the video tutorials for Dr. Racket were brief and to the point, and paused every so often so that I could play around with the programming tools myself.  At first, I would replicate the functions from the video, but then I would branch out from the tasks and try to combine as many of the functions in the video as possible, learning from errors when they arise.  This has proven to be an effective learning method for me as I have had much success with the quizzes and the recent term test. 

For the term test, I know that my weakest point going in would be the written section, with anything to do with the history of computers since I had missed a couple of classes.  I was however able to catch up and read the weekly summaries and postings which included some notes of what was covered in class.  Luckily, the main focus of the test was on writing some commands which I was able to do well.

Some notable related material (MAT246):

Last semester, I had taken a course on abstract mathematics which covered the Euclidean Algorithm, and algorithm that Professor Baumgartner had mentioned in one of the early lectures.  Following the algorithm would allow the user to find the greatest common divisor of two numbers.  However, I noticed that the algorithm he used in class involved a slightly different approach compared to the algorithm presented in my previous course.  This highlighted the fact that there can be many different algorithms or paths to the same answer, and as pointed out in the first question of the first term test, time efficiency is the main deciding factor to determine which algorithm is favored.

Difficulties (not so much):

There really haven't been many difficulties in this course, if any at all.  The Wikipedia contribution assignment has taken some time to learn the technicalities of creating a proper post or edit which I unfortunately left out in part 1.  I will update my thoughts on part 2 when finished.  Other than that, I guess waking up early for a 9am morning lecture has been pretty tough.

Looking forward to...

- Next week's first programming challenge "Sneeze"