+
+
+
+
++In the third installment of my miniature-HPC series, we discuss OpenMPI, Python3, and running parallel jobs. Read more here. +
\ No newline at end of file diff --git a/src/feed/posts/2019-11-01-computing-in-the-kubernetes-framework.md b/src/feed/posts/2019-11-01-computing-in-the-kubernetes-framework.md new file mode 100644 index 0000000..a529ffb --- /dev/null +++ b/src/feed/posts/2019-11-01-computing-in-the-kubernetes-framework.md @@ -0,0 +1,12 @@ +--- +layout: feed_post +title: "Computing in the Kubernetes Framework" +slug: 5dbc53fe98927ad9f6245e7b +date: 2019-11-01 11:00:00 +tags: feed +permalink: /feed/2019-11-01-computing-in-the-kubernetes-framework/ +feedtags: + - Speaking +--- ++Recently I had the pleasure of presenting at the University of Kansas' Center for Research Methods and Data Analysis Weekly Colloquium. You can find resources from my talk on using k8s for scientific computing here.
\ No newline at end of file diff --git a/src/feed/posts/2019-11-01-flitter-auth013.md b/src/feed/posts/2019-11-01-flitter-auth013.md new file mode 100644 index 0000000..316a49a --- /dev/null +++ b/src/feed/posts/2019-11-01-flitter-auth013.md @@ -0,0 +1,13 @@ +--- +layout: feed_post +title: "flitter-auth@0.13" +slug: 5dbc5b2298927ad9f6245e7c +date: 2019-11-01 11:00:00 +tags: feed +permalink: /feed/2019-11-01-flitter-auth013/ +feedtags: + - Code Release +--- ++This release of Flitter's auth provider brings an OAuth2 server, OAuth2 client, and refinements to the login flow structure. More details here. +
\ No newline at end of file diff --git a/src/feed/posts/2019-11-15-a-new-platform-my-relentless-pursuit-of-privacy.md b/src/feed/posts/2019-11-15-a-new-platform-my-relentless-pursuit-of-privacy.md new file mode 100644 index 0000000..08849ce --- /dev/null +++ b/src/feed/posts/2019-11-15-a-new-platform-my-relentless-pursuit-of-privacy.md @@ -0,0 +1,13 @@ +--- +layout: feed_post +title: "A New Platform - My Relentless Pursuit of Privacy" +slug: 5dce587aac2bb042f50478ab +date: 2019-11-15 11:00:00 +tags: feed +permalink: /feed/2019-11-15-a-new-platform-my-relentless-pursuit-of-privacy/ +feedtags: + - Blog Post +--- ++I've finally moved the home of my blog from Medium.com over to a self-hosted Hexo blog. Why? Read more here. +
\ No newline at end of file diff --git a/src/feed/posts/2019-11-17-dependency-injection-in-less-than-100-lines-of-pure-javascript.md b/src/feed/posts/2019-11-17-dependency-injection-in-less-than-100-lines-of-pure-javascript.md new file mode 100644 index 0000000..d427cfd --- /dev/null +++ b/src/feed/posts/2019-11-17-dependency-injection-in-less-than-100-lines-of-pure-javascript.md @@ -0,0 +1,13 @@ +--- +layout: feed_post +title: "Dependency Injection in Less Than 100 Lines of Pure JavaScript" +slug: 5dd04b99e54ea20caf6b7249 +date: 2019-11-16 11:00:00 +tags: feed +permalink: /feed/2019-11-17-dependency-injection-in-less-than-100-lines-of-pure-javascript/ +feedtags: + - Blog Post +--- ++DI is a powerful pattern for segmenting code to keep it efficient and easy to reuse. In this article, we're going to build a basic DI in <100 lines of pure ES6. Read about it here. +
\ No newline at end of file diff --git a/src/feed/posts/2019-12-20-flitter-di01.md b/src/feed/posts/2019-12-20-flitter-di01.md new file mode 100644 index 0000000..28b7f5e --- /dev/null +++ b/src/feed/posts/2019-12-20-flitter-di01.md @@ -0,0 +1,13 @@ +--- +layout: feed_post +title: "flitter-di@0.1" +slug: 5dfbe96b78c3d7593abd5c8d +date: 2019-12-19 11:00:00 +tags: feed +permalink: /feed/2019-12-20-flitter-di01/ +feedtags: + - Code Release +--- ++Flitter-DI is the second-generation dependency-injector used by the Flitter framework. It was pulled from the libflitter project in the hope that it can remain independent from the rest of Flitter and can be used in other projects. More info here. +
\ No newline at end of file diff --git a/src/feed/posts/2020-02-25-noded-free-form-notes-databases.md b/src/feed/posts/2020-02-25-noded-free-form-notes-databases.md new file mode 100644 index 0000000..70550f2 --- /dev/null +++ b/src/feed/posts/2020-02-25-noded-free-form-notes-databases.md @@ -0,0 +1,17 @@ +--- +layout: feed_post +title: "Noded - Free-Form Notes & Databases" +slug: 5e547826173147060d872951 +date: 2020-02-25 11:00:00 +tags: feed +permalink: /feed/2020-02-25-noded-free-form-notes-databases/ +feedtags: + - HackKU 2020 +--- +
+I recently attended the annual University of Kansas hackathon, where me and a couple friends built Noded.
+
+Noded is a tree-based note taking app based on reusable page elements. It provides support for basic notes, uploaded files, a built-in code editor, customizable databases, static website exports, and sub-tree sharing.
+
+Check it out here.
+
+In my never-ending quest to self-host all the things, I've deployed a combination of Gitea and Drone CI for a feature-for-feature, self-hosted alternative to GitHub. Here's how. +
\ No newline at end of file diff --git a/src/feed/posts/2020-04-08-connect-4-webtoy.md b/src/feed/posts/2020-04-08-connect-4-webtoy.md new file mode 100644 index 0000000..f61a3ee --- /dev/null +++ b/src/feed/posts/2020-04-08-connect-4-webtoy.md @@ -0,0 +1,13 @@ +--- +layout: feed_post +title: "Connect-4 Webtoy" +slug: 5e8ddda99127dad0043b9c66 +date: 2020-04-08 11:00:00 +tags: feed +permalink: /feed/2020-04-08-connect-4-webtoy/ +feedtags: + - Side Project +--- ++I've built a simple Connect-4 webtoy as a project for EECS 368 at the University of Kansas. You can play with it here. +
\ No newline at end of file diff --git a/src/feed/posts/2020-04-23-vues6-es6-vuejs-components-in-plain-javascript.md b/src/feed/posts/2020-04-23-vues6-es6-vuejs-components-in-plain-javascript.md new file mode 100644 index 0000000..b29d6a7 --- /dev/null +++ b/src/feed/posts/2020-04-23-vues6-es6-vuejs-components-in-plain-javascript.md @@ -0,0 +1,13 @@ +--- +layout: feed_post +title: "VuES6 - ES6 Vue.js Components, in Plain JavaScript" +slug: 5ea0d07b000b92b10459cd4f +date: 2020-04-22 11:00:00 +tags: feed +permalink: /feed/2020-04-23-vues6-es6-vuejs-components-in-plain-javascript/ +feedtags: + - Code Release +--- ++I recently released a small utility library for defining Vue components as proper ES6 classes, but in vanilla JavaScript. I like to use this in small projects where I don't want to have to set up vue-cli and compile templates. More info here. +
\ No newline at end of file diff --git a/src/feed/posts/2020-05-09-feed-page-rss-atom-minor-website-updates.md b/src/feed/posts/2020-05-09-feed-page-rss-atom-minor-website-updates.md new file mode 100644 index 0000000..afc0982 --- /dev/null +++ b/src/feed/posts/2020-05-09-feed-page-rss-atom-minor-website-updates.md @@ -0,0 +1,13 @@ +--- +layout: feed_post +title: "Feed Page, RSS, & Atom - Minor Website Updates" +slug: 5eb5f9a991202acecf005016 +date: 2020-05-09 11:00:00 +tags: feed +permalink: /feed/2020-05-09-feed-page-rss-atom-minor-website-updates/ +feedtags: + - Code Release +--- +I recently made some tweaks to my website. I added a dedicated page as a historical archive for these updates. ++With the current need to work from home, I've put together a list of tricks and tools I use to do my work as a software developer remotely, and discuss the challenges. Here's what I use. +
\ No newline at end of file diff --git a/src/feed/posts/2020-11-29-my-technical-notes-site.md b/src/feed/posts/2020-11-29-my-technical-notes-site.md new file mode 100644 index 0000000..4a079aa --- /dev/null +++ b/src/feed/posts/2020-11-29-my-technical-notes-site.md @@ -0,0 +1,18 @@ +--- +layout: feed_post +title: "My Technical Notes Site" +slug: 5fc3663a081ff50074eb4926 +date: 2020-11-29 11:00:00 +tags: feed +permalink: /feed/2020-11-29-my-technical-notes-site/ +feedtags: + - Side Project +--- ++ I'm trying to write down or save all the technical tricks, notes, + and fixes I find. That way, it's easier for me to find them again + in the future, and maybe they can be of use to others. +
++ You can check them out here. +
\ No newline at end of file diff --git a/src/feed/posts/2020-12-02-converting-an-ionicangular-site-into-a-progressive-web-app.md b/src/feed/posts/2020-12-02-converting-an-ionicangular-site-into-a-progressive-web-app.md new file mode 100644 index 0000000..93d60ba --- /dev/null +++ b/src/feed/posts/2020-12-02-converting-an-ionicangular-site-into-a-progressive-web-app.md @@ -0,0 +1,18 @@ +--- +layout: feed_post +title: "Converting an Ionic/Angular Site into a Progressive Web App" +slug: 5fc68b4f5b35c233d85fd294 +date: 2020-12-01 11:00:00 +tags: feed +permalink: /feed/2020-12-02-converting-an-ionicangular-site-into-a-progressive-web-app/ +feedtags: + - Blog Post +--- ++ For the last year or so, I've been working on converting an Ionic app to a progressive + web app with offline support called Noded. I decided to + write up my findings on how to do this with Angular service-worker. +
++ Read more about it here. +
\ No newline at end of file diff --git a/src/feed/posts/2020-12-03-miniq-a-bare-bones-cron-driven-job-queue.md b/src/feed/posts/2020-12-03-miniq-a-bare-bones-cron-driven-job-queue.md new file mode 100644 index 0000000..87681e4 --- /dev/null +++ b/src/feed/posts/2020-12-03-miniq-a-bare-bones-cron-driven-job-queue.md @@ -0,0 +1,20 @@ +--- +layout: feed_post +title: "MiniQ: A bare-bones, CRON-driven job queue." +slug: 5fc7f0515b35c233d85fd2d2 +date: 2020-12-02 11:00:00 +tags: feed +permalink: /feed/2020-12-03-miniq-a-bare-bones-cron-driven-job-queue/ +feedtags: + - Side Project +--- ++ I wanted a simple way to queue jobs to be run in the background without having to run a separate daemon. +
++ MiniQ is what I came up with. With just 3 files, MiniQ provides the ability to log jobs + and the CRON script will run periodically and execute the queued jobs in the background. +
++ More info here. +
\ No newline at end of file diff --git a/src/feed/posts/2020-12-09-full-text-search-pdfs-from-linux-cli.md b/src/feed/posts/2020-12-09-full-text-search-pdfs-from-linux-cli.md new file mode 100644 index 0000000..b40e3d5 --- /dev/null +++ b/src/feed/posts/2020-12-09-full-text-search-pdfs-from-linux-cli.md @@ -0,0 +1,19 @@ +--- +layout: feed_post +title: "Full-text search PDFs from Linux CLI" +slug: 5fd029e89d55604a939f9b2c +date: 2020-12-09 11:00:00 +tags: feed +permalink: /feed/2020-12-09-full-text-search-pdfs-from-linux-cli/ +feedtags: + - Code Snippet +--- ++ For an open-note exam, I wanted a quick way to full-text search PDFs from the command-line. +
++ I wrote a 2-line script to help with that, using just find, grep, and pdftotext (common to most distros). +
++ Get it here. +
\ No newline at end of file diff --git a/src/feed/posts/2021-01-03-an-open-letter-to-senator-elect-roger-marshall.md b/src/feed/posts/2021-01-03-an-open-letter-to-senator-elect-roger-marshall.md new file mode 100644 index 0000000..55fff44 --- /dev/null +++ b/src/feed/posts/2021-01-03-an-open-letter-to-senator-elect-roger-marshall.md @@ -0,0 +1,24 @@ +--- +layout: feed_post +title: "An Open Letter to Senator-elect Roger Marshall" +slug: 5ff10217c8162e185a523495 +date: 2021-01-02 11:00:00 +tags: feed +permalink: /feed/2021-01-03-an-open-letter-to-senator-elect-roger-marshall/ +feedtags: + - Open Letter +--- ++ Roger Marshall, Kansas Senator-elect, has expressed his intention to vote not to certify the result of the 2020 presidential election. +
++ I feel very strongly that this is a dangerous and irresponsible move that goes against the core tenets of American democracy. +
++ Read the letter here. +
++ + This letter is released in the public domain. Please, adapt it, share it with others, and most importantly, send it to your representatives. Call them, e-mail them, snail mail them to tell them to support free and fair elections. + +
\ No newline at end of file diff --git a/src/feed/posts/2021-02-09-new-features-in-noded.md b/src/feed/posts/2021-02-09-new-features-in-noded.md new file mode 100644 index 0000000..1d4389c --- /dev/null +++ b/src/feed/posts/2021-02-09-new-features-in-noded.md @@ -0,0 +1,44 @@ +--- +layout: feed_post +title: "New Features in Noded" +slug: 6021af9360b9ec2b58623a2d +date: 2021-02-08 11:00:00 +tags: feed +permalink: /feed/2021-02-09-new-features-in-noded/ +feedtags: + - Side Project +--- ++ Noded is a project I started at HackKU last year. It's a rich-data notes app designed to help people create information trees. I've been slowly improving it since. +
++
+ You can try Noded out here. +
\ No newline at end of file diff --git a/src/feed/posts/2021-03-31-rethinking-dependency-injection-in-typescript.md b/src/feed/posts/2021-03-31-rethinking-dependency-injection-in-typescript.md new file mode 100644 index 0000000..674b67b --- /dev/null +++ b/src/feed/posts/2021-03-31-rethinking-dependency-injection-in-typescript.md @@ -0,0 +1,17 @@ +--- +layout: feed_post +title: "Rethinking Dependency Injection in TypeScript" +slug: 606379301694a11cf37d1ce5 +date: 2021-03-30 11:00:00 +tags: feed +permalink: /feed/2021-03-31-rethinking-dependency-injection-in-typescript/ +feedtags: + - Blog Post +--- ++ For the past few years, I've been experimenting with various paradigms for DI in JavaScript and TypeScript. +
++ In the latest in my series of mad ramblings on dependency injection, I've written up my thoughts on the various paradigms I've tried. +
+Read more here. \ No newline at end of file diff --git a/src/feed/posts/2021-04-23-opting-websites-out-of-floc.md b/src/feed/posts/2021-04-23-opting-websites-out-of-floc.md new file mode 100644 index 0000000..9456139 --- /dev/null +++ b/src/feed/posts/2021-04-23-opting-websites-out-of-floc.md @@ -0,0 +1,22 @@ +--- +layout: feed_post +title: "Opting Websites Out of FLoC" +slug: 6082f0de63ffc03c1503d6e5 +date: 2021-04-23 11:00:00 +tags: feed +permalink: /feed/2021-04-23-opting-websites-out-of-floc/ +feedtags: + - Code Release +--- ++ Google announced recently that the beta version of their Chrome browser will include a new tracking system called Federated Learning of Cohorts (FLoC). This system is their replacement for 3rd-party tracking cookies. You can learn more here. +
++ FLoC perpetuates the track-by-default system in Chrome that violates users' privacy. Worse, because it's baked into the browser itself, this tracking can occur on all sites by default. +
++ I remain strongly opposed to these privacy-invasive moves. As a result, starting with version 0.59.0, all Flitter-powered sites (including this one) will opt-out of FLoC by default. +
++ As a user, if this change makes you uncomfortable, consider using a browser that respects user privacy like Firefox or Brave. +
\ No newline at end of file diff --git a/src/feed/posts/2021-04-29-technical-info-on-garrettmillsdev-sites.md b/src/feed/posts/2021-04-29-technical-info-on-garrettmillsdev-sites.md new file mode 100644 index 0000000..95d4e85 --- /dev/null +++ b/src/feed/posts/2021-04-29-technical-info-on-garrettmillsdev-sites.md @@ -0,0 +1,22 @@ +--- +layout: feed_post +title: "Technical Info on *.garrettmills.dev Sites" +slug: 608a5f537ac6155bc27f8a70 +date: 2021-04-29 11:00:00 +tags: feed +permalink: /feed/2021-04-29-technical-info-on-garrettmillsdev-sites/ +feedtags: + - Site Update +--- ++ For the past few weeks, I've been reworking my analytics collection system with an eye to privacy. +
++ I've tried to make my system collect only the data I wish to use in aggregate, and give users the ability + to permanently opt-out of page-view collection. +
++ For details and interesting nitty-gritty about this site, I've added a new + technical info page that talks about how the analytics system works, + the data it stores, and how you can opt-out. +
\ No newline at end of file diff --git a/src/feed/posts/2021-05-09-monochrome-redesign.md b/src/feed/posts/2021-05-09-monochrome-redesign.md new file mode 100644 index 0000000..b2b6620 --- /dev/null +++ b/src/feed/posts/2021-05-09-monochrome-redesign.md @@ -0,0 +1,21 @@ +--- +layout: feed_post +title: "Monochrome Redesign" +slug: 609822ebedbfbd5398c6e51f +date: 2021-05-09 11:00:00 +tags: feed +permalink: /feed/2021-05-09-monochrome-redesign/ +feedtags: + - Site Update +--- ++ I decided that it was time for a visual refresh of this site. + I liked the bright & flashy design I've had for about a year now, but + decided on a return to relative simplicity. +
++ The new design has the added benefit of being very light and semantic, + and relies on no external stylesheets or frameworks, unlike the old. This + has the added benefit of making the page more accesible and improving load + times. +
\ No newline at end of file diff --git a/src/feed/posts/2021-08-11-gbash-a-simple-bash-framework.md b/src/feed/posts/2021-08-11-gbash-a-simple-bash-framework.md new file mode 100644 index 0000000..9bdc15e --- /dev/null +++ b/src/feed/posts/2021-08-11-gbash-a-simple-bash-framework.md @@ -0,0 +1,35 @@ +--- +layout: feed_post +title: "g.bash: A simple Bash framework" +slug: 611418d29444004b82e03edb +date: 2021-08-11 11:00:00 +tags: feed +permalink: /feed/2021-08-11-gbash-a-simple-bash-framework/ +feedtags: + - Side Project +--- ++ Between work and my personal lab, I write a lot of command-line tools to help automate various tasks. But, as anyone who's worked with Bash before knows, adding multi-command support, flags, and other handling can be difficult to get off the ground. +
++ However, including a multi-file Bash framework is kinda... gross. One of the benefits of a shell script is that it can usually be distributed as a single-file affair. I was also unpleased with the current state of Bash argument-parsing. +
+
+ Enter: g.bash. This is my take on a single-file framework and standard library for Bash that addresses these issues. I might write a more extensive blog in the future, but for now the broad strokes are:
+
+ This side-project is still very much a work-in-progress, but if you're curious you can check it out here. +
\ No newline at end of file diff --git a/src/feed/posts/2021-08-26-photo-challenge-01-self-portrait.md b/src/feed/posts/2021-08-26-photo-challenge-01-self-portrait.md new file mode 100644 index 0000000..0ea07cf --- /dev/null +++ b/src/feed/posts/2021-08-26-photo-challenge-01-self-portrait.md @@ -0,0 +1,20 @@ +--- +layout: feed_post +title: "Photo Challenge 01: Self-Portrait" +slug: 6126e7f649f285057b041002 +date: 2021-08-26 11:00:00 +tags: feed +permalink: /feed/2021-08-26-photo-challenge-01-self-portrait/ +feedtags: + - Blog Post +--- ++ One non-technical interest of mine is photography. I'm starting a new 30-prompt photo challenge, which I'll be posting on my blog. +
++ The first challenge is a self-portrait. Mine tries to capture my technical side, and allowed me to tinker with depth of field and reflections. +
++ Follow along here. +
\ No newline at end of file diff --git a/src/feed/posts/2021-11-23-multicrypt-a-library-for-multi-key-encryption.md b/src/feed/posts/2021-11-23-multicrypt-a-library-for-multi-key-encryption.md new file mode 100644 index 0000000..60af3bb --- /dev/null +++ b/src/feed/posts/2021-11-23-multicrypt-a-library-for-multi-key-encryption.md @@ -0,0 +1,19 @@ +--- +layout: feed_post +title: "multicrypt: a library for multi-key encryption" +slug: 619bf581c4ea2d02660ccf75 +date: 2021-11-22 11:00:00 +tags: feed +permalink: /feed/2021-11-23-multicrypt-a-library-for-multi-key-encryption/ +feedtags: + - Side Project +--- ++How I (ab)used the TypeScript compiler to enable transparent runtime data validation using Zod and TypeScript interfaces. +
++Read more here. +
\ No newline at end of file diff --git a/src/feed/posts/2022-01-27-the-ultimate-guide-to-cleaning-a-dell-xps-15-keyboard.md b/src/feed/posts/2022-01-27-the-ultimate-guide-to-cleaning-a-dell-xps-15-keyboard.md new file mode 100644 index 0000000..f6e3d24 --- /dev/null +++ b/src/feed/posts/2022-01-27-the-ultimate-guide-to-cleaning-a-dell-xps-15-keyboard.md @@ -0,0 +1,21 @@ +--- +layout: feed_post +title: "The Ultimate Guide to Cleaning a Dell XPS 15 Keyboard" +slug: 61f1f28f84d7114345702556 +date: 2022-01-27 11:00:00 +tags: feed +permalink: /feed/2022-01-27-the-ultimate-guide-to-cleaning-a-dell-xps-15-keyboard/ +feedtags: + - Blog Post +--- ++Recently, I've been having a really annoying issue with my laptop keyboard where some keys require multiple presses or lots of force when pressed to register a key stroke. +
++Since I like to try to repair my own stuff, at least as a first-line, I decided to do a quick write-up on how to remove and replace the key caps without breaking them to clean out the key wells. +
++Read more here. +
\ No newline at end of file diff --git a/src/feed/posts/2022-04-19-rancher-k3s-kubernetes-on-proxmox-containers.md b/src/feed/posts/2022-04-19-rancher-k3s-kubernetes-on-proxmox-containers.md new file mode 100644 index 0000000..58fa219 --- /dev/null +++ b/src/feed/posts/2022-04-19-rancher-k3s-kubernetes-on-proxmox-containers.md @@ -0,0 +1,20 @@ +--- +layout: feed_post +title: "Rancher K3s: Kubernetes on Proxmox Containers" +slug: 625e4f5521783a026a957090 +date: 2022-04-19 11:00:00 +tags: feed +permalink: /feed/2022-04-19-rancher-k3s-kubernetes-on-proxmox-containers/ +feedtags: + - Blog Post +--- ++I've been re-learning Docker and containerization and I decided to take the plunge and start converting my self-hosted environment over to Kubernetes. +
++This post details how I set up a Kubernetes cluster on LXD containers on Proxmox using Rancher K3s and NGINX ingress controller. +
++Read it here. +
\ No newline at end of file diff --git a/src/feed/posts/2022-07-13-importing-an-openvpn-profile-on-fedora-36.md b/src/feed/posts/2022-07-13-importing-an-openvpn-profile-on-fedora-36.md new file mode 100644 index 0000000..7c846a1 --- /dev/null +++ b/src/feed/posts/2022-07-13-importing-an-openvpn-profile-on-fedora-36.md @@ -0,0 +1,24 @@ +--- +layout: feed_post +title: "Importing an OpenVPN Profile on Fedora 36" +slug: 625e4f3521783a026b957190 +date: 2022-07-12 11:00:00 +tags: feed +permalink: /feed/2022-07-13-importing-an-openvpn-profile-on-fedora-36/ +feedtags: + - Blog Post +--- +
+I recently upgraded to Fedora 36 and discovered
+that my VPN settings were completely broken and
+I couldn't re-import it from the .ovpn file.
+
+What ensued was an annoyingly difficult series +of workarounds required to avoid bugs in OpenVPN, +NetworkManager, and NetworkManager-gui. +
++I've detailed how to do it here. +
\ No newline at end of file diff --git a/src/feed/posts/2022-12-09-generalized-commutative-data-types.md b/src/feed/posts/2022-12-09-generalized-commutative-data-types.md new file mode 100644 index 0000000..171c08a --- /dev/null +++ b/src/feed/posts/2022-12-09-generalized-commutative-data-types.md @@ -0,0 +1,26 @@ +--- +layout: feed_post +title: "Generalized Commutative Data Types" +slug: 5b0527ef-1792-4624-a220-9a910d7e0230 +date: 2022-12-09 11:00:00 +tags: feed +permalink: /feed/2022-12-09-generalized-commutative-data-types/ +feedtags: + - Blog Post +--- ++ Recently, I've been working on a distributed, parallel language called + Swarm. One challenge + with such a language is ensuring consistent data operations when they are performed + in parallel. +
+ ++ A GCDT is one approach to simplify this process. Such types define commutative and + pseudo-commutative operations which allow order-agnostic consistency when accumulating + parallel computations. +
++ I describe such a system and explore its limitations in + this blog post. +
\ No newline at end of file diff --git a/src/feed/posts/2023-01-16-retro70s-redesign.md b/src/feed/posts/2023-01-16-retro70s-redesign.md new file mode 100644 index 0000000..1f79387 --- /dev/null +++ b/src/feed/posts/2023-01-16-retro70s-redesign.md @@ -0,0 +1,22 @@ +--- +layout: feed_post +title: "Retro/70s Redesign" +slug: 5447f787-0f3c-42a7-95c7-c0f28ff43a0f +date: 2023-01-16 11:00:00 +tags: feed +permalink: /feed/2023-01-16-retro70s-redesign/ +feedtags: + - Site Update +--- ++ On a whim, I decided to redesign this site to have a bit more character. Initially inspired by this cool album art, I tried to incorporate retro/70s design elements. +
+ ++ A fun element of this design is how parametric it is. The color palette can be completely swapped out for a complementary one. + I built several different palettes and randomly select one for each visitor. +
+ ++ I'll do a more in-depth write-up of the process soon. For now, though, you can play with the themes on the technical info page. +
\ No newline at end of file diff --git a/src/feed/posts/2023-03-20-adventures-in-ai-assisted-proof-generation.md b/src/feed/posts/2023-03-20-adventures-in-ai-assisted-proof-generation.md new file mode 100644 index 0000000..c1e85df --- /dev/null +++ b/src/feed/posts/2023-03-20-adventures-in-ai-assisted-proof-generation.md @@ -0,0 +1,17 @@ +--- +layout: feed_post +title: "Adventures in AI-assisted proof generation" +slug: b4e7bf56-e429-4ec1-8cdf-b39afcd7ab07 +date: 2023-03-20 11:00:00 +tags: feed +permalink: /feed/2023-03-20-adventures-in-ai-assisted-proof-generation/ +feedtags: + - Blog Post +--- ++ Begrudgingly, I recently spent a bit of time playing around with ChatGPT and its prowess with the Coq proof-assistant language. +
+ ++ I chronicle my adventures, and some of my broader thoughts, in this blog post. +
\ No newline at end of file diff --git a/src/feed/posts/2023-05-03-down-the-rabbit-hole-of-linux-terminal-emulators.md b/src/feed/posts/2023-05-03-down-the-rabbit-hole-of-linux-terminal-emulators.md new file mode 100644 index 0000000..5c7970b --- /dev/null +++ b/src/feed/posts/2023-05-03-down-the-rabbit-hole-of-linux-terminal-emulators.md @@ -0,0 +1,19 @@ +--- +layout: feed_post +title: "Down the Rabbit Hole of Linux Terminal Emulators" +slug: d6157751-4ccd-4e1e-af29-067a4157eb5e +date: 2023-05-03 11:00:00 +tags: feed +permalink: /feed/2023-05-03-down-the-rabbit-hole-of-linux-terminal-emulators/ +feedtags: + - Blog Post +--- +
+I've had a pretty stable shell setup consisting of Guake + Fish shell for ~5 years now.
+Recently, I decided I wanted the ability to copy-paste output w/ screen and
+the ramifications of this forced me to re-examine my entire setup.
+
+Read about my foibles here. +
\ No newline at end of file diff --git a/src/feed/posts/2023-11-20-markmark-simple-markdown-based-federated-bookmarks.md b/src/feed/posts/2023-11-20-markmark-simple-markdown-based-federated-bookmarks.md new file mode 100644 index 0000000..97ba3ea --- /dev/null +++ b/src/feed/posts/2023-11-20-markmark-simple-markdown-based-federated-bookmarks.md @@ -0,0 +1,21 @@ +--- +layout: feed_post +title: "MarkMark: simple, Markdown-based, federated bookmarks" +slug: 62df0d97-1e49-4c4c-bf25-e272f9dd26b6 +date: 2023-11-20 11:00:00 +tags: feed +permalink: /feed/2023-11-20-markmark-simple-markdown-based-federated-bookmarks/ +feedtags: + - Side Project +--- ++MarkMark is a free (as in freedom) bookmark format designed to be machine-readable and easy to use. +
+ ++The goal of MarkMark is to standardize "link sharing" pages to build connections between small websites on the Internet. +
+ ++Learn more or see it in action. +
\ No newline at end of file diff --git a/src/feed/posts/2024-04-22-mitigating-the-iconv-vulnerability-for-php-cve-2024-2961.md b/src/feed/posts/2024-04-22-mitigating-the-iconv-vulnerability-for-php-cve-2024-2961.md new file mode 100644 index 0000000..adaefa2 --- /dev/null +++ b/src/feed/posts/2024-04-22-mitigating-the-iconv-vulnerability-for-php-cve-2024-2961.md @@ -0,0 +1,21 @@ +--- +layout: feed_post +title: "Mitigating the iconv Vulnerability for PHP (CVE-2024-2961)" +slug: d6778cae-4f34-45ea-97c6-a94b2127c864 +date: 2024-04-22 11:00:00 +tags: feed +permalink: /feed/2024-04-22-mitigating-the-iconv-vulnerability-for-php-cve-2024-2961/ +feedtags: + - Blog Post +--- ++Recently, CVE-2024-2961 was released which identifies a buffer overflow vulnerability in GNU libc. +
+ ++I had a hard time finding information on how to mitigate it at the OS-level. I collected my notes, in case they might be useful for someone else. +
+ ++Read about it here. +
\ No newline at end of file diff --git a/src/feed/posts/2024-06-30-world-plate-adventures.md b/src/feed/posts/2024-06-30-world-plate-adventures.md new file mode 100644 index 0000000..9aa5e5b --- /dev/null +++ b/src/feed/posts/2024-06-30-world-plate-adventures.md @@ -0,0 +1,17 @@ +--- +layout: feed_post +title: "World Plate Adventures" +slug: 06f06691-b015-4e03-9424-03ea909c9769 +date: 2024-06-30 11:00:00 +tags: feed +permalink: /feed/2024-06-30-world-plate-adventures/ +feedtags: + - Side Project +--- ++ World Plate Adventures is a lifetime exploration of international food. Each month, we will choose a country and spend a few days researching the food. Then, each week of the month I'll cook a new dish from that country. +
+ ++ The first cuisine I'm exploring is France, with la Mère Brazier's blanquette de veau. +
\ No newline at end of file diff --git a/src/feed/posts/2024-12-31-markmark-v11-syndication.md b/src/feed/posts/2024-12-31-markmark-v11-syndication.md new file mode 100644 index 0000000..9a1a0f3 --- /dev/null +++ b/src/feed/posts/2024-12-31-markmark-v11-syndication.md @@ -0,0 +1,25 @@ +--- +layout: feed_post +title: "MarkMark v1.1 - Syndication" +slug: 7ac51c5d-fd19-4be7-a33b-ad694ce91979 +date: 2024-12-31 11:00:00 +tags: feed +permalink: /feed/2024-12-31-markmark-v11-syndication/ +feedtags: + - Site Update +--- ++I've published a new version of my markdown-based bookmark format, MarkMark. Version 1.1 adds support for tracking the date a link was saved. +
+ ++The MarkMark parser/renderer collection has been updated to support the new date format, as well as generating a unique hash identifier for each link (for use in permalinks). +
+ ++These changes enable better support for one of my favorite things on the web: syndication! With unique hashes and dates, it is now possible to automatically generate RSS/Atom/JSON feeds from a MarkMark list. +
+ ++Which means you can now subscribe to my bookmarks feed. ;) +
\ No newline at end of file diff --git a/src/feed/posts/2025-01-11-salvaging-a-corrupted-table-from-postgresql.md b/src/feed/posts/2025-01-11-salvaging-a-corrupted-table-from-postgresql.md new file mode 100644 index 0000000..ec21101 --- /dev/null +++ b/src/feed/posts/2025-01-11-salvaging-a-corrupted-table-from-postgresql.md @@ -0,0 +1,17 @@ +--- +layout: feed_post +title: "Salvaging a Corrupted Table from PostgreSQL" +slug: 4724ec7f-7d51-4043-9b97-fb7caf2b666b +date: 2025-01-11 11:00:00 +tags: feed +permalink: /feed/2025-01-11-salvaging-a-corrupted-table-from-postgresql/ +feedtags: + - Blog Post +--- ++I've been dealing with data corruption on the Postgres server in my home lab. When migrating to a new server, I wanted a way to recover "as much data as possible" from some non-critical tables. +
+ ++What resulted was a dirty, terrible, dangerous, and effective Postgres recovery tool. Read about it here. +
\ No newline at end of file diff --git a/src/feed/posts/2025-02-22-site-redesign.md b/src/feed/posts/2025-02-22-site-redesign.md index 1d0d766..59a354e 100644 --- a/src/feed/posts/2025-02-22-site-redesign.md +++ b/src/feed/posts/2025-02-22-site-redesign.md @@ -1,16 +1,13 @@ --- layout: feed_post -title: Site Redesign +title: "Site Redesign" slug: 79ddb506-367e-47ce-bc1d-cd34e5a302e8 -date: 2025-02-22 09:00:00 +date: 2025-02-22 11:00:00 tags: feed permalink: /feed/2025-02-22-site-redesign/ feedtags: - Site Update --- - -Sticking with my approximately-annual tradition of redesigning this site, I've just switched over to a new design. - -This design is my attempt to return to a simpler design language that better conveys my current mood, with really (_really_) good fonts on a solid background. - -Some more details on the [Technical](/technical) page. +Sticking with my approximately-annual tradition of redesigning this site, I've just switched over to a new design.
+This design is my attempt to return to a simpler design language that better conveys my current mood, with really (really) good fonts on a solid background.
+Some more details on the Technical page.
\ No newline at end of file diff --git a/src/humans.njk b/src/humans.njk index e43047a..89f0022 100644 --- a/src/humans.njk +++ b/src/humans.njk @@ -4,15 +4,15 @@ permalink: humans.txt /* PEOPLE */ Garrett Mills E-Mail: shout@garrettmills.dev - From: Lawrence, Kansas, USA (Rock Chalk!) + From: Kansas City, USA /* SITE */ - Updated: 2025-06-03 + Updated: 2026-02-28 Language: English Doctype: HTML5 IDE: IntelliJ IDEA Ultimate This site was built using the Eleventy SSG. - Copyright (C) 2015-2025 Garrett Mills. See `/technical` for licensing. + Copyright (C) 2015-2026 Garrett Mills. See `/technical` for licensing. /* OTHER */ Just a little something for the humans scraping the web... -GM diff --git a/src/robots.njk b/src/robots.njk index 2762fa7..137c9e6 100644 --- a/src/robots.njk +++ b/src/robots.njk @@ -40,15 +40,30 @@ permalink: robots.txt User-agent: Google-Extended Disallow: / +User-agent: Google-CloudVertexBot +Disallow: / + +User-agent: Gemini-Deep-Research +Disallow: / + +# Google + User-agent: GoogleOther Disallow: / User-agent: Googlebot-Image Disallow: / +User-agent: Googlebot-Video +Disallow: / + User-agent: AdsBot-Google Disallow: / +# Bing +User-agent: bingbot +Disallow: / + # Common Crawl User-agent: CCBot Disallow: / @@ -60,6 +75,9 @@ Disallow: / User-agent: ChatGPT Disallow: / +User-agent: ChatGPT Agent +Disallow: / + User-agent: GPTBot Disallow: / @@ -70,48 +88,250 @@ Disallow: / User-agent: Omgili Disallow: / -# Facebook AI +# Facebook User-agent: FacebookBot Disallow: / +User-agent: meta-externalagent +Disallow: / + +User-agent: Meta-ExternalAgent +Disallow: / + +User-agent: meta-externalfetcher +Disallow: / + +User-agent: Meta-ExternalFetcher +Disallow: / + +User-agent: meta-webindexer +Disallow: / + +# Anthropic +User-agent: anthropic-ai +Disallow: / + User-agent: Claude-Web Disallow: / User-agent: ClaudeBot Disallow: / +User-agent: Claude-SearchBot +Disallow: / + +User-agent: Claude-User +Disallow: / + # Apple AI User-agent: Applebot-Extended Disallow: / # Other AI training known or suspected -User-agent: anthropic-ai +User-agent: AddSearchBot Disallow: / -User-agent: PerplexityBot +User-agent: AI2Bot Disallow: / -User-agent: Bytespider -Disallow: / - -User-agent: The Knowledge AI +User-agent: Ai2Bot-Dolma Disallow: / User-agent: aiHitBot Disallow: / +User-agent: Andibot +Disallow: / + +User-agent: Awario +Disallow: / + +User-agent: bedrockbot +Disallow: / + +User-agent: bigsur.ai +Disallow: / + +User-agent: Brightbot 1.0 +Disallow: / + +User-agent: Bytespider +Disallow: / + User-agent: cohere-ai Disallow: / +User-agent: cohere-training-data-crawler +Disallow: / + +User-agent: Cotoyogi +Disallow: / + +User-agent: Crawlspace +Disallow: / + +User-agent: Datenbank Crawler +Disallow: / + +User-agent: DeepSeekBot +Disallow: / + +User-agent: Devin +Disallow: / + User-agent: Diffbot Disallow: / -User-agent: YouBot +User-agent: DuckAssistBot +Disallow: / + +User-agent: Echobot Bot +Disallow: / + +User-agent: EchoboxBot +Disallow: / + +User-agent: Factset_spyderbot +Disallow: / + +User-agent: FirecrawlAgent +Disallow: / + +User-agent: FriendlyCrawler +Disallow: / + +User-agent: iaskspider/2.0 +Disallow: / + +User-agent: ICC-Crawler Disallow: / User-agent: ImagesiftBot Disallow: / +User-agent: img2dataset +Disallow: / + +User-agent: ISSCyberRiskCrawler +Disallow: / + +User-agent: Kangaroo Bot +Disallow: / + +User-agent: LinerBot +Disallow: / + +User-agent: MistralAI-User +Disallow: / + +User-agent: MistralAI-User/1.0 +Disallow: / + +User-agent: MyCentralAIScraperBot +Disallow: / + +User-agent: netEstate Imprint Crawler +Disallow: / + +User-agent: NovaAct +Disallow: / + +User-agent: OAI-SearchBot +Disallow: / + +User-agent: Operator +Disallow: / + +User-agent: PanguBot +Disallow: / + +User-agent: Panscient +Disallow: / + +User-agent: panscient.com +Disallow: / + +User-agent: Perplexity-User +Disallow: / + +User-agent: PerplexityBot +Disallow: / + +User-agent: PetalBot +Disallow: / + +User-agent: PhindBot +Disallow: / + +User-agent: Poseidon Research Crawler +Disallow: / + +User-agent: QualifiedBot +Disallow: / + +User-agent: QuillBot +Disallow: / + +User-agent: quillbot.com +Disallow: / + +User-agent: SBIntuitionsBot +Disallow: / + +User-agent: Scrapy +Disallow: / + +User-agent: SemrushBot-OCOB +Disallow: / + +User-agent: SemrushBot-SWA +Disallow: / + +User-agent: ShapBot +Disallow: / + +User-agent: Sidetrade indexer bot +Disallow: / + +User-agent: TerraCotta +Disallow: / + +User-agent: The Knowledge AI +Disallow: / + +User-agent: Thinkbot +Disallow: / + +User-agent: TikTokSpider +Disallow: / + +User-agent: Timpibot +Disallow: / + +User-agent: VelenPublicWebCrawler +Disallow: / + +User-agent: WARDBot +Disallow: / + +User-agent: Webzio-Extended +Disallow: / + +User-agent: wpbot +Disallow: / + +User-agent: YaK +Disallow: / + +User-agent: YandexAdditional +Disallow: / + +User-agent: YandexAdditionalBot +Disallow: / + +User-agent: YouBot +Disallow: / + # Siri and Alexa yuck User-agent: Amazonbot Disallow: /