Saturday, August 5, 2017

Amazon Web Services


What is Amazon Web Services ?

Amazon Web Service is a comprehensive, evolving cloud computing platform provided by Amazon.com. In simplest terms, cloud computing means storing and accessing data and programs over the internet instead of your computers hard disk. AWS was launched in 2006 and first they have provided online services for websites and client-side applications. AWS is located in 16 geographical regions in the world, such as US east, US west, Brazil, EU, Asia pacific etc.


AWS Products and Services



This is an overview about the products and services which are provided by AWS. So, let's start from the Compute category.



Amazon EC2 server is the most popular and the important server in the compute category. EC2 is not really a cloud service. It is acting as a bridge between the virtual servers and cloud servers. But it is a really good service for beginners. Auto scaling is another good service which is provided by AWS. Auto scaling is a feature of EC2. In auto scaling we can create a group of servers. Then the number of servers will be change according to the user load. As an example if the user load is high auto scaling will increase the number of servers to avoid the traffic. If the user load is low then the number of servers will be decreasing. Auto scaling will decrease the wastage of servers. Amazon Lambda is using for the applications which are infrequently run and which has very low usage. So the server is build only for few millisecond. Lambda is also reduce the wastage and this will be a really popular service in the future.  

Next category is the Storage category. 



Amazon S3 is an important simple storage service. In this service we can store any number of objects like video files, pictures, database backups etc. There's no limit for the number of objects. But all the objects should be less than 5TB. It is an infinitely scalable and user has to pay only for the storage that they have used. Durability and availability of S3 service is 99.99%. That means the data loss on s3 is zero. Amazon EBS can use as a hard disk for EC2 instances. But they work really faster and 20 times relilable than hard disks. And can have sizes from 1GB to 16TB. Amazon Glacier is using for long term storage. It is highly durable like s3 and the specialty is the cost is very low. It is 1/5 the cost of s3 service.

Next category is the Database categoty. 


Amazon RDS is the most commonly used database service because it is using for relational databases. This service provides features like backups, software patching, managing replicas which are hard to do manually. Amazon DynamoDB is using to manage nosql databases. Amazon ElastiCache is a managed service for the in memory cache. Amazon RedShift is a warehouse service which is provided by aws.

Next category is the Networking category. 


Amazon VPC is the virtual private cloud where users have more control over ip addresses, routing, firewalls etc. In this service customers have more security because it is not connected to the internet. AWS Direct Connect make easy to establish a dedicated network connection to aws. Elastic Load Balancer is using to distribute the network traffic across all the EC2 instances. 

Next category is Management tools.


Amazon CloudWatch is a management tool where customers can use to monitor their instances. It is sending notifications when a server is down or if anything happened. It will show the utilization of the resources so the users can take actions or do some planing. AWS CloudTrail is a service can audit the users of our servers and track their actions and deliver a log file. That file contains the identity of the API callers, time of the API call and the source ip address of the API caller etc.In AWS CloudFormation users can create a template of their server architecture and reuse it or can can use a template which is provided by AWS. This is an easy way to manage the architecture of the servers.

Next category is Security and identity.


AWS Identity Access Management will do the access controlling to the AWS services and resources. Imagine a company can have a one aws account. Under that account we can set a user group and control their access like what can a developer do and what they can do.

These are the basic services that are provided by Amazon Web services and there are lot more other services as well. I will write more on AWS later. Keep in touch...:)

Wednesday, July 26, 2017

Version Controlling

When we  do changes to files existing file is changing over time. Sometimes you may want to see what you have done past. That's the point you will be wanting a version controller which helps you to recall specific version of the file.

Why version Controller? 

Because it allows to:
  • Revert file or the entire project back to previous state.
  • Compare changes over time.
  • If there's an nay error in the current version, you can see who last modified something that cause to the error.
Earlier as a mechanism of version controlling what most people did was to copy files into other directory or time stamped (If they were smart enough). This way seems like so easy but it easily cause to errors. In this way we can accidentally do the modification to the wrong file. 

Local Version Control System

To overcome from the above mentioned problem, local version control system can be used. In this mechanism it uses a simple database that kept all the versions of files. So the user can check out the version of the file that they want. 



