<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>allan.reyes.sh</title><link>https://allan.reyes.sh/</link><description>Recent content on allan.reyes.sh</description><generator>Hugo</generator><language>en-us</language><copyright>Allan Reyes</copyright><lastBuildDate>Thu, 01 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://allan.reyes.sh/index.xml" rel="self" type="application/rss+xml"/><item><title>Keeping Secrets Out of Logs</title><link>https://allan.reyes.sh/posts/keeping-secrets-out-of-logs/</link><pubDate>Fri, 02 Aug 2024 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/posts/keeping-secrets-out-of-logs/</guid><description>&lt;br/&gt;
&lt;div style="display: flex; align-items: center;"&gt;
 &lt;img src="https://allan.reyes.sh/img/avatar-48p.png" alt="Pixellated avatar" /&gt;
 &lt;div style="min-width: 0.75em"&gt;&lt;/div&gt;
 &lt;em&gt;"This is the blog version of a talk I gave at LocoMocoSec 2024. It&amp;rsquo;s
mostly a lightly edited transcript with some screenshots, so if you&amp;rsquo;d prefer,
you can watch the
&lt;a href="https://slideslive.com/39021794/keeping-secrets-out-of-logs"&gt;video&lt;/a&gt; or just
flip through the &lt;a href="https://allan.reyes.sh/pdf/ksool.pdf"&gt;slides&lt;/a&gt;."&lt;/em&gt;
&lt;/div&gt;

