What’s your stack? — Part I
You may often be in a situation where you might want to know which technology to use for your product or in a situation where people around you are talking gibberish geeky stuff , or you might be an enthusiast like me who always wants to be in the know-how of what is happening around you in the tech world.
In this post, I will be summarising about few things I have learnt so far in the tech world giving you just enough information to get an overall idea about it. Do subscribe/follow my publication to be updated when I write the next iteration of this article considering one article won’t be enough.
Let’s get started. The below topics are in no specific order and are jumbled.
If you want to know more about a specific topic, click on the title which will lead you to the respective page.
A specification laid out by the Facebook team. The next gen. alternative to REST APIs, ask for the data you want from the server and get only what you asked for. A query language for the client side (assume it something like SQL for client side).
I summarized about GraphQL here: https://medium.com/techahoy/what-i-learnt-about-graphql-dafa8b2b6f67
I summarized about Node.js here: https://medium.com/techahoy/why-i-am-a-big-fan-of-node-js-ecosystem-e99319c7dfe0
A NoSQL database with BSON structure (Binary JSON). Has master-slave architecture with all writes/mutations happening only in the master while reads can happen in any of the nodes in the cluster. Free & Open Source, while enterprise versions are also available.
A CSS framework/toolkit which helps you develop applications without having to do too much styling yourself but rather use the styles, themes and effects they provide enabling rapid development. Free & Open Source.
Allows you to build cross-platform software using web development languages. Electron (from Github team) runs on top of Node.js run time environment. It also provides access to native OS APIs like access to file system, context menus, etc. thus allowing you to get best of both worlds. Open Source & Free.
Allows you to build cross-platform mobile applications (hybrid apps) using web development languages with access to native OS APIs thus giving the best of both worlds. Also supports installation of plugins developed by third party developers. Runs on top of Web Views (browser run time). Open Source & Free.
Allows you to containerize applications, acting as a good alternative to virtual machines (though they don’t replace them). It works on namespaces provided by the Linux OS where each container can be provided with its own isolated scope, resources, storage and network acting like a Sandbox while still using the same underlying OS unlike VMs where each VM will have its own OS and resource allocations making it heavier. Possible to define your containers as dockerfiles, orchestrate them using other services like Kubernetes.
A high performant immutable event queue data store and messaging system with fault tolerance and scalability allowing you to communicate between systems and services through events. Applications and services can subscribe to the queue, push/pull data categorised into topics and interested parties can subscribe to topics of their interest. It comes with partition and clustering options to support scale the system by having messages across different locations.
A mobile application framework which runs on top of platforms like Cordova. Uses Angular behind the scenes. Provides ready made components which we can use during mobile app development, respects Material design and IOS design principles. Provides a ready made architecture to use including routing, transitions, animations, interactions, etc.
A distributed version control system which acts as a good alternative to SVN, VSS, Mercurial, etc. Open Source & Free. Was initially developed by Linus Torvalds for maintaining Linux development, then given out. Github, Bitbucket, Gitlab, etc. are platforms which support GIT for collaboration while GIT is the technology underneath. Supports local development without needing internet till you decide to push to remote repositories.
A markup language for the web. Currently versioned HTML 5.1 at the time of writing this article. Acts like a skeleton for the web providing allowing developers to define all the elements which they would need in their web app which in turn is parsed by the browsers to render them as buttons, links, headings, etc. in the formatting as needed.
If HTML is the skeleton, you can assume CSS to be the skin. It allows developers to format the elements in the page with the style they like including colors, size, shadows, boldness, transitions, positioning and anything they have to do with the visuals of the element. Currently versioned CSS 3 at the time of writing this article.
A search engine based on Apache Lucene which has full text search capabilities. All functionalities exposed as HTTP REST endpoints. Also has the ability to store and index data. Often used in combination with the ELK stack (Elastic, Logstash, Kibana) which existed as separate products but was later acquired by Elastic Ltd.
A data processing pipeline which helps in ingesting logs/data from multiple sources in multiple formats, format it into a structured format as required and send it to any destination as needed (mostly Elasticsearch).
A user interface suite supporting plugins which helps in interactively viewing and manipulating the data from the Elastic Stack. Also allows plotting the resulting data as charts and graphs. Plugins can be added to support multiple visualizations and extended functionalities.
An open source dimensional time series database, monitoring and alerting solution which helps you to store and monitor your application metrics packed with a powerful query language (PromQL) written in Go extending support to multiple client libraries, external visualisation like Grafana does promise and deliver a lot being a part of Cloud Native Foundation.
An open source platform to do analytics, monitoring and alerting with powerful integrations with multiple data sources like Prometheus, InfluxDB, Elasticsearch, Graphite, etc. It also comes with pre-built dashboards both from the Grafana team and the community and an intuitive and user friendly way to create new dashboards, export/import them with support for panels, plugins and apps makes it a complete system to use for monitoring. In addition to this, they do offer good documentation for you to refer in case you are stuck.
An open source tool to do CI/CD automation for your projects. Automate the way your code gets deployed onto servers, the way you do unit testing, the way you schedule jobs and do this all with the powerful pipeline system it offers. It doesn’t stop there. There are loads of plugins which you can use to get stuff done, say doing ssh, pulling code from GIT, and what not. And if there is none, it also offers you way to write groovy scripts thus completing the package.
An open design specification by Google which guides you on how to handle UI/UX interactions and guide the user intuitively from the point he/she enters an app to the point they leave the app. The Google team haven’t just stopped there. They have also provided libraries which implement those specifications and provided them open source for everyone to use. A good example for material design would be the native version of Android, websites and apps like Youtube, Google Plus, etc. which are designed keeping these principles in mind.
A very powerful concept where an entire application is divided into composable components which does just one job and abstract all the internal complexities, just exposing an API system to interact with it. It supports the principle of re-usability and extensibility allowing people to not only use the components in their own applications but also share it as components across to others. There are lot of libraries which support this principle either natively or as an abstraction. Some good examples would be Polymer, Skate, X-Tag, etc.
Before I start off, I have to clarify that having APIs is not the same as having micro-services. Microservices are composable loosely coupled services with their own boundaries which implement various business/technical functions having the capability to either up-scale or down-scale independently of each other. In addition to this, part of the requirement for being a microservice is to have APIs since they can communicate with each other in a common language abstracting all complexities. Most often, Kafka or other event sourcing systems are used to maintain the orchestration between these microservices.
While I have a lot more to share, I guess its better off in a new article rather than adding to this. If you want me to discuss any tech stack in particular or have any questions, leave a note and I will follow up as soon as I see it. See ya!