Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
41 lines (41 loc) · 48.3 KB
/
Copy pathindex.html
File metadata and controls
41 lines (41 loc) · 48.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"/><link href="/images/icons/logo-apple-icon.png" rel="bookmark" type="image/x-icon"/><link href="/images/icons/logo-apple-icon.png" rel="shortcut icon"/><link href="/images/icons/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon"/><title>Chris Bergeron's Tech Blog</title><link href="/images/icons/apple-touch-icon-16.png" rel="apple-touch-icon" sizes="16x16" type="image/png"/><link href="/images/icons/apple-touch-icon-29.png" rel="apple-touch-icon" sizes="29x29" type="image/png"/><link href="/images/icons/apple-touch-icon-32.png" rel="apple-touch-icon" sizes="32x32" type="image/png"/><link href="/images/icons/apple-touch-icon-40.png" rel="apple-touch-icon" sizes="40x40" type="image/png"/><link href="/images/icons/apple-touch-icon-50.png" rel="apple-touch-icon" sizes="50x50" type="image/png"/><link href="/images/icons/apple-touch-icon-57.png" rel="apple-touch-icon" sizes="57x57" type="image/png"/><link href="/images/icons/apple-touch-icon-58.png" rel="apple-touch-icon" sizes="58x58" type="image/png"/><link href="/images/icons/apple-touch-icon-60.png" rel="apple-touch-icon" sizes="60x60" type="image/png"/><link href="/images/icons/apple-touch-icon-64.png" rel="apple-touch-icon" sizes="64x64" type="image/png"/><link href="/images/icons/apple-touch-icon-72.png" rel="apple-touch-icon" sizes="72x72" type="image/png"/><link href="/images/icons/apple-touch-icon-76.png" rel="apple-touch-icon" sizes="76x76" type="image/png"/><link href="/images/icons/apple-touch-icon-80.png" rel="apple-touch-icon" sizes="80x80" type="image/png"/><link href="/images/icons/apple-touch-icon-87.png" rel="apple-touch-icon" sizes="87x87" type="image/png"/><link href="/images/icons/apple-touch-icon-100.png" rel="apple-touch-icon" sizes="100x100" type="image/png"/><link href="/images/icons/apple-touch-icon-114.png" rel="apple-touch-icon" sizes="114x114" type="image/png"/><link href="/images/icons/apple-touch-icon-120.png" rel="apple-touch-icon" sizes="120x120" type="image/png"/><link href="/images/icons/apple-touch-icon-128.png" rel="apple-touch-icon" sizes="128x128" type="image/png"/><link href="/images/icons/apple-touch-icon-144.png" rel="apple-touch-icon" sizes="144x144" type="image/png"/><link href="/images/icons/apple-touch-icon-152.png" rel="apple-touch-icon" sizes="152x152" type="image/png"/><link href="/images/icons/apple-touch-icon-167.png" rel="apple-touch-icon" sizes="167x167" type="image/png"/><link href="/images/icons/apple-touch-icon-180.png" rel="apple-touch-icon" sizes="180x180" type="image/png"/><link href="/images/icons/apple-touch-icon-256.png" rel="apple-touch-icon" sizes="256x256" type="image/png"/><link href="/images/icons/apple-touch-icon-512.png" rel="apple-touch-icon" sizes="512x512" type="image/png"/><link href="/images/icons/apple-touch-icon-1024.png" rel="apple-touch-icon" sizes="1024x1024" type="image/png"/><link href="/images/icons/apple-touch-icon-114.png" rel="icon" type="image/png"/><meta content="An online technology journal with how-to articles, projects and examples." name="description"/><meta content="width=device-width,initial-scale=1,maximum-scale=5" name="viewport"/><link href="https://chrisbergeron.com/rss2.xml" rel="alternate" title="RSS Feed" type="application/rss+xml"/><link href="https://chrisbergeron.com/atom.xml" rel="alternate" title="Atom Feed" type="application/rss+xml"/><link href="https://github.com/chrisbergeron/" rel="me"/><link href="https://twitter.com/bergeron" rel="me"/><link href="https://webmention.io/chrisbergeron.com/webmention" rel="webmention"/><link href="https://webmention.io/chrisbergeron.com/xmlrpc" rel="pingback"/><link href="https://indieauth.com/auth" rel="authorization_endpoint"/><link href="https://tokens.indieauth.com/token" rel="token_endpoint"/><script src="/mc.js"></script><link href="/manifest.json" rel="manifest"/><meta content="Chris Bergeron's Tech Blog" name="application-name"/><meta content="/images/favicon.ico" name="msapplication-TileImage"/><meta content="yes" name="apple-mobile-web-app-capable"/><meta content="Chris Bergeron's Tech Blog" name="apple-mobile-web-app-title"/><meta content="default" name="apple-mobile-web-app-status-bar-style"/><meta content="website" property="og:type"/><meta content="Chris Bergeron's Tech Blog" property="og:title"/><meta content="https://chrisbergeron.com/" property="og:url"/><meta content="Chris Bergeron's Tech Blog" property="og:site_name"/><meta content="An online technology journal with how-to articles, projects and examples." property="og:description"/><meta content="en_US" property="og:locale"/><meta content="https://chrisbergeron.com/images/cb-cover.jpg" property="og:image"/><meta content="Chris Bergeron" property="article:author"/><meta content="devsecops, devops, consultant, general technologist, futurism practitioner" property="article:tag"/><meta content="summary" property="twitter:card"/><meta content="https://chrisbergeron.com/images/cb-cover.jpg" property="twitter:image"/><meta content="@bergeron" property="twitter:creator"/><meta content="chrisbergeron.com | Chris Bergerons Tech Blog" itemprop="name"/><meta content="Technology journal with how-to articles, projects and examples." itemprop="description"/><meta content="https://chrisbergeron.com/images/cb-cover.jpg" itemprop="image"/><script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","mainEntityOfPage":{"@type":"WebPage","@id":"https://chrisbergeron.com"},"headline":"Chris Bergeron Tech Blog","image":["https://chrisbergeron.com/images/cb_cover.png"],"author":{"@type":"Person","name":"Chris Bergeron"},"description":"Educated and industry respected IT professional with over 25 years of experience in the technology industry. My experience is practical, useful and documented."}</script><link href="/" rel="alternate" title="Chris Bergeron Tech Blog" type="application/atom+xml"/><link href="/images/favicon.ico" rel="icon"/><link href="/css/atom-one-dark.css" rel="stylesheet"/><link href="/css/default.dark.css" id="theme-link" media="(prefers-color-scheme:dark)" rel="stylesheet"/><link href="/css/default.light.css" id="theme-link" media="(prefers-color-scheme:light)" rel="stylesheet"/><link href="/css/cookieconsent.min.css" rel="stylesheet"/><link href="/css/lightgallery.min.css" rel="stylesheet"/></head><body class="is-2-column"><nav class="navbar navbar-main"><div class="container"><div class="justify-content-center navbar-brand"><a class="navbar-item navbar-logo" href="/"><img alt="Chris Bergeron's Tech Blog" height="28" src="/images/logo.png" width="288"/></a></div><div class="navbar-menu"><div class="navbar-start"><a class="navbar-item is-active" href="/">Home</a><a class="navbar-item" href="/archives">Archives</a><a class="navbar-item" href="/categories">Categories</a><a class="navbar-item" href="/tags">Tags</a><a class="navbar-item" href="/about">About</a></div><div class="navbar-end"><a class="navbar-item" href="https://chrisbergeron.com/rss2.xml" rel="noopener" target="_blank" title="RSS Feed"><i class="fa fa-1x fa-rss"></i></a><a class="navbar-item search" href="javascript:;" title="Search"><i class="fas fa-search"></i></a></div></div></div></nav><section class="h-card vcard" style="display:none"><link href="https://aperture.p3k.io/microsub/690" rel="microsub"/><ul><li class="p-name fn"><span class="given-name p-given-name">Chris</span><span class="family-name p-family-name">Bergeron</span></li><li class="nickname p-nickname">chrisbergeron</li><li class="title p-job-title">DevSecOps Consultant, Architect</li><li class="p-role role">Senior DevOps Architect, Engineer</li><li><ul class="h-card org p-org"><li><a class="p-name organization-name p-organization-name u-url" href="https://chrisbergeron.com/">chrisbergeron.com</a></li><li><img alt="chrisbergeron.com" class="logo u-logo" src="https://chrisbergeron.com/images/icons/apple-touch-icon-114.png"/></li></ul></li><li><a class="email u-email" href="mailto:me@chrisbergeron.com">me@chrisbergeron.com</a></li><li><a class="p-tel tel" href="tel:+14043540901">+14043540901</a></li><li><a class="u-url url" href="https://chrisbergeron.com/" rel="me">chrisbergeron.com</a></li><li><a href="https://indieweb.social/@bergeron" rel="me">Mastodon</a><a href="https://mastodon.social/@bergeron" rel="me">Mastodon</a><a href="https://counter.social/@bergeron" rel="me">CounterSocial</a><a href="mailto:real@chrisbergeron.com" rel="me">email</a></li><li><address class="adr h-adr p-adr"><span class="locality p-locality">Atlanta, Georgia</span>,<span class="country-name p-country-name">USA</span></address></li><li class="note p-note">Technologist and Senior DevOps Architect and Consultant. Innovator, Engineer and Crypto Advocate. Deeply rooted in all things tech since the late 90's.</li><li><img alt="Chris Bergeron" class="photo u-photo" src="https://chrisbergeron.com/chrisbergeron.png" title="Chris Bergeron"/></li></ul></section><section class="section"><div class="container"><div class="columns"><div class="column column-main is-8-desktop is-8-tablet is-8-widescreen order-2"><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-09-03T21:45:21.000Z" title="2021-09-03T21:45:21.000Z">09-03-2021</time></span><span class="level-item">Updated <time datetime="2021-09-03T22:52:57.426Z" title="2021-09-03T22:52:57.426Z">09-03-2021</time></span></div></div><div class="content"><h1 id="Chris-Bergeron’s-Tech-Blog"><a class="headerlink" href="#Chris-Bergeron’s-Tech-Blog" title="Chris Bergeron’s Tech Blog"></a>Chris Bergeron’s Tech Blog</h1><p>Welcome to the Tech Blog. This is a stream of consciousness and partial representation of myself. It’s not sanctioned, approved or governed by any entity, employer or nation state. All thoughts, opinions and typos are mine.</p><p>I hope you enjoy your visit or at least learn something new.</p></div></article></div><div class="card"><article class="card-content article" data-post-url="/2026/08/11/why_ai_agents_need_verified_identity/" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2026-08-11T14:57:41.776Z" title="2026-08-11T14:57:41.776Z">08-11-2026</time></span><span class="level-item">Updated <time datetime="2026-08-11T15:00:16.897Z" title="2026-08-11T15:00:16.897Z">08-11-2026</time></span></div></div>
<h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2026/08/11/why_ai_agents_need_verified_identity/">Why AI agents need verified identity</a></h1><div class="content"><h2 id="I-paid-9-to-own-my-name-on-the-internet-forever"><a class="headerlink" href="#I-paid-9-to-own-my-name-on-the-internet-forever" title="I paid $9 to own my name on the internet forever"></a>I paid $9 to own my name on the internet forever</h2><p>I paid $9 to own my name on the internet. Not rent it. Own it. Cryptographically, portably, forever. Today I’m launching the on-ramp that lets you do the same:</p></div><a class="article-more button is-small is-size-7" href="/2026/08/11/why_ai_agents_need_verified_identity/#more">Read more</a></article></div><div class="card"><article class="card-content article" data-post-url="/2026/08/10/why_ai_agents_need_verified_identity/" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2026-08-10T13:09:36.625Z" title="2026-08-10T13:09:36.625Z">08-10-2026</time></span><span class="level-item">Updated <time datetime="2026-08-11T14:14:14.280Z" title="2026-08-11T14:14:14.280Z">08-11-2026</time></span></div></div>
<h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2022/01/30/Dynamic-SSH-ports-with-Hashicorp-Vault-TOTP/">Dynamic SSH ports with Hashicorp Vault TOTP</a></h1><div class="content"><p>In this post I’m demonstrating how you could use Hashicorp’s Vault TOTP generator and an authenticator to connect to a dynamic ssh port. This is mostly a proof of concept and not a production grade solution, so use at your own risk.</p><p>What’s TOTP? It’s a Time-based One Time Password. TBOTP is probably too ugly of an acronym to have gained widespread use. I don’t know, I didn’t coin it.</p><p><strong>¯\_(ツ)_/¯</strong></p></div><a class="article-more button is-small is-size-7" href="/2022/01/30/Dynamic-SSH-ports-with-Hashicorp-Vault-TOTP/#more">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-05-29T17:28:27.000Z" title="2022-05-29T17:28:27.000Z">05-29-2022</time></span><span class="level-item">Updated <time datetime="2022-05-31T01:31:55.043Z" title="2022-05-31T01:31:55.043Z">05-30-2022</time></span><span class="level-item"><a class="link-muted" href="/categories/Professional/">Professional</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2022/05/29/Own-Yourself-You-Are-Your-Brand/">Own Yourself - You Are Your Brand</a></h1><div class="content"><p>The crux of this article centers around personal branding in the field of tech. Whether it’s work, play or social, having an online persona has become the new normal. Online personas have grown from bleeding-edge gamers, content creators, vloggers and bloggers - to traditional soccer moms with recipe groups. The internet continues to connect <em>everyone</em> and as online trust and validation become more societially valuable, so too does the way you present yourself.</p><p></p><h2 id="What’s-in-a-Name"><a class="headerlink" href="#What’s-in-a-Name" title="What’s in a Name?"></a>What’s in a Name?</h2><img alt="Your brand precedes you." height="469" src="https://preview.chrisbergeron.com/2022/05/29/Own-Yourself-You-Are-Your-Brand/cb-blog-hero-brand-2-1-small.webp" title="I am not Ironman." width="600"/></div><a class="article-more button is-small is-size-7" href="/2022/05/29/Own-Yourself-You-Are-Your-Brand/#more">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-01-08T21:40:44.000Z" title="2022-01-08T21:40:44.000Z">01-08-2022</time></span><span class="level-item">Updated <time datetime="2022-01-08T22:38:04.288Z" title="2022-01-08T22:38:04.288Z">01-08-2022</time></span><span class="level-item"><a class="link-muted" href="/categories/Software/">Software</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2022/01/08/Monitoring-Uptime-Status-with-Github-Actions/">Monitoring Uptime Status with Github Actions</a></h1><div class="content"><p>I was searching github for some uptime monitoring apps when I stumbled across a github actions based uptime and status page.</p><p>It’s aptly named<a href="https://github.com/upptime/upptime" rel="noopener" target="_blank">upptime</a>and while it wasn’t what I was looking for, I found it to be novel and worth setting up:</p><p><img alt="Status Page - Upptime" height="588" loading="lazy" src="/2022/01/08/Monitoring-Uptime-Status-with-Github-Actions/screenshot-cb.webp" width="615"/><br/></p></div><a class="article-more button is-small is-size-7" href="/2022/01/08/Monitoring-Uptime-Status-with-Github-Actions/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-01-08T15:20:07.000Z" title="2022-01-08T15:20:07.000Z">01-08-2022</time></span><span class="level-item">Updated <time datetime="2022-01-08T19:41:22.678Z" title="2022-01-08T19:41:22.678Z">01-08-2022</time></span><span class="level-item"><a class="link-muted" href="/categories/Homelab/">Homelab</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2022/01/08/Time-Tracking-with-a-Disney-Infinity-USB-NFC-Reader/">Time Tracking with a Disney Infinity USB NFC Reader</a></h1><div class="content"><p>While browsing my local thrift store, I stumbled upon a little gadget that I decided to repurpose:</p><p><img alt="Disney Infinity USB NFC Reader" height="462" src="/2022/01/08/Time-Tracking-with-a-Disney-Infinity-USB-NFC-Reader/disney-infinity-nfc-time-tracker-IMG_0140-cb.webp" title="Disney Infinity USB NFC Reader" width="615"/></p><p>It was only $5.99 USD, so I thought it would be a fun project.</p><p>After I saw it the day prior, I searched for ‘Disney Infinity Linux’ to see if any work had been done toward decoding it or making it work. I found various sources that suggested that Playstation or Wii versions work fine, but the X-Box version was challenging. Fortunately, among the 5 they had, one was the Wii/Playstation version so I bought it. You can read more about purchase decision on the<a href="/2021/09/21/Thrift-Store-Scores/">thrift store scores</a>blog post.</p></div><a class="article-more button is-small is-size-7" href="/2022/01/08/Time-Tracking-with-a-Disney-Infinity-USB-NFC-Reader/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2022-01-08T14:40:20.000Z" title="2022-01-08T14:40:20.000Z">01-08-2022</time></span><span class="level-item">Updated<time datetime="2022-01-08T14:36:36.336Z" title="2022-01-08T14:36:36.336Z">01-08-2022</time></span><span class="level-item"><a class="link-muted" href="/categories/Home/">Home</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2022/01/08/Controlling-iRobot-Roomba-from-the-command-line/">Controlling iRobot Roomba from the Command Line</a></h1><div class="content"><p>If you’re a heavy command line (cli) user in Macos, Linux or WSL, you may it convenient to easily start or stop your robot from it’s cleaning cycle. In this post I’ll you fellow keyboard jockeys how to control and even view your robot as is cleans.</p><p><img alt="There's more than one way to skin a robot" height="385" loading="lazy" src="/2022/01/08/Controlling-iRobot-Roomba-from-the-command-line/irobot-skin-cb-1.webp" title="An iRobot Roomba robot vacuum in a blue skin" width="742"/></p></div><a class="is-size-7 article-more button is-small" href="/2022/01/08/Controlling-iRobot-Roomba-from-the-command-line/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-08-23T18:22:20.000Z" title="2021-08-23T18:22:20.000Z">08-23-2021</time></span><span class="level-item">Updated<time datetime="2021-08-24T19:14:40.574Z" title="2021-08-24T19:14:40.574Z">08-24-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Homelab/">Homelab</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/08/23/Hands-On-with-the-Gigabyte-Maple-Ridge-Thunderbolt-4-Card/">Hands On with the Gigabyte Maple Ridge Thunderbolt 4 Card</a></h1><div class="content"><p>I’ve been exploring Thunderbolt quite a bit lately. As a follow up to my post about<a href="/2021/07/25/Ultra-fast-Thunderbolt-NAS-with-Apple-M1-and-Linux/">using Thunderbolt in a NAS</a>, I recently bought a Gigabyte Maple Ridge Thunderbolt 4 add on card. I’ve captured a few thoughts, observations and pics here.</p><h1 id="Gigabyte-GC-Maple-Ridge"><a class="headerlink" href="#Gigabyte-GC-Maple-Ridge" title="Gigabyte GC-Maple Ridge"></a><a href="https://www.gigabyte.com/Motherboard/GC-MAPLE-RIDGE-rev-10#kf" rel="noopener" target="_blank">Gigabyte GC-Maple Ridge</a></h1><p><img alt="GC-Maple Ridge Thunderbolt 4 Add-on Card" data-original="/2021/08/23/Hands-On-with-the-Gigabyte-Maple-Ridge-Thunderbolt-4-Card/gigabyte-gc---maple-ridge-IMG_9158-cb.webp" height="435" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="Picture of Gigabyte brand GC-Maple Ridge Thunderbolt 4 add on card" width="600"/></p></div><a class="is-size-7 article-more button is-small" href="/2021/08/23/Hands-On-with-the-Gigabyte-Maple-Ridge-Thunderbolt-4-Card/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-08-11T14:46:52.000Z" title="2021-08-11T14:46:52.000Z">08-11-2021</time></span><span class="level-item">Updated<time datetime="2021-08-24T00:30:04.136Z" title="2021-08-24T00:30:04.136Z">08-23-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Homelab/">Homelab</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/08/11/Fast-RAID-0-DAS-Using-Multiple-Thunderbolt-4-Busses/">Fast RAID-0 DAS Using Two Thunderbolt 4 Enclosures</a></h1><div class="content"><p>In this post I’m demonstrating how to create a high-speed macos volume using 2 Thunderbolt ports and NVMe enclosures. This solution uses RAID-0 (striping) so the failure threshold is more than twice that of a normal standalone disk. This example is for demonstration purposes and could be useful for video editing scratch space, rendering, large photo sessions or similar uses. Obviously, good backups (RAID is not a backup) or a more reliable storage tier is recommended for daily use.</p><p><img alt="Thunderbolt 4 Benchmark: 2.22 GBs write, 3.74 GBs read" data-original="/2021/08/11/Fast-RAID-0-DAS-Using-Multiple-Thunderbolt-4-Busses/raid-0-nvme-thunderbolt-benchmark-1b-cb.webp" height="423" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="Screenshot of a benchmark tool displaying 2,221 Megabytes per second writing and 3,741 Megabytes reading." width="600"/></p></div><a class="is-size-7 article-more button is-small" href="/2021/08/11/Fast-RAID-0-DAS-Using-Multiple-Thunderbolt-4-Busses/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-07-26T01:58:08.000Z" title="2021-07-26T01:58:08.000Z">07-25-2021</time></span><span class="level-item">Updated<time datetime="2021-08-13T14:18:03.866Z" title="2021-08-13T14:18:03.866Z">08-13-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Homelab/">Homelab</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/07/25/Ultra-fast-Thunderbolt-NAS-with-Apple-M1-and-Linux/">Ultra fast Thunderbolt NAS with Apple M1 and Linux</a></h1><div class="content"><p><img alt="Thunderbolt 4" data-original="/2021/07/25/Ultra-fast-Thunderbolt-NAS-with-Apple-M1-and-Linux/thunderbolt-4-3.jpg" height="359" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="Image of Thunderbolt 4 Cable" width="600"/></p><p>In this post I discuss how you can upgrade a NAS Server by adding Thunderbolt 3 for lightning fast connectivity at 20 or 40Gbps. This particular implementation is specific to an Apple Mac Mini M1 and a<a href="https://chrisbergeron.com/2020/03/07/diy_das_part1/">Linux NAS server</a>on an older Supermicro X10SRL-F motherboard, but the principles should be the same on similar architectures and operating systems.</p></div><a class="is-size-7 article-more button is-small" href="/2021/07/25/Ultra-fast-Thunderbolt-NAS-with-Apple-M1-and-Linux/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-07-04T19:25:27.000Z" title="2021-07-04T19:25:27.000Z">07-04-2021</time></span><span class="level-item">Updated<time datetime="2021-08-06T04:08:31.356Z" title="2021-08-06T04:08:31.356Z">08-06-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Web/">Web</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/07/04/Person-is-not-a-known-valid-target-type-for-the-publisher-property/">Person is not a known valid target type for the publisher property.</a></h1><div class="content"><p>It’s not just you. If you’ve received this error the odds are pretty good this component of your schema is correct and your validator is mistaken.</p><center><p><img alt="Schema.org Person type" data-original="/2021/07/04/Person-is-not-a-known-valid-target-type-for-the-publisher-property/schema.org-person-property.png" height="88" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="Schema.org Person type details" width="494"/></p><p></p></center><br/>Specifically, in this case, the<a href="https://search.google.com/structured-data/testing-tool/u/0/" rel="noopener" target="_blank">Google Structured Data Tester</a>. After testing this blog, I was puzzled as to why Google was throwing an<code>Error</code>on this property. I checked the documentation on<a href="https://schema.org" rel="noopener" target="_blank">schema.org</a>and as expected,<code>Person</code><strong>is indeed</strong>a valid type for the<a href="https://schema.org/publisher" rel="noopener" target="_blank">Publisher</a>property.<p></p><p>Specifically, “Values expected to be one of these types: Organization and<a href="https://schema.org/Person" rel="noopener" target="_blank">Person</a>“. Perhaps I was missing context? Nope.</p><p>Google’s validator just needs to be updated to be in parity with the official Schema.org specs.</p><p>Thank you for coming to my Ted Talk.</p></div></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-07-03T16:38:39.000Z" title="2021-07-03T16:38:39.000Z">07-03-2021</time></span><span class="level-item">Updated<time datetime="2021-08-06T04:44:00.898Z" title="2021-08-06T04:44:00.898Z">08-06-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/AI/">AI</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/07/03/AiGenArt-AI-Generated-Art-Saturn/">AiGenArt, AI Generated Art - Saturn</a></h1><div class="content"><p>Saturn. This is an interesting piece. The keywords I used for this creation were ‘saturn’ and ‘smoke’.</p><center><br/><img alt="Saturn - AI Generated Art" data-original="/2021/07/03/AiGenArt-AI-Generated-Art-Saturn/AiGenArt-AI-Generated-Art-Saturn-3-small.png" height="331" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="AI Generated Art" width="600"/><br/></center><br/>It began with a mostly blank frame / canvas. The machine learning and training model set out to discover Saturn and generate accordingly. As the piece evolved (video below), I started to notice what appear to be rigid, unnatural lines take shape. It turns out that the machine found Saturn to be not only a planet, but also a car manufacturer! The result is an interesting collision of abstraction as only a computer could reason. Here is how the piece took form.<br/></div><a class="is-size-7 article-more button is-small" href="/2021/07/03/AiGenArt-AI-Generated-Art-Saturn/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-07-03T00:33:43.000Z" title="2021-07-03T00:33:43.000Z">07-02-2021</time></span><span class="level-item">Updated<time datetime="2021-08-06T04:09:20.251Z" title="2021-08-06T04:09:20.251Z">08-06-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/AI/">AI</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/07/02/Generating-Art-with-VQGAN-CLIP-AI/">Generating Art with VQGAN+CLIP AI</a></h1><div class="content"><p>I’ve been playing around with OpenGAN, TensorFlow, torch and a few other goodies lately. Adding CLIP to the mix gives me the ability to use common phrases to guide the AI to creating works. It’s fascinating to see what is generated based on the training models used. Some are surprisingly good and others, well, I’ll let you be the judge. Here are a few of the pieces along with the phrases that generated them:<br/></p></div><a class="is-size-7 article-more button is-small" href="/2021/07/02/Generating-Art-with-VQGAN-CLIP-AI/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-06-17T02:05:34.000Z" title="2021-06-17T02:05:34.000Z">06-16-2021</time></span><span class="level-item">Updated<time datetime="2021-08-17T02:28:37.149Z" title="2021-08-17T02:28:37.149Z">08-16-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Homelab/">Homelab</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/06/16/Pushover-Desktop-Yes-on-Apple-Silicon-M1-M2/">Pushover Desktop? Yes, on Apple Silicon.</a></h1><div class="content"><p><img alt="Pushover on macOS" data-original="/2021/06/16/Pushover-Desktop-Yes-on-Apple-Silicon-M1-M2/Pushover-Desktop-Yes-on-Apple-Silicon-M1-M2.png" height="396" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="Pushover Desktop?" width="600"/><br/><br/>At home I run a lot of gadgets. A mix of computer servers, IoT devices and various<a href="/2021/06/05/Raspberry-Pi-Garage-Door-Opener/">Raspberry Pi projects</a>that I’ve built. I always want to be aware of what’s happening with the home, so I’ve been using a notification app called Pushover. It’s a nice notification utility that can send messages to your phone or tablet, in addition to your desktop<em>browser</em>. The keyword here is<strong>browser</strong>.<br/></p></div><a class="is-size-7 article-more button is-small" href="/2021/06/16/Pushover-Desktop-Yes-on-Apple-Silicon-M1-M2/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-06-13T04:15:28.000Z" title="2021-06-13T04:15:28.000Z">06-13-2021</time></span><span class="level-item">Updated<time datetime="2021-08-06T04:11:23.551Z" title="2021-08-06T04:11:23.551Z">08-06-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Home/">Home</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/06/13/New-CB-Brand-Logo/">New CB Brand Logo</a></h1><div class="content"><p>I created a new logo and icon of my initials for my personal brand tonight:</p><p></p><center><br/><img alt="CB Initials" data-original="/2021/06/13/New-CB-Brand-Logo/cb-logo-side-padded-600w.png" height="300" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" width="300"/><br/></center><br/>It’s not something that<em>really</em>needs a blog post, but I’m adding it here for posterity. Maybe I’ll mint it as an NFT for anyone that has the initials CB. Ehh, no.<p></p></div></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-06-06T21:50:58.000Z" title="2021-06-06T21:50:58.000Z">06-06-2021</time></span><span class="level-item">Updated<time datetime="2021-08-06T04:14:58.466Z" title="2021-08-06T04:14:58.466Z">08-06-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Home/">Home</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/06/06/New-website-launch-chrisbergeron-com/">New website - launch.chrisbergeron.com</a></h1><div class="content"><center><br/><img alt="Next Rocket Launch" data-original="/2021/06/06/New-website-launch-chrisbergeron-com/launch-website-cb.webp" height="441" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="Next Rocket Launch" width="600"/><br/></center><br/>I wanted a quick, lightweight way to view rocket launches from Florida’s Space Coast - Kennedy Space Center but everything I found online was bloated. So, I create a simple website and Progressive Web App (PWA) so I could just check it on my phone.<br/></div><a class="is-size-7 article-more button is-small" href="/2021/06/06/New-website-launch-chrisbergeron-com/">Read more</a></article></div><div class="card"><article class="card-content article" role="article"><div class="level is-mobile article-meta is-size-7 is-uppercase"><div class="level-left"><span class="level-item">Posted<time datetime="2021-06-06T03:56:42.000Z" title="2021-06-06T03:56:42.000Z">06-05-2021</time></span><span class="level-item">Updated<time datetime="2021-08-06T04:34:28.531Z" title="2021-08-06T04:34:28.531Z">08-06-2021</time></span><span class="level-item"><a class="link-muted" href="/categories/Homelab/">Homelab</a></span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/2021/06/05/Creating-a-Magic-Mirror-with-a-Raspberry-Pi-3/">Creating a Magic Mirror with a Raspberry Pi</a></h1><div class="content"><center><br/><img alt="My Magic Mirror" data-original="/2021/06/05/Creating-a-Magic-Mirror-with-a-Raspberry-Pi-3/cb-magicmirror.webp" height="353" loading="lazy" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" title="Magic Mirror" width="600"/><br/></center></div><a class="is-size-7 article-more button is-small" href="/2021/06/05/Creating-a-Magic-Mirror-with-a-Raspberry-Pi-3/">Read more</a></article></div><nav aria-label="pagination" class="pagination" role="navigation"><div class="pagination-previous is-invisible is-hidden-mobile"><a href="/page/0/">Previous</a></div><div class="pagination-next"><a href="/page/2/">Next</a></div><ul class="pagination-list is-hidden-mobile"><li><a class="pagination-link is-current" href="/">1</a></li><li><a class="pagination-link" href="/page/2/">2</a></li><li><span class="pagination-ellipsis">…</span></li><li><a class="pagination-link" href="/page/7/">7</a></li></ul></nav></div><!--!--><div class="column column-right is-4-desktop is-4-tablet is-4-widescreen is-sticky order-3"><!--!--><div class="card widget" data-type="subscribe-email"><div class="card-content"><div class="menu"><h3 class="menu-label">Subscribe for more great content</h3><form action="https://chrisbergeron.us6.list-manage.com/subscribe/post?u=adaa13382eeaddeabadbb90bf&id=73e551a962" id="mc-embedded-subscribe-form" method="post" name="mc-embedded-subscribe-form" target="_blank"><input name="uri" type="hidden" value="ChrisBergeron"/> <input name="loc" type="hidden" value="en_US"/> <input name="u" type="hidden" value="adaa13382eeaddeabadbb90bf"/> <input name="id" type="hidden" value="73e551a962"/><div class="field has-addons"><div class="control has-icons-left is-expanded"><input autocapitalize="off" autocorrect="off" class="input" id="MERGE0" name="MERGE0" placeholder="Email" size="25" type="email"/><span class="icon is-left is-small"><i class="fas fa-envelope"></i></span></div><div class="control"><input class="button" type="submit" value="Subscribe"/></div></div><p class="help">Chris Bergerons Tech Blog</p></form></div></div></div><div class="card widget" data-type="links"><div class="card-content"><div class="menu"><h3 class="menu-label">Links</h3><ul class="menu-list"><li><a class="level is-mobile" href="https://holdingco.com" rel="noopener" target="_blank"><span class="level-left"><span class="level-item">The Holding Company</span></span><span class="level-right"><span class="level-item tag">holdingco.com</span></span></a></li><li><a class="level is-mobile" href="https://debris-art.com" rel="noopener" target="_blank"><span class="level-left"><span class="level-item">Debris Art</span></span><span class="level-right"><span class="level-item tag">debris-art.com</span></span></a></li><li><a class="level is-mobile" href="https://metacrypt.io" rel="noopener" target="_blank"><span class="level-left"><span class="level-item">MΞTΛcrypt</span></span><span class="level-right"><span class="level-item tag">metacrypt.io</span></span></a></li></ul></div></div></div><div class="card widget" data-type="recent-posts"><div class="card-content"><h3 class="menu-label">Recents</h3><article class="media"><figure class="media-left"><a class="image" href="/2022/05/29/Own-Yourself-You-Are-Your-Brand/"><img alt="Own Yourself - You Are Your Brand" src="/images/cb-64x64.png"/></a></figure><div class="media-content"><p class="date"><time datetime="2022-05-29T17:28:27.000Z">05-29-2022</time></p><p class="title"><a href="/2022/05/29/Own-Yourself-You-Are-Your-Brand/">Own Yourself - You Are Your Brand</a></p><p class="categories"><a href="/categories/Professional/">Professional</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/2022/01/08/Monitoring-Uptime-Status-with-Github-Actions/"><img alt="Monitoring Uptime Status with Github Actions" height="64" src="/images/github-logo-sm.png" width="64"/></a></figure><div class="media-content"><p class="date"><time datetime="2022-01-08T21:40:44.000Z">01-08-2022</time></p><p class="title"><a href="/2022/01/08/Monitoring-Uptime-Status-with-Github-Actions/">Monitoring Uptime Status with Github Actions</a></p><p class="categories"><a href="/categories/Software/">Software</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/2022/01/08/Time-Tracking-with-a-Disney-Infinity-USB-NFC-Reader/"><img alt="Time Tracking with a Disney Infinity USB NFC Reader" height="64" src="/images/disney-infinity-cb.png" width="64"/></a></figure><div class="media-content"><p class="date"><time datetime="2022-01-08T15:20:07.000Z">01-08-2022</time></p><p class="title"><a href="/2022/01/08/Time-Tracking-with-a-Disney-Infinity-USB-NFC-Reader/">Time Tracking with a Disney Infinity USB NFC Reader</a></p><p class="categories"><a href="/categories/Homelab/">Homelab</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/2022/01/08/Controlling-iRobot-Roomba-from-the-command-line/"><img alt="Controlling iRobot Roomba from the Command Line" height="64" src="/images/irobot.png" width="64"/></a></figure><div class="media-content"><p class="date"><time datetime="2022-01-08T14:40:20.000Z">01-08-2022</time></p><p class="title"><a href="/2022/01/08/Controlling-iRobot-Roomba-from-the-command-line/">Controlling iRobot Roomba from the Command Line</a></p><p class="categories"><a href="/categories/Home/">Home</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/2021/08/23/Hands-On-with-the-Gigabyte-Maple-Ridge-Thunderbolt-4-Card/"><img alt="Hands On with the Gigabyte Maple Ridge Thunderbolt 4 Card" data-original="/images/thunderbolt-tbt-icon.png" height="64" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsBAMAAACLU5NGAAAAHlBMVEVHcExZWVnU1NSbm5toaGiAgIC1tbXv7+8/Pz8ZGRkzrvrZAAAAAXRSTlMAQObYZgAAAxRJREFUeNrt2M1T00AYx/HQt1x56Iscg4UZj40tVG+GFvFIhaLHVqb1WgbwXgfHcvfQ/LfublJwU3CGKWaifj8zfckzmdlfN/uS1HEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+jLclkq/qE7f1MxgoqxPrrL2JGhzyxllr9ciLHnvnSkoOB/uLuSsfTJ5hXzTkLTiem3pLjyXAjlVilQETKqtmS+pSqbt/XlbtYV+rQjH1d308p1lA645580LFOx74cOU5eKntnEtzG6nVGUpmY+rhV8VOJlZOaegvK6hJ91l82dNC2WhtkEUt35VAG+tvAcX1JJVZBGubIi/tO5dMZVcDbWKYD1VugfoBTTCfWUF8e1VgjLlfVxTyMBtIilqf7dD2u59KJ5ZfNuJc30eGaqJ5pLE5YvBxHhYnr6cTq1czUl2d6hdhVs1L13ODeWHE9nVhxK/qjrlcIUR3m3Rsrrqcdq6TWhedbGYkVbCwuop7/emwVHohVSDPW3ZD3a9GQLz4w5KO6m/YCYfrtXBaz0k/GiuopLRCXpg+GMomuzlBUf9RM88lYUT2l5bQk5fjNr5rtWvfTwNp8FiPKT2Xz6Wueakxv1Q1deTsODlSIKzUlRzJainWlt+ryn45leNGNTc2JbmyqOyqE29OV4lIsU2+nFMu56El0l1cPOoOS2QH17d5yLFWvvHTMfpA5rtq0M6ikb3Gy5zLasLPUUWoEur5ZfrPkvLqnbvb3s3b9zOStepmbhKMgfqIEAAAAAPwLXof2X1P52bX91OfP3ttP992OfcJOv20d55p7Kz/658NwbhVe3czWrRTT6bV1wna3e2Sl6PePrRPqzWZj1ViFMAytH/9xfvP11+PidDq1Tmh1u9Y/Dvl+v2/1zlmz2V411loy1rvZ/PGxvKeOVbynt77bY21zc5KIdWhd5WRv1Z8gVi4Mf1iFF7O5PXSm02/JsdX47di6aDYHK8/EbbHHZ+6k4yQmWiM50ZzEELdnpjv+xAIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI/2Ez8QiNuDAFljAAAAAElFTkSuQmCC" width="64"/></a></figure><div class="media-content"><p class="date"><time datetime="2021-08-23T18:22:20.000Z">08-23-2021</time></p><p class="title"><a href="/2021/08/23/Hands-On-with-the-Gigabyte-Maple-Ridge-Thunderbolt-4-Card/">Hands On with the Gigabyte Maple Ridge Thunderbolt 4 Card</a></p><p class="categories"><a href="/categories/Homelab/">Homelab</a></p></div></article></div></div><div class="card widget" data-type="categories"><div class="card-content"><div class="menu"><h3 class="menu-label">Categories</h3><ul class="menu-list"><li><a class="level is-mobile" href="/categories/AI/"><span class="level-start"><span class="level-item">AI</span></span><span class="level-end"><span class="level-item tag">2</span></span></a></li><li><a class="level is-mobile" href="/categories/Crypto/"><span class="level-start"><span class="level-item">Crypto</span></span><span class="level-end"><span class="level-item tag">3</span></span></a></li><li><a class="level is-mobile" href="/categories/Devops/"><span class="level-start"><span class="level-item">Devops</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/Home/"><span class="level-start"><span class="level-item">Home</span></span><span class="level-end"><span class="level-item tag">7</span></span></a></li><li><a class="level is-mobile" href="/categories/Homelab/"><span class="level-start"><span class="level-item">Homelab</span></span><span class="level-end"><span class="level-item tag">17</span></span></a></li><li><a class="level is-mobile" href="/categories/Linux/"><span class="level-start"><span class="level-item">Linux</span></span><span class="level-end"><span class="level-item tag">11</span></span></a></li><li><a class="level is-mobile" href="/categories/Politics/"><span class="level-start"><span class="level-item">Politics</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/Professional/"><span class="level-start"><span class="level-item">Professional</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/Projects/"><span class="level-start"><span class="level-item">Projects</span></span><span class="level-end"><span class="level-item tag">4</span></span></a></li><li><a class="level is-mobile" href="/categories/Software/"><span class="level-start"><span class="level-item">Software</span></span><span class="level-end"><span class="level-item tag">7</span></span></a></li><li><a class="level is-mobile" href="/categories/Telematics/"><span class="level-start"><span class="level-item">Telematics</span></span><span class="level-end"><span class="level-item tag">3</span></span></a></li><li><a class="level is-mobile" href="/categories/Web/"><span class="level-start"><span class="level-item">Web</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></div></div></div></div></div></div></section><footer class="footer"><div class="container"><div class="level"><div class="level-start"><a class="footer-logo is-block mb-2" href="/"><img alt="Chris Bergerons Tech Blog" height="28" src="/images/logo.png" width="288"/></a><p class="is-size-7"><span>© 2022 Chris Bergeron</span>Powered by<a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a>&<a href="https://github.com/ppoffice/hexo-theme-icarus" rel="noopener" target="_blank">Icarus</a></p></div><div class="level-end"><div class="field has-addons"><p class="control"><a class="button is-transparent is-large" href="https://chrisbergeron.com/atom.xml" rel="noopener" target="_blank" title="RSS"><i class="fa fa-rss fa-1x"></i></a></p><p class="control"><a class="button is-transparent is-large" href="https://github.com/chrisbergeron/" rel="noopener" target="_blank" title="GitHub"><i class="fab fa-github"></i></a></p><p class="control"><a class="button is-transparent is-large" href="https://c-bergeron.medium.com/" rel="noopener" target="_blank" title="Medium"><i class="fab fa-medium"></i></a></p><p class="control"><a class="button is-transparent is-large" href="https://twitter.com/bergeron" rel="noopener" target="_blank" title="Twitter"><i class="fab fa-tiwtter"></i></a></p></div></div></div></div></footer></body><script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/moment@2.22.2/min/moment-with-locales.min.js"></script><script async="" src="https://cdn.jsdelivr.net/npm/clipboard@2.0.4/dist/clipboard.min.js"></script><script>moment.locale("en");</script><script>var IcarusThemeSettings={article:{highlight:{clipboard:!0,fold:"unfolded"}}};</script><script src="/js/column.js"></script><a href="javascript:;" id="back-to-top" title="Back to top"><i class="fas fa-chevron-up"></i></a><script defer="" src="/js/back_to_top.js"></script><!--!--><!--!--><!--!--><script defer="" src="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.js"></script><script>window.addEventListener("load", () => {
window.cookieconsent.initialise({
type: "info",
theme: "edgeless",
static: false,
position: "bottom-left",
content: {
message: "This website uses cookies to improve your experience.",
dismiss: "Got it!",
allow: "Allow cookies",
deny: "Decline",
link: "Learn more",
policy: "Cookie Policy",
href: "https://www.cookiesandyou.com/",
},
palette: {
popup: {
background: "#edeff5",
text: "#838391"
},
button: {
background: "#4b81e8"
},
},
});
});</script><script defer="" src="https://cdn.jsdelivr.net/npm/lightgallery@1.6.8/dist/js/lightgallery.min.js"></script><script defer="" src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/js/jquery.justifiedGallery.min.js"></script><script>window.addEventListener("load", () => {
if(typeof $.fn.lightGallery === 'function') {
$('.article').lightGallery({
selector: '.gallery-item'
});
}
if(typeof $.fn.justifiedGallery === 'function') {
if($('.justified-gallery > p > .gallery-item').length) {
$('.justified-gallery > p > .gallery-item').unwrap();
}
$('.justified-gallery').justifiedGallery();
}
});</script><!--!--><!--!--><!--!--><!--!--><script defer="" src="/js/main.js"></script><div class="searchbox"><div class="searchbox-container"><div class="searchbox-header"><div class="searchbox-input-container"><input class="searchbox-input" placeholder="Type something..."/></div><a class="searchbox-close" href="javascript:;">×</a></div><div class="searchbox-body"></div></div></div><script defer="" src="/js/insight.js"></script><script>document.addEventListener("DOMContentLoaded",function(){loadInsight({contentUrl:"/content.json"},{hint:"Type something...",untitled:"(Untitled)",posts:"Posts",pages:"Pages",categories:"Categories",tags:"Tags"})});</script><script>!function(t){function e(){for(var e=0;e<n.length;e++)!function(e){var i,o,a,l;a=(o=n[e]).getBoundingClientRect(),l=t.innerWidth||document.documentElement.clientWidth,o=t.innerHeight||document.documentElement.clientHeight,(100<=a.top||100<=a.left||a.top<0&&100<=a.top+a.height||a.left<0&&100<=a.left+a.width)&&a.top<=o&&a.left<=l&&(o=function(){n.splice(e,1)},a=(i=n[e]).getAttribute("data-original"),"yes"!==i.getAttribute("data-init")&&(l=i.getAttribute("data-isbg"),a=a.replace(/^https?:/,""),l?i.style.backgroundImage=a:i.setAttribute("src",a),i.setAttribute("data-init","yes"),o&&o()))}(e)}var n=Array.prototype.slice.call(document.querySelectorAll("[data-original]"));e(),t.addEventListener("scroll",e)}(this);</script></html>