Friday, December 6, 2013

Scientific Computing: Conquering Space

     Scientific computing allows the use of mathematics in order to analyze and test scenarios in order to gain knowledge or information on a subject. This is usually used concurrently with scientific testing in labs or experiments. The scientific computing will give a general guideline of what we think will happen and how to set everything up, and we can then test it ourselves and see if the data agrees.
StanfordTorusConcept
A Stanford Torus Concept from nss.org
     This is often used in things related to space technology. We lack the funds to be able to field test everything we wish to blindly with no fear of consequences, so usually testing will be done on computers beforehand. Additionally, the fluctuation of variables, such as speed and direction, must be constantly analyzed by computers in space so that satellites, space shuttles, and probes have faster access to relatively accurate data. For example, a proposed design for a space habitat called a Stanford torus would take extremely large amounts of computation in order to create an experimental replica in real life. For those who don't know, a Stanford torus is a space habitat that has a ring that people could live in. This ring rotates to provide artificial gravity via centrifugal force, and a network of mirrors in the center of the ring would reflect sunlight to the ring. This would be impossible to create with our current resources, but a computer is able to create a virtual, experimental version of the torus through computation. As you can see, Computers were a huge advancement in technology and help us in advancing in a multitude of other areas, such as the field of Science.

Thursday, December 5, 2013

Computer Graphics: What is it?

     Put simply, computer graphics is the representation of an image using graphics hardware and software on computers. Anything that is not text or sound from a computer screen is generally considered to be computer graphics. The image is stored as data, and when a user wishes to view it, the computer converts it to an understandable form using its own graphics capabilities. There are many styles of computer graphics, and they can be animated as well.
ComputerGraphicsDolphin
Image from ExtremeTech.com
      As depicted above, computer graphics can involve smooth images or pixel art. Movies that you view on a computer is stored as data that the computer deciphers into a series of images that you can understand. A picture on a computer is stored as a chunk of data and when you open it the computer draws it for you using the data as a guideline. 3D figures are also part of computer graphics and may use animation as well. All of these use similar techniques of storing the image information in a file and using graphics hardware and software to draw the image using the data stored when a user wishes to access it. Images can then be manipulated and changed using programs like Adobe Photoshop if the user wishes to do so. Computer graphics is constantly getting better and eventually, we will probably have images and movies that parallel real life, made entirely using computer graphics imaging.
CarCGI
Image from the Game: Forza 5

Sunday, December 1, 2013

Communications and Security: The Importance of Using Secure Passwords

    Did you know that the top three most commonly used passwords are password, 123456, and 12345678? These are all extremely easy for a person to guess, and they are even easier for a program to crack. Imagine someone getting access to your bank account because of a weak password or someone being able to access your email and impersonate you. Even with the fail-safe mechanisms present today, there is no guarantee that you will be able to protect your data before it is compromised. Today's blog will talk about password security and how to make sure your personal data is well-protected.