Revision Control System (RCS) is the best example for local version Control System. RCS keeps patch sets in a special format on disk. So if RCS user wants to get any version of file, it can recreate it by adding those patches.

Why not Local Version Control System

When it comes to development what most matters is to connect to the other developers who are using different systems. But this mechanism won't allow that.  

Centralized Version Control System

This mechanism has found the answer for the problem that local version controlling mechanism had. In centralized version control system, it has a single server which contains all the versions of files.  So that allows to any number of users to check out or check in files from that centralized server.



Why not Centralized Version Control System

  • Having all the data in one place is a huge mistake. It has higher probability of loosing data. 
  • If the server goes down, no one can collaborate during that time. 

Distributed Version Control System

This is the most recently used and the most reliable mechanism for controlling version so far. In this mechanism instead of checking out the latest version of the file, whole repository is cloned into their local machines. So in case of scenario where server goes down or data got corrupted, one of the any client's copy can be copied back and restore it. 



GIT

GIT is the most popular and the most used version controller. It uses Distributed Version Control System as the mechanism. 

Why GIT

  • Speed
  • Simple design
  • Strong support for non-linear development
  • Fully distributed
  • Able to handle large projects
While other VCs store information based on files, GIT is more likely a set of snapshots of  file system. If one file has no change, then GIT doesn't store that file again. Instead GIT just link to the previous identical file it has already stored. 

Best fact about GIT is nearly every operation is local. Whole project history is in your local disk. You can differ the changes, you can commit to the local database even if you are offline. Latency of network doesn't really matter to GIT.

The other interesting fact about GIT is it checksum before it stores. And the referred to by that checksum. For this GIT is using a mechanism called SHA-1. Basically you can't do any change to files without GIT knowing.

There are 3 stages of GIT

  • Committed
  • Modified
  • Staged



  • Working Directory : Single checkout of one version of the project.
  • Staging Area           : Files which store the information about what will go into your next                                              commit.
  • git Directory           : What we clone from another computer. 
If you are using GIT, there are so methods you can use. I highly recommended command line for GIT.  First because it's good for the best practice. And secondly even though GUIs looks so fancy, most of them implemented few of functionalities of the GIT.  And if you learn how to use command line you can easily learn how to use those GUIs.

Hope you guys got an idea about Version Controllers. If you guys have any thoughts to share, comment down below. See you guys with a new post. :) 

Wednesday, April 19, 2017

Front-end Development Frameworks



A front-end web development framework is simply a collection of production HTML/CSS/ JavaScript components that we can use in our designs. Nowadays, there are so many front-end frameworks. But number of really good once can be narrowed down to just a few. Here is a list of front-end frameworks that attempt to solve most of the web design problems of modern times.  

  1. Bootstrap

Bootstrap was developed by Twitter developers and released for use in 2011 as open source framework. As of today, bootstrap is the most used frond web development framework in the world.
           Bootstrap is a powerful framework to build mobile responsive websites of all sizes. The best thing about bootstrap is that it is continuously upgrades by bootstrap developers. Bootstrap is ideal for the beginners and those who prefer a robust front-end framework.

Here are some resources to you to get started with Bootstrap,

      2. Materialize CSS

Materialize is a modern responsive front-end framework which implements Google's material design specifications. MaterializeCSS comes with ready to use buttons, cards, forms etc. It is offered in both standard version and in one that runs on SASS. 
                                                                                          There are some additional features including ripple effect animation, drag-out mobile menus that are in materialize.Materialize is ideal for the experienced developers who needs guidance regarding Google's material design specifications. 

Here are some resources to you to get started with Materialize CSS,
        
      3. Semantic-UI


Semantic-UI is a newcomer to the scene, which gives a tough competition to the popular frameworks like bootstrap. The adoption and the support of this framework is increasing as a faster pace.
                 Semantic-UI's main claim is it's simplicity. Even those who are with very less coding experience will feel fairly at home working with this framework. Semantic's class names are bit easy to understand by reading, so the beginners can hit the ground easily. But those who are with complex designs and developments, might find this framework lacking. Ideal for the beginners those who want a light weight framework.

