Libra logo on purple background

Discussion – Will Libra cryptocurrency change our lives?

In a bid to shake up the world’s banking system, Facebook has recently unveiled a cryptocurrency called Libra allowing its billions of users to make financial transactions across the globe.

Libra will be administered by a non-profit known as the Libra Association based in Geneva, Switzerland with 27 founding members including Uber, Spotify, Mastercard, Paypal, and Andreessen Horowitz. The association will promote an open-sourced Libra Blockchain and developer platform with its own programming language, plus sign up businesses to accept Libra for payment including giving customer discounts/rewards.It is expected to launch in the first half of 2020.

With all these developments, how will Libra cryptocurrency change our lives?

Tl; dr;

With a goal to foster better, cheaper, and open financial services, Facebook finally revealed the details of its crytocurrency Libra. The social media giant won’t fully control Libra. It will be governed by a non-profit Libra Association based in Geneva, Switzerland with 27 founding members including Visa, Spotify, Uber and Andreessen Horowitz. It is expected to launch in the first half of 2020.

Will Libra cryptocurrency change our lives?

Libra ecosystem

Libra is a unit of the Libra cryptocurrency named after the Roman unit of measurement for coins. It is represented by a three wavy horizontal line unicode character   just as dollar is represented by $.

Providing an alternative to cash, credit cards and bank transfers, Libra will differ from other major cryptocurrencies such as Bitcoin in being backed by a group of currencies including the pound(£) and the dollar($), thus making it far less volatile.

Its value is tied to a basket of bank deposits and short-term government securities. Moreover, it is built on a secure, scalable, and reliable blockchain.

Lisa Ellis, an analyst at Moffett Nathanson Research says, Libra has the potential to be “highly” successful. “Payments is foundational to doing commerce,” she said, “and this would be a significant step toward enabling that.”

 

With these developments going underway, how will Libra cryptocurrency change our lives?

phone using libra apps

Simple global currency and financial infrastructure.

Wanting to make Libra the evolution of PayPal, Facebook is hoping to make the said cyptocurrency simpler to set up.

In its Libra documentation, Facebook writes:

“Success will mean that a person working abroad has a fast and simple way to send money to family back home, and a college student can pay their rent as easily as they can buy a coffee… …That would be a big improvement on today, when you’re stuck paying rent in insecure checks while exploitative remittance services charge an average of 7% to send money abroad, taking $50 billion from users annually. Libra could also power tiny micro-transactions worth just a few cents that are infeasible with credit card fees attached, or replace your pre-paid transit pass.”

Financial opportunities for those lacking access to financial platforms.

Libra might be a great opportunity for those people who are unbanked and underbanked. It is bringing an entire generation of people into a more formal financial system. And also it helps them build their credit and move up the socioeconomic ladder.

In a released white paper, the Libra Association said:

“The advent of the internet and mobile broadband has empowered billions of people globally to have access to the world’s knowledge and information, high-fidelity communication, and a wide range of lower-cost, more convenient services… …Despite this progress, large swaths of the world’s population are still left behind: 1.7bn adults globally remain outside of the financial system with no access to a traditional bank, even though one billion have a mobile phone.”

Cryptocurrency for those with limited internet access.

One of the most common outcries about cryptocurrencies from the community has been, you need regular internet access to use bitcoin. The cost of using bitcoin in terms of phone data and miner fees often outweighs any benefits to actually using the currency.

This is where Facebook enters the picture.

Around the globe, Facebook has been the only way people can access the internet, and subsequently, any “non-cash-based financial system.”

With Libra’s introduction to the financing market, people will have free access to financial services on their phones everywhere.

Protection from unreliable currencies.

In the present, most people are forced to use their country’s fiat currency, even when that is a massive disadvantage to citizens.

Like the Argentinian peso for example, if Argentinians had put their life savings into bitcoin at its peak. Let’s just say way up over $20K USD, they would still have more money today than had they left it in the plummeting Argentinian peso.

With an increasing number of people taking advantage of the bitcoin over time, Libra will offer a wider audience refuge from inflation in a short term.

Summary

Facebook recently announced the launching of its envisioned cryptocurrency called Libra. The said digital currency will be under the supervision of a non-profit known as the Libra Association based in Geneva, Switzerland backed with its 27 founding members including Uber, Spotify, Mastercard, Paypal, and Andreessen Horowitz. It is expected to launch in the first half of 2020.

With all these developments, Libra has the potential to simplify the global currency and financial infrastructure, open great opportunities for those lacking access to financial platforms, make people have free access to financial services using only their phones everywhere, and offer a wider audience refuge from inflation.

By Tuan Nguyen

career options

Fullstack developers – what do we do?

A full stack developer is not just any ordinary job title that is ordinary its complex than you think. Meaning the position is not only referring to someone who can do both “frontend” and “backend” development but someone who has the capability in handling the complete implementation of a website, from project management to installing the correct operating system on a server. In my previous post frontend vs backend vs fullstack developers, we already touch the surface of what it takes to become a fullstack developer. Now let us dig a bit deeper into it.

Tl; dr;

A full stack developer is an engineer who has a variety of skills and can be able to work independently complete a product using those skills. Everything from databases, servers, systems engineering, and clients depending on the project as to whether the customer may need a mobile stack, a Web stack, or a native application stack.

Fullstack developer illustration

Source: Fiverr

What does a Fullstack developer do?

Having a wide range of techniques, a fullstack developer is someone who can work on both ends primarily in frontend and backend developments. It is not really necessary to master everything that requires you to work with those development tasks, it only means that you need to be capable enough to do the job with an understanding of the mechanics in building an application.

fullstack tech stack

Source: Hackernoon

A fullstack developer is proficient, if not fluent on the following fullstack layers:

Server, Network, and Hosting Environments. The developer understands what can break and knows the appropriate use of the file system, cloud storage, and network resources. A fullstack developer also needs to have knowledge about application scale when given the hardware constraints, and works side by side with DevOps.

Data Modeling. The developer is capable in creating reasonably normalized relational model, complete with foreign keys, indexes, views, lookup tables, etc. . And he/she should have familiarity with non-relational data stores concept and understands where they shine over relational data stores.

Business Logic. The developer has solid object oriented skills.

API layer / Action Layer / MVC. On this level, the developer understands how the outside world operates against business logic and data model, uses heavily on frameworks, and writes clear, consistent, and simple to use interfaces.

User Interface. The developer knows how to create a readable layout and acknowledges the need of acquiring artists and graphic designers for help.

User Experience. The developer can step back and look at a process that needs eight clicks and three steps, and getting it down to one click and write useful error messages.

Understanding of Customer and Business Needs. The developer can be able to grasp what’s going on when the customer uses the software and also has a grasp of the business.

Other additional abilities:

  • Writes quality unity tests;
  • Understands repeatable automated processes for building the application, testing it, documenting it, and deploying it at scale; and
  • Is aware of security concerns knowing each layer presents own vulnerabilities.

Advantages of acquiring/hiring Fullstack Developers.

  • Adding groundbreaking features to products for market excitement, fullstack developers can manage to make the whole stack from the ground up and is capable to handle a web project in full 360-degree perspective.
  • Skilled in both frontend and backend development, these developers can attain customer expectations with independent solutions.
  • Updated with the latest technological innovations, fullstack developers can make web projects more user-friendly by implementing smart features to get the best interactive website.
  • Taking part different types of web projects, these developers are already equipped with in-depth knowledge in the web and app development field.
  • Fullstack developerscan help with the whole design structure and provides input on any level as needed.
  • Since fullstack developers can handle all aspects of a single project, one can save much money.
  • Fullstack developers can represent the company and product to stakeholders and are flexible enough to move from one operation to another, helping to streamline processes and fast-track development.
  • If you have fullstack developers in your team, sharing of responsibilities among team members becomes easy. Thus attaining faster delivery of the final output.
  • Fullstack developers can help with the quality assurance and quality control of your design project. And they give your web/app project the edge to dominate the market.

Summary

Fullstack developers can do both frontend and backend developments or has the capability in completing the implementation of a website everything from databases, servers, systems engineering, and clients with independent solutions. They:

  • Understand what can break and why;
  • Know about application scale when given the hardware constraints, works side by side with DevOps;
  • Are capable in creating reasonably normalized relational model; familiar with non-relational data stores concept;
  • Have solid object oriented skills when it comes to business logic;
  • Understand how the outside world operates against business logic and data model;
  • Write clear, consistent, and simple to use interfaces, creates readable layout and acknowledges the need of acquiring artists and graphic designers for help;
  • Can step back and look at a process that needs eight clicks and three steps, and getting it down to one click and write useful error messages; and
  • Understand customer and business needs.

With regards to advantages, fullstack developers:

  • Are capable to handle a web project in full 360-degree perspective;
  • Can attain customer expectations with independent solutions having both frontend and backend development skills;
  • Can make web projects more user-friendly;
  • Are already equipped with in-depth knowledge in the web and app development field;
  • Can help with the whole design structure and provides input on any level as needed;
  • Are money-efficient since fullstack developers can handle all aspects of a single project;
  • Can represent the company and product to stakeholders and are flexible enough to move from one operation to another;
  • Can attain faster delivery of the final output; and
  • Can help with the quality assurance and quality control of your design project.

By Tuan Nguyen

free tafe image

Review – Free TAFE for priority courses

Since last year, I came to know about a government initiative: Free TAFE for Priority Courses. More information here.

In this post, I am going to share the experience going through the process to get it approved, and get me into a course of Certificate IV in Accounting and Bookkeeping for (almost) free.

Tl; dr;

Free TAFE for Priority Courses is a government program that provides free education to Victorian people. There are a number of programs that you can enrol and start your education.

To be eligible, you need to be an Australian/New Zealand citizen or a permanent resident.

What is this program?

Free TAFE for Priority Courses is a Victorian government program that helps people with financial challenge situation to study/train skills that can help them in their lives. For example they can learn a new trade and therefore increase their income and livelihood.

When I first heard about the program, there was a restriction: the program that I want to enrol in needed to be higher than my highest education level. E.g. If I enrol in a Diploma, my highest degree cannot be higher than that (Cert I to IV for example).

However, since January, they lifted the restriction and I happily enrolled into the course that I am currently studying.

What is the process?

I started looking at the list of programs that they offer in Free TAFE for Priority Courses. And finally I chose Certificate IV in Accounting and Bookkeeping to study. The reason was I did not know anything about accounting. Gearing toward financial freedom, I think accounting really helps systemizing my personal finance. RMIT is the university that offers that program and I headed to its enrolment process.

tafe course fee

