Friday, February 22, 2019

Industry Practices and Tools

INDUSTRY PRACTICES AND TOOLS

So with this article, I wanted to give you the information that helped me understand what git is, what it can do, and the commands that I find to be the most helpful when working in a git repository

Let’s begin!


Version control is a component of software configuration management, version control, also known as revision control or source control. Version control systems are a category of software tools that help a software team manage changes to source code over time. Version control software keeps track of every modification to the code in a special kind of database. If a mistake is made, developers can turn back the clock and compare earlier versions of the code to help fix the mistake while minimizing disruption to all team members. Version control helps teams solve these kinds of problems, tracking every individual change by each contributor and helping prevent concurrent work from conflicting.


Developing software without using version control is risky, like not having backups. Version control can also enable developers to move faster and it allows software teams to preserve efficiency and agility as the team scales to include more developers

Version Control Systems (VCS) have seen great improvements over the past few decades and some are better than others. VCS are sometimes known as SCM (Source Code Management) tools or RCS (Revision Control System). One of the most popular VCS tools in use today is called Git. Git is a Distributed VCS, a category known as DVCS, more on that later. Like many of the most popular VCS systems available today, Git is free and open source.

Collaboration
 •With a VCS, everybody on the team is able to work absolutely freely-on any file at  anytime.
•The  VCS will later allow you to merge all the changes in to a common  version. •Storing versions properly.
•A version control system acknowledges that there is only one project.
•Restoring previous versions.
•Understanding what happened.
•Every  time you save  a new version of your project, your VCS requires you to provide a short description of what was changed.
•Backup.



   




Local Version Control Systems

 Many people’s version-control method of choice is to copy files into another directory. This approach is very common because it is so simple, but it is also incredibly error prone. It is easy to forget which directory you’re in and accidentally write to the wrong file or copy over files you don’t mean to.

To deal with this issue, programmers long ago developed local VCSs that had a simple database that kept all the changes to files under revision control.

Centralized Version Control Systems



The next major issue that people encounter is that they need to collaborate with developers on other systems. To deal with this problem, Centralized Version Control Systems (CVCSs) were developed. These systems (such as CVS, Subversion, and Perforce) have a single server that contains all the versioned files, and a number of clients that check out files from that central place. For many years, this has been the standard for version control.

•Distributed Version  Control Systems 



This is where Distributed Version Control Systems (DVCSs) step in. In a DVCS (such as Git, Mercurial, Bazaar or Darcs), clients don’t just check out the latest snapshot of the files; rather, they fully mirror the repository, including its full history. Thus, if any server dies, and these systems were collaborating via that server, any of the client repositories can be copied back up to the server to restore it. Every clone is really a full backup of all the data.














 Git is a distributed version control tool that can manage a development project's source code history, while GitHub is a cloud based platform built around the Git tool. Git is a tool a developer installs locally on their computer, while GitHub is an online service that stores code pushed to it from computers running the Git tool. The key difference between Git and GitHub is that Git is an open-source tool developers install locally to manage source code, while GitHub is an online service to which developers who use Git can connect and upload or download resources.

One way to examine the differences between GitHub and Git is to look at their competitors. Git competes with centralized and distributed version control tools such as Subversion, Mercurial, Clear Case and IBM's Rational Team Concert. On the other hand, GitHub competes with cloud-based SaaS and PaaS offerings, such as GitLab and Atlassian's Bitbucket.





 Basically git commit "records changes to the repository" while git push "updates remote refs along with associated objects". So the first one is used in connection with your local repository, while the latter one is used to interact with a remote repository.


commit: adding changes to the local repository

push: to transfer the last commit(s) to a remote server



 The Staging Area:

The Staging Area is when git starts tracking and saving changes that occur in files. These saved changes reflect in the .git directory. That is about it when it comes to the Staging Area. You tell git that I want to track these specific files, then git says okay and moves them from you Working Tree to the Staging Area and says “Cool, I know about this file in its entirety.” However, if you make any more additional changes after adding a file to the Staging Area, git will not know about those specific changes until you tell it to see them. You explicitly have to tell git to notice the edits in your files.

How can you see what is in your Staging Area? Run the command git status like before. It will look something like the image below.





           Collaborative workflow is the convergence of social software with service management (workflow) software. As the definition implies, collaborative workflow is derived from both workflow software and social software such as chat, instant messaging, and document collaboration.

To define collaborative workflow, we can examine the definitions of its components: workflow and collaboration objects.

Workflow

Workflow is a set of activities (service requests, tasks) and the rules that govern their behavior as they move from one service provider to the next until a project is completed.

Collaboration objects

Collaboration objects include web-based meetings, instant messaging, knowledge management wikis, documents (ECM), and shared calendars.

Goal

