Independent, but...

WOZiTech is an independent IT contractor, but that does not stop us from taking particular enjoyment from particular technology. This is a highlight of the technologies that we prefer to use; a mix of application development, DevOps and hosting tools.

nodejs

microservices

SOA has been instrumental in revolutionising the heterogeneous IT environment, integrating legacy applications and complex enterprise processes with human workflow. But SOA is complex, requiring specialist architects/designers analysing the enterprise domain and crafting those enterprise services. SOA typically requires a SOA platform to run on, resulting in vendor lock in.

Microservices are complemenarty to SOA. They leverage the ubiquitous RESTful (web) protocol to decompose complex applications into isolated, scalable components. Unlike SOA, microservices are best suited to homogenous and new environments. Unlike SOA, microservices can run on any web platform including, but not limited to, Apache/PHP, node.js, ASP.NET, nginx, Oracle WebLogic, ruby on rails, django/flask/pyramid, the list is endless).

nodejs

node.js

Once upon a time, we (WOZiTech) were amazed by the speed, power and flexibility of C; integrating at machine level, just a little slower than assembly language, C rocked our world. Then came C++, with its beauty and elegance to define classes and create objects; polymorphism then rocked our world. But these required write, build then test/run. As API became more varied and complex, sso did the build write and build time. We remember the Win32 SDK and writing those GUI driven applications. IDEs helped, as wizards generated unreadable code that forced you into given patterns. We played with Ada (a language of beauty but solid as rock) and Occam (a functional and brutal language).

Then came PHP, a syntax akin to C but scripted code and with embedded HTML; easy to change and you can see the results immediately. Not just for web apps, PHP trumped when it came to OS scripts; bash was a last resort, replaced with PHP CLI wherever we could.

For many years, PHP rocked our world. But then we stumbled upon node.js, whilst evaluating MongoDB (see below). It's just Javascript right? Javascript has all the beauty of C/PHP but with the power of Java (arrays/maps/sort/filter). Single Page Applications (SPAs) were becoming the norm; built on powerful frameworks like JQuery. Node.js takes Javascript to the server, benefiting the same language syntax (a transferable skill) and event-driven single threaded runtime of Javascript.

Over the years node.js has supported Javascript ES5, ES6 and ES7. With ES8 released in July 2017, node.js support is coming. Node.js is fast; for a typical request/response web application, it runs faster on node.js than pure Java. The single threaded runtime promotes hozitonal scaling; keep your nodes small but many! Node.js cannot compete with Java for compute intensive apps though.

When combined with a NoSQL database, such as, MongoDB, and nginx (an event based web server and load balancer), node.js rocks! It's WOZiTech app development platform of choice.

mongodb

mongoDB

mongoDB is the leading NoSQL database. A community edition for developer to code against and provide local dev/test instances. Yet Enterprise edition for production hosting. Supports clustering and replication instances for availability (both local and regional).

Stores data in bson (binary json) format; returns data in JSON. The "aggregate" function provides pipeline data manipulation, allowing for complex queries to be broken down and ran on the server, concurrently across multiple shards of the data.

Each document can be up to 10MB. Unlike SQL databases, where the goal is to remove data duplication, with MongoDB the aim is for speed; if this means duplicating data, so be it.

aws

AWS

Amazon Web Services (AWS). WOZiTech has bean working with virtualised hosting platforms for more than 10 years, including VirtualBox, VMware, OpenStack and KVM. The boys and girls at AWS blow away the competition with a pure service based cloud; initially on-demand queuing, compute and storage services, AWS has grown to a massive platform providing automation (CloudFormation/CodePipeliine), messgaing (notification/email) services, databases (RBS - Oracle, SQLServer, MySQL, MariaDB, postgresDB and the AWS lightening fast propertiery Aurora) and DynamoDB (NoSQL - not as good as MongoDB but AWS do provide a magic API for direct integration with mobile apps), data caching (elasticache and redis), Kenesis Streaming and much more.

It's not just about providing runtime services, AWS migration services the best in industry; database migration (even from one vendor to another) and server migration.

It is not just about selling rackspace, AWS has changed the application development arena with serverless technology; ECS (docker containers - think of this as kubernetes) and lambda. No more do you need to size and provision servers. You focus on the "function" and deploy the function; this can be a docker container or a program writtin in node.js (it rocks), python, java and a multitude of other languages. AWS does the hard work of keeping the lights on and scaling for millions of transactions. Combine lambda with SWF (Simple Workflow Service) you can quickly build complex global applications having not provisioned one server.

But it does not stop there, AWS is providing functional services, such as, transcoding (audio/video), Kenesis Video Streams, MediaLive, WorkDocs, WorkMail, Workspaces (Desktops) and Rekognition (video/image recognition). Leading on further from Rekognition are AWS IoT and AI services; these are set to revolutionise how we (individuals) use IT. Times are very exciting.

electron

Electron

Cross Platform Desktop applications, built on top of Chrome, using Javascript.

electron

nest.js

A progressive Node.js framework for building efficient and scalable server-side applications.

Does for server side node.js what Angular has done for client side Javascript.

CentOS-Fedora

CentOS server/Fedora Desktop

CentOS/Fedora description

Ansible

Ansible agentless provisioning, requires nothing more than an SSH connection to target host; a key component in Fedora/CentOS distros.

In-built and componentisable modules across multiple OS's, allowing large projects to be broken down.

Reusable roles with an avid open source community library via Ansible Galaxy.(

Complementary to Docker; able to easily provision Docker container instances (including Swarm/Kubernetes) but also able to provision Docker templates/instances (Docker Hub - yet to prove local Nexus3 hub).

RaspberryPI

Raspberry PI

Raspberry PI description

Too Many To Mention

There are too many technologies to mention with any detail. We simply list those technologies we are actively using below:

  • Mockoon - simulate RESTful APIs (this is good to use while developing client web apps).
  • Insomnia - testing of RESTful APIs (downloads for Mac, Windows and Linux (AppImage).
  • nginx - open source event driven web server (nginx plus - adds load balancing, content cache, JWT auth and WAF)
  • graphql - Apollo GraphQL, and importantly, nest.js module
  • ajv - JSON Schema Validation
  • ajv keywords - AJV extensions
  • JSONata - JSON Query and Transformation (aka XPath)
  • Serverless Framework - similar to JAWS, for creating serverless APIs but supports Google, Azure and Apache OpenWhisk in addition to AWS.
  • Ansible - now by Redhat, for automating server builds
  • Vagrant - by hashicorp, for the deployment of standard images (boxes) across virtualisation platforms (VirtualBox/VMware/KVM)
  • Packer - for building deployable runtimes for multiple targets, such as, docker images, vagrant boxes or redistributable ISOs

Watching & Waiting

Only 24 hours in a day and seven days in week. We cannot be involved in all technology. The following is technology we are watching or waiting to get involved in.

  • EncloseJS - compile your node.js apps without source code.
  • passport.js - authentication middleare for node.js express, supporting local and federated (OpenID/OAuth) authentication.
  • apigee - cross-cloud API platform for producing and consuming APIs, enabling faster delivery, operational effectiveness (scale/costs - through reusing of services such as authentication) and operaational management (analytics and machine learning).
  • Selenium - for browser-based UI unit testing