Tuition fee needed for the course without the program

Everything went similar to what needed to be done in a normal enrolment process. RMIT provides a guide on how to apply for the program. You can read more about it here. There are detailed information on how to enrol and I followed the instructions to the letter. Different universities have different processes, and you will need to figure out the correct one. However, they all have the same name: vocational education. You can also ring up the university and enquire about the program (I find that the most effective way).

Are there any hidden fees?

The bad new is, the answer is yes.

The good news is, it’s not that much. I paid about $230 for the whole program as the administration fee (including student registrations, student card, etc.).

How do I manage to study while working?

I presented my situation to my direct manager, and ensured him that my work quality would still be top notch. Suggesting that I only needed to work from home on Monday (I already allocated all school work to Monday), he accepted the proposal. I know that I cannot do 40 hours work of work in 4 days without going to work early, so I manage to get to work at around 7.30am and leave work around 6.30pm, clocking 10 hours of work every other day.

Getting to work early was challenging at first, but then it got easier, since I started uni at 8.30am on Monday, it becomes a habit of waking up early every working day.

Summary

I would encourage people to take the opportunity of Free TAFE for Priority Courses and learn something that they do not know. Surely you can do your research and self-study, but having a proper education helps so much. It keeps your progress in check, and you receive the knowledge in a systematic way.

By Tuan Nguyen

Programming paradigms

Programming paradigms – is object-oriented programming better?

The errors faced in the procedural programming approach are the motivating factor in the invention of objected oriented approach. In the object-oriented programming paradigm, data is a critical element in the program and restricts freely transformation of data around the system.

Instead, data are associated with functions that operate on it and protect it from accidental modification outside functions. Object-oriented programming paradigm approach permits decomposition of a problem into entities, or objects and then build data and function around them. Data of an object are accessible only by the functions, or methods belonging with the object.

In this blog, we will discuss a rough concept of what Object-oriented programming paradigm is, and how it is a better solution comparing to procedural programming in some cases.

Tl; dr;

Object oriented programming is a way to write instructions for a software. It introduces 3 concepts: Encapsulation, Inheritance and Polymorphism, which form the backbone of the paradigm. There are various advantages of using OOP, as well as some drawbacks that can make us stay away from it.

Other blog posts on the series:

Programming paradigms – what is procedural programming?

 

What is the object-oriented programming paradigm?

Object-Oriented programming (OOP) is a programming paradigm that relates the structures of data with a set of operators which work with the data. In OOP, an instance of such an entity is often referred to as an object. In other words, OOP is a method of implementation in which programs consist of objects, each of which represents an instance of some classes. Classes are all members of a hierarchy of classes united through a concept called inheritance.

// a simple C++ class
class Rectangle {
  int width, height;

  public:
    void Rectangle(int x, int y) {
      width = x;
      height = y;
    }
    
    int area() { return width*height; }
};

Advantages

Eliminating redundant code using various techniques like inheritance and templates.

Imagine you need to store a list of users, which can have various roles such as admin, user, sales, etc. Instead of having to copy the duplicated fields to each user object, we can utilize a trademark feature of OOP paradigm: Inheritance

Object oriented programming visualized

class User {
  protected:
    string name;
    int age;

  public:
    void User(string n, int a) { 
      name = n; 
      age = a;
    }
};

class Admin: public User {
  public:
    bool isAccessible(string page) {
      return true; // admin should have access to everything
    }
};

class Sales: public User {
  public:
    bool isAccessible(string page) {
      return page == "sales" ? true : false;
    }
};

In the example above, we don’t have to re-declare name and age for each child class, because `User` class already provides them.

Data encapsulation

Hiding of the data enables the programmer to code the most secure programs where other parts of the program will be unable to access the hidden data. This separates the data from other logic and avoid making changes of data where inappropriate.

Code management

Division of program into objects makes software development easy.

Software complexity is less severe than conventional programming techniques.

Upgrading and maintenance of software are easily manageable.

Message passing technique makes the interface simpler with external systems.

Code reuse-ability is much easier than conventional programming languages.

Reduce code duplication

Parent class can contain similar behaviours so derived classes can use them without duplicating the logic. And if there is something different, we can simply override the method to custom tailor it to what we want. This is what polymorphism is about.

class User {
  protected:
    string name;
    int age;

  public:
    void User(string n, int a) { 
      name = n; 
      age = a;
    }

    bool isOld() {
      return age == 50 ? true : false;
    }
};

class Admin: public User {
  public:
    bool isOld() {
      // overriding the parent method
      // making admin always old :troll:
      return true;
    }
};

Disadvantages

  • Compiler and runtime overhead is high because the object-oriented program requires more time during compilation and for dynamic and runtime support it requires more resource and processing time.
  • Re-orientation of software developer to the object-oriented thinking.
  • Requires the mastery in software engineering and programming methodology
  • Benefits only in long run while managing large software projects.
  • The message passing between many objects in a complex application can be difficult to trace & debug.

Summary

Object-oriented programming is one of the most popular programming paradigm among other methodologies. Its emphasis is on data rather than procedures by dividing programs into objects. Functions and data tie together in a single unit and therefore hiding data from accidental alteration from other function or objects. Also, data access is done through visible functions so that communication between objects is possible.

By Tuan Nguyen

career options

Frontend developers – What do we do?

