Wednesday, December 18, 2013

Computer Graphics

Computer graphics are a blatant example of how much computer technology has improved. The difference between a LCD monitor and a CRT TV is huge. If you show a Ps1 game and a Ps4 game it is astronomical how different the games are. Caring this between the watch design of a watch created  being 20 years ago and the a watch being created today, the overall feel is pretty close. There is certainly differences but for the most part, a watch's basic functionality and design hasn't changed that compared to the basic functionality and design of a graphics card or integrated graphics card.

Here is a quick comparison between the IBM 8514a (yes, IBM made graphics cards!!!)
And the Nvidia Titan.
The sheer difference between size and power is clearly shown, there wasn't even fans on the one of the first graphics cards. The architecture and chip design has made major improvements as well as the general audience buying computers has improved. Allowing for the technology to improve at an amazing pace.

Sunday, December 1, 2013

Computer Security and Cryptogrophy


Computer security is an ever increasing field. With the recent boom of corporate hacking, nation state hacking, and organized criminal hacking and interception cryptography is a big deal.

So where do we start? How do we protect our data? What are viable means are there and how do we go about do we go about researching these topics?

There are a few key things to consider in building security.
1. What are you protecting?
2. Who are you protecting the information from?
3. How much do you care about protecting the information?
4. How much do you plan on investing in terms of time/money/personnel/ and future expenses?
5. Can you do anything once you've detected that information is no longer secure?

If you are trying to protect your information against people who are spying on you with binoculars and already are tapping your line between you and your internet service provider, I'd recommend trying to change locations then setting up some form of PGP(Pretty Good Privacy) encryption and remote login of that computer.

If you are worried about someone taking your hardrive, you probably want to encrypt your hard drive and have the encryption key written down somewhere far away or far on another device that no one knows about.

As far as standard communication, and files, I'd recommend using a PGP encrypted chat client and encrypting your hard drive as well as not downloading or installing any non libre software. As the likelihood that proprietary software is tracking you in some fashion is extremely high.

Sunday, November 24, 2013

Artificial Intelligence


Artificial intelligence is an interesting concept. It isn't very practical without some form of network and variant. What that variant is, is an interesting question and interesting guess.  The animated series Ghost in the Shell: Stand Alone Complex uses an interesting approach. However, the definition of artificial intelligence is rather difficult.

Try looking for a definition and you will most likely find something similar to this:
"the theory and development of computer systems able to perform tasks that normally require human intelligence, such as visual perception, speech recognition, decision-making, and translation between languages."

This is a pretty decent definition. However, it will need to be modified if we ever end up being able to create self-aware programs.  The likelihood of that happening anytime is rather slim though. A good example of AI are programs found in video games. Video game technology has made tremendous contributors to the advancement of AI. One of the large reasons for this is because of the large amounts of money poured into games to make them be more realistic and challenging.

Programming the AI of a fighter or a shooter can be difficult, their needs to be a good balance of how the AI reacts and preforms actions against the character. Finding the balance of difficulty and fairness is something very difficult and takes a lot of test time and algorithm crunching.

Additionally, game provide the capability for large amount of feedback data from users. This allows for big data calculations as well as great statistics in how code should be modeled for the general user.

Friday, November 15, 2013

Sharing is Caring, privacy, content filtering, and applications.

Welcome to the information age, where the governing principles of the world are undefined and misguided. Them being misguided without being defined is rather odd without thinking about the underlying factors. Big business has played a large part int his as well as storage capacities being incredibly cheap. The internet is a wonderful and dangerous place. Anytime you send/share information with another user, that information has the possibility of being read, tracked, traced, copied, and modified. This is a much larger threat then before. The primary reason being that storage space is incredibly cheap and getting cheaper, and that documents are generally rather small.

