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!

Sunday, October 27, 2013

Hacking: Not Like the Movies

     In modern times, the term "hacking" is often used incorrectly. Some people will say that their account got "hacked" or that hacking is malicious and should never be done. These misconceptions are far from the truth, however, as hacking means much more. The term "hacker" is used to describe either someone who breaks into computer-related systems or someone who has expertise in computer security. This means that regardless of actual technical knowledge, anyone who does one of these two things can be called a hacker.
PasswordHacking
Image courtesy of Techbuzzes.com

     There are many types of people who enjoy hacking. Some people will download pre-made scripts that hack things, while others use hacking in order to locate security bugs in programs before a live release. Tools such as bots and scripts are available to hackers through various places on the internet, but whether they use it for good or malicious purposes is entirely up to the individuals. In the days when computers were still fairly new, hackers would upload viruses or send messages to other people to gain infamy and public awareness. They would have their own special signatures so that they could spread their alias around. Rarely were these viruses highly dangerous to the computer or the personal data of the person under attack, but in more recent times hackers have become motivated by profit instead of fame. People will be paid to install malicious programs that spam advertisements on someone's computer, or even dangerous malware that records passwords for important things such as bank accounts.
     Hacking is not always done by people for bad purposes. Security experts in companies that are also known as hackers will utilize the tools of hacking to find bugs and security flaws in their systems or programs, allowing the company to fix those weaknesses in their code. Thus, it can be used protectively as well. In order to protect yourself from hackers, you should not use default passwords, use "stronger passwords" (I may talk about this in a future blog), install anti-virus software, and update firewalls. If you are really worried, you should go to a hacking forum, such as zero-security, and see what new methods people are using and how to stop them. I hope this post was informative, and if anyone has any questions, feel free to ask!

Sunday, October 13, 2013