&lt;hr&gt;
&lt;p&gt;This post is about how to keep secrets out of logs, and my claim is that &lt;em&gt;(like
many things in security)&lt;/em&gt; there isn&amp;rsquo;t a singular action or silver bullet that
lets you do this. I would go so far as to say that there&amp;rsquo;s not even an 80/20
rule, where one action fixes 80% of the problem. It&amp;rsquo;s not like preventing SQL
injection with prepared statements or preventing buffer overflows by using
memory-safe languages.&lt;/p&gt;</description></item><item><title>Mental Models</title><link>https://allan.reyes.sh/models/</link><pubDate>Sun, 17 Mar 2024 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/models/</guid><description>&lt;p&gt;I really like lists! I also really like &lt;em&gt;mental models&lt;/em&gt;. This post is about both.&lt;/p&gt;
&lt;p&gt;I use &amp;ldquo;mental models&amp;rdquo; quite loosely here: any kind of model, law, idiom,
aphorism, etc. that helps me take something about how the world works and
capture, compress, and distill it down to something named. They&amp;rsquo;re like pointers
in an index that help me retrieve and recall the right page (and the content
that lives there).&lt;/p&gt;</description></item><item><title>Read-once Objects</title><link>https://allan.reyes.sh/posts/read-once-objects/</link><pubDate>Sun, 22 Oct 2023 10:00:00 -0400</pubDate><guid>https://allan.reyes.sh/posts/read-once-objects/</guid><description>&lt;p&gt;Hello! In the previous post, I covered &lt;a href="https://allan.reyes.sh/posts/tainted-types/"&gt;tainted types&lt;/a&gt; as the second of a &lt;a href="https://allan.reyes.sh/tags/domain-primitives"&gt;domain primitives
series&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tainted types helped us package dangerous user input into a value object to
ensure that all the areas where it propagated to are handled correctly. We&amp;rsquo;ll
extend the value object concept to create a container for sensitive data. It&amp;rsquo;s
one of my &lt;em&gt;favorite&lt;/em&gt; domain primitives. They are &lt;em&gt;fantastic&lt;/em&gt; for storing and
tracking sensitive data, and preventing them from &lt;a href="https://www.bleepingcomputer.com/news/security/twitter-admits-recording-plaintext-passwords-in-internal-logs-just-like-github/"&gt;leaking into logs&lt;/a&gt;.
(&lt;em&gt;I&amp;rsquo;m sure you&amp;rsquo;ve been there.&lt;/em&gt;)&lt;/p&gt;</description></item><item><title>Tainted Types</title><link>https://allan.reyes.sh/posts/tainted-types/</link><pubDate>Sun, 22 Oct 2023 09:00:00 -0400</pubDate><guid>https://allan.reyes.sh/posts/tainted-types/</guid><description>&lt;p&gt;Welcome! In the previous post, I covered &lt;a href="https://allan.reyes.sh/posts/branded-types/"&gt;branded types&lt;/a&gt; as the first of a &lt;a href="https://allan.reyes.sh/tags/domain-primitives"&gt;domain primitives
series&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Where branded types helped us ensure upstream code is correct, we can flip the
script and use another type of domain object (specifically, a &lt;em&gt;value object&lt;/em&gt;) to
ensure that downstream code is correct. As the adage goes, &amp;ldquo;always validate user
input!&amp;rdquo; We can &amp;ldquo;taint&amp;rdquo; user input as it enters our system and force everything
that handles it to either validate or sanitize it.&lt;/p&gt;</description></item><item><title>Branded Types</title><link>https://allan.reyes.sh/posts/branded-types/</link><pubDate>Sat, 21 Oct 2023 09:00:00 -0400</pubDate><guid>https://allan.reyes.sh/posts/branded-types/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Code that handles bare string primitives with important semantic and
security concerns isn&amp;rsquo;t using the type system to its fullest extent.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;—Brendan Eich, probably&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the first post of a &lt;a href="https://allan.reyes.sh/tags/domain-primitives"&gt;series on domain
primitives&lt;/a&gt; that show how they lay a secure foundation
for software. I&amp;rsquo;ll discuss alternatives to string primitives using an
&lt;a href="https://expressjs.com/"&gt;Express&lt;/a&gt; web server written in &lt;a href="https://www.typescriptlang.org/"&gt;TypeScript&lt;/a&gt; as an example,
but the concepts introduced here can be generalized to replace &lt;em&gt;any&lt;/em&gt; primitive
and they can be used in other languages that support type guards.&lt;/p&gt;</description></item><item><title>Always Tell When You Stop Telling</title><link>https://allan.reyes.sh/posts/always-tell-when-you-stop-telling/</link><pubDate>Sun, 05 Feb 2023 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/posts/always-tell-when-you-stop-telling/</guid><description>&lt;p&gt;Most services and systems that provide webhooks often lack a critical feature:
telling you when it&amp;rsquo;s been changed or shut off. This is a particularly fragile
and dangerous setup if you rely on receiving these events for rare but critical
events. It might seem obvious, but I see this missing &lt;em&gt;everywhere&lt;/em&gt;, and I wish
that weren&amp;rsquo;t the case!&lt;/p&gt;
&lt;h2 id="on-telling"&gt;On Telling&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s say you&amp;rsquo;re using &lt;a href="https://tailscale.com/"&gt;Tailscale&lt;/a&gt; (a &lt;em&gt;lovely&lt;/em&gt; product)
to manage access to your infrastructure and you&amp;rsquo;ve set up webhooks to notify
you of any changes to access control lists. You&amp;rsquo;ve set this up for ingestion
into your fancy logging pipeline or SIEM and you&amp;rsquo;ve set up various detection
rules or notifications so you can know when the state of your system has
unexpectedly changed. What happens if or when the renowned evil attacker,
&lt;em&gt;Mallory&lt;/em&gt; (she&amp;rsquo;s &lt;em&gt;everywhere&lt;/em&gt;!), gets access to the control plane?&lt;/p&gt;</description></item><item><title>Literature Insights</title><link>https://allan.reyes.sh/insights/</link><pubDate>Mon, 23 Jan 2023 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/insights/</guid><description>&lt;p&gt;This is an &amp;ldquo;evergreen&amp;rdquo; page that I&amp;rsquo;m backfilling from reading notes and keeping
updated moving forward. I distill and compress the #1 thing I learned or took
away from various pieces of literature (except books, but feel free to check out
my &lt;a href="https://allan.reyes.sh/reading/"&gt;reading pipeline&lt;/a&gt;). It&amp;rsquo;s far from perfect:
run-on sentences galore to fit into the arbitrary one-sentence restriction.
Nonetheless, I hope this piques your interest and encourages you to read the
source material. Items that are &lt;em&gt;italicized&lt;/em&gt; are some of my favorites.&lt;/p&gt;</description></item><item><title>Every Online Course I've Taken</title><link>https://allan.reyes.sh/courses/</link><pubDate>Thu, 10 Feb 2022 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/courses/</guid><description>&lt;p&gt;👇 Enough blabber? Jump down to &lt;a href="#courses"&gt;courses&lt;/a&gt; or &lt;a href="#degrees"&gt;degrees&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These courses were offered mostly by &lt;a href="https://www.coursera.org/"&gt;Coursera&lt;/a&gt;, &lt;a href="https://www.edx.org/"&gt;edX&lt;/a&gt;,
&lt;a href="https://www.udacity.com/"&gt;Udacity&lt;/a&gt;, (free) and &lt;a href="https://www.gatech.edu/"&gt;Georgia Tech&lt;/a&gt;, with the latter spanning
&lt;a href="#degrees"&gt;three masters programs&lt;/a&gt; (paid). Topics were mostly in computer
science, machine learning, data analytics, and security. I want to be clear
right out of the gate: I took &lt;em&gt;way&lt;/em&gt; too many courses, and I do &lt;strong&gt;not&lt;/strong&gt; recommend
to others to follow suit. (See the &lt;a href="#faq"&gt;FAQ&lt;/a&gt; for more details.) Bottom line: I
think a more focused approach would be a far more efficient use of one&amp;rsquo;s time.&lt;/p&gt;</description></item><item><title>Dear Recruiter</title><link>https://allan.reyes.sh/recruiter/</link><pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/recruiter/</guid><description>&lt;div style="display: flex; align-items: center;"&gt;
 &lt;img src="https://allan.reyes.sh/img/avatar-48p.png" alt="Pixellated avatar" /&gt;
 &lt;div style="min-width: 0.75em"&gt;&lt;/div&gt;
 &lt;em&gt;"Hi! I hope this standard letter saves us both some time, which we