With everything said, there are times when you want to share. There are plenty of useful tools for this, but remember that when you use a tool that you do not own, you are at the full discretion of the provider. A few lovely tools are: Dropbox, Google drive, Idrive, and Skydrive.
Out of all of these. My favorites are Google drive and Dropbox. Dropbox is rather nice because it cloud storage is the only thing that they do. Additionally, it is very easy and is not email specific. Additionally they have a cool feature that provides you with additional space based on the number of people you invite, to a maximum I believe of 15GB's. Google drive is also pretty neat.  It has a lot of nice sync features, additionally it has a very nice sharing features making it easy to share with who you want. 
However, it is a bit of a pain to setup on GNU/Linux and doesn't work all that well even after you setup. Sharing is both a gift and a curse. It is easy to share, and because it is easy to share things that you didn't want shared can easily find themselves on the web. After something has been on the web and has been viewed by many different people it is almost impossibly to stop people from sharing the information. 




Thursday, October 31, 2013

Data Structures and Algorithms, what they do.

Data structures and Algorithms are an interesting subject. Data structures and the understanding of implementing and when to implement particular data structures are what allow for complex programs and applications to be created. Choosing a data structure for an algorithm/program effects everything from memory allocation, run time, search time, insertion time, and code re-usability. Typically the ideas behind build reusable blocks of code isn't hard, however when choosing data structures it can often make it rather difficult. Have your program work based off of user defined types can drastically change your code and often make it longer and harder to program.

