Sunday, November 24, 2013

Artificial Intelligence : Bringing Games to life.

    Of the many fascinating areas of computer science non are more mysterious than that of Artificial Intelligence.  Coined A.I, artificial intelligence is the ability for a computer to make decisions based on previous data, in other words learn.  Since research has started there have been many useful applications which A.I has been used for.   One of the main applications A.I is used in now is for video games.
   Artificial Intelligence has been a major revolution for video games.  In the begginning video games were either played with two people separately controlling a character (or object) and any computer opponent would be hardcoded in.  Due to advancements in computer and the study in artificial intelligence now games are able to learn as they go.  Games use A.I to dynamically control or even create characters that can even have personalities which they gain from interaction with a human character.  AI. gives computeres the ability to competively compete with human players creating a challenge and better experience for the players.
  Implementation of computer A.I is a fascinating topic.  Often A.I is simulated using graphs and recursion calls to them.  Decision trees are created which the computer quickly traverses and finds the best situation for the given situation.  Since these trees contain knowledge from before and are searched and acted on so quickly it creates the illusion that the computer is thinking for itself and  thus learning as it goes.   
  Artificial Intelligence has many uses in today's society.  Non are as fun as video games though !

Sunday, November 17, 2013

History of Computer Science Every Changing Computers



Computer Science, the theory and methods of processing information in digital computers, has been a growing field since its development in the last century.  Since the introduction of the first computers, there have been exponential advancements in the power, speed and availability computers.  These advancements have come from two main areas.  The first area is the improvement of hardware, the other advancements in software.  The evolution of hardware is greatly due to Electrical and Computer engineers, while the advancements in software are largely due to computer scientists.   While the advancements in hardware allowed more people to purchase computers, it was the advancements in software that redefined the computer experience.  

Computers started out as tools only available in universities for researchers who needed to make large calculations.  Today computers are considered a necessity for every home.  This idea that everyone needs a computer is very recent in the grand scale seeing as most computer where made available to houses in the last 25 years.  The familiarization with computers is due to computer scientists constantly making computing easier to understand normal users.   Once upon a time, users had to manually communicate with the computer via a terminal and run commands. Now almost every application has a graphical user interface which has nice shiny buttons which anyone can understand. 

My first introduction to computer science was my earliest encounters with a computer.  I used a computer mainly for word processing and the occasional video game.  How a computer worked, I had no idea.  I was fascinated by computers considering them black magic because I could not comprehend how the first computer was made.  Many years later, after spending years studying the subject it makes sense to me but I am no less amazed.  The history of how a computer started as a theoretical concept of Boolean algebra to the development of high level languages such as Prolog which can deductively reason for themselves show the dramatic amount computer science has progressed.  

Today advancements in computer science continue to pave the road for the future of programming.  The advancements in the internet have changed the way people use a computer once again.  Now everything is done on the cloud.  Advancements in computer science areas such as Database have allowed websites such as Facebook to be created thus changing the way people communicate.  There has been a paradigm shift away from local computing and towards that of the internet.  Computers now are mainly used as an instrument to connect people via the website to communicate and look up data. 

The history of computer science continues to be written.  My goal in life is to look back and say that I have contributed.

Sunday, November 10, 2013

File Sharing: The death of the Floppy Disk.



Files, a collection of related data or program records,   are the foundation of modern day computer programs.  Without files saving previously calculated information, computers would have to generate and process information from scratch every time they are ran.  In the past files were commonly stored and shared on floppy disks, requiring a physical handoff of a disk from one person to another to share data.  As technology began to develop floppy disks started to be displaced by CD-rooms which could hold more data and finally USB thumb drives are now the standard for physical file transformation.  While sharing files over a physical source such as a USB or CD continued to grow they like the Floppy started to become cumbersome in comparison to new online file sharing. 

Today file sharing is mainly done via the cloud.  Sources like Dropbox and Google Drive make sharing files between two parties extremely simple and user friendly.  Anyone with an internet connection can transfer large amounts of data via these cloud sources.  Other sources such as torrents which send files via multiple hosts make it easy to transfer huge files.  Even emails are able to send up to 25 megabytes of data in attachments.  That is equivalent to about 250 one hundred kb floppy disks.  Image how long it would take to send 250 floppy disks and then manually upload them to a computer compared to the minutes it takes to send an email and download the attachments.

With the new technology sharing data has become a field that more and more computer companies are pursuing.  Big data and file sharing is useful for thousands of applications and used by people throughout the whole world.  Being able to quickly send files as well as being able to send a large quantity of files has become a huge focus for companies.  What started out as floppy disks holding under 100 kilobytes of data has turned into hard drives holding terabytes of files for today’s file centric world of computing. 


Sunday, November 3, 2013

Data Structures: Abstracting Data