could all use a little bit more of these days."&lt;/em&gt;
&lt;/div&gt;

&lt;p&gt;👋 Thanks for reaching out. I&amp;rsquo;m always open to hearing about new and exciting
opportunities and what amazing things that people are building. I do get a high
volume of recruitment emails, and I totally acknowledge and am thankful for how
lucky I am to be in that position.&lt;/p&gt;</description></item><item><title>About</title><link>https://allan.reyes.sh/about/</link><pubDate>Sat, 05 Feb 2022 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/about/</guid><description>&lt;div style="display: flex; align-items: center;"&gt;
 &lt;img src="https://allan.reyes.sh/img/avatar-48p.png" alt="Pixellated avatar" /&gt;
 &lt;div style="min-width: 0.75em"&gt;&lt;/div&gt;
 &lt;em&gt;"You&amp;rsquo;ve stumbled on my &lt;a href="https://allan.reyes.sh/img/wtf.gif"&gt;user manual&lt;/a&gt;!"&lt;/em&gt;
&lt;/div&gt;

&lt;p&gt;I&amp;rsquo;m a father, software engineer, and veteran. The first one is most important—I
love those little kiddos! But also, if you ever hop on a call with me and hear
utter chaos in the background, just know that I am &lt;a href="http://web.archive.org/web/20220326224347/https://twitter.com/recursivetaco/status/1163195141676576769"&gt;barely holding it
together&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While I enjoy working on security and reliability, I&amp;rsquo;m an avowed software
generalist that loves parachuting into and learning about new domains. I&amp;rsquo;ve
accepted it and just lean into it at this point; I am an &lt;em&gt;obsessively&lt;/em&gt; curious
person and I enjoy learning how to do new things. This site is basically a loose
collection of the things I learn &lt;em&gt;and&lt;/em&gt; manage to write down.&lt;/p&gt;</description></item><item><title>Reading Pipeline</title><link>https://allan.reyes.sh/reading/</link><pubDate>Sat, 05 Feb 2022 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/reading/</guid><description>&lt;p&gt;A list of books in various stages of my reading pipeline. There are no affiliate
links. Also see: complementary lists for &lt;a href="https://allan.reyes.sh/courses/"&gt;courses&lt;/a&gt;
and &lt;a href="https://allan.reyes.sh/insights/"&gt;papers, articles, and talks&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="currently-reading"&gt;Currently Reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.martinfowler.com/books/eaa.html"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="on-the-radar"&gt;On the Radar&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://algorithmstoliveby.com/"&gt;Algorithms to Live By&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612"&gt;Design Patterns&lt;/a&gt; (GoF)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.poodr.com/"&gt;Practical Object-Oriented Design using Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/"&gt;The Pragmatic Programmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pragprog.com/titles/ruby5/programming-ruby-3-3-5th-edition/"&gt;Programming Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="snoozed"&gt;Snoozed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://craftinginterpreters.com/"&gt;Crafting Interpreters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/G%C3%B6del-Escher-Bach-Eternal-Golden/dp/0465026567"&gt;Godel, Escher, Bach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.com/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470"&gt;The Web Application Hacker&amp;rsquo;s Handbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="finished"&gt;Finished&lt;/h2&gt;
&lt;p&gt;Books I&amp;rsquo;ve read, ordered from most recent to some time in ~2022 when I started
writing this down.&lt;/p&gt;</description></item><item><title>CV</title><link>https://allan.reyes.sh/cv/</link><pubDate>Sat, 01 Jan 2022 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/cv/</guid><description>&lt;div style="display: flex; align-items: center;"&gt;
 &lt;img src="https://allan.reyes.sh/img/avatar-48p.png" alt="Pixellated avatar" /&gt;
 &lt;div style="min-width: 0.75em"&gt;&lt;/div&gt;
 &lt;em&gt;"Hi! I&amp;rsquo;m Allan. I build and break software."&lt;/em&gt;
