## Hardware and Software

Hardware is limited to specifically designed tasks that are, taken independently, very simple. Software implements algorithms (problem solutions) that allow the computer to complete much more complex tasks.
Hardware

Hardware refers to the physical elements of a computer. This is also sometime called the machinery or the equipment of the computer. Examples of hardware in a computer are the keyboard, the monitor, the mouse and the central processing unit. However, most of a computer's hardware cannot be seen; in other words, it is not an external element of the computer, but rather an internal one, surrounded by the computer's casing (tower). A computer's hardware is comprised of many different parts, but perhaps the most important of these is the motherboard. The motherboard is made up of even more parts that power and control the computer.

In contrast to software, hardware is a physical entity. Hardware and software are interconnected, without software, the hardware of a computer would have no function. However, without the creation of hardware to perform tasks directed by software via the central processing unit, software would be useless.

## Software

Software, commonly known as programs or apps, consists of all the instructions that tell the hardware how to perform a task. These instructions come from a software developer in the form that will be accepted by the platform (operating system + CPU) that they are based on. For example, a program that is designed for the Windows operating system will only work for that specific operating system. Compatibility of software will vary as the design of the software and the operating system differ. Software that is designed for Windows XP may experience a compatibility issue when running under Windows 2000 or NT.

Software is capable of performing many tasks, as opposed to hardware which can only perform mechanical tasks that they are designed for. Software provides the means for accomplishing many different tasks with the same basic hardware. Practical computer systems divide software systems into two major classes:
1. System software: Helps run the computer hardware and computer system itself. System software includes operating systems, device drivers, diagnostic tools and more. System software is almost always pre-installed on your computer.
2. Application software: Allows users to accomplish one or more tasks. It includes word processing, web browsing and almost any other task for which you might install software. (Some application software is pre-installed on most computer systems.)

Cost Savings
Perhaps, the most significant cloud computing benefit is in terms of IT cost savings. Businesses, no matter what their type or size, exist to earn money while keeping capital and operational expenses to a minimum. With cloud computing, you can save substantial capital costs with zero in-house server storage and application requirements. The lack of on-premises infrastructure also removes their associated operational costs in the form of power, air conditioning and administration costs. You pay for what is used and disengage whenever you like - there is no invested IT capital to worry about. It’s a common misconception that only large businesses can afford to use the cloud, when in fact, cloud services are extremely affordable for smaller businesses.

Reliability
With a managed service platform, cloud computing is much more reliable and consistent than in-house IT infrastructure. Most providers offer a Service Level Agreement which guarantees 24/7/365 and 99.99% availability. Your organization can benefit from a massive pool of redundant IT resources, as well as quick fail over mechanism - if a server fails, hosted applications and services can easily be transited to any of the available servers.

Manageability
Cloud computing provides enhanced and simplified IT management and maintenance capabilities through central administration of resources, vendor managed infrastructure and SLA backed agreements. IT infrastructure updates and maintenance are eliminated, as all resources are maintained by the service provider. You enjoy a simple web-based user interface for accessing software, applications and services – without the need for installation - and an SLA ensures the timely and guaranteed delivery, management and maintenance of your IT services.

Strategic Edge
Ever-increasing computing resources give you a competitive edge over competitors, as the time you require for IT procurement is virtually nil. Your company can deploy mission critical applications that deliver significant business benefits, without any upfront costs and minimal provisioning time. Cloud computing allows you to forget about technology and focus on your key business activities and objectives. It can also help you to reduce the time needed to market newer applications and services.

Downtime
As cloud service providers take care of a number of clients each day, they can become overwhelmed and may even come up against technical outages. This can lead to your business processes being temporarily suspended. Additionally, if your internet connection is offline, you will not be able to access any of your applications, server or data from the cloud.

Security
Although cloud service providers implement the best security standards and industry certifications, storing data and important files on external service providers always opens up risks. Using cloud-powered technologies means you need to provide your service provider with access to important business data. Meanwhile, being a public service opens up cloud service providers to security challenges on a routine basis. The ease in procuring and accessing cloud services can also give nefarious users the ability to scan, identify and exploit loopholes and vulnerabilities within a system. For instance, in a multi-tenant cloud architecture where multiple users are hosted on the same server, a hacker might try to break into the data of other users hosted and stored on the same server. However, such exploits and loopholes are not likely to surface, and the likelihood of a compromise is not great.

