15-129 - Freshman Immigration Course
< Home
Assignment #1 (30/08/2009)
Randy Pausch was a professor of Computer Science at Carnegie Mellon University (CMU).
His prime focus was human-computer interaction (more commonly referred to as HCI)
and Design. He was known for the Alice project which he created, as well as CMU's
Entertainment Technology Center which he helped found. Pausch was diagnosed with
pancreatic cancer in 2006, he died of complications 2 years later on July 25th, 2008.
On September 8th, 2007, Randy Pausch gave a lecture entitled "The Last Lecture :
Really Achieving Your Childhood Dreams". This fantastic lecture touched the lives
of many around the world and received strong media attention and a lot of praise.
He also gave a lecture on Time Management at the University of Virginia, on
November 27th, 2007. The following are some of the points I found especially
enjoyable about his Time Management talk:
He used wit and humour to drive home important points about an important topic
His terminal illness definitely made him an authority on the subject
He emphasized the importance of making sensible to-do lists
His advice on disabling incoming Mail notifications to increase productivity
I had never noticed how much of a distraction the phone can be until I heard what Dr. Pausch had to say about it
Here are 5 links related to the late Dr. Pausch:
Randy Pausch's Official Website
Randy Pausch Inspirational Tribute Site at the Pancreatic Cancer Action Network
Time is All That Matters - UVA Today
The Last Lecture Official Book Site
Official Alice Project Website
Assignment #2 - Cloud Computing - (01/09/2009)
Cloud computing is an emerging technology that may well change the landscape of computing over the next decade.
The concept is simple; instead of hosting applications and services locally, companies can delegate the task of
running servers and the maintenance associated with it to dedicated professionals with a large infrastructure.
Cloud computing allows for the sale of storage space and processing power as commodities; rather than investing
in a large, expensive infrastructure that may only ever be used to its full potential 10% of the time, companies
are able to pay for what they use, when they use it. This tends to be a much more financially viable option as
companies never have to pay for resources that they don't use; this is not the case with the classic model, where
companies generally pay for enough bandwidth and processing power to cover fringe cases and spikes to avoid
unexpected downtime.
There are a number of different cloud computing services available today. The most popular of which is called
"SaaS" or Software as a Service. This service allows for the delivery of a web-based application to millions of
customers. An example of this is Google Docs. One of the advantages of this service is that it allows consumers
to "untether" themselves from a particular workstation; because the application is available over the web, it is
possible to access the same software under the same work environment from any machine with internet access.
Another cloud computing service under large consumption today is called Utility Computing. According to some,
this is how cloud computing started out. This is mainly a service provided to companies for internal use,
whereby if they need extended storage or processing power, it can be made available to them as a "virtualized
resource pool available network"[1]. This service may eventually replace local private datacenters.
"PaaS" or Platform as a Service is yet another cloud computing service, and is very similar to "SaaS". It allows
companies to develop and maintain their own applications but have them hosted via some provider that manages content
distribution, maintenance and backup. This option provides slightly more control than "SaaS" but is still not
as configurable as dedicated private hosting. An example of this is Google's App Engine, which provides limited
storage capacity for free, but leverages Google's massive server farm for data processing.
Cloud computing is an emerging technology, but it has progressed at a rapid pace. In a couple of years, dozens
of providers have appeared on the scene and competition between them is fierce. The move to distributed processing
may seem like a throwback to the early days of computing, but it may just be the future as well.
Questions:
At an age where many places in the world still don't have electricity at all hours of the day, how can we think about moving storage and processing to the cloud?
What implications does cloud computing have for personal data privacy?
What happens if a provider goes down? How can we guarantee good uptime? Should we just trust the provider to maintain it properly?
Can we confirm that our data has been deleted? What are the legal implications?
Doesn't cloud computing increase the effectivity of virus/hack/DoS attacks?
Here are 5 links related to Cloud Computing:
[1] What Cloud Computing Really Means - Infoworld
Cloud Computing - WikInvest
What is Cloud Computing? Youtube video
Explaining Cloud Computing - Youtube video
Computing Heads for the Clouds - Businessweek
Assignment #3 - Computer Security (07/09/2009)
Computer Security is an extremely important and broad field in Computer Science. It generally involves the protection of data
stored on computers or on media that is readable by computers, but can also include the protection of access to
certain software packages or even hardware. Computer security can therefore be said to be the "protection of information
and property from theft, corruption, or natural disaster, while allowing the information and property to remain
accessible and productive to its intended users[1]".
Data security can be achieved in many different ways. Regular backups help protect data from corruption. In order to
protect data from unintended damage due to natural disasters such as fires or earthquakes, one must perform regular
and extensive backups of the data to a remote location. Protection from theft or unauthorized access
involves authentication and authorization. Authentication involves checking the identity of the user through a username
and password combination, or a certificate, or combination of both. Authorization involves checking whether said user
has the rights to read and/or modify the data in question.
Authentication and authorization also come into play in the protection of software packages, but these are usually achieved
by checking a registration/license key and are not always user-specific (although some companies do choose to restrict
licenses on a per-user basis).
Another method for protecting computer systems involves the use of physical restrictions, such as physically attaching a terminal to
a desk, protecting it with lock-and-key or with some form of biometric scan, placing security personnel around the terminal,
and restricting time-of-access to work hours.
IT employees are not the only people who have to worry about security, however - software developers should make sure their code is
secure and not easily exploitable by hackers. Common possible exploits include buffer overflows, buffer underflows and string format bugs.
These exploits are usually used to break out of certain user-based restrictions and perform dangerous operations that would normally
require authentication and authorization - this is called "privelage escalation" and has been the focus of hackers for many years.
One must also look at the protection of computer systems and networks from the spread of viruses. Viruses can sometimes be very malicious
and result in the destruction of sensitive data, so catching viruses and destroying them before they can cause any damage is critical. Most
operating systems have anti-virus packages designed to deal with this task, employing a large database of known threats and sometimes even
using advanced heuristics to detect new threats.
Questions:
Do you think we will ever be able to stop worrying about computer security?
How does quantum computing help with computer security?
What makes an operating system more secure than another?
Should personal computers be protected just as much as business computers and workstations?
How can you code securely? How does one detect exploitable bugs in their code?
Here are 5 links related to Computer Security:
[1] Computer Security - Wikipedia
Secure Coding - Wikipedia
Computer Security, A Practical Definition
Explaining Computer Security - Youtube video
Network Infrastructure Security - Book
Assignment #4 - Robotics (15/09/2009)
Robotics is an exciting field in Computer Science. Robotics can be defined as "the engineering science and technology
of robots, and their design, manufacture, and application". The term "Robot" was first coined by the Czech playwright
Karel Čapek in 1920. Since then robots have been featured extensively in science-fiction stories and in the past
few decades, in real-world applications.
Today, the most common use of robotics is in the automotive industry, where they are used to assemble cars with great
accuracy and at very high speeds. They are also used extensively in other areas of the industry, such as manufacturing,
assembly, packing, transport earth and space exploration, surgery, weaponry, laboratory research, safety, and mass
production of consumer and industrial goods.[1]
Currently, lead-acid batteries are the power-source of choice for most mobile robots, but some potential power sources
that could be used in the future are compressed gases, hydraulic power, fuel cells and radioactive material. Because
robots include moving parts, there needs to be a way to interface between the software and this machinery - these are called
actuators and they are the equivalent of muscles found in animals, in terms of function at least. Robotic movement remains
awkward and although advances are being made constantly to improve their ability to navigate non-flat surfaces, there are
still many obstacles to overcome (quite literally in this context).
Some robots are also able to process various inputs from their environment, and for this they need input devices, which
are the equivalent of sensory organs in animals. These devices can provide input ranges far beyond the sensory abilities
of animals, but the challenge is in processing this data into something meaningful. At present, the algorithms used to parse
the input are rather primitive when compared to human abilities, but because the range of inputs is virtually limitless, once
we have appropriate software to take advantage of it, there are many applications that robots will be able to perform which
will improve our knowledge of the universe (i.e in space exploration) and improve our lives.
Questions:
What kind of jobs will robots as we know them never be able to do?
What is the most exciting work being done in the field of Robotics today?
How close are robots (technologically) to taking over the world?
What are the moral implications of combining robotics with weaponry?
Should we introduce mortality to robots as well as emoticons and other features unique to humans?
Here are 5 links related to Robotics:
[1] Robotics - Wikipedia
Robot - Wikipedia
International Foundation of Robotics Research (IFRR)
Robotics Network
Robotics Institute - CMU
Assignment #5 - Software Engineering
Software engineering is defined as "the application of a systematic, disciplined, quantifiable approach to the development,
operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software".
The term was coined in the 1960's during the 'software crisis' of the time, where developers and computer scientists were worried
about the growing complexity of software.
The need for an organized, technical overview of a software system is crucial, especially in larger systems involving millions of
lines of code. Software engineers must study costs of production, manage time and distribute work loads over teams of developers
in a highly efficient manner.
To become a software engineer, one must have enough experience developing software to be able to manage large projects. Most software
engineers today are computer scientists - however, there is a growing trend of taking Software Engineering as a discipline at the
undergraduate or graduate level, and there is a movement to provide certification for software engineers in much the same way as
current civil, mechanical and electric engineers are certified.
Questions:
How long does it take to become a software engineer?
Do you think software engineering take the fun and creativity out of development?
How important is software engineering for smaller projects?
Does being a software engineer qualify you to manage any sort of project?
What is the future of software engineering?
Here are some links related to Robotics:
[1] Software Engineering - Wikipedia
Software Engineering Institute - CMU
IEEE Computer Society Software Engineering Online
http://computingcareers.acm.org/?page_id=12
Assignment #6 - Operating Systems and Ubiquitous Computing
Ubiquitous computing is defined as "a post-desktop model of human-computer interaction in which information processing has been
thoroughly integrated into everyday objects and activities."
Ubiquitous computing is also described as everyware, ambient intelligence or pervasive computing, as well as physical computing
when primarily concerning the objects involved.
Ubiquitous computing involves small, inexpensive networked processing devices, rather than one large central system.
Operating systems serve as an intermediary between hardware and the software running on this hardware. Prominent exampls of
operating systems today are Windows, Mac OSX and the various distributions of GNU/Linux like Ubuntu and Gentoo linux.
Questions:
How does ubiquitous computing tie in to operating systems?
What are the most impressive applications of ubiqutious computing today?
What are the applications of ubiquitous computing in robotics?
Here are some links related to Ubiquitous Computing and Operating Systems:
Ubiquitous Computing - Wikipedia
Operating Systems - Wikipedia
Ubiquitous Computing - Xerox
Ubicomp International Conference
Apple Mac OSX
Assignment #7 - Networking
A computer network is a group of interconnected computers. Networking as a field is the study of computer
networks.
There are many types of networks deployed at both smaller and larger scales. The largest network is what
we know as the internet. The internet is an interconnected web of large sub-networks. The types of subnetwork
in use today include personal area networks, which are used for communication among computer devices close to one person,
local area networks (LAN) which is a "computer network covering a small physical area, like a home, office, or small group
of buildings, such as a school, or an airport"[1], and wire area networks (WAN) which are "computer networks that cover a
broad area (i.e. any network whose communications links cross metropolitan, regional, or national boundaries"[1].
Another type of network is the virtual private network (VPN) which "is a computer network in which some of the links between
nodes are carried by open connections or virtual circuits in some larger network instead of physical wires".
Questions:
How has the field of networking changed in the past decade?
What is the most impressive application of networking today, aside from the internet?
How do delay-tolerant networks perform in real life?
Here are some links related to Computer Networking:
Computer Networks - Wikipedia
Internet Protocol - Wikipedia
Internet - Wikipedia
Networking - Computer and Wireless Networking Basics - About.com