&lt;/div&gt;

&lt;p&gt;I am a software engineer with a penchant for security, reliability, and
devops. You can learn more &lt;a href="https://allan.reyes.sh/about/"&gt;about me&lt;/a&gt; from my
&lt;a href="https://allan.reyes.sh/leadership/"&gt;leadership philosophy&lt;/a&gt; or &lt;a href="https://allan.reyes.sh/reading/"&gt;reading list&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="work"&gt;Work&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;A Healthcare Software Company&lt;/em&gt; (2025-present). &lt;em&gt;
&lt;style&gt;
 #span-995a5e93.cloaked-e-mail:before {
 content:attr(data-domain) "\0040" attr(data-user);
 unicode-bidi:bidi-override;
 direction:rtl;
 }
&lt;/style&gt;
&amp;#32;&lt;span class="cloaked-e-mail" data-user="ih" data-domain="!iH=tcejbus?hs.seyer" id="span-995a5e93"&gt;&lt;/span&gt;&amp;#32;

&lt;script id="script-995a5e93"&gt;
 var scriptTag = document.getElementById("script-995a5e93");
 var link = document.createElement("a");
 var address = "ih".split('').reverse().join('') + "@" + "!iH=tcejbus?hs.seyer".split('').reverse().join('');
 link.href = "mailto" + ":" + address;
 
 link.innerText = "Email";
 
 
 scriptTag.parentElement.insertBefore(link, scriptTag.previousElementSibling);
 scriptTag.parentElement.removeChild(scriptTag.previousElementSibling)
&lt;/script&gt;

 for details&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>The YAML-Norway Law</title><link>https://allan.reyes.sh/posts/yaml-norway-law/</link><pubDate>Wed, 20 Jun 2018 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/posts/yaml-norway-law/</guid><description>&lt;p&gt;YAML Ain&amp;rsquo;t Markup Language (YAML) is a human-readable data serialization