Open Source: A Double-Edged Sword

     I was browsing the web earlier this week and found a really great article about the benefits and drawbacks of both open source and closed source programs. You can find it HERE. (By the way, I highly advise people to not click on random links like this one unless it is from a trusted site. If you hover your mouse over the link and look at the bottom left-hand corner, you can see the url. Make sure that the link that you're about to click leads to a safe website.) The author provides a very unbiased opinion and concludes that a market with a mix of open and closed sourced programs is more beneficial than a market that consists solely of one or the other. Being a supporter of open software, I was surprised by these results and now have a more embracing view of closed source software. Today's blog will provide a brief overview of these two types of software.
OpenSourceInitiative
Image from the Open Source Initiative's site at OpenSource.org
     For those of you that don't know, when a program is open source it means that the source code is available for public viewing and (generally) open for usage/modification. The opposite of this would be a closed source program, where only the company that makes it has access to the source code. An example of a closed source application is Microsoft Word, where users pay for the right to use the application. An open source alternative to Word would be Open Office, which is free (like almost all open source programs). A prominent example of a closed source operating system is Windows, while an open source counterpart would be Linux. The difference between these two would be that some Linux distributions build off of others because the code is all open source, while none of Windows code is available for other operating systems, meaning that Linux can cover a wider variety of computer architectures than Windows while Windows is much more profitable and doesn't have to worry about other companies using their code for profit.

ClosedSource
Image taken from Ludios.org
     So, what are the benefits and drawbacks of being open source or closed source? For starters, in an open source program the company does not have to pay a massive cost of production and maintenance for a private application for their use, and can instead use an open source alternative and have the public fix the bugs for them. Having open source programs allows anyone to fix bugs in the code, but also means that there is no strict regulation of guidelines for writing the code. This means that the code can be written very poorly or nearly impossible to read, which might cost the company more to fix than the cost of producing a private program itself. On the other hand, having a closed source application means that companies can have stringent rules regarding code syntax, making it easier for them to know what the code is doing, although since there are less people working on the code, logic errors may be more difficult to find. Additionally, there is quality assurance in closed source code while open source is generally free and made by people who don't wish to make money, causing it to be of a generally lower quality than the closed source counterparts. On the other hand, open source programs generally have extremely fast updates for security flaws or problems with the code, since there are so many people using it and fixing it at once, while it takes a specifically trained small team to fix problems in closed source code.
     Since I don't want to overwhelm anyone with information, I will end this blog here. If anyone is interested in learning more about open source and closed source software, then leave me a comment and I will be more than happy to write another blog post on this topic again in the future! I highly recommend that the average consumer and smaller companies check out open source alternatives to programs before deciding to buy a closed source program like Microsoft Word, but I suggest that wealthy businesses stick to a closed source implementation of things. Thanks for reading this post, and be sure to comment with your thoughts below!

Sunday, October 6, 2013

Agile: How to Plan Effectively

Hello! Today's post will discuss a method of project management called Agile software development. One may ask, "Hey Steven, what exactly is agile?" Simply put, when you are a developer and you say that you are agile, you are saying that you are using adaptive planning techniques that break larger tasks into smaller ones that have short deadlines of anywhere between two weeks to one month. This means that if problems occur, the overall plan can quickly be tweaked accordingly. This isn't something small, big companies such as IBM are utilizing this kind of planning already. The advantages to using this method is that the client will stay updated with progress of the project, while still allowing the group to attempt to do the project their own way. In between each "sprint," or short two to four week period, the group and client will discuss the status of their work and then adjust the plan. This provides a middle-ground between achieving what the client wants while allowing the group to try new things. Agile planning is very easy to use, and anyone planning a project should try it at least once. I have included a sample of the preliminary plan that my group created for the project that I am currently working on below, just in case you wanted to have an example.
exampleSprint1Agile
Example of Agile Planning
exampleSprint3Agile
Another Example

Friday, September 20, 2013

LinkedIn and Branding: The Giant of Business Networking

    Today's short blog will be about tips for making a LinkedIn account, a professional version of social networking. LinkedIn is pretty much an online version of a resume that anyone can look at, including recruiters from businesses. It allows employers to communicate with possible future employees.
LinkedInLogo
LinkedIn Logo

     While accepted as a "social network," LinkedIn is nothing like Facebook or Twitter. It isn't used for people to post what they did last weekend or what they're having for dinner. Instead, it's used as a marketing tool, a tool to market yourself. People interested in making a LinkedIn profile should make a summary that discusses what makes them unique. Since there is a limit of 2000 characters, every word counts. It should include accomplishments, special talents, and what makes the person desirable for recruiters. The summary is not the only important part, however, as every section of the profile should filled to the best of your ability. Be sure to include a professional photo of yourself, but don't make it look like a mug shot! As an example, here is my LinkedIn account.
     Big companies are already starting to transition to LinkedIn, and the amount of employers is increasing rapidly. If you don't have a LinkedIn account and are looking for employment, you are only hurting yourself. It only takes about a hour to produce a great profile, and it allows you to put yourself out there as available for hiring for absolutely free! Anyone who is looking for work should definitely think about using LinkedIn to draw the attention of potential businesses to themselves.

Friday, September 13, 2013

QR Codes: A Quick Response for a Fast Culture

     A QR code, short for quick response code, is a more advanced version of barcode that is able to store alphanumeric data. This means that they can store text, phone numbers, links, foreign languages, etc., giving them a huge advantage over normal barcodes. In modern day society, individuals are much too busy to stop by a sign and attempt to manually enter a web address into their smartphone or tablet, and they are even less likely to jot down an address onto a notepad to store for later use. However, if a user of a smartphone walks by an interesting sign with a QR code, they might decide to scan it and check out the information because of the ease of use that QR codes provide.
SoundCloudQR
Soundcloud's Example of a QR Code

     In 2012, 19% of consumers in the United States used QR codes. This is pretty substantial, meaning that creating a QR code and placing it on posters or in newspapers along with normal advertisements takes minimal effort and has a relatively large payoff. However, I personally do not understand companies that put QR codes on ceilings, t-shirts, or billboards, because no one is going to attempt to scan codes like that, so placement is very important. Most consumers scan QR codes that are placed in magazines, mail, packaging, or posters.
QRTetris
QR codes are highly customizable
     Although these codes sound very fancy, they are actually very simple. There is a pattern in the foreground that has contrast with a color in the background, whether it be dark to light or light to dark. This is the only requirement, which allows a lot of creativity in their creation and design. As long as the background and foreground have distinct colors that are easily separable by a smartphone, images and colors can be scattered throughout codes, making them look enticing to users. They are also very easy to create. Many sites, such as this one, allow you to create QR codes in a couple of minutes, for free!
ZheliuQRCode
A QR code that links to this blog!

     I hope that this post encourages people to try and make a QR code for themselves and post it somewhere for fun. Try linking to a Youtube video or Facebook page and see how many people visit it! Creating a QR code is one of the easiest and cheapest ways to promote something, and as our society starts to become more fast-paced, users will not take the time to type in website urls or search for an application on their smartphones, but they might take a second to quickly scan a QR code if available.

Friday, September 6, 2013

An analysis of social networking and security. . .or lack of when promoting your brand

     Social media has grown into a dominant force in internet networking. Facebook, widely considered to be the number one social networking site and stated to be the second most visited site in the world, is estimated to have 665 million daily active users! By doing something as simple as creating a page on Facebook and maintaining it fairly regularly, people can promote their brands and obtain immediate feedback from their customers. This is catching the eye of many businesses, and many of them have created profiles or pages in social networking sites in order to promote their brands and become more visible to the general public. In this blog post, I will explain the importance of using social networking to promote a brand.


FBLikeLogo
Facebook
     An important benefit that social media provides is constant exposure of a brand to the users. Once a person or company creates a profile, they can immediately get feedback from people who are interested in their business. This feedback can then be used to improve future products or plans. Additionally, it provides a cheap, efficient way of advertising a brand and increasing its visibility in the marketplace. For example, although only 12% of employees feel that their company is utilizing social media effectively, 30% of the employees agree that it probably improved traffic to their website. Take the social media website twitter, for instance. It has a subsection dedicated to businesses who want to advertise themselves through "tweets" on the site. A business can easily advertise new products or sales and promote its brand(s) by regularly sending out tweets.
TwitterTweetLogo
Twitter
   
      To sum things up, people gain many benefits by making use of social media, including a wide exposure to the public, real-time feedback on their ventures, and a cheap and easy way to keep customers connected. I recommend that anybody who wishes to promote a brand or just get their name out there to check out a few social networking websites and make a profile or two. You might be surprised at the results!

Thursday, August 29, 2013

import genericWelcome.*;

HelloWorld
Hello, World!
     My name is Steven, and I am beginning my fourth year of study in the field of Computer Science. I am currently lucky enough to be attending San Jose State University, right in the heart of Silicon Valley, so hopefully I will be able to find a lot of interesting things to write about.

     At the moment I work part-time for the Almaden Valley Youth Soccer League. I am an official United States Soccer Federation licensed referee and generally work in groups of three to help supervise games, making sure everyone follows the rules and stays safe on the field. This means that I work with different referees every game, allowing me to meet a wide variety of individuals and forcing me to adapt to each of their working styles.

     In this blog you will find my thoughts on a wide variety of technology-related topics as well as a few personal reviews of useful websites and gadgets that fellow programmers could find useful. I hope to provide both insightful articles for those that are well-versed coders and explanations for those who might be new to the field.

     I first learned how to code in my senior year of high school, from a friend who was trying to create a simple calculator in java. I was captivated by the logic required to get things to work properly and became addicted to the euphoria that I experience every time a problem is solved. To this day, I still thoroughly enjoy challenging assignments and I make an effort to go to "hackathon" events and coding talks to hone my skills. Although I am most comfortable in working in java, I plan to improve my skills in C and python this year and have experience in a myriad of languages by the time I graduate with my first degree.

     Well, that's enough about me, I would like to welcome everyone to my blog! Enjoy your visit, feel free to comment, and return often!