Technologies and Frameworks

Technology Stack

When talking about his work, Steve Jobs often cited the quote “good artists copy, great artists steal” which he attributed to Pablo Picasso.

This rings particularly true for an open-source project like myActivo.

I could not have put this piece of software together if I was not relying on other great projects.

Remember the ladder of abstraction concept?, well, this is it in action. I will use other people’s work as building blocks in my project.

In this article I describe the software stack of technologies and frameworks I am using to implement myActivo.

Like many things in our modern world, I have many options that I could use to implement a feature.

From the User Interface (UI) to the backend systems, there are many frameworks available that could be potential fits.

My challenge is then to select the elements that give the project the best balance of flexibility and convenience.

I will run through each element of the architecture and describe what tool I am using (if any) and why.

User Interface

Whilst all the components of a software project are important, the User Interface has prominent role to play. The UI has probably the most substantial impact on the User Experience.

A well-designed and pleasant-to-use software will have better chances to be adopted by a larger number of users.

I expect that users of myActivo would like to interact with it on different platforms, like web, mobile and desktop. Early on I made the decision that I would first implement myActivo as a web application. I think this will give the project the greatest exposure and lowest friction for new users.

According to the 2021 Stackoverflow Developer Survey, the top five frameworks to develop web applications are React.js, jQuery, Express, Angular and Vue.js.

I have been developing web apps with Vue.js over the past few years. I have been very pleased with the way that Vue structures the development of components and functionality for the UI.

Vue provides the core UI functionality with routing, state management, component-based development and reactivity.

Next, we need to consider how to provide a consistent visual style to the application. We need to define a layout and overall visual styles.

There are many options based in Vue that accomplish this, but the one that I particularly like is the Quasar Framework.

Quasar provides a very well developed framework of UI components to build applications. A particularly nice feature is its “all platforms in one go” aspect. Using Quasar I can deploy the application to web, mobile and desktop environments using a single source code base.

These two frameworks will be the foundation of the UI layer of the myActivo platform.

UI Components

Additionally, I will be using a number of smaller components that perform specific functions in the UI. I will keep a list of these components here as I go through the development process.

ProjectUse
ShepherdJSGreat tool to create guided tours of the application.
Vue.D3.treeI use Vue D3 Tree visually represent and interact with hierarchical structures.
Vuex-ORMA great Object Relational Mapping plugin for Vuex. Provides a clean way to define and manipulate data models.
VueUseA great collection of composable utility functions that follow the “use<Function>” style.

Backend

As per the architecture of this project, the backend will implement the core entities, use cases, controllers and API of the platform.

In other words, this part of the platform implements all aspects that do not have a direct interaction with the user.

Similarly to the front end (UI), there are plenty of choices to pick from when it comes to backend technologies.

The two main choices I have to make here are:

  • What language and framework am I going to use to implement all this logic?
  • What database technology will I use as the main persistence mechanism?

The first question is really two choices in one, the programming language and the associated framework.

There is a myriad of programming languages available, the ones I considered for this project are: C#, PHP, Go, Python and Ruby.

myActivo is targeted at managing physical assets which often belong to large corporations and enterprises. Given that these organisations tend to develop solutions using C#, I decided I would go with this as my main backend language.

I’m sufficiently comfortable with C# and have developed similar enterprise-grade solutions in this language in the past.

Given this choice of language, the natural choice of development platform is .NET (dotnet).

.NET is open source, cross-platform and provides a wide range of options when it comes to developing applications.

With regards to the second choice, the persistence mechanism, PostgreSQL is a good open source choice for this project. It is a robust and mature database technology with a wealth of documentation and battle-tested use cases.

PostgreSQL is also supported as a database provider by Entity Framework which is the database access technology of choice for .NET projects.

So there you have it, that is the technology stack that I will be using to build myActivo.

By Carlos Gamez

As an Mechanical and Electrical Engineer by profession and Computer Programmer by passion I’ve been building my own software tools for over 20 years. My career has taken me across multiple engineering areas including Design, Manufacturing, Field Operations, Maintenance, Refurbishment, Product Development, Asset Management, Customer Service, Process Improvement, Consulting and Software Development. Mainly driven by challenges that I’ve faced on my day-to-day work and my own laziness and refusal to do repetitive and menial tasks, I always find myself creating software applications to automate the boring parts of my job. I quite enjoy the process of facing a brand new challenge, thinking about the best way to solve it, designing the architecture of the application and then implementing it. It is very satisfying to then see peers and colleagues use and benefit from my tools to make their lives easier and ease their workload.

Leave a comment

Your email address will not be published.

%d bloggers like this: