Sunday, December 11, 2016

Blog 8 - Where do I go from here?

I do not yet know exactly what I want to do in the field of computer science, but what I do know is that this is where I want to be. Since an early age i have been fascinated by computers. When I was in 6th grade my dad brought home an old computer from his office. It was a dell something with an Intel core 2 duo and a GTX 2MX graphics card. This wasn't a good computer even for the time but I spent hours messing around on it. I would sit down in my room and take the whole thing apart and then put it back together again and see if it still worked.
This is what sparked my interest in computer science which has never stopped. Although I have a lot of experience with computers and computer programming I do not know exactly what I want to do with my degree  when I get  out of college. I know that I don't want to be at some big development firm where I am one small piece that is virtually non existent. Instead I hope that I can find a job at some startup or smaller company where what I do really matters. I find pride in completing things where there is a true benefit to someone else because of what I did. Especially when working in a team of  people who I can get to know and build a relationship with.
This is one reason why I felt CIS 115 was so much fun to be in. Because everyday I got to see my friends in my group. These are people who I will probably be friends with for at least the rest of our college careers and hopefully for life. Being able to have that group community and learn with them along with always having people to help my if I got stuck on a project was so enjoyable and satisfying. I hope that in the future I can be in classes with this same atmosphere,  and hopefully at a future job I can get this same experience as well.
Some classes that I look forward to in the future are definitely more programming classes. When I  wa in  high school I did not have very good programming teachers at all. They were grumpy and would just tell us to read the book or go on code academy because they had just as much of a clue on how to program as I did, or in some cases even less than me. This means that although I learned the basis of programming I didn't learn it in a very good way or the right way causing my code to be pretty bad. One thing I hope to be able to do in the future is to be the guy who is knowledgeable about coding and can easily figure out a problem if one occurs.
One thing that I really wish was covered more in this class was the basics of writing code and some kind of explanation on how to make code look good, and how to write it in an easy to read format. I know this is one thing that in my classes in high school I learned from experience that in order to be able to go back and work out bugs in your code you want it to be written in a way that not only you can understand but also so that someone else who is helping oyu could understand. I frequently helped my roommate who is new to programming with his code. Almost every time I would read his code it would be a huge mess that was almost impossible to figure out what was actually going on. I think because this is an intro class we should be taught at least things to avoid like 20 if statements inside of each other.

Monday, December 5, 2016

Blog 7: Algorithms

I personally did not enjoy Tubes very much so "9 Algorithms That Changed The Future" was a refreshing change. Algorithms are something that I personally love and as I mentioned after reading our first book was my favorite chapter. It is something that I find fascinating, and want to learn how to make in the future. The fact that one complex statement that is only a few characters long can be the basis for an entire program or operation is a really cool concept. Because of that I really enjoyed this book and what it had to offer. Learning about all of these different algorithms and how they work is something I find really cool as a computer scientists.
One section that I really enjoyed was the section titled "precise English statements that are literally impossible to write down as a computer program" (MacCormick 182). This section describes a phenomenon where no matter what the input the program will always crash. It is something that computer scientists refer to as "undecidable". Interestingly enough this problem was thought of before programming was even invented. Alan Touring discovered the halting problem when thinking up the theoretical computer. Even before a programmable computer was invented Touring was able to prove that this would be a problem with computers. But he did prove that computers were still theoretically possible.
One thing that I really enjoyed about the book was that it gave an in depth explanation from a technical point of view. Instead of explaining from scratch like tubes did by going over every little detail and making sure that even if the reader had no idea what a computer was they could still understand the book. McCormick instead wrote the book to someone who understands what a computer is and how code works. Although he sometimes stair steps up to his final point he implies that I, the reader, am not stupid. I found this much more enjoyable to read because most of the content I read was new information that I was able to learn from.
One section that I found interesting was the section on encryption. By using some different analogies than what was used in the lecture I was able to understand how it all works much more easily and really helped me understand the topic better. The analogy about the mixed paint I thought was very helpful and allowed me to grasp the concept much better. Not only did these analogies help, but also the in depth explanations were very helpful. I never felt the need to go research something else while reading this book because everything always always explained in great measure. It seemed whatever question I had had already been thought of by the author and answered. This lead to a very pleasant read.
I would defiantly recommend this book to anyone who wants to learn about algorithms and the thought process behind how they work and how to make one. I think this book was chosen for the class because of everything that is great with the book. It contains great detail that thoroughly explains each topic. The chapters blend well with each other with smooth transitions from one idea to the next. I think that this book was selected for CIS 115 because it mirrors everything that we are learning in the class right now and is a great extension of the lectures in class. I found it very helpful to read the chapters from the book as we went along to expand on everything that we talked about. It was as if the lectures were designed around the book.  All around it is a great book and I give it 4.5 out of 5 stars.

Monday, November 14, 2016

Blog 6 - Computing Science & Mathematics

Mathematical concepts is the building block of all code. Anything you want to do must be done through some sort of math. Even if your goal output isn't numbers you still use math to compute that output. All statements in code are combined through operators such as addition, subtraction, or Boolean operators like and or or. Because of this math something every computer scientist must understand, and be able to apply to their code. Part of this understanding is knowing about theoretical computer science.
Theoretical computer science is a division or subset of general computer science and mathematics that focuses on abstract or mathematical aspects of computing, according to Wikipedia. This is basically all of the theoretical applications of math that can be used in computer science. Things from algorithms to Quantum computation fall under this subject. One instance of this that I find very intriguing is cryptography. This is the practice of secure information in the presences of enemies. I think it is really interesting all of the different methods that can be used to encrypt a message. And on top of that how easy it could be in the future to break the code that we have right now. We learned in class how we encrypt things online using a system that is very easy to break if you have enough time, but messages can take weeks to decode with even the worlds most powerful computers. So even if your enemy might decode your message it will probably be obsolete by the time that they do. One downside in the future to this which I found fascinating was how a quantum computer could break every kind of encryption we have right now almost immediately.
What makes quantum computing so different from what we have right now is that instead of being based on 1's and 0's like we have right now. Where our computers exists by combining those 1's and 0's to get an output. A quantum computer would store qubits instead of bits. These are bits that are superimposed. Where instead of existing in one state or another, off or on, they instead exist in both at once. The answer obtained from a quantum computer would be provide a solution with a certain probability of being right. An example of this is the Turing test which was proposed in 1985 by David Deutsch. Theoretically Quantum computers could solve problems much faster than our current computers because of their ability to work on multiple things at once. Currently no Quantum computers exists but scientists are getting closer to figuring it out. Once that happens there is fear that our modern encryption techniques could become obsolete quickly because of how quickly a quantum computer cloud decode them without a key.
One person who was big in the development of computer science in relation to mathematics was Charles Babbage. He is considered by many to be the father of the computer. More importantly he was the first person to design a machine that could be programmed. His computers that he designed weren't even electric they were completely mechanical. And he did all of this in 19th century. In 1822 he began working on his first computer called the difference engine. A prototype of this was finished in 1823 but it soon fell through because of a lack of funding. Babbage then set off to work on his next machine which was the analytical engine. Although it was never completed during his life it is considered the first designed programmable machine. The major development from the analytical machine was the invention of the punch card which would go on to be the basis for many computers in the future. The reason why Babbage's invention was so important is because it is what sparked the evolution of the modern day computer.

Monday, October 31, 2016

Blog 5 - Making Meaning: Tubes

I didn't enjoy the book very much. Although it is better than the last book we read in this class it still didn't catch my interests. I think the main culprit of this was the style of writing that the book had. It was written from a first person point of view which was very interesting to see how the author, Andrew Blum, discovered how he was connected to the internet and how the internet worked. The problem with it though was that it was jammed packed with facts and statistics. A lot of the time I felt like they were interesting, but not fascinating. The facts seemed to be used more a filler information rather than thrown in as something that was really astonishing. Sure some things caught my attention and I found really interesting, but many of those were drowned out by all the other random assorted facts. Although I didn't enjoy the book it still helped me understand a little more how the internet actually works and what it is.

One chapter that I did explore further was chapter 6 "The Longest Tubes". This chapter is about the undersea cables that connect all of the computers on the planet between each continent. This is something that I have always wondered about, but never really explored deeper. I was very surprised to learn that undersea cables actually existed way before computers. The first successful undersea cable was laid in 1858 across the English Channel. This was laid by the SS Great Eastern, which at the time was the largest ship in the world. This undersea cable was 2,700 miles long.(Blum, 203) This was used for telegraphs. The first transatlantic cable was finally finished in 1870 after multiple failed attempts, but after then British companies dominated the market for worldwide telegraph communication until the late 1920's. By 1918, 180 million words were passing through Porthcurno anually, the global hub of the telegraph network.(Blum, 204) Later then in 1988, 8 years after fiber optic cables were invented, the first fiber optic cable was laid across the Atlantic ocean. This cable is the TAT-8 and was used for telephone communication. This was a big step to where we are now because all of our undersea cables are now fiber optic because of their small size and high bandwidth without loss of information. By 2006 only 1% of international traffic was done through satellite. This shows the importance of the undersea cables have on our world today, and how much they affect our world. Then by 2012 operators were able to demonstrate long term error-free transmission without any loss at 100 Gbps across the the Atlantic Ocean. (https://en.wikipedia.org/wiki/Submarine_communications_cable)

