Tuesday, 31 December 2013

How to make an Operating System

Everyone in the IT field some day thinks of making an Operating System but they don't know how to make it. Also very less information is available on the internet on how to make a computer operating system.
They don't even know how to get started with the same so I am going to help you with that to get started with.
Firstly I want to tell you that there are two ways of making an operating system :
  1. Firstly, getting started with Linux Kernel which is open source and all the documentation is available with latest release of kernel at kernel.org which is a better way of starting with the development of kernel.
  2. Another way is to fully code the whole operating system from kernel to interface of Operating System but it requires a lot of work like learning various programming languages especially assembly languages. One must be experienced as it is quite difficult to program a boot loader. 
Now lets get focused on the first point and then in the second post we will discuss the second aspect thoroughly.

Development of operating system using Linux kernel :
  1. Firstly, the knowledge of Assembly languages or C Language is must. But knowing the two is an advantage.
  2. Then decide which type of operating system you want to make . The one with proper GUI for example Windows or making an operating system for a particular purpose in which the role of GUI is not much significant for example NAS Linux .
  3. Target a platform for your Operating System. Initially, target a single platform. I prefer AI-32 x86-x64 because it is commonly used in personal computers hence, it is commonly used as a target.
  4. Deciding which language to use, you can use Pascal and BASIC or go with C Language and Assembly. Assembly language is required to code some vital parts of the operating system which cannot be programmed with C/C++ Language.Usually, C/C++ Language is used to develop the major portion of the operating system.
  5. In case you choose C/C++, download a suitable compiler for the language to compile the source code and along with this you should know the various compiler settings , working of compiler, development in C Language compiler's managing scheme and compiler's ABI.
  6. You should have knowledge about various file formats like ELF, PE, COFF, binary etc. and also which format is copyrighted. Like, the format PE (.exe) used by Microsoft Windows is copyrighted.
  7. Now, decide the API you want to use. There are various API's available like Postfix , Prefix etc. Postfix is the most commonly used API because its documentation is available over internet. Unix OS uses Postfix API hence our OS will support Unix programs.
  8. Test your code at every stage after installing boot loader. Do not wipe your hard drive. Use boot loader like GRUB for dual boot your system until you finally develop your operating system.
  9. Start with small programs like displaying text or checking interrupts, taking input and output from hardware devices attached to the computer. After that move on to large programs like memory management or multitasking etc.
  10. Keep back up after the changes you have made or saved. While developing OS, there are possibilities of PC crash or problems with PC booting. It may lead to loss of data, so, make a habit of taking backups at every possible stage.
  11. Try to test your code on a virtual software like Vmware or Microsoft Virtual PC because it is hard to transfer your code to testing machine and rebooting your system for small changes.
  12. Try to design a user friendly operating system which is a part of both functioning and designing.
  13. Work in team to resolve errors quickly.
Hope, I am able to convey  my efforts to you. Friends!!! Keep searching and making new developments. Do not forget to share your valuable views with us.
In the next post, we will discuss example source codes for the development of Operating System.

Thank You. 

Structures (C Tutorial #21)

In most of the programming languages we firstly design the structure of the program which we want to make but we use other sources like UML ( i.e. Unified modeling languages ) which is used to make structure of complex programs of software. But C is having an interesting feature of defining structure i.e. also named as structures in C Language.
Structures are used with the help of keyword " struct ". This is only used to declare the variables used within the program by a particular function or where it is declared.
for example :
Structure to define the axis of a point :-
struct point {
int x;
int y;
};

This structure contains two variables of integer type namely,  x, y.
The only  difference between a function and structure is that , in structure we only declare the variables and used by creating variables of that structure type which we want to use but in functions we can also define the variable and code the statements of the program.
Structures can be used multiple times in a program and it depends on number of variables formed of that structure type.
for example :
Program to show the use of structures in C Language :-
#include <stdio.h>
#include <conio.h>
struct point {
int x;
int y;
};
void main (){
int a, b;
a = 10;
b = 20;
struct point p;
p.x = a;
p.y = b;
printf ( " value of x and y are : %d, %d ", p.x, p.y );
}
Output :
value of x and y are : 10, 20

To access the variables of the structure we use dot " . " operator followed by the variable name.
There are similar type in C Language named " union ". but the only difference between structure and union is the way of storing the values in memory.
Mostly we use structures in programming these days so I have discussed about that in above tutorial. I will also provide the explanation of union later.

Thank You

Friday, 27 December 2013

History of Programming Languages

This post is all about the History of Programming Languages.
A quick look at programming languages.

Year : 1957
Language : Fortran
Formula Translation, is the oldest language still in use. Created by John Backus, the language was developed to perform high-level scientific, mathematical, statistical computations.
The language is still used in aerospace, automotive industries, government, and research institutions.
Used by National Weather Service

A Look at the code :
*
C Hello World in Fortran 77
C ( lines must be 6 characters intended )
*
PROGRAM REELECT
WRITE ( UNIT = *, FMT = * )
' T Like Ike '
END

Year : 1959
Language : COBOL
Common Business Oriented Language is behind the majority of business transaction systems running credit card processing, ATMs, telephone and cell calls, hospital systems, government, automotive systems, and traffic signal systems. The COBOL development team, lead by Dr. Grace Murray Hopper, set out to create a uniform, user-friendly language for bussiness transactions.
Used by United States Postal Service

A Look at the Code :
IDENTIFICATION DIVISION.
PROGRAM-ID.
Standard Alert.
AUTHOR. Fabritius.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
PROCEDURE DIVISION.
DISPLAY " DANGER! DESTROY! ".
STOP RUN.

Year : 1964
Language : BASIC
Developed by students at Dartmouth College, Beginners All Purpose Symbolic Instruction Code was designed to be simplified language for those without a strong technical or mathematical background. A modified version, written by Bill Gates and Paul Allen became Microsoft's first product. It was sold to M.I.T.S. for the Altair.
Integer Basic Ran The Original APPLE 11 in 1977

A Look at the Code :
100 BEGIN
101 GOTO 102
102 PRINT " HOW ABOUT A NICE GAME OF CHESS ? "
103 END

Year : 1969
Language : C
C was developed between 1969 and 1973 by Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating system. It was named "C" because its features were derived from an earlier language called "B".
C had become powerful enough that most of the Unix kernel was rewritten in C - one of the first operating system kernels implemented in a language other than assembly.
Linux Today is Based on C

A Look at the Code :
#include <stdio.h>
main ()
{
puts ("your first C program");
}

Year : 1970
Language : PASCAL
The language was named for Blaise Pascal, credited for inventing the first adding machine in 1641. Niklaus Wirth created Pascal as a teaching tool and it grew to into widespread commercial use.
Used by SKYPE ( Object Pascal )

A Look at the Code :
PROGRAM SageAdvice ( OUTPUT );
BEGIN
WRITELN ( ' Learning C instead of Pascal ' );
END.

Year : 1983
Language : C++
From Bell Labs, Bjarne Stroustrup modified the C language to C++ and created what many consider the most popular programming language ever. It's been listed in the top ten programming languages since 1986 and achieved Hall of Fame status in 2003.
Used by MS Office; Adobe PDF Reader; Firefox

A Look at the Code :
#include <iostream>
using namespace std;
int main ()
{
cout << "C++ is the grade you get when you're very, very slightly above average." << endl ;
return 0 ;
}

Year : 1987
Language : PERL
Larry Wall, a UNIX programmer, created Perl after attempting to extract data for a report and finding UNIX couldn't perform the operations he  needed. Practical Extraction Report Language was described by its inventor as a language for " getting your job done ".
Used by CRAIGSLIST

A Look at the Code :
#! /usr /bin /perl
# Hello World in Perl
print " I don't always write convoluted script, but when I do, I write them in Perl. \n " ;

Year : 1991
Language : PYTHON
Monty Python served as the inspiration for the name of this language. Guido Van Rossum developed python to fix problems in the ABC language and continues to serve as its lead designer.
Used by Google Search, Youtube, Nasa.

A Look at the Code :
# Hello World in Python
print " The airspeed velocity of an unladen European Swallow is approximately 11 meters per second. "

Year : 1993
Language : RUBY
Yukihiro "matz" Matsumoto named Ruby for July's birthstone. He developed the language by blending parts of his favourite languages, Perl, Smalltalk, Eiffel, Ada and Lisp.
Used by BASECAMP.

A Look at the Code :
" I'd rather be writing this in Java. \n " . display

Year : 1995
Language : PHP
Rasmus Lerdorf developed PHP to replace a set Perl scripts used to maintain his personal home page. Today, PHP has grown in to an integeral part of web architecture running on over 20 million websites.
Used by FACEBOOK

A Look at the Code :
<?php
echo " Fun Fact : PHP used to stand for ' Personal Home Page ' \n " ;
?>

Year : 1995
Language : JAVA
A team of Sun Microsystems developers lead by James Gosling created Java to run set top boxes for interactive television. Java now runson over 1.1 billion PCs worldwide and many websites can't function without it.
Used by 2004 Mars Rovers

A Look at the Code :
public class HelloWorld {
public static void main ( String[] args ) {
System.out.println(" I will now interrupt you with update notifications ");
}
}

Year : 1995
Language : Javascript
Java and Javascript are unrelated and have very different semantics.
JavaScript was originally developed by Brendan Eich of Netscape under the name Mocha. JavaScript uses syntax influenced by that of C.
Although meant to run on the client (browser) it is now finding use on the server as node.js. Also, AJAX is dependent on JavaScript.
Used by RACKSPACE ( Client Side )

A Look at the Code :
<html>
<body>

<script type="text/javascript">
document.write("<h1>This is a heading</h1>");
document.write("<p>This is a paragraph</p>");
</script>
</body>
</html>

Year : 2005
Language : Ruby On Rails ( Framework for programming language, Ruby)
Ruby on Rails was extracted by David Heinemeier Hansson from his work on Basecamp, a project management tool by 37signals. Hansson first released Ruby on Rails as open source in July 2004, but did not share commit rights to the project until February 2005. It is now on version 3.0.7 and has more than 1,800 contributers.

A Look at the Code :
def section_link ( name, options )
if options[:action] == @current_action and options[:controller] == @current_controller
link_to ( name, options, :class => 'on') else
link_to ( name, options ) end
end

Thursday, 26 December 2013

Power of Cloud Computing

Gone are the days when you have worry about the accessibility of your data. When you need to carry your entire data with you in peripheral devices. Imagine you forgot to copy your important data in your mass storage media or you got struck in a situation where you need to access your PC and your PC isn’t in your reach. Well if we say that you can access your data, backup it on some other workstation and use it anytime you want from anywhere in the world and you need is an internet connection or you can access your PC from your mobile or your tablet or perform the same with other devices. Now you can do all the things we mentioned and that too easily. The technology which has made this possible is Cloud Computing.

Cloud Computing can be termed as a metaphor for interconnection of computers irrespective of Geographical factors, the interconnection can be of small, medium or large scalability. A Cloud is simply used as a metaphor for the internet, used to represent the worldwide network in computer network topologies.
You can access resources from the cloud anytime from anywhere and all you need is an internet connection. Sit back and relax coz you don’t need to worry about how things are going on behind the scenes – you can just simply purchase the desired IT solution as you would purchase any other utility. Because of this feature, cloud computing is also known as utility computing, or ‘IT on demand’.

Grid Computing v/s Cloud Computing
There is not much difference between Grid Computing and Cloud Computing. Grid Computing can sometimes be called as a type of Cloud Computing model. In Grid Computing large project is broken into small program and are executed on multiple computers in order to achieve a common objective. Grid Computing is mainly used for scientific purposes. Grid computing also does not make the optimum use of hardware. Whereas in Cloud Computing smaller programs are executed at the same time.

Service Models of Cloud Computing
Basically there are three main service models in Cloud Computing namely :
  1. Software as a Service (SaaS)
  2. Platform as a Service (PaaS)
  3. Infrastructure as a Service (IaaS)
Software as a Service (SaaS)
Software as a service (SaaS) is the type of service model in which required software is hosted on the cloud. SaaS service model is accessed by web browsers with the help of thin client architecture. SaaS is also widely regarded as “on-demand software” solution. SaaS providers usually charge a subscription fees on monthly or annual basis. It can also be availed on pay-per view basis.
Widely used instant messaging services like Yahoo, AOL, Google(GTalk) and VoIP Service like Skype are examples using SaaS.
IBM, Google, Amazon, Salesforce.com are the titans of the cloud industry using SaaS service model.
 
Platform as a Service (PaaS) 
Platform as a Service (PaaS) is the type of service model of cloud computing that delivers a platform for computing and a solution stack as a form of service offered. In PaaS, the user builds the software using tools and standard libraries provided by the service provider. The Service providers provide the user with hardware related stuff like networks, servers etc. The user regulates software deployment and configuration settings.  PaaS provides cost effective hosting solutions. It is also known as Cloudware.

Windows Azure, AWS Elastic Beanstalk, Mendix, Google App. Engine are the some of the leaders of PaaS service model.
 
Infrastructure as Service (IaaS) 
IaaS is the type of cloud computing service model which is mainly concerned with the hardware. IaaS refers to how the hardware resources are connected. IaaS service model provides  resources such as virtual-machine image-library, file-based storage, firewalls, load balancers, IP addresses and virtual local area networks (VLANs).
Infrastructure as Service (IaaS) is also known as Hardware as a Service (HaaS).
Amazon EC2, Google Compute Engine, HP Cloud, Rackspace Cloud etc. are the giants of IaaS service model.

Why switch to the Cloud ?
Due to some of the reason we have listed below it clearly shows why Cloud Computing is way better than traditional IT networking
  • Reduction in Capital Expenditure
  • Anytime, Anywhere data accessibility
  • Better utilization of Hardware Resources
  • On-Demand Scalability
  • Quick and Easy Implementation
  • Disaster/Backup Recovery

Limitations of Cloud Computing :  
Apart from being the real next generation computing model, there are certain limitations of Cloud Computing which are somewhat a serious concern
  • Security Issues – This is a prime concern in cloud computing. As you are connected to many devices at a time making it your personal cloud, there is a possibility that your data might be stolen because you are connected to various devices for accessibility.
  • Cost – Cloud computing architecture might be a cost effective computing method in future but initial cost of this architecture is generally high as compared to traditional computing architectures.
  • Possible Downtime – As businesses depend on Internet connection for cloud accessibility  their might be a possibility of server outrage. In 2011, many cloud servers suffered from this outrage.

Wednesday, 25 December 2013

How to be an Efficient Programmer

These are some of the tips which you can follow to be efficient in programming.

1. Interest
First let me make it clear that you can excel in programming only if you are interested in it. Not only programming nothing in the world can be done without the passion to do it. If you are doing it just because someone said it to you that ‘Programming is cool’ and you are intending to follow others footsteps forget of being a good programmer. Develop interest in programming, not just programming but anything you do you’ll automatically learn that things will tend to happen automatically.

2. Choose the appropriate language to start with
Remember to choose the appropriate language to start off with programming. We recommend starting with C/C++. Even Python can be a convenient option but you’ll have to refer to internet frequently due to less availability. We recommend you C/C++ because it not only clears the fundamentals of programming but also helps you in building strong logical skills.

3. Practice
Always remember that ‘Practice makes a man perfect’. Efficiency in programming is developed only by practice just as efficiency in mathematics is developed. Practice is the only key to success in programming. Practice as much as you can. Start from the basic and go to advance level. Its obvious that you might face many problems but don’t ever give up on them. Its highly recommended that you use programming practice portals like www.codechef.com, www.topcoder.com , there are plenty you can find them on Google. Read more than you write. Always remember to read more of the code than you write. Spend more and more time in reading the code.

4. Form a competitive discussion group
You can form a competitive group or a club in your college where you and students can freely discuss various problems faced by them and you in programming. You can also hold small contests or quizzes within the group to generate interest or curiosity among fellow members of the group.

5. Participate in Coding Contests
There are many coding competitions or contests which are held online on various portals like www.codechef.com, www.topcoder.com etc. Google holds a programming contest called Google Summer of Code (GSoC) every year; participants are also provided a stipend of $5000 and are also given a chance to be an intern at Google Inc. similarly Microsoft also holds its programming contest called Imagine Cup. These coding contests always helps you in building strong coding skills. Always remember that learn many programming languages but master only one or a couple.

I  hope this article might have helped you a little. So go ahead and be the ruler.

Happy Programming!!!