Vendor Lock-In
Although cloud service providers promise that the cloud will be flexible to use and integrate, switching cloud services is something that hasn’t yet completely evolved. Organizations may find it difficult to migrate their services from one vendor to another. Hosting and integrating current cloud applications on another platform may throw up interoperability and support issues. For instance, applications developed on Microsoft Development Framework (.Net) might not work properly on the Linux platform.

Limited Control
Since the cloud infrastructure is entirely owned, managed and monitored by the service provider, it transfers minimal control over to the customer. The customer can only control and manage the applications, data and services operated on top of that, not the back end infrastructure itself. Key administrative tasks such as server shell access, updating and firmware management may not be passed to the customer or end user.

It is easy to see how the advantages of cloud computing easily outweigh the drawbacks. Decreased costs, reduced downtime, and less management effort are benefits that speak for themselves.

## Tuesday, 18 October 2016

### 9 Netiquette Guidelines Online Students Need to Know

Proper etiquette is nothing new for most people. You grew up with your parents constantly telling you to mind your manners. But for those who grew up without some sort of computer screen inches from their face at all times, proper “netiquette” may seem a bit mystifying. We’re here to help with nine simple guidelines for how to be on your best behavior in an online classroom.
As you might have guessed, netiquette is essentially rules and norms for interacting with others on the internet. We enlisted Rasmussen College’s Heather Zink, who has taught online courses for seven years, to explain some guidelines to make sure your online manners are up to par.
9 netiquette guidelines every online student needs to know

There’s a time and a place for everything—BUT IN MOST SITUATIONS TYPING IN ALL CAPS IS INAPPROPRIATE. Most readers tend to perceive it as shouting and will have a hard time taking what you say seriously, no matter how intelligent your response may be. If you have vision issues—there are ways to adjust how text displays so you can still see without coming across as “yelling.”

2. Sarcasm can (and will) backfire
“You really need to be overly polite and ensure there is no sarcastic tone in your message,” Zink says. You never know who is reading your comment on the other end, so she says you should never assume the reader will pick up on your sarcasm.
Sarcasm has been the source of plenty of misguided arguments online, as it can be incredibly difficult to understand the commenter’s intent. What may seem like an obvious joke to you could come across as off-putting or rude to those who don’t know you personally.  As a rule of thumb, it’s best to avoid sarcasm all together in an online classroom.

“Make an effort to exhaust your search options before asking a question,” Zink suggests. She says it can be frustrating for instructors when students ask questions that are clearly answered within the assignment instructions or course materials.
For questions related to class structure such as due dates or policies, refer to your syllabus and course FAQ.  Attempt to find the answers to any other questions on your own using a search engine like Google or Bing. Relatively simple questions can usually be answered within seconds—which saves everyone time. If your questions remain unanswered after a bit of effort, feel free to bring them up with your instructor.

4. Stop ... grammar-time!
Always make an effort to use proper punctuation, spelling and grammar. Trying to decipher a string of misspelled words with erratic punctuation frustrates the reader and distracts from the point of your message. Take the time to spell check any message you send and save everyone the headache.
On the other hand, it’s important to be reasonable about others’ grammar mistakes. Nobody likes the grammar police and scolding a classmate because he or she used “your” instead of “you’re” isn’t practicing proper netiquette.  If a classmate makes a simple mistake in a message that is otherwise coherent, give them a break.

5. Don’t get cute with text colors
While it may be tempting to write all messages in neon green, whoever is reading it may not appreciate it as much as you. Stick to the basic black text color—if you need to emphasize something in your sentence use bold or italicized words. This will help ensure everyone can easily read your message without acquiring a headache.

6. Brevity rules
Keep email messages short and to the point.  You don’t need to share your life story to ask for help with a problem—just focus on the essential information. This will ensure your question doesn’t get lost in the noise and saves time for everyone involved.
“The more direct you can be in your question, the quicker the response you will get,” Zink says. She suggests including a numbered or bulleted list if you have multiple comments or questions in order to make it clear and concise for the reader.