Frontend developers have become one of the most popular career in the digital age. In my previous post frontend vs backend vs fullstack developers, we discussed about the difference between them. Now let us dig deeper into what exactly frontend developers do.

Tl; dr;

A front-end developer uses the knowledge of html, css and javascript to create an user interface for a website or application so that a user can comfortably interact and use a service with ease. The sole purpose of a front-end developer is to make sure the users can access the webpage in a format that they can easily read and understand.

A bit of historical context

In 1997, with the expansion of the Internet and the ease of connectivity, the web stopped being a place that only engineers entered to read materials on university servers. It became a more visual and competitive place. Which is why they emerged programs like Dreamweaver (Macromedia at the time) to facilitate the implementation of websites. In these editors you could work with images to take care of the visual aspect, the developer only had to drag and drop the image in the place where he/she needed it.

At present we can still find these visual editors and even in web version. For example, in the cloud there are many applications that allow you to create your site with just drag and drop. So far so good if you need a basic website, but when you need something tailored, things get a little more complicated.

Frontend development

Frontend development skills

Freelancer map – Career insights (2019)

A Front-end developer is like a masked hero who has a unique mission: to communicate a message. We make the web pages to have a harmonic distribution of the elements on the screen so you can locate quickly when browsing. In addition, we must take care of their aesthetics so that you, as a user, say: “Wow! What a beautiful website!”

And without so much adornment: a Frontend developer is the person who develops all the visual elements of a website with which a user interacts. To achieve this, this hero should have a “mix” of skills. On one hand, we need to know how to organize the elements on screen to please the eyes. And on the other, we must know markup languages, styles and programming: HTML, CSS, Javascript, PHP, among others.

“To be or not to be”: the midpoint between the designer and the engineer

To the Frontend we have to know everything a bit, from managing design programs such as Photoshop or Illustrator, to understanding specific topics such as SEO. We also need to be aware of the latest trends in design and update on advances on code writing.

With the emergence of new technologies, new challenges also emerge, because now with the increase in the development and acquisition of mobile devices, there are different types of resolutions and screen sizes, which forces the developer to make a specialized development for a user can access without any problem of visualization and/or navigation to the site you are designing. That is why it is important that the Frontend developers also learn to make tests in different resolutions and browsers.

We ensure that your website looks like this

good website

and not like this

bad website

But then, are Front-end designers?

It is not necessary to be a designer to be a good Frontend developer. But if you are, that would be much better! Since the designers have an ingrained visual and aesthetic formation which will help to take care of even the smallest detail of the final product.

Besides being Frontend developer  and designer, you can make the designs of the pages yourself and program them, which translates into better income and a resume more desired by the market. If you reach a good level in design and development companies will fight for you, or why not? You can even create your own company and be independent.

Things Front-end developers should know.

If you want to be a good Front, having knowledge about this will help you:

Languages

  • HTML (HyperText Markup Language): is a markup language interpreted by web browsers, that is, the skeleton of all websites. Its newest version is HTML5, which contains semantic tags to write clean code and has advantages as native support for audio and video.
  • CSS (Cascading Style Sheets): is the language that controls the appearance of the site, that is, with which we will give our HTML the visual style, defining colours, sizes, fonts and even mouse events. Its latest version is CSS3, which supports animations, shadows, curves among other things.
  • Javascript: is a programming language that runs on the client side (in the browser) and in most cases is used to make a website interactive.
  • PHP (acronym for PHP: Hypertext Preprocessor): (optional) It is a programming language that runs on the server. This means that a server can use PHP to run some logic and return data. By using PHP, we can create dynamic and manageable websites. It is also the language used by many Content Management System(CMS) like WordPress.
  • Other backend programming languages: some examples are Node.js, Python, .NET, Java, etc.

Skills

  • Accessibility: refers to the correct display of a website on all devices. It is relative to the concept of ‘Responsive web design’ that is achieved by adding CSS Media Queries that respond to the width of the screen or viewport.
  • Usability: refers to the relationship between the user and the ease with which he manages to navigate the site.
  • Performance: for our website to be competitive it must load fast, because if users notice a low performance in load times, they will surely leave the website.
  • SEO (Search Engine Optimization). It refers to the proper indexing that search engines such as Google, Bing, Yahoo, etc.. The making of a website to rank well in the search results. This is achieved through meta tags, titles and the correct use of keywords.

Summary

In this article we talked about what we do as a front-end developer, the historical background of front-end development. We went further to discuss the grey points between front-end development and designers.

To survive in this ever evolving profession, we need to keep improving ourselves via various methods.  Reading a lot, updating, studying and above all sharing our knowledge just to name a few.

By Tuan Nguyen

Programming paradigms

Programming paradigms – what is procedural programming?

DiProgramming paradigms are different styles, different “ways” of programming. There are a lot of different paradigms, including some popular ones like procedural programming, object-oriented programming, functional programming, etc. And some which are not as popular, such as imperative programming, declarative programming, event-driven programming, etc. If you are curious, there is a very good summary of programming paradigms here. In this post, we will discuss a popular one, which is Procedural Programming.

Tl; dr;

Procedural programming is one of the most popular programming paradigms out there. By following procedural programming, we split the code into smaller units called functions or procedures so that it is easier to reuse and the flow of execution is from top to bottom. This style is easy to understand and implement. As a result, it is often taught in introduction to programming courses.

Other blog posts on the series:

Programming paradigms – is object-oriented programming better?

