Holy Dev Newsletter June 2022
Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.
What is happening
I hadn’t much time this month, though I managed to write a new blog post about a topic that is often confusing to newcomers (it was ti me!) - The trouble with list components in Fulcro. I have also got my mind blown by the complexity of our TypeScript and React frontend and set out on a quest to better understand where it stems from and if there is a way to tame it. (Just as the the Grug Brained Developer, I too would prefer an encounter with a T-Rex to one with Complexity). Of course my weapon of choice is Fulcro and ClojureScript. So far I have learned that there might be very good reasons to prefer TypeScript over cljs for interop-heavy apps, at least until (if ever) the editor support gets better. But a lost battle is not a lost war and I push on.
Gems from the world wide web
👓 ZeroTier – Global Area Networking [security, networking]
Create your own virtual private network between your devices of whatever type. Reportedly similar to Tailscale (which is powered by the WireGuard protocol contrary to ZeroTier) - see Tailscale's comparison with ZeroTier. Quick and simple setup. Just install a client on every device and configure it up e.g. using their UI. Commercial but free for non-commercial use and they have a free Basic plan for up to 50 devices.
Another WireGuard-based, zero-config VPN is https://netbird.io/, with a free plan and a self-hosting option.
👓 Defending against malicious bots with a zip bomb [security, technique]
Beautiful anti-hack. Poison malicious bots scanning your site by serving them a small .(g)zip that unpacks to many GBs, crashing the offending process. Just make sure not to do this to legal clients 😅
👓 Rust Environment and Docker Build with Nix Flakes [tool, productivity]
Use Nix to install per-project, isolated dependencies and make them available in the shell. Build a slim Docker easily.
👓 Selvet - lib to code interactive, node-based diagrams [library, javascript]
You can create intuitive flow diagrams using pre-built components with seamless zooming and panning, draggable interactivity, customizable edges/nodes, etc.
Via JavaScript Weekly
👓 Embedded Master Data Management | Sesam [SaaS, integration]
Interesting SaaS for data management and integration.
👓 IndieWebify.Me - a guide to getting you on the IndieWeb [movement, social, privacy]
IndieWeb: We should all own the content we're creating, rather than just posting to third-party content silos. Publish on your own domain, and syndicate out to silos. This is the basis of the "Indie Web" movement.
This page guides you in the process.
👓 dschep/ntfy: 🖥️📱🔔 A utility for sending notifications, on demand and when commands finish. [tool, cli]
A CLI tool in Python to send notifications to your desktop, a mobile app, Slack, Telegram or a number of other destinations.
👓 Rclone [tool, cloud, cli]
A universal, cross-OS CLI for syncing files (inspired by rsync) between your machine and a number of cloud storages (or 2 clouds). Virtual backends wrap local and cloud file systems to apply encryption, compression, chunking, hashing and joining. Rclone mounts any local, cloud or virtual filesystem as a disk and also serves these over SFTP, HTTP, WebDAV, FTP and DLNA.
👓 ivarref/mikkmokk-proxy: Fault injection for the HTTP layer. A HTTP chaos proxy. [testing, devops]
Test the resilliency of your application by injecting errors (failed, delayed, duplicate requests) into HTTP calls. This can be done via http headers or an admin interface. The page also links to a number of related tools.
Current limitations: No TLS, WebSockets, or SSE.
👓 babashka/http-server: Serve static assets [clojure, tool, cli]
Run a simple http server for static assets in a folder from the command line. Via clojure tools => `clj -Tserve exec` after installation.
👓 babashka/http-server: Serve static assets [clojure, tool, cli]
Run a simple http server for static assets in a folder from the command line. Via clojure tools => `clj -Tserve exec` after installation.
👓 Affect Oriented Programming (or how to escape the concrete jungle) - Showcase / Your Projects and Libraries - ClojureVerse [clojure, library]
An interesting idea of adding more composability to functions. A little similar to interceptor chains (here composition chains) working on a request (here an env map with :srgs). The motivation was this:
This whole exploration into functional inheritance was originally instigated by my annoyance with the over-abundance of concretions I was noticing in large Re-frame front-end applications. We would be building large component C, which wrapped large, complex component B, which wrapped an even more complex component A. Far too often, when wanting to build a component D, which was only slightly different than C, perhaps in how B behaved for C, we would have to re-implement a concrete version of A, B and then finally D, all over again.
👓 The Grug Brained Developer [fun, software development, experience]
Invaluable advice on software development in a fun form. Few examples:
--
Thank you for reading!