11 December 2013

Scientific Computing: Gateway to Human Psychology

A man experiences a virtual environment in the University of Illinois at Chicago.



Computers are powerful tools.  Computers are known for their mathematical proficiency, and have become a staple of engineering.  However, while computers can use advanced mathematics to model the laws of physics, chemical compositions, and manmade structures, computers can also help us learn more about something that is partially intangible—the human mind.  There are two sides to using computers to study the human mind.  There is the neuroscientific side, where the physical activities of the human brain are recorded and analysed, and there is the psychological side, where computers are used in experiments to study the behaviour of human subjects.

While neural computer science is outside of my own field of concentration, it still plays an important part in research.  Computers have reached a point where they can create a map of neurons of a person’s brain.  This is usually achieved by fitting a subject with a cap with neuron sensors, which then records the brain’s activity to a computer while the subjects undergoes an experiment.  From this information, the computer can generate a model of the subject’s brain.  This helps neuroscientists find out how different parts of the brain react to various stimuli.

Psychological computer science, on the other hand, is a part of computer science in which I am interested.  Psychologists can use computer science to study the mind of children by letting the children use interactive software, such as educational video games.  Psychologists can then observe what choices the children make.  In one study that I looked into a couple of years ago (and whose source I cannot link, because the academic journal is not publically viewable), a group of researchers visited an elementary school class and let them play an educational video game.  The researchers noticed certain behaviours, such as female students asking other classmates for help in solving the game’s puzzles, whereas male students tried to solve the puzzles on their own or use the in-game hint system.

Psychological computer science can also be used to study adults via virtual reality.  Dr Jeremy Bailenson, a Stanford University professor who studies virtual computer interaction, went into great detail on virtual reality during his 2011 lecture [1].  His virtual reality experiments range from having subjects walk across a virtual wooden plank, to changing the subject’s race or gender in the virtual world.

From brain scans to virtual identity experiments, computers have a place in the cognitive sciences, as they do in all sciences.

8 December 2013

Computer Graphics: Why Style Matters

a simple illustration of me looking at a C# program.


A little over a week ago, I had written a thank-you letter to a programmer whom I job shadowed, as part of an assignment for one of my university classes.  I wanted to make my letter a bit more personalized, and I wanted to try out some of the Adobe software that I had received earlier in the year.  During my job shadow, the programmers invited me to participate in a C# programming exercise, so I decided to draw in Adobe Illustrator a simple illustration of me in the C# session and include it in my letter.  The illustration itself is simplistic, due in no small part to my elementary drawing skills, but the illustration’s style does say something.  The illustration, for example, lacks colour, so that it does not distract from the rest of the letter.  In addition, while the image is not incredibly detailed, its cleanness is appropriate as a letter illustration and shows that I put in a moderate amount of effort into showing appreciation.

A lot of visuals are made with computers nowadays, and it is justified; from making illustrations or diagrams with simple shapes, to editing photographs, to animation, computers have shown themselves to be versatile.  For many media, using computer graphics is optional; film, for example, can just as likely be done in live actions or with hand-drawn animation, although in the case of live action, advanced visual effects are more likely to be computer generated to save money.  Video games, by virtue of being played on a computer (including game consoles) in the first place, almost always have computer-generated graphics.  This is where the versatility of computer graphics comes into play; computers have multiple ways of rendering visuals, ranging from realistic rendering to more cartoonish cell-shading.

With the amount of tools available, I sometimes see video games not make the most of them.  One of the more commonplace phenomena is known as “Real is Brown”.  A lot of modern action games, in an attempt to look realistic, use muted grey, brown, and beige colours.  One video from Extra Credits points out that in doing so however, the drab pallet conflicts with the action-oriented nature of these games and can potentially ruin the game’s intended tone, citing the forgettable 2008 video game Golden Axe: Beast Rider as an example [1].  Not every game needs to be as saturated as a cartoon, of course, and no amount of anti-aliasing, texture filtering, or shading will make up for poor aesthetics in a computer-generated visual.  Besides, the sheer amount of computer graphic effects is too much for one blog post, and in the end, computer graphics artists need to use their intuition to make things “look just right”.

1 December 2013

Communications: The Mystery of the Strict NAT

You may not be able to join certain Game session or communicate with other Players while playing. Average matchmaking wait time will be adversely affected.


After spending a pleasant Thanksgiving dinner with my extended family, my parents drove us back home. Exhausted from the outing and from the school projects that I had been working on earlier in the week, I wanted to settle in, lie back, and play video games so that I would be refreshed for next week. I set up my gaming system, loaded up the newest Assassin’s Creed, started my first multiplayer game session … and I was immediately disconnected. After being booted back to the game menu, I saw a worrying red circle that said, “NAT”.

According to the game, my NAT rating was “strict”. Because of this, I could not be matched with other players correctly. What did “NAT” mean, and why did this have to get in the way of enjoying my game? Well, I spent the entire rest of the night looking up networking guides and troubleshooting in agony to find out.

To make a long story short, I found out that the problem had to do with a new Internet modem that my father and I had recently installed. Our new modem had a built-in router that could wirelessly connect to computers, game systems, and other electronics. This built-in router had a firewall that automatically blocked certain ports. From what I understand, these ports are points in my home network that are used to send information to and from the Internet. The ports that my video game uses to connect with other players are some of the ports that the new firewall kept closed.

I eventually found out how to configure the new router and lower the security of the firewall so that the necessary ports were open and could transfer information completely. After doing so, the NAT circle in my game went green, and I was able to play without further interruptions.

Open NAT is the optimal setting. You will join Game sessions and communicate with other Players without experiencing any problems.

After thinking things over, it makes sense that the firewall behaved the way that it did. Most people only use their computers to browse the Web and do everyday tasks. For them, it would not make sense to keep open a port that only video games really use, since doing so can leave them vulnerable to hackers. In the end, learning about ports and how software, such as games, interacts with them reminds me of the networking security that some of us take for granted.

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.