What is Procedural Programming?

Procedural Programming diagram

Procedural programming is a method of the programming which has a support of splitting the functionalities into a number of procedures. In procedural programming, a large program is broken down into smaller manageable parts called procedures or functions. Here, priority is given on functions rather than data. In a procedural programming language, a program basically consists of a sequence of instructions each of which tells the computer to do something such as reading inputs from the user, doing the necessary calculation, displaying output.

def add_number(a, b):
    return a + b

# workflow starts here
# call function add_number() to add 1 and 2 together and print the result to screen
print(add_number(1, 2))
# execute add_number() function 5 times and print the result to screen
for i in range(5):
    print(add_number(i, 1))
# workflow ends here

When a program becomes larger, it is then broken into smaller units called procedure or functions. A number of functions are supposed to be written for the accomplishment of a specific task. These functions do not let code duplication because of the same function call from multiple locations. This technique is only suitable for medium sized software applications

In procedural programming, two types of data local and global are used. Data within the function are called local data and the data and which are not within any function are called global data. Local data are accessible to the only function where it is declared. So each function may access its local data as well as global data.

// this is a global variable
$globalVar = 1;

function addNumber($a, $b) {
    // this is a local variable
    $randomNumber = rand();

    return $globalVar + $randomNumber + $a + $b;
}

The local data of one function is not accessible to other functions. If any data is to be accessed by two or more functions it should be made global. However, global data are vulnerable to another programmer to be changed unknowingly. The separate arrangement of data and functions does a poor job of modelling things in the real world. That’s why procedural programming approach does not model a real-world system perfectly.

COBOL, FORTRAN, C, Pascal are some programming languages that can implement procedural programming.

Characteristics of procedural programming

A large program is broken down into small manageable procedures or functions. This reduces code duplication, which improves readability and maintainability of the code.

Different functions can share data via global variables. Functions are completely isolated, therefore if we want to share data, we need to declare it in the upper scope.

Functions can change global data. Since global data are transferred from function to function; during the course of the transformation, the global data may be altered in function chains.

Top-down methodology. As mentioned before, procedural programming follows the top-down methodology, workflow is going from top to bottom.

Advantages of procedural programming

  • The coding is easy and simple.
  • The codes have the ability to be reused in several parts of the program.
  • The programming paradigm consumes less memory on the computer.
  • It is easier for tracking the flow of the codes in the program written in the procedural programming paradigm.
  • The programming paradigm is regarded best for general programming to learn and implement.

Limitations or disadvantages of procedural programming

  • Focus on functions rather than data.
  • In large program, it is difficult to identify the belonging of global data.
  • The use of global data is error-prone and it could be an obstacle in case of maintenance and enhancements.
  • The modification of global data requires the modification of those functions using it.
  • Maintaining and enhancing program code is still difficult because of global data.
  • The procedural programming paradigm does not model the real-world problem very well since functions are action-oriented and do not really correspond to the elements of the problem.

Summary

Procedural programming certainly offers a lot of upside, one of them are easy to learn and implement. New programmers can start their journey by learning how to write code in procedural style. That will help them understand how certain programming language works.

However, due to its limitation, real world applications are not using procedural programming. Therefore students will need to learn other paradigms in order to get exposed to real life problems.

Thank you for reading. You can browse more posts about technology here.

By Tuan Nguyen

microservices logo

Microservices – what are they?

Microservices is one of the buzz-word in the technology world these days. Every big name likes to say it, lots of salespeople speak of it. This post will discuss about what is a microservice, and how does it change the way we design the software architecture.

Thanos quote

Tl; dr;

A big monolithic application can be split out into smaller components, or in this case, services. A service should have one task, and one task only. This approach increases efficiency, scalability, and allow for smaller development teams.

What are microservices?

Monolithic vs Microservices architecture

A “microservice architecture” is an approach to developing a software application as a series of small services, each running autonomously and communicating with each other, for example, through HTTP requests to their APIs.

Normally there is a minimum number of services that manage common things for others (such as database access), but each microservice is small and corresponds to a business area of ​​the application.

In addition, each one is independent and its code must be able to be displayed without affecting others. Even each one of them can be written in a different programming language since they only expose the API (a common interface, which does not care about the programming language in which the microservice is programmed below) to the rest of the microservices. There are no rules on what size each microservice should have, nor on how to divide the application into microservices.

Comparing the “monolithic” approach with the microservices approach

So that you really understand what we are doing with the microservices, let us examine a very simple example. Imagine that we want to make a web application, Amazon type, but simpler. Users enter our website, see the products we have for sale, and when they buy an item, we manage the delivery of the product to their home.

Monolithic structure

monolithic architecture

A first idea of ​​how to deal with this application would be the following monolithic structure: We can access the website of the store, make purchases, etc., thanks to a server, a machine that is executing the code of the application, in the form of a war file, which eventually connects to a database to retrieve information.

When a user purchases a product via the web, the application will respond the way we have programmed, but the code of the different business logic (inventory, payments, shipments) although it may be separated into different modules of the code, it is finally packaged in a single executable file. That’s why we call it monolithic architecture.

In addition, to scale the application (for example, to serve many users) we will have to run copies of our application under load balancers, which will redirect users to one site or another, depending on whether the system is very saturated. In this case, we will have to replicate the entire application, even if only the payment module concentrates the overload.

