Skip to content

Instantly share code, notes, and snippets.

Rayner Pupo raynerpupo

Block or report user

Report or block raynerpupo

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile

TechOps Chatbot backend

Architecture overview

The TechOps Chatbot backend is a NodeJS API written in TypeScript, served with ExpressJS, secured with Passport through a secret bearer token and provisioned on AWS using Terraform. The users feedback is stored in a DynamoDB database on AWS using the aws-sdk and dynamodb-data-mapper.

API endpoints


View L&


Discipline is the future blah Uncle Bob Martin conference about the Future of programming, can reduce the whole conference in one word "discipline" FP paradigm is even older than others mainstream like OOP. It's taking a rise lately given most of the current languages/ecosystems can eventually get an approximate result, yet the time and effort to build and refactor could be very different.

View monoid.ts
export {}
// A monoid is a binary associative operation with an identity
// Laws
// 1 - Associativity: (x <> y) <> z = x <> (y <> z)
// 2 - Left identity: mempty <> x = x
// 3 - Right identity: x <> mempty = x
type Monoid<A = any> = {
mempty: A,

Modern JavaScript

Template literals

Multiline strings

Default parameters




Coercion is an implicit conversion of types:

// amount is a number
var amount = 32;

// since " years" is a string there is a implicit conversion of amount to string
var age = amount + " years";
console.log(age); // => 32 years


Mixins favors composition over inheritance by adding some custom behavior to an existing object

const fulfillable = {
  fullfill: (doneFunction) => done("OK")

const myObj = {
  quit: () => console.log("quit"),

Async / Await

Async and await let us handle asynchronous code easily, it's somehow similar to generators, pausing the execution whenever the await is prefixed:

// To be able to wait for a call we need to mark a function as async
async function getTemperature () {
// We wait until the getWeather function returns the value
  const weather = await getWeather(....);

Call apply and bind

Call and Apply

The call and apply functions are similar, they expect a the contex (this) and the parameter to call the function, the only difference is that apply accepts the function parameters in an array.

const calculate = function(x, y) {
  return this.operation(x, y);

const multiply = {

Node Error first callback

The expected callback function

This kind of callback function have the error as the first parameter and the actual value as the second

function incrementAndLog(err, value) {
  if (err) {
    console.log("there's no value to increment");


Are basically functions that are called when some result is ready or they can also be used to signal errors.

function aDividedByB(a, b, onResultFn, onErrorFn) {
  if (b != 0) {
    return onResultFn(a / b);
  return onErrorFn("The divisor can't be zero!");
You can’t perform that action at this time.