language, and if you ever try to abbreviate &amp;ldquo;Norway,&amp;rdquo; you just might run into
a surprising outcome.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;NI&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Nicaragua&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;NL&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Netherlands&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;NO&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Norway&lt;/span&gt; &lt;span style="color:#75715e"&gt;# boom!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Does it work? NO|No|no, but not &amp;ldquo;NO&amp;rdquo;. &lt;code&gt;NO&lt;/code&gt; is parsed as a boolean type, which
with the &lt;a href="http://yaml.org/type/bool.html"&gt;YAML 1.1 spec&lt;/a&gt;, there are 11 ways to say &lt;code&gt;false&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;n&lt;/li&gt;
&lt;li&gt;N&lt;/li&gt;
&lt;li&gt;no&lt;/li&gt;
&lt;li&gt;No&lt;/li&gt;
&lt;li&gt;NO&lt;/li&gt;
&lt;li&gt;false&lt;/li&gt;
&lt;li&gt;False&lt;/li&gt;
&lt;li&gt;FALSE&lt;/li&gt;
&lt;li&gt;off&lt;/li&gt;
&lt;li&gt;Off&lt;/li&gt;
&lt;li&gt;OFF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The correction:&lt;/p&gt;</description></item><item><title>Write Your Leadership Philosophy</title><link>https://allan.reyes.sh/leadership/</link><pubDate>Fri, 29 Dec 2017 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/leadership/</guid><description>&lt;p&gt;At best, it represents who you are and what you can deliver as a leader, and at
worst, it’s a contract for what you aspire to be.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I first wrote down my &lt;strong&gt;leadership philosophy&lt;/strong&gt; about a decade ago by writing
down all the values and practices I embraced. At the time, every great leader
and commander I served with had a written philosophy—so, I thought I should
craft one myself. It changed a lot since then, and &lt;em&gt;I’ve&lt;/em&gt; changed a lot.&lt;/p&gt;</description></item><item><title>Give Your Users a Taste of Badassery</title><link>https://allan.reyes.sh/posts/badassery/</link><pubDate>Sat, 18 Oct 2014 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/posts/badassery/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Wow! I love your app because I start out completely useless. I’m fumbling up
this learning curve and I have no idea what I’ll be able to do once I spend
the time to master it!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;— no user ever&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Start your users with this feeling:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://allan.reyes.sh/img/bear-lasers.png" alt="Flying bears shooting lasers out of their eyes"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Credit:
&lt;a href="http://www.reddit.com/r/WTF/comments/ldov4/i_want_to_believe/"&gt;reddit&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;hellip;before you start them at level 1:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://allan.reyes.sh/img/bear-apples.png" alt="Bear cub eating an apple off of a tree"&gt;&lt;/p&gt;</description></item><item><title>Privacy Policy</title><link>https://allan.reyes.sh/privacy/</link><pubDate>Wed, 01 Oct 2014 00:00:00 +0000</pubDate><guid>https://allan.reyes.sh/privacy/</guid><description>&lt;p&gt;I &lt;strong&gt;do not&lt;/strong&gt; employ analytics, trackers, affiliate links, or page view counters.
&lt;em&gt;Ain&amp;rsquo;t nobody got time for that&lt;/em&gt;. If you do happen to find something that
violates that privacy statement, reach out to me so I can fix it, because it&amp;rsquo;s
likely a programming mistake.&lt;/p&gt;
&lt;p&gt;While I don&amp;rsquo;t personally collect anything, this site is hosted using &lt;a href="https://pages.github.com/"&gt;GitHub
pages&lt;/a&gt;, so you should check their &lt;a href="https://docs.github.com/en/github/site-policy/github-privacy-statement#github-pages"&gt;privacy policy&lt;/a&gt;,
specifically:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Please note that GitHub may collect User Personal Information from visitors to
your GitHub Pages website, including logs of visitor IP addresses, to comply
with legal obligations, and to maintain the security and integrity of the
Website and the Service.&lt;/p&gt;</description></item></channel></rss>