But on the other hand, if our application is not very complex, the upload will be simple and easy to manage, since in this case, we are talking about a single executable file.

Vision of microservices

microservice architecture

Instead of having a single executable, each component is an executable by itself, and the services communicate with each other through calls. In this case, we also have a microservice that implements the web interface with which users interact and certain logic below to call the microservice for payments, inventory, and shipments when necessary.

Characteristics of microservices

Here are some of the characteristics of microservices.

  • Components via services. Each small components of the application, e.g. database, payment gateway, shopping cart, etc., can be put into their own services.
  • Services organized with a focus on business capabilities. Your payment gateway can be custom-tailored to your business needs. You need to integrate Paypal – make a service that does just that. You need to hide the apartments that do not allow pets from people who have dogs – make a service to do that, and intercept the dataset coming back from the API.
  • Products and not projects. Each microservice represents a product. They can be treated separately without the need of knowing what is happening to other microservices.
  • Decentralized government. There are no central application to dictate how the whole application works. Each service talks to each other, forming some sort of a peer-to-peer network.
  • Decentralized data management. As a best practice, microservices should have their own local data storage. Therefore each service can have the data that is relevant to its task stored locally.
  • Evolving design. Business requirements can demand microservices to be put in or pull out as needed. As the business grows, it is much easier to create/remove microservices than to alter the huge code base of a monolithic structure.

Advantages and disadvantages of microservices

Now we know what microservices are as well as their architecture and main characteristics. Therefore, we will detail some of its advantages and disadvantages.

Advantages

  • Minimal work team. Each team can manage the development of a microservice, and this generally does not need a lot of people (small team of 3 to 4 people is preferred)
  • Increase in efficiency. By optimizing each microservice, the total efficiency can be improved.
  • Scalability. It is much easier to increase the capacity of a microservice, and combine with other services, it boost the the application’s ability to serve more users.
  • Modular functionality, independent modules. microservices should be independent from each other. For instance, a microservice should only care about the input data, not where the data is coming from.
  • Freedom of the developer to develop and deploy services independently. developers can use any programming languages that he or she feels comfortable with, or it is the most suitable language for the task at hand. In monolithic application, there is less flexibility in choosing which language to use.
  • Allowing the deployment and development of the application quickly. With the introduction of Docker, Kubernettes, AWS, etc., continuous integration/continuous deployment is another buzz word now. Business needs to have a quick development phase to keep up with the ever-changing requirements. By deploying microservices concurrently, booting an application to its ready state is much faster.

Disadvantages

  • High memory consumption. Each microservice needs a certain memory and storage to operate. Having a considerable amount of them can cost a lot of resources.
  • The complexity of management of a large number of services. Netflix has over 13,000 git repositories, and most of them are services. Sometimes it is not transparent if there is an existing microservice that resolves a problem.
  • Network latency or load balancing. If not structure correctly, microservices will keep calling each other, resulting in a chaotic communication network. As a result, the time to return the result to the end user can be impacted negatively.
  • Complex tests or tests for distributed deployment. End-to-end tests can be a nightmare. For example, we need to test the workflow of putting a product into a shopping cart, then use American Express to checkout. This could involve multiple microservices and the testing solutions can be complicated.

Summary

As we have seen, microservices have numerous advantages that facilitate processes when using an app. However, being a novel system a large majority of CIOs will be slowed down to implement these systems in their company due to the complexity of some features.

However, the implementation of microservices could have a great impact on large companies in a positive way for increased efficiency. An example of this we see in Amazon or Netflix that have already implemented this technology.

More information on microservices can be found here.

Next post: Microservices – When NOT to use?

By Tuan Nguyen

WebAssembly logo

WebAssembly – Will it replace JavaScript?

WebAssembly is an initiative led by development teams Microsoft, Mozilla and Google (lately, Apple also seems interested), which is designed to run native code in a browser (or user agent, to be more precise), in a way Safe, fast and efficient. In addition, its architecture allows multi-threaded execution with shared memory (Shared Memory Multi-threading). Web assembly can be used for frontend development. You can read more about it here.

Tl; dr;

WebAssembly is a new way to develop website interaction using binary code instead of Javascript. Both WebAssembly and Javascript will work together to enhance the website experience.

What is WASM?

The JavaScript upgrade

We can load the most critical parts of our code and add them as standard Javascript modules.

The Browser upgrade

Browsers will use the binary format generated by asm.js, which means smaller packages, faster uploads, and compile-time optimization.

We can say that it is an Abstract Syntactic Tree (AST), which is stored in binary format. It supposes a considerable improvement in runtime on Javascript. In addition, its representation at a low level will allow (over time) to be the result of the compilation of any language.

We can have source code in C#, or Java, as before, and use a WebAssembly compiler to generate that low-level code that runs in the browser. In addition, it is also designed to run on other Javascript engines, such as Node.js. When available, it will have two forms of representation: one textual and one binary. Consequently, that binary language defined by WASM can become a new universal binary for the Web.

With WebAssembly (WASM), the start-up statistics are much more optimized in all cases:

  • The decompressed code occupies 66% less than the equivalent Javascript code.
  • The uncompressed code occupies 33% less.

It is about 23 times faster to analyze syntactically (“Parsing”).

How WASM benefits developers and businesses

One of the main advantages of WASM is that it will allow us to have more in less, that means we can have the same code in a smaller size favouring the implementations of mobile platforms that will not have to download as much weight.

