Welcome to Abbas' website.

Hi! My name is Ali Abbas and this is my website. My Course plan for the next four years in CMU is as follows:

Networking and Communication

A computer network is a telecommunications network that allows people to connect their computers and share and exchange their data. Within a network, all the computers connected to the network are able to pass data to other computers along some form of a data connection. There are two types of connections that can exist generally, wireless and physical cable. Data is sent in the form of a virtual packet. The Internet is an example of a computer network. Fun fact: the internet was originally a project developed by the US Army for military use, this was then later integrated for civilian use.
A network basically consists of two components, nodes and arcs. The arcs are the connections that carry the data between computers already talked about above. And nodes are the points at which data is originated, terminated or routed from. “Nodes can include hosts such as personal computers, phones, servers as well as networking hardware. Two such devices are said to be networked together when one device is able to exchange information with the other device, whether or not they have a direct connection to each other. Computer networks support applications such as access to the World Wide Web, shared use of application and storage servers, printers, and fax machines, and use of email and instant messaging applications.” (Wikipedia)
There are different types of networks too, some mentioned below are from the IGCSE ICT website:
Local Area Network (LAN): A Local Area Network is a network confined to one building or site. Often a LAN is a private network belonging to an organisation or business. Because LANs are geographically small, they usually use cables or low-power radio (wireless) for the connections.
Wireless Local Area Network (WLAN): A wireless LAN (WLAN) is a LAN that uses radio signals (WiFi) to connect computers instead of cables. At the centre of the WLAN is a wireless switch or router - a small box with one or two antennas sticking out the back - used for sending and receiving data to the computers. (Most laptops have a wireless antenna built into the case.) It is much more convenient to use wireless connections instead of running long wires all over a building. However, WLANs are more difficult to make secure since other people can also try to connect to the wireless network. So, it is very important to have a good, hard-to-guess password for the WLAN connections.
Wide Area Network (WAN): A Wide Area Network is a network that extends over a large area. A WAN is often created by joining several LANs together, such as when a business that has offices in different countries links the office LANs together. Because WANs are often geographically spread over large areas and links between computers are over long distances, they often use quite exotic connections technologies: optical fibre (glass) cables, satellite radio links, microwave radio links, etc.
Computer networks differ from one another in so many different ways.  Their communications protocols, the way they organize network traffic, the network’s size, the organizational intent and the topology of the network are some of the ways they can differ.

Wikipedia: http://en.wikipedia.org/wiki/Computer_network
IGCSE ICT: http://www.igcseict.info/theory/4/types/
What ways can you improve network connectivity now?
Can computer networks ever be able to span over to other planets like Mars?
What is the best network topology set up?

Programming Languages And Verification

A programming language is an actual language made up to be able to communicate with a machine like a computer. Programming languages are required to create programs that control what the machine does or run algorithms on the machine. Thousands of programming languages have been made for the computer so far, and loads more are made every year. The programming languages’ computation can be in two forms, declarative form and imperative form. A language in an imperative form has its operations in sequence one after the other, and in declarative form the language would have had the results specified but wouldn’t have the instructions on how to get to it.

The programming languages are divided into two elements to it, the syntax and the semantics. The syntax is the functions and codes that are built in the programming language that you can call and use. The semantics is the definition of that function or code you used. Some programming languages have separate files that contain all the definitions of each code and explains what it means (an example of such a language is C), whereas some languages actually don’t have any set definitions and just have a popular application of the codes and everyone just refers to it (example, perl).

Within programming languages in computer science, verification is the checking of algorithms in the code to make sure they work and are correct. This verification is done by providing the program a list of rules of mathematics or just an abstract mathematical model. Some mathematical ideas used for verification nowadays are finite state machines, labelled transition systems, Petri nets, timed automata, hybrid automata, process algebra. Also, the program could also verify that the code or function you used, uses correct syntax. It does this by using the files of semantics, as mentioned earlier, and makes sure the algorithm works according to those files as well as basic math. Some examples of these semantics files are operational semantics, denotational semantics, axiomatic semantics and Hoare logic. There are two approaches to verification, an exhaustive approach and a deductive approach. The exhaustive approach would just literally go through everything in the mathematical models or the semantics files. The deductive approach is a lot more complicated but somehow deduces that other parts of the computation must be true if one part earlier in the code is true.








    What is the difference between verification and validation?

    How can you make your own programming language?

    Is verification the same as in computer security?

    What is the best programming language to use in general? For robotics?

