Skip to main content

· One min read

cockroachlabs

Database companies provide some of the best app tutorials. In a sense all apps are UIs that record transactions in a database. Whether it's a CRUD app or e-commerce, that database record is the source of truth. Further, it is the progenitor of physical activities. A record in a database will spawn physical work processes like shipping. Perhaps it could lead to further product creation, although that should be downstream from analytics which give insight into the most efficacious demand supply clearing equilibrium.

· 2 min read

Marc Grabanski Tweet

i watched Alex Cole from Asana=>Convex on InfoQ talk about how everyone can be a fs eng (with Convex) & his explanation of the backend engineering it manages (load balanced vps cluster of backend api functions serving cached db calls to a frontend that is wired up with pubsub)...

and i thought yes this is a managed service and it ticks all the boxes. how it relates to your commentary is: i feel that composable backends and middleware with turnkey solutions (could be broken up into feature verticals, perhaps or industry verticals that specialize on a subset of features to serve a particular interest segment) is really where it's at imho. Classically, I would categorize this as systems integration or SI, as it is referred to in gov contract speak...

composable backends integrated for a purpose like the fullstack metaframeworks do by routing requests to various backend services (with Vercel its Lambdas, with something like remix-run it can hook into a bunch of runtimes like plain Express or something else Vercel Netlify Cloudflare etc) is a very solid target i think. and what Alex is doing over there with the Convex folks (basically leveraging the Asana backend model & making it a managed service) i think could be replicated to any kind or combo of backends.

All that to say, I can't relate to anyone who wouldn't want to use node.js as their backend runtime. j/k i get it.

· One min read

DNS Reverse Proxy with Caddy Server

DNS - Reverse Proxy With Caddy Server

It is possible to override the Caddy server proxy settings with an explicit port mapping. (Caveat: it’s not SSH unless you explicitly put it in the Caddyfile.)

  • portainer in prod Caddyfile
  • cloudflare dns maps subdomain to the IP address with an A record
  • with these 2 ingredients, the subdomain is mapped to the IP address and even though that IP address is mapped to a specific service via Caddyfile, I can migrate across services running on various ports once I’m in
    • For example, if i navigate to subdomain.domain.tld it will go to portainer service on the VPS.
      • If I navigate to subdomain.domain.tld:30001 it will hit the nodeport service running on port 30001 on the VPS.
      • You can overwrite the port mapping once you’re into the IP address with the A record and Caddyfile entry

· One min read

Software as Networking

from apache mesos (or goog equiv which prefigured k8s) transforming physical compute into logical layers which could be arbitrarily distributed for units of work to the current gen of networking software as infra, the rule of just use it applies.

thousands perhaps millions of engineer hours have been dedicated to perfecting and tuning the system there's no reason to recreate the wheel or do things by hand. there are tons of utilities for providing configuration and other things.

· One min read

Formatting as Code Python

There are 2 kinds of programming languages, which are differentiated by the way they handle block scoping.

  1. Python style by indentation
  2. C style by braces

I like to set clear boundaries with braces and allow you to do anything you want inside that boundary. Formatting as code is a stifling pedantic methodology which insults my ideals of freedom and creativity.

SQL is superior to C style languages because it doesn't even require formatting or braces; it requires you to put the clauses in proper order. This is a much more elegant solution to the problem of block scoping. All languages should strive to be like SQL.

· One min read

AWS Event Driven Microservices

when you have resources in a vpc such as ec2 compute it's running; your comms are on ports over tcp pipes; it's networking

when you have resources in a serverless env such as lambda & s3 it's not running; your comms are on events over [mysterious protocol]; it's not networking, it's request response event objects being passed around...

your html file with js functions handling button clicks don't need a network to communicate; the events are part of the file system and the way html operates with js, not a http endpoint or an ssh tunnel...

· 2 min read

youtube tutorial

Install & Config

  • kubectl & helm are required to run a local cluster (or run fluvio on a remote cluster other than the infinyon cloud)
  • kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • helm
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
  • KUBECONFIG
    • this is required to configure kubectl for local dev, which will be used by fluvio cluster
export KUBECONFIG=./kubeconfig.yaml
  • fluvio CLI
    • fluvio cli will get a local profile once we spin up a cluster with fluvio cluster start —local (even though the cluster nodes per se are remote; local means not infinyon cloud)
    • we will be able to switch between infinyon cloud and local cluster (or running against a custom remote cluster which is not infinyon cloud)
curl -fsS https://packages.fluvio.io/v1/install.sh | bash
echo 'export PATH="${HOME}/.fluvio/bin:${PATH}"' >> ~/.bashrc
  • check config
    • kubectl and helm are required for the fluvio cli which is running a helm install against a local (or custom remote) cluster
kubectl get node -o wide
kubectl version
helm version
fluvio version
fluvio cluster check
  • login to cloud and create infinyon-cloud profile
fluvio cloud login --use-oauth2
  • fluvio profile list
    • now current_profile = "infinyon-cloud” (* asterisk marks current)
fluvio profile list
# PROFILE CLUSTER ADDRESS TLS
# local local localhost:9003 Disabled
# * infinyon-cloud infinyon-cloud router.infinyon.cloud:9003 Verified
  • fluvio profile switch
fluvio profile switch local
fluvio profile switch infinyon-cloud

Run Fluvio Locally Against Remote Cluster

  • fluvio switch local profile
fluvio profile switch local
  • fluvio start
fluvio cluster start --local
  • fluvio topic create
fluvio topic create greetings
  • fluvio produce message on topic
echo "Hello, Fluvio" | fluvio produce greetings
  • fluvio consume topic messages
fluvio consume greetings -B -d

Run Fluvio Against Infinyon Cloud

  • fluvio switch cloud profile
fluvio profile switch infinyon-cloud
  • fluvio topic create
fluvio topic create greetings-cloud
  • fluvio produce message on topic
echo "Hello, Fluvio cloud" | fluvio produce greetings-cloud
  • fluvio consume topic messages
fluvio consume greetings-cloud -B -d