Personally I wouldn't recommend the book to a friend. I would however recommend it to my Dad. Because it's written not as much in a way to inform, but more to tell the really cool stories about how the internet came to be. Sure it explains how the internet works, but I don't think it is the most efficient way to explain that. Personally I learned more by looking up the different topics on the internet and learning about the internet that way. My Dad however would love this kind of a book because he really likes cool little stories about how things were made. Whenever he reads a book he will tell me these small stories relevant to the book which although I don't enjoy always make him more interested in what he's reading.

I think this book was selected as a book we should read because it might appeal to those who enjoy those stories like my Dad. I gets them engaged with the subject and makes a more enjoyable read instead of boring research of facts like what I tend to like. Personally I enjoy the exploration of these facts jumping between wiki pages and articles. But this book was picked to appeal to people with a different mindset who enjoy connecting what they're learning back to the history of how that came to be, and the personal stories of who created the networks that keep the current world together.

Monday, October 17, 2016

Blog 4 - The Filter Bubble

I selected my roommate Kevin for this experiment. We share a lot in common but are different in many ways when it comes to what we do on the web. I searched around a bit, and noticed that many ads were different though I didn't see a big difference from ad to ad. I did however see many different things in the recommended videos on YouTube, and Netflix. In comparison to my own browser it really was very different. This shows that the filter bubble algorithm is always trying to make my experience on the web very personalized to my beliefs. I'm sure that if I did the same test on for example my mom's computer I would get greater varying results. This would be because she has very greater preferences and beliefs than I do, and uses the web for much different things than me.

One way that I can almost always without fail to notice the filter bubble is to search something on amazon.com and then click on the item that I searched. Then when I go to almost any other website with ads I see and advertisement for the item I just searched. This is easy evidence that we are always being tracked and watched by companies on the internet. Other ways you can see this happen is when you look for a ticket to somewhere like a plane ride or train ride. Many times you get ads from travel agencies shortly there after if you do not purchase the ticket the first time you visit the website. 

One big question that is frequently brought up is is the filter bubble a good or a bad thing? This is talked about a lot in the Wikipedia article linked to the assignment page and down below. I'm indifferent about this and here's why. In some ways I think that it is a very good tool that helps not only the user, but also companies. It allows my google search to be more accurate to what I might be looking for based on my previous interests. I think that any way to help me get what I need faster is always a good thing. It is more efficient and my experience is better because of it. Additionally with things like YouTube searches like I mentioned it creates the website around me. It gives me a more pleasurable experience because if I'm looking for videos to watch, but don't know what I want to watch I can see things related to things I have watched in the past. This is always changing also. If I saw my recommended videos from 3 years ago they would be very different to the ones I have right now.

One downside of the filter bubble is that you have a very personalized experience. This also something I listed as a positive, but the downside is that you may never see anyone else's views on different topics. Because your content is so personalized you will only find people who agree with you, and never actually find things that you disagree with, or other perspectives to different situations. This can be bad for our society because if everyone thinks that everyone else feels the same way about things then it could come as a shock when you meet someone who do not agree with you. In the moment you may think that they possess a rare belief when in reality there is a bunch of people out there that don't agree with you that your filter bubble is shielding you from. This phenomenon has been called cyberbalkanization which was talked about in the Wikipedia article. It is the idea that the internet is split into "subgroups" which all have their own views and ideas. Because they are split up among themselves they rarely interact with each other causing their ideas to become very specific. The name itself comes from the Balkan area of Europe which is a small area with a lot of different languages, cultures, and beliefs split up among each other.

I thought this activity opened my eyes a little more to how the internet works, and how it might not be as free as we might think it is. In reality I never see and probably never will see all of the beliefs and ideas on the internet, and because of the filter bubble I probably won't see most of those ideas because of how specific my experience is made.


Monday, October 3, 2016

Blog 3 - Making Meaning: Pattern on the Stone

I enjoyed some parts of the book, but found a lot of it kind of boring to read. I found some things that were very interesting like the algorithms chapter to be quite interesting to read. Me finding it boring might've had to do with the fact that I have some previous knowledge on programming. The one chapter I really enjoyed as I said was the algorithms and heuristics. This is something that I have little knowledge about, and I found that the book helped me a lot understand what they are and especially how they work.