Natural Language Processing

  • Natural Language Processing (NLP) is a field within computer science and artificial intelligence that is responsible of dealing with computer and human interactions through the languages humans speak. We have already read about programming languages which is us adapting to the languages which are understandable by the computers, like python. In this case it's the opposite, we program the computers to adapt to our languages, like English, and then speak back to us in that language. The obvious challenges you would face in this field would be how you would even get the computer to be able to understand the natural language, this would mean that the computer would accept natural input and would have to derive its meaning from previously inputted meanings. The other challenge faced is getting an output from the computer itself, this process is also known as natural language generation. This means that the computer would produce an output of a word, sentence, etc. in a form/ natural language understandable/spoken by its user. Some of the tasks capable of being carried out by NLP include: Automatic summarization- capable of producing a summary of a piece of text on a known topic Coreference resolution –after analyzing a bunch of sentences and phrases, it makes sense of what object is being referred to in the sentence and who it must belong to. Machine translation- one of the most difficult tasks to carry out using NPL, translates speech in one language to another language automatically. For this to be possible the computer would have to have all sorts of human knowledge and grammatically correct speech. This task is so difficult that it has been classified as one of the AI Complete problems, the class of problems that are as difficult as making a computer as smart as a human. Question answering- using the knowledge it can store in its memory it can answer typical questions ased by the user, much like SIRI.


  • http://en.wikipedia.org/wiki/Natural_language_processing
  • http://research.microsoft.com/en-us/groups/nlp/
  • http://searchcontentmanagement.techtarget.com/definition/natural-language-processing-NLP
  • http://data-informed.com/natural-language-processing-evolves-vital-technology/
  • http://research.google.com/pubs/NaturalLanguageProcessing.html

Questions to ask:

  • Will voice recognition still be possible if sore throat or cough? Is it possible to allow a computer to comprehend humor? How close are we to producing a fully functional AI robot?


Cloud Computing

Cloud computing, also simply known as "the cloud", is basically delivering a service through computers or computer programs, instead of usually delivering a product. The commputer provides the services if it, itself, is provided the resources, software and information and typically over some sort of a network (like the internet). Cloud computing is basically founded upon the ideas of shared services and converged infrastructure. It also focuses on maximising how effective the shared resources are to other people. Cloud computing isn't only useful for businesses or people to share documents together, it is also quite useful because as it is connected to the internet and therefore all its data can be stored online, so it can easily be relocated to another location.

Some of the advantages of having data on clouds is that we wouldn't physically have to carry it around, a lot more people would be able to easily access it without purchasing licences for different applications and since there will only be one main computer publishing the data online, there is also less requirement for air condition/cooling of hardware, power and electrical needs and rack space/ desk space. Another advantage of using the cloud, as claimed by its proponents, is that it allows companies to basically establish and maintain new applications. For these benifets a lot of organisations are now "moving to the cloud" and migrating a lot of their information online and sharing systems.

There are three different types of clouds, private, public and hybrid. Private clouds are mainly for when an organisation wants to exist solely in its network. Making the organisation exist in the virtual world requires a lot of management and high degree of skill.The private networks face a lot of security threats, a way to encounter them is by having a self-run data centre, but this however is very costly to the corporation due to energy consumption, hardware requirements and even has a large footprint on the ground. A public cloud is when a service is freely available over a network for anyone to use. These services can sometimes also be on a pay-per-usage model, therefore it is completely visible to you but if you use it, you would have to pay for it. A hybrid cloud is a composition of two or more clouds, could be any of public or private cloud. These different clouds within the hybrid cloud exist as two different entities but they work together and offer both's benefits



  • How effective is cloud computing within bussiness models?
  • What would happen if international corporation's server systems on the cloud crash? Will they lose their data?
  • Does cloud computing mean the end of physical storage of data?

Theory of computation

  • In the theory of computer science, Theory of computation is the part that deals with solving problems using algorithms. It isn’t just solving problems, but also finding the best possible solution that solves the problem efficiently. There are three major branches within this field of computer science. Automata theory: This branch deals with making mathematical models or machines and using these machines to solve problems. Computability theory: This branch calculates the extent of how solvable a problem is on a computer. For example, one of the most important questions answered in this field is whether the Halting problem was solvable. The Halting problem was determined not to be solvable on a Turing machine and the formulation carried out to determine that is now used as most of the theory in computability theory. Another significant advancement in the field computability theory was Rice’s theorem, which basically dictates the different ways in which a Turing machine is capable of solving problems, and whether they are solvable in the first place. Computability theory is also quite similar to the branch recursion theory in mathematical logic, many mathematicians and computer scientists consider them to be synonymous. In general, computability theory basically determines whether a problem is solvable or not by using the basics and rules of math, if it is not solvable then it is not solvable because they can’t find an answer, but because there cannot exist an answer theoretically according to the laws of mathematics. Computational complexity theory: This field not only deals with finding a solution to the problem, but also finds the most efficient solution. It works by assessing two things about each problem, how long will it take to solve a problem? And how much memory does it require to solve the problem on computer? The problems are solved using algorithms and these algorithms are made into functions to be able to adapt to different lengths/sizes of the problem, as it is tougher solving larger scale problems as compared to small-scale problems. Computer scientists have simplified problems of changing lengths by developing the big O notation. The most open problem within field is just the question whether all problems are solvable in the most efficient way possible. Apart from using a Turing machine to solve problems, computer scientists also use lambda calculus, combinatory logic, mu-recursive functions, Markov algorithm and the register machine.