Take some time to read through each of the previous discussion post responses before writing your own response.  If the original post was asking a specific question, there’s a good chance someone has already answered it. Submitting an answer that is eerily similar to a classmate indicates to the instructor that you haven’t paid attention to the conversation thus far.
Remember, discussions can move fairly quickly so it’s important to absorb all of the information before crafting. Building upon a classmate’s thought or attempting to add something new to the conversation will show your instructor you’ve been paying attention.

8. Don’t over share
Personal information is valuable to identity thieves, so try not to share more than is necessary. We’re not suggesting your classmates are criminals, but it’s good practice in general to be guarded when it comes to personal information.  Zink says a good rule of thumb to follow is if you’re comfortable standing up in front of a classroom and saying your message, then it’s most likely okay to share.

9. Be kind
Communicating online is unique in that there tends to be a level on anonymity between the people who are interacting. This sometimes results in individuals being more impolite than they might be in person. In an online class, you might not have the complete anonymity that comes with using a screen name, but you likely won’t see your classmates face-to-face. Make a point to be respectful in your comments—even if you disagree or dislike someone’s stance on a topic.
Zink recommends taking time to think and relax before firing off a reply in the heat of a disagreement. “Wait a day. If you still feel like you need to reply you’ll be more composed and won’t say something you’ll regret later,” she says. “Even though other students can’t see you, your name is attached to that comment and your classmates and instructors will remember it if you’ve been rude.”

## Sunday, 1 November 2015

### What is Multimedia?

Multimedia can have a many definitions these include:

Multimedia means that computer information can be represented through audio, video, and animation in addition to traditional media (i.e., text, graphics drawings, images).
A good general definition is:
Multimedia is the field concerned with the computer-controlled integration of text, graphics, drawings, still and moving images (Video), animation, audio, and any other media where every type of information can be represented, stored, transmitted and processed digitally.
Multimedia Application is an Application which uses a collection of multiple media sources e.g. text, graphics, images, sound/audio, animation and/or video.

Hypermedia can be considered as one of the multimedia applications.

## Monday, 22 December 2014

### Simple Programming Problems

Whenever I’m TA for a introductory CS class where students learn some programming language, I have trouble coming up with good exercises. Problems from Project Euler and the like are usually much too difficult for beginners, especially if they don’t have a strong background in mathematics.
This page is a collection of progressively more difficult exercises that are suitable for people who just started learning. It will be extended as I come up with new exercises. Except for the GUI questions, exercises are generally algorithmic and should be solvable without learning any libraries. The difficulty of the exercises of course somewhat depends on the programming language you use. The List exercises for example are more complicated in languages like C that don’t have build-in support for lists.
I suppose they are also useful, although much easier, whenever an experienced person wants to learn a new language.

## Elementary

1. Write a program that prints ‘Hello World’ to the screen.
2. Write a program that asks the user for his name and greets him with his name.
3. Modify the previous program such that only the users Alice and Bob are greeted with their names.
4. Write a program that asks the user for a number n and prints the sum of the numbers 1 to n
5. Modify the previous program such that only multiples of three or five are considered in the sum, e.g. 3, 5, 6, 9, 10, 12, 15 for n=17
6. Write a program that asks the user for a number n and gives him the possibility to choose between computing the sum and computing the product of 1,…,n.
7. Write a program that prints a multiplication table for numbers up to 12.
8. Write a program that prints all prime numbers. (Note: if your programming language does not support arbitrary size numbers, printing all primes up to the largest number you can represent is fine too.)
9. Write a guessing game where the user has to guess a secret number. After every guess the program tells the user whether his number was too large or too small. At the end the number of tries needed should be printed. I counts only as one try if the user inputs the same number consecutively.
10. Write a program that prints the next 20 leap years.
11. Write a program that computes
 $4⋅∑k=1106(-1)k+12k-1=4⋅(1-1/3+1/5-1/7+1/9-1/11…).$

## Lists, Strings