The goal of collaborative workflow is to provide synergetic efficiency gains to its constituents (social communication and service management) by:

    Improving effectiveness on joint tasks by removing the communication barriers between team members
    Minimizing organizational boundaries and information silos
    Allowing online social interaction to be goal oriented, structured, and measured

Ideally, collaborative workflow is a collection of parallel and sequential tasks that rely on communication and coordination to achieve a desired outcome.


 Content Delivery Networks (CDN) is a system of servers deployed in different geographical locations to handle increased traffic loads and reduce the time of content delivery for the user from servers. The main objective of CDN is to deliver content at top speed to users in different geographic locations and this is done by a process of replication. CDNs provide web content services by duplicating content from other servers and directing it to users from the nearest data center. The shortest possible route between a user and the web server is determined by the CDN based on factors such as speed, latency, proximity, availability and so on. CDNs are deployed in data centers to handle challenges with user requests and content routing.

The benefits of CDNs are
 E-Commerce: E-commerce companies make use of CDNs to improve their site performance and making their products available online.

Media and Advertising:
In media, CDNs enhance the performance of streaming content to a large degree by delivering latest content to end users quickly.

Business Websites:  CDNs accelerate the interaction between users and websites, this acceleration is highly essential for corporate businesses.

Education:  In the area of online education CDNs offer many advantages. Many educational institutes offer online courses that require streaming video/audio lectures, presentations, images and distribution systems.



 Differences Between CDNs and Web Hosting.

Web Hosting is used to host your website on a server and let users access it over the internet. A content delivery network is about speeding up the access/delivery of your website’s assets to those users.
    Traditional web hosting would deliver 100% of your content to the user. If they are located across the world, the user still must wait for the data to be retrieved from where your web server is located. A CDN takes a majority of your static and dynamic content and serves it from across the globe, decreasing download times. Most times, the closer the CDN server is to the web visitor, the faster assets will load for them.
    Web Hosting normally refers to one server. A content delivery network refers to a global network of edge servers which distributes your content from a multi-host environment.


Virtualization Station 1.x/2.x System Requirements

    Processor that supports Intel VT-X ( More information )
    Minimum 2 GB Memory (NAS reserves 1.5 GB Memory)
    Minimum 4 GB Memory (NAS reserves 2 GB Memory)
    Minimum 550 MB Hard disk space
    Minimum two Ethernet cables
   
Suitable applications to install in a VM:

    Need to run 24/7 but consume less hardware resources (for example: where the average CPU usage rate is around 50%)
    Applications that need routine access to data/files on the Turbo NAS
    Non-intensive graphic functions

Unsuitable applications to install in VM:
    Video editing software, e.g. Adobe Premiere Elements, Cyber Link Power Director
    Computer games or other graphically-intensive software


Virtualization has several benefits. For businesses with limited funds, virtualization helps them stay on budget by eliminating the need      to invest in tons of hardware

  
    pros:
 Virtualization helps businesses reduce costs in several ways, according to Mike Adams, senior director of cloud platform product marketing at VMware.
Reduced IT costs:
          Capital expenditure savings
          Operational expenditure savings
          Data center and energy-efficiency savings
Efficient resource utilization.
Cons: The upfront costs are hefty
          Not all hardware or software can be visualized.



 Understanding the Role of a Hypervisor

The explanation of a hypervisor up to this point has been fairly simple: it is a layer of software that sits between the hardware and the one or more virtual machines that it supports. Its job is also fairly simple. The three characteristics defined by Popek and Goldberg illustrate these tasks:

    Provide an environment identical to the physical environment
    Provide that environment with minimal performance cost
    Retain complete control of the system resources




 For many, emulation and virtualization go hand in hand, but there are actually some really key differences. When a device is being emulated, a software-based construct has replaced a hardware component. Its possible to run a complete virtual machine on an emulated server. Both methods are used for various purposes and are sometimes confused, so be aware of the differences.




Containers and virtual machines are two ways to deploy multiple, isolated services on a single platform.
          The container’s system requires an underlying operating system that provides the basic services to all of the containerized applications using virtual-memory support for isolation. A hypervisor, on the other hand, runs VMs that have their own operating system using hardware VM support. Container systems have a lower overhead than VMs and container systems typically target environments where thousands of containers are in play. Container systems usually provide service isolation between containers. As a result, container services such as file systems or network support can have limited resource access.

          Virtual-machine technology is well-known in the embedded community, but containers tend to be the new kid on the block, so they warrant a bit more coverage in this article. Containers have been the rage on servers and the cloud, with companies like Facebook and Google investing heavily in container technology. For example, each Google Docs service gets a container per user instance.

          A number of container technologies are available, with Linux leading the charge. One of the more popular platforms is Docker, which is now based on Linux libcontainer.  Actually, Docker is a management system that’s used to create, manage, and monitor Linux containers. Ansible is another container-management system favored by Red Hat.




Read More