Here are some resources to you to get started with Sementic-UI,

      4. Foundation 


The Foundation framework defines a base layer of Objective-C classes.It provides a responsive grid and HTML and  CSS UI components, templates, code snippets etc. Foundation was maintained by ZURB and it is open source.
                                                             Foundation was designed for and tested on numerous browsers and devices. This feature-rich framework was used in may sites like Facebook, eBay and Firefox. So it is bit fairly complex. When using Foundation there's no lack in styles. But it is too bit complex for the beginners. So Foundation is ideal for the developers who have decent amount of experiences.

Here are some resourcese to you to get started with Foundation,

     5. Material-UI



Material-UI is a set of React components that implement Google's Material Design specifications. Out of so many frameworks, material-ui has most refined implementation of Material Design. It is highly customizable and it includes styles that are separated into individual files. So you can override less css variables without affecting framework components. Material-UI is mostly suitable for the developers who have experience and understanding about React.

Here are some resources to you to get started with Material-UI,
    
     6. Angular Material



Angular material is and angular-native, UI component framework from Google. Material Design is the soul of Angular Material and it makes great design the default. Layout in Angular Material is sensible and easy to articulate.

Here are some resources to you to get started with Angular Material,


The following list shows the amount of GitHub stars each project had the time of writing this post,


  • Bootstrap : 109,580
  • Materialize CSS : 25,934
  • Semantic-UI : 34,158
  • Foundation : 25,284
  • Material-UI : 24,842
  • Angular Material : 8,335


As you see, now there are many different front-end frameworks with different features in the technical world. So then, before selecting a framework for your application, first consider about your skills as well as the requirement of your project. 

If you guys would like to share any thoughts about this post with us, comment below. Good Bye :)

Sunday, January 29, 2017

Android Operating System


Building mobile applications can be as easy as opening up the IDE, throwing something together,doing a quick bit of testing, and submitting to an App Store – all done in an afternoon.Or it can be an extremely involved process that involves rigorous up-front design, usability testing, QA testing on thousands of devices, a full beta life cycle, and then deployment a number of different ways.In this post we are going to brush up our knowledge about android operating system.

What is Android?

                               Android is a mobile operating system developed by Google, based on Linux Kernel and designed primarily for touchscreen mobile devices such as smartphones and tablets. Android was developed by the Open Handset Alliance, led by Google, and other companies.
                 The first beta version of the Android Software Development Kit (SDK) was released by Google in 2007. After that the first commercial version, Android 1.0 was released on September 2008.On 27th of June 2012, at the Google I/O conference, Google announced their next android version, 4.1 Jelly Bean.

Android Applications

                                 Android applications are usually developed in the Java language using the Android Software Development Kit. Once developed, android application can be packaged easily and sold through a store such as, Google playstore, SlideMe, Opera mobile store, Mobango, F-droid and the Amazon appstore.


Android powers hundreds of millions of mobile devices in more than 190 countries around the world. It's the largest installed base of any mobile platform and growing fast. Every day more than one million new android devices are activated worldwide.


Android Versions

Code names of android ranges from A to N currently, such as Aestro, Blender, Cupcake, Donut, Eclair, Froyo, Gingerbread, Honeycomb, Ice cream sandwitch,Jelly Bean, Kitkat, Lolipop, Marshmallow and Nougat. API level is an integer value that identifies the framework.


Android Architecture 

Android operating system comprise of different software components arranges in stack. Different components of android operating system are

     1.Linux Kernel
 
Linux Kernel provides a level of abstraction between the device hardware and it contains all the essential hardware drivers like camera, keypad, display etc. And it handles all the things that Linux is really good at.
     
     2.Libraries

It provides the different libraries useful for well functioning of android operating system. These libraries are java libraries built specific for android operating system like SQLite, SSL, OpenGL, Media framework, Webkit etc. 

    3.Android Run time

It provides the most important part of android called Dalvik Virtual Mechine. It is similer to JVM, but the different is that is is designed and optimized for android. Dalvik virtual mechine uses some core functions of  the linux.

    4.Application framework