One of the most important concepts in the field of computer science is that of abstraction.  Data Structures are a great tool in abstracting data.  Data structures are fundamental for many for high level programming languages giving tremendous power to programmers with easy use.   By abstracting data types such as Integers and Strings into a structure, programmers are able to easily manipulate and access data.  Often overlooked, Data Structures are one of the hardest concepts to grasp at first, but can be one of the most rewarding.  Choosing the proper data structure can make solving certain problems trivial while choosing the wrong data type will make them cumbersome if not impossible.  Mastering the art of choosing a data structure as well as being able to build one’s own, is a highly important skill, one which has greatly helped me in my later programming classes.

To me, the coolest thing about Data Structures is how much they can improve performance.  Not only do Data Structures organize data in an easy way, they also optimize the way one accesses (adding and retrieving data) from them.  Using the proper data structure can tremendously improve a programs performance.  A good example of performances based on choosing the right Data Structure is insertion into the front of a Data Structure.  The class vector is a very useful C++ data structure which acts as a dynamic array.  Inserting into the front of a vector though is a very time consuming task because it requires all the contents to be shifted.  I instead one were to use a linked list, they could insert into the head of the linked list in constant time and not worry about shifting the rest of the list.

The most common Data Structures are ArrayLists , Stacks and Queues.  They are very useful in programming and all have a specific function that can be used for certain problems.  Of the more advanced Data Structures there are the trees.  Binary Trees, B+ Trees and Heaps are all very advanced Data Structures.  These Data Structures are specifically made to being able to sort and access large data in a quick and easy fashion.  Most high level languages like C++ and Python have many classes and types built on these Tree types.  They allow the user a very complex set of tools, but present it in an easy way, which is the idea behind abstracting the data.

Sunday, October 27, 2013

Hacking: How a misunderstood word becomes its own field.

Of all the words computers have popularized, none has been as misinterpreted as the word Hacking.  What started out as a slang used by programmers at colleges, "hacking" was nothing more than programmer jargon for having fun.  Today, thanks in large to Hollywood and the news media, hacking's connotation has become that of cracking, which is using a computer to gain access to something illegally.  What started as a harmless word, hacking now represents a malicious area of computer science. 

I find hacking to be a fascinating subject in the field.  Some of the biggest hacks in history have been great lessons for up and coming programmers.  After all a hack is nothing more than one person exposing a weakness in another program causing it to misbehave.  Because of researching hacking on my own time, I have learned how to make my programs secure so to not be vulnerable to common attacks.  Attacks such as Smashing The Stack, which is common in C programs when the original coder is careless with how they read in input.  The best solution to someone messing with your programs stack is to use safe functions or data structures that prevent the stack from being misused.  Not all hacking is considered bad, White hacking, is done in a manner of sport to find the weakness but rather than exploit them, warn the programmers of these flaws. 
Hacking today though is most commonly thought as of a completely negative aspect.  

 Organizations such as Anonymous which use hacking as their main tool have gained large media attention.  Anonymous have hacked into many websites using the hacking methods to not only take information but also to disable operations of websites. 

Not all hackers are evil, not all hackers are crackers.

Sunday, October 13, 2013

Open Source: Free to Share, Free to learn, Free to operate.



One of the coolest things I discovered my freshman year in college was a new operating system for my computer, Linux.  Having grown up a Windows user I was only ever exposed to the dogma of proprietary software.  In my complete ignorance I believed that all software was owned by the companies such as Microsoft, Apple, and  Adobe.  In my search for programs I looked to these mentioned names paying ridiculous amounts of money to use their products.  This all changed thanks to a certain Penguin.
 
Running a Linux system for the first time left me in quite a state of shock.  All the software for it was free to use developed and supported by the community!  Problems in  this free software were constantly being looked after online, and the source code was available for anyone who wanted to add to it.  I started learning about Open Source and the projects such as GNU which stress free code. GNU in particular makes it a binding contract with users allowing them to use their software for free as long as the software stays that way.

Today, after seeing my fair share of code I now understand the importance of Open Source.  It pushes proprietary software to stay fresh or be replaced.  There are some disadvantages to Open Source though.  A program is only as good as it is maintained.  Where companies will maintain their legacy software, when an open source project loses the support of the community it can become useless.  An example of this is libraries for programming languages.  If the languages keeps updating but a library does not stay maintained, the library become obsolete and no longer functions properly with respect to the new language. 

In the end, I believe Open Source software is pivotal to the success of computer science going forward.  Open Source programs have been instrumental in my education as well as many others. Offering everything from languages like Java, to free operating systems such as Linux, Open Source ideas have changed the way programs and knowledge is shared.

  As an end note, as important and cool as I think Open Source projects are I still believe that companies should charge for programs on the basis that I want to code for a living and I hope to get paid for doing it!