Rest-ish Services in Haskell Part 3
tl;dr - In this post I work my way through sprinkling in some DataKinds (shoutout to dcasto’s excellent primer), abstracting the TaskStore into an EntityStore, and adding servant to actually expose this EntityStore via an well-typed TodoAPI over HTTP. We actually get to a running server in this post, finally! Multi-part blog post alert This is a multi part blog post with the following sections:
A small collection of Day 2 Vue Patterns
tl;dr - I wrote about a few patterns I’ve found myself using/rewriting repeatedly on Vue projects. Use at your own risk. I’ve worked on a few Vue frontend projects now and while I can’t say that any of the projects are paragons of good frontend engineering ™, I have found myself implementing a few patterns over and over from project to project, which (charitably interpreted) is a sign that I’ve foudn something that worked so well I wanted to use it twice.
How to get off Yahoo! mail
tl;dr - You can get off Yahoo! Mail (or any other “free” email provider) by connecting a POP-capable mail client (like Thunderbird), downloading all your mail, getting a new mail server/service, ensuring all important emails go to the new account, and finally deleting your account. Believe it or not, until recently I had an active ~18 year old Yahoo! mail account. A while ago after a few hacks that Yahoo!
Rhymote: a Remote for Rhythmbox
tldr; Shouting into the void about a Proof of Concept (PoC) of mine called Rhymote, which is a Rhythmbox plugin + Mobile app meant to make it easier to control Rhythmbox running on some other device (usually your computer) from a phone. I recently made a project I really enjoy called Rhymote, which consists of a Rhythmbox plugin and a Flutter-based mobile app called Rhymote. The project is super early but I sprinkled a tiny bit of ambition in the design which is why I wanted to release it, partly as an example of more complex, recently written python-powered Rhythmbox plugin.
REST-ish Services in Haskell: Part 2
tl;dr - Work our way through some more type tomfoolery, domain modeling (w/ a light discussion of Domain Driven Design). Next a Component which can operate on the Task domain model, the TaskStore is introduced. Then the types “hit the road” and we build a partial implementation of a SQLiteTaskStore (with assistance from sqlite-simple). The code is available in the haskell-restish-todo repo, @ tag part-2.
REST-ish Services in Haskell: Part 1
tl;dr - A general tour through a bunch of patterns/strategies I use when developing robust-ish REST-ish web services with Haskell. This post boils down to using some approaches to getting creature comforts set up for your binary. If you want to go straight to the code, check out the gitlab repo @ tag part-1 UPDATE (11/28/2018) One of the great thing about blog posts is getting feedback and thanks to Magnus over @ therning.
Disassembling Raid on Hetzner Without Rescue Mode
tl;dr - Disassembling the default-installed RAID1 on Hetzner dedicated servers so you can give one drive to Rook (Ceph underneath) to manage is doable without going into Hetzner rescue mode if you just shrink the cluster to one drive (credit to user forstschutz on StackOverflow), then remove the second. I’m a huge fan of Hetzner dedicated servers and in particular their Robot Marketplace. Long story short, discovering the robot marketplace thanks to someone on HN opened my eyes to the world of affordable dedicated servers (I’ve also written about hetzner in some previous posts).
Using Gitlab Deploy Tokens With k8s
tl;dr - Gitlab deploy tokens in a Kubernetes deployment don’t work using the normal k8s private registry documentation instructions. This post lays out the workaround/hack I used the last time it came up to save people some time. Skim through for the process and to the end for the k8s YAML. One thing I just recently (literally a few moments ago) found myself doing was trying to figure out deploy tokens for a new project that I’m rolling out.
Up and Running With Linkerd v1
tl;dr - I got linkerd v1 working on a small 3-tier app on my k8s cluster. Linkerd v1 sports an older (but much more battle-tested) and simpler model in that it runs a proxy on every node as a DaemonSet. Linkerd v2 runs a set of control programs (the “control plane”) and per-application sidecar containers that act as proxies, and while that’s cool I’m not going to run it just yet.
Running Untrusted Workloads K8s Container Linux Part 3
tl;dr - After struggling through settting up containerd’s untrusted workload runtime, building a static kata-runtime and a neutered-but-static qemu-system-x86_64 to use, I succeeded in hooking up containerd to use kata-runtime only to fail @ the last step since the pods that were created ran qemu properly but couldn’t be communicated with and would immediately make k8s node they were running on move to the NotReady due to PLEG errors.