Wednesday, December 2, 2015

IT Service My Definition

Tuesday, December 1, 2015

ISO – OSI (International Standard Organization - Open Systems Interconnection model) what is it?

ISO – OSI is a standard for communication between network devices that is impose by ISO (International Standard Organization) it consist of 7  layers


  • Application
  • Presentation
  • Session
  • Transport
  • Network
  • Data link
  • Physical
All the network devices have one or more of these layers to perform a network task to communicate data with one end to another it needs to implement this at the both ends.

Devices such as Computers has implemented all the seven layers while   switch has ether Network, Data Link , Physical or Data Link Physical layers depending of the type of the switch which you may come across as L2 Switch and L3 Switch stands for Layer 2 switch and Layer 3 Switch which is the number of layers from the bottom of the list. L3 switch is mostly know as manageable switch since you can use them to program the flow of the data in and out of it. And the routers the things that we use to route our packets through network works on Network layer meaning Network, Data Link and Physical are implement on them.

So Let’s look at the layers from top to bottom

Application
This refer to the actual application that you use to communicate with the network google chrome, Mozzila Fire Fox, Putty, File Zella are some example of applications that you may already use to communicate with the network.

Presentation
This is the data representation system conversion since different system have different way of representing things so it converts to a format that every one recognize and wise versa


Session
Session is a layer that contains session details like session Id. which is reference to one of the connection of the same application since there can be more than one for example google chrome can have many tabs opened and it says which tab the data needed to go