At the level of optimization and performance, it will allow us to improve the load of the critical parts of our application, in addition to being able to use structures compiled from other languages ​​and not having to apply them in Javascript, creating them to simulate them.

Will Web Assembly replace JavaScript?

WebAssembly workflow

The chart shown above may have helped you to understand reality. It has made clear that WASM is not a replacement of Javascript but a new feature of Javascript engine which is based on its infrastructures. So, it is clear that WASM is able to be function well in the web platform.

According to Google, this engine will have the same evolution as Javascript, everything will be retro-compatible, this means that we can use it with the previous versions. It will run at the same level as Javascript and allow synchronization from Javascript .

How will Javascript and WASM exist together?

For performance-sensitive activities, such as rendering Virtual Reality environment, WebAssembly should be used to ensure that performance is at its finest. Other frontend operations can use Javascript to develop, as the community is much bigger and it is easier to work on at the moment. Moreover, loading assets using WebAssembly is significantly faster.

Example

Let’s take a practical example. Experimenting with a prototype WASM format, Jonas Echterhoff, developer of Unity Berlin, converted using WASM the famous AngryBots demo from a Javascript code size of 19.0 MB to a gzip-compressed to 3.0 MB. This means that there is 3.0x reduction in the amount of data the browser needs to process. And 1.4x reduction in the compressed download size.

Potential Uses

There are many areas where these possibilities are welcome: Virtual Reality, Collaboration tools, information encryption, CAD software, scientific simulation, “Machine Learning” and games are just some of those options.

There is a possibility to develop application for mobile application using WebAssembly, which is similar to how React Native works. The advantage of using binary code is that we can have a light-weight and performance-optimized applications.

Summary

WebAssembly allows binary code to work on user’s browsers, which can hugely boost the performance and allow certain high power consuming technologies like Virtual Reality to work smoothly on your browser.

Thank you for reading my research on WebAssembly. You can read more about other technologies here.

Javascript logo

ES9 new features reviews and examples

ES9 or ECMAScript version 9 was finalized on June, 2018. It brings various new features into Javascript standard that we can leverage to make our lives easier. In this post, we will discuss about them and how they help changing the way we use Javascript.

Since most details are available on other websites like Mozilla.org, w3schools, etc., I’ll just talk about scenarios that I think most of us will encounter every day.

Tl; dr;

ES9 brings us the following features:

  • JSON superset: allows string to allow unescaped \u2028 and \u2029 characters.
  • Symbol.prototype.description: expose description publicly for Symbol objects
  • Function.prototype.toString revision: prints all function’s code to the console
  • Object.fromEntries: converts an array of key-value pairs to an object
  • Well-formed JSON.stringify: converts ill-formed UTF-16 to escaped sequence string
  • String.prototype.{trimStart,trimEnd}: more options to trim string
  • Array.prototype.{flat,flatMap}: lodash/underscore-like functions

More details on the new features are listed here.

JSON superset

Details: https://github.com/tc39/proposal-json-superset

Remarks: most of us will not encounter a need for this feature, since it deals with an edge case of evaluating unicode characters.

Symbol.prototype.description

Details: https://github.com/tc39/proposal-Symbol-description

Remarks: exposing Symbol’s description can be useful when we manage a big list of symbols. Previously, given a Symbol object, we will never know what it represents until we print the object out.

const symbol = Symbol('some description');
console.log(symbol.description);
// "some description"

Function.prototype.toString

Details: https://github.com/tc39/Function-prototype-toString-revision

Remarks: this is a useful feature that I can use every day. When I have to, say, try to know what the `onClick` event handler do, without having to search through a big code base. Now I just need to print the function out, and I see it’s full source code. And in development environment, that is the full, un-minified version of the code.

const fn = () => { console.log('test'); };

fn.toString();
// "() => { console.log('test'); }"

Object.fromEntries

Details: https://github.com/tc39/proposal-object-from-entries

Remarks: I have a use case for exactly this in my previous projects. Before, I had to create a custom function to handle the conversion. This feature definitely makes my life easier.

const arr = [
  ['a', 'b'],
  ['c', 'd'],
];

const convert = (data) =>
  data.reduce((obj, keyValue) => {
    obj[keyValue[0]] = keyValue[1];
    return obj;
  }, {});

// old way
convert(arr);
// {a: 'b', c: 'd'}

// new way
Object.fromEntries(arr);
// {a: 'b', c: 'd'}

Well-formed JSON.stringify

Details: https://github.com/tc39/proposal-well-formed-stringify

Remarks: Escaping unicode characters have always been a headache for us. By integrating this into Javascript standard, our lives will continue to be easier and easier. I have spent too many hours pulling my hair out because of a stupid unicode characters not escaping correctly. As a conclusion, this feature is a life saver. You can check out the examples in the link.

String.prototype.{trimStart,trimEnd}

Details: https://github.com/tc39/proposal-string-left-right-trim

Remarks: we already have the same function, if not better in lodash. Let us take a look at the code to understand better.

const str = '       some actual string   $$   ';
_.trimStart(str);
// 'some actual string   $$   '
_.trimEnd(str);
// '       some actual string   $$'
_.trimEnd(str, '$ ');
// '       some actual string'

str.trimStart();
// 'some actual string   $$   '
str.trimEnd();
// '       some actual string   $$'