PassLockImg
From Spectrum.ieee.org
     There is a misconception that a password that is harder to remember is harder for a program to crack. For example, the password D0g............... is more difficult for most programs to crack than the password PrXyc.N(n4k77#L!eVdAfp9, even though the former is much easier to remember. This is because there are more characters in the dog password, creating a larger amount of possibilities that it could be. It also contains at least one upper case letter, one lower case letter, one digit, and one symbol. Likewise, the password Tr0ub4dor&3 is generally considered to be weaker than the easily remembered password correcthorsebatterystaple, as a result of the larger amount of entropy generated by having more letters. However, I recommend having at least one upper case letter, lower case letter, digit, and symbol in your passwords.
xkcdComic
Image taken from xkcd
     Knowing to make longer passwords instead of more complicated ones is an easy way to create more secure passwords. This doesn't mean that your password is foolproof though. It might be compromised eventually, possibly through the website's password database being hacked or some other circumstances, and thus you want to have different passwords for each of your accounts. You can use similar passwords for each with something related to the website url behind it. For example, an easily remembered password could be Dog...............15blogspot for this site. This way, if one of your passwords is revealed, your other accounts should be relatively safe. Go change your passwords now and then come back to read my other posts!

Thursday, November 21, 2013

Artificial Intelligence: How to Recreate the Mind

     An artificial intelligence, or AI for short, is an intelligent machine or program. When I think of AI, I think of an android that thinks and behaves like a human. Is creating a replica of human intelligence possible? Well, an actual dynamically learning artificial intelligence is probably far out of reach of our current technology, if it is reachable at all, but an artificial intelligence functioning using logic and "learning" is probably possible to make today.
TwoAndroids
Android Concept Image from ImmortalDC.com
     In order to make an artificial intelligence, one must program every possible stimulus that the AI should react to and program various reactions depending on what the AI is exposed to. These can be chained in sequence, so if an AI is exposed to certain things in certain orders, it may respond differently than if it was exposed in a separate order. This is extremely difficult, because in the worse scenario, it can have an infinite number of different if statements in order to program a truly completely reactive AI. For example, if I had two stimuli, say seeing the color red and seeing the color blue, I could program a robot to point upwards if it sees red then point downwards when it sees blue. However, I can also program it to point to the right if it sees red after blue, or point to the left if it sees blue after red. Additionally, I could program things for the robot to do if it sees red twice in a row, or if it sees red then blue then red again, and so on. This means that even for this simple two stimuli example, there is an infinite amount of responses that the robot could have. To put this into human context, imagine that someone prods you in the arm with their finger. You might let it slide the first time, but each time they poke you after that you will react differently, probably with more and more irritation each time. How fast you get angry and how you respond would probably be determined by things that have happened previously in your life, maybe things in your childhood, or even things that have happened within the past hour. Now imagine how difficult that would be to program in an AI.
AIWalle
Image from Disney's WALL-E

     As you can see, while artificial intelligence is a very interesting concept and idea, one that functions like the human mind is currently way out of our reach. It would just take much too long to program and be far too complex to finish, especially since we aren't even entirely sure of how the human mind functions. However, this isn't to say that we can't have simpler AI's in the modern day or near future. We can already program machines that respond to different stimuli and "learn" as they are exposed to stimuli. There is an AI that is able to successfully crack CAPTCHA codes by learning from its failures and adapting. Nevertheless, this is just an illusion of learning, the robot isn't actually adding any new code to its system using free will, it is just following pre-programmed responses to stimuli that have been coded into the software. I cannot think of a possible way for a robot to update its own code and program new ways for itself to behave, and that is the true meaning of a dynamic learning AI, something that is not achievable with current technology, if it is possible at all.

Sunday, November 17, 2013

The History of Computer Science

PunchedCardExample
Punched Card from fao.org
     Today, I will be writing about the history of Computer Science. This history can be traced back to 1942, with the inventor of the difference engine, Charles Babbage, and Ada Lovelace, who designed the first computer algorithm. Originally, programmers began with punch cards and plugboards and coded in binary, meaning that only 0's (off) and 1's (on) were used. Once computers became more mainstream, new programming languages were invented in order to make it easier for programmers to code complicated tasks.
PicturePlugboard
Plugboard from columbia.edu
     From the images, you can clearly see why they would need to invent new programming languages. Imagine trying to write an essay using punch cards or those plugboards... coding would be just as hard, if not more difficult, than that! These languages made it far more practical to program complex algorithms. Some of the earliest languages included Fortran (used at IBM), Lisp, and Cobol. Nowadays, we have relatively simple to learn languages like Java and C++, which allows ease of access for a wider portion of the public. With more people working on computing and programming, more awesome software can be developed.

     In modern times, we are using Von Neumann architecture, which was used for the construction of the EDVAC computer in 1952. Since then, almost all computers have used this architecture. However, this architecture is beginning to reach its limits, and in order to advance in computing power, we must begin to search for a new way to design and implement computer systems. Additionally, according to Moore's Law, the number of transistors on a chip should double every two years. This means that because we can only shrink down to the size of an atom, eventually we will reach a point where we cannot possibly advance more in computing power using current designs. Thus, we must continue to seek new, more advanced ways of obtaining computing power, such as having multiple cores in a computer. In the end though, we must always remember to give thanks and remember things such as IBM's punched cards and the Von Neumann architecture, so that we can reference the impact and use of these things in the future.

Sunday, November 10, 2013

File Sharing: Useful but Easily Abused

     Today I will be writing a little bit about file sharing. File sharing is an incredibly useful, easy way to send files and data from a device to other ones. This can be done through email attachments and social networking sites that allow you to send files such as Facebook for small files, and torrent software like Utorrent through sites like Torlock or file hosting sites such as Rapidshare. I personally enjoy using Dropbox to transfer large amounts of data from one computer to another. Using these sites, a person can easily send photos, music, code, etc., to other people. Sounds reasonable enough right?
FileShareDL
Download image from wired.co.uk
     However, many people are concerned about the use of file sharing to illegally share copyrighted material. This affects many businesses, including the film, music, and game industries. This is especially harmful to small companies that do not generate very much revenue, as they will lose a large percentage of their profit due to "pirating" of their software, but will harm larger companies a greater flat amount. For example, if I am a company who managed to sell 5 copies of a game and 5 copies get stolen through file sharing, I am losing 50% of my profit, but if I distribute a blockbuster movie that sells 500,000 videos and get 5000 stolen, even though I am only losing 1% of my profit, I am losing a greater amount of money. I believe that this shouldn't make file sharing illegal, however, as file sharing has great uses that are not illegal, such as . Also, studies show that small to medium range films actually benefit from file sharing because it is a form of advertising and more people will know it exists.  Don't get me wrong, I agree that the stealing of copyrighted material should be punished, but just because some people choose to use file sharing for malicious purposes doesn't mean that it should not be allowed. Imagine a time where you were not allowed to transfer files from any device to another. That would be a dark day indeed.

Sunday, November 3, 2013

Data Structures: Ways to Store Information Digitally

    Today's article will talk about some of the types of data structures that are used in Computer Science for storing data virtually. Data on the web can't just be stored like regular notes. The equivalent of writing some information down on a piece of paper would be to record the same information in a word processing document, such as Microsoft word, or a generic ".txt" file. However, when you have to store incredibly massive amounts of data, different methods must be used. For example, let's say you have trillions of names written down on a stack of papers and they have phone numbers listed next to them. If they are unorganized, it would be nearly impossible to find the one that you are looking for. Using computers, we can program algorithms that search through the information easily by storing them in different types of data structures, such as an array, or a more complex structure, like a binary tree.
JavaArray
Thanks to learn-java-tutorial for this array image!

     Certain data structures are more efficient at doing different things. For example, an array is very good at cycling through a list of things that you want to look through. For those of you that don't know what an array is, it's an arrangement of objects in rows an columns. Here is a youtube video explaining it, for those of you that are more visual learners. The most basic array would be a line of data, something one-dimensional like writing names down in a column. More complex arrays can be two-dimensional, something equivalent to writing names and numbers next to the names in a column, or even 3, 4, 5 dimensions. The only limit to the amount of dimensions an array can have is the power of your computer or integrated development environment. Another type of data structure is a binary tree, which is useful for searching through information that can be sorted by value. The tree consists of "nodes" and each node has a value and a reference to a left and right node. The left reference node will always be less than the node you're looking at and the right one will always be greater. This means that each level you go down the tree, you are cutting the searching time in half (assuming that the tree is balanced and both sides are filled).
ExampleBinaryTree
Binary Tree image from StackOverflow.com
     In addition to arrays and binary trees, there are many other data structures, such as hash tables, graphs, and other types of trees. Each one has its benefits and drawbacks related to efficiency in runtime, storage size in bytes, adding/removing elements, searching, etc. Programmers must always think about which data structures would be best to use to accomplish certain tasks, and implement them efficiently. I hope you learned something from this post about data structures and if anyone has any questions or comments, please reply below!