It provides many high level services to applications in the form of java classes. Application developers are allowed to make use of those services in their applications.

    5.Applications 

We'll write our applications to be installed on this layer only.



Some interesting facts about android


  1. Currently android is running in 25 billion mobile handsets.
  2. Android is the most popular mobile operating system.
  3. Android versions are names alphabetically and all the names are eatable food items.
  4. Android development is carried out by Google inc which Acquired Android Inc., A Small Startup, in 2005.
  5. Apple and Windows Phone Are Android’s Biggest Competitors still market share of both apple and window together is far behind android.
Hope you guys got a clear idea about android operating system,If you guys would like to share any thoughts about this post with us, comment below. Good Bye :)


Tuesday, October 25, 2016

Agile Software Development Method

When developing a software, it's not easy to deal with the client and changing environment. We have been introduced to many software process models such as waterfall, prototype, incremental, agile etc. We are hoping to talk about all these in our blog. But for now we'll brush up your knowledge on agile software development.

History

        On February 11-13, 2001, a group of 17 software leaders met at the Snowbird resort in Utah and discussed about the "light weight" development methods, and that's how manifesto for agile software development published.


Why bother?

                                                                              
           Agile software development is a group of software methods including 
  • Extreme Programming (XP)
  • Scrum
  • Crystal
  • Dynamic System Development Method (DSDM)
  • Lean Development and Future Driven Development (FDD)
Above mentioned agile development methods are kind a popular these days to build the right software at the right time. Even though all these methods are unique in their own way. They all have continuous planning, continuous testing, continuous integration and other forms of continuous evaluation of both projects and the software in common.


 Figure 1: Life cycle of agile software development method

Characteristics 

  • Warmly welcome changing requirements even late in development
  • Customer Concentric Software Development methodology  
  • Light Weight Software Development Methodology which is less document centic 
  • Usually work bet for small team sizes (<15)

Agile Manifesto 

Individuals and Interactions over process and tools Working Software over comprehensive documentation Customer Collaboration over contract negotiation Responding to Change over following a plan
"That's while there is value in the items on the right , we value the items on the left more"
Individuals and Interactions 
  • Self-organization and motivation are important
Working Software
  • Working software works than pieces of papers when presenting to the clients.
Customer Collaboration
  • Human mind changes continuously so do clients requirements.Therefore continuous customer or stakeholders involvement is very important. 
Responding to Change
  • Agile Methods are focused on quick responses to change and continuous development.

Agile Principles


Agile Developing Method based on 12 principles.
  1. Customer satisfaction by early and continuous delivery of valuable software
  2. Welcome changing requirements, even in late development
  3. Working software is delivered frequently (weeks rather than months)
  4. Close, daily cooperation between business people and developers
  5. Projects are built around motivated individuals, who should be trusted
  6. Face-to-face conversation is the best form of communication (co-location)
  7. Working software is the principal measure of progress
  8. Sustainable development, able to maintain a constant pace
  9. Continuous attention to technical excellence and good design
  10. Simplicity the art of maximizing the amount of work not done is essential
  11. Best architectures, requirements, and designs emerge from self-organizing teams
  12. Regularly, the team reflects on how to become more effective, and adjusts accordingly

Drawbacks 


Everything has drawbacks so why not in Agile Developing Method
  • Agile methodologies can be inefficient in large organizations and certain types of developments
  • Team members' mind set should be set into that this Software Product has no end
  • Since this Method is new most of the team members don't have good knowledge about this.
  • Most of the time teams members might spend more time on planing at the very first place due to not familiar to the Agile method
  • Attempting to take on too much in an iteration is an another failure. Even though Agile development method allows continuous changes, having too much works in progress results inefficiencies.

Overview 


Agile Software Development is 
Philosophy + a set of Guidelines for software development.
P :
  • Customer Satisfaction
  • Early incremental delivery
  • Small, highly motivated project team
  • Overall development simplicity
  • Less paper works
G :
  • Active continuous communication and collaboration between developers and users.
Here's a video which will give you an idea about Agile Software Development Method in a graphical way.  




Hope you guys got a clear idea about Agile Software Development Method. If you guys would like to share any thoughts about this post with us, comment below :)