As we can see, for Lodash we can specify characters to trim as well, while the ES9 standard version does not. Therefore this feature may not be beneficial to me as much as it does to you.

Array.prototype.{flat,flatMap}

Details: https://github.com/tc39/proposal-flatMap

Remarks: quite similar to lodash’s equivalent. Therefore it will come in handy when I have to deal with environment that does not allow me to install lodash.

const arr = [1, 2, [3, 4, [5, 6]]];
array.flat();
[1, 2, 3, 4, [5, 6]]

// flatten all nested arrays
array.flat(Infinity);
// [1, 2, 3, 4, 5, 6]


const flatArr = [1, 2];
flatArr.flatMap((val) => [val, val * 2, val * 3]);
// [1, 2, 3, 2, 4, 6];

Summary

“What’s known as bleeding-edge technology,” sez Lucas. “No proven use, high risk, something only early-adoption addicts feel comfortable with.” ― Thomas Pynchon, Bleeding Edge

Living on the bleeding-edge version may not be the wisest thing to do on production, stable product. Therefore we will need to wait for a while before these features become more stable. However, we can start using them in small projects, reaping the benefits and getting familiar before we implement them into the big projects.

As usual, if you think this is useful, let us share the knowledge. You can read about my other posts here.

career options

frontend vs backend vs fullstack developers

Computer science students often get asked, what will you become after graduation. To those who commit to the life of programmer, there are a lot of different paths that you can take. Today we will discuss about the buzz words that everyone knows about: Frontend developers, Backend developers and Fullstack developers.

Why do we need to know about the above job roles? It’s because different roles require different skill sets to focus on, and to be good at one of them, we need to switch our mind toward it. To keep it simple, we will discuss about web development only. However, the same concept can be used in other fields, such as software and mobile development.

 

Tl; dr;

Frontend developers: mostly working on the client side interface of an application, which includes html, css and javascript for web development, user interface (UI), user experience (UX). Basically they are responsible for anything that users can interact with.

Backend developers: working on the server side of an application, which includes any logical structures that form a server, an infrastructure for an application, including server configuration, database management, and backend logic.

Fullstack developers: fluent in frontend and backend responsibilities, and some extra knowledge about deployment operations (DevOps).

 

Frontend developer

frontend developer skills

Frontend development includes a deep knowledge of HTML, CSS and Javascript. Nowadays, we have various third-party libraries and frameworks that help with our development process. Some well-known third-party modules are:

– Javascript Frameworks/libraries: Bootstrap, jQuery, Angular, React.js, Vue.js, Ember.js, etc.

– CSS preprocessors: LESS, SASS, etc.

– Optimization/packaging: webpack, browserify, grunt, etc.

However, knowing those frameworks does not mean you have what it takes to be a good frontend developer. You also need to have a good knowledge about multimedia design, UI/UX design. Some of the aspects to acquaint are choosing a suitable color palette, typography, website layouts, etc. Experiences with the above fields can be what separate you and the rest.

For a student who decided to pursue a frontend developer career, I would start with the basics like HTML, CSS and pure Javascript, then move up with popular libraries like jQuery and Bootstrap. After that, you can open yourselves to more advanced fields like color rules or typography.

Backend developer

backend developer skills

Backend developers need to know almost everything about the server side code and how the server is configured. Several programming languages and technologies that are useful are:

– Languages: PHP, Javascript(Node.js), C#, Java, etc.

– Database: MySQL, PostgreSQL, MongoDB, etc.

– Understanding of popular CMS and web builders like WordPress, Wix, Drupal, etc.

– Knowledge about operating systems, e.g. Linux, Windows server.

Similar to frontend developers, backend developers also need to know about advanced topics like design patterns, knowledge about web infrastructure. These aspects are very important in optimizing and scaling a website/application. Developers who are fluent can be paid very high, estimated at $120,000 – $140,000 per annum (which I haven’t gotten to that level yet 🙁 ).

For students who want to become backend developers, I would say that you can start with a simple programming language like Python or C, to learn about the fundamental of computing. By learning about algorithms and design pattern logics, you will improve your knowledge of how to optimize your code, how to manage memory and therefore improve the scaleability of your programs. After that, you can continue with database interactions, and play around with various CMS platforms. Once you get to that level, then open yourselves to advanced web infrastructures and server configurations.

Fullstack developer

fullstack developer skill

As mentioned above, a fullstack developer is meant to have knowledge and experience about frontend and backend operations. Moreover, they need to understands how to deploy code into different environments, maybe less than a DevOps engineer, but to some extent they can understand the principle of continuous integration/continuous deployment.

Fullstack developers have to train themselves a lot harder than the above roles. They need to have a lot of experience regarding the mentioned fields. Some people that I know started out with a frontend role in a company, then move on and be a backend developer in another company. After that, they trained themselves with DevOps technologies and dabble with the fullstack developer role. Recruiters often think that fullstack = frontend + backend. However, it goes deeper than that and you will need to tackle the advanced topics very soon once you take the role.

Summary

“Success is no accident. It is hard work, perseverance, learning, studying, sacrifice and most of all, love of what you are doing or learning to do.” – Pele

Each role may deal with different technology stacks. But underneath, they all share the same computing principles. We all need to optimize our code, using the least resources possible to produce the biggest outcome possible. Technologies move incredibly fast these days, and as developers, we will need to continue learning while we’re working.

By Tuan Nguyen