24 November 2013

Artificial Intelligence: The Future of Chatterbots

An automated online assistant uses AI to help users.

Imagine that you are calling the phone line of a major business.  More often than not, you will encounter an interactive voice responder.  Your experience with the voice responder may be a familiar one—a recording guides you throughout a menu and slowly reads out each option.  You press the button corresponding to the desired option, and the recording reads out the next menu, ad infinitum.  Many people find this process to be slow and tedious.  A lot of this perceived tedium comes from the fact that such menus are counter-intuitive to natural human communication; it is in our nature to communicate specific ideas in short, easily-understandable phrases.

In recent years, however, computer scientists have been looking into systems that can recognize and respond to natural human speech, albeit to a limited extent.  Such a system would be a product of artificial intelligence, a branch of computer science that studies how machines can process and respond to input.  Some current computer programs that recognize human language include chatterbots, software that simulates a conversation with a user, primarily for entertainment purposes.  One of the most popular chatterbots is Cleverbot, who constantly develops speech mannerisms from interacting with humans[1].  Some broadcasters on websites such as Youtube record themselves interacting with Cleverbot and other similar bots, often to humorous effect[2].


Using chatterbots for professional use is still limited, however.  Some chatterbot technologies such as SitePal[3] and AlterEgos[4] have been made for use by businesses, but they are rarely seen on other websites.  Perhaps good website layout can make such chatterbots unnecessary.  Still, possibly in the future, when services become used by more people and technical support staffs become overworked, artificial intelligence software will be able to supplement human assistance.

13 November 2013

Computer Science: It is more than programming, but the rest tends to be forgotten.

“In most people’s vocabularies, design means veneer.  It’s interior decorating.  It’s the fabric of the curtains of the sofa.  But to me, nothing could be further from the meaning of design.  Design is the fundamental soul of a human-made creation that ends up expressing itself in successive outer layers of the products or service.” –Steve Jobs




Every once in a while, when my mother goes out, she talks to other people about me. Often, she likes to boast about how I am a computer science university student. If I am with my mother, the response from the other person will almost invariably be saying, “Oh, so you do programming!” to me, implying that I wanted to be a programmer. While I do, in fact, do programming for my classwork, programming was not the main reason why I majored in computer science. I should not blame the person entirely, though, because his or her assumption was reasonable.

A lot of people come to Silicon Valley and the surrounding area to get jobs in computer programming, because often, it guarantees a high salary. Many employers of lucrative jobs, including computer programming, expect their applicants to have a bachelor’s degree[1]. Many universities, however, do not have a programme for only computer programming, instead directing students interested in programming to a degree in the broader field of computer science. This means that prospective computer programmers are grouped with people interested in other aspects of computers, both in the classroom and in the public conscience.

One discussion on Stack Overflow talks about the broadness of computer science[2]. Even though programming is perhaps the most sought-after computer position, each part of computer science is crucial, and programmers would not be as successful as they are without the help of computer scientists.

The foundation of computer science, for example, is theory. Computer theory is mathematical in nature. After all, when it comes down to the actions of the processor, each instruction is a mathematical one. Many computer theorists want to make computer programs as efficient as possible by minimizing the number of operations that the computer does.

There are also software engineers. Software engineers are often the ones who plan out a computer program, telling the programmers what to do. Software engineers want to make a product that is useful for the end consumer, and software engineering reflects the business side of computer science.

We also have the field of human-computer interaction, or HCI. HCI is the psychological part of computer science. HCI researchers study how humans use technology. HCI can be applied to make more user-friendly interfaces, or in the future, be used to make more advances virtual reality simulations. Some technological pioneers like Steve Jobs embraced HCI, which he simply calls “taste”, and used it to create compelling products that resonated with consumers[3].

There are also other fields like artificial intelligence, but the idea remains that computer science as a whole is what moves us forward, not just programming. Programming without theory would give us messy, limitedly-useful code. Programming without software engineering would give programmers no direction in business. Programming without the humanities or HCI would give us bland uninspired products. These things are what makes computing a science.

10 November 2013

File Sharing: Don’t use it for new releases. Thanks.

"Yeah … I wasn’t going to buy this game anyway, so I can keep my stolen version, right?"


Imagine that you are reading an article on the Internet, and the article refers to a work of fiction that you have never heard of. You may be curious enough to look up more information on it, and upon reading the synopsis of the work, it sounds interesting. It could be a video game, film, or book. There is, however, one problem; the work has been out for years, perhaps decades, and buying a new copy is simply not going to be possible.

You could buy it used. If it is rare, then copies might be sold at a high price. If it is a video game, it might only be available for consoles that you never owned. If it is a film, then you might not have the device that the film needs for playback.

The choice in this scenario is yours to make, but in cases like this, some people turn to file sharing, where they find the work somewhere on the Internet and download from there, for free. From a legal standpoint, sharing any copyrighted content is still inadvisable. However, copyright holders have varying tolerance on sharing older works.

For video games, there are emulators that allow console video games to be played on a computer. While emulators can be legally used to play purchased games that have been transferred (“dumped”) to the computer, some people use emulators to play games that they downloaded from file sharing sites. As some emulators have gained a strong following with little opposition from video game publishers, it remains to be seen whether this practice will remain unaffected.


Finally, there are some people who also download newer works from file sharing sites, and it is these kinds of people whom I can never support. I remember some games in particular, such as the Witcher 2[1] and Spore[2], being popular targets for downloading when they were new. I even remember reading a post on the Spore forums, where a person mentioned that he downloaded Spore illegally and asked if he could keep his game if he was never going to buy a copy anyway. Other posters (surprisingly) politely told him that what he had done is already illegal and that he could not keep his game. I never replied to the post myself, but I could not help but think that he was foolish to publicly admit to an illegal act.

3 November 2013

Data Structures

A mock bank form.




On a basic level, computer programs are made up of numbers and letters, with letters, or characters, simply being alternative representations of numbers. Since creating a program that would be large enough to be useful would be tedious if everything were coded using raw mathematical operations, object-oriented programming was created. In object-oriented programming, numbers, letters, words, and mathematical operations can be grouped together to create an object. Objects can even contain objects. There are also classes, which define what types of objects can exist. Since objects hold multiple bits of information together, they can sometimes be called “data structures”.

For one of my early university assignments, I acted in a hypothetical scenario where I had to program a bank's computer to store a list of customers and use that list to authorize ATM transactions. I created a class that defined a customer. A customer was an object that had a first name, a last name (both strings of letters), a bank ID number (an integer), and a monetary balance (also an integer, representing the amount in cents).

Since all customers have this standardized set of features, a computer can use my Customer class to quickly look at and authorize the customers with no technical problems. With speed being less of an issue, the bank's computers can look up a huge database of customers quickly. Since each customer's information is structured consistently, data structures are comparable to a form that a customer fills in by hand, which also provides the bankers a consistent set of information.