This commit is contained in:
Bryan Ramos 2026-03-23 00:56:25 -04:00
parent 9576fe3e3f
commit f214ff3ada
20 changed files with 132 additions and 182 deletions

View file

@ -1,5 +1,5 @@
title: Bryan Ramos
description: Developer / Technologist
description: Software & Systems Engineer
url: "https://ramos.codes"
include:

4
_includes/footer.html Normal file
View file

@ -0,0 +1,4 @@
<footer>
<a href="https://git.ramos.codes" title="Forgejo"><i class="fa-solid fa-code-branch"></i></a>
<a href="{{ '/feed.xml' | relative_url }}" title="RSS Feed"><i class="fa-solid fa-rss"></i></a>
</footer>

View file

@ -2,6 +2,26 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% if page.title %}{{ page.title }} | {{ site.title }}{% else %}{{ site.title }} | {{ site.description }}{% endif %}</title>
<meta name="description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}">
<meta name="author" content="{{ site.title }}">
<link rel="canonical" href="{{ page.url | absolute_url }}">
<meta name="theme-color" content="#171e26">
<!-- Open Graph / LinkedIn / Facebook -->
<meta property="og:type" content="{% if page.layout == 'post' %}article{% else %}website{% endif %}">
<meta property="og:site_name" content="{{ site.title }}">
<meta property="og:url" content="{{ page.url | absolute_url }}">
<meta property="og:title" content="{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}">
<meta property="og:description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}">
<meta property="og:image" content="{{ '/assets/headshot.jpeg' | absolute_url }}">
<!-- Twitter -->
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}">
<meta name="twitter:description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}">
<meta name="twitter:image" content="{{ '/assets/headshot.jpeg' | absolute_url }}">
<!-- Theme script: runs before CSS to prevent flash of wrong theme -->
<script>
(function() {

View file

@ -20,15 +20,14 @@
<i class="fa-solid fa-sun icon-sun"></i>
</button>
<img src="{{ '/assets/pfp.gif' | relative_url }}" alt="Bryan Ramos" class="pfp">
<img src="{{ '/assets/headshot.jpeg' | relative_url }}" alt="Bryan Ramos" class="pfp">
<h1>Bryan Ramos</h1>
<p class="header-tagline">Developer &amp; Technologist</p>
<p class="header-tagline">Software &amp; Systems Engineer</p>
<ul>
<li><a href="mailto:bryan@ramos.codes" aria-label="Email"><i class="fa-solid fa-envelope"></i></a></li>
<li><a href="https://github.com/itme-brain" aria-label="GitHub"><i class="fa-brands fa-github"></i></a></li>
<li><a href="{{ '/pgpkey' | relative_url }}" aria-label="PGP Key"><i class="fa-sharp fa-solid fa-key"></i></a></li>
<li><a href="https://www.linkedin.com/in/bryan-ramos-ab467228a/" aria-label="LinkedIn"><i class="fa-brands fa-linkedin-in"></i></a></li>
<li><a href="{{ '/blog' | relative_url }}" aria-label="Blog"><i class="fa-solid fa-blog"></i></a></li>
<ul class="nav-links">
<li><a href="mailto:bryan@ramos.codes"><i class="fa-solid fa-envelope"></i><span>Email</span></a></li>
<li><a href="https://github.com/itme-brain"><i class="fa-brands fa-github"></i><span>GitHub</span></a></li>
<li><a href="https://www.linkedin.com/in/bryan-ramos-ab467228a/"><i class="fa-brands fa-linkedin-in"></i><span>LinkedIn</span></a></li>
<li><a href="{{ '/blog' | relative_url }}"><i class="fa-solid fa-pen-nib"></i><span>Blog</span></a></li>
</ul>
</header>

View file

@ -2,10 +2,10 @@
<html lang="en">
<head>
{% include head.html %}
<title>{% if page.title %}{{ page.title }} | {% endif %}Bryan Ramos</title>
</head>
<body>
{% include header.html %}
{{ content }}
{% include footer.html %}
</body>
</html>

View file

@ -18,9 +18,6 @@ When someone wants to send you an encrypted message, they use your public key to
It also works in reverse for signatures. You can sign something with your private key and anyone with your public key can verify the signature came from you. This is useful for verifying software downloads, signing git commits, or just proving a message wasn't tampered with.
<!-- Replace with a terminal screenshot showing gpg --gen-key output or your key fingerprint -->
![GPG key generation in a terminal](/assets/img/pgp-keygen.png)
## Why It Feels Abandoned (And Why That's Wrong)
The honest reason most people haven't set up PGP is that the tooling is rough and the UX has barely changed since the 90s. Keyservers are a mess, key discovery is unreliable, and the average person isn't going to paste an ASCII armor block into a web form to send their friend a message.
@ -33,7 +30,7 @@ The other thing PGP gives you that Signal doesn't is longevity and portability.
## Getting Started
The quickest path on Linux is through GnuPG:
The quickest path on Linux is through GPG:
```bash
gpg --full-generate-key
@ -49,7 +46,8 @@ gpg --armor --export your@email.com
Paste that block on your website, upload it to keys.openpgp.org, or just email it to people. Once someone has your public key, they can encrypt messages that only you can read.
I've posted mine on the [PGP key](/pgpkey) page here. If you're sending me anything sensitive, please use it.
I've posted mine here: [PGP key](/assets/public.key)
If you're sending me anything sensitive, please use it.
## One More Thing

View file

@ -14,9 +14,6 @@ Nostr stands for "Notes and Other Stuff Transmitted by Relays." The name is inte
There's no company, no central server, no account to create. Your identity is your key. Your posts are signed by that key. Relays can choose what to store and what to drop, but they can't forge your signature or impersonate you.
<!-- Replace with a screenshot of your Nostr profile or a client like Damus/Iris showing your npub -->
![Nostr client showing a profile feed](/assets/img/nostr-client.png)
## Why This Feels Different
I've been on Twitter since around 2010. I've watched it go through multiple cycles of policy changes, API lockdowns, and relationship rewrites between the company and its users. The pattern is always the same: the platform grows, the platform becomes valuable, the platform starts extracting value from users and developers who helped make it valuable.

View file

@ -14,9 +14,6 @@ When Twitter dies, or transforms into something unrecognizable, everyone who bui
This is not a new observation. It's been said every time a major platform has pivoted, died, or changed its terms. MySpace, Tumblr, Vine, Google+. We watched it happen and we kept building on closed platforms anyway because that's where the people were.
<!-- Replace with a screenshot of the old Twitter bird logo next to the X logo, or a terminal showing a curl to api.twitter.com returning 403 after API lockdowns -->
![The Twitter to X transition](/assets/img/twitter-x-rebrand.png)
## What Actually Changed This Year
The rebrand is cosmetic. What's more significant is the systematic destruction of the API ecosystem. Third-party clients are gone. The API costs that killed them were not a mistake or a miscalculation. They were a policy decision to force everyone through official clients that can be monetized and monitored.

View file

@ -20,9 +20,6 @@ The problem is that achieving fairness and throughput sometimes requires the ker
For a web server, a latency spike of 5ms is noise. For a control system running a simulation where a missed deadline means corrupted state, it's a failure.
<!-- Replace with a screenshot of NightTune showing CPU latency graphs or cyclictest output -->
![Latency measurement output from a real-time Linux system](/assets/img/rt-latency-cyclictest.png)
## What PREEMPT_RT Changes
The PREEMPT_RT patch set, which has been in development since 2005 and was finally merged into the mainline kernel with v6.12 in late 2024, addresses this by making the kernel itself fully preemptible. The key changes:

View file

@ -18,9 +18,6 @@ What I didn't anticipate was how thoroughly that initial demographic would come
The "no censorship" promise turned out to mean something narrower: no censorship of the specific things the dominant community wanted to say. Everything else found itself slowly squeezed out not by policy but by indifference and social pressure.
<!-- Replace with a screenshot of a Nostr client feed showing the repetitive content/echo chamber, or your own unfollowed npub profile page -->
![A Nostr client feed in late 2025](/assets/img/nostr-feed-2025.png)
## The Usenet Problem
I've been thinking about how closely this maps to Usenet's decline. Usenet was technically elegant, decentralized before decentralization was a word people used, and destroyed by two things: spam and the collapse of signal-to-noise ratio. Not in that order.
@ -51,4 +48,4 @@ I still believe in the principle. Cryptographic identity, open protocols, no sin
But building on a protocol that has become an echo chamber isn't advancing those goals, it's just participating in a different kind of monoculture. I'll keep watching what happens with the underlying protocol work. If the community composition changes or the discovery problems get solved in a real way, I'll look again.
For now: the link is gone, the account still exists, and I'm still reachable at `bryan@ramos.codes`.
For now: the link is gone, the account still exists, and I'm still reachable at `bryan@ramos.codes`

View file

@ -1,11 +0,0 @@
---
layout: post
title: "Hello New World"
date: 2026-03-03
description: "First post on the new self-hosted blog."
tags: [meta]
---
Migrated away from Substack to keep everything self-hosted and under my own control.
Posts will continue covering whatever I'm currently working on or thinking about.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

BIN
assets/headshot.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 MiB

View file

@ -3,9 +3,9 @@
============================================= */
[data-theme="dark"],
:root {
--color-bg: #0F1923;
--color-surface: #162230;
--color-surface-alt: #1C2C3A;
--color-bg: #171e26;
--color-surface: #10161d;
--color-surface-alt: #1e2731;
--color-border: #243447;
--color-text-primary: #E8EDF2;
--color-text-secondary: #8FA3B1;
@ -48,7 +48,7 @@
============================================= */
:root {
--font-sans: 'Inter', system-ui, -apple-system, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
--font-mono: 'Fira Code', 'Cascadia Code', monospace;
--text-xs: 0.75rem;
--text-sm: 0.875rem;
@ -152,13 +152,13 @@ h3 {
LINKS
============================================= */
a, a:active {
color: var(--color-link);
color: var(--color-accent);
text-decoration: none;
transition: color var(--transition-fast);
}
a:hover {
color: var(--color-link-hover);
color: var(--color-accent-hover);
}
/* =============================================
@ -215,13 +215,20 @@ header li {
header li a {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 38px;
height: 38px;
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-md);
font-size: var(--text-xs);
font-weight: var(--weight-medium);
color: var(--color-text-secondary);
transition: color var(--transition-fast), background-color var(--transition-fast);
gap: var(--space-1);
}
header li a i {
font-size: var(--text-lg);
}
header li a:hover {
@ -546,6 +553,26 @@ header li a:hover {
border-color: var(--color-accent);
}
/* =============================================
FOOTER
============================================= */
footer {
margin-top: var(--space-8);
display: flex;
justify-content: space-between;
align-items: center;
font-size: var(--text-base);
color: var(--color-text-muted);
}
footer a {
color: var(--color-text-muted);
}
footer a:hover {
color: var(--color-accent);
}
/* =============================================
RESPONSIVE
============================================= */
@ -564,7 +591,8 @@ header li a:hover {
height: 96px;
}
.theme-toggle {
.theme-toggle,
.home-btn {
width: 32px;
height: 32px;
font-size: 12px;

22
feed.xml Normal file
View file

@ -0,0 +1,22 @@
---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>{{ site.title }}</title>
<description>{{ site.description | xml_escape }}</description>
<link>{{ site.url }}</link>
<atom:link href="{{ site.url }}/feed.xml" rel="self" type="application/rss+xml"/>
<lastBuildDate>{{ site.time | date_to_rfc822 }}</lastBuildDate>
{% for post in site.posts limit:20 %}
<item>
<title>{{ post.title | xml_escape }}</title>
<description>{{ post.content | xml_escape }}</description>
<pubDate>{{ post.date | date_to_rfc822 }}</pubDate>
<link>{{ post.url | absolute_url }}</link>
<guid isPermaLink="true">{{ post.url | absolute_url }}</guid>
</item>
{% endfor %}
</channel>
</rss>

View file

@ -1,15 +1,13 @@
---
layout: page
title: Developer / Technologist
title: Software & Systems Engineer
---
<section class="section-bio" markdown="1">
I work at the intersection of systems programming, real-time computing, and open-source infrastructure. My background spans Linux systems, simulation engineering and low-level development in C and Python with a growing focus on applied AI and LLM integration. I have a strong preference for auditable, modular stacks and tools that empower user autonomy.
I work with systems programming, real-time computing, and simulation engineering. My background spans Linux, low-level development in C and Python, and debugging latency-critical systems where determinism and microseconds count. Currently exploring applied AI and LLM integration.
Reach me by [email](mailto:bryan@ramos.codes) or find me on the platforms above.
Please encrypt sensitive messages using my [PGP key](/pgpkey).
Reach me at [bryan@ramos.codes](mailto:bryan@ramos.codes)
</section>
@ -22,12 +20,13 @@ Please encrypt sensitive messages using my [PGP key](/pgpkey).
<span class="skill-tag">Linux</span>
<span class="skill-tag">Real-Time Systems</span>
<span class="skill-tag">Simulation Engineering</span>
<span class="skill-tag">AI / LLM Integration</span>
<span class="skill-tag">Bitcoin &amp; Lightning</span>
<span class="skill-tag">Nostr Protocol</span>
<span class="skill-tag">PGP/GPG</span>
<span class="skill-tag">Tor</span>
<span class="skill-tag">Self-Hosting</span>
<span class="skill-tag">AI/LLM Integration</span>
<span class="skill-tag">Automation</span>
<span class="skill-tag">Networking</span>
<span class="skill-tag">Docker</span>
<span class="skill-tag">KVM/QEMU</span>
<span class="skill-tag">Nix</span>
<span class="skill-tag">SQL</span>
</div>
</section>

View file

@ -1,120 +0,0 @@
---
layout: page
title: PGP Key
permalink: /pgpkey
---
<a href="assets/public.key" class="download">🔑Key File
<br/><br/></a>
<div class="gpg">
-----BEGIN PGP PUBLIC KEY BLOCK-----<br/><br/>
mQINBGP0BgMBEAC2v+n9plI0p+TqIrmvz7JHoYbtUK3NDkyNeIsgS+sE5nfLB1Ef<br/>
vQCR0HdysgpmAUywqEx+YK7Nkr4szoK8nDLpgpSfaDZNss+ePu6eYVTVktelBn2Q<br/>
5f5MKDILY9mkmDPgzvpDDhkFXGK3cpeUX+X5vY1W76yuRgm6zBDIux+yf027nw3U<br/>
phesn/WlWXRsmAXG2helt1nB6Foj6LjgwRG/aKMI8cQq0JS13cfUZO1nq2ifM0pm<br/>
4HqWgbZOKYWHsoOw4qNiuxWwVoL5E7UQW2MEyxZmLZaNohEpReYpI0N9FGB/AZYt<br/>
iKn9SO9SmG+afE+gxrExJYZSGVHHKlPc79dcIBVvYEA8dV/OJBjHc83EhUQVU4vQ<br/>
x1y386HYctlHVWZ64tc1XROlQe++NxfgQZz4jnvGzHMakr8/IZAV3LP3PGVAa7kx<br/>
iVrTE+WodK/kELm1PMLWlWmXT3GiumOngm4y1dWtUirqxni/Nl7BA4eHM3Q3OZiR<br/>
eEb80FkbXCoaP5REU1EdVlAW/ZGP+mTwiqekT5ThocaD/BgYSy9UlGf5YyOEnqOt<br/>
G+0JfS3mG0PysFjF0B5dMyBquikD4zVBo3+a7ppbrAage3EFhHiX0Les0q566I8p<br/>
0hlXS7nz0I4xAxxRLfydwJptndjZgeiq9o1XMRA0JUZQhzuk2VYQ6MSVhwARAQAB<br/>
tB9CcnlhbiBSYW1vcyA8YnJ5YW5AcmFtb3MuY29kZXM+iQJOBBMBCgA4FiEE8fNG<br/>
ZFhFKy3zUfHoZNErqVrOHy0FAmP0BgMCGwEFCwkIBwIGFQoJCAsCBBYCAwECHgEC<br/>
F4AACgkQZNErqVrOHy25SBAArl6JHrDm3fLXPhwtHf9WzxQvW6BmMgLQQ+bGGGba<br/>
A3e+eKb0ibSmXH9M22GOSxKqk2BePtoLFdyDKDFNwYDwzj0ioQ80Q9YR6aoSuwOf<br/>
HwXeiYsgK76IbsRciXSv6JgAsXO9UOGTlHlTgFsE3AMjnCgPrHbV3SZdkFt71XMo<br/>
fbRmYwC33HK6QNUXeq4O+gGO5vJI8Wx1mtmy6kq/3srzMpCGybg9M8C5AQoazo/u<br/>
WOjO57QkUdbAXO8HbHInexsstJJn+0o/FLfMoOy7v/cpzTLbbpONRzQbEq1/Utt1<br/>
TaIc1FTWT1b4oWnIGv2stlCGzx9IgsseJocSBG+kGgkKwVBWIcCwq+cCdfkOReCk<br/>
VHTg1oRH8t078346KuxEaA7ofKaByirQosZUeF5WTyMuJUDf1mNxxZngRKjIHD3c<br/>
lmK8REnYjQ4b+RfznfV8qc8tH624EUTNlT123ufUIvba0fR8OryhdxPOOgdLjlNL<br/>
XdkfG5oENnBy3EzGn7xgR6sCRtlFSEcfKQFcec1fjqYMHxPAExajmSHLwr5107LT<br/>
4B+F5eOt9CBFKW/cxnVwG/3oW0mzLa231V0eYquiYkbYHVswLdhr02vyHpLXXVZk<br/>
JgiLSXIJ6yKwLA9W8HgHgDYCp899Jl+wqhFLxr7oUjXcLhuZO9Q3P3req0SJRfUu<br/>
GTO5Ag0EY/QGQAEQANsJBUpkk0ZW5swgzC/c7pxv4VGS8VZcr3Isol8NHAUUwHyo<br/>
jqAYNtqW8PQLgQ34uuuC5GCS2hxN57WdgmSkv/to8THl6IbE1V/YVaaGXX9yiJmH<br/>
72//kc9g2prXyrtObwVhgKiYQxPPegm9ubLkb1khCTLhozCJDM1wbQxmE5I2cICC<br/>
5lwCi1NDsAyvUtWANzb0EXPZh2iPv8sWMh3RStAGSsboHzHYdR9RZGRjKG/ET5zv<br/>
OBbFpRLFjvMJUL22M0V5FFPbuz+4Aut21wkYdueHtREpUgAcba68Doz75jQb0PEZ<br/>
52hjLKuXVf0/1sEPXUs/sL8kyl6QzIqFIXsrjbw6BrGSdhn6YoY95koCb6AXUrFC<br/>
oOXQC5BecTcP7V3GOWDEaDUbjN8mc2t1ujs7KYIqi0UCiHa9m5L2Q/9TyOSLyjSf<br/>
0VKHzib7Ov76GvphbYoQSXWX8R6ogcexQH6aQlXI31ir/HsHkatImYomySZiwNVV<br/>
5PQD/7lbWGjLB6LB9PsyVIVl3uq+sSX7xKeogZkEuTcerKVJjpknisKh6aR/uJRV<br/>
KJs2U3MolyVanDb/y6VBJrCOu8ZiCZuDtCntUg8MxeLNFO0MVdgAPiHMtJd8YrzK<br/>
bhbkHBufAgOLMbGTYq47bQNuRz/CjIz0xll0tLeS9LD1hcSWX/nMhFgfxDjxABEB<br/>
AAGJBGwEGAEKACAWIQTx80ZkWEUrLfNR8ehk0SupWs4fLQUCY/QGQAIbAgJACRBk<br/>
0SupWs4fLcF0IAQZAQoAHRYhBDgB5+1vnI0s1XHgHmq9zRRNZkPIBQJj9AZAAAoJ<br/>
EGq9zRRNZkPIMbUQAJaDnJHMMXTNmANva65XjY2eJpoYBCIvd8FodRfFCbAPkNad<br/>
MtsCgd2dXZPizTOUNqcOujACd7u3P/VazYT0cUgjx6mpWdvxYuGMCM71WLHKeCaq<br/>
bXzzKrNaREMDTsMBn0wrIr5ZEuRsLOi4ZVZ5vFvtMQYnzjNT6gON+fHpaD6sShnR<br/>
VWXWaYtQ2ttN2+6gwmKCaqiH2suA+QkI/gPjqdMOeXvu6sMUd5IjaCBJy3Ddyjif<br/>
/ZYkJUjDkxG7aC4B2XtGUf0lPG+kiCHGjgTsvIeYYSpi/TyevTF8QNfZWcp/NBcf<br/>
ZXhCoUoA62zzQ2SXpydZpryKn8klAYQLLA8mq6v/ljqcwFyLYtx0Cw49Thspo/4r<br/>
ba1jzsv5QdBveIKdGjzcuexTaIEFB6rQXIFuVVfn074tpZIO+KmHO/z62i73bbko<br/>
67tm+VDvbgsGUd4536lSKMekbdn0+5ODl76AJCD0M+Vzxkl9X/fg4zgz0vG2Ppiq<br/>
08LqBPidA9EQ+tEHm7OIXk9Z+wApDCb27zwsiygkV9uWXuEaNYjCjUZTEw9CYTuH<br/>
CdCPOdeJYBzKpfGXldJo6F6NbLLXywL4ej2Lt99tqFF2tQ3I6SKyYx+I2veYsjKs<br/>
7g29bF4WuU1IVi4Kn144NUzEHOJZKeyYOwEz5+chq9KuYBY8b1OHe1Q5pEFIbVIP<br/>
/1pdwhs6zV8tJZOgzLb9q+yLuXH1Fk4YE9wZDh/rK3hpD+KGyNRa+0J70wdYDOqk<br/>
4C9ybAaljvJPXO622Ai/RlFLQVK4KdJ2Ig9mwtIhwBvjnKkCmG502HGRUa3HVpDK<br/>
pb9WDrH9eJPxkRew1y7Kl6ua10mNh7vMIbEDzZY36Eovzc127ANy/EQR8OwnI8Vg<br/>
39rCq1wDVeULHmF4j63cm3pHo6LK1OGZjAkg9XjT/aDpuqigcdEmFjmx7RSBPZFC<br/>
RZTJ6kcafbnxQfKx7soI7+1AWVSrTt+/XePZPubnFeMlfXtGVXejTG2rCWJqRpGZ<br/>
sjwgGiOtcnzvF37TQ4XrWV5T45XeSmG4hsF+zShXqevGulOwGNPtJbmiINTaeKun<br/>
1KxjSVpwkniOQgrWNSFCD2RzSEuQRKSg0XMbgPLbmplVO4WAzhQ/Ry4DpNqjJwkp<br/>
2z5WQ8XhfsxecNBc10pbPGyDUbXk96bZSXc31s5tKIyUaCxMmUu87Z0q9KEaVrGc<br/>
Tp69o4LIX8dhEqAx8Mk1AKpk8TsT0Ebc75X+xbzVoiimblUuB/+OrDsK7R0hihIe<br/>
TU+1xOJ1gyppkuacOuHioV4k9k4NUwgk+YrSKTrhFEzbM6gcOngTB0VTFzQlEjxB<br/>
wxl2qN7f0lFD6F0rLJ0Rm06xIwTNIe/0MfMXAJBB45DFuQINBGP0BlIBEADAkdgW<br/>
M8SyGyde5Op/B9yMHNPfuSNRjK4/HHmLez1GTriNwuqor5FRrDCO8VPUbQX/x06O<br/>
2HZj8fJWa+6hc9+giUTXNbYtlMVpZOUVhGxzuy2Y6YE82maBaJ3EB/KBP7zdgvKT<br/>
bxmjv5hre9u/LaY6tloCzeaBUWPV9+e5Bxq72qC507V/z6lc+PgxWWfGkmWBuT+v<br/>
laHWFb6ZM5ldtcMSdscrLBcxLMnjNIRlIaWpj+tvuInMdV3HrTn/bdHCP/Ybrf95<br/>
DYY+7p+KPGrdXJH121f8qZXRihTJerJOGvGbue6FIJ+wYSEr3nb9bNyym/w+Mk9Z<br/>
0wJZZVfjbqFNcGhTttZWlzdTJwerwj7cGsTtMcuIphhUdLhQns+dBTVKVrqvvHSu<br/>
p/w9IpnyDhcgqv8v23xfSCuKooWPn2E1/Pd4enLCHVzmFW1xQDtDunRuxBbHYpM4<br/>
5gknVdIp8bY23y1fj0mottIfgZZEfiMR6FJxseFcWuG7VdC7VITdgbNl5YDXw4ts<br/>
xmg2qrRSNUTkFAKNwIekqwziay4DcnWkoikH+n3bHre5wQqFzHIV03Zo8YcgKvyT<br/>
0hwAvn2wGRoIynInFMi2/314xbAUBq10QhREGOPS3oUvBUZxhTkiBMKVYyKA97JQ<br/>
c2Xhrkx9cuZxh3y7j3DflRBW9XLJvbcLGDziTwARAQABiQI2BBgBCgAgFiEE8fNG<br/>
ZFhFKy3zUfHoZNErqVrOHy0FAmP0BlICGwwACgkQZNErqVrOHy0dOxAAlNRb0yBq<br/>
SLLU/pQHjnqRQsLpXFmokcAVfZcEoODTMmzPf3uKDExkHBsyRjbRrEazMLQZIwIb<br/>
78AXvPx6W+lwkmrZ1IXfTkURMi2RmSSOcjTJzipM4WKkOy6zSg29chnBz8edq8AF<br/>
rErYdY5IgGCn3RHtkGjtKRSV0m4cdoO/wqGHtZdxEhmfmAzs+Wwevqb1nzptG3my<br/>
ZdEJ5rkgGcnvUjkJo815FjR1fuo0KSuVZVelvWMp6JFYMWc4FUh2bYWymIQ6u8/f<br/>
2v8EnacG/oNHDkZG0edTPU4dClHCtXqejAxazHYUojJkFdWUMoEIJ7VYg23N4WAW<br/>
0qf78uBOuGBjl8g5sOmu/IQpMsO51NiDSw/lGLfPsKJKTIe7N6Jxs8PT66Jqvw2U<br/>
4moKEAcoLGxXkIfY7UMFGflaADzBQEebNiekRMw/SAxB3mRptuQ96QuCrpLE7kmI<br/>
KPs0vk3om0Lz59q3JoYmMEoEIMM3Z1j94mp07nyJzKvOREtQYY7WIKG/sgUHekjm<br/>
lrUfez8xHCG4G0r4KTiu3rGT/rvCehTxvkl4Gmimeo+XNb7vwcr1O0/DTH3ZCG8o<br/>
+mwGnah7T6ch60YFSWm0RkxNozNHWJf5Ee6gVv7nEyB1pbuqhXHliv3hhK+/4SWW<br/>
RMwhK4b5axJn9aHTu3rwDdaDpUkkApY4rhq5Ag0EY/QGZAEQAOXjz3loH0/mn+Wn<br/>
wermse6fhyW+HJNIcWLdTZ3o44GhbkWb5VxCdb/FuOYIGxeTkF2KjCwHFCHCfN1/<br/>
P8okvsnlGhuiZQRpVHBv1TBPzx4m94unXgEbyPYndKN/KGsJf7iOQ/HRs9CTUcZy<br/>
5hj608Rd/Wr+mzzwOG7QIBEEjNhA5NhjpvWpbPGkOgVkYeMobyDmJjoUi7rnIoq+<br/>
9XLV/wiBneXcinAFZVqbGCRNxhjRBhKubOjWftNfHCtZu96cCoGxDRwE+z6BVre4<br/>
iv7VMmXQDPlISUFUa7cu9R2WTny2u09SPpNBHdhSSDtWOWXtYc52qG7HllA2GOQ6<br/>
wd6t/RPDzp7pwTOB5O4htAchvQtyxS6fApy6Hb5q7tE7n31y8efT7FkTkxkHGWgM<br/>
NoncmyKWIzyTI8/9TcRGPTdxYtbsGptP6x+MA6XbVELOTSJDGTXC3/xWa0Kv0B2/<br/>
sjKu1pi9/9vBE/6D72V2bMoa3wx1vrTm5XNnvQf8subXt/jRN75Adp7HlvL/qnpy<br/>
7AQRm2AiDndamCW7SsDpTGsF9AQcqX8m3cUt4TSacTJiSRHYycc23JZEhe26phkw<br/>
CbZRvWkUcfuNBXWAaINVPDprZ4jArbVr+Fe1GMVSkV3WcHWf4o18kETjNPfCbdR3<br/>
uYrD/qtaehHKFhm8ZeQV2n6ISzj1ABEBAAGJAjYEGAEKACAWIQTx80ZkWEUrLfNR<br/>
8ehk0SupWs4fLQUCY/QGZAIbIAAKCRBk0SupWs4fLcubD/oDGub4+uep50VBUa0u<br/>
BZAUu/oS664+53sZyvogMzeIT32DT3vDaa3W2aqUNX/dZVzOcsV07HO4yk6+kiSk<br/>
1Db2FbRFODbFcs5mBYo/EFSxExhQMQFqgXaW3FrpvL5ljAwsjdoSN93DnMkLnC9K<br/>
XZUyUT+RDcJnk0xS+0ex77nc8vp13n2huHuXU6BbEGofrT9br7Kyezh84GV9nxls<br/>
C0PwTX0gBaesqeY/9rtAXq+p+kYBafbny/3zrL8CBwqHqRZWiNbkyGWx9WHvizZE<br/>
0VJJzGl0CTP7aE/N42t+LDGuaA76SJXkkqGs7GmJ3EHVA8N/2Lwhf0saaG3cBrKx<br/>
lXrJoSY7TxeoJ7rdt/KRJfKsU0bdXgVXDFrlf4ZvctCLZmQ0nno2cgYemTnELRYv<br/>
FzrS2itqqWP1ev2iPpCbKp099i/w6D13C3jBVAVYPBapD6aaD7YHWLhHIA5zH7bF<br/>
n8IgacgKBoJ8u3jo3eeT5CXfsrnwOYdrqposfMCUOriJHx41nGUqjNZDG2ByHxgS<br/>
mnUd3lrjRDWTUzXj8pRN2K7Uqbbs2Mz4Q64MgbCkkTichMlVux8kH+O/I/veAYto<br/>
OEpwdDwa67AtzYKG0ssOJI+po9TlbKYS4O4H8XnPhYSOEw8eObNPYCX7jyAjXloo<br/>
1hbflYLyMYo1BxGR6bPS9gJA2w==<br/>
=5uun<br/>
-----END PGP PUBLIC KEY BLOCK-----
</div>

23
sitemap.xml Normal file
View file

@ -0,0 +1,23 @@
---
layout: null
---
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{{ site.url }}/</loc>
<lastmod>{{ site.time | date: '%Y-%m-%d' }}</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>{{ site.url }}/blog</loc>
<lastmod>{{ site.time | date: '%Y-%m-%d' }}</lastmod>
<priority>0.8</priority>
</url>
{% for post in site.posts %}
<url>
<loc>{{ post.url | absolute_url }}</loc>
<lastmod>{{ post.date | date: '%Y-%m-%d' }}</lastmod>
<priority>0.6</priority>
</url>
{% endfor %}
</urlset>