Data structures are exactly what it sounds like. They are structures for holding data. Most data structures are represented with either a cell(http://3.bp.blogspot.com/-o0HXsxh1O-s/TzUzB7a0wlI/AAAAAAAAAZ0/OC03E2t_mBM/s1600/selection_sort_00.gif, example) or with circles often refereed to as nodes. (http://blog.cogswell.edu/wp-content/uploads/2011/04/binarysearch.gif). These structures drastically effect the performance. For example, choosing the wrong data structure in an search algorithm can often change the search time of n from nlogn to n^2. However, space can often just as important if not more important than speed.

A few common data structures are Linked Lists(The most common being Single linked List, double, and circular), Tree's(Binary Tree's, B-Tree's, Red-Black Tree's, 2-3 Tree's), Array's, Hash Tables, and Stacks.

Algorithms are logic that provides some change of state using data structures. Algorithms are generally designed being system and language independent and then are implemented to fit specification. The final result can often look very different then the initial rough draft.


Suggested Reading:
http://en.wikipedia.org/wiki/Linked_list
http://en.wikipedia.org/wiki/List_of_data_structures

Friday, October 25, 2013

Hacking, what and why?

Hacking is an interesting subject and when used, should have some sort of context associated with it. Most non technical people believe that hacking is some form of malicious activity. However, that is not is not accurate.  In the words of Richard "hacking means exploring the limits of what is possible, in a spirit of playful cleverness. Activities that display playful cleverness have "hack value". This is a decent and interesting definition. A great example of this are hackathons. Hackathons are where numerous people are invited and attend a coding event to produce new projects.

With that said, there are many different forms of hacking. Particularly where it involves security. However, it is best to remember that hacking and security are two separate functions that have some common ground. With that said, there are a few different common security hacking classifications. 
These include Black hat, White hat, Grey Hat,  Hacktivist and many more. (http://en.wikipedia.org/wiki/Hacker_(computer_security)). The most common public interpretation of hackers are black hat's. Black hats are hackers that disrupt computer security for personal gain at the expense of another. The hacking community has a group that counter acts Black hats. These hackers are referred to white hat's. Hence WhiteHat security's name(https://www.whitehatsec.com/).

The motivations of each hacker and why they do what they do is complex. It can be as simple as for personal financial gains, to respect and cleverness , to being an activist trying to prove a point(Hacktivist). (http://en.wikipedia.org/wiki/Hacktivism). Hacking can be a fun and interesting activity, however it has consequence. Whether it is simply playful hacking, for example going to a hackathon and building a neat app and using resources that fall inline with the hack, to hacking a military base. All hacks require the hacker to tonight about potential consequences. Hacking a military base has some very obvious merits and consequences, but the consequences and merits of hacking at a hackathon are not always obvious. For example, if you end up building a hack that you wish to make money off using a library at the hack, who owns the hack and what roll does money play?

Sources / Additional Reading:

Friday, October 11, 2013

Open Source: Pro's Con's and the in between



Open source is the sharing of source files. What this means is that if you compile the source or interpret the source you should be able to predict what is going to happen. With that said,  it is not always true.
Also there are many problems that arise between proprietary systems and open source systems. Knowing the strengths and weaknesses of both are key to being a good developer or at least understanding what you are talking about. 

These topics range from security, data retention, what you see is what you get (WYSIWYG). One of the great things that open source provides is that it allows for many different people to look at your code. This helps finding new bugs, optimizing algorithms, developing awareness about your project, and allowing people to understand what your project does. 

Some of the pro's of a proprietary system is that it easier to make money or a business model off of it. Additionally you do not have to worry about competition taking code, modifying it, and selling it. You can sell binaries without as a contractor such that if there is a problem with the code they have to either reverse engineer the code or rehire you.

Looking at the grey, there are controversial topics, assumptions, and many other things to consider about what goes on between the two. With open source projects, most of the time people are encouraged to expand upon the project. Usually a group or person oversee's new code that is submitted and incorporated it into the project. However, code does not always do what it appears to do. Additionally it takes a lot of work to look over code, decide of it works and is useful. A great example of this is the IOCCC(http://www.ioccc.org/). With proprietary systems, users and sometimes developers do not know where or what is happening to the data they are submitting. Additionally, you can not change proprietary software. The closest thing you can do is to use API's and try to add onto the project.

Opensource generally lags behind proprietary solutions. This is typically because there is a lot more money in proprietary software. Also opensource projects are often very diverse while proprietary solutions are more narrow.


Some very liberal thoughts on opensource, and why it matters:

Friday, October 4, 2013

Agile: Why, When, and Where

Programming development cycles are an interesting topic. When considering which development pattern is best for a given project. Things to consider include but are not limited to development time, the size of the development team, the duration of the project, the need for updates, and the amount of communication with the end user/manger.

Agile is a fast paced development cycle that has originated from software development/Programming. It originated because of the fast pace style of programming, the push for rapid deployment and the various difference between building a physical and digital product. I'd say the founding of Agile development came from web development where rapid deployment is often emphasized over optimization. The severity 

A few things to note about Agile development is that it is NOT always the best choice. Generally you want to mix and match different development processes and expect for things to change that out of your control.

For a large company I would recommend the spiral or waterfall method. I believe it works better because the hierarchical structure of companies allows for it to delegate tasks and it has much more trouble pivoting with something like the Agile approach. The agile approach is designed to allow change and for rapid deployment. For a large company rapid deployment is not as much an incentive as is having efficient well tested code.

In the end, methodologies and patterns are applicable but should not be strict. In business as well as programming and engineering, the need for flexibility and approximation is key. Agile is nice because it expects things are going to change, however I wouldn't design my database or an operating system using a agile design.

Links:

Friday, September 20, 2013

How to get noticed, LinkedIn a business platform

                There is a lot of noise on the Internet. I refer to noise as nonsensical non pertinent information when searching for something online. The Internet is much like a multidimensional marketplace in the sense that you can find virtual anything about if you are looking and you find a lot of things that you weren't looking for.

               Which that said, how does one break through and deliver their message to the right recipients in the right way? This is a very difficult question to answer. There are a multitude of ways to accomplish this task. Ideally you would create a very interesting custom website and update it with intriguing information that is relevant to the website. However doing something like this requires a lot of time, skill, and resources.

              However, because of this businesses have created online platforms and management systems. These platforms include websites like facebook, google, wordpress, and LinkedIn.

               LinkedIn is a website designed to be simplistic, friendly, and displays content clearly. These key features have made it one of businesses primarily outlets in finding employee's and social professional business networking. If you are looking for a internship,job, or high quality volunteer work LinkedIn is a great starting place. In in all, LinkedIn is a great platform that makes finding new potential employee's and exploring potential contacts easy and seamless.

Friday, September 13, 2013

Why QR Codes? Likes/Dislikes/ The Sha Bang?!

                                                 QR Code to my Blog
         QR codes(Quick Response, get to it later)!!!! I personally don't like QR codes, but we'll look at that later. What is there to like about QR codes? QR codes allow for large of date to be expressed in an various visual ways. You can read a lot of shenanigans about QR codes at  QR History and useful information!and by browsing the web . However let's skip to the new, the hip, and the present. Why QR Codes, where should they be? How useful are they? Why go around and about to make them? We'll talk about my view and the troubles of them later.

       First, what is a QR code? " The QR in the name stands for quick response, expressing the development concept for the code, whose focus was placed on high-speed reading. When it was announced, however, even Hara, one of the original developers of the code, could not be sure whether it would actually be accepted as a two-dimensional code to replace barcodes. He had confidence in the performance of the code, however, and was eager to make the rounds of companies and industry organizations concerned to introduce it in the hope that it would become known and used by as many people as possible."QR codes are very nice on the fly. To someone who has a QR reading phone or device it allows for the user to interact with the QR and for information to show up very quickly on the device. It is a very handy feature for getting a lot of data in a small amount of space.

     QR codes make most sense on inventory objects, on documents that are interesting but you need more information about it.  QR codes are extremely useful, they convey information quickly and can be very applicable.

      I don't like QR codes for a variety of reasons. The most obvious is because you have no context on what is going to happen when you scan a QR code. In the same way that you do now know what content a  URL(http://www.webopedia.com/TERM/U/URL.html) is going to bring up, let alone a shortened url. Additionally, they generally take up a lot more vertical space then a link. A lot of companies have no tact as to where they how up. QR codes are very visual, and look terrible in most cases. Additionally the artistic displeasure or laziness is often larger than my prospective benefits from accessing the QR code. QR codes in terms of advertising is generally a turn off. It doesn't have the same grasp of aesthetics or immediate information, while QR codes for an application tool are sometimes useful. Balencing how to go about making a successfully viewed QR code is difficult. QR codes without context, need, or surrounding information is simply noise mixed within boring advertising.

Sources:
http://www.qrcode.com/en/history/ 

Friday, September 6, 2013

Social Media and Security

Social media has made a huge impact on the world. It allows users to connect with one another in various ways such as chat, videos, music, and much more. http://en.wikipedia.org/wiki/Social_media has a nice description of social media and some of it's impacts. In short social media is user generated content that users post/upload onto a server onto the cloud(virtual servers).

If you are thinking about making a facebook page for a company or organization there are a variety of things to think about and watch out for in an attempt to create a positive and secure web page. Facebook is designed for simplicity and integration, it typically does not tell you what settings are for security. Facebook also has a tendency of updating their privacy policy and changing it's layout without any notice. You don't really know what is happening on the backend and where or what is happening to your data. Additionally, like most large websites, Phishing(https://www.facebook.com/help/www/217910864998172) is a problem. In addition to these problems, you have to deal with spam which is increasingly becoming a large problem on facebook. (http://mashable.com/2013/08/29/facebook-fan-pages-spam-200-million-business/).

Thursday, August 29, 2013

Introduction

Hello,

               My name is Kevin Daniels and I'm a senior at San Jose State University. I grew up in Goleta, California and attended Santa Barbara City College. I originally planned on being an Electrical Engineer like my father.  I am majoring in Computer Science, currently with a minor in Japanese. I decided to choose computer science because I loved problem solving. I very much enjoyed Algorithms and Advanced Algorithms at San Jose State, backtracking, heuristic algorithms, approximation algorithms, and branch and bound problems. I also really loved the ability to create things purely with the keyboard, as well as the analytical capabilities of my peers. Computer Science has a lot of new and exciting problems to tackle every day.

My current extracurricular focuses are exploring front end development, socket/network programming, and Lisp. I plan on developing these abilities to help my colleges in developing our video game.