1. Write a function that returns the largest element in a list.
2. Write function that reverses a list, preferably in place.
3. Write a function that checks whether an element occurs in a list.
4. Write a function that returns the elements on odd positions in a list.
5. Write a function that computes the running total of a list.
6. Write a function that tests whether a string is a palindrome.
7. Write three functions that compute the sum of the numbers in a list: using a for-loop, a while-loop and recursion.
8. Write a function on_all that applies a function to every element of a list. Use it to print the first twenty perfect squares.
9. Write a function that concatenates two lists.
10. Write a function that combines two lists by alternatingly taking elements, e. g. [a,b,c][1,2,3] →[a,1,b,2,c,3].
11. Write a function that merges two sorted lists into a new list.
12. Write a function that computes the list of the first 100 Fibonacci numbers.
13. Write a function that takes a number and returns a list of its digits.
14. Write functions that add, subtract, and multiply two numbers in their digit-list representation (and return a new digit list). If you’re ambitious you can implement Karatsuba multiplication. Try different bases. What is the best base if you care about speed?
15. Implement the following sorting algorithms: Selection sort, Insertion sort, Merge sort, Quick sort, Stooge Sort. Check Wikipedia for descriptions.
16. Implement binary search.
17. Write a function that takes a list of strings an prints them, one per line, in a rectangular frame. For example the list ["Hello", "World", "in", "a", "frame"] gets printed as:
*********
* Hello *
* World *
* in    *
* a     *
* frame *
*********
18. Write function that translated a text to Pig Latin and back. English is translated to Pig Latin by taking the first letter of every word, moving it to the end of the word and adding ‘ay’. “The quick brown fox” becomes “Hetay uickqay rownbay oxfay”.

## Intermediate

1. Write a program that outputs all possibilities to put + or - or nothing between the numbers 1,2,…,9 (in this order) such that the result is 100. For example 1 + 2 + 3 - 4 + 5 + 6 + 78 + 9 = 100.
2. Write a program that takes the duration of a year (in fractional days) for an imaginary planet as an input and produces a leap-year rule that minimizes the difference to the planet’s solar year.
3. Implement a datastructure for graphs that allows modification (insertion, deletion). It should be possible to store values at edges and nodes. It might be easiest to use a dictionary of (node, edgelist) to do this.
4. Write a function that generates a DOT representation of a graph.
5. Write a program that automatically generates essays for you.
1. Using a sample text, create a directed (multi-)graph where the words of a text are nodes and there is a directed edge between u and v if u is followed by v in your sample text. Multiple occurrences lead to multiple edges.
2. Do a random walk on this graph: Starting from an arbitrary node choose a random successor. If no successor exists, choose another random node.
6. Write a program that automatically converts English text to Morse code and vice versa.
7. Write a program that finds the longest palindromic substring of a given string. Try to be as efficient as possible!

1. Given two strings, write a program that efficiently finds the longest common subsequence.
2. Given an array with numbers, write a program that efficiently answers queries of the form: “Which is the nearest larger value for the number at position i?”, where distance is the difference in array indices. For example in the array [1,4,3,2,5,7], the nearest larger value for 4 is 5. After linear time preprocessing you should be able to answer queries in constant time.
3. Given two strings, write a program that outputs the shortest sequence of character insertions and deletions that turn one string into the other.
4. Write a function that multiplies two matrices together. Make it as efficient as you can and compare the performance to a polished linear algebra library for your language. You might want to read about Strassen’s algorithm and the effects CPU caches have. Try out different matrix layouts and see what happens.
5. Given a set of d-dimensional rectangular boxes, write a program that computes the volume of their union. Start with 2D and work your way up.

## GUI

• Write a program that displays a bouncing ball.
• Write a Memory game.
• Write a Tetris clone

## Open Ended

1. Write a program that plays Hangman as good as possible. For example you can use a large dictionary like thisand select the letter that excludes most words that are still possible solutions. Try to make the program as efficient as possible, i.e. don’t scan the whole dictionary in every turn.
2. Write a program that plays Rock, Paper, Scissors better than random against a human. Try to exploit that humans are very bad at generating random numbers.
3. Write a program that plays Battle Ship against human opponents. It takes coordinates as input and outputs whether that was a hit or not and its own shot’s coordinates.