When I was first learning how to code I tried to make a tic-tac-toe game that would always win. I read the algorithm online and was able to throw together a crude version of it in java. I was able to easily understand the simple step by step tree of situations. Although it is a lot of lines of code it still does what it is supposed to do. I was very proud of myself at the time and it was a big step in me learning how to code. But what I didn't learn was how to make my own algorithm, or how to solve much bigger and complex tasks. This is why when I got to this chapter I was very intrigued, especially about the traveling salesman problem. This problem is used as the example for what a heuristic is, and is used throughout the chapter. The problem is that everyday a salesman or and worker who has to go door to door has a different route everyday. The goal is to always drive the most efficient route. If you used an algorithm to solve this problem it takes an unimaginable amount of time to calculate every option through an algorithm to find the fastest route. Instead you use a heuristic. This makes the computer take the most efficient route from where it is to the next point it can choose. Although it may not be the fastest or best answer, it is better than most of the possibilities. I think this is a really cool part of computer science because I imagine it very similar to artificial intelligence. The fact that the computer can generate its own decisions is really cool, and I really enjoyed learning about that in the book.

The book was probably chosen for this class because it starts from the very beginning. I wish that I had access to a book like this when I was first starting to program. It is able to clearly explain what all the functions of programming are. I would definitely recommend this book to someone interested in learning how to code. It does get a little wordy at times, but I think that is necessary for learning the main building blocks of coding. One big reason of why this book can be so helpful to a person new to programming is all of the pictures explaining the logic of different operations. They clearly are able to show the reader what they are reading about, and aren't over complicated either. Instead of being overdrawn like some images I was taught with they are clear and precise about what is being said.

Overall I think that although the book wasn't very influential on me it was a good refresher, and could be extremely beneficial to anyone new to the concept of coding. I believe it leaves a lot of information open to explore further. I personally researched more on the traveling salesman problem and found the history behind it fascinating. I would rate the book 4 out of 5 stars, and consider it a much easier read than some of the other more complicated programming books out there.

Monday, September 19, 2016

Blog 2: Algorithms

Ambient occlusion

Ambient occlusion is a way to render shading in a 3D area. This algorithm calculates how exposed areas in a scene should be and create ambient lighting. The Algorithm's goal is to figure out the darker areas of an object. Once it has calculated this then the computer can darken that part of the image to make a simulation of natural light. This is done by finding an "accessibility value" that is calculated for each surface point. This effect does not necessarily create shadows, but instead just darken areas on the surface to help improve a rendered image's tone. This process is normally done as an extra effect done in post processing to help improve the image instead of creating it.

One real time application for this algorithm is computer games, this uses a different variation of ambient occlusion called screen space ambient occlusion (SSAO). This is a much more efficient version of the ambient occlusion algorithm that is able to develop the effect in real time. SSAO was originally invented by Vladimir Kajalin while working on the video game Crysis. It was released as a feature in the game when it came out in 2007. The algorithm is implemented as a shader that gathers the same information as the ambient occlusion algorithm, but saves a value for every pixel. The it calculates the occlusion for each pixel and assigns it a value. This is a very costly method that is extremely inefficient, and would make it impossible to run anything at real time speeds. So to get real time speeds SSAO uses a randomly rotated kernal. A kernal is a method used for sharpening or blurring an image using a small matrix. It does this by using a convolution operation to determine weather to sharpen or blur each pixel in relation to the other to get the desired effect. The random kernal orientation is repeated every N pixels which allows the user to set how extreme of the desired effect the want, and allow different amounts of post processing effect to take place. High quality results tend to be in the area of 16 or less to receive an acceptable effect. Because the algorithm is only processing a portion of the pixels you still receive the desired effect without using as much processor space because not every pixel has to be calculated.

This algorithm is very complicated and could in theory be calculated by hand but realistically you have to have a computer do all the calculations for you. This is because you wold have to do the same calculation for every point in your image which would become very tedious, and be very prone to mistakes.

Ambient occlusion is a Algorithm that will give you a precise output every time. Like what was said in the book " it is a fail safe way to achieve a specific goal". The problem that is frequently faced with this algorithm is that it's a very inefficient way of calculating the desired output. The SSAO is a heuristic that was created from the algorithm that is able to be much more efficient and still recreate mostly the same outcome. it takes only a portion of the pixels and uses that to represent all the ones surrounding it instead of calculating every single pixel like the algorithm does.

I decided to to choose this algorithm for my blog because I have always seen it as an option to turn on when playing video games, and I know that it helped make my game look better. I never knew how it worked and was interested in what it did. I can say that after our lecture in class and reading about it for the last hour I understand it, and I think that is really cool how it is able to calculate the different levels of shading, and help make the image look better.