Questions to ask:

  • What is a Turing/abstract machine? What is automata? How long does it take to solve a difficult problem? Are these mathematical computer models faster than humans at solving problems?


Computer Security

In a single sentence, computer security means protecting computers, laptops, etc as well as the information contained in them.

The security of systems can be accessed without authorisation from two different ways. One obvious way is to access the data/information physically, and the other way is to access the data virtually/ over a network.

A computer system's security depends on how responsible its user is. Someone can access your data physically, for example, if you forget to logout of your andrew account on a computer in one of the CMU clusters, that way they have access to your files without knowing your username or password and can do whatever they want with it. Another way is if they are watching you enter your passwords or you just have really easy to guess password like abbas123.

Some threats to your computer security through the virtual world consist of computer viruses, spyware, hackers and phishing. Viruses are the most common threat that everyone can probably relate to. Viruses work by copying and replicating themselves on your computer and then altering the way the computer operates, all without your knowledge or permission. Spywares are any programs that monitor your online activity or install programs on your computer without your permission to store your personal information - this is a serious threat. Hackers are the people behind the creation of such threatening programs.

How to prevent unauthorised access to your data:

  • - Log out of your account on a shared computer
  • - Leave your office/room door locked
  • - Always have a firewall on your computing device (a firewall is basically a software or device that prevents unauthorised access coming from the networks available to the general public to your local netowrk that connects your computing device)
  • -Install an anti-virus/ anti-spyware software software


Questions to ask:

  • How can I create a virus and use it "responsibly"?
  • What does "phishing" mean (simply) and how to avoid it?
  • What is the concept behind "hacking" a server/program and how?





Randy Pausch - Time Managment Lecture


Randolph Frederick (Randy) Pausch was a professor of computer science at Carnegie Mellon University. He was from the United States of America and had a wife and three children. Born in 1960, he died in 2008 (aged 47) after being diagnosed with pancreatic cancer.

Randy Pausch was well known for many things, some of which are:
  • The creator of the Alice software project- which is basically a computer program that helps create 3D models and animations
  • Cofounder of CMU's Entertainment Technology Centre
  • Working with Disney imagineers and Electronic Arts
  • Giving inspirational speeches on life
  • Co-author of the #1 best selling book "The Last Lecture"
  • What I liked about his Time Management Talk:

  • His humour, especially even after he knows he's going to die soon
  • The 80/20 rule,Itend to be a perfectionist and this made me realise that if I am going to perfect something then it better be the thing i plan to do for the rest of my life or else i shouldn't waste my time on it and should move on to advancing in other things
  • Not treating my email inbox as a to-do list, because sometimes i purposely mark some emails as unread so i can come back and deal with them later
  • How to be a leader and roles of a leader, i have been a leader in various organisations before but sometimes overlooked what my duty as a leader actually was. Like i shouldn't be focusing on my success as a leader, i should be focusing on the success of my followers in the task i have lead them through.
  • While making a to-do list i must take the time to sort my tasks properly, starting with the important tasks first. Also the fact that how important time is in life, and how time should be the commodity we deal in and not money

  • Some Useful links:

    My Calendar

    Get Hosting.

    Host This Template on Dreamhost.

    Looking for an awesome and reliable webhosting? Try DreamHost. Get $50 off when you sign up with the promocode STYLESHOUT.

    Product Screenshots.

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit.

    What People Are Saying.

    • The heart is in the work...

      Andrew Carnegie
    • Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle. As with all matters of the heart, you'll know when you find it.

      Steve Jobs

    MailChimp signup form.

    Adding your own MailChimp powered email sign-up is easy. Grab the super slim code from your MailChimp account and drop the code here. Lastly, remove the link and style tags that comes with the embedded code and your good to go. All styling is within our stylesheet.

    We never share your information or use it to spam you.