Technology is key for bringing exciting ideas to life. I’m really lucky that I get to play with different technologies in my job, I see them as a bunch toys of that can be plugged into each other to make cool stuff. The types of toys that are in your toy box, could be described as a Technology Stack.
A Technology Stack is a list of technology services that can be used to build a system/application.
In this post I’m going to talk about the technologies in the Technology Stack that I either currently play with – or that I want to start playing with this year (aka my weapons of choice for a project)!
I won’t be going into any great detail, it will be more of a summary of the technology category and technologies that excite me within that category, rather than an in-depth analysis of the technologies themselves.
The beginning of a Technology Stack begins with Design softwares. The results of the design process are often anything from images, generated 2d/3d assets + animations, wire frames, user flow diagrams, user interfaces and schematics that need sending off for supplier manufacture. The below softwares are really useful in this process.
When you need to create custom assets, Photoshop is really great for the design of logos or edited photos. With the use of masks and filters, you can pretty much create any kind of artwork or animation.
Sketch is great for the User Experience Design and User Interface Design process, I’ve used it a lot for creating User Flow Diagrams and Wireframes.
Blender is a 3D design tool that allows you to create 3D models and 3D animations. What makes it special is that it is open source, meaning that it’s free – which is pretty great given how much functionality it contains!
For the design of electric circuitry, Kicad is perfect for creating Printed Circuit Board (PCB) designs that can be manufactured by a supplier. This is great functionlaity given that it is an open source software!
Once a design has been created, prototyping can often help in figuring out how something should behave prior to going into production. Anything from reading analog or digital values sensors from a sensor, to powering an actuator, connecting electronics to the internet or creating a digital app / website.
When prototyping electronics, the Arduino Uno is often my weapon of choice for quickly getting something set up. As long as you have a basic understanding of electronics and programming, you can hook up most sensors in no time.
When connecting electronics to the internet for IOT based projects, I find the Raspberry Pi is the most practical tool for this. Its size, cost and processing power is enough for most photography or small scale sensor connectivity.
When prototyping digital interfaces, Framer X is a promising tool for turning designs into interactive web prototypes. Whilst I’m still quite new to this tool and am learning more about it each time I use it, it combines with other popular technologies such as…
Aframe is a 3D web framework that is used to develop WebVR and WebAR applications. It was originally developed by Mozilla and has been a leader in the WebXR space since its release in 2015 – this is a key technology that I think will be big in the next few years.
Tensorflow.js is an open source deep learning library that was developed by Google and made for web developers to create their own artificial intelligtence algorithms. There is huge potential in this technology, I’ve already created a post about my first experiment with it on this blog.
Bugs are an inevitability when writing code, there are many different types of tests that one can do to find bugs. Using code in different ways to check code is becoming more of a standard to do this. In a Technology Stack, this is often overlooked.
Code Build is a service by AWS that allows you to build and test your app in the cloud prior to it being deployed to a server. It is my ‘go to’ build tool as it easily integrates with other AWS services.
Expo is an open source tool for developing native applications for IOS and Android. This framework makes testing your app on native devices much easier during development with many of their in built features (including live update on the native device).
Truffle is a development environment, testing framework and asset pipeline for developing blockain distributed applications (DApps). It is particularly important to use this when developing a DApps, due to the immutable nature of the blockhain ecosystem.
The process of deploying an app / website can become quite fiddly at times, but its really nice when you create an automated process that can package up and deploy an app reliably. As I’ve looked further into this field, I’ve found myself drawn close and close to AWS technologies.
Docker is an operating system virtualisation platform, that is used to containerise applications so that they can be deployed easier within different server architectures.
Kubernetes is an open sourced container-orchestration system that is used for the autmated deployment, scaling and management of containerised apps. This is often used with Docker as the application container.
Code Deploy is a service in AWS that is used to automate the deployment of applications and is often my ‘go to’ in continuous deployment technologies as it integrates so neatly into other AWS services.
Elastic Beanstalk is an orchestration service that is developed and owned by AWS. This is also my ‘go to’ application orchestrator, it can handle the set up and maintenance of servers, storage, auto scaling, load balancers and server analytics.
Once you’re in the process of hosting an application online, you want a reliable, secure and cost effective way to manage this process. Having developed apps which rely on a server to show content to users, I’m becoming more and more of a fan of the serverless approach (uploading code to a cloud provider, in a manner that allows them to manage scalability and processing efficiently to lower costs). I currently rely on AWS as a core part of my Technology Stack.
API Gateway is a managed service provided by AWS that allows developers to set up a scalable and secure API. This is particularly useful when working with any of the below serverless technologies.
S3 stands for ‘simple storage service’ and it allows developers to store objects, files and data through a web interface. You can also use it to serve static websites in a manner which is scalable and cost effective.
Lambda is an event-driven serverless computing platform that allows developers to write code that is run in resposne to an event. It is automatically managed and scaled by Amazon – making cost and processing as efficient as possible.
DynamoDB is a managed no-sql database that offeres key-value and document data structures format. It is autoscaling in nature and is developed to work at any scale.
My favourite technologies
There are four categories of technology that I’m really excited about and think will have a big impact on us in the future. Those technologies and the frameworks/libraries you can use to create things with are:
Internet of Things
Internet of Things (IOT) is the field where electronics meets the internet – and hardware is then able to gain connectivity with other web services.
Greengrass is a software that can be run on IOT devices, that connects them to AWS and allows them to interact with other AWS resources.
Azure Kinect is a sensor that utilises rgb and infrared cameras, as well as AI to map an environment. It is used a lot in my field to create interactive installations based on peoples movement.
Extended Reality (XR) is a term that is used to describe an app that utilises Augmented Reality (AR) or Virtual Reality (VR). I’m personally excited by anything that helps make these technologies become more accessible via social media platforms and the web.
Spark AR is an augmented reality platform that allows developers to create Augmented Reality experiences within Instagram and Facebook social platforms.
Amazon Sumerian is used to create web based 3D content and web XR applications. The ease of integration with other aws services makes this technology exciting.
Artificial Intelligence is a very broad term – what most people mean by this, is an algorithm that is able to come to a on conclusion, by without being explicitly programmed to do so. This is often done by using Machine or Deep Learning training techniques to analyse data.
Blockchain is (in a super short summary) a distributed database that is able to process automated transactions via functions that run on the network – called Smart Contracts. It is often associated strongly with crypto curruncies (e.g bitcoin), in reality these currencies are often a bi-product of the blockchain.
Amazon Managed Blockchain is a fully managed service that developers can use to create and manage a fully scalable blockchain network. This utilises popular blockchain technologies such as Hyperledger Fabric and Ethereum.
Drizzle is a collection of libraries that make writing front end code easier for DApps. It utilises Redux and is particularly useful if you’re using ReactJS as your development framework.