Transport
This layer controls the end to end delivery it use TCP (Transmission Control Protocol and UDP (User Datagram Protocol) to achieve that. TCP is a connection oriented one so end to end delivery is guaranteed and UDP is not connection oriented so it is not that reliable for sending data. In this phrase that TCP Header is added to the data which is telling that destination that it is a TCP packet or UDP packet also it have some flags that can be set one if syn another is ack and also fin which is use by the three way hand shake of the TCP to successfully establish a connection.

Network
The data with the TCP header is send to this layer which adds another header to it which is the Network Header it contains the source IP address, Destination IP address, source port and destination port. In this the packet is fragmented that is divided to small parts if it is too big to send as one. This header is use for transferring the packets end to end.

Data Link
 In data link layer it adds another header which is data link header it consist of two mac (Media access control) address of host and a destination this use to navigate through the network the destination and source mac are not always the address of the beginning and end nodes it is hop to hop that mean if you send data from your computer and if it goes through router A,B,C and Destination then fist source mac is of your computer and destination is of router A and when it get to the router A it check it for the destination IP by opening the IP layer and it finds that the packet need to send to router B to get to the destination so it does not change IP Header but when it come to data link it change it now the source mac is the mac of router A and destination mac is the mac of router B and this process goes on until it reach the destination. The data is also segmented at the if it is big and if is known as a frame error control and flow control is added by this stage. This layer is further divided to LLC and Mac

Physical Layer
Till now the data is of bits and it is not physical thing and we need to convert is to a physical thing so we can send it across a physical media Physical Layer dose this for wire Cables it converts to electrical Current for Wireless it convert to wireless signals for fiber cables it convert to laser light etc.



At the other end the data is reached by the physical layer which convert it to bits and pass to data link which check for errors and then pass to network which check for destination and Transport for connection  session to find out which instance presentation convert the data back to local application type and finally application which you will see the result at your PC

Sunday, November 22, 2015

What the hell are standards? Do we really need to follow them?

Standards a word that we have used and commonly known, we can find it everywhere.  Used by many companies adopted to suit their needs. We heard many such as SLS, ISO 9001 so what are they why we need them.

SLS is a standard given in Sri Lanka it stands for Sri Lankan Standards, which is product standard. They evaluate a product for certain quality to see that company who deliver them maintains it and if it is they give them the SLS

ISO 9001 which is given by International Standards Organization 9001 is given to process rather than the product, since they believe that good process will produce quality product.

But in here I would like to talk more about Computer and programming standards, standards are good for maintaining integrity throughout organization and in between them. Protocol  like TCP/UDP, HTTP,  HTTPS,FTP, SSH, POP3 and SMTP are few of the examples of standards which make network communication easy since they follow same set of rules you can build application without regards of who build them. You can be sure that whatever the platform that runs your application will communicate with the devices of various venders.

I see standers like a language for example English which is use for communication with many countries so Sri Lankan's are able to communicate with Indian’s and all other south Asian counties since it has become a standard for them. Imagine what happen if you need to learn Hindi when you go to India and since different parts of the India also use different language you need to learn each of them when visiting each part. This is a very time consuming task in a country when you have more than 20 languages.

So what is the solution? introduce English and ask everyone to learn it so you only need to learn English to travel there you do not need to know how local language and local dose things you can communicate and get the job done.

Standards are like that now a day we have many operating systems, Windows, MAC OS, Linux, Unix, OS2 and all are set up differently so no program on one will work on other. But we still can communicate with them which are good. This is achieve by standardizing the way they communicate with each other every operating system runs same protocol and retrieve and send information in same format. how they handle it inside may be different but how they receive them the format and how they send them and the format is same so without any additional amendments we can successfully transfer data and communicate with each of them. Even with this set up some are not following them fully like Microsoft Internet explorer which has their own standard not the standard enforce by the community which is html5 that is why you need to put separate codes when it come to Internet explorer for some functions.

Now you have a taste of what standards do, why we needed them. Well if you are a beginner and have heard time, doing things like in programming standards are guild lines that help you done the job faster and efficient way. There are variable conventions that tell how you need to declare variables and how many things are done. So everyone can easily understand your cording and manipulate them you can get help very easily since any one can read it, and you can refer you code any time and easily find out something later since you know how it is written.

Even though it helps you to success they are guild lines not rules that cannot be broken, for in-experience person it will help to tide things up. Be efficient,fast but when you get more experience with it, you may find some of them make your work hard rather than make them easy, since you have learn with your experience a better ways of doing them. So if a guild line does not serve its purpose you do not need to hang on to it. Nobody is going to sue you for breaking them.  As they say if you did not try new things you never learn new things and all new invention are born because among all the people, one though different than all of them. So it is better to brake a guild line that does not serve its purpose than stick to it and make work difficult.

Tuesday, November 3, 2015

ශිෂ්‍ය කේන්ද්‍රීය අධ්‍යාපනය හා ශ්‍රීලංකාව

ශිෂ්‍ය කේන්ද්‍රීය අධ්‍යාපනය නූතන යුගයේ ශ්‍රී ලංකාවේ අධ්‍යාපන ශ්‍රේත්‍රයේ මහත් පෙරලියක් කිරීමට ගෙන ආ සංකල්පයකි. නමුත් එය තවමත් අවශ්‍ය ප්‍ර‍තිථළ අධ්‍යාපනයට ලබාදී නොමැත. ශිෂ්‍ය කේන්ද්‍රීය අධ්‍යාපනය යනු ශිෂ්‍යයයන්ව යම් විශයක් තනිව ඉගෙන ගැනීමට යොමුකිරීමයි. මෙහි දී බහුතර මතය වන්නේ ගුරුවරයාගේ කාර්ය භාරය අවම වන බවයි. නමුත් එය මිත්‍යාවක් බව මගේ අදහසයි.
ශීෂ්‍ය කේන්ද්‍රීය අධ්‍යාපනයේ කල යුත්තේ ශිෂ්‍යයන්ට එම විශයේ මුළික සංකල්ප ඉගැන්වීමයි පසුව එම ව්ශය වැඩිදුර අධ්‍යනය සඳහා ඔවුන් යොමුකිරීමයි. එය පොත් පත් මගින් නිරීක්ෂණ මගින් අන්තර්ජාලය පරිහරනය කිරීමෙන් වැනි ක්‍රියා වලින් සමන්විත වේ. මෙහිදී ශිෂ්‍යයා දැනුම පිපාසයෙන් පෙනෙන්නෙකු වියයුතුවේ දැනුම සොයා යන්නකු විය යුතු වේ.
මේ සදහා ඔවුන්ට අවශ්‍ය යටිතල පහසුකම් අධ්‍යාපන බළධාරීන් හා ගුරුවරුන් සපයා දිය යුතුවේ. එනම් ඔවුන්ට පරිහරණය කිරීමට හොද පුස්ථකාලයක් සෑම විශයක් ගැනම ඉගෙන ගත හැකි. පරිගණක කාමරයක් හා අන්තර්ජාල පහසුකම් හා ඒවා භාවිතා කිරීම සදහා දැනුවත් කිරීම්.
මෙහිදී ශිෂ්‍යයා විසින් යම්යම් කරුණු පරිහරණය කරණ අතර ගුරුවරයා ගේ කාර්ය භාරය වන්නේ ඔවුන්ට නෙවැටහෙන යම් කරුණක් වේනම් එය ඔවුන්ට විසදාදීමයි. ඒසදහා ගුරුවරයා විශය පිළිබද මනාදැනුමකින් යුක්ත විය යුතුවේ. බොහෝ විට පොත්පත් පරිහරණයේ දී. ශිෂ්‍යයාට ගැටලු ඇතිවන්නේ තමන් උගත් දෙයින් බාහිරවයි එනමි එය Syllabus එකහි අඩංගු කරුණුවල නොවේ. ඒ අවස්තාවේදී ගුරුවරයාට එමකරුණු ශිෂ්‍යයාට පැහැදිලි කර දීමේ හැකියාව තිබිය යුතුවේ. ඒ අවස්තාවෙදී ශිෂ්‍යයාට ලැබෙන්නේ ඕක විභාගයට එන්නෙනෑ හෝ ඒක Syllabus එකට අදාලනෑ යන්න නම් එතන ශිෂ්‍ය කේන්ද්‍රීය අධ්‍යාපනයක් නොමැත.
මා දන්නා කරුණක් වන්නේ මෙම ක්‍ර‍මය ක්‍රියාත්මක වන රටවල ගුරුවරු එම විශය හි නිපුනයෝය ඔවුන්ට විශය පිලිබද Master හෝ PhD උපාදිවලින් යුක්ත වේ. තවද එම රටවල උදාහරණ ලෙස තොරතුරු තාක්ෂණය ගත හොත්. මෘදුකාංග ඉංජිනේරුවරයකුට වඩා ගුරුවරයකුගේ වැටුප ඉහලය. මක්නිසාද යත් මෘදුකාංග ඉංජිනේරුවකුට තම රාජකාරි කිරීමට අවශ්‍යවන්නේ තමන්ගේ රාජකාරි හා සම්බන්ධ සීමිත දැණීමක් පමණි. නමුත් තනිවම ඉගෙන ගන්නා ශිෂ්‍යයන් විසින් තොරතුරු තාකෂණයේ සමහර කරුණු පිලිබද ඉතා ගැබුරින් ප්‍ර‍ශ්න ඇසීමට ඉඩඇත මෘදුකාංග නිපදවීමට එවැනි කරුණු අවශ්‍ය නැති නිසා නිපදවන්නන්ට එය අවශ්‍ය නැති උවත් කුතුහලය ඇති ශිෂ්‍යයන් ඒවා ගැබුරින් හැදෑරීමට අවශ්‍ය බැවින් ඒවා අධ්‍යණය කර ගුරුවරුන්ට අපහැදිලි තැන් පැහැදිලි කරගැණීම සදහා යොමුකරණු ඇත එවිට ඒවාට සාධාරණ පැහැදිලිකිරීමක් ගුරුවරයා ලබා දියයුතු වේ.

එසේ නොමැති උවහොත් මෙම ක්‍ර‍මය සංකල්පයක් මිස ප්‍රායෝගීකව යොදගත හැකි ක්‍ර‍මයක් නොවේ. තවද ශිෂ්‍යයන්ගේ දැනීම මැනීමේදී ප්‍ර‍ශ්න පත්‍ර‍ දැනට දක්නට ලැබෙන ක්‍ර‍මයෙන් මිදී දැනුම සොයා යාමට ශිෂ්‍යයන්ව පොලබවන ලෙස සකස් වියයුතුය. එසේ නොමැති උවහොත් ඔවුන්ගේ මූලික බලාපොරත්තුව විභාගය සමත්වීම බැවින් ඔවුන් නූතන ක්‍ර‍මය අතහැර පැරණි ක්‍ර‍මයම භාවිත කරණු ඇත


එබැවින් මෙම සංකල්පය යතාර්තයක් කිරීමට එය සංකල්පයක් ලෙස හදුන්වාදීමම නොව ඒ සදහා අවශ්‍ය යටිතල පහසුකම් ශිෂ්‍යයන්ට සැපයිය යුතු බව මගේ අදහසයි.

Tuesday, October 27, 2015

So you want to be a Software Engineer?

Software Engineering is a subject that catches the eyes of most of the young generation today, if you ask what they want to become when they grow up, most may say software engineer. When people talk about software engineering they often talk about programming. yes programming is one of the major parts in software engineering but there are more important things like analysis and design and a lot more. So what does it take to be a good software engineer?

Every job requires certain skills and abilities and they differ from person to person depending on their background, personality, behavior, education, and some even acquire by birth. In your interview most of the company will not check your Knowledge since they already know you have learned them, a simple paper perhaps to know that you understand the concepts well. but most of all they will test your ability to handle that job, which is the skills and talents required to do it perfectly. just like soldiers are tested for physical fitness. you will be tested for the required skills, if you have them well you will get the job if not you will fail. Sometimes if they find out that you have the necessary skills but not the knowledge they may hire you yet and train you. since you can teach subjects like software engineering to people, you cannot teach them how to develop software, i.e. the skills and talents needed to do it. since most of the private sector are well aware of this, they will do it. but for government, well their HR is different, So as the workload of IT and their definitions of some fields, so they may not have such a criterion for selection. (in Sri Lanka Only)

Software or a program is a problem that you or developers get because one who has it could not solve it. so you have to go through several steps in order to solve it.

So what will it take to build a good software? What do you have to go through to get a finalized product? In software engineering theory there is a life cycle that you may already hear of they are "Iterative", "Waterfall" and so on. Which requires you to do some steps when building software.

---------------------------------------------------------------------------------------------------------------------
Feasibility study- to figure out whether you have the necessary skills and technology, or have the budget to solve it
Requirement Gathering - to find out what the problem is
Requirement Analysis- understand the problem
Design- give solution to the problem
Coding- implement the solution
Testing- find out is this the right solution
Maintenance- make sure the solution will continue to be used, and adjust it as necessary
---------------------------------------------------------------------------------------------------------------------

which you may have learned under the waterfall model, but what it will take to do all of this, what makes you a good software engineer. will you be able to climb the ladder up as being the best or end up without a clue when it comes to software

You see all these are things that require a certain amount of skills, how much skill you have will define how good you are at developing software.

Feasibility Study and Requirement Gathering
this makes you go through the existing computer system or a manual which will force you to talk to many people to get their idea, find out what is necessary to do. but you may find out even when you talk to them you may not get the right requirement from them, they will keep on talking things, but most of them will not be relevant to your software. The people you design your software for are not experts in software engineering and they do not know what you need to develop your software. so you need to listen to them carefully, let them talk and try to get the necessary information from them. Patience is a must. If you have to interact with them, ask questions when necessary, to understand what they need and not to build what you think they need, they are your end-users even what they ask may seem wrong to you but never the less if you deliver what they never ask they will not use it. most of this phrase goes with interviewing employees, giving them questionnaires. so communication skill is a must, this part play lot with personality, negotiation and more of social skills.

at the end of the feasibility study it generates feasibility report which will tell that the system is economically or technically feasible (i.e. can we do it with the allocated budget and do we have the necessary equipment and skilled people to do it) or not and at the end of requirement gathering it will produce a document with requirements.

Requirement Analysis 
OK now you have everything that you need to know, so it seems, or will it be enough to develop your software? Well, you need to analyze the software which requires analytical skills see software or program is a problem that a person gives it to us which he can not solve on his own, so he asks us to solve it for him. bottom line you must get to know constraints, boundaries understand the problem why and what needs to be done what are the inputs what are the outputs what are the processes so on and so forth. In this phrase you may find that data that you collected is not enough so you need to go back and ask the necessary questions and get what you require of them. you must have a way of solving problems, must be a good thinker and have the ability to grasp things easily and understand them. this is considered the most tedious and hardest thing of Software Engineering since all the other phases depend on this one. Mistakes made to this that uncover later phases will require adjusting this, which makes the process to come back here and start all over again. problem-solving skill is a must for this to work. at the end of requirement analysis, it creates a software requirement specification document(SRS).

Design
now you have a sense of what you have to do, you need a design. It's just like an architect to design a house. Just like he knows where to put windows and where not to, how to connect rooms and other parts, and have integrity (this is why people who do software design is known as software architects) which you may know as a plan. software design is more than a house plan, but you get the idea. So in this phase, you need to put it all together and build a visual diagram of the system. there are many tools that give you the ability to do this. DFD is one, UML is another. UML gives you the ability to design 15+ diagrams, which will help you to design your system, with each giving different views of the system. This requires the person to have the ability of gradually working through problems that he understands, to a solution that he may think the best. (which is the best) you must be a good thinker and have the ability to understand problems and good at giving logical solutions to them. problem-solving skill is a mustat the end of this phrase, you will generate a bunch of diagrams like DFD or UML, which tell the functionality and behavior of the system.

there are tools that help people to do this. Some of them could even be converted to cording, making the developer's job easy. It can generate code to the functional level so developers only need to code what's within the functions.

Cording
this is the programming part of the system. which the developer code according to the design to get a finished product. since the programming is a logic base thing, logical thinking is a must. The design that you build must be coded to match the needs, you must think of a way to achieve what the picture describes. it is like solving a logic puzzle. if you have a good design i.e. UML diagrams like The Class diagram there are many tools that Convert it to cording languages. java, .net are some common platforms. You have to draw the diagram in the software and have to use the foreword engineering which is converting UML to code. Most of the diagramming programs support it. The code is incomplete, it creates all the classes of the program, their private and public variables, and all public-private functions you only have to code what's in the function that is all. logical thinking is a must for this to work. at the end of this phase, you will get a working product.

Testing
this is a phrase that undergoes checking of the bugs of the developed system. You test it unit by unit to see everything work as expected and not go in a silly way that you may never expect. this can be divided into two sub-phrase unit testing and integrated testing, unit testing, which is testing each component alone. Integrated Testing is the test done after combining them all. This is done by black-box testing, white-box testing, alpha testing, beta testing, and so on. this requires you to understand the system and its behavior, build test cases with each having 2 or more data, and gradually putting them through the system and finding out whether we get the expected result. It is testing all cases, that is even things that are not relevant since users can do anything, a negative number where positive is needed, a character where an integer is expected, what happens if you give some data that does not match your business criteria like giving 300 to an age of a person and so on, patient is a must. this requires most of the allocated time of the software engineering life cycle. if a problem is found during the test it will make you code again, if it is a programming problem or you have to send it to design if it is a problem of design and work from there or analysis if it is the problem. In the end you may even have to go back and collect data if it is a problem with your data making you to do it all over again.

Maintenance
this is the biggest part of the system now you have built a system, so you have to maintain it, you have to correct the bugs that never were found at the testing and change it to the future needs get backups and make sure that nothing unnecessary will happen to it. which need dedication to the system as long as it functions. a user manual is created and software is documented for future reference, which makes it easy for future changes even if your current developers leave the organization. 



Friday, October 2, 2015

RPG Maker VX Ace

C++ For Beginers