<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>VADOSWARE</title>
    <link>https://vadosware.io/</link>
    <description>Recent content on VADOSWARE</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 28 Dec 2024 13:10:42 +0900</lastBuildDate>
    <atom:link href="https://vadosware.io/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Stop Using Merge Commits</title>
      <link>https://vadosware.io/post/stop-using-merge-commits/</link>
      <pubDate>Sat, 28 Dec 2024 13:10:42 +0900</pubDate>
      <guid>https://vadosware.io/post/stop-using-merge-commits/</guid>
      <description>tl;dr - At the risk of continuing a flamewar, I&amp;rsquo;m going to suggest you never use merge commits.&#xA;Yup, end of the year is flamewar time.&#xA;The context of this particular (possibly unreasonable) suggestion comes with some context. I assume you do one of the folllowing in your hacking:&#xA;Make branches (i.e. a fully private repo/one you have maintainer/committer access to) Fork repositories and make pull requests back to a main repo Merge strategies In general I consider the contrast here between two merge strategies</description>
    </item>
    <item>
      <title>Fixing Pinentry With Emacs</title>
      <link>https://vadosware.io/post/fixing-pinentry-with-emacs/</link>
      <pubDate>Sat, 28 Dec 2024 12:54:03 +0900</pubDate>
      <guid>https://vadosware.io/post/fixing-pinentry-with-emacs/</guid>
      <description>tl;dr - pinentry (in particular pinentry-gnome3) stopped working, pinentry-emacs didn&amp;rsquo;t work well with daemon mode, just use pinentry-gtk or pinentry-qt5.&#xA;This post outlines a shallow dive into a rabbit hole for a broken pinentry setup w/ Emacs &amp;ndash; if your setup is already working, skip this.&#xA;What is pinentry? When a program like Gnu Privacy Guard (AKA GnuPG, gpg) requires user input, but that entry has to be secure (and possibly access system password stores/keychains), how do they do it?</description>
    </item>
    <item>
      <title>Yet Another IPC in Rust Experiment</title>
      <link>https://vadosware.io/post/yet-another-ipc-in-rust-experiment/</link>
      <pubDate>Tue, 08 Oct 2024 18:41:22 +0900</pubDate>
      <guid>https://vadosware.io/post/yet-another-ipc-in-rust-experiment/</guid>
      <description>tl;dr - I wrote some Inter-Process Communication (&amp;ldquo;IPC&amp;rdquo;) experiments in Rust w/ slightly more abstraction and more realistic serialization (JSON) &amp;ndash; Check out the code.&#xA;UPDATE (10/10/2024) Thanks to feedback from Reddit, I&#39;ve updated my references to &#34;throughput&#34; to &#34;latency&#34; which is the more accurate description of what roundtrips measures. Rust is kinda hot right now. OK it&amp;rsquo;s been hot for a while &amp;ndash; and I&amp;rsquo;ve been enjoying using it, but that&amp;rsquo;s not we&amp;rsquo;re here to talk about today.</description>
    </item>
    <item>
      <title>From Zellij to Tmux Back to Zellij</title>
      <link>https://vadosware.io/post/from-zellij-to-tmux-back-to-zellij/</link>
      <pubDate>Mon, 30 Sep 2024 19:34:33 +0900</pubDate>
      <guid>https://vadosware.io/post/from-zellij-to-tmux-back-to-zellij/</guid>
      <description>/ tl;dr - I switched from tmux to zellij, but returned to tmux primarily because of missing no-mouse on-screen text selection, and easy screen rotation&#xA;To set the record straight &amp;ndash; both tools are great. Zellij is awesome. I made up my mind to try it for many reasons:&#xA;Zellij looks great Zellij has a great set of out-of-the-box features Zellij is extendable Zellij is written in Rust Obviously, tmux is also great &amp;ndash; I consider it the defacto choice these days (though there are screen diehards I&amp;rsquo;m sure, and people who use other higher lever or even lower level tools).</description>
    </item>
    <item>
      <title>Starting locally installed Postgres instances in 2024</title>
      <link>https://vadosware.io/post/starting-locally-installed-postgres-instances-in-2024/</link>
      <pubDate>Fri, 30 Aug 2024 16:31:51 +0900</pubDate>
      <guid>https://vadosware.io/post/starting-locally-installed-postgres-instances-in-2024/</guid>
      <description>TL;DR This post exists because I forgot how to start locally installed Postgres before a talk.&#xA;I don&amp;rsquo;t normally have a section like this, but since I&amp;rsquo;ll probably be the one referencing this post again in the future:&#xA;apt install postgres # or whatever for your distro initdb --no-locale -D &amp;lt;data-dir&amp;gt; pg_ctl -D &amp;lt;data-dir&amp;gt; -l &amp;lt;log-file&amp;gt; start on MacOS:&#xA;brew install postgresql brew services start postgres psql postgres Context Every once in a while you forget how to use a tool and are humbled by how much of a craftsman you aren&amp;rsquo;t.</description>
    </item>
    <item>
      <title>Getting Features to Show Up in Your Rust Docs</title>
      <link>https://vadosware.io/post/getting-features-to-show-up-in-your-rust-docs/</link>
      <pubDate>Fri, 02 Aug 2024 13:17:24 +0900</pubDate>
      <guid>https://vadosware.io/post/getting-features-to-show-up-in-your-rust-docs/</guid>
      <description>tl;dr - Update your Cargo.toml and make sure doc_auto_cfg is turned on in lib.rs&#xA;How do you properly show feature specific functionality (and mark them with the required feature) for library crates in 2024?&#xA;First, you need to update your Cargo.toml:&#xA;[package.metadata.docs.rs] all-features = true If you don&amp;rsquo;t want all features to be enabled (if you want some features and related code to be legitimately hidden from docs), you can use specific features:</description>
    </item>
    <item>
      <title>A Year Hiatus with Rust and Webassembly</title>
      <link>https://vadosware.io/post/a-years-hiatus-with-rust-and-webassembly/</link>
      <pubDate>Sat, 20 Jul 2024 12:25:37 +0900</pubDate>
      <guid>https://vadosware.io/post/a-years-hiatus-with-rust-and-webassembly/</guid>
      <description>+ tl;dr - I did the thing where authors disappear for year(s) due to $DAYJOB &amp;ndash; I&amp;rsquo;ve been working with Rust and WebAssembly. I&amp;rsquo;m going to try to write a bit more!&#xA;I&amp;rsquo;m not back but it has occurred to me that this blog hasn&amp;rsquo;t seen any content in a whole year (and a day).&#xA;Sorry about that &amp;ndash; I&amp;rsquo;ve been busy working at $DAYJOB, and have been doing a lot of Rust and a bunch of WebAssembly.</description>
    </item>
    <item>
      <title>Building Custom Kernels for Kata Containers</title>
      <link>https://vadosware.io/post/building-custom-kernels-for-kata-containers/</link>
      <pubDate>Wed, 19 Jul 2023 07:33:07 +0900</pubDate>
      <guid>https://vadosware.io/post/building-custom-kernels-for-kata-containers/</guid>
      <description>+ tl;dr - The kata containers 3.0.2 documentation on custom kernels is great, but I ran into some issues, so I rehash exactly what I did below&#xA;I recently spent some time exploring how to build custom kernels to work with kata, and it&amp;rsquo;s way easier than it seems, though the docs are a bit stale/don&amp;rsquo;t work as expected.&#xA;Generally there are a few reasons you might want to do this, but usually it&amp;rsquo;s to enable kernel flags/features that weren&amp;rsquo;t enabled before.</description>
    </item>
    <item>
      <title>Fixing GPGME Error on Arch</title>
      <link>https://vadosware.io/post/fixing-gpgme-error-on-arch/</link>
      <pubDate>Fri, 28 Apr 2023 09:04:17 -0500</pubDate>
      <guid>https://vadosware.io/post/fixing-gpgme-error-on-arch/</guid>
      <description>Recently I ran into some GPG errors with pacman that were quite frustrating to fix. The symptoms look something like this when trying to run a command like sudo pacman -Syu:&#xA;error: GPGME error: No data error: GPGME error: No data error: GPGME error: No data :: Synchronising package databases... core 974.9 KiB 1134 KiB/s 00:01 [#########################################################] 100% extra 974.9 KiB 1547 KiB/s 00:01 [#########################################################] 100% community 974.9 KiB 1486 KiB/s 00:01 [#########################################################] 100% error: GPGME error: No data error: GPGME error: No data error: GPGME error: No data error: failed to synchronize all databases (invalid or corrupted database (PGP signature)) It evidently happens from time to time, as evidenced by previous internet threads:</description>
    </item>
    <item>
      <title>Makefile Tips: help text and preambles</title>
      <link>https://vadosware.io/post/makefile-tips/</link>
      <pubDate>Tue, 14 Feb 2023 17:15:19 +0900</pubDate>
      <guid>https://vadosware.io/post/makefile-tips/</guid>
      <description>tl;dr - Some tips for writing better makefiles (using preambles, generating help text), and why you might want to use just instead.&#xA;The makefile preamble This preamble is online @ davis-hansson.com&#xA;SHELL := bash .ONESHELL: .SHELLFLAGS := -eu -o pipefail -c .DELETE_ON_ERROR: MAKEFLAGS += --warn-undefined-variables MAKEFLAGS += --no-builtin-rules ifeq ($(origin .RECIPEPREFIX), undefined) $(error This Make does not support .RECIPEPREFIX. Please use GNU Make 4.0 or later) endif .RECIPEPREFIX = &amp;gt; # Default - top level rule is what gets ran when you run just `make` build: out/image-id .</description>
    </item>
    <item>
      <title>Software Sessions: Yak-shaving interview (2022)</title>
      <link>https://vadosware.io/post/software-sessions-interview-2022/</link>
      <pubDate>Mon, 02 Jan 2023 22:23:38 +0900</pubDate>
      <guid>https://vadosware.io/post/software-sessions-interview-2022/</guid>
      <description>tl;dr - I hopped on the Software Sessions podcast to talk about yak shaving and some projects I&amp;rsquo;ve been working on. Take a Listen (it&amp;rsquo;s kinda long so consider the transcript as well)&#xA;I was contacted a while ago by Jeremy who runs the Software Sessions podcast. I&amp;rsquo;d actually come across his Podcast in the past so I was super excited to get a chance to interview and talk about some of the projects I&amp;rsquo;ve done in the past.</description>
    </item>
    <item>
      <title>Faster CI builds for Rust with pre-baked builder images and sccache</title>
      <link>https://vadosware.io/post/faster-ci-builds-for-rust-with-builder-images-and-sccache/</link>
      <pubDate>Fri, 16 Dec 2022 22:56:27 +0900</pubDate>
      <guid>https://vadosware.io/post/faster-ci-builds-for-rust-with-builder-images-and-sccache/</guid>
      <description>tl;dr - A combination of pre-baked very heavy docker images, sccache, and explicitly setting CARGO_HOME and CARGO_TARGET_DIR will do it. If you&amp;rsquo;re squeamish about large docker images in your build pipeline, close this tab.&#xA;Today was the last day I put up with unnecessary rebuilds in my Rust CI pipelines.&#xA;Sure, I probably shouldn&amp;rsquo;t have ported this particular project to Rust (Nimbus is powered by Typescript and Rust), but when someone gives you strong type safety, performance, and static binary builds and tells you to pick 3, you start getting a bit trigger happy with language choice.</description>
    </item>
    <item>
      <title>PSA: Email Submission should be on port 465</title>
      <link>https://vadosware.io/post/psa-email-submission-should-be-on-port-465/</link>
      <pubDate>Sun, 04 Dec 2022 14:00:51 +0900</pubDate>
      <guid>https://vadosware.io/post/psa-email-submission-should-be-on-port-465/</guid>
      <description>tl;dr - Your program should support 465 and optionally 587 &amp;ndash; implicit TLS via submissions over port 465 is where we&amp;rsquo;re moving to, according to RFC 8314 from 2018.&#xA;UPDATE (2022/12/05) Thanks to some feedback from very helpful folks on r/sysadmin, it&#39;s clear that STARTTLS is even worse than I thought! After experiencing a bit of pain making my somewhat complicated email setup work properly with SNI-based forwarding, I realized that up until now I&amp;rsquo;ve also believed that STARTTLS on 587 was the &amp;ldquo;future&amp;rdquo; and TLS via 465 was SMTPS.</description>
    </item>
    <item>
      <title>Tooling spotlight: direnv</title>
      <link>https://vadosware.io/post/tooling-spotlight-direnv/</link>
      <pubDate>Wed, 23 Nov 2022 09:30:22 +0900</pubDate>
      <guid>https://vadosware.io/post/tooling-spotlight-direnv/</guid>
      <description>tl;dr - You should be using direnv to load ENV variables dynamically per-project.&#xA;You don&amp;rsquo;t necessarily have to buy into the entirety of the 12 factor app manifesto, but you should almost definitely be using ENV-as-configuration by this point.&#xA;Even if it&amp;rsquo;s just a CONFIG ENV var that points to a config.toml that your application reads, passing configuration via environment variables is the tried and true method of configuring applications these days (inside a docker container or out).</description>
    </item>
    <item>
      <title>PSA: Getting __dirname and Package Information with ES Modules</title>
      <link>https://vadosware.io/post/psa-getting-dirname-and-package-info-from-es-modules/</link>
      <pubDate>Wed, 23 Nov 2022 09:02:53 +0900</pubDate>
      <guid>https://vadosware.io/post/psa-getting-dirname-and-package-info-from-es-modules/</guid>
      <description>tl;dr - __dirname and package information are a bit harder to get from an ES module.&#xA;In case you&amp;rsquo;re not using them yet, take a second to read up on Javascript (&amp;ldquo;ES&amp;rdquo; &amp;ndash; EMCAScript) modules &amp;ndash; they&amp;rsquo;re quite the large feature/platform change, big steps up (mostly) from CommonJS and RequireJS (AMD).&#xA;One of the things that isn&amp;rsquo;t quite as nice as RequireJS in NodeJS-land was is how difficult it is to programmatically get package and version information!</description>
    </item>
    <item>
      <title>Introducing the Awesome F/OSS Newsletter</title>
      <link>https://vadosware.io/post/introducing-awesome-foss/</link>
      <pubDate>Fri, 21 Oct 2022 19:24:50 +0900</pubDate>
      <guid>https://vadosware.io/post/introducing-awesome-foss/</guid>
      <description>tl;dr - I started a newsletter called Awesome F/OSS &amp;ndash; I&amp;rsquo;m featuring one awesome Free and Open Source project every day for the next&amp;hellip; forever(?).&#xA;I&amp;rsquo;ve got an huge list of Free and Open Source (F/OSS) projects that I think are awesome. I get to recommend them to friends and help people pick solutions a few times a month, but lately it&amp;rsquo;s felt like only being able to recommend solutions to such a small audience is a waste.</description>
    </item>
    <item>
      <title>The Preamble to Crypto might have just ended</title>
      <link>https://vadosware.io/post/the-preamble-to-crypto-might-have-just-ended/</link>
      <pubDate>Tue, 27 Sep 2022 17:30:50 +0900</pubDate>
      <guid>https://vadosware.io/post/the-preamble-to-crypto-might-have-just-ended/</guid>
      <description>tl;dr - Crypto does have a few usecases, ETH2&amp;rsquo;s switch to Proof of Stake means it&amp;rsquo;s worth building on, and Blockchain represents a chance to reshape policy and regulation that is ossified.&#xA;Slightly longer TL;DR I am keenly aware of how much everyone hates reading about crypto so I&amp;rsquo;m going to try and front load as much of my thesis as possible, as plainly as possible.&#xA;You do not have to read this whole thing, you can literally just read this section and be done.</description>
    </item>
    <item>
      <title>TIL: How to Import or Open .ics Files in the Calendar App (iOS)</title>
      <link>https://vadosware.io/post/how-to-import-or-open-ics-files-in-icalendar/</link>
      <pubDate>Tue, 27 Sep 2022 15:40:46 +0900</pubDate>
      <guid>https://vadosware.io/post/how-to-import-or-open-ics-files-in-icalendar/</guid>
      <description>tl;dr - Use this shortcut (shared on RoutineHub) to open .ics files (invite.ics/calendar.ics) and add them to your iOS calendar&#xA;You know those attachment files that you get when someone sends you a meeting invite &amp;ndash; invite.ics/calendar.ics? Well for some reason they don&amp;rsquo;t open right on iOS.&#xA;iOS will let you review the details of the event, but won&amp;rsquo;t let you add it to your calendar. It&amp;rsquo;s infuriating.&#xA;Generally there are only two known ways to get a calendar file to actually show the &amp;ldquo;Add to Calendar&amp;rdquo; option:</description>
    </item>
    <item>
      <title>Remember the Firefox Phone?</title>
      <link>https://vadosware.io/post/remember-the-firefox-phone/</link>
      <pubDate>Fri, 23 Sep 2022 07:58:59 +0900</pubDate>
      <guid>https://vadosware.io/post/remember-the-firefox-phone/</guid>
      <description>tl;dr - Remember FirefoxOS and the Firefox Phone(s)? I do, because I still have two (!) Fx0 handsets sitting in my closet.&#xA;Remembering Firefox phone Every once in a while I like to spend some time clutching my fists and thinking about what the Firefox phone could have been.&#xA;I usually feel like that after looking in my closet and running my hands across this thing:&#xA;Taken on an iPhone SE2 😢</description>
    </item>
    <item>
      <title>App Runner finally works on Apex domains</title>
      <link>https://vadosware.io/post/app-runner-finally-works-on-apex-domains/</link>
      <pubDate>Sun, 18 Sep 2022 09:10:22 +0900</pubDate>
      <guid>https://vadosware.io/post/app-runner-finally-works-on-apex-domains/</guid>
      <description>tl;dr - AWS App Runner is awesome for deploying applications/services as containers, and it can finally be used with apex domains (ex. domain.tld)&#xA;It looks like App Runner has finally added support for top level domains:&#xA;AWS release notes for Route53 A while back I did a mini bake-off of simple AWS container deployment mechanisms for a customer. I explored some options that are container friendly:&#xA;Elastic Container Service (ECS) AWS Elastic Kubernetes Service (EKS) App Runner Elastic Beanstalk Of these, ECS is the most well-known and trusted, and App Runner is the newest, but at the time I kept running into a perplexing issue&amp;hellip;</description>
    </item>
    <item>
      <title>Introducing pg_idkit: A Postgres extension for generating UUIDs</title>
      <link>https://vadosware.io/post/introducing-pg-idkit/</link>
      <pubDate>Sat, 10 Sep 2022 11:36:58 +0900</pubDate>
      <guid>https://vadosware.io/post/introducing-pg-idkit/</guid>
      <description>tl;dr - While guest writing a Supabase blog post on how identifiers work in Postgres, I was able to build pg_idkit which makes it easier to generate new UUIDs in Postgres&#xA;UUIDs are better supported in Postgres than in a lot of other databases. Postgres has the uuid datatype and you can easily generate UUIDs as primary keys with SQL like this:&#xA;CREATE TABLE example ( uuid uuid PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY uuid_generate_v1mc(), col1 text NOT NULL, col2 integer NOT NULL, created_at timestamptz NOT NULL DEFAULT NOW() ); Postgres has built-in support for UUIDv1, UUIDv4, and somet other versions, but it turns out there&amp;rsquo;s a raft of new UUID types out there.</description>
    </item>
    <item>
      <title>Self-Hosted email is the hardest it&#39;s ever been, but also the easiest.</title>
      <link>https://vadosware.io/post/its-never-been-easier-or-harder-to-self-host-email/</link>
      <pubDate>Mon, 05 Sep 2022 12:10:56 +0900</pubDate>
      <guid>https://vadosware.io/post/its-never-been-easier-or-harder-to-self-host-email/</guid>
      <description>tl;dr - This post was inspired by Carlos Fenollosa&amp;rsquo;s post (and the resulting discussion on HN). Self hosting email is the easiest it&amp;rsquo;s ever been &amp;ndash; don&amp;rsquo;t let the email provider oligopoly (Gmail, Microsoft, Yahoo, etc) win.&#xA;Discussion up until now: Deliverability for self-hosted emails has never been harder The top page on HN had an interesting post on it titled &amp;ldquo;After self-hosting my email for twenty-three years I have thrown in the towel.</description>
    </item>
    <item>
      <title>Even Amazon SES Has IPs blocked by Spamhaus sometimes</title>
      <link>https://vadosware.io/post/even-amazon-ses-has-ips-blocked-by-spamhaus-sometimes/</link>
      <pubDate>Wed, 31 Aug 2022 22:48:41 +0900</pubDate>
      <guid>https://vadosware.io/post/even-amazon-ses-has-ips-blocked-by-spamhaus-sometimes/</guid>
      <description>tl;dr - Turns out Amazon SES has an IP that is currently blocked by Spamhaus&#xA;Imagine my susprise while investigating some email delivery issues lately when I discovered that Amazon SES was using an IP that is currently blacklisted by Spamhaus!&#xA;The IP in question is 54.240.27.189 and of course I took images to prove it happened:&#xA;And there ya have it &amp;ndash; I don&amp;rsquo;t know what automated system is going to ping someone (or another robot?</description>
    </item>
    <item>
      <title>Was Service Catalog Redundant After All?</title>
      <link>https://vadosware.io/post/was-service-catalog-redundant-after-all/</link>
      <pubDate>Mon, 08 Aug 2022 15:37:45 +0900</pubDate>
      <guid>https://vadosware.io/post/was-service-catalog-redundant-after-all/</guid>
      <description>tl;dr - Service Catalog might ahve been a redundant concept after all&amp;hellip; Was it just the hobby-horse of large integration-happy stakeholders?&#xA;I&amp;rsquo;ve always been sort of confused by the concept of the Service Catalog &amp;ndash; so much so I&amp;rsquo;ve posted about it before to get a feel for public consensus.&#xA;For those who don&amp;rsquo;t know what service catalog was &amp;ndash; here&amp;rsquo;s a great post from WeaveWorks on it&#xA;People have put hard work into supporting this concept, chairing the SIG, and pushing it forward, but I have to say that I don&amp;rsquo;t think I ever squared why it was necessary in a world with operators present.</description>
    </item>
    <item>
      <title>Slonik is Awesome</title>
      <link>https://vadosware.io/post/slonik-is-awesome/</link>
      <pubDate>Sun, 17 Jul 2022 11:44:02 +0900</pubDate>
      <guid>https://vadosware.io/post/slonik-is-awesome/</guid>
      <description>+ + tl;dr - Slonik is my go-to Postgres driver for recent projects (mostly SvelteKit-based) &amp;ndash; it is amazingly lightweight, simple and powerful. I prefer it even though it lacks time-saving ORM methods (ex. Model.save()).&#xA;UPDATE (2023/05/09) As much as I loved using Slonik due to how lightweight it is, it just isn&#39;t a reasonable choice when compared with something like TypeORM. With issues like this one in the ecosystem, Slonik seems to constantly introduce breaking changes without brining the ecosystem along.</description>
    </item>
    <item>
      <title>Why don&#39;t more people use Throat Mics?</title>
      <link>https://vadosware.io/post/why-dont-more-people-use-throat-mics/</link>
      <pubDate>Thu, 30 Jun 2022 19:35:03 +0900</pubDate>
      <guid>https://vadosware.io/post/why-dont-more-people-use-throat-mics/</guid>
      <description>UPDATE (2022/06/30) After some feedback from HN I also have an audio sample if you want to hear it! (Turn the sound down a little! There&#39;s also a bunch of dead air after 15 seconds.) Your browser does not support the audio tag. tl;dr - Don&amp;rsquo;t chuck the Sony 1000XMs/AirPods just yet. Bluetooth headsets are more convenient, can have better mic quality, and none of the downsides. That said, throat mics might an improvement over a really bad, 20 year old standalone wired built-for-computers microphone (if that&amp;rsquo;s what you are using), and have slightly better background noise reduction if you&amp;rsquo;re not in a quiet room.</description>
    </item>
    <item>
      <title>Building an interface (even if there&#39;s only one implementation) is unquestionably right</title>
      <link>https://vadosware.io/post/building-an-interface-with-one-implementation-is-unquestionably-right/</link>
      <pubDate>Thu, 26 May 2022 08:19:18 +0900</pubDate>
      <guid>https://vadosware.io/post/building-an-interface-with-one-implementation-is-unquestionably-right/</guid>
      <description>tl;dr - Large components of systems you build deserve an interface, even if there is only ever one implementation. If you want your code to be good, put a bird interface on it!&#xA;I&amp;rsquo;ve gone back and forth, but for the last maybe 5 years my opinion has hardened. My stance is now that it is unquestionably right to always build an interface for large components of a given system, even if you only have one implementation early on.</description>
    </item>
    <item>
      <title>Learning to Love the Plus Addresses</title>
      <link>https://vadosware.io/post/learning-to-love-the-plus-addresses/</link>
      <pubDate>Tue, 24 May 2022 12:18:51 +0900</pubDate>
      <guid>https://vadosware.io/post/learning-to-love-the-plus-addresses/</guid>
      <description>tl;dr - I started a newsletter for ideas, and I love seeing subscribers with emails like someone+ideas@provider.com&#xA;Last month I started a newsletter for unvalidated ideas. I know what you&amp;rsquo;re thinking &amp;ndash; Execution is everything &amp;ndash; aren&amp;rsquo;t ideas nearly worthless? Wouldn&amp;rsquo;t that make the newsletter worth zero or possibly less due to cost of reading?&#xA;Well I don&amp;rsquo;t have the answers to any of those probing questions, but one of the most unexpected things I&amp;rsquo;ve run into is just how much I enjoy seeing someone+ideas@provider.</description>
    </item>
    <item>
      <title>Cool CLI: lstopo</title>
      <link>https://vadosware.io/post/cool-cli-lstopo/</link>
      <pubDate>Mon, 16 May 2022 16:18:31 +0900</pubDate>
      <guid>https://vadosware.io/post/cool-cli-lstopo/</guid>
      <description>tl;dr - If you haven&amp;rsquo;t heard of lstopo before, you&amp;rsquo;re welcome.&#xA;While watching a recent ServeTheHome video on Youtube (I really should watch that channel more, they&amp;rsquo;ve been quality for an very long time), I noticed them mention a tool I&amp;rsquo;d never heard of before called lstopo.&#xA;It was mentioned casually along wiht lscpu (which is very useful and well known) and it had an awesome graphic (kind of like the difference between htop and top) which was very useful.</description>
    </item>
    <item>
      <title>Installing Fluent Bit and Loki for lightweight logs</title>
      <link>https://vadosware.io/post/installing-fluent-bit-and-loki-for-lightweight-logs/</link>
      <pubDate>Mon, 16 May 2022 14:45:19 +0900</pubDate>
      <guid>https://vadosware.io/post/installing-fluent-bit-and-loki-for-lightweight-logs/</guid>
      <description>+ + tl;dr - I installed Loki and Fluent Bit on my Kubernetes cluster for some light log retention, in the past I&amp;rsquo;ve used EFKK but this setup is lighter and easier for low maintenance projects.&#xA;Assuming you have a Grafana instance handy, Fluent Bit + Loki is pretty great for a low effort log aggregation! It&amp;rsquo;s a relatively &amp;ldquo;new&amp;rdquo; stack compared to options like Graylog.&#xA;Another great option in this space is Graylog!</description>
    </item>
    <item>
      <title>A script for copying PVC data across StorageClassses</title>
      <link>https://vadosware.io/post/cross-storageclass-pvc-copying-script/</link>
      <pubDate>Sun, 01 May 2022 18:10:22 +0900</pubDate>
      <guid>https://vadosware.io/post/cross-storageclass-pvc-copying-script/</guid>
      <description>tl;dr - CSI is awesome but it doesn&amp;rsquo;t help you with cross-StorageClass data migration. I wrote a small, painfully procedural script &amp;amp; docker container called pvcloney to perform this task repeatably for myself. The code is a great crash-course to @kubernetes/client-node&#xA;Today&amp;rsquo;s yak shave is of the storage variety &amp;ndash; useful only to people who use/evaluate different storage mechanisms on their clusters.&#xA;I&amp;rsquo;ve gone hostPath -&amp;gt; Rook -&amp;gt; Longhorn -&amp;gt; OpenEBS ZFS LocalPV -&amp;gt; OpenEBS LVM -&amp;gt; Rook on ZFS and all over the place, so I&amp;rsquo;ve got a few old workloads that are running storage providers that I&amp;rsquo;m not planning to use going forward.</description>
    </item>
    <item>
      <title>cert-manager moved from Bazel to Make</title>
      <link>https://vadosware.io/post/cert-manager-moved-from-bazel-to-make/</link>
      <pubDate>Mon, 25 Apr 2022 15:25:08 +0900</pubDate>
      <guid>https://vadosware.io/post/cert-manager-moved-from-bazel-to-make/</guid>
      <description>tl;dr - cert-manager and moved from Bazel to Make (i.e. Makefile) based build in 1.8.0. I&amp;rsquo;m into Makefiles (+ kustomize) for builds and deploys so I&amp;rsquo;m taking an undeserved victory lap.&#xA;A welcome surprise during a long round of updates Recently I&amp;rsquo;ve been upgrading some of the critical services in my cluster and like everyone else, cert-manager is one of the best parts of my cluster.&#xA;The cert-manager maintainers and contributors have saved what I can only imagine is millions of person years at this point through great effort, silently and without fanfare.</description>
    </item>
    <item>
      <title>A Pattern for ENV in Sveltekit</title>
      <link>https://vadosware.io/post/pattern-for-env-in-sveltekit/</link>
      <pubDate>Mon, 18 Apr 2022 23:23:07 +0900</pubDate>
      <guid>https://vadosware.io/post/pattern-for-env-in-sveltekit/</guid>
      <description>UPDATE (2022/08/02) Looks like Svelte has a new mechanism for dealing with runtime/static env -- check out the docs on $env/dynamic/private I&#39;ll probably be using this method in my projects for a bit, but will be migrating towards the built-in solution! tl;dr - I use ENV in Sveltekit by loading .env/.envrc formatted files (thanks direnv!) and making sure to do filtering only for PUBLIC_* in hooks.ts before passing to the frontend, rather than using the usual VITE_* replacement approach</description>
    </item>
    <item>
      <title>Lets call pre-launch market-validation pages &#39;prospecting&#39; pages</title>
      <link>https://vadosware.io/post/lets-call-pre-launch-landing-pages-prospecting-pages/</link>
      <pubDate>Mon, 18 Apr 2022 23:11:31 +0900</pubDate>
      <guid>https://vadosware.io/post/lets-call-pre-launch-landing-pages-prospecting-pages/</guid>
      <description>tl;dr - We should call the market-validating pre-launch landing pages people make &amp;ldquo;prospecting pages&amp;rdquo;.&#xA;Everyone says it, it sounds trite, but I had to figure it out for myself &amp;ndash; 0-1 startups are many times market discovery vehicles.&#xA;Smarter entrepreneurs enter existing markets and do something better than existing incumbents, but I think even that could be phrased as &amp;ldquo;market rediscovery&amp;rdquo;. Either way, I&amp;rsquo;ve learned that I&amp;rsquo;m not one of those smart entrepreneurs!</description>
    </item>
    <item>
      <title>Thunderbird Autoconfig for your self-hosted email server with MTA-STS</title>
      <link>https://vadosware.io/post/thunderbird-autoconfig-for-your-self-hosted-mailserver/</link>
      <pubDate>Sun, 10 Apr 2022 14:10:00 +0900</pubDate>
      <guid>https://vadosware.io/post/thunderbird-autoconfig-for-your-self-hosted-mailserver/</guid>
      <description>+ tl;dr - Host some Thunderbird autoconfig formatted XML, and text files at the right places (thanks to MTA-STS) so clients can have easy-peasy email setup. This was a fun chance to flex my Traefik installation, and kcup.&#xA;You&amp;rsquo;re hosting your own email server right? Cool, me too. Good thing we ignored all the naysayers out there.&#xA;In the past I&amp;rsquo;ve run postfix + dovecot setups and now I run many small maddy instances (for various projects), but I never looked into autoconfig.</description>
    </item>
    <item>
      <title>The Future of Free and Open Source is AGPL</title>
      <link>https://vadosware.io/post/the-future-of-free-and-open-source-is-agpl/</link>
      <pubDate>Thu, 31 Mar 2022 08:40:34 +0900</pubDate>
      <guid>https://vadosware.io/post/the-future-of-free-and-open-source-is-agpl/</guid>
      <description>tl;dr - AGPL aligns creators, maintainers, tinkerers, and users of software while leaving avenues for monetization. AGPL isn&amp;rsquo;t actually anti-hosting (IANAL) but is instead a forced improvement repatriation scheme. Nimbus Web Services will host AGPL software and contribute back &amp;ndash; hyperscalers can too. Read the fundamentals of the AGPLv3 and Why the affero GPL.&#xA;UPDATE (2022/04/27) After some discussion on HN I figured I&#39;d highlight it here -- this post is meant to address software that can be re-hosted, or &#34;</description>
    </item>
    <item>
      <title>Upgrading a k0s cluster in-place from single-master to HA</title>
      <link>https://vadosware.io/post/upgrading-a-k0s-cluster-from-single-to-ha/</link>
      <pubDate>Thu, 24 Feb 2022 09:31:56 +0900</pubDate>
      <guid>https://vadosware.io/post/upgrading-a-k0s-cluster-from-single-to-ha/</guid>
      <description>tl;dr - stream-of-consciousness notes as I stumbled through upgrading a k0s cluster from single-node to HA control plane. You probably shouldn&amp;rsquo;t attempt to do this though, just make a new HA-from-day-one cluster and move your workloads over.&#xA;Recently I went through the somewhat traumatic experience of upgrading a k0s Kubernetes cluster from a single master (I was running 1 controller+worker node with other worker-only nodes) to a group of HA controller-only nodes with the same set of workers.</description>
    </item>
    <item>
      <title>How to Install newer versions and bleeding edge ZFS</title>
      <link>https://vadosware.io/post/how-to-install-bleeding-edge-zfs/</link>
      <pubDate>Fri, 11 Feb 2022 02:51:28 +0900</pubDate>
      <guid>https://vadosware.io/post/how-to-install-bleeding-edge-zfs/</guid>
      <description>/ tl;dr - Line by line explanation of my ansible-powered ZFS install script for use on Hetzner&amp;rsquo;s dedicated hardware (Ubuntu 20.04 - &amp;ldquo;Focal&amp;rdquo;) &amp;ndash; it&amp;rsquo;s not perfect/minimal, but it works for me.&#xA;A while back I started using ZFS on all my bare metal dedicated hardware hosted at Hetzner to wrangle the attached HDDs and SSDs. There are lots of choices in the space (standard LVM, mdraid btrfs, etc), but I chose ZFS for it&amp;rsquo;s feaureset and ergonomics.</description>
    </item>
    <item>
      <title>How I Built LoginWithHN</title>
      <link>https://vadosware.io/post/how-i-built-lwhn/</link>
      <pubDate>Wed, 02 Feb 2022 23:28:15 +0900</pubDate>
      <guid>https://vadosware.io/post/how-i-built-lwhn/</guid>
      <description>+ tl;dr - This post explains how I built LoginWithHN.com (LWHN), an unofficial OAuth2+OpenID connect provider for HackerNews. LWHN is for builders who want to share things with the HN audience, and cuts down friction like any other OAuth2+OpenID connect provider. LWHN is now open to the public for new client app registration, so check it out if you&amp;rsquo;re interested.&#xA;DISCLAIMER: I wrote this article with the knowledge that Ory would share it later on their blog/marketing channels.</description>
    </item>
    <item>
      <title>Starting 2022 with a Bang: Ceph on ZFS</title>
      <link>https://vadosware.io/post/starting-2022-with-a-bang-ceph-on-zfs/</link>
      <pubDate>Sun, 23 Jan 2022 00:28:59 +0900</pubDate>
      <guid>https://vadosware.io/post/starting-2022-with-a-bang-ceph-on-zfs/</guid>
      <description>+ tl;dr - Ceph (Bluestore) (via Rook) on top of ZFS (ZFS on Linux) (via OpenEBS ZFS LocalPV) on top of Kubernetes. It&amp;rsquo;s as wasteful as it sounds &amp;ndash; 200TPS on pgbench compared to ~1700TPS with lightly tuned ZFS and stock Postgres. The setup is at least usable and can get up to 1000TPS (2 replica ceph block pool) with synchronous_commit=off and some other less risky optimizations. Check out the numbers at the end in context and since this post is very Kubernetes heavy, if you don&amp;rsquo;t run Kubernetes maybe check out the the guide /u/darkz0r2 was kind enough to share.</description>
    </item>
    <item>
      <title>Infra Fun: Prometheus Broke My Haraka Installation</title>
      <link>https://vadosware.io/post/infra-fun-prometheus-broke-my-haraka-installation/</link>
      <pubDate>Sun, 16 Jan 2022 15:56:50 +0900</pubDate>
      <guid>https://vadosware.io/post/infra-fun-prometheus-broke-my-haraka-installation/</guid>
      <description>- tl;dr - My cluster-wide prometheus scraping config was picking up port 25 as a good place to send GET /metrics requests, and broke my surprisingly fragile email setup (Haraka -&amp;gt; Maddy), simply by inundating it with invalid HTTP requests to a port meant for SMTP.&#xA;My mailer setup makes use of two pretty good F/OSS tools that I rarely have problems with:&#xA;Haraka Maddy They work great, and I don&amp;rsquo;t spend much time thinking about them &amp;ndash; I often set up a new maddy instance with separate backups and what-not for every project, (for example NoMorePizzaParties.</description>
    </item>
    <item>
      <title>Everything I&#39;ve seen on optimizing Postgres on ZFS</title>
      <link>https://vadosware.io/post/everything-ive-seen-on-optimizing-postgres-on-zfs-on-linux/</link>
      <pubDate>Sat, 18 Dec 2021 22:42:58 +0900</pubDate>
      <guid>https://vadosware.io/post/everything-ive-seen-on-optimizing-postgres-on-zfs-on-linux/</guid>
      <description>+ UPDATE (2021/12/21) After lots of feedback on Reddit (thanks /u/BucketOfSpinningRust!) and doing some more experimenting and digging, I&#39;ve updated this post with more information -- new/updated sections are marked &#34;Update&#34;. tl;dr - Tips for running Postgres on (Open)ZFS-on-Linux (ZoL), which I&amp;rsquo;m nicknaming &amp;ldquo;PoZoL&amp;rdquo;, check out the TOC (or skip to the resource list at the bottom) and browse to whatever looks interesting.&#xA;This post is a shameless ripoff/reformulation of everything I&amp;rsquo;ve seen so far across conference presentations, the internet, reddit, forum posts and other places about how to run Postgres on ZFS reliably and with good performance.</description>
    </item>
    <item>
      <title>New node who dis? DNS Issues and Calico Failures on a resurrected Node</title>
      <link>https://vadosware.io/post/new-node-who-dis-dns-issues-and-calico-failures-on-a-resurrected-node/</link>
      <pubDate>Sat, 18 Dec 2021 18:59:16 +0900</pubDate>
      <guid>https://vadosware.io/post/new-node-who-dis-dns-issues-and-calico-failures-on-a-resurrected-node/</guid>
      <description>tl;dr - Adding a rebuilt node with a different IP under an already-used node name did not sit well with Calico in my setup. I could see the problem (mismatched IP address information in Node resources), but I couldn&amp;rsquo;t fix it &amp;ndash; ultimately I gave the new node a new never-before-used name (i.e.. worker-&amp;lt; n+1 &amp;gt; instead of worker-2).&#xA;Recently during an expansion and some shifting of my k8s cluster, I found out (the hard way, of course) that if you add a new node that has the same name (let&amp;rsquo;s say worker-1 or worker-1.</description>
    </item>
    <item>
      <title>Handling your first dead Hetzner hard drive</title>
      <link>https://vadosware.io/post/handling-your-first-dead-hetzner-hard-drive/</link>
      <pubDate>Mon, 13 Dec 2021 13:10:45 +0900</pubDate>
      <guid>https://vadosware.io/post/handling-your-first-dead-hetzner-hard-drive/</guid>
      <description>tl;dr - A drive attached to a Hetzner dedicated server failed, my drive has both mdraid and ZFS set up so I restored thanks to Hetzner documentation and Joyent&amp;rsquo;s nice high level docs on ZFS drive replacement combined with the OpenBSD Handbook&amp;rsquo;s section on ZFS and OpenZFS (ZFS On Linux) Docs.&#xA;Recently I&amp;rsquo;ve undergone the pretty traumatic expansion of my Kubernetes control plane from single controller (which was also acting as a node in the cluster and running workloads) to a 3 Hetzner Cloud machine Highly Available (&amp;ldquo;HA&amp;rdquo;) setup.</description>
    </item>
    <item>
      <title>Using Baserow to power the landing page for NimbusWS</title>
      <link>https://vadosware.io/post/using-baserow-to-power-the-landing-page-for-nimbusws/</link>
      <pubDate>Sun, 14 Nov 2021 13:32:48 +0900</pubDate>
      <guid>https://vadosware.io/post/using-baserow-to-power-the-landing-page-for-nimbusws/</guid>
      <description>tl;dr - I used a self-hosted Baserow instance as the backend for a landing page announcing my most ambitious endeavor yet (a cloud provider called NimbusWS).&#xA;UPDATE (11/25/2021) Baserow 1.7 has just been released!. Lots of big features in this new release, like Lookups (which look like a way to do JOINs) -- and someting I pontificated in this very post, webhooks! Building landing pages is fun, but I always hesitate a little bit when it comes time to store the data that they collect (emails, product preferences, etc).</description>
    </item>
    <item>
      <title>Bare metal k8s storage: OpenEBS ZFS LocalPV &#43; Rancher Longhorn</title>
      <link>https://vadosware.io/post/bare-metal-k8s-storage-zfs-local-pv-with-rancher/</link>
      <pubDate>Thu, 14 Oct 2021 11:02:14 +0900</pubDate>
      <guid>https://vadosware.io/post/bare-metal-k8s-storage-zfs-local-pv-with-rancher/</guid>
      <description>+ + UPDATE (10/28/2021) I&#39;ve gotten some great feedback from a post in r/kubernetes and another post in r/zfs. I&#39;ve added a section with some thoughts tl;dr - I recently switched my baremetal cluster storage setup to OpenEBS ZFS LocalPV + Longhorn. Some issues with Longhorn not running on PVCs aside, the setup is flexible perf wise (ZFS LocalPV) and I at least have a low-complexity option for distributed/HA storage (Longhorn).</description>
    </item>
    <item>
      <title>How and why Haskell is better (than your favorite $LANGUAGE)</title>
      <link>https://vadosware.io/post/how-and-why-haskell-is-better/</link>
      <pubDate>Thu, 23 Sep 2021 11:35:22 +0900</pubDate>
      <guid>https://vadosware.io/post/how-and-why-haskell-is-better/</guid>
      <description>tl;dr - Haskell&amp;rsquo;s worth checking out if you haven&amp;rsquo;t yet, you&amp;rsquo;ll find some features you may want to bring back to your beloved $LANGUAGE.&#xA;Rah-Rah Haskell posts in 2021? You betcha.&#xA;Note that all examples are written in simple Haskell where possible. No eta reductions for example, the code should be very easy to understand. Most of the code in here will sail past the compiler (you could use it for your own projects!</description>
    </item>
    <item>
      <title>Ansible tip: Variables from inventory file</title>
      <link>https://vadosware.io/post/ansible-tip-variables-from-inventory-file/</link>
      <pubDate>Sun, 19 Sep 2021 12:57:20 +0900</pubDate>
      <guid>https://vadosware.io/post/ansible-tip-variables-from-inventory-file/</guid>
      <description>While growing my Kubernetes cluster and working on some Ansible scripts for my infrastructure I recently realized that I&amp;rsquo;ve been under-utilizing one of the staples of ansible code, tying node-specific information to nodes in the inventory file! It was harder than I thought to use so this a quick writeup on how to do it:&#xA;Given an inventory file like this:&#xA;all: children: some_machine_group_name: hosts: some.machine.you.have: # possibly &amp;#39;xxx.xxx.xxx.xxx&amp;#39; os_partition_size_gb: 128 drive_paths: - /dev/nvme0n1 - /dev/nvme1n1 another_machine_group_name: hosts: the.</description>
    </item>
    <item>
      <title>Automating k0s cluster backup with Ansible and SystemD</title>
      <link>https://vadosware.io/post/automating-k0s-cluster-backup-with-ansible-and-systemd/</link>
      <pubDate>Sat, 11 Sep 2021 16:37:36 +0900</pubDate>
      <guid>https://vadosware.io/post/automating-k0s-cluster-backup-with-ansible-and-systemd/</guid>
      <description>+ tl;dr - If you didn&amp;rsquo;t know how to set up a SystemD timer and service to backup your k0s cluster, you no longer have an excuse, scroll down for the code&#xA;Recently while going through my workloads and making sure everything&amp;rsquo;s backed up to external storage (I&amp;rsquo;m using BackBlaze B2) and it&amp;rsquo;s been great so far). I came across the problem of how I should back up the cluster itself.</description>
    </item>
    <item>
      <title>Sometimes the problem is DNS (on Hetzner)</title>
      <link>https://vadosware.io/post/sometimes-the-problem-is-dns-on-hetzner/</link>
      <pubDate>Sun, 05 Sep 2021 11:59:40 +0900</pubDate>
      <guid>https://vadosware.io/post/sometimes-the-problem-is-dns-on-hetzner/</guid>
      <description>+ + tl;dr - You&amp;rsquo;re going to want to use a Hetzner-external resolver (1.1.1.1/8.8.8.8/9.9.9.9) if you&amp;rsquo;re going to attempt to resolve your own server&amp;rsquo;s address(es) from your own server. This is a variation of an issue that has already been discussed some on reddit, but it&amp;rsquo;s not about Hetzner DNS being down but more about recursive queries not working (and finding this via cert-manager running on a Kubernetes cluser).</description>
    </item>
    <item>
      <title>So you need to wait for some Kubernetes resources?</title>
      <link>https://vadosware.io/post/so-you-need-to-wait-for-some-kubernetes-resources/</link>
      <pubDate>Fri, 27 Aug 2021 19:36:59 +0900</pubDate>
      <guid>https://vadosware.io/post/so-you-need-to-wait-for-some-kubernetes-resources/</guid>
      <description>tl;dr - There are at least two ways to wait for Kubernetes resources you probably care about: kubectl wait for Pods, initContainers for everything else&#xA;One somewhat rarely talked about issue in Kubernetes land is how exactly people wait for stuff to happen. &amp;ldquo;Stateful workloads&amp;rdquo; can get hand-waved to using StatefulSets, and most intricate large deployable things (databases, etc) have Operators that you can use. Sometimes you just want to make sure a Service is up before you start a pod that depends on it.</description>
    </item>
    <item>
      <title>The Deployment Spectrum</title>
      <link>https://vadosware.io/post/the-deployment-spectrum/</link>
      <pubDate>Sun, 15 Aug 2021 09:53:25 +0900</pubDate>
      <guid>https://vadosware.io/post/the-deployment-spectrum/</guid>
      <description>tl;dr - Manual SSH, then automated SSH (ex. Ansible) and friends (Salt/Puppet/Chef), Cloud-init (AKA cram-it-in-userData), pre-built VMs (ex. Packer), infrastructure-as-code (CloudFormation, Terraform, Pulumi, etc) and finally containers and container orchestrators (ex. Kubernetes, Nomad)&#xA;The trends in application deployment have been pretty identifiable over the years and I rarely see it discussed so I figured I&amp;rsquo;d take a stab. I gave a similar but different presentation in the past on the evolution of the backend back in 2019, but I want this post to really focus in on the deployment aspect.</description>
    </item>
    <item>
      <title>Wicked Landing Gear</title>
      <link>https://vadosware.io/post/wicked-landing-gear/</link>
      <pubDate>Fri, 13 Aug 2021 15:59:50 +0900</pubDate>
      <guid>https://vadosware.io/post/wicked-landing-gear/</guid>
      <description>tl;dr - I built mrman/landing-gear on GitLab, a repository full of lit (formerly lit-element) components that are packaged versions of the awesome components on wickedblocks.&#xA;Recently I came across some amazing F/OSS work done by WickedTemplates &amp;ndash; WickedBlocks on Hacker News. WickedBlocks is a set of pre-made Tailwind CSS-powered components (&amp;ldquo;blocks&amp;rdquo;) that were open sourced by WickedTemplates. The blocks are really awesome, but one of the first things I thought was how much more awesome they&amp;rsquo;d be as easy-to-use web components.</description>
    </item>
    <item>
      <title>Novice Arch Pitfall: watch out for kernel mismatches (after system updates)</title>
      <link>https://vadosware.io/post/novice-arch-pitfall-watch-out-for-installed-kernel-mismatches/</link>
      <pubDate>Sat, 24 Jul 2021 17:17:36 +0900</pubDate>
      <guid>https://vadosware.io/post/novice-arch-pitfall-watch-out-for-installed-kernel-mismatches/</guid>
      <description>tl;dr - Make sure the reported linux version of uname -a and pacman -Q linux versions match after updates (or just be more cognizant of full system upgrades, i.e. updating the linux package).&#xA;Recently after restarting and performing an system update (pacman -Syu) post-restart, I tried to start doing some dev work and was greeted by a broken docker systemd service (root-full docker, so not the user-level docker service you&amp;rsquo;d use in rootless docker).</description>
    </item>
    <item>
      <title>Level 1 Automated K8S Deployments With GitLab CI</title>
      <link>https://vadosware.io/post/level-one-automated-k8s-deployments-with-gitlab-ci/</link>
      <pubDate>Fri, 16 Jul 2021 14:04:33 +0900</pubDate>
      <guid>https://vadosware.io/post/level-one-automated-k8s-deployments-with-gitlab-ci/</guid>
      <description>+ tl;dr - Automate your deployments without adding a new reconciliation loop (i.e. Flux or ArgoCD), make a limited-permission ServiceAccount, drop your credentials in a GitLab protected variable and set up some CI steps to build your containers (with CI-powered Docker in Docker) and update your deployments.&#xA;Context DevOps has been growing increasingly important and complicated these days. There&amp;rsquo;s a wave of new approaches, enthusiasm, companies, and organizations trying to make things to achieve consistency and advanced features in the operations world.</description>
    </item>
    <item>
      <title>Postgres Tip: Covering with primary key indices</title>
      <link>https://vadosware.io/post/postgres-tip-covering-with-primary-key-indices/</link>
      <pubDate>Fri, 16 Jul 2021 12:48:33 +0900</pubDate>
      <guid>https://vadosware.io/post/postgres-tip-covering-with-primary-key-indices/</guid>
      <description>tl;dr - Code for converting a primary index (for example a pre-created one) to a covering index so you can do Index-Only scans and get your two (or more) columns back faster than ever&#xA;Context Recently while abusing Postgres to do things it&amp;rsquo;s not supposed to do (I may go into this particular hack at a later date), I ended up trying to convert an existing primary key index to a covering index to make sure a certain column was always easily accessible since most queries only returned this value.</description>
    </item>
    <item>
      <title>Paxosmon 2: The Paxos Journey Continues</title>
      <link>https://vadosware.io/post/paxosmon-2-the-journey-continues/</link>
      <pubDate>Fri, 25 Jun 2021 19:26:36 +0900</pubDate>
      <guid>https://vadosware.io/post/paxosmon-2-the-journey-continues/</guid>
      <description>tl;dr - A few more Paxos papers have been produced since the original post, I do the usual writeup. Main benefit/focuses this time look to be centered around increasing throughput by taking load off of the leader node(s) (and assigning the extra work to existing or new nodes).&#xA;Multi-part blog post alert This is (now) a multi-part blog-post!&#xA;Part 1 - Paxosmon: Gotta consensus them all Part 2 - Paxosmon 2: The Journey Continues (this post) What&amp;rsquo;s new?</description>
    </item>
    <item>
      <title>Years later, REST-ish Services in Haskell Part 4</title>
      <link>https://vadosware.io/post/rest-ish-services-in-haskell-part-4/</link>
      <pubDate>Thu, 10 Jun 2021 14:39:03 +0900</pubDate>
      <guid>https://vadosware.io/post/rest-ish-services-in-haskell-part-4/</guid>
      <description>+ tl;dr - In this post I go through a bunch of improvments and extras to the code from part 3, 2 years after this initial series was started. The improvements range from development aids to post-deployment &amp;ldquo;observability&amp;rdquo; (metrics, logging, tracing) and how I&amp;rsquo;ve handled them in the past. It&amp;rsquo;s pretty ridiculous to finish a blog series 2 years later, so I also released the code for a Job Board API I wrote (also the frontend that manages it) for those who want to see how a CRUD-y production Haskell app looks.</description>
    </item>
    <item>
      <title>Setting Up SES With Pulumi</title>
      <link>https://vadosware.io/post/setting-up-ses-with-pulumi/</link>
      <pubDate>Sun, 16 May 2021 13:54:16 +0900</pubDate>
      <guid>https://vadosware.io/post/setting-up-ses-with-pulumi/</guid>
      <description>+ tl;dr - Steps on how to set up SES with Pulumi (their brand new logo is the one above), an infrastructure-as-code (written in code) solution. Skip to the end for all the code, all at once&#xA;UPDATE (08/16/2021) SES no longer requires separate domain identitify verification -- this is now integrated with the DKIM records you build for SES. You do not need the aws.ses.DomainIdentityVerification Pulumi object at all anymore -- the post has been updated to reflect that.</description>
    </item>
    <item>
      <title>Stuffing both SSH and HTTPS on port 443 with stunnel, sslh, and Traefik</title>
      <link>https://vadosware.io/post/stuffing-both-ssh-and-https-on-port-443-with-stunnel-ssh-and-traefik/</link>
      <pubDate>Sun, 09 May 2021 20:04:10 +0900</pubDate>
      <guid>https://vadosware.io/post/stuffing-both-ssh-and-https-on-port-443-with-stunnel-ssh-and-traefik/</guid>
      <description>+ tl;dr - You can expose SSH over the same port HTTPS runs on (443), turns out you can run a combination of stunnel (in my particular case stunnel3) and sslh as sidecar containers that work together to some container that runs SSH (i.e. sshd). At the ingress layer Traefik makes this easy to pull off by providing the IngressRouteTCP CRD along with TLS passthrough. The infrastructure-as-code is up on GitLab.</description>
    </item>
    <item>
      <title>K8s storage provider benchmarks round 2, part 5</title>
      <link>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-5/</link>
      <pubDate>Tue, 13 Apr 2021 12:37:56 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-5/</guid>
      <description>+ / / tl;dr - Finally, the results of the benchmarking. You can find the code on GitLab. There are some issues with the benchmarks but there was enough decent data to make a decision for me at least. As far as which storage plugins I&amp;rsquo;m going to run, I&amp;rsquo;m actually going to run both OpenEBS Mayastor and Ceph via Rook on LVM. I look forward to emails from users/corporations/devrel letting me know how I misused their products if I did &amp;ndash; please file an issue on GitLab!</description>
    </item>
    <item>
      <title>K8s storage provider benchmarks round 2, part 4</title>
      <link>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-4/</link>
      <pubDate>Mon, 12 Apr 2021 20:19:56 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-4/</guid>
      <description>+ / / tl;dr - I explain the YAML and Makefile scripts that power the fio and pgbench (oltpbench) tests I&amp;rsquo;m going to run.&#xA;UPDATE (04/10/2021) Turns out I was mistaken -- OpenEBS Mayastor doesn&#39;t support single-node disk-level failure domains. It&#39;s very well described on their website in the FAQ, but I somehow missed and/or forgot that, so the tests for Mayastor will only represent JBOD setup (no replication). On a different but related note, cStor supports cross disk replication (mirroring on the Pool object), but it does not replicate at the pool level, so all written data will be RAID1.</description>
    </item>
    <item>
      <title>K8s storage provider benchmarks round 2, part 3</title>
      <link>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-3/</link>
      <pubDate>Tue, 06 Apr 2021 11:39:58 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-3/</guid>
      <description>+ / / tl;dr - I install even more providers, this time OpenEBS cStor, OpenEBS Jiva, OpenEBS LocalPV hostPath, and OpenEBS LocalPV ZFS, LINSTOR via kvaps/kube-linstor. I skipped OpenEBS LocalPV because it threw a panic linked to a supposed kernel issue complaining about old kernels. Ain&amp;rsquo;t nobody got time for that. The GitLab Repo is finally public though, so you could skip this entire article and go there.&#xA;UPDATE (04/10/2021) I had some more issues with linstor than I thought -- I&#39;ve updated the linstor section to reflect it, but basically along with some install ordering issues I forgot to enable the drbd (the &#39;d&#39; was missing) kernel module somehow.</description>
    </item>
    <item>
      <title>K8s storage provider benchmarks round 2, part 2</title>
      <link>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-2/</link>
      <pubDate>Tue, 06 Apr 2021 02:01:51 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-2/</guid>
      <description>+ / / tl;dr - In order to test storage performance I set up a completely automated test bed for all the storage plugins, this article chronicles the installations of some of the plugins. It&amp;rsquo;s particularly long because I made lots of mistakes. Mostly useless sections are prefaced with a notice on why you can skip them, skim the ToC and click on anything you like.&#xA;UPDATE (04/09/2020) The GitLab repository is up!</description>
    </item>
    <item>
      <title>Automatically closing issues is violence</title>
      <link>https://vadosware.io/post/automatically-closing-issues-is-violence/</link>
      <pubDate>Sat, 03 Apr 2021 11:52:47 +0900</pubDate>
      <guid>https://vadosware.io/post/automatically-closing-issues-is-violence/</guid>
      <description>tl;dr - If you clicked because of the title/description, you got jebaited (consider not falling for bait? I don&amp;rsquo;t know I fall for it too), but it&amp;rsquo;s not far off &amp;ndash; this is a rant against using automation on F/OSS repositories to automatically close issues&#xA;I&amp;rsquo;ll keep this short (originally I considered doing a tongue-in-cheek woke culture roleplay thing) because I just made a breakthrough in some other yak shaving (the Kubernetes storage provider tests round 2 series of posts).</description>
    </item>
    <item>
      <title>K8s storage provider benchmarks round 2, part 1</title>
      <link>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-1/</link>
      <pubDate>Sun, 28 Mar 2021 11:43:15 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-storage-provider-benchmarks-round-2-part-1/</guid>
      <description>+ / / tl;dr - I did another round of drive testing (originally I only tested OpenEBS and hostPath), this time with some rented Hetzner machines and Ansible-powered automation. The GitLab repository isn&amp;rsquo;t ready for mass consumption yet but I&amp;rsquo;ll update here (and this tl;dr) when it is, along with the results.&#xA;UPDATE (04/09/2020) The GitLab repository is up! You can skip this entire article and just go there. NOTE: This a multi-part blog-post!</description>
    </item>
    <item>
      <title>K8s Upgrade Sunday 03-21-21</title>
      <link>https://vadosware.io/post/k8s-upgrade-sunday-03-21-21/</link>
      <pubDate>Wed, 24 Mar 2021 20:17:15 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-upgrade-sunday-03-21-21/</guid>
      <description>tl;dr - I did some maintenance and upgrades to packages on my small k8s cluster &amp;ndash; I added NodeLocal DNSCache (which prompted an upgrade to prometheus and node_exporter along the way). I also upgraded kube-router (v1.0.1 -&amp;gt; v1.2.0), jaeger (1.3.0 -&amp;gt; v1.22.0), cert-manager (v0.16.1 -&amp;gt; v1.2.0), traefik (v2.3.2 -&amp;gt; v2.4.8) and containerd (v.2.7 -&amp;gt; v1.4.4).&#xA;Welcome to the first (and possibly last) installment of Upgrade Sunday &amp;ndash; a series of posts where I share some notes on difficulties/process encountered while working on some maintenance and/or updates to my small Kubernetes cluster.</description>
    </item>
    <item>
      <title>Serving a single file over HTTP with Rust and Go</title>
      <link>https://vadosware.io/post/serving-a-single-file-over-http-with-rust-and-go/</link>
      <pubDate>Thu, 18 Mar 2021 13:07:06 +0900</pubDate>
      <guid>https://vadosware.io/post/serving-a-single-file-over-http-with-rust-and-go/</guid>
      <description>/ UPDATE (03/30/2021) A bunch of readers have submitted suggestions and changes to both the Rust and the Go code so I&#39;ve updated them and released new versions as appropriate! I added a section to the bottom of the post so check that out! -- the biggest changes were in the Go-related code. UPDATE (03/26/2021) A reader named Pavel (Pawel) helped out on the Go implementation by using []byte and io.</description>
    </item>
    <item>
      <title>Ingress Controller considerations in early 2021</title>
      <link>https://vadosware.io/post/ingress-controller-considerations-in-early-2021/</link>
      <pubDate>Tue, 16 Mar 2021 12:06:13 +0900</pubDate>
      <guid>https://vadosware.io/post/ingress-controller-considerations-in-early-2021/</guid>
      <description>+ ( || ) DISCLOSURE (03/16/2021) Sitting around after releasing this post I realized that I accepted becoming a &#34;Traefik Ambassador&#34; due to my previous post about Traefik (the one about adding HTTPS settings easily), and submitted the post to their listing when they asked. Such treatment can certainly bea source of bias so I want to make it clear that this is not a sponsored post in any way (I have not been compensated).</description>
    </item>
    <item>
      <title>Adding to the NodeJS Package Heap: async-wait-for-promise</title>
      <link>https://vadosware.io/post/adding-to-the-nodejs-package-heap-async-await-for/</link>
      <pubDate>Sat, 13 Mar 2021 11:56:28 +0900</pubDate>
      <guid>https://vadosware.io/post/adding-to-the-nodejs-package-heap-async-await-for/</guid>
      <description>tl;dr - I published async-wait-for-promise to NPM which helps you wait for the result of a promise with a timeout. It&amp;rsquo;s very similar but slightly different from some other small NPM packages. You can find the code on GitLab.&#xA;Well I guess we all joke about things like this until you&amp;rsquo;re part of it. I recently found that I wanted to wait for a specific condition in my testing code but couldn&amp;rsquo;t find code that would work exactly like I wanted to use it, so I wrote my own package &amp;ndash; async-wait-for-promise.</description>
    </item>
    <item>
      <title>SADE: a pattern for Services as DOM Elements</title>
      <link>https://vadosware.io/post/sade-pattern-services-as-dom-elements/</link>
      <pubDate>Fri, 19 Feb 2021 11:36:11 +0900</pubDate>
      <guid>https://vadosware.io/post/sade-pattern-services-as-dom-elements/</guid>
      <description>tl;dr - Wrap your robust ThingService/ThingStore in a web component and adhere to a minimal API so you can reuse them with greater ease. View the Demo or check out the code in the Gitlab Repo.&#xA;The Idea in historical context I&amp;rsquo;ve been spending a lot of my time lately working on a product (yet to be released) for making SaaS companies and startups in general easier to launch (I&amp;rsquo;m talking like 0 to landing + client portal + charge a paying customer via Stripe and issue an API key in 5 minutes, with no code).</description>
    </item>
    <item>
      <title>Stale kubeconfig breaking service to service communication with kube-router</title>
      <link>https://vadosware.io/post/stale-kubeconfig-breaking-service-to-service-communication-with-kube-router/</link>
      <pubDate>Fri, 12 Feb 2021 13:34:16 +0900</pubDate>
      <guid>https://vadosware.io/post/stale-kubeconfig-breaking-service-to-service-communication-with-kube-router/</guid>
      <description>+ UPDATE (03/23/2021) After trying to restart my cluster I ran into issues not having the --kubeconfig option. kube-router couldn&#39;t find 10.96.0.1 (the API server) and CoreDNS couldn&#39;t start because it couldn&#39;t find anything (since kube-router) was down. It&#39;s a chicken and egg and though this PR was supposed to solve it, it&#39;s certainly still a problem. Not sure if this is because I&#39;m on older versions of kube-router (1.</description>
    </item>
    <item>
      <title>Back to Docker After Issues With Podman</title>
      <link>https://vadosware.io/post/back-to-docker-after-issues-with-podman/</link>
      <pubDate>Fri, 12 Feb 2021 12:47:34 +0900</pubDate>
      <guid>https://vadosware.io/post/back-to-docker-after-issues-with-podman/</guid>
      <description>- + tl;dr - Turns out the tar archives created by podman didn&amp;rsquo;t work properly for my kubernetes cluster, and podman doesn&amp;rsquo;t support linking. I went back to docker (which is containerd underneath), and am a happy camper again. I also discuss some options for hosting your own registries.&#xA;After [writing about switch to podman]podman-post (and writing a follow up), I recently had to switch back to docker and enable rotoless containers there (the ever-useful Arch Wiki makes it easy).</description>
    </item>
    <item>
      <title>Right Sizing PM2 Clusters</title>
      <link>https://vadosware.io/post/right-sizing-pm2-clusters/</link>
      <pubDate>Wed, 03 Feb 2021 22:11:14 +0900</pubDate>
      <guid>https://vadosware.io/post/right-sizing-pm2-clusters/</guid>
      <description>+ + tl;dr - I over-engineered a script to run a small experiment to figure out what was the right cluster size for PM2 in various CPU + RAM configurations. Turns out having lots of PM2 instances is really good when there&amp;rsquo;s not much memory and only slightly bad when there is sufficient memory, so a blanket recommendation like 32 actually works out. The code is on Gitlab &amp;ndash; you can skip to the results.</description>
    </item>
    <item>
      <title>Protect Your Eyes From Strain on Arch</title>
      <link>https://vadosware.io/post/protect-your-eyes-from-strain-on-arch/</link>
      <pubDate>Mon, 30 Nov 2020 12:09:22 +0900</pubDate>
      <guid>https://vadosware.io/post/protect-your-eyes-from-strain-on-arch/</guid>
      <description>tl;dr - Screen brightness/light control with redshift/flux and eye break timing with safeeyes/breaktimer is good for your eyes, check it out.&#xA;Deutsche Welle (DW) provides an excellent service that I can&amp;rsquo;t stop raving about to friends &amp;ndash; they have a YouTube channel for documentaries that I love watching. I mostly use YouTube for watching conferences and getting at some of the insane wealth of information out there in the tech community, but I do enjoy watching some news from time to time amongst other things.</description>
    </item>
    <item>
      <title>INCOMPLETE: Getting Started With Vue 2 (An Onion Guide), Part 1</title>
      <link>https://vadosware.io/post/incomplete-getting-started-with-vue-part-1/</link>
      <pubDate>Mon, 16 Nov 2020 19:02:55 +0900</pubDate>
      <guid>https://vadosware.io/post/incomplete-getting-started-with-vue-part-1/</guid>
      <description>WARNING: This post is incomplete! This post was started actually way back in 2018, but I just lost interest writing it. I thought it was a shame to waste the procedural style and explanations in here, so I&#39;m releasing it in it&#39;s incomplete-ness. Here in 2020 I think it&#39;s safe to say that I probably won&#39;t regain interest in this topic, especialy with Vue 3 reaching the mainstream. This guide was meant to explain how to get started with Vue 2, but starting from the perspective of how you would write functionality without a framework at all (web 1.</description>
    </item>
    <item>
      <title>Improving security easily with Traefik and Kubernetes</title>
      <link>https://vadosware.io/post/improving-security-easily-with-traefik-and-kubernetes/</link>
      <pubDate>Mon, 09 Nov 2020 14:36:00 +0900</pubDate>
      <guid>https://vadosware.io/post/improving-security-easily-with-traefik-and-kubernetes/</guid>
      <description>+ tl;dr - I upgraded traefik and added some resources (IngressRoute, Middleware) to get a better security score from Mozilla&amp;rsquo;s (HTTP) Observatory. The upgrade from 2.2.0-rc1 to 2.3.2 came with a few breaking changes so it was a bit involved (see Traefik v1 to v2 docs and also the general v2.x migration docs)&#xA;I recently came across an insanely helpful and concise Written by Sam Texas from simplecto.com post while surfing r/Traefik subreddit.</description>
    </item>
    <item>
      <title>Downgrading to Kernel 5.8.9 to fix Bluetooth on Arch (2020-10)</title>
      <link>https://vadosware.io/post/downgrading-to-kernel-5-8-9-to-fix-bluetooth/</link>
      <pubDate>Sat, 24 Oct 2020 11:43:49 +0900</pubDate>
      <guid>https://vadosware.io/post/downgrading-to-kernel-5-8-9-to-fix-bluetooth/</guid>
      <description>+ tl;dr - Bluetooth died after a recent upgrade to Linux kernel 5.9.1 on Arch which people noticed nVidia didn&amp;rsquo;t support &amp;ndash; I upgraded anyway, graphics were fine, but Bluetooth was not.&#xA;So very recently a release of NVIDIA&amp;rsquo;s drivers was confirmed not to work with Linux kernel 5.9.x. It&amp;rsquo;s been discussed widely on the internet (by those affected) so I won&amp;rsquo;t go into it here:&#xA;Phoronix Article Phoronix Forums A warning on NVIDIA forums Arch forums r/archlinux Hacker News Read those sources if you want more context, but the gist as I understand is:</description>
    </item>
    <item>
      <title>Cookie Authentication Without Nuxt Auth</title>
      <link>https://vadosware.io/post/cookie-authentication-without-nuxt-auth/</link>
      <pubDate>Mon, 12 Oct 2020 17:42:35 +0900</pubDate>
      <guid>https://vadosware.io/post/cookie-authentication-without-nuxt-auth/</guid>
      <description>tl;dr - nuxt-auth is a good plugin, but does not support a bread-and-butter feature like HttpOnly cookie based authentication (which is an OWASP Top 10 issue), so here&amp;rsquo;s how to do basic cookie authentication without nuxt-auth, with routing and backend considered. No clone-able repo, because I&amp;rsquo;d rather you thought hard about whether you want to use random auth code from a random blog on the internet.&#xA;UPDATE (01/07/2021) Nuxt has since resolved the issue by introducting the cookie scheme in newer versions of Nuxt!</description>
    </item>
    <item>
      <title>Bits and Bobs With Podman</title>
      <link>https://vadosware.io/post/bits-and-bobs-with-podman/</link>
      <pubDate>Mon, 05 Oct 2020 11:53:25 +0900</pubDate>
      <guid>https://vadosware.io/post/bits-and-bobs-with-podman/</guid>
      <description>tl;dr - Make sure /etc/subuid and /etc/subgid have good ranges, podman stores it&amp;rsquo;s auth config at ${XDG_RUNTIME_DIR}/containers/auth.json, and make sure you use :z on volumes you want to re-use with different containers (ex. postgres).&#xA;After getting my podman setup working I ran into a few issues that were work writing up real quick just in case anyone else runs into them.&#xA;ISSUE: Not enough subuids and/or subgids While building a relatively large image with many layers I ran out of subuid/subgid space surprisingly quickly.</description>
    </item>
    <item>
      <title>Rootless Containers in 2020 on Arch Linux</title>
      <link>https://vadosware.io/post/rootless-containers-in-2020-on-arch-linux/</link>
      <pubDate>Sun, 20 Sep 2020 17:47:59 +0900</pubDate>
      <guid>https://vadosware.io/post/rootless-containers-in-2020-on-arch-linux/</guid>
      <description>+ tl;dr - Quick guide to getting rootless containers up and running on Arch Linux (also see the excellent Arch Wiki entry)&#xA;Steps As usual, the Arch Wiki is a fantastic resource, and has basically everything you need, if not a little bit spread out. The relevant pages you&amp;rsquo;ll want to look at:&#xA;https://wiki.archlinux.org/index.php/Podman https://wiki.archlinux.org/index.php/cgroups#Switching_to_cgroups_v2 https://wiki.archlinux.org/index.php/Kernel_parameters 1. Enable the kernel.unprivileged_userns_clone=1 setting This is something I think I did a long time ago when first trying to get podman working on my system (with a previous version).</description>
    </item>
    <item>
      <title>A recipe for running containers in your Tape tests</title>
      <link>https://vadosware.io/post/a-recipe-for-running-containers-in-your-tape-tests/</link>
      <pubDate>Tue, 01 Sep 2020 16:10:39 +0900</pubDate>
      <guid>https://vadosware.io/post/a-recipe-for-running-containers-in-your-tape-tests/</guid>
      <description>+ + tl;dr - Add some functions that run docker (or any other container manager, like podman) during your E2E tests for effortless E2E tests including &amp;ldquo;real&amp;rdquo; versions of your dependencies.&#xA;After developing a bunch of nice new features, testing is important &amp;ndash; while I rarely find myself writing intricate mocks unless I&amp;rsquo;m in a Java or Ruby codebase, E2E tests are what I spend most of my time writing.</description>
    </item>
    <item>
      <title>Upgrading Cert Manager From 0.4.0 to 0.16</title>
      <link>https://vadosware.io/post/upgrading-cert-manager-from-0.4.0-to-0.16.0/</link>
      <pubDate>Sat, 15 Aug 2020 12:16:06 +0900</pubDate>
      <guid>https://vadosware.io/post/upgrading-cert-manager-from-0.4.0-to-0.16.0/</guid>
      <description>+ tl;dr - I go through upgrading cert-manager (formerly known as kube-lego) from version 0.4.0 to 0.9.0 (due to deprecations of cert-manager 0.8.1 and lower) to 0.16.0. After upgrading to well known issues with the upgrade from v0.15 to v0.16 make me downgrade to v0.15.&#xA;Background Let&amp;rsquo;s Encrypt is legitimately one of the best things to happen to the internet in the last decade. For those who like to build distributed systems or over-invest in building platforms to depoy only a handful of apps, Kubernetes has changed the ecosystem (there are other container orchestrators, but Kubernetes is best-in-class as of the writing of this post).</description>
    </item>
    <item>
      <title>A Safer Price Type in Postgres</title>
      <link>https://vadosware.io/post/a-safer-price-type-in-postgres/</link>
      <pubDate>Sat, 25 Jul 2020 12:25:23 +0900</pubDate>
      <guid>https://vadosware.io/post/a-safer-price-type-in-postgres/</guid>
      <description>+ tl;dr - Overly complex use of postgres DOMAIN and composite TYPEs (with CASTing to jsonb) used to support the better-than-naive definition of a price as a currency + natural number. For actual production usage do yourself and your team a favor and use a currency type column + integer for amount (ex. cents in USD). For those who like hacking I also got TypeORM to read/work with the composite TYPE with even more dirty dirty hacks.</description>
    </item>
    <item>
      <title>Running containers for dependencies at will on Gitlab CI</title>
      <link>https://vadosware.io/post/running-containers-for-dependencies-at-will-on-gitlab-ci/</link>
      <pubDate>Wed, 08 Jul 2020 17:38:39 +0900</pubDate>
      <guid>https://vadosware.io/post/running-containers-for-dependencies-at-will-on-gitlab-ci/</guid>
      <description>+ tl;dr - During E2E testing I spin up containers of dependencies to run tests against them &amp;ndash; the setup I normally use recently stopped working so I fixed it.&#xA;E2E tests are the most important tests for a project &amp;ndash; it doesn&amp;rsquo;t matter if no endpoints malfunction due to invalid input if no users can checkout or perform crucial functions with good inputs. For past projects, I&amp;rsquo;ve used containerization (docker) containers in E2E tests in CI to test systems I&amp;rsquo;ve built as faithfully as possible to the actual conditions they run under.</description>
    </item>
    <item>
      <title>Announcing redis-bootleg-backup (rbb)</title>
      <link>https://vadosware.io/post/announcing-redis-bootleg-backup/</link>
      <pubDate>Sat, 27 Jun 2020 14:22:51 +0900</pubDate>
      <guid>https://vadosware.io/post/announcing-redis-bootleg-backup/</guid>
      <description>+ tl;dr - I wrote a tool called rbb (redis-bootleg-backup) in Rust for taking backups of redis instances when all you have is a client connection. It does redis backups the dumbest way possible &amp;ndash; enumerating all the keys (via the KEYS command) and dumping them all (via the DUMP command).&#xA;A little while ago I had a friend run into a rather interesting problem &amp;ndash; he had access to a Redis cluster but did not control the hosting/instance and could not use the normal redis backup mechanisms (--rdb, etc).</description>
    </item>
    <item>
      <title>A Servant API Testing Example From the Wild</title>
      <link>https://vadosware.io/post/a-servant-api-testing-example-from-the-wild/</link>
      <pubDate>Fri, 24 Apr 2020 16:43:23 +0900</pubDate>
      <guid>https://vadosware.io/post/a-servant-api-testing-example-from-the-wild/</guid>
      <description>tl;dr - I share some code snippets to test endpoints on a servant-powered API I work on. The servant tutorial (and the code on the servant-client hackage page) is better but this code might be a tad more realistic.&#xA;I&amp;rsquo;m a pretty verbal supporter of Haskell and when I write APIs in Haskell I exclusively use Servant &amp;ndash; it&amp;rsquo;s a fantastic example of how well-crafted types and use of Haskell&amp;rsquo;s advanced type system can lead to code that is correct, beautiful, and performant (depends what you compare it to, of course).</description>
    </item>
    <item>
      <title>Updating From Traefik V1 to V2.2</title>
      <link>https://vadosware.io/post/updating-from-traefik-v1-to-v2/</link>
      <pubDate>Fri, 06 Mar 2020 16:53:35 +0900</pubDate>
      <guid>https://vadosware.io/post/updating-from-traefik-v1-to-v2/</guid>
      <description>+ tl;dr - UDP support is coming to traefik soon, so I&amp;rsquo;m updating my cluster&amp;rsquo;s traefik to be ready to take advantage of it and all the other new features. Going from v1 -&amp;gt; v2.2 (the latest) requires some config changes so I detail them below.&#xA;NGINX is one of the most venerated load balancers on the internet and when I first set up my tiny kubernetes cluster I used it.</description>
    </item>
    <item>
      <title>Setting Up Mailtrain on K8s</title>
      <link>https://vadosware.io/post/setting-up-mailtrain-on-k8s/</link>
      <pubDate>Sat, 08 Feb 2020 09:33:26 +0900</pubDate>
      <guid>https://vadosware.io/post/setting-up-mailtrain-on-k8s/</guid>
      <description>+ tl;dr - I set up a mailing list (for this blog) with Mailtrain on my tiny k8s cluster. Along the way I created a small rust binary for converting POST-ed forms to mailtrain API calls and a Mithril component for mailing list signupg call-to-actions.&#xA;UPDATE (06/02/2020) A reader named Damien pointed out that I didn&#39;t leave a decent example for how I was using kustomize so I wanted to add to the mrman/makeinfra-pattern repository to point out how.</description>
    </item>
    <item>
      <title>Haskell exceptionfree-readfile library released</title>
      <link>https://vadosware.io/post/haskell-exceptionfree-readfile-released/</link>
      <pubDate>Mon, 03 Feb 2020 14:48:42 +0900</pubDate>
      <guid>https://vadosware.io/post/haskell-exceptionfree-readfile-released/</guid>
      <description>tl;dr - I finally got around to releasing exceptionfree-readfile, a small haskell package for reading files without logging exceptions when running a binary built for profiling (+RTS -xc -RTS).&#xA;Why write exceptionfree-readfile? I decided to create exceptionfree-readfile while trying to clean up the output of my +RTS -xc -RTS output (I also wrote about it on reddit). For those unfamiliar, when haskell programs are built with profiling enabled, the runtime system can be triggered with special options (so +RTSstarts the RunTime System arguments, and -RTS ends them), and the -xc flag is what gives you stack traces in the event of an error.</description>
    </item>
    <item>
      <title>2019-12 K8s certificate expiration outage</title>
      <link>https://vadosware.io/post/2019-12-k8s-cert-expiration-outage/</link>
      <pubDate>Fri, 03 Jan 2020 17:52:35 +0900</pubDate>
      <guid>https://vadosware.io/post/2019-12-k8s-cert-expiration-outage/</guid>
      <description>- tl;dr - I took down my k8s cluster by letting it&amp;rsquo;s TLS certificates expire. Regenerating certificates, deleting /var/lib/kubelet/pki/kubelet-client-current, restarting the kubelet, recreating service accounts and restarting pods/services/deployments/daemonsets was what got me back to a working system without blowing everything away.&#xA;Towards the end of 2019 I was visited by a small bit of failure adventure &amp;ndash; resuscitating my tiny Kubernetes cluster after it&amp;rsquo;s TLS certificates had expired. A few error message</description>
    </item>
    <item>
      <title>Python E2E Test Config on Circle CI</title>
      <link>https://vadosware.io/post/python-e2e-test-config-on-circle-ci/</link>
      <pubDate>Mon, 02 Dec 2019 16:45:27 +0900</pubDate>
      <guid>https://vadosware.io/post/python-e2e-test-config-on-circle-ci/</guid>
      <description>+ tl;dr - A while back I had to set up Python E2E tests on CircleCI. It took lots of experimentation so I thought I&amp;rsquo;d share&#xA;While working with a previous client I had the distinct misfortune of not working with Gitlab&amp;rsquo;s CI system but instead with CircleCI&amp;rsquo;s. Alright, CircleCI isn&amp;rsquo;t that bad, but it is distinctly more complicated and less well documented than GitLab&amp;rsquo;s and as such is harder to use.</description>
    </item>
    <item>
      <title>Running Zulip on Kubernetes</title>
      <link>https://vadosware.io/post/running-zulip-on-k8s/</link>
      <pubDate>Tue, 05 Nov 2019 18:08:13 +0900</pubDate>
      <guid>https://vadosware.io/post/running-zulip-on-k8s/</guid>
      <description>+ tl;dr - I started up a local Zulip instance on my tiny k8s cluster for some friends and I to use &amp;ndash; it was surprisingly challenging to do so this post contains the recipe (k8s resource configs).&#xA;While everyone is getting really into Slack and other workplace-use chat programs, the group of really good open source options has been growing steadily. At this point, Slack is so well known and used that it&amp;rsquo;s sort of become a must-have for trendy startups and midsize companies, at least in my experience.</description>
    </item>
    <item>
      <title>Announcing Maille 0.1.1</title>
      <link>https://vadosware.io/post/announcing-maille-0-1-1/</link>
      <pubDate>Mon, 04 Nov 2019 15:17:51 +0900</pubDate>
      <guid>https://vadosware.io/post/announcing-maille-0-1-1/</guid>
      <description>+ tl;dr - I made a component library for Mithril called Maille &amp;ndash; if you&amp;rsquo;re into Mithril, check it out!&#xA;There comes a time in a young front end developer&amp;rsquo;s life when they feel the need to make yet another front end framework. In my case that time is now, and the frontend framework isn&amp;rsquo;t so much a framework as it is a component library for an existing component library called Mithril.</description>
    </item>
    <item>
      <title>Starting my journey with the System76 Oryx Pro and Arch</title>
      <link>https://vadosware.io/post/starting-my-journey-with-the-system76-oryx-pro-and-arch/</link>
      <pubDate>Thu, 03 Oct 2019 10:19:05 +0900</pubDate>
      <guid>https://vadosware.io/post/starting-my-journey-with-the-system76-oryx-pro-and-arch/</guid>
      <description>+ tl;dr - I bought a System76 Oryx Pro to cut down on the number of computers I own. Initially the cooling system was broken but System76 support was fantastic; repaired it and sent it back post-haste. System76&amp;rsquo;s commitment to F/OSS, use of Rust and the ever-heroic work of Arch Linux contributors, along with my extensive history of making mistakes made it a relatively pain-free to install Arch with proper hardware support.</description>
    </item>
    <item>
      <title>An Emacs Indentation setup for Java</title>
      <link>https://vadosware.io/post/emacs-indentation-for-java/</link>
      <pubDate>Mon, 23 Sep 2019 17:09:08 +0900</pubDate>
      <guid>https://vadosware.io/post/emacs-indentation-for-java/</guid>
      <description>+ tl;dr - I had to use a slightly modified indentation setup for java-mode to get close to the IntelliJ Java indentation scheme while doing some Java development. I also had to run Maven (mvn) lots from the command line so I&amp;rsquo;ve included some tips on that. If you hate unnecessary rambling, jump to the elisp code&#xA;Generally, working with the Java programming language is not my first choice, but sometimes when money is involved I absolutely ignore my first choices.</description>
    </item>
    <item>
      <title>I don&#39;t (fully) trust the CNCF</title>
      <link>https://vadosware.io/post/i-dont-trust-the-cncf/</link>
      <pubDate>Sat, 27 Jul 2019 16:28:52 +0900</pubDate>
      <guid>https://vadosware.io/post/i-dont-trust-the-cncf/</guid>
      <description>tl;dr - I write my thoughts on why I don&amp;rsquo;t (as of now) quite fully trust the CNCF. I also posted this to hacker news to get some feedback.&#xA;If you&amp;rsquo;ve got a tin foil hat close by this would be the time to put it on.&#xA;I&amp;rsquo;ve vaguely distrusted the CNCF for a long time now. While I like the majority of what they&amp;rsquo;re doing (helping fund and manage open source projects), it&amp;rsquo;s never sat right to me&amp;hellip; Companies don&amp;rsquo;t move out/donate large sums out of pure altruism, and the consistent and persistent (successful) branding attempts everywhere, really trying to burn the word &amp;ldquo;CNCF&amp;rdquo; and the marketing term &amp;ldquo;cloud native&amp;rdquo; into your mind, and sheer amount of projects they&amp;rsquo;re funding/supporting in some way smacks of the VC-backed &amp;ldquo;high-growth&amp;rdquo; startup play that never pans out as well fofor customers as it does for VCs/early founders.</description>
    </item>
    <item>
      <title>Kubernetes 1.15 upgrade (from 1.13.0)</title>
      <link>https://vadosware.io/post/k8s-1-15-update/</link>
      <pubDate>Mon, 15 Jul 2019 15:27:10 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-1-15-update/</guid>
      <description>tl;dr - I upgraded my small single-node cluster (6C/12T 16GB Ubuntu 18.10 Hetzner dedicated server) to Kubernetes 1.15 from 1.13. See the TLDR summary section section for the list of steps (basically, use kubeadm).&#xA;I run a tiny single-node kubernetes cluster which hosts this site, client demos, experiments, and many of my own projects &amp;ndash; I&amp;rsquo;ve written about it lots over the years, and today I thought I&amp;rsquo;d cover one of the mostly mundane (for my setup) parts of running Kubernetes &amp;ndash; upgrading to a newer version, 1.</description>
    </item>
    <item>
      <title>A couple talks on Postgres and Gitlab (June 2019)</title>
      <link>https://vadosware.io/post/postgres-and-gitlab-talks-june-2019/</link>
      <pubDate>Sun, 30 Jun 2019 12:34:48 +0900</pubDate>
      <guid>https://vadosware.io/post/postgres-and-gitlab-talks-june-2019/</guid>
      <description>tl;dr - I gave two short talks to different audiences on awesome things you can do with Postgres and how you can use containers with GitLab. You can find all of thses on my talk repo or read them below.&#xA;I recently gave a couple talks, one at the Tokyo Tech Meetup and another at the Gitlab JP (this one is in japanese, so you may need to bone up on your 日本語) which I thought a wider audience might find interesting.</description>
    </item>
    <item>
      <title>Count-Min Sketch in Haskell</title>
      <link>https://vadosware.io/post/countmin-sketch-in-haskell/</link>
      <pubDate>Mon, 17 Jun 2019 02:00:46 +0900</pubDate>
      <guid>https://vadosware.io/post/countmin-sketch-in-haskell/</guid>
      <description>tl;dr - I wrote a small library for CountMin sketches in Haskell (you can find the code on GitLab, @ mrman/haskell-countmin). I then try to optimize it and fail, but throw in an example of doctest usage, CI with Gitlab, and how to host the generated Haddock on GitLab Pages.&#xA;In some work and exploration earlier this year I found some time to read more about sketches &amp;ndash; probablistic data structures usually used for summarizing data.</description>
    </item>
    <item>
      <title>What is a Backend? A selective guided tour through terminology, approaches, and technology</title>
      <link>https://vadosware.io/post/talks-what-is-a-backend-04-18-2019/</link>
      <pubDate>Thu, 16 May 2019 12:43:22 +0900</pubDate>
      <guid>https://vadosware.io/post/talks-what-is-a-backend-04-18-2019/</guid>
      <description>tl;dr - I gave a short talk on the history of web servers. Check it out in my &amp;rsquo;talks&amp;rsquo; repository on GitLab or view/download the PDF directly.&#xA;UPDATE (05/16/2019) After getting some feedback from reddit, I&#39;ve added a Clarifications section to address some overarching points/themes the slides were meant to convey that were less than clear. I recently gave a talk at the Mercari Meetup on a subject I&amp;rsquo;ve always been kicking about in my head &amp;ndash; how &amp;ldquo;backend&amp;rdquo; web servers have changed over time.</description>
    </item>
    <item>
      <title>Comparing OpenEBS and Hostpath</title>
      <link>https://vadosware.io/post/comparing-openebs-and-hostpath/</link>
      <pubDate>Mon, 29 Apr 2019 18:29:53 -0500</pubDate>
      <guid>https://vadosware.io/post/comparing-openebs-and-hostpath/</guid>
      <description>+ + tl;dr - I ran some cursory tests (dd, iozone, sysbench) to measure and compare IO operation on OpenEBS provisioned storage in comparison with hostPath volumes in my small Kubernetes cluster. Feel free to skip to the results. OpenEBS&amp;rsquo;s jiva-engine backed volumes have about half the throughput for single large writes (gigabytes) and slightly outperformed hostPath for many small writes. In my opinion, the simplicity and improved ergonomics/abstraction offered by OpenEBS is well worth it.</description>
    </item>
    <item>
      <title>Ops Pearl: Managing Git Personas</title>
      <link>https://vadosware.io/post/ops-pearl-managing-git-personas/</link>
      <pubDate>Sat, 30 Mar 2019 10:12:03 +0900</pubDate>
      <guid>https://vadosware.io/post/ops-pearl-managing-git-personas/</guid>
      <description>tl;dr - Easily manage multiple git personas by naming config stanzas with aliases in your ~/.ssh/config and the names when you git clone (i.e. git clone git@your-alias:user/project.git. Or, you could just use HTTPS to clone. Either way, make sure to use git config --local to change the user.name and user.email values afterwards.&#xA;UPDATE (04/03/2019) I got some more excellent feedback from u/tpenguinltg on Reddit on an alternative way to do things that&#39;s even *more* centralized and easy to manage, via git configs.</description>
    </item>
    <item>
      <title>A Quick introduction to manual OpenAPI V3</title>
      <link>https://vadosware.io/post/quick-intro-to-manual-openapi-v3/</link>
      <pubDate>Sat, 16 Mar 2019 10:17:52 +0900</pubDate>
      <guid>https://vadosware.io/post/quick-intro-to-manual-openapi-v3/</guid>
      <description>/ tl;dr - This post contains examples of a folder structure &amp;amp; examples of a manually-edited OpenAPI v3 schema setup that works well with openapi-generator. At the end I go the relevant config to set up automated client generation with Gitlab CI&#xA;Eons ago, before GraphQL became the new hotness (I&amp;rsquo;m very bearish on GraphQL), the fast-moving frontend world had just started to settle in to a bunch of tools for standardizing REST-ish and kinda-HATEOAS-y backends with a few tools (in no particular order):</description>
    </item>
    <item>
      <title>Setting Up Statping</title>
      <link>https://vadosware.io/post/setting-up-statping/</link>
      <pubDate>Wed, 06 Mar 2019 10:24:32 +0900</pubDate>
      <guid>https://vadosware.io/post/setting-up-statping/</guid>
      <description>+ tl;dr - I set up a single instance of statping along with configuration to monitor uptime for a few sites I maintain.&#xA;I&amp;rsquo;ve written a bunch of times in the past about my k8s cluster (most posts are categorized under &amp;ldquo;k8s&amp;rdquo; or &amp;ldquo;kubernetes&amp;rdquo;), but during a recent rebuild of my cluster I forgot to put a rather important back up. It&amp;rsquo;s pretty disappointing that this happened at all &amp;ndash; I went through the hard work of making all my deployments single-command (utilizing my still-possibly-a-terrible-idea makeinfra pattern), but I don&amp;rsquo;t have all the projects and more infrastructure related concerns in the same respository, which meant I had to go into each individual -infra repository for my other projects and run make deploy or something similar.</description>
    </item>
    <item>
      <title>A Galaxy Scale Addressing Scheme for Compute Availability</title>
      <link>https://vadosware.io/post/a-galaxy-scale-addressing-scheme-for-compute-availability/</link>
      <pubDate>Sat, 23 Feb 2019 23:25:12 +0900</pubDate>
      <guid>https://vadosware.io/post/a-galaxy-scale-addressing-scheme-for-compute-availability/</guid>
      <description>+ tl;dr - Back of the napkin ideation of what a universal planet-scale (so ensuring satellite compute could be included) addressablility for compute resources. Goodbye us-west-1 (AWS)/us-west1 (GCP)/ West US (Azure) and hello COUNTRY:USA-COMPASS:WEST or STATE:CA-COMPASS:NORTH? Skip to the end for some examples&#xA;Wouldn&amp;rsquo;t it be cool if we had a cloud provider agnostic way of talking about regions? To my knowledge there isn&amp;rsquo;t one, and with the recent ops-kick I&amp;rsquo;ve been on the last few years (containers, kubernetes, easy CI/CD with Gitlab), I recently spent a super small amount of time thinking about this and think I&amp;rsquo;ve come up with a scheme enough so simple that it just might work (and maybe even work well!</description>
    </item>
    <item>
      <title>Ops Pearl: fast-forwarding a Git clone without a full pull</title>
      <link>https://vadosware.io/post/ops-pearl-fast-forwarding-a-git-clone-without-full-pull/</link>
      <pubDate>Tue, 12 Feb 2019 19:12:50 +0900</pubDate>
      <guid>https://vadosware.io/post/ops-pearl-fast-forwarding-a-git-clone-without-full-pull/</guid>
      <description>tl;dr - How to fast forward a git clone without a full git pull, shamelessly stolen from a fantastic Kubecon talk given by some team members of the Internet Archive&#xA;I&amp;rsquo;m still working my way through the videos from Kubecon 2018 (thanks to CockroachDB for sponsoring the recordings), but one of the talks I really enjoyed was given by a two team members from The Internet Archive who shared how they migrated some of their workloads to Kubernetes and got massive gains in usability without everything catching fire.</description>
    </item>
    <item>
      <title>Mithril SystemJS and ParcelJS Getting Started Guide</title>
      <link>https://vadosware.io/post/mithril-systemjs-and-rollup-getting-started-guide/</link>
      <pubDate>Sun, 10 Feb 2019 01:05:00 +0900</pubDate>
      <guid>https://vadosware.io/post/mithril-systemjs-and-rollup-getting-started-guide/</guid>
      <description>+ tl;dr - This is a step-by-step (increasing complexity) guide to building a simple frontend project with Mithril, then layering on dynamic loading (via SystemJS) and ending up with mature bundle/build as managed by Parcel. You can skip straigh to the mrman/mithmail repository which contains the finished code if you&amp;rsquo;d like!&#xA;Mithril is one of the most intersting frontend component libraries to me (I&amp;rsquo;ve written about it before) &amp;ndash; it&amp;rsquo;s very small yet very performant, simple yet contains just about everything I need to make the apps I use these days.</description>
    </item>
    <item>
      <title>Component Styling with CSS Variables, BEM-like class selectors, and some Tachyons</title>
      <link>https://vadosware.io/post/component-styling-with-css-variables-bem-and-tachyons/</link>
      <pubDate>Thu, 10 Jan 2019 19:31:18 +0900</pubDate>
      <guid>https://vadosware.io/post/component-styling-with-css-variables-bem-and-tachyons/</guid>
      <description>tl;dr - Shorts introduction to pattern of styling components for use across projects with CSS Properties (AKA CSS Variables) and using a mix of BEM-style simple class hierarchies, and Tachyons-style general use classes where appropriate.&#xA;Recently I&amp;rsquo;ve been thinking a bit about the sad UI/UX state of affairs for one of my projects (it&amp;rsquo;s a job site for devs in tokyo @ techjobs.tokyo &amp;ndash; and in general how I approach front end work.</description>
    </item>
    <item>
      <title>Kicking the Tires on OpenEBS for Cluster Storage</title>
      <link>https://vadosware.io/post/kicking-the-tires-on-openebs-for-cluster-storage/</link>
      <pubDate>Sat, 05 Jan 2019 13:34:12 +0900</pubDate>
      <guid>https://vadosware.io/post/kicking-the-tires-on-openebs-for-cluster-storage/</guid>
      <description>+ tl;dr - outline of some approaches I&amp;rsquo;ve taken to storage on my small k8s cluster, why I can&amp;rsquo;t just use Rook (which is/was primarily Ceph underneath), and setup &amp;amp; evaluation of OpenEBS. OpenEBS is working great and is wonderfuly simple &amp;ndash; I&amp;rsquo;m probably going to be using it for everything from now on.&#xA;Discovering Rook (and resultingly Ceph, which was Rook&amp;rsquo;s first underlying system) was a huge moment for me in figuring out how to do interesting things with Kubernetes.</description>
    </item>
    <item>
      <title>Paxosmon: Gotta Consensus Them All</title>
      <link>https://vadosware.io/post/paxosmon-gotta-concensus-them-all/</link>
      <pubDate>Fri, 21 Dec 2018 16:50:23 +0900</pubDate>
      <guid>https://vadosware.io/post/paxosmon-gotta-concensus-them-all/</guid>
      <description>tl;dr - I go through a (near complete?) selection of research papers and approaches therein that solve distributed consensus with strong consistency as provided by the Paxos family of algorithms.&#xA;Multi-part blog post alert This is a multi-part blog-post!&#xA;Part 1 - Paxosmon: Gotta consensus them all (this post) Part 2 - Paxosmon 2: The Journey Continues Foreword: I made an icon! Before we start, a quick note &amp;ndash; I made an icon for Paxos since it doesn&amp;rsquo;t seem to have one &amp;ndash; what do you think?</description>
    </item>
    <item>
      <title>Rest-ish Services in Haskell Part 3</title>
      <link>https://vadosware.io/post/rest-ish-services-in-haskell-part-3/</link>
      <pubDate>Sun, 09 Dec 2018 14:03:38 +0900</pubDate>
      <guid>https://vadosware.io/post/rest-ish-services-in-haskell-part-3/</guid>
      <description>+ tl;dr - In this post I work my way through sprinkling in some DataKinds (shoutout to dcasto&amp;rsquo;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!&#xA;UPDATE (12/14/2018) As always, I got some more excellent feedback from the r/haskell community, and I&#39;ve added some extra sections and notes based on the feedback.</description>
    </item>
    <item>
      <title>A small collection of Day 2 Vue Patterns</title>
      <link>https://vadosware.io/post/a-small-collection-of-day-2-vue-patterns/</link>
      <pubDate>Sat, 24 Nov 2018 14:45:27 +0900</pubDate>
      <guid>https://vadosware.io/post/a-small-collection-of-day-2-vue-patterns/</guid>
      <description>tl;dr - I wrote about a few patterns I&amp;rsquo;ve found myself using/rewriting repeatedly on Vue projects. Use at your own risk.&#xA;I&amp;rsquo;ve worked on a few Vue frontend projects now and while I can&amp;rsquo;t say that any of the projects are paragons of good frontend engineering (tm), I have found myself implementing a few patterns over and over from project to project, which (charitably interpreted) is a sign that I&amp;rsquo;ve foudn something that worked so well I wanted to use it twice.</description>
    </item>
    <item>
      <title>How to get off Yahoo! mail</title>
      <link>https://vadosware.io/post/how-to-get-off-yahoo-mail/</link>
      <pubDate>Mon, 19 Nov 2018 23:07:28 +0900</pubDate>
      <guid>https://vadosware.io/post/how-to-get-off-yahoo-mail/</guid>
      <description>tl;dr - You can get off Yahoo! Mail (or any other &amp;ldquo;free&amp;rdquo; 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.&#xA;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!</description>
    </item>
    <item>
      <title>Rhymote: a Remote for Rhythmbox</title>
      <link>https://vadosware.io/post/rhymote-a-remote-for-rhythmbox/</link>
      <pubDate>Thu, 15 Nov 2018 19:57:02 +0900</pubDate>
      <guid>https://vadosware.io/post/rhymote-a-remote-for-rhythmbox/</guid>
      <description>+ 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.&#xA;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.</description>
    </item>
    <item>
      <title>REST-ish Services in Haskell: Part 2</title>
      <link>https://vadosware.io/post/rest-ish-services-in-haskell-part-2/</link>
      <pubDate>Tue, 13 Nov 2018 01:03:38 +0900</pubDate>
      <guid>https://vadosware.io/post/rest-ish-services-in-haskell-part-2/</guid>
      <description>+ 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 &amp;ldquo;hit the road&amp;rdquo; 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.&#xA;UPDATE (11/19/2018) After some feedback from the r/haskell post I added an extra section on some more interesting approaches to handling the over-typed first section, based on suggestions from helpful people on r/haskell.</description>
    </item>
    <item>
      <title>REST-ish Services in Haskell: Part 1</title>
      <link>https://vadosware.io/post/rest-ish-services-in-haskell-part-1/</link>
      <pubDate>Sun, 21 Oct 2018 12:31:38 +0900</pubDate>
      <guid>https://vadosware.io/post/rest-ish-services-in-haskell-part-1/</guid>
      <description>+ 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&#xA;UPDATE (11/28/2018) One of the great thing about blog posts is getting feedback and thanks to Magnus over @ therning.</description>
    </item>
    <item>
      <title>Disassembling Raid on Hetzner Without Rescue Mode</title>
      <link>https://vadosware.io/post/disassembling-raid-on-hetzner-without-rescue-mode/</link>
      <pubDate>Sat, 06 Oct 2018 14:54:13 +0900</pubDate>
      <guid>https://vadosware.io/post/disassembling-raid-on-hetzner-without-rescue-mode/</guid>
      <description>+ + 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.&#xA;I&amp;rsquo;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&amp;rsquo;ve also written about hetzner in some previous posts).</description>
    </item>
    <item>
      <title>Using Gitlab Deploy Tokens With k8s</title>
      <link>https://vadosware.io/post/using-gitlab-deploy-tokens-with-k8s/</link>
      <pubDate>Sun, 30 Sep 2018 17:13:46 +0900</pubDate>
      <guid>https://vadosware.io/post/using-gitlab-deploy-tokens-with-k8s/</guid>
      <description>+ tl;dr - Gitlab deploy tokens in a Kubernetes deployment don&amp;rsquo;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.&#xA;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&amp;rsquo;m rolling out.</description>
    </item>
    <item>
      <title>Up and Running With Linkerd v1</title>
      <link>https://vadosware.io/post/up-and-running-with-linkerd-v1/</link>
      <pubDate>Fri, 21 Sep 2018 18:21:30 +0900</pubDate>
      <guid>https://vadosware.io/post/up-and-running-with-linkerd-v1/</guid>
      <description>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 &amp;ldquo;control plane&amp;rdquo;) and per-application sidecar containers that act as proxies, and while that&amp;rsquo;s cool I&amp;rsquo;m not going to run it just yet.</description>
    </item>
    <item>
      <title>Running Untrusted Workloads K8s Container Linux Part 3</title>
      <link>https://vadosware.io/post/running-untrusted-workloads-k8s-container-linux-part-3/</link>
      <pubDate>Mon, 10 Sep 2018 14:01:28 +0900</pubDate>
      <guid>https://vadosware.io/post/running-untrusted-workloads-k8s-container-linux-part-3/</guid>
      <description>+ + tl;dr - After struggling through settting up containerd&amp;rsquo;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&amp;rsquo;t be communicated with and would immediately make k8s node they were running on move to the NotReady due to PLEG errors.</description>
    </item>
    <item>
      <title>Running Untrusted Workloads K8s Container Linux Part 2</title>
      <link>https://vadosware.io/post/running-untrusted-workloads-k8s-container-linux-part-2/</link>
      <pubDate>Sat, 08 Sep 2018 10:26:30 +0900</pubDate>
      <guid>https://vadosware.io/post/running-untrusted-workloads-k8s-container-linux-part-2/</guid>
      <description>+ + + tl;dr - I came across rkt&amp;rsquo;s ability to use alternate stage 1s, got it working, but then abandoned it due to problems getting rook running and a lack of CRI compatability (at the time), before even trying to compare with the QEMU-in-a-pod approach. These notes are very old (I don&amp;rsquo;t use container linux for my cluster anymore) and I can&amp;rsquo;t believe I quit so quickly without more thorough investigation but evidently I did so there&amp;rsquo;s not much to see in this post, but maybe it will serve as a starting point for others.</description>
    </item>
    <item>
      <title>Running Untrusted Workloads K8s Container Linux Part 1</title>
      <link>https://vadosware.io/post/running-untrusted-workloads-k8s-container-linux-part-1/</link>
      <pubDate>Sat, 01 Sep 2018 12:35:28 +0900</pubDate>
      <guid>https://vadosware.io/post/running-untrusted-workloads-k8s-container-linux-part-1/</guid>
      <description>+ + tl;dr - I kinda succeeded in getting simplistic VM level isolation working on a container linux powered Kubernetes cluster with lots of failures along the way. This post is cobbled-together notes from the exploration stage, which ultimately lead to an extremely hackish CoreOS VM powered by qemu running inside a privileged Kubernetes pod running on top of a CoreOS dedicated machine. The notes that were cobbled together to make this post are very old, I&amp;rsquo;ve actually already switched to Ubuntu server for my kubernetes cluster, but I figured it was worth editing and releasing these notes for anyone interested that is experimenting with coreos container linux or flatcar linux.</description>
    </item>
    <item>
      <title>Kicking The Tires On Fathom</title>
      <link>https://vadosware.io/post/kicking-the-tires-on-fathom/</link>
      <pubDate>Mon, 13 Aug 2018 12:39:59 +0900</pubDate>
      <guid>https://vadosware.io/post/kicking-the-tires-on-fathom/</guid>
      <description>+ tl;dr - I set up Fathom for an application running in my small kubernetes cluster. It was easy but required a little hackery to properly init fathom (in particular creating the root user)&#xA;Recently I came across Fathom (usefathom/fathom on github) thanks to restoreprivacy.com&amp;rsquo;s google-alternatives page. They also got posted on Hacker News, which was cool to see.&#xA;Up until now I&amp;rsquo;ve been using Matomo (formerly Piwik) for my website analytics (for example on this blog) &amp;ndash; it&amp;rsquo;s got a bucketload of features and is relatively easy to setup along with having some good defaults.</description>
    </item>
    <item>
      <title>Hetzner fresh Ubuntu (18.04 LTS) install to single node Kubernetes cluster with ansible</title>
      <link>https://vadosware.io/post/hetzner-fresh-ubuntu-install-to-single-node-kubernetes-cluster-with-ansible/</link>
      <pubDate>Thu, 02 Aug 2018 18:57:38 +0900</pubDate>
      <guid>https://vadosware.io/post/hetzner-fresh-ubuntu-install-to-single-node-kubernetes-cluster-with-ansible/</guid>
      <description>+ tl;dr - I installed Kubernetes on Ubuntu 18.04 LTS via Ansible (kubeadm under the covers) on a Hetzner dedicated server. Before doing so, I debugged/tested the playbook in a local VirtualBox VM with a fresh Ubuntu install before attempting on the dedicated hardware. There&amp;rsquo;s a [gitlab repo (ansible-hetzner-ubuntu-1804-k8s-setup)][gitlab-repo] that contains a copy-paste job of the finished work &amp;ndash; the idea is that you should be able to run that playbook and go from a fresh Hetzner dedicated Ubuntu 18.</description>
    </item>
    <item>
      <title>A Pattern For Component Based Program Architecture In Rust</title>
      <link>https://vadosware.io/post/a-pattern-for-component-based-program-architecture-in-rust/</link>
      <pubDate>Sat, 21 Jul 2018 23:55:07 +0900</pubDate>
      <guid>https://vadosware.io/post/a-pattern-for-component-based-program-architecture-in-rust/</guid>
      <description>tl;dr - I explore the component pattern and how I&amp;rsquo;ve gone about implementing it in rust, starting with the basic concept of the Component trait and going through to thread-per-component for parallel operation, and message-passing for communication. Skip to a a full working example @ the rust-component-pattern-example example repo.&#xA;UPDATE (07/23/2018) After some great reddit feedback on some bits of the code that were confusing, I&#39;ve added a section on how I addressed some of the issues along with committing some code to the example repo, please check it out!</description>
    </item>
    <item>
      <title>Trying (and failing) to get LXD running on Container Linux</title>
      <link>https://vadosware.io/post/trying-and-failing-to-get-lxd-running-on-container-linux/</link>
      <pubDate>Wed, 04 Jul 2018 18:05:31 +0900</pubDate>
      <guid>https://vadosware.io/post/trying-and-failing-to-get-lxd-running-on-container-linux/</guid>
      <description>+ tl;dr - I tried to get LXD working on Container Linux but stopped short. Maybe if anyone picks it up (assuming the lxd team doesn&amp;rsquo;t tackle it eventually), they can learn from my failed effort.&#xA;I&amp;rsquo;ve recently gotten pretty excited about the concept of running higher isolation paradigms (VMs, LXD) in my cluster for larger untrusted workloads. A lot of interest in those concepts has been generated by the idea in the back of my head of building (or at least figuring out how I would build) a system that could spin up mini Kubernetes clusters &amp;ndash; like an EKS/AKS/GKE, but easily self-hostable.</description>
    </item>
    <item>
      <title>Securing Your Kubernetes Cluster</title>
      <link>https://vadosware.io/post/securing-your-kubernetes-cluster/</link>
      <pubDate>Thu, 21 Jun 2018 18:30:05 +0900</pubDate>
      <guid>https://vadosware.io/post/securing-your-kubernetes-cluster/</guid>
      <description>tl;dr - Check out Kubernetes features like PodSecurityPolicy, NetworkPolicy. There are also Fantastic fun analogy-laden Talks from Kubecon 2017 (Austin) and Kubecon 2018 (Copenhagen). CIS standards for Kubernetes clusters exist. There are also companies like Aqua that produce tools like kube-bench that let you test your clusters CIS benchmarks. It&amp;rsquo;s also important to remember to secure the machine as well as the Kubernetes cluster &amp;ndash; so the usual Unix server administration advice applies.</description>
    </item>
    <item>
      <title>Using Makefiles And Envsubst As An Alternative To Helm And Ksonnet</title>
      <link>https://vadosware.io/post/using-makefiles-and-envsubst-as-an-alternative-to-helm-and-ksonnet/</link>
      <pubDate>Fri, 08 Jun 2018 17:00:40 +0900</pubDate>
      <guid>https://vadosware.io/post/using-makefiles-and-envsubst-as-an-alternative-to-helm-and-ksonnet/</guid>
      <description>+ tl;dr - Why don&amp;rsquo;t we use Makefiles in &amp;lt;project&amp;gt;-infra repos, git-crypt, and good naming conventions instead of Helm&#xA;UPDATE (06/13/2018) After some much needed prodding from some readers that sent emails, I&#39;ve created an example repo to more fully showcase the pattern! You can find the example repo (`mrman/makeinfra-pattern`) on Gitlab. Check it out and make Merge Requests with any suggestions, discussion, and improvements you can think of! UPDATE (06/26/2021) 3 years later Helm 3 has long been out, Tiller is gone, and Helm looks a lot more usable, so take this post with a grain of salt!</description>
    </item>
    <item>
      <title>Even faster rust builds in Gitlab CI</title>
      <link>https://vadosware.io/post/even-faster-rust-builds-in-gitlab-ci/</link>
      <pubDate>Wed, 30 May 2018 17:09:59 +0900</pubDate>
      <guid>https://vadosware.io/post/even-faster-rust-builds-in-gitlab-ci/</guid>
      <description>tl;dr - I applied a few patterns I&amp;rsquo;ve used on other projects to a Gitlab CI-powered rust project to achieve &amp;lt;2min builds. Basically just caching at different layers &amp;ndash; caching via the docker image builder pattern at the docker level, aggressive caching with Gitlab CI at the CI runner level, also one more step of combining some build steps (probably unnecessarily).&#xA;I recently became a proud rustacean, which is what developers who use the programming language rust call themselves.</description>
    </item>
    <item>
      <title>k8s Container Linux ignition with rkt and kube-router</title>
      <link>https://vadosware.io/post/k8s-container-linux-ignition-with-rkt-and-kube-router/</link>
      <pubDate>Fri, 25 May 2018 02:18:16 +0900</pubDate>
      <guid>https://vadosware.io/post/k8s-container-linux-ignition-with-rkt-and-kube-router/</guid>
      <description>+ + I recently wrote a post about about switching back to container linux for my small Kubernetes cluster, in which I outlined everything i needed to do to get it up and running. Even more recently, I decided I wanted to go ahead and run &amp;ldquo;rktnetes&amp;rdquo; to try and take advantage of it&amp;rsquo;s annotation-powered stage1 selection, and figured I should post that up too for any fellow rkt enthusiasts!</description>
    </item>
    <item>
      <title>SQLite Is threadsafe, parallel access safe, but I still want to extend it.</title>
      <link>https://vadosware.io/post/sqlite-is-threadsafe-and-concurrent-access-safe-but/</link>
      <pubDate>Wed, 23 May 2018 17:51:07 +0900</pubDate>
      <guid>https://vadosware.io/post/sqlite-is-threadsafe-and-concurrent-access-safe-but/</guid>
      <description>tl;dr - I&amp;rsquo;ve been doing a lot of work with SQLite lately, using it in one of my projects to try and test it&amp;rsquo;s limits before I moved to something like Postgres. I wanted to scale the API up and after ensuring that SQLite was thread safe and parallel access safe, I tried but was limited by shared file system mode limitations of my platform (kubernetes). This post details some prior art (rqlite, dqlite) and what I want to make for distributing SQLite, which is expressly not what SQLite is for but seems like it would be fun.</description>
    </item>
    <item>
      <title>Yet another cluster re-install after switching back to Container Linux</title>
      <link>https://vadosware.io/post/yet-another-cluster-reinstall-back-to-container-linux/</link>
      <pubDate>Sun, 20 May 2018 15:15:58 +0900</pubDate>
      <guid>https://vadosware.io/post/yet-another-cluster-reinstall-back-to-container-linux/</guid>
      <description>tl;dr - After a bad kernel upgrade (pacman -sYu) on my Arch-powered server I decided to go back to Container Linux, after being equal parts annoyed by Arch and encouraged by the Press release put out by red hat. This time, I spent much more time with the Ignition config files in conjunction with kubeadm and ended up with a bootable master node. Feel free to check out the tldr at the end.</description>
    </item>
    <item>
      <title>Minimal effort build improvements and a GHC 8.2.2 upgrade</title>
      <link>https://vadosware.io/post/least-effort-ghc-8-2-2-upgrade-for-my-servant-project/</link>
      <pubDate>Tue, 15 May 2018 18:21:16 +0900</pubDate>
      <guid>https://vadosware.io/post/least-effort-ghc-8-2-2-upgrade-for-my-servant-project/</guid>
      <description>tl;dr - On a Haskell project I&amp;rsquo;m working on I started with &amp;gt;~20 minute cold-cache builds in the worst case in my Gitlab-powered CI environment then found some small ways to improve. Very recently I decided I wasn&amp;rsquo;t satisfied with ~10 / 15 minute builds and did the laziest, least-effort steps I could find to get to &amp;lt;10 minute cold-cache builds (~5min best case). Check out the [TLDR][tldr] section to see the Dockerfiles and steps I took summarized.</description>
    </item>
    <item>
      <title>The cure for impostor syndrome is knowing things</title>
      <link>https://vadosware.io/post/the-cure-for-impostor-syndrome-is-knowing-things/</link>
      <pubDate>Sat, 21 Apr 2018 12:35:25 +0900</pubDate>
      <guid>https://vadosware.io/post/the-cure-for-impostor-syndrome-is-knowing-things/</guid>
      <description>WARNING - This is a opinion-based fluff piece, read at your own risk. There&amp;rsquo;s no technical writeup or deep technical insight to be gained in this article, if ever there was in any of my posts to begin with.&#xA;tl;dr - the cure for impostor syndrome is growing the amount of slow, hard-fought knowledge you have in a given area. Don&amp;rsquo;t over-sell how much you know, don&amp;rsquo;t under-sell it. If you&amp;rsquo;ve actually read the documentation and/or code for a project, used a piece of code/methodology before in a relevant context, worked through problems with it, you have a certain amount of valuable expertise, even if you are not an expert &amp;ndash; being an &amp;ldquo;expert&amp;rdquo; is only a matter of how much expertise you possess, and the cutoffs are endlessly subjective.</description>
    </item>
    <item>
      <title>Dedicated server rescue (RAID &#43; Grub2 issues)</title>
      <link>https://vadosware.io/post/dedicated-server-rescue-raid-and-grub/</link>
      <pubDate>Wed, 18 Apr 2018 15:39:10 +0900</pubDate>
      <guid>https://vadosware.io/post/dedicated-server-rescue-raid-and-grub/</guid>
      <description>tl/dr; an update (sudo pacman -Syu) to a server I manage running Arch messed up the boot process of my server, due to interaction between RAID and GRUB, and I stumbled my way through debugging it.&#xA;WARNING If you find yourself with this problem, make sure to read all the way to the end, because I take some steps that I think made things worse half way through (in particular running grub-install and in-effect wiping out boot)</description>
    </item>
    <item>
      <title>Better k8s monitoring part 3: Adding request tracing with OpenTracing (powered by Jaeger)</title>
      <link>https://vadosware.io/post/better-k8s-monitoring-part-3-adding-tracing-with-opentracing-and-jaeger/</link>
      <pubDate>Sat, 31 Mar 2018 15:19:04 +0900</pubDate>
      <guid>https://vadosware.io/post/better-k8s-monitoring-part-3-adding-tracing-with-opentracing-and-jaeger/</guid>
      <description>tl;dr - I spent a bunch of time stumbling through getting kim/opentracing integrated into my small Servant powered web app. In the end I actually switched to servant-tracing due to some issues integrating, and was able to get it working &amp;ndash; there&amp;rsquo;s a TON of wandering in this post (basically half the time you&amp;rsquo;re reading an approximation of my stream of consciousness, some might consider the experiments with kim/opentracing a waste of time, but I do not), so please check out the tldr section for the working code that uses servant-tracing (somewhat specialized to my app structure).</description>
    </item>
    <item>
      <title>Switching From kube-lego To cert-manager</title>
      <link>https://vadosware.io/post/switching-from-kube-lego-to-cert-manager/</link>
      <pubDate>Mon, 12 Mar 2018 11:44:01 +0900</pubDate>
      <guid>https://vadosware.io/post/switching-from-kube-lego-to-cert-manager/</guid>
      <description>tl;dr - I switched from Jetstack&amp;rsquo;s kube-lego to cert-manager (it&amp;rsquo;s natural successor), and am pretty happy with the operator pattern they&amp;rsquo;ve decided to adopt, switch over was easy, but I tripped myself up for a bit because I don&amp;rsquo;t like using Helm. Complete resource definitions (that worked for me, YMMV) are in the TLDR section @ the bottom.&#xA;I&amp;rsquo;m taking a break from my regularly scheduled programming (I&amp;rsquo;m in the middle of a series on trying out monitoring/observability tools/frameworks in Kubernetes) to write about my switch from jetstack/kube-lego to jetstack/cert-manager.</description>
    </item>
    <item>
      <title>Awesome Dev Tool: MailCatcher</title>
      <link>https://vadosware.io/post/awesome-dev-tooling-mailcatcher/</link>
      <pubDate>Mon, 05 Mar 2018 18:16:41 +0900</pubDate>
      <guid>https://vadosware.io/post/awesome-dev-tooling-mailcatcher/</guid>
      <description>I&amp;rsquo;m taking a break from my regularly scheduled programming (I&amp;rsquo;m in the middle of a Series on trying out monitoring/observability tools/frameworks) to discuss a tool that I recently came across that is super useful and was a delight to use: MailCatcher.&#xA;UPDATE (10/04/2018) I found a nice and light mailcatcher docker container jeanberu/mailcatcher, so you don&#39;t have to dirty your own local ruby gems! I recently completely rewrote a component I&amp;rsquo;m using for email templating and sending in a web application I&amp;rsquo;m currently working on to use ginger over HStringTemplate.</description>
    </item>
    <item>
      <title>Better k8s Monitoring Part 2: Adding logging management with the EFKK stack</title>
      <link>https://vadosware.io/post/better-k8s-monitoring-part-2-adding-logging-with-efkk/</link>
      <pubDate>Fri, 23 Feb 2018 22:36:44 +0900</pubDate>
      <guid>https://vadosware.io/post/better-k8s-monitoring-part-2-adding-logging-with-efkk/</guid>
      <description>tl;dr - I started trying to set up EFK (Elastic, FluentD, Kibana), and hit frustrating integration issues/bugs with Elastic+Kibana 6.x, tripped myself up a LOT, almost gave up and went with Graylog, but then rallied to finish setting everything up by basically fixing my own bad configuration. Skip to the TLDR section for the hand-written working k8s configuration.&#xA;This is Part 2 in a series of blog posts where I seek to increase observability on my single-node Kubernetes cluster.</description>
    </item>
    <item>
      <title>Better K8s Monitoring Part 1: Adding Prometheus</title>
      <link>https://vadosware.io/post/better-k8s-monitoring-part-1-adding-prometheus/</link>
      <pubDate>Sun, 04 Feb 2018 19:34:31 +0900</pubDate>
      <guid>https://vadosware.io/post/better-k8s-monitoring-part-1-adding-prometheus/</guid>
      <description>It&amp;rsquo;s been a while since I learned of the wonders (and cleared up my misconceptions) of dedicated hosting and set up a &amp;ldquo;Baremetal&amp;rdquo; CoreOS single-node k8s cluster. For a while now I&amp;rsquo;ve maintained a single large (by my standards) machine that has been running Kubernetes, and purring right along &amp;ndash; outside of the occasional restart or operator error, it hasn&amp;rsquo;t gone down and has kept my applications running. While most of the applications don&amp;rsquo;t get much traffic (as most are projects that haven&amp;rsquo;t launched), it does keep up some more important things like my mail servers for some domains I hold.</description>
    </item>
    <item>
      <title>Fun with Gitlab CI</title>
      <link>https://vadosware.io/post/fun-with-gitlab-ci/</link>
      <pubDate>Mon, 29 Jan 2018 11:32:16 +0900</pubDate>
      <guid>https://vadosware.io/post/fun-with-gitlab-ci/</guid>
      <description>tl;dr If you/your team aren&amp;rsquo;t on to the wonders of CI yet, you should check it out. A nice easy way to get started is with Gitlab, which is self-hostable and has a free tier @ Gitlab.com. There is a lot of cool stuff you can do automatically with CI, all you need is some scripting chops and some patience to figure out what works and what doesn&amp;rsquo;t.&#xA;It&amp;rsquo;s no secret that I&amp;rsquo;m a huge fan of Gitlab &amp;ndash; they don&amp;rsquo;t pay me (this isn&amp;rsquo;t &amp;ldquo;sponsored&amp;rdquo; content), I&amp;rsquo;m just a rabid fan.</description>
    </item>
    <item>
      <title>Using Both Integrated And Discrete Graphics Cards</title>
      <link>https://vadosware.io/post/using-both-integrated-and-discrete-graphics-cards/</link>
      <pubDate>Tue, 16 Jan 2018 23:40:56 +0900</pubDate>
      <guid>https://vadosware.io/post/using-both-integrated-and-discrete-graphics-cards/</guid>
      <description>tldr; Lots of trial and error with Xorg, and some BIOS setting finangling and I got my computer to use both the onboard GFX and discrete graphics card to output video. Skip to the end for the boiled down list of steps and links that helped along the way.&#xA;Around the house, I still haven&amp;rsquo;t solved the problem of very easily moving video streams from one display to another &amp;ndash; meaning I still have HDMI wires running around my house.</description>
    </item>
    <item>
      <title>A reliable fix to Docker not keeping it&#39;s IPV4 address on Arch</title>
      <link>https://vadosware.io/post/a-reliable-fix-to-docker-not-keeping-its-ipv4-address-on-arch/</link>
      <pubDate>Thu, 21 Dec 2017 08:21:00 +0900</pubDate>
      <guid>https://vadosware.io/post/a-reliable-fix-to-docker-not-keeping-its-ipv4-address-on-arch/</guid>
      <description>tl;dr - Scroll to the bottom for the fix, if you&amp;rsquo;re having the problem, thanks to Garett L Ward for submitting the fix to me over email!&#xA;This is a bit of a repost (since I&amp;rsquo;ve aleady gone into the fix in an update to the previous post), but I wanted to say it again for anyone who might find this on the internet. If you&amp;rsquo;re struggling with an issue similar to the one described in one of my previous posts regarding docker0 losing it&amp;rsquo;s IPV4 address all the time, here&amp;rsquo;s a quick recap of how I got it fixed, big thanks to Garrett for figuring this out and emailing me:</description>
    </item>
    <item>
      <title>Adding (naive) email templating to my servant-powered haskell web application</title>
      <link>https://vadosware.io/post/adding-email-templating-to-my-servant-app/</link>
      <pubDate>Wed, 20 Dec 2017 19:44:11 +0900</pubDate>
      <guid>https://vadosware.io/post/adding-email-templating-to-my-servant-app/</guid>
      <description>UPDATE (02/10/2018) Don&amp;rsquo;t use HSTringTemplate&amp;hellip; Use Ginger. You probably know Jinja2 templates already, the template structure if familiar, more robust, and the documentation is way better.&#xA;It&amp;rsquo;s pretty common for applications to have to send out emails, and applications in Haskell are no different. In most large applications I&amp;rsquo;ve worked on, this often means taking a template (with copy approved by management/UX designers/whatever), injecting it with data, and sending it to the user.</description>
    </item>
    <item>
      <title>Custom registries in JSPM from CI</title>
      <link>https://vadosware.io/post/custom-registries-in-jspm-from-ci/</link>
      <pubDate>Fri, 15 Dec 2017 09:00:27 +0900</pubDate>
      <guid>https://vadosware.io/post/custom-registries-in-jspm-from-ci/</guid>
      <description>I recently ran into a bit of trouble using JSPM from the Gitlab CI build for one of my projects &amp;ndash; in particular, I&amp;rsquo;ve started separating my shared frontend UI code (projects like vue-component-library, a small collection of homegrown, badly designed UI components), and reusing across projects.&#xA;One of the big issues I ran into was trying to run jspm build on projects that used some of the shared libraries, that were hosted on Gitlab and not Github.</description>
    </item>
    <item>
      <title>Haskell build issues on Arch Linux (tinfo6)</title>
      <link>https://vadosware.io/post/haskell-build-issues-on-arch-linux/</link>
      <pubDate>Thu, 14 Dec 2017 04:47:45 +0900</pubDate>
      <guid>https://vadosware.io/post/haskell-build-issues-on-arch-linux/</guid>
      <description>Over the last month or two, I&amp;rsquo;ve had some unexpected/weird problems building my Haskell projects on Linux &amp;ndash; all of a sudden the project would fail to compile fairly innocuous requirements (that had up until that time compiled just fine) and I was very confused. It turns out a change to how the `&#xA;Thanks to some users on Github (mkoloberdin offered the workaround and pera noted the commit that likely caused the issue), figured out a fix that seems more permanent.</description>
    </item>
    <item>
      <title>Adding a very naive in-memory cache to my Haskell web app</title>
      <link>https://vadosware.io/post/adding-naive-in-memory-caching-to-my-haskell-webapp/</link>
      <pubDate>Thu, 30 Nov 2017 22:00:50 +0900</pubDate>
      <guid>https://vadosware.io/post/adding-naive-in-memory-caching-to-my-haskell-webapp/</guid>
      <description>tl;dr - I added some caching to an app I&amp;rsquo;m writing in Haskell using Servant. The implementation is pretty naive, but I&amp;rsquo;ve seen some speedups (as one would expect from skipping a database access), and am glad I was able to build such a simple solution in a language as expressive as haskell. Skip to the end TLDR section to see all the code laid out!&#xA;FAIR WARNING - this will is NOT an interesting article about caching algorithms or a quirk in GHC or optimization strategies.</description>
    </item>
    <item>
      <title>Continuous Integration To Continous Delivery Haskell Project With Gitlab</title>
      <link>https://vadosware.io/post/continuous-integration-to-continous-delivery-haskell-project-with-gitlab/</link>
      <pubDate>Sun, 19 Nov 2017 13:26:21 +0900</pubDate>
      <guid>https://vadosware.io/post/continuous-integration-to-continous-delivery-haskell-project-with-gitlab/</guid>
      <description>tl/dr; I added continuous delivery to my Haskell project (after working through adding CI). The setup is somewhat convoluted, but that&amp;rsquo;s more due to personal organizational preference. This posts rambles A LOT so feel forward to skip to the end, and check out the config files that made it happen.&#xA;Here lie my notes from taking my infrastructure for a Haskell-powered application I&amp;rsquo;ve been working on from Continous Integration (CI) all the way to Continous Delivery (CD).</description>
    </item>
    <item>
      <title>Zero To Continuous Integrated Testing A Haskell Project With Gitlab</title>
      <link>https://vadosware.io/post/zero-to-continuous-integrated-testing-a-haskell-project-with-gitlab/</link>
      <pubDate>Wed, 08 Nov 2017 21:49:49 +0900</pubDate>
      <guid>https://vadosware.io/post/zero-to-continuous-integrated-testing-a-haskell-project-with-gitlab/</guid>
      <description>tl;dr I set up CI on my haskell project, it&amp;rsquo;s pretty easy if you keep calm and use Gitlab&amp;rsquo;s CI settings. I hit a few bumps in the road along the way, but you can skip to the end for the completed .gitlab-ci.yml&#xA;Proselytizing for CI/CD While I don&amp;rsquo;t think many people need an explanation as to why CI is a good idea, here&amp;rsquo;s why I&amp;rsquo;m going for it. As far as I see it, good software engineering as it relates to operations is like a ladder, and here is a non-exhaustive list of rungs, with sophistication/goodness of engineering increasing as I go along:</description>
    </item>
    <item>
      <title>Switch From ployst/docker-letsencrypt to Jetstack&#39;s kube-lego</title>
      <link>https://vadosware.io/post/switch-from-ployst-docker-letsencrypt-to-kube-lego/</link>
      <pubDate>Sun, 05 Nov 2017 14:13:44 +0900</pubDate>
      <guid>https://vadosware.io/post/switch-from-ployst-docker-letsencrypt-to-kube-lego/</guid>
      <description>tl;dr - I switched from ployst/docker-letsencrypt which I considered less complicated than jetstack/kube-lego initially. Turns out jetstack/kube-lego is pretty simple and *just works* which is amazing, props to the team over at jetstack and as always the kubernetes team, for making this more intelligent automation possible. You could honestly just read the jetstack/kube-lego guide, it&amp;rsquo;s real good. If you wanna see my path through it, keep reading.&#xA;Up until now I&amp;rsquo;ve been using ployst/docker-letsencrypt, and it&amp;rsquo;s been working fine, however I&amp;rsquo;ve longed for a solution that didn&amp;rsquo;t require me to manually kubectl exec scripts, and kube-lego is that tool.</description>
    </item>
    <item>
      <title>Adding Sqlite Powered Fts Search To A Servant Powered Haskell App</title>
      <link>https://vadosware.io/post/adding-sqlite-powered-fts-search-to-a-servant-powered-haskell-app/</link>
      <pubDate>Sun, 22 Oct 2017 18:12:57 +0900</pubDate>
      <guid>https://vadosware.io/post/adding-sqlite-powered-fts-search-to-a-servant-powered-haskell-app/</guid>
      <description>tl;dr - You may not need a big robust beautifully crafted DB like Postgres every time you build an app. Sometimes SQlite is probably enough. SQLite even provides Full Text Search addons in the way of FTS3/4 and FTS5, so that&amp;rsquo;s cool too &amp;ndash; skim through the article for code snippets on the why/how I&amp;rsquo;m using SQLite + FTS3/4.&#xA;If you&amp;rsquo;re unfamiliar with SQLite, it&amp;rsquo;s a pretty awesome light-weight SQL-compliant RDBMS.</description>
    </item>
    <item>
      <title>Update JSPM (SystemJS) &#43; JSDOM &#43; Vue testing integration</title>
      <link>https://vadosware.io/post/update-jspm-systemjs-jsdom-vue-testing-integration/</link>
      <pubDate>Sat, 21 Oct 2017 10:18:44 +0900</pubDate>
      <guid>https://vadosware.io/post/update-jspm-systemjs-jsdom-vue-testing-integration/</guid>
      <description>tl;dr - JSDOM has updated so my testing code that uses it has updated as well, ignore the editorial and look at the code.&#xA;A while ago, I wrote a bit about some code I often use for integration testing on the front end. Since &amp;ldquo;integration&amp;rdquo; can mean a lot of things, to clarify, I am referring to making sure components render the right HTML under certain states (not loading a full page, not testing the render function).</description>
    </item>
    <item>
      <title>Moving From Server Side Sessions To Client Side Session Tokens with Servant</title>
      <link>https://vadosware.io/post/moving-from-server-side-sessions-to-client-side-session-tokens-with-servant/</link>
      <pubDate>Mon, 16 Oct 2017 17:04:45 +0900</pubDate>
      <guid>https://vadosware.io/post/moving-from-server-side-sessions-to-client-side-session-tokens-with-servant/</guid>
      <description>tl;dr - I moved from server-side stored sessions provided by Network.Wai.Session to client-side signed+encrypted session tokens provided by Wai.ClientSession for my Servant-powered webapp, it&amp;rsquo;s pretty easy, skim through to see the setup code, /login and /logout code that was required.&#xA;UPDATE After posting to r/haskell, user u/cocreature pointed out the existence of the servant-auth package &amp;ndash; it looks like an awesome solution so also make sure to give that a try before rolling your own.</description>
    </item>
    <item>
      <title>SSH tunneling using an intermediary computer</title>
      <link>https://vadosware.io/post/ssh-tunneling-using-an-intermediary-computer/</link>
      <pubDate>Sat, 14 Oct 2017 12:36:35 +0900</pubDate>
      <guid>https://vadosware.io/post/ssh-tunneling-using-an-intermediary-computer/</guid>
      <description>tl;dr - I had to SSH tunnel with a proxy computer in the middle due to some weird ISP restrictions/regular OpenVPN not working properly for me. Basically the setup is to SSH tunnel from one machine to another, and run another tunnel on the proxy computer. I used this surprisingly low latency setup to run a SOCKS5 proxy that did the job. &amp;ldquo;Remote Port Forwarding&amp;rdquo; is what I was doing, and a super awesome blog post helped show me the way.</description>
    </item>
    <item>
      <title>Docker on Arch Linux - docker0 just doesn&#39;t seem to want it&#39;s IPv4 address</title>
      <link>https://vadosware.io/post/docker-on-arch-linux-problems-keeping-ipv4-addresses-on-docker0/</link>
      <pubDate>Mon, 09 Oct 2017 16:38:34 +0900</pubDate>
      <guid>https://vadosware.io/post/docker-on-arch-linux-problems-keeping-ipv4-addresses-on-docker0/</guid>
      <description>tl;dr - My setup of Docker on Arch Linux is having some issues, around docker0 not properly holding on to it&amp;rsquo;s IPV4 addresses (listed as inet in ip addr output). I originally though it was a problem with Alpine CDNs, but it was actually docker0 throwing up repeatedly. Short term work around I&amp;rsquo;ve found is to just create the missing link again, w/ sudo ip addr add 172.17.0.1/16 dev docker0.</description>
    </item>
    <item>
      <title>Setting Up Piwik on Kubernetes</title>
      <link>https://vadosware.io/post/setting-up-piwik-on-kubernetes/</link>
      <pubDate>Sun, 08 Oct 2017 15:59:39 +0900</pubDate>
      <guid>https://vadosware.io/post/setting-up-piwik-on-kubernetes/</guid>
      <description>tl;dr - Setting up piwik is pretty straight forward, since I&amp;rsquo;ve gone through the trouble of setting up a database before, and piwik&amp;rsquo;s web based setup is pretty convenient. This post is the last in the pipeline that&amp;rsquo;s related to Kubernetes for a bit.&#xA;One of the most useful tools I&amp;rsquo;ve ever come across is Piwik &amp;ndash; it&amp;rsquo;s an excellent self-hostable tool for doing web analytics like tracking visits to your website (this very site uses it as well).</description>
    </item>
    <item>
      <title>Gandi 2017 Redesign</title>
      <link>https://vadosware.io/post/gandi-2017-redesign/</link>
      <pubDate>Sat, 07 Oct 2017 20:18:31 +0900</pubDate>
      <guid>https://vadosware.io/post/gandi-2017-redesign/</guid>
      <description>tl;dr - Gandi redesigned it&amp;rsquo;s website and I like it&#xA;I&amp;rsquo;m a happy user of Gandi.NET&amp;rsquo;s domain services, and I recently noticed that they went through a redesign that I thought was pretty well done (read: didn&amp;rsquo;t make me angry). It&amp;rsquo;s not like their old interface was bad by any stretch, it was pretty easy to find things, it wasn&amp;rsquo;t terrible looking, and it was pretty much consistent. I actually liked it a lot as it was.</description>
    </item>
    <item>
      <title>Serving email on Kubernetes with Mailu</title>
      <link>https://vadosware.io/post/serving-email-on-kubernetes-with-mailu/</link>
      <pubDate>Sun, 01 Oct 2017 11:29:50 +0900</pubDate>
      <guid>https://vadosware.io/post/serving-email-on-kubernetes-with-mailu/</guid>
      <description>tl;dr - Setting up Mailu on Kubernetes was pretty simple, once TLS and Ingress are all set up. It&amp;rsquo;s just a matter of configuring the ingress controller, adding the right ingress resources, and making the right resource configuration for Mailu. I encounter some (mostly self-inflicted) issues along the way, but you can find the resource config that worked for me at the end.&#xA;UPDATE (08/22/2018) Mailu has a new kubernetes setup stuff and accompanying documentation, check it out!</description>
    </item>
    <item>
      <title>Within seconds of using Pingdom I got email spam</title>
      <link>https://vadosware.io/post/within-seconds-of-using-pingdom-i-got-email-spam/</link>
      <pubDate>Sat, 30 Sep 2017 12:34:50 +0900</pubDate>
      <guid>https://vadosware.io/post/within-seconds-of-using-pingdom-i-got-email-spam/</guid>
      <description>tl;dr - I do a web speed test on this site, get spam from a firm that does website speed consulting, I rant a little bit about it, then share a little bit about a startup idea I had at the end. I&amp;rsquo;ll be back to regular &amp;ldquo;exploring Kubernetes&amp;rdquo; related posts tomorrow!&#xA;So this just happened (&amp;lt;5 minutes ago), but within seconds of heading over to Pingdom&amp;rsquo;s Speed test (I was really trying to test Piwik tracking on this blog), I got an email from some firm called SpeedUpgency that I&amp;rsquo;ve never heard of:</description>
    </item>
    <item>
      <title>Kicking The Tires On Rancher 2.0</title>
      <link>https://vadosware.io/post/kicking-the-tires-on-rancher-2.0/</link>
      <pubDate>Fri, 29 Sep 2017 14:26:41 +0900</pubDate>
      <guid>https://vadosware.io/post/kicking-the-tires-on-rancher-2.0/</guid>
      <description>tl;dr - Rancher 2.0 is out, Check out the demo video, it&amp;rsquo;s pretty slick. I start to set up Rancher, mess up, do some debugging, and eventually get it working with a bit of a hack. Skip to the end section (named &amp;ldquo;The whole process, abdridged&amp;rdquo;) before wrap up to see the full list of steps I took for getting Rancher running on my own local single node Kubernetes cluster.</description>
    </item>
    <item>
      <title>Serving a HTTPS enabled application on Kubernetes</title>
      <link>https://vadosware.io/post/serving-a-https-enabled-application-on-kubernetes/</link>
      <pubDate>Wed, 27 Sep 2017 10:50:48 +0900</pubDate>
      <guid>https://vadosware.io/post/serving-a-https-enabled-application-on-kubernetes/</guid>
      <description>tl;dr - It&amp;rsquo;s pretty easy if you have let&amp;rsquo;s encrypt certificates set up, and Kubernetes Ingress/DNS working properly (I&amp;rsquo;ve covered how I set these up in previous posts so check them out for reference). Skim through to see the final Kubernetes resource configuration that I use in production for Passcue.me&#xA;So far we&amp;rsquo;ve gone through a lot of Kubernetes related posts, from setting up Kubernetes manually on a single machine, to getting regular non-authenticated HTTP apps running on Kubernetes, to setting up a database on kubernetes and setting up letsencrypt-powered TLS certificates.</description>
    </item>
    <item>
      <title>Setting Up SSL Certs on Kubernetes</title>
      <link>https://vadosware.io/post/setting-up-ssl-certs-on-kubernetes/</link>
      <pubDate>Mon, 25 Sep 2017 16:26:08 +0900</pubDate>
      <guid>https://vadosware.io/post/setting-up-ssl-certs-on-kubernetes/</guid>
      <description>tl;dr - letsencrypt is awesome, ployst/docker-letsencrypt makes it easy to use with Kubernetes (feel free to check out the blog post that describes it). There are even easier ways to do it these days that I haven&amp;rsquo;t tried: kube-lego which looks pretty amazing.&#xA;After going through figuring out how to run HTTP applications on Kubernetes, as well as how to run databases on Kubernetes, the next natural step is to figure out how to gear up to running HTTPS applications on Kubernetes.</description>
    </item>
    <item>
      <title>Running a Database on Kubernetes</title>
      <link>https://vadosware.io/post/running-a-database-on-kubernetes/</link>
      <pubDate>Fri, 22 Sep 2017 10:53:23 +0900</pubDate>
      <guid>https://vadosware.io/post/running-a-database-on-kubernetes/</guid>
      <description>tl;dr - I thought I needed PersistentVolumes but I don&amp;rsquo;t (I do go through how to use/activate them though), they solve a different problem. All I needed was the combination of a Volume + StatefulSet + Node Affinity + Service in order to get my database running on a single node consistently, and accessible through DNS. I also go through setting up High Availability (HA)/clustered RethinkDB but it&amp;rsquo;s probably wrong/not axiomatic Kubernetes so check out the section on why I think it&amp;rsquo;s wrong.</description>
    </item>
    <item>
      <title>Serving HTTP Applications on Kubernetes with Ingress</title>
      <link>https://vadosware.io/post/serving-http-applications-on-kubernetes/</link>
      <pubDate>Mon, 11 Sep 2017 14:24:21 -0500</pubDate>
      <guid>https://vadosware.io/post/serving-http-applications-on-kubernetes/</guid>
      <description>UPDATE This configuration previously contained LoadBalancer as the spec.type but it turns out that actually I don&amp;rsquo;t need to set it to LoadBalancer. Basically, LoadBalancers are for use in cloud provider environments, and create their own ingresses according to the documentation. This was pointed out to me by Thomas Barton who came across this post on HackerNews and I wanted to of course pass the information on. Check out the section with the configuration for the changes and a small explanation.</description>
    </item>
    <item>
      <title>Fresh Dedicated Server to Single Node Kubernetes Cluster on CoreOS, Part 3: Setting up essential Kubernetes addons</title>
      <link>https://vadosware.io/post/fresh-dedicated-server-to-single-node-kubernetes-cluster-on-coreos-part-3/</link>
      <pubDate>Thu, 07 Sep 2017 13:56:53 -0500</pubDate>
      <guid>https://vadosware.io/post/fresh-dedicated-server-to-single-node-kubernetes-cluster-on-coreos-part-3/</guid>
      <description>This is the third in a series of blog posts centered around my explorations and experiments with using Kubernetes and CoreOS to power my own small slice of infrastructure. Check out the previous posts:&#xA;Part 1 (Setting up the server with CoreOS) Part 2 (Getting Kubernetes running) Part 3 (Setting up essential Kubernetes addons) (this post) tl;dr - Kubernetes has some pretty important addons like DNS and Dashboard, here I go through deploying them, and my thought process as I debugged issues.</description>
    </item>
    <item>
      <title>Fresh Dedicated Server to Single Node Kubernetes Cluster on CoreOS, Part 2: Getting Kubernetes Running</title>
      <link>https://vadosware.io/post/fresh-dedicated-server-to-single-node-kubernetes-cluster-on-coreos-part-2/</link>
      <pubDate>Tue, 05 Sep 2017 10:32:29 -0500</pubDate>
      <guid>https://vadosware.io/post/fresh-dedicated-server-to-single-node-kubernetes-cluster-on-coreos-part-2/</guid>
      <description>This is the seccond in a series of blog posts centered around my explorations and experiments with using Kubernetes and CoreOS to power my own small slice of infrastructure. Check out the previous post:&#xA;Part 1 (Setting up the server with CoreOS) Part 2 (Getting Kubernetes running) (this post) Part 3 (Setting up essential Kubernetes extras) tl;dr - Read the step-by-step guide on the CoreOS site for setting up Kubernetes, it&amp;rsquo;s excellent.</description>
    </item>
    <item>
      <title>Fresh Dedicated Server to Single Node Kubernetes cluster on CoreOS, Part 1</title>
      <link>https://vadosware.io/post/fresh-dedicated-server-to-single-node-kubernetes-cluster-on-coreos/</link>
      <pubDate>Sun, 03 Sep 2017 13:11:16 -0500</pubDate>
      <guid>https://vadosware.io/post/fresh-dedicated-server-to-single-node-kubernetes-cluster-on-coreos/</guid>
      <description>This is the first of a series of blog posts centered around my explorations and experiments with using Kubernetes to power my own small slice of infrastructure (1-3 servers, mix of VPS and dedicated hardware).&#xA;This post is a bit of an introductory piece detailing some of my motivations and internal dialogue on switching to kubernetes and upgrading my infrastructure at all. This post will unfortunately be light in &amp;ldquo;how-to&amp;rdquo; and will mostly cover &amp;ldquo;why-I-chose-to&amp;rdquo;.</description>
    </item>
    <item>
      <title>Static Binaries for Haskell: A Convoluted Approach</title>
      <link>https://vadosware.io/post/static-binaries-for-haskell-a-convoluted-approach/</link>
      <pubDate>Sun, 03 Sep 2017 10:23:51 -0500</pubDate>
      <guid>https://vadosware.io/post/static-binaries-for-haskell-a-convoluted-approach/</guid>
      <description>tl;dr - After a bunch of trial and error, I end up building a mostly static binary from a docker container. With hindsight it was only &amp;ldquo;mostly&amp;rdquo; static because after trying to get sendmail working from haskell code, the getProtocolByName system call was failing, pointing to the fact that there were a bunch of libraries NOT included in the executable I thought was fully static (GHC warned me) that needed to be present in the same form in the deployment container.</description>
    </item>
    <item>
      <title>Graylog as a hslogger backend in Haskell</title>
      <link>https://vadosware.io/post/graylog-as-a-hslogger-backend-in-haskell/</link>
      <pubDate>Wed, 23 Aug 2017 23:43:12 +0900</pubDate>
      <guid>https://vadosware.io/post/graylog-as-a-hslogger-backend-in-haskell/</guid>
      <description>tl;dr - It&amp;rsquo;s pretty easy to use Graylog as a System.Logger backend, check out the code at the end, also if you&amp;rsquo;re interested in just regular crash-level logging with Servant, there&amp;rsquo;s some code you might like at the bottom too.&#xA;On a recent contract I was introduced to Graylog &amp;ndash; it&amp;rsquo;s a pretty awesome log aggregation tool, with a great rontend and I was drawn to the simplicity of use. I encountered some difficulty using it at work, but I found that all the answers made sense after I found the solutions, which is to say that the tool was very internally self-consistent.</description>
    </item>
    <item>
      <title>Ansible Is Awesome</title>
      <link>https://vadosware.io/post/ansible-is-awesome/</link>
      <pubDate>Sun, 20 Aug 2017 16:41:08 +0900</pubDate>
      <guid>https://vadosware.io/post/ansible-is-awesome/</guid>
      <description>tl;dr - There are lots of ways to get smarter about how you deploy. Ansible is one choice, it&amp;rsquo;s not the fanciest, but it&amp;rsquo;s amazing.&#xA;NOTE This is not an introduction to ansible, please check out their official documentation if you want that.&#xA;For most of my projects, I use a GNU Make Makefile based build process. I do that because it&amp;rsquo;s cross-platform, pretty well suppported/known (for people who build software), and easy to standardize on no matter what project I&amp;rsquo;m working on.</description>
    </item>
    <item>
      <title>Stop Using React</title>
      <link>https://vadosware.io/post/stop-using-react/</link>
      <pubDate>Sun, 20 Aug 2017 15:02:32 +0900</pubDate>
      <guid>https://vadosware.io/post/stop-using-react/</guid>
      <description>tl;dr The BSD + PATENTS.md pattern is not F/OSS. Facebook is trying to goad you into entering a mutually assured destruction patent stalemate, but you don&amp;rsquo;t have nukes. They do. Stop using React, there are other better alternatives.&#xA;Before you get into my thoughts, maybe you&amp;rsquo;ll want to look at some other debate from other strangers on the internet: Discussion of Facebook&amp;rsquo;s explanation on HN Discussion on Apache Foundation banning use of React on Reddit</description>
    </item>
    <item>
      <title>Revisiting E2E Testing With Tape (on a new project)</title>
      <link>https://vadosware.io/post/revisiting-e2e-testing-with-tape/</link>
      <pubDate>Mon, 14 Aug 2017 11:05:25 +0900</pubDate>
      <guid>https://vadosware.io/post/revisiting-e2e-testing-with-tape/</guid>
      <description>tl;dr I extend my UI component unit/integration testing methodology to do E2E tests. Look at the code, I basically add lots of nice context-setter-upper functions (that&amp;rsquo;s the official term) that makes it work and make it relatively clean.&#xA;As hinted-to at the end (PS) of my previous post, recently after attempting (and succeeding, mostly) to set up full E2E testing in the backend of a haskell app I&amp;rsquo;m writing, I decided to switch to writing the tests in JS land (instead of Haskell land) due to some lack of library support for PhantomJS/Selenium.</description>
    </item>
    <item>
      <title>End To End Testing With Hspec (Almost)</title>
      <link>https://vadosware.io/post/end-to-end-testing-with-hspec-almost/</link>
      <pubDate>Mon, 14 Aug 2017 09:58:52 +0900</pubDate>
      <guid>https://vadosware.io/post/end-to-end-testing-with-hspec-almost/</guid>
      <description>tl;dr While the setup works, the most mature haskell library for dealing with webdrivers that I could find wasn&amp;rsquo;t able to keep up with the changes in Selenium Webdriver :(. Skim through the post to check out the relevant code snippets and tech that made it all (almost) work.&#xA;If you&amp;rsquo;re not familiar with Haskell, check it out. This isn&amp;rsquo;t an introductory type post so it might not be for you, but the language is amazing.</description>
    </item>
    <item>
      <title>Adding A Merge Patch Content Type To Servant</title>
      <link>https://vadosware.io/post/adding-a-merge-patch-content-type-to-servant/</link>
      <pubDate>Sat, 12 Aug 2017 17:25:54 +0900</pubDate>
      <guid>https://vadosware.io/post/adding-a-merge-patch-content-type-to-servant/</guid>
      <description>*tl;dr See the code at the end&#xA;Very often when developing a web application I run into the age-old problem of how to do partial updates. Doing the &amp;ldquo;U&amp;rdquo; (Update) in CRUD is actually a little more complicated than just accepting PUTs at some endpoint if you dont&amp;rsquo; want to replace the object as a whole. I&amp;rsquo;ve often worked around this while maintaining somewhere-near spec complicance by just using the catch-all that is POST, and taking whatever object represented the update and doing whatever needed to be done.</description>
    </item>
    <item>
      <title>Installing Python On CoreOS with Ansible (to enable Ansible)</title>
      <link>https://vadosware.io/post/installing-python-on-coreos-with-ansible/</link>
      <pubDate>Fri, 11 Aug 2017 17:39:26 +0900</pubDate>
      <guid>https://vadosware.io/post/installing-python-on-coreos-with-ansible/</guid>
      <description>tl;dr - Undestand &amp;amp; use the short Ansible playbook at the bottom of this post&#xA;UPDATE end_play is broken in the latest version of Ansible 2.3, more details at the end of the blog pos&#xA;UPDATE (06/02/2020) A reader named Pat pointed out that now that CoreOS is now FedoraCoreOS it&#39;s much easier to install python: [core@coreos-101 ~]$ sudo rpm-ostree install python3 [core@coreos-101 ~]$ sudo systemctl reboot After rebooting, you should be able to query the python version: [core@coreos-101 ~]$ which python /usr/bin/python [core@coreos-101 ~]$ python --version Python 3.</description>
    </item>
    <item>
      <title>Quick And Dirty Forward-Only DB Migrations</title>
      <link>https://vadosware.io/post/quick-and-dirty-forward-only-db-migrations/</link>
      <pubDate>Wed, 09 Aug 2017 14:30:21 +0900</pubDate>
      <guid>https://vadosware.io/post/quick-and-dirty-forward-only-db-migrations/</guid>
      <description>While working on the The Start (a now defunct project)&amp;rsquo;s jobs backend, I found myself at the age-old problem of how to migrate my database (which is surprisingly SQLite). I looked at tools like flyway, migrate, but they all kind of seemed like more than I needed. If anything I was leaning towards migrate, but flyway is a very well-known and often used solution that it was also pretty appealing. In the end, I decided to just write a quick makefile target (basically a bash script) for a few reasons:</description>
    </item>
    <item>
      <title>An easy fix for the diversity &#34;problem&#34; in tech: A 4-step plan starting with fully anonymized interviews</title>
      <link>https://vadosware.io/post/diversity-ez-fix/</link>
      <pubDate>Tue, 08 Aug 2017 09:13:36 +0900</pubDate>
      <guid>https://vadosware.io/post/diversity-ez-fix/</guid>
      <description>tldr; Re-training people to remove their biases is hard/impossible. Just don&amp;rsquo;t give people a chance to use their biases and you can sidestep the problem completely.&#xA;NOTE I use quotes around the word &amp;ldquo;problem&amp;rdquo; because the primary problem with diversity in tech is almost certainly different depending on who you ask. This is going to be a relatively short non-technical post, but hopefully a meaningful one, as I&amp;rsquo;ve been throwing these ideas around in my head for a while but finally want to write them on paper, and get some feedback.</description>
    </item>
    <item>
      <title>Research Idea: Maintaining A Write Ahead Log For Application Runtime State</title>
      <link>https://vadosware.io/post/research-idea-maintaining-a-write-ahead-log-for-application-runtime-state/</link>
      <pubDate>Mon, 07 Aug 2017 16:58:42 +0900</pubDate>
      <guid>https://vadosware.io/post/research-idea-maintaining-a-write-ahead-log-for-application-runtime-state/</guid>
      <description>tl;dr:What if there was a write-ahead-logging layer above/outside the database? Then you could get CQRS+ES capabilities and assurnaces from your database without rewriting, and even abstract out the database as a whole, going as far as to create your own DSL for application-level changes, ADD_USER instead of INSERT ... INTO USERS ...*&#xA;I spend a bunch of time thinking about how I can waste less time writing applications. Over time I&amp;rsquo;ve worked on various protoypes, with varying levels of completeness, but as I move across languages, frameworks, databases, and stacks, I always find myself solving the same problems, and having the same worries.</description>
    </item>
    <item>
      <title>Case Study: Building A URL Bouncer</title>
      <link>https://vadosware.io/post/case-study-building-a-url-bouncer/</link>
      <pubDate>Sat, 05 Aug 2017 17:32:27 +0900</pubDate>
      <guid>https://vadosware.io/post/case-study-building-a-url-bouncer/</guid>
      <description>tl;dr - Building a simple URL bouncer with Servant isn&amp;rsquo;t that hard, and the usual warm fuzzies you get from well-typed functions, interfaces, and code still apply&#xA;If you&amp;rsquo;re not familiar with Haskell or Servant, the former is a programming language that focuses on pure functional concepts and the latter is one of the most interesting/popular frameworks for it that specializes in exposing your API as a type itself. A brief taste of both of these things is below:</description>
    </item>
    <item>
      <title>Trying And Failing To Expand Servant Cookie-Based Auth With Roles</title>
      <link>https://vadosware.io/post/trying-and-failing-to-expand-cookie-based-auth-with-roles/</link>
      <pubDate>Wed, 26 Jul 2017 19:05:47 +0900</pubDate>
      <guid>https://vadosware.io/post/trying-and-failing-to-expand-cookie-based-auth-with-roles/</guid>
      <description>tl/dr; I tried to expand the cookie-based auth I implemented in servant and failed. While I&amp;rsquo;ll probably try again some other day, for now I just resorted to writing functions to get the functions for a user and do checking directly in my handlers&#xA;Here&amp;rsquo;s the tale of how I tried to add Role checking (based on my application&amp;rsquo;s defined Role type) to my servant app, and ran into a few issues and things I didn&amp;rsquo;t understand and ultimately failed.</description>
    </item>
    <item>
      <title>Stop Worrying And Use Gitlab</title>
      <link>https://vadosware.io/post/stop-worrying-and-use-gitlab/</link>
      <pubDate>Sun, 23 Jul 2017 20:27:58 +0900</pubDate>
      <guid>https://vadosware.io/post/stop-worrying-and-use-gitlab/</guid>
      <description>tldr;instead of now installing/using JIRA, Trello, Github, Jenkins/TravisCI, and Teamcity, I can just install one thing &amp;ndash; Gitlab, spend a little time configuring it, and be ready to take your development process to the next 5 levels (if you&amp;rsquo;re not already there)&#xA;Gitlab 9.4 was just released and I&amp;rsquo;m pretty excited about it. A lot of stuff that Gitlab is doing is really showing that they value empowering developers and pushing ops in The Right Direction (tm) &amp;ndash; for me that means towards automating deployment, and getting smarter about how we ship and test.</description>
    </item>
    <item>
      <title>LetsEncrypt Systemd Recipes</title>
      <link>https://vadosware.io/post/letsencrypt-systemd-recipes/</link>
      <pubDate>Wed, 12 Jul 2017 21:08:47 +0900</pubDate>
      <guid>https://vadosware.io/post/letsencrypt-systemd-recipes/</guid>
      <description>If you&amp;rsquo;re unfamiliar with Let&amp;rsquo;s Encrypt, it&amp;rsquo;s a project (I believe originally sponsored by the EFF) that creates a first of it&amp;rsquo;s kind free automated and open certificate authority. This means administrators who run websites can get free access to SSL certificates. In the past I&amp;rsquo;ve had to go to sites like StartSSL or purchase a certificate from my hosting provider (and of course, some still do), but Let&amp;rsquo;s Encrypt has been wonderful for me (I highly recommend donating to Let&amp;rsquo;s Encrypt).</description>
    </item>
    <item>
      <title>Useful Boilerplate For PureCSS</title>
      <link>https://vadosware.io/post/useful-boilerplate-for-pure-css/</link>
      <pubDate>Sun, 09 Jul 2017 22:55:24 +0900</pubDate>
      <guid>https://vadosware.io/post/useful-boilerplate-for-pure-css/</guid>
      <description>I very often use PureCSS because it&amp;rsquo;s a pretty reasonable &amp;ldquo;micro&amp;rdquo; CSS Framework and has some clean styling. There are lots of other options of course, like skeleton, but I generally find myself gravitating towards Pure for most projects. While working on projects of mine that use pure for styling though, I find myself adding some odds and ends to it, so I figured I might as well share:&#xA;/******************/ /* Pure Overrides */ /******************/ .</description>
    </item>
    <item>
      <title>Adding Cookie Based Auth To Servant</title>
      <link>https://vadosware.io/post/adding-cookie-based-auth-to-servant/</link>
      <pubDate>Fri, 07 Jul 2017 23:40:25 +0900</pubDate>
      <guid>https://vadosware.io/post/adding-cookie-based-auth-to-servant/</guid>
      <description>One of the applications I&amp;rsquo;ve been working on exclusively lately is a surprisingly large Job Board application. Not the most exciting concept, I know, but it&amp;rsquo;s quickly becoming the culmination of some of the best development (and consequently &amp;ldquo;engineering&amp;rdquo;) work that I&amp;rsquo;ve ever done. The codebase is growing huge &amp;ndash; 11,000+ lines counting both front and backend code, and while I haven&amp;rsquo;t gone on any large refactoring sprees, most of the code does not make me feel bad.</description>
    </item>
    <item>
      <title>JS component-centric libraries and my rationale for considering MithrilJS</title>
      <link>https://vadosware.io/post/js-component-libraries-and-why-i-am-considering-mithril-js/</link>
      <pubDate>Sun, 30 Apr 2017 16:01:16 +0900</pubDate>
      <guid>https://vadosware.io/post/js-component-libraries-and-why-i-am-considering-mithril-js/</guid>
      <description>JS component-centric libraries, and why I&amp;rsquo;m considering MithrilJS for some major work Recently I&amp;rsquo;ve picked up a contract that requires taking a relatively old server-side rendered codebase with some JS bolted on to a more &amp;ldquo;modern&amp;rdquo; front end javascript stack. As those who do front end will immediately notice, just the notion of a &amp;ldquo;modern&amp;rdquo; front end JS &amp;ldquo;stack&amp;rdquo; can mean so many things (when it probably shouldn&amp;rsquo;t). There is a plethora of approaches, libraries, frameworks, ideologies to be found on the front end (possibly representative of programming in any niche as a whole).</description>
    </item>
    <item>
      <title>Working with PDFs on Arch linux</title>
      <link>https://vadosware.io/post/2017-04-16-working-with-pdfs-on-arch-linux/</link>
      <pubDate>Sun, 16 Apr 2017 13:23:12 +0900</pubDate>
      <guid>https://vadosware.io/post/2017-04-16-working-with-pdfs-on-arch-linux/</guid>
      <description>Working with PDFs on arch linux tldr; If you&amp;rsquo;re on arch, not all hope is lost when trying to deal with PDFs. pdfunite is out there for combining PDFs, Firefox is surprisingly helpful since is uses pdf.js, pdftk is there if you&amp;rsquo;re down with downloading the dependencies, convert is available for paring down scanned images, and ultimately, any software you can run on ubuntu can run on arch with a little docker.</description>
    </item>
    <item>
      <title>Getting started with servant, Part 2</title>
      <link>https://vadosware.io/post/getting-started-with-servant-part-2/</link>
      <pubDate>Sun, 16 Apr 2017 12:50:13 +0900</pubDate>
      <guid>https://vadosware.io/post/getting-started-with-servant-part-2/</guid>
      <description>Getting started with servant, part 2 tldr; Use enter to inject database information, monads and monad transformers rear their ugly heads but not for long.&#xA;Multi-part blog post alert This is a multi-part blog-post!&#xA;Part 1 - Getting Started with servant Part 2 - Getting Started with servant, Part 2 What are the ways to pass database information into an application using servant? From what I can tell, there are 3 main approaches to getting the database management object (whatever that is) into the app:</description>
    </item>
    <item>
      <title>Getting started with servant (Part 1)</title>
      <link>https://vadosware.io/post/getting-started-with-servant/</link>
      <pubDate>Sun, 16 Apr 2017 11:23:57 +0900</pubDate>
      <guid>https://vadosware.io/post/getting-started-with-servant/</guid>
      <description>Getting started with Servant tldr; Haskell cool, Servant is awesome, and is a really interesting way to represent APIs in a way blessed by Haskell&amp;rsquo;s enormously powerful type system. Starting with it can be kind of difficult, but it&amp;rsquo;s a good kind of mind-bending.&#xA;Multi-part blog post alert This is a multi-part blog-post!&#xA;Part 1 - Getting Started with servant Part 2 - Getting Started with servant, Part 2 Background Recently I&amp;rsquo;ve been working on a project called The Start (Project now defunct), which is meant to be a job board targeting some niches job markets in Tokyo/Japan.</description>
    </item>
    <item>
      <title>Three month (coding) bootcamps are not enough</title>
      <link>https://vadosware.io/post/three-month-bootcamps-are-not-enough/</link>
      <pubDate>Wed, 08 Mar 2017 14:46:07 +0900</pubDate>
      <guid>https://vadosware.io/post/three-month-bootcamps-are-not-enough/</guid>
      <description>Three month coding bootcamps just aren&amp;rsquo;t enough to learn just frontend, nevermind the whole web stack DISCLAIMER: I have never been through a code school &amp;ndash; I graduated from a 4 year university, had amazing professors, did terrible in some classes while learning a lot (and well in some classes while learning very little). I got an internship early on and got used to writing code for enterprise pretty early, and it eased my transition into the workforce immensely.</description>
    </item>
    <item>
      <title>Spotify&#39;s 2017 web app redesign</title>
      <link>https://vadosware.io/post/spotifys-2017-web-app-redesign/</link>
      <pubDate>Tue, 07 Mar 2017 23:00:43 +0900</pubDate>
      <guid>https://vadosware.io/post/spotifys-2017-web-app-redesign/</guid>
      <description>Spotify&amp;rsquo;s 2017 Redesign tldr; I love Spotify&amp;rsquo;s web app redesign, and while some features I did like are missing, they were not fully fleshed out so maybe Spotify is working on improvements before they return.&#xA;I logged in to Spotify&amp;rsquo;s web app recently and noticed an all-new redesign of the site. Of course, as soon as I logged in I was prety taken aback, because the new design is very different from what existed before it, and took a second for my eyes to get adjusted to.</description>
    </item>
    <item>
      <title>Switching from Mocha to Tape and testing E2E</title>
      <link>https://vadosware.io/post/switching-from-mocha-to-tape-and-testing-e2e/</link>
      <pubDate>Wed, 01 Feb 2017 11:29:58 +0900</pubDate>
      <guid>https://vadosware.io/post/switching-from-mocha-to-tape-and-testing-e2e/</guid>
      <description>Switching from Mocha to Tape &amp;amp; testing E2E Before reading this post, it might make sense to check out my previous posts on the topic:&#xA;Part 1 - Unit testing with JSPM, Mocha, and Vue.js Part 2 - More testing with JSPM, Mocha, and Vue.js Part 3 - Testing the DOM Part 4 - Switching from mocha to tape BONUS Want to see it all working? Check out the gitlab repo with a fully-built example</description>
    </item>
    <item>
      <title>Testing DOM with Mocha, part 3</title>
      <link>https://vadosware.io/post/testing-dom-with-mocha-part-3/</link>
      <pubDate>Tue, 31 Jan 2017 11:55:55 +0900</pubDate>
      <guid>https://vadosware.io/post/testing-dom-with-mocha-part-3/</guid>
      <description>Doing DOM-level tests with Mocha &amp;amp; VueJS (part 3&amp;hellip;ish) Before reading this post, it might be helpful to check out my previous (or other) posts on the topic:&#xA;Part 1 - Unit testing with JSPM, Mocha, and Vue.js Part 2 - More testing with JSPM, Mocha, and Vue.js Part 3 - Testing the DOM Part 4 - Switching from mocha to tape BONUS Want to see it all working? Check out the gitlab repo with a fully-built example</description>
    </item>
    <item>
      <title>Using dockerized Ghost with local SMTP</title>
      <link>https://vadosware.io/post/using-dockerized-ghost-with-local-smtp/</link>
      <pubDate>Tue, 31 Jan 2017 11:42:37 +0900</pubDate>
      <guid>https://vadosware.io/post/using-dockerized-ghost-with-local-smtp/</guid>
      <description>Getting a dockerized instance of Ghost to use local SMTP When handling mail for a ghost instance, the official recommendation of the Ghost team is to use Mailgun. Since I have email set up on the server on which I&amp;rsquo;m running Ghost, despite the fact that Mailgun offers a pretty good free tier of services, it seems pretty extraneous/unnecessary to use mailgun just to send email from my own server. Of course, this ignores the effort that it takes to set up things like postfix, dovecot, and opendkim, but I digress.</description>
    </item>
    <item>
      <title>Issues with Thunderbird and Dovecot</title>
      <link>https://vadosware.io/post/issues-with-thunderbird-and-dovecot/</link>
      <pubDate>Tue, 31 Jan 2017 11:11:36 +0900</pubDate>
      <guid>https://vadosware.io/post/issues-with-thunderbird-and-dovecot/</guid>
      <description>Issues with TLS auth while Setting up Dovecot &amp;amp; Thunderbird Recently while doing some server-administration tasks (setting up the server, enabling email, TLS, etc) on a Ubuntu 14.04 system, I ran into some problems with dovecot. For some reason, no matter what I tried, I could not get Thunderbird to auto-configure properly with the newly stood up web server&amp;rsquo;s SMTP server (postfix + dovecot).&#xA;Maybe interesting to note that I never really had these issues on Arch Linux servers that I mentain&amp;hellip; maybe the starting documents/wiki is just that much better/more thorough.</description>
    </item>
    <item>
      <title>more testing with jspm mocha and vuejs</title>
      <link>https://vadosware.io/post/more-testing-with-jspm-mocha-and-vuejs/</link>
      <pubDate>Fri, 13 Jan 2017 15:57:23 +0900</pubDate>
      <guid>https://vadosware.io/post/more-testing-with-jspm-mocha-and-vuejs/</guid>
      <description>Testing with Mocha and JSPM (and SystemJS), continued So after messing with my testing set up for a while, I found that there was a little more setup required to get my components to test properly with mocha.&#xA;tldr; some more setup is required to get the code in the previous blog post to work properly, check it out below:&#xA;Multi-part blog post alert This is a multi-part blog-post!&#xA;Part 1 - Unit testing with JSPM, Mocha, and Vue.</description>
    </item>
    <item>
      <title>Unit testing with JSPM (SystemJS), mocha and vue.js</title>
      <link>https://vadosware.io/post/testing-with-jspm-mocha-and-vuejs/</link>
      <pubDate>Thu, 12 Jan 2017 20:26:43 +0900</pubDate>
      <guid>https://vadosware.io/post/testing-with-jspm-mocha-and-vuejs/</guid>
      <description>Testing with Mocha and JSPM (and SystemJS) While vue offers a decent starting point for testing in it&amp;rsquo;s guide, I found the guide a little lacking in actual how-to. Also, one of my favorite javascript testing tools is mocha, and the specifics on how to integrate it (or jspm for that matter) are not on the site. Of course, it&amp;rsquo;s not the vue.js team&amp;rsquo;s job to integrate everyone&amp;rsquo;s tooling with vue.</description>
    </item>
    <item>
      <title>Using jspm, systemjs, and vuejs together</title>
      <link>https://vadosware.io/post/using-jspm-systemjs-and-vuejs-together/</link>
      <pubDate>Fri, 06 Jan 2017 10:33:07 +0900</pubDate>
      <guid>https://vadosware.io/post/using-jspm-systemjs-and-vuejs-together/</guid>
      <description>Using JSPM, SystemJS, and Vue.JS together tldr; There isn&amp;rsquo;t much much vue-with-jspm support outside of the systemjs-plugin-vue, so I made a thing that compiles jspm templates from html files, and JSPM+VUE is really working for me. Also, Vue.JS is the view library people should recommend to beginners. Not React.&#xA;Lots of words about JSPM It looks like jspm isn&amp;rsquo;t winning the mindshare of new JS developers these days. Though I&amp;rsquo;m not sure I can blame anyone for not having mindshare left to give, with the constant onslaught of new libraries, frameworks, doodads and what-have-yous that pop up from day to day.</description>
    </item>
    <item>
      <title>Default docker settings on arch</title>
      <link>https://vadosware.io/post/default-docker-settings-on-arch/</link>
      <pubDate>Fri, 06 Jan 2017 10:19:29 +0900</pubDate>
      <guid>https://vadosware.io/post/default-docker-settings-on-arch/</guid>
      <description>Default Docker settings on ArchLinux RTFM. Seriously. The Arch Wiki is seriously one of the most informative wikis I&amp;rsquo;ve ever read, and has excellent guides. If I had read it closer, I would have avoided one problem I&amp;rsquo;m about to explain below.&#xA;Change the default filesystem While running on a VPS, I ran into problems deleting containers that were once functional when I was using the default devicemapper driver. The fix for this was simple (and also in the arch manual), and basically consisted of changing the default file system driver to overlayfs.</description>
    </item>
    <item>
      <title>Moving from catalyst/fglrx to amdgpu</title>
      <link>https://vadosware.io/post/moving-from-catalyst-fglrx-to-amdgpu/</link>
      <pubDate>Fri, 06 Jan 2017 10:09:31 +0900</pubDate>
      <guid>https://vadosware.io/post/moving-from-catalyst-fglrx-to-amdgpu/</guid>
      <description>Moving from catalyst/fglrx to AMDGPU This is a post I wrote a while back, that also got cross-posted on a github issue, detailing my struggles replacing catalyst/fglrx with AMDGPU on arch linux. Thought I should leave a copy of it here, just in case Github dissappears one day. Note this post is basically a copy-pasta of the Github issue response (which is a copy pasta of what I wrote down).</description>
    </item>
    <item>
      <title>Moving to Hugo from Wordpress</title>
      <link>https://vadosware.io/post/moving-to-hugo-from-wordpress/</link>
      <pubDate>Thu, 05 Jan 2017 14:44:26 +0900</pubDate>
      <guid>https://vadosware.io/post/moving-to-hugo-from-wordpress/</guid>
      <description>Moving from Hugo to Wordpress This post is one I wrote a while back but never published, as I&amp;rsquo;ve found some free time now, I&amp;rsquo;m going through and putting together posts that I jotted down but never got to publishing.&#xA;tldr; I picked Hugo and used SchumacherFM/wordpress-to-hugo-exporter to transfer everything from my wordpress site.&#xA;Picking a static site generator The blog you&amp;rsquo;re looking at right now (as of January 2017) is a staticly generated site generated with Hugo.</description>
    </item>
    <item>
      <title>EZ Wordpress instance with docker compose</title>
      <link>https://vadosware.io/post/ez-wordpress-with-docker-compose/</link>
      <pubDate>Thu, 05 Jan 2017 14:26:00 +0900</pubDate>
      <guid>https://vadosware.io/post/ez-wordpress-with-docker-compose/</guid>
      <description>Setting up an instance of Wordpress easily with Docker Compose This post is one I wrote a while back but never published, as I&amp;rsquo;ve found some free time now, I&amp;rsquo;m going through and putting together posts that I jotted down but never got to publishing.&#xA;tldr; Wordpress in a container, full docker compose file is @ the bottom&#xA;Wordpress is one of (if not the) best open source Content Management Systems (CMS) out there.</description>
    </item>
    <item>
      <title>systemd service that runs docker</title>
      <link>https://vadosware.io/post/systemd-service-that-runs-docker/</link>
      <pubDate>Wed, 04 Jan 2017 13:04:48 +0900</pubDate>
      <guid>https://vadosware.io/post/systemd-service-that-runs-docker/</guid>
      <description>Setting up a systemd service that runs a docker container This post is one I wrote a while back but never published, as I&amp;rsquo;ve found some free time now, I&amp;rsquo;m going through and putting together posts that I jotted down but never got to publishing.&#xA;After setting up my new KVM-enabled VPS, getting the database and initial docker setup all taken care of, and running once (manually starting all the services and docker containers), I looked to make the configuration restart-resistant.</description>
    </item>
    <item>
      <title>docker nginx firewall postgres random setup notes</title>
      <link>https://vadosware.io/post/docker-nginx-firewall-postgres-random-setup-notes/</link>
      <pubDate>Wed, 04 Jan 2017 12:23:04 +0900</pubDate>
      <guid>https://vadosware.io/post/docker-nginx-firewall-postgres-random-setup-notes/</guid>
      <description>Some random notes on getting docker, nginx, your firewall and postres to play nicely (if they aren&amp;rsquo;t) This post is one I wrote a while back (as a follow up to the KVM post) but never published, as I&amp;rsquo;ve found some free time now, I&amp;rsquo;m going through and putting together posts that I jotted down but never got to publishing.&#xA;After setting up my KVM-enabled VPS with Arch Linux, it came time to start moving over the deployments of my applications.</description>
    </item>
    <item>
      <title>From zero to kvm docker application</title>
      <link>https://vadosware.io/post/from-zero-to-kvm-docker-application/</link>
      <pubDate>Wed, 21 Dec 2016 16:48:11 +0900</pubDate>
      <guid>https://vadosware.io/post/from-zero-to-kvm-docker-application/</guid>
      <description>From zero to reasonably secure dockerized appliation running on a KVM VPS This post is one I&amp;rsquo;ve had written for a while but never published, as I&amp;rsquo;ve found some free time now, I&amp;rsquo;m going through and putting together posts that I jotted down but never got to publishing. This one was written when I ran into issues goign from an OpenVZ powered VPS to a KVM one, since I wanted to use docker to simplify my deployments a little bit (why I did so is a whole nother discussion, for another time).</description>
    </item>
    <item>
      <title>I moved all my projects to Gitlab, and you should too</title>
      <link>https://vadosware.io/2016/03/05/i-moved-all-my-projects-to-gitlab-and-you-should-too/</link>
      <pubDate>Sat, 05 Mar 2016 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2016/03/05/i-moved-all-my-projects-to-gitlab-and-you-should-too/</guid>
      <description>… Or you shouldn’t. I don’t know, I’m just a random person on the internet. Don’t let random internet blog posts make your decisions for you, carefully weigh the options and decide what’s right for you. Or don’t.&#xA;Disclaimers aside, many people have brought up the fact that despite hosting much of the best open source code on the planet, Github itself was not open source. Recently there was quite a rustling over an open letter to Github, which seemingly spurred Github to make all the actions they were taking to make the platform greater more publicly accessible.</description>
    </item>
    <item>
      <title>Arch Adventures: Changing the volume with the buttons on a Logitech G930 Headset</title>
      <link>https://vadosware.io/2016/02/16/arch-adventures-changing-the-volume-with-the-buttons-on-a-logitech-g930-headset/</link>
      <pubDate>Tue, 16 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2016/02/16/arch-adventures-changing-the-volume-with-the-buttons-on-a-logitech-g930-headset/</guid>
      <description>tldr; I wrote a small script in python to use alsa command line tools to change the volume on my headset. A tool already exists that if faster and more robust. I should switch, but will I? who knows :).&#xA;I own and (mostly) happily use a Logitech G930:&#xA;While the support under linux is pretty good already (most buttons work, and perform their intended functions), I recently got fed up with the fact that the little scroll wheel on the G930 wasn’t actually changing the volume.</description>
    </item>
    <item>
      <title>Fx0 FirefoxOS device goes on sale!</title>
      <link>https://vadosware.io/2016/02/13/fx0-firefoxos-device-goes-on-sale/</link>
      <pubDate>Sat, 13 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2016/02/13/fx0-firefoxos-device-goes-on-sale/</guid>
      <description>So the Fx0 is one of the best designed and best performing FirefoxOS phone that was ever made — and it’s been put under super heavy discount, following mozilla announcing the shift in focus from phones to IoT.&#xA;If you’re looking to buy one, feel free to head over to Amazon (they’re currently selling for ~$50, when in the past I saw them up there for roughly $800):&#xA;http://www.amazon.com/gp/product/B00UULNTHK&#xA;Naturally I bought 4 when I realized this awesome phone (that I actually went to japan to try and buy from AU, the carrier that had it) was available.</description>
    </item>
    <item>
      <title>Using Mocha with JSPM</title>
      <link>https://vadosware.io/2016/01/02/using-mocha-with-jspm/</link>
      <pubDate>Sat, 02 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2016/01/02/using-mocha-with-jspm/</guid>
      <description>A disturbing amount of open (and closed) source javascript projects that I’ve worked on are severely lacking in tests, whether unit or otherwise. Of course, I do find time to click around the apps and make sure they basically work, and while I find that works for smaller apps, it’s obvious that if you want long-term stability, and any one to even take a look at your app, one of the most basic requirements is having properly functioning tests.</description>
    </item>
    <item>
      <title>Arch Adventures: Installing Steam on Arch Linux</title>
      <link>https://vadosware.io/2015/12/13/arch-adventures-installing-steam-on-arch-linux/</link>
      <pubDate>Sun, 13 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/12/13/arch-adventures-installing-steam-on-arch-linux/</guid>
      <description>When I first set up my current desktop, I spent some time looking around for a new linux distribution to choose and try out. At the time I was impressed with the look and UX of Linux Mint, and decided to give it a try. At that time (I think this is no longer true), Linux Mint couldn’t do kernel updates in-place (you had to re-install the entire OS from LiveCD).</description>
    </item>
    <item>
      <title>Fixing emoji display in Firegraph</title>
      <link>https://vadosware.io/2015/11/21/fixing-emoji-display-in-firegraph/</link>
      <pubDate>Sat, 21 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/11/21/fixing-emoji-display-in-firegraph/</guid>
      <description>I recently ran into the issue of emoji that I was sure FirefoxOS had already implemented not showing up in my app (Firegraph).&#xA;Many of the Instagram comments that were being displayed were filled with little boxes with numbers in them, despite the many emojis that are implemented already, as described in a blog post on Emoji by Patryk on the Mozilla UX team.&#xA;After a few web searches to try and determine what was causing this, I realized that the problem was that I was using the incorrect font (or maybe an outdated version of gaia styling).</description>
    </item>
    <item>
      <title>A case for using Pure over Skeleton</title>
      <link>https://vadosware.io/2015/11/20/a-case-for-using-pure-over-skeleton/</link>
      <pubDate>Fri, 20 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/11/20/a-case-for-using-pure-over-skeleton/</guid>
      <description>tldr; I started on a project using Skeleton, but realized skeleton’s smallest supported screen size is 550px (as per their media queries), and switched to PureCSS.&#xA;If you’re familiar with the front-end development scene, you’re most likely also familiar with the amount of churn, new frameworks, and libraries that come around. One of the places that also has a relatively high amount of seemingly new thought pouring into tooling/libraries is front-end frameworks.</description>
    </item>
    <item>
      <title>Building B2G (FirefoxOS) for a Nexus 5</title>
      <link>https://vadosware.io/2015/11/20/building-b2g-firefoxos-for-a-nexus-5/</link>
      <pubDate>Fri, 20 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/11/20/building-b2g-firefoxos-for-a-nexus-5/</guid>
      <description>So recently I’ve been working on porting B2G to a Huawei Softbank 201HW/U9201L phone. While doing so, however, I had the minor setback of bricking the phone. This is a brick in the sense that the device goes into an infinite boot loop, right after starting up — as soon as it starts up, it determines it needs to restart.&#xA;As that project might actually take a long time to complete (I’m currently at the point of trying to manufacture a ClockWorkMod-compatible image that would fix what is broken on th phone, which currently seems to be a bunch of missing symlinks), I recently bought myself a Nexus 5.</description>
    </item>
    <item>
      <title>Rooting the Huawei (Softbank) 201HW/U9201L</title>
      <link>https://vadosware.io/2015/10/25/rooting-the-huawei-softbank-201hwu9201l/</link>
      <pubDate>Sun, 25 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/10/25/rooting-the-huawei-softbank-201hwu9201l/</guid>
      <description>Recently, during a trip to Japan, my FirefoxOS Flame‘s backlight decided to go out in a blaze of glory.&#xA;Upon opening the device up, I found that the ribbon (as well as the connector) for the device had burn marks on them, and thought that might be the cause of the issue (some sort of short, I assume). Luckily, there is actually ongoing service for the FirefoxOS Flame, all you have to do is to send an email to flameservice@thundersoft.</description>
    </item>
    <item>
      <title>Absurdly useful tooling: entr &#43; make (&#43; find)</title>
      <link>https://vadosware.io/2015/10/16/absurdly-useful-tooling-entr-make-find/</link>
      <pubDate>Fri, 16 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/10/16/absurdly-useful-tooling-entr-make-find/</guid>
      <description>After the recent rise of task-management related tools like Grunt, Gulp, and Broccoli, I’ve often wonered if there was an easier way to implement some of the most useful features that those tools provide: watch (of course, watch is not the only thing that these libraries provide, but is often the most unique/useful).&#xA;Grunt, Gulp and Broccoli are wonderful tools, and these days basically come hand-in-hand with front-end development, however there are various downsides to installing/using them.</description>
    </item>
    <item>
      <title>Arch Adventures: Hibernating to swap file</title>
      <link>https://vadosware.io/2015/10/15/arch-adventures-hibernating-to-swap-file/</link>
      <pubDate>Thu, 15 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/10/15/arch-adventures-hibernating-to-swap-file/</guid>
      <description>Welcome to first (of hopefully many) entries about my adventures using Arch Linux, which will most likely consist of me breaking things, then looking at documentation, then reading guides, then fixing the things I broke. Lots of things happened today (they’re going to be subjects of other blog posts), but one thing I just got through doing was creating a swap file for suspend-to-disk (hibernate) to use.&#xA;Long story short, my phone died, and inbetween getting getting another one, my new laptop (which I like a lot) is going to be the only way I can keep in contact with people.</description>
    </item>
    <item>
      <title>Fun with Arch Linux</title>
      <link>https://vadosware.io/2015/10/08/fun-with-arch-linux/</link>
      <pubDate>Thu, 08 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/10/08/fun-with-arch-linux/</guid>
      <description>I recently put Arch Linux on a newly purchased ASUS Zenbook, mostly due to a general feeling of bloat coming from my desktops ~3 year old Linux Mint installation. I’ve always admired distributions like Arch and Slackware for their no-frills approach and seemingly seriously-into-linux userbase. I’ve also been itching to try an arch instlalation with XFCE4 (my desktop’s mint installation didn’t quite play well with XFCE4 for some reason or another).</description>
    </item>
    <item>
      <title>Why is there a debate about ad-blockers at all?</title>
      <link>https://vadosware.io/2015/10/04/why-is-there-a-debate-about-ad-blockers-at-all/</link>
      <pubDate>Sun, 04 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/10/04/why-is-there-a-debate-about-ad-blockers-at-all/</guid>
      <description>Disclaimer:&#xA;The opinions written here do not reflect those of my current employer, or any previous employers. These opinions are solely my own.&#xA;This started as a comment on Hacker News, but the thread it was in didn’t deserve such a rambling comment.&#xA;Figured my blog would be a better place to put it:&#xA;I don’t understand why there is a “debate” about ad blocking at all. No advertising company has the right to determine how I use my personal computer.</description>
    </item>
    <item>
      <title>Using JSPM, ES6 React, and React-Router</title>
      <link>https://vadosware.io/2015/09/13/using-jspm-es6-react-and-react-router/</link>
      <pubDate>Sun, 13 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/09/13/using-jspm-es6-react-and-react-router/</guid>
      <description>I recently started the process of porting an Angular 1.x web app I had to React (ES6, package managed with JSPM), and am having a pretty good time writing the code for the app. This was less of a port and more of a complete re-write (as none of the code from the angular version is really re-usable, per say).&#xA;If you’re not familiar with ES6/ES2015 features, I highly recommend Mozilla’s blog series on ES6 Features, written (in most part) by Jason Orendorff.</description>
    </item>
    <item>
      <title>Who still fiddles with Samba in 2015?</title>
      <link>https://vadosware.io/2015/08/19/who-still-fiddles-with-samba-in-2015/</link>
      <pubDate>Wed, 19 Aug 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/08/19/who-still-fiddles-with-samba-in-2015/</guid>
      <description>I do (still fiddle with samba in 2015)!&#xA;Don’t know what Samba is?&#xA;tldr; It provides file and print functionality over networks, providing inter-operability with protocols adopted by windows.&#xA;tldr;tldr; Access linux files from windows and vice-versa&#xA;I recently had the misfortune of having to redo my smb.conf (Samba configuration) on my Raspberry Pi and ran into some issues getting everything running smoothly. After lots and lots of internet searches, and conferring with a friend that&amp;rsquo;s pretty amazing at networking, I finally got it working.</description>
    </item>
    <item>
      <title>Emacs in daemon mode is awesome, when it properly loads your init config</title>
      <link>https://vadosware.io/2015/08/18/emacs-in-daemon-mode-is-awesome-when-it-properly-loads-your-init-config/</link>
      <pubDate>Tue, 18 Aug 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/08/18/emacs-in-daemon-mode-is-awesome-when-it-properly-loads-your-init-config/</guid>
      <description>I’ve recently made the switch to using Emacs in Daemon mode.&#xA;The primary benefit (for me) is super quick boot up time — and it’s been wonderful, except I ran into the problem today of having a large set of my configuration not working. A bunch of my trusty keybinds were gone, some packages weren’t loaded, and this led to sessions started with emacsclient -t not feeling quite like home.</description>
    </item>
    <item>
      <title>Firegraph v0.1.0</title>
      <link>https://vadosware.io/2015/07/28/firegraph-v0-1-0/</link>
      <pubDate>Tue, 28 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/07/28/firegraph-v0-1-0/</guid>
      <description>Splash screen for Firegraph Instagram API login for Firegraph Random picture Firegraph Sidebar navigation inside Firegraph After months of on and off development, I’m finally releasing version 0.1.0 of Firegraph.&#xA;Firegraph is a FirefoxOS read-only (due to some API key restrictions) packaged webapp for accessing Instagram. While staggeringly incomplete, it does offer basic feed viewing functionality for users that download it, and that I’m proud of!&#xA;Why in the world would I make an Instagram app for FirefoxOS?</description>
    </item>
    <item>
      <title>WebAssembly, and the rise of transpilation</title>
      <link>https://vadosware.io/2015/06/23/webassembly-and-the-rise-of-transpilation/</link>
      <pubDate>Tue, 23 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/06/23/webassembly-and-the-rise-of-transpilation/</guid>
      <description>Recently (a few weeks ago?) WebAssembly was annouced.&#xA;I glossed over the announcement the first time I saw it, but after a few weeks and some time to digest (along with being distracted by other things, like starting a new job, and being funemployed), this story has landed on my doorstep again. This time through, however, The words are jumping off the page and it finally makes great sense to me.</description>
    </item>
    <item>
      <title>Cache busting with SystemJS/Aurelia</title>
      <link>https://vadosware.io/2015/05/17/cache-busting-with-systemjsaurelia/</link>
      <pubDate>Sun, 17 May 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/05/17/cache-busting-with-systemjsaurelia/</guid>
      <description>Today I wasted a whole bunch of hours struggling with caching at the front-end and backend of an application that I am developing — so I figured I would put what I ran into here to help other lost souls.&#xA;What I’m developing is an Aurelia based app, with a Flask backend.&#xA;After getting my Flask application set up to serve static files (which was surprisingly hard to discovery, mostly because flask prefers to have static files served from somewhere else, like NGINX), I was failing to see instant changes to my app.</description>
    </item>
    <item>
      <title>Bringing a “native” Instagram client to FirefoxOS</title>
      <link>https://vadosware.io/2015/05/11/bringing-a-native-instagram-client-to-firefoxos/</link>
      <pubDate>Mon, 11 May 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/05/11/bringing-a-native-instagram-client-to-firefoxos/</guid>
      <description>One of the latest projects I’ve been working on is making a Instagram client for FirefoxOS, written with EmberJS. It’s called Firegraph (not the greatest name, I know, but not being able to use the words “insta” and “gram” made it pretty hard to come up with a name that at least hinted at what the app is supposed to do…).&#xA;Why would you make an Instagram client for FirefoxOS, when there’s already a web application, you ask?</description>
    </item>
    <item>
      <title>VCFPorter v1.2 Release!</title>
      <link>https://vadosware.io/2015/01/14/vcfporter-v1-2-release/</link>
      <pubDate>Wed, 14 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2015/01/14/vcfporter-v1-2-release/</guid>
      <description>Version 1.2 is officially out!&#xA;After a bad review by user regis on Firefox marketplace, I set off to attempt and find and fix the issues that was causing VCFPorter to crash. Since the issue happened when importing VCFs from ownCloud (a use-case I definitely didn’t see coming), I looked into OwnCloud’s VCF files and what their basic included fields looked like. They were more involved than I was expecting, and so some of the field generated errors in the parsing code from v1.</description>
    </item>
    <item>
      <title>A pattern for organizing *DD tests in golang</title>
      <link>https://vadosware.io/2014/12/29/a-pattern-for-organizing-dd-tests-in-golang/</link>
      <pubDate>Mon, 29 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/12/29/a-pattern-for-organizing-dd-tests-in-golang/</guid>
      <description>tl;dr – If you have a single package with lots of files, but want separate ginkgo suites, create packages for your tests and you can write your Ginkgo suites in those packages instead, and get beautiful isolation and nice orderly test-run output.&#xA;UPDATE – Looks like putting suites in their own packages has a negative effect — it messes up coverage numbers, and makes running ginkgo (with -r and –cover) fail due to Go not finding buildable Go source files.</description>
    </item>
    <item>
      <title>Small fix to the R2D2B2G extension</title>
      <link>https://vadosware.io/2014/12/15/small-fix-to-the-r2d2b2g-extension/</link>
      <pubDate>Mon, 15 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/12/15/small-fix-to-the-r2d2b2g-extension/</guid>
      <description>I recently ran into a problem with (I thought) mozRepl, which turned out to be a problem with a completely unrelated extension, r2d2b2g that was on my system.&#xA;So, for some reason, mozRepl wasn’t working and I couldn’t telnet into it (`telnet localhost 4242` should be all it takes). I was wondering why that could possibly be, stopping it, restarting, restarting firefox, trying again.&#xA;After I couldn’t figure out what I was doing wrong, I figured it might be Firefox that was going wrong, so I started firefox from a shell, and watched the output.</description>
    </item>
    <item>
      <title>Go’s default testing package is not enough</title>
      <link>https://vadosware.io/2014/12/08/gos-default-testing-package-is-not-enough/</link>
      <pubDate>Mon, 08 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/12/08/gos-default-testing-package-is-not-enough/</guid>
      <description>The next project in the pipeline is CasGo, an SSO server implementing the CAS protocol developed at Yale.&#xA;I decided to do this project in Go, as I didn’t have any large projects in Go yet, and have been reading a lot of literature and watching lots of videos about it. It seems to be fast becoming the perfect bridge between scripting and more traditional languages, perfect for use in lots of devops environments, and high performance/flexibility low-verbosity areas.</description>
    </item>
    <item>
      <title>Keep calm and watch Javascript churn</title>
      <link>https://vadosware.io/2014/12/01/keep-calm-and-watch-it-churn/</link>
      <pubDate>Mon, 01 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/12/01/keep-calm-and-watch-it-churn/</guid>
      <description>A thought-provoking (as much as it is revealing/elucidating) article was posted on HN recently (The State of Javascript in 2015) and I can’t resist dropping my own opinion into the fray.&#xA;This post was going to be a comment on the hackernews discussion, but I figured I would make it a blog post since I think it’s a thought worth writing down.&#xA;Iteration produces/necessitates churn.&#xA;Web/Javascript development is one of the most (if not the most) active areas of consumer-facing programming today, and we have unprecedented access to the software crafting processes of others.</description>
    </item>
    <item>
      <title>Announcing VCFPorter v1.1</title>
      <link>https://vadosware.io/2014/11/27/announcing-vcfporter-v1-1/</link>
      <pubDate>Thu, 27 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/11/27/announcing-vcfporter-v1-1/</guid>
      <description>After much (close to zero) fanfare, VCFPorter 1.1 has been released!&#xA;Check it out on the VCFPorter marketplace page&#xA;Here are the changes in v1.1:&#xA;Small bugfixes in this release&#xA;Already-parsed file was not properly redirecting to select contacts view Fix small typo in code for handling categories Fix slack space on left and right in vcf file and contact lists Fixed issue #18 (select/deselect not updating lists in UI) Personal notes: After a pleasant experience developing the app and publishing it to the FirefoxOS marketplace, I received a review (and am super grateful to have anyone even use the app, much less leave a review with some pointers on what to fix) from a user that noticed the (very noticable) bug affecting select/deselect all buttons.</description>
    </item>
    <item>
      <title>VCFPorter, an open-source cross-platform Ember app for importing contacts (vCard) on FirefoxOS</title>
      <link>https://vadosware.io/2014/11/19/vcfporter-an-open-source-cross-platform-ember-app-for-importing-contacts-vcard-on-firefoxos/</link>
      <pubDate>Wed, 19 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/11/19/vcfporter-an-open-source-cross-platform-ember-app-for-importing-contacts-vcard-on-firefoxos/</guid>
      <description>VCFPorter is a cross platform (exactly two platforms, web and FFOS, technically) for parsing and important contacts from a vCard. Some of you might be thinking to yourselves: “Why in the world would you re-create functionality that FirefoxOS already ships with?”&#xA;Short answer: I’m dumb&#xA;Long answer: I don’t think it was around quite as I liked it when I first got my Flame&#xA;– I wanted to write something non-trivial (I use that term loosely) in Ember</description>
    </item>
    <item>
      <title>Handling UTF-8 Quoted Printable strings</title>
      <link>https://vadosware.io/2014/11/16/handling-utf-8-quoted-printable-strings/</link>
      <pubDate>Sun, 16 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/11/16/handling-utf-8-quoted-printable-strings/</guid>
      <description>While working on VCFPorter (a project that will be out soon), I’ve run into the problem of trying to parse (and fully understand) how javascript handles UTF8. While I thought I had a pretty good grasp on things, having to actually translate UTF-8 Quoted Printable strings (part of the vcard spec) sent me scurrying to Google to look up how exactly to encode/decode UTF-8 strings in javascript. That’s always a good indicator that I don’t know enough about something.</description>
    </item>
    <item>
      <title>Meteor Patterns</title>
      <link>https://vadosware.io/2014/11/02/meteor-patterns/</link>
      <pubDate>Sun, 02 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/11/02/meteor-patterns/</guid>
      <description>So for a weekend project I’ve decided to work on a site that makes conference schedules across languages, platforms, and countries easily available.&#xA;I decided to use MeteorJS for this project, a relatively young web framework that really puts the “shared” in “shared back end and front end codebase”.&#xA;While I have known about MeteorJS for a while, the last time I looked at them they were 0.x software, so although the demos had lots of interesting functionality, I wasn’t quite ready to take the dive (at that time, I think I was till kicking the tires on Knockout, and AngularJS).</description>
    </item>
    <item>
      <title>Using mozrepl and emacs to live-reload Firefox</title>
      <link>https://vadosware.io/2014/10/31/using-mozrepl-and-emacs-to-live-reload-firefox/</link>
      <pubDate>Fri, 31 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/10/31/using-mozrepl-and-emacs-to-live-reload-firefox/</guid>
      <description>One of the greatest things to happen to modern web development is tools like grunt and livereload that can be configured to run tasks (or reload the browser) automagically upon changes to certain files.&#xA;While grunt and livereload are great, they do require a certain amount of work to get started with (especially grunt). I sometimes feel uncomfortable using live reload because I haven’t donated/bought it, so I often look for solutions that are somewhat simpler (and don’t make you feel quite so guilty).</description>
    </item>
    <item>
      <title>Working with EmberJS and EmberData</title>
      <link>https://vadosware.io/2014/10/27/working-with-emberjs-and-emberdata/</link>
      <pubDate>Mon, 27 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/10/27/working-with-emberjs-and-emberdata/</guid>
      <description>Lately, in working on an upcoming project, I have chosen EmberJS as my front-end framework. I was drawn in by the promise of Ember, and their enthusiastic team, as well as their goal of building “ambitious” web applications.&#xA;EmberJS is rails-y in that it places importance on “convention over configuration” and does a lot of “magic” for you behind the scenes to get you up and running.&#xA;I’ve been having a bear of a time with Ember, and figured I might be able to clear (or at least offer hints) on some of the stumbling blocks I’ve run into lately.</description>
    </item>
    <item>
      <title>Merry Go Form</title>
      <link>https://vadosware.io/2014/10/26/merry-go-form/</link>
      <pubDate>Sun, 26 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/10/26/merry-go-form/</guid>
      <description>It’s 2014, who’s still writing javascript plugins in vanilla javascript? I am!&#xA;One of the projects I’m proud to have released over teh weekend is called Merry Go Form, a javascript plugin for carousel based forms.&#xA;The idea behind the project was that long tedious forms could be broken up into different context-aware “slides”, and it would be easier for people to fill out long forms.&#xA;I worked on Merry Go Form with some friends, and it was a great experience, we went for all the modern conveniences of development (Grunt, automated unit and acceptance tests), but constrained ourselves to writing very very basic (and thus cross-browser compatible) javascript.</description>
    </item>
    <item>
      <title>Developing a web application/API in Go? Use Gin</title>
      <link>https://vadosware.io/2014/10/22/developing-a-web-applicationapi-in-go-use-gin/</link>
      <pubDate>Wed, 22 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/10/22/developing-a-web-applicationapi-in-go-use-gin/</guid>
      <description>A tool I learned about during my days using Martini, Gin is a fantastic auto-reload tool for Go. It’s extremely simple, and generally Just Work™ with most other frameworks/basic net/http.&#xA;Install it:&#xA;go get github.com/codegangsta/gin&#xA;Check out the source code:&#xA;https://github.com/codegangsta/gin&#xA;The project I’m using this for is pretty exciting — more on that later.</description>
    </item>
    <item>
      <title>Building Apps for FirefoxOS</title>
      <link>https://vadosware.io/2014/10/06/building-apps-for-firefoxos/</link>
      <pubDate>Mon, 06 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/10/06/building-apps-for-firefoxos/</guid>
      <description>I recently swapped my Samsung Galaxy S4 for a FirefoxOS Flame (developer reference phone) — a move many non-tech (and some tech friends) don’t understand. I did it because I believe in Mozilla, what they stand for, and I think that the convergence on web as the most effective platform for delivering apps has a lot of potential.&#xA;That said, I’ve been working on many side projects lately, one of those being a FirefoxOS application.</description>
    </item>
    <item>
      <title>Device Storage API Quirk in FirefoxOS</title>
      <link>https://vadosware.io/2014/10/06/device-storage-api-quirk-in-firefoxos/</link>
      <pubDate>Mon, 06 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/10/06/device-storage-api-quirk-in-firefoxos/</guid>
      <description>After purchasing the Flame FFOS reference phone, I set up the App Manager (provided by Mozilla) and have been having a blast debugging and testing my new application (VCFPorter).&#xA;I recently ran into some issues using the Device Storage API (https://developer.mozilla.org/en-US/docs/Web/API/Device_Storage_API).&#xA;The problem was that I was trying to access internal storage (I don’t have an SD card on the device), but it would always return empty (the cursor would be “done” on the first onsuccess callback).</description>
    </item>
    <item>
      <title>Automatically creating RethinkDB instances,databases, and tables for testing fixtures</title>
      <link>https://vadosware.io/2014/05/19/automatically-rethinkdb-instancesdatabases-and-tables-for-testing-fixtures/</link>
      <pubDate>Mon, 19 May 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/05/19/automatically-rethinkdb-instancesdatabases-and-tables-for-testing-fixtures/</guid>
      <description>One of the undeniable benefits of functional testing is regressions. It’s not a foregone conclusion that functional (unit) or other kinds of testing that are recently gaining traction are worth the trouble that they cause (and there are lots of other issues with how you test, what you can test, etc), but I don’t think many people argue about the usefulness of tests when it comes to regressions. I also think that it’s a great thing to have that encourages developer discipline.</description>
    </item>
    <item>
      <title>Getting pycrypto and NodeJS crypto package to play together</title>
      <link>https://vadosware.io/2014/03/28/getting-pycrypto-and-nodejs-crypto-package-to-play-together/</link>
      <pubDate>Fri, 28 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/03/28/getting-pycrypto-and-nodejs-crypto-package-to-play-together/</guid>
      <description>Recently on a project I’ve been working on, I’ve had to do some cross-programming language encryption. More specifically, I’ve had to encrypt data in Python with pycrypto (which is an excellent library), and decrypt that same data after sending it across the network in nodejs. Here’s what I got stuck on, and other random things that worked for me.&#xA;If you’re trying to send the data just over the wire (ex.</description>
    </item>
    <item>
      <title>Introducing Loltrove</title>
      <link>https://vadosware.io/2014/03/21/introducing-loltrove/</link>
      <pubDate>Fri, 21 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/03/21/introducing-loltrove/</guid>
      <description>Recently I’ve been lazily working on a project I call “loltrove”. It’s taken me a long time to complete it (mostly because of lack of work), but I really wanted a chance to work on seeing how AngularJS and all the good ‘ol web technology I know and love could be used to create a semi-useful and possibly completely useless chrome extension.&#xA;As browsers grow as a platform (and especially chrome), I think that extensions are extremely important, and getting my hands dirty writing one seemed like a good way to familiarize myself.</description>
    </item>
    <item>
      <title>minor ursa &#43; node-gyp issue</title>
      <link>https://vadosware.io/2014/03/03/minor-ursa-node-gyp-issue/</link>
      <pubDate>Mon, 03 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/03/03/minor-ursa-node-gyp-issue/</guid>
      <description>So I’ve been struggling with an issue in node-gyp for the better part of an hour now, and have just found the solution.&#xA;Context:&#xA;Here I am, trying to install the ursa library for node to handle some crypto, and for some reason, installs of ursa were failing with an EACCES error (which I think maybe should be EACCESS, but I will ignore that for now). The errors were very vague, and it took me a lot of debugging to reach this conclusion, but nonetheless it was fun to modify node source code and get my hands dirty (I looked in files like child_process.</description>
    </item>
    <item>
      <title>Debugging issues with Piwik</title>
      <link>https://vadosware.io/2014/01/25/debugging-issues-with-piwik/</link>
      <pubDate>Sat, 25 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2014/01/25/debugging-issues-with-piwik/</guid>
      <description>I recently switched my logging from an external tool to a tool hosted on my server called Piwik. Piwik is a fantastic free tool designed to help perform some simple analytics (and possibly even complicated analytics) on visiting users.&#xA;For the last few weeks, however, I have found that I was getting 0 tracking, no visits. And while most of the projects it’s up to are somewhat stale, it did not even track when I visited!</description>
    </item>
    <item>
      <title>Usering in a new age of inter-program communication, with JSON?</title>
      <link>https://vadosware.io/2013/12/17/usering-in-a-new-age-of-inter-program-communication-with-json/</link>
      <pubDate>Tue, 17 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/12/17/usering-in-a-new-age-of-inter-program-communication-with-json/</guid>
      <description>TLDR?&#xA;Recently I’ve been watching a lot of talk,news, and videos about the various automation systems that we use in our attempts to make us better (at the very least more consistent) programmers. One thing I have repeatedly hit my head on is the virtue (yet klugyness) of the unrestricted system call. No matter which automation system you look at, it seems that to achieve utmost flexibility, unrestricted system calls are almost always included.</description>
    </item>
    <item>
      <title>Powerline, Konsole, and Tmux</title>
      <link>https://vadosware.io/2013/12/10/powerline-konsole-and-tmux/</link>
      <pubDate>Tue, 10 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/12/10/powerline-konsole-and-tmux/</guid>
      <description>If you’re using Konsole, fonts are a little hard to get situated correctly. Often Konsole shows you only a small subset of the fonts that are available on your system, so I wanted to write a little about how to figure out the Konsole font mess (well not really a mess, but a little difficult).&#xA;So let’s start with powerline:&#xA;Powerline&#xA;Github&#xA;I found the easiest way to install powerline was just to download the source and build with setup.</description>
    </item>
    <item>
      <title>Pretty terminals for all</title>
      <link>https://vadosware.io/2013/12/10/pretty-terminals-for-all/</link>
      <pubDate>Tue, 10 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/12/10/pretty-terminals-for-all/</guid>
      <description>Lately, I’ve been spending a lot of time in the terminal.&#xA;If I’m not watching some video from Conf2012/2013, I try to be in the terminal working on one of my more recent projects, loltrove. It’ll be ready to launch (it will be open source from launch!) very soon, and I have really enjoyed building it. It’s my first foray into chrome extensions (and hopefully if the product proves to be something people want more of, I will port to Firefox, Opera, and maybe even IE(?</description>
    </item>
    <item>
      <title>Some small tips on WPA wifi setup on Linux</title>
      <link>https://vadosware.io/2013/11/23/some-small-tips-on-wpa-wifi-setup-on-linux/</link>
      <pubDate>Sat, 23 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/11/23/some-small-tips-on-wpa-wifi-setup-on-linux/</guid>
      <description>I’ve recently gotten myself an odroid, and never quite have had time to work on it — however I have found that I do not really know anything about getting wifi to work on a clean linux install (one that doesn’t come with network-manager-gnome or any other handy GUI-based tools)… Here are some tips to show how I got through it.&#xA;If your router is secured with WPA (which it should be) — you’ll need to read up on a program called wpa_supplicant.</description>
    </item>
    <item>
      <title>Inserting users on a branch in RethinkDB</title>
      <link>https://vadosware.io/2013/10/11/inserting-users-on-a-branch-in-rethinkdb/</link>
      <pubDate>Fri, 11 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/10/11/inserting-users-on-a-branch-in-rethinkdb/</guid>
      <description>If you’ve ever wondered how to insert a user (or any record really) on the condition that a user with a given property didn’t exist, here you go:&#xA;(Note this is in ruby, as the latest project I’m working on is a Sinatra app )&#xA;inserted = r.branch(r.table(‘users’).filter({:username =&amp;gt; username}).count().eq(0),&#xA;r.table(‘users’).insert({:username =&amp;gt; username, :email =&amp;gt; email}),&#xA;nil).run()&#xA;It seems to be at least a LITTLE less race-condition prone than doing the check and acting on it.</description>
    </item>
    <item>
      <title>Using my own product</title>
      <link>https://vadosware.io/2013/09/27/using-your-own-product/</link>
      <pubDate>Fri, 27 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/09/27/using-your-own-product/</guid>
      <description>So today, I ran into a problem that I’m pretty surprised that I haven’t run into before.&#xA;Using Org-Mode in Emacs, I was unable to use the keybinding for insert-heading to insert a new heading. The keybinding is M- but for some reason, when I pressed those magical keys, no new heading was created, just an indented newline.&#xA;These changes lead me to making some modifications to the ~/.Xdefaults file in my home directory, which I thought would be the perfect thing to save up on configr.</description>
    </item>
    <item>
      <title>Breaking stuff in production</title>
      <link>https://vadosware.io/2013/09/22/breaking-stuff-in-production/</link>
      <pubDate>Sun, 22 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/09/22/breaking-stuff-in-production/</guid>
      <description>Well, somehow with all the testing I did on the local build, a part of the code I haven’t given thought to for weeks has broken everything in production!Luckily I was able to find the problem, but there is no doubt that a lot of people visited the site and nothing worked as it was supposed to. For that, I apologize. The ease of using the demo account and registering/using the service was something I prided myself on, but I totally failed at that with the 0.</description>
    </item>
    <item>
      <title>Configr.io v0.1 Update</title>
      <link>https://vadosware.io/2013/09/22/configr-io-v0-1-update/</link>
      <pubDate>Sun, 22 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/09/22/configr-io-v0-1-update/</guid>
      <description>It’s a little weird to be actively working on a project and not be sure of the userbase, but I figured I should make at least a blog post about the updates I’ve been working on for my super simple service Configr.io!&#xA;I’m happy to announce the release of a bunch of updates to Configr.io that were requested/sorely needed!&#xA;During the days since configr.io launched, I’ve been working to add features, and fix bugs that were present, and those efforts have culminated in Confgir.</description>
    </item>
    <item>
      <title>Launch of Configr.io</title>
      <link>https://vadosware.io/2013/09/11/launch-of-configr-io/</link>
      <pubDate>Wed, 11 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/09/11/launch-of-configr-io/</guid>
      <description>So every once in a while I shuffle around configurations that should be default (for the way I use things). One of these such configurations is my Emacs configurations files, as well as bashrc scripts or other useful scripts that I like to log around. I thought to myself that it would be great if a dead-simple service thought it would be a good idea to store these files for me, so that when I’m at a console without an x-server, or just don’t want to go hunt for files, I could easily remember a URL and either download some, or all of my configuration files and small scripts.</description>
    </item>
    <item>
      <title>Building a small webapp on Iniz servers with nginx, nodejs, and postgresql</title>
      <link>https://vadosware.io/2013/08/06/building-a-small-webapp-on-iniz-servers-with-nginx-nodejs-and-postgresql/</link>
      <pubDate>Tue, 06 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/08/06/building-a-small-webapp-on-iniz-servers-with-nginx-nodejs-and-postgresql/</guid>
      <description>I’ve recently wanted to do some work with nodejs and see what the ecosystem is like. Of course, NodeJS is quite controversial and recent in it’s creation, and has both fanatical supporters and fanatical critics (like anything else worth looking at) — and I have yet to get real experience with it, so I am trying it out.&#xA;As is always the case, the stack is a little bit complicated (not a simple NODEJS server, since that’s been done better than I could probably do it, w/ the Express package):</description>
    </item>
    <item>
      <title>First Foray into web chat</title>
      <link>https://vadosware.io/2013/04/17/first-foray-into-web-chat/</link>
      <pubDate>Wed, 17 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/04/17/first-foray-into-web-chat/</guid>
      <description>Recently, I’ve been doing a lot of web stuff. “A lot” is an understatement, as I think about it, I’ve been working exclusively on projects that have to do with the web, or in some way are connected to HTML/CSS/JS/Some web framework.&#xA;Though I know web programmers don’t get as much “rep” as other kinds that are writing compilers maybe, I think the instant utility (as well as gratification) of web apps is something not easily overlooked.</description>
    </item>
    <item>
      <title>VAIPR</title>
      <link>https://vadosware.io/2013/04/17/vaipr/</link>
      <pubDate>Wed, 17 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/04/17/vaipr/</guid>
      <description>So, it looks like VAIPR’s first iteration is complete!&#xA;At this point, the project succeeds (with the help of CMUSphinx) in listening and parsing speech continuously, and responding (as well as possibly displaying) responses to the queries on a screen — as well as speaking a verbal response.&#xA;The project actually ended up being relatively simple (with the use of cmusphinx), so I didn’t have to worry about any signal processing, but there were some complications when designing the backend and thinking how I wanted the multi-threaded program to behave and how others should interface with it.</description>
    </item>
    <item>
      <title>Voice Recognition</title>
      <link>https://vadosware.io/2013/02/21/voice-recognition/</link>
      <pubDate>Thu, 21 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/02/21/voice-recognition/</guid>
      <description>So, finally put a pin in my voice recognition adventures today. I’d been deciding between multiple different open source options: julius, cmusphinx, and simon(briefly).&#xA;For my purposes, I really wanted as close to a silent API as I could get, so simon didn’t last long. Next I looked at Julius, which after a lot of twiddling, did finally work (I have a USB audio device — that caused a lot of problems, as well as some lack of clarity on how to set up language models for julius), but I ultimately scrapped because of the availability of documentation and language models for cmusphinx.</description>
    </item>
    <item>
      <title>TideSDK is awesome.</title>
      <link>https://vadosware.io/2013/02/06/tidesdk-is-awesome/</link>
      <pubDate>Wed, 06 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/02/06/tidesdk-is-awesome/</guid>
      <description>So, I’ve recently been working with a tool (‘framework’, if you want to call it that) called TideSDK.&#xA;To put it simply, it bring the more common (of course it’s not like Web 2.0 created this abstraction) Web 2.0 3-Tier application model to desktop apps.&#xA;Disclaimer: I have been on a real web dev kick lately.&#xA;I think it’s just a no-brainer kind of way to make a beautiful app without having to dive head-first into Qt/GTK+.</description>
    </item>
    <item>
      <title>Working with TideSDK</title>
      <link>https://vadosware.io/2013/02/04/working-with-tidesdk/</link>
      <pubDate>Mon, 04 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/02/04/working-with-tidesdk/</guid>
      <description>So, I’ve been on a real web kick recently, with pretty much 100% of the new projects that I’m taking up (non-work related) are in the web development sphere. Of course, one can’t call themselves a purveyor of the wide world of Computer Science and be biased too firmly in any one field, so I decided to work on some projects that I’ve been throwing around in my head, that have desktop/non-web implementations.</description>
    </item>
    <item>
      <title>Some minor updates made to Konvention</title>
      <link>https://vadosware.io/2013/01/28/some-minor-updates-made-to-konvention/</link>
      <pubDate>Mon, 28 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/01/28/some-minor-updates-made-to-konvention/</guid>
      <description>Trying to insert some data into Konvention today was great practice, and an eye-opener in regards to the use-case of the app. Number of clicks was relatively high (even taking into account that I know where everything is), so I’ll have to work on that soon. There were also some problems with Yii showing errors it shouldn’t (mysql errors, etc) — so I fixed that up.&#xA;I added a bunch of Python best practices from some recent pages I ran across, also added a “Hide All” button to the recent activity page, and fixed up the snippet part of best practice submission.</description>
    </item>
    <item>
      <title>Starting a new side project</title>
      <link>https://vadosware.io/2013/01/23/starting-a-new-side-project/</link>
      <pubDate>Wed, 23 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/01/23/starting-a-new-side-project/</guid>
      <description>Figured I wanted to start doing some development in Rails today (my Ruby is certainly rusty, if it was ever sharp) — Starting a project that I thought of a long time ago, a SaaS that handles documentation storage. A real simple app, it will probably be useful to people only if it’s full of stuff (but that’s no problem, I know some sectors that would really appreciate something like this, car communities for example)</description>
    </item>
    <item>
      <title>Konvention is a go?</title>
      <link>https://vadosware.io/2013/01/16/konvention-is-a-go/</link>
      <pubDate>Wed, 16 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/01/16/konvention-is-a-go/</guid>
      <description>Going to post Konvention on a few sites and see if I can get some feedback! (If you Reddit has brought you here… lurk for a bit?)&#xA;Hopefully, Konvention is something that’s useful to somebody at some time, but it’s been a blast working on it (which is essentially not documented anywhere – I have no Github repo), glad to finally get it out of my system.&#xA;My labor of semi-internet-love.</description>
    </item>
    <item>
      <title>Progress on Konvention</title>
      <link>https://vadosware.io/2013/01/13/progress-on-konvention/</link>
      <pubDate>Sun, 13 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/01/13/progress-on-konvention/</guid>
      <description>As the first candidate for alpha, Konvention is coming along very very nicely. I made some updates to it today, worked out the contact form (considered just linking to this wordpress and installing the Contact-Form7 plugin, but thought better of it). It was really easy to finish that up with the Emailer plugin for Yii (no idea why I had problems with it before)&#xA;After adding/updating some general site stuff as I saw it, I also implemented a naive text-based search for the front page (arguably the most important part of the app, but at this point I’m just going with a naive implementation, no desire to learn sphinx or anything right now) — And it works surprisingly well!</description>
    </item>
    <item>
      <title>Konvention’s almost ready for an alpha</title>
      <link>https://vadosware.io/2013/01/10/konventions-almost-ready-for-a-alpha/</link>
      <pubDate>Thu, 10 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2013/01/10/konventions-almost-ready-for-a-alpha/</guid>
      <description>After working on and off on this app for what’s got to be at least 5 or 6 months (which is definitely not a long time to work on an app, to tell the truth — a lot of quality apps were made in a lot longer), It looks like Konvention is finally almost ready to roll. Well, “roll” as in roll into the hands of the internet, and hopefully some users on stack overflow/hacker news/reddit that may like it.</description>
    </item>
    <item>
      <title>Projects</title>
      <link>https://vadosware.io/projects/</link>
      <pubDate>Tue, 08 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/projects/</guid>
      <description>These projects are what keep me up at night (ordered by a weird mix of most-interesting &amp;amp; most-recent)&#xA;Kindling&#xA;An Reflux/React powered Tinder client for FirefoxOS&#xA;Kindling was a project which was similar to Firegraph in that it was made to fix the fact that there was no Tinder web client or FirefoxOS app. Unfortunately, before the app could be reviewed and put on the app store, devleopment on FirefoxOS ceased.</description>
    </item>
    <item>
      <title>Hello world!</title>
      <link>https://vadosware.io/2012/12/17/hello-world/</link>
      <pubDate>Mon, 17 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://vadosware.io/2012/12/17/hello-world/</guid>
      <description>I’m sure just about every programming-related site/blog/whatever starts with this, and maybe there’s a reason for it.&#xA;With that almost-disclaimer out of the way, it’s great to finally have a good homepage up for the world to see. As I start launching and working on various projects, I’m sure (and hope) that many will wonder things like “who wrote this magnificent code?”, or “who built this useful tool?”, and that is what this site is for.</description>
    </item>
  </channel>
</rss>
