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