diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2026-01-05 21:15:44 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2026-01-05 21:39:06 +0200 |
| commit | 09e410b21358e1475261499ccf6a75fac2da12d4 (patch) | |
| tree | 26bde85dbe6be7502d1eca29263e404e92633f94 /content | |
| parent | b2b9388f789c58a5b6ee1cbf9edfe88013d3fc63 (diff) | |
Refactor and colocate assets
Diffstat (limited to 'content')
70 files changed, 60 insertions, 58 deletions
diff --git a/content/posts/atk16-my-homegrown-computer/atk16-text-mode.png b/content/posts/atk16-my-homegrown-computer/atk16-text-mode.png Binary files differnew file mode 100644 index 0000000..93c2752 --- /dev/null +++ b/content/posts/atk16-my-homegrown-computer/atk16-text-mode.png diff --git a/content/posts/atk16-my-homegrown-computer.md b/content/posts/atk16-my-homegrown-computer/index.md index 6b9f583..ba8bf84 100644 --- a/content/posts/atk16-my-homegrown-computer.md +++ b/content/posts/atk16-my-homegrown-computer/index.md @@ -5,7 +5,7 @@ extra: kind: project --- - + **ATK16** is a learning project I've been working on for some time. It started off as a 16-bit, reduced instruction set computer (RISC) CPU design but evolved into an entire computer with peripherals and software. diff --git a/content/posts/cassettes/cassette_player.jpeg b/content/posts/cassettes/cassette_player.jpeg Binary files differnew file mode 100644 index 0000000..6591cc4 --- /dev/null +++ b/content/posts/cassettes/cassette_player.jpeg diff --git a/content/posts/cassettes.md b/content/posts/cassettes/index.md index 5b8f6b6..92d3887 100644 --- a/content/posts/cassettes.md +++ b/content/posts/cassettes/index.md @@ -11,7 +11,7 @@ They feel much more approachable than vinyls. I dislike snobbery. ## So I bought a cassette player -{{ fig(src="/files/cassette_player.jpeg", alt="A Sony cassette recorder next to a pile of cassettes") }} +{{ fig(src="cassette_player.jpeg", alt="A Sony cassette recorder next to a pile of cassettes") }} It’s a Sony TCM-459V and it’s only a bit noisy and wobbly. It can record too. diff --git a/content/posts/deploying-the-garden.md b/content/posts/deploying-the-garden/index.md index 105bfb7..cdb5caf 100644 --- a/content/posts/deploying-the-garden.md +++ b/content/posts/deploying-the-garden/index.md @@ -31,7 +31,7 @@ Making changes to the build process itself, or the HTML template, requires a com Most of the heavy lifting is done by `pandoc`. The glue parts use an obscure and ancient language with many curved sigils. Give it a try. -{{ fig(src="/files/repo_langs.png", alt="A GitHub repository language breakdown showing that most of the code is written in Scheme.") }} +{{ fig(src="repo_langs.png", alt="A GitHub repository language breakdown showing that most of the code is written in Scheme.") }} ## Hosting diff --git a/content/posts/deploying-the-garden/repo_langs.png b/content/posts/deploying-the-garden/repo_langs.png Binary files differnew file mode 100644 index 0000000..9c85b3b --- /dev/null +++ b/content/posts/deploying-the-garden/repo_langs.png diff --git a/content/posts/diddle-event-scheduler/diddle_screenshot.png b/content/posts/diddle-event-scheduler/diddle_screenshot.png Binary files differnew file mode 100644 index 0000000..437567e --- /dev/null +++ b/content/posts/diddle-event-scheduler/diddle_screenshot.png diff --git a/content/posts/diddle-event-scheduler.md b/content/posts/diddle-event-scheduler/index.md index 701e252..033a352 100644 --- a/content/posts/diddle-event-scheduler.md +++ b/content/posts/diddle-event-scheduler/index.md @@ -13,7 +13,7 @@ Diddle ([live instance](https://diddle.jan.systems/), [Github](https://github.co **Note**: The instance hosted on my domain might go down any second. Use it at your own discretion. -{{ fig(src="/files/diddle_screenshot.png", alt="Diddle screenshot showing an answerable poll") }} +{{ fig(src="diddle_screenshot.png", alt="Diddle screenshot showing an answerable poll") }} The first 80% of the project was done in two evenings. The last 80% was done during the next week. The tech stack is the _get-shit-done_ stack: **Python** + **Flask** + **PostgreSQL**. There is no required client side javascript: all client side logic is strictly for [progressive enhancement](https://developer.mozilla.org/en-US/docs/Glossary/Progressive_Enhancement). You can use "dumb" browsers like w3m or lynx to enjoy Diddle just fine. diff --git a/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_binders.jpeg b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_binders.jpeg Binary files differnew file mode 100644 index 0000000..ee02077 --- /dev/null +++ b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_binders.jpeg diff --git a/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_cevapi.jpeg b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_cevapi.jpeg Binary files differnew file mode 100644 index 0000000..67595b4 --- /dev/null +++ b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_cevapi.jpeg diff --git a/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_group.jpeg b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_group.jpeg Binary files differnew file mode 100644 index 0000000..b94c739 --- /dev/null +++ b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_group.jpeg diff --git a/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_hallway.jpeg b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_hallway.jpeg Binary files differnew file mode 100644 index 0000000..f15217a --- /dev/null +++ b/content/posts/eurobsdcon-2025-conf-notes/eurobsdcon_2025_hallway.jpeg diff --git a/content/posts/eurobsdcon-2025-conf-notes.md b/content/posts/eurobsdcon-2025-conf-notes/index.md index f10c781..33a0f7d 100644 --- a/content/posts/eurobsdcon-2025-conf-notes.md +++ b/content/posts/eurobsdcon-2025-conf-notes/index.md @@ -11,7 +11,7 @@ My event experience consisted of two days of "trainings", sometimes also referre The event was held at the Faculty of Electrical Engineering and Computing (University of Zagreb). The venue was nostalgic in a way since it reminded me a lot of the building where I started my studies in Aalto University. Functional. -{{ fig(src="/files/eurobsdcon_2025_hallway.jpeg", alt="A photo of a stairway in the conference venue") }} +{{ fig(src="eurobsdcon_2025_hallway.jpeg", alt="A photo of a stairway in the conference venue") }} Recordings from the presentation rooms can be found on [Youtube](https://www.youtube.com/playlist?list=PLskKNopggjc6bnhXOX5MQbaPKEvohzjYH). You might have to check the talk schedule to find the timestamp of a given talk. @@ -23,7 +23,7 @@ I attended a two day lab by Prof. Kirk McKusick, who is a well known figure in t You see, I'm not a huge kernel guy (at least not yet) so I was a bit worried that the lab content would go over my head. What happened though surprised me: I understood something like 90% of the material. Apparently I had the necessary prerequisite knowledge after all, or maybe Kirk was just so good at teaching. Maybe both. -{{ fig(src="/files/eurobsdcon_2025_binders.jpeg", alt="Two spiral notebooks of lecture notes, one for each day") }} +{{ fig(src="eurobsdcon_2025_binders.jpeg", alt="Two spiral notebooks of lecture notes, one for each day") }} ## Favorite talks @@ -61,7 +61,7 @@ I noticed that there was very little "hierarchy" at the event. Speakers, sponsor Since the event, I have familiarised myself with BSD community channels such as the [FreeBSD IRC channels](https://wiki.freebsd.org/IRC/Channels) on Libera.Chat and the various forums of [BSD Cafe](https://wiki.bsd.cafe/), hosted by Stefano Marinelli, who was also speaking at the conference. -{{ fig(src="/files/eurobsdcon_2025_group.jpeg", alt="A group photo was taken on the final day") }} +{{ fig(src="eurobsdcon_2025_group.jpeg", alt="A group photo was taken on the final day") }} ## There and back again, and the touristy bits @@ -74,7 +74,7 @@ Traditional & local foods were my primary target when looking for restaurants. M - **ćevapi** at _Plac_ ([Tripadvisor](https://www.tripadvisor.com/Restaurant_Review-g294454-d7075337-Reviews-Plac-Zagreb_Central_Croatia.html)), pictured below - **štrukli** at _La Štruk_ ([Website](https://www.lastruk.com/)) -{{ fig(src="/files/eurobsdcon_2025_cevapi.jpeg", alt="A serving of ćevapi with cream cheese and paprika spread") }} +{{ fig(src="eurobsdcon_2025_cevapi.jpeg", alt="A serving of ćevapi with cream cheese and paprika spread") }} The return trip was more eventful. The plane didn't start boarding until it was more than an hour late. We were never told the reason. That delay caused me to miss my connecting flight 😑 diff --git a/content/posts/home-server-part-1/3-2-1-Backup-Rule.png b/content/posts/home-server-part-1/3-2-1-Backup-Rule.png Binary files differnew file mode 100644 index 0000000..ed6b675 --- /dev/null +++ b/content/posts/home-server-part-1/3-2-1-Backup-Rule.png diff --git a/content/posts/home-server-part-1/aliexpress_minipc.png b/content/posts/home-server-part-1/aliexpress_minipc.png Binary files differnew file mode 100644 index 0000000..0cb57a4 --- /dev/null +++ b/content/posts/home-server-part-1/aliexpress_minipc.png diff --git a/content/posts/home-server-part-1/do-june-billing.png b/content/posts/home-server-part-1/do-june-billing.png Binary files differnew file mode 100644 index 0000000..a38f71c --- /dev/null +++ b/content/posts/home-server-part-1/do-june-billing.png diff --git a/content/posts/home-server-part-1.md b/content/posts/home-server-part-1/index.md index 28bfbb4..6d859cc 100644 --- a/content/posts/home-server-part-1.md +++ b/content/posts/home-server-part-1/index.md @@ -11,7 +11,7 @@ This is the first post in a blog series chronicling my progress with designing a {{ toc() }} -{{ fig(src="/files/aliexpress_minipc.png", alt="A promotional image portraying the mini-PC I ended up getting") }} +{{ fig(src="aliexpress_minipc.png", alt="A promotional image portraying the mini-PC I ended up getting") }} ## I need a place to run code and store files @@ -21,13 +21,13 @@ I also need to store files somewhere, like everyone that partakes in the modern I have a trusty Ubuntu server, chugging away in some rack in a DigitalOcean datacenter in Amsterdam. Even though DigitalOcean pricing is pretty reasonable for individuals in general, my monthly price tag is around ~35€, after taxes. That sum is based on the cost of running a medium sized x86-64 instance and storing some backup snapshots from that machine. Times twelve, that comes to around 420€ per year. To me, that is a sizeable amount of money. -{{ fig(src="/files/do-june-billing.png", alt="DigitalOcean is charging $36.14 this month") }} +{{ fig(src="do-june-billing.png", alt="DigitalOcean is charging $36.14 this month") }} > 🤔 I would like to run a smaller instance, but I needed a certain level of RAM to reliably run Obsidian Sync. For whatever reason, less memory would have the app crash intermittently. Having upgraded to instance to the current size, it is hard to downscale back to a smaller machine. It is possible, of course. But instead of doing that, I started to consider an alternative: maybe I could save some coins and get some hardware of my own, like in the prehistoric times, before cloud services became the de-facto way to run anything. With one year's cloud costs, I could surely get a capable small machine. -{{ fig(src="/files/old-man-yells-at-cloud.png", alt="Old man yells at Cloud (FFVII)") }} +{{ fig(src="old-man-yells-at-cloud.png", alt="Old man yells at Cloud (FFVII)") }} ## Ownership and control @@ -43,7 +43,7 @@ I could provide these capabilities to myself, by managing my own hardware and ne To replace something as generally trusted and widely used as Google Drive requires some proper thinking. I haven't previously set up any redundant disk storage. My systems have never followed the [3-2-1 backup rule](https://en.wikipedia.org/wiki/Backup#3-2-1_Backup_Rule). -{{ fig(src="/files/3-2-1-Backup-Rule.png", alt="Maintain at least 3 copies of your data, keep 2 copies stored at separate locations, store at least 1 copy at an off-site location. Source: msp360.com") }} +{{ fig(src="3-2-1-Backup-Rule.png", alt="Maintain at least 3 copies of your data, keep 2 copies stored at separate locations, store at least 1 copy at an off-site location. Source: msp360.com") }} Reaching for full ownership and control is not solely an objective aim. It is in part psychological, an attempt to get back control in a world of weakening privacy and walled content gardens. It is driven by emotion. And this is completely fine: humans are allowed to be motivated by emotion, especially when it comes to personal, hobby-adjacent things. To claim otherwise would be dishonest. diff --git a/content/posts/home-server-part-1/old-man-yells-at-cloud.png b/content/posts/home-server-part-1/old-man-yells-at-cloud.png Binary files differnew file mode 100644 index 0000000..bf6a0f3 --- /dev/null +++ b/content/posts/home-server-part-1/old-man-yells-at-cloud.png diff --git a/content/posts/home-server-part-2/aliexpress_minipc.png b/content/posts/home-server-part-2/aliexpress_minipc.png Binary files differnew file mode 100644 index 0000000..0cb57a4 --- /dev/null +++ b/content/posts/home-server-part-2/aliexpress_minipc.png diff --git a/content/posts/home-server-part-2/aliexpress_minipc_results.png b/content/posts/home-server-part-2/aliexpress_minipc_results.png Binary files differnew file mode 100644 index 0000000..9242e3e --- /dev/null +++ b/content/posts/home-server-part-2/aliexpress_minipc_results.png diff --git a/content/posts/home-server-part-2.md b/content/posts/home-server-part-2/index.md index 3030d62..7cd5300 100644 --- a/content/posts/home-server-part-2.md +++ b/content/posts/home-server-part-2/index.md @@ -58,7 +58,7 @@ Turns out that there simply aren't any reasonably priced machines based on chips AliExpress, an online retailer based in China, is nice since they have a huge variety of devices at prices that would never be profitable if sold in a western shop. I would prefer to buy European in this current political atmosphere, but I'm working off a budget, and limiting my options to reputable and ethical vendors would force me to relax my requirements a lot or stop the project in its tracks altogether. -{{ fig(src="/files/aliexpress_minipc_results.png", alt='Some of the results of a "mini pc" search query') }} +{{ fig(src="aliexpress_minipc_results.png", alt='Some of the results of a "mini pc" search query') }} I'm happy to notice that there is a varied selection of devices at the ~200€ price point. Some are designed to be network devices, with a bunch of physical interfaces and limited storage options, while some are clearly NAS oriented, with SATA 3.5" drive bays capable of housing two or four disks, most commonly. @@ -68,7 +68,7 @@ I'm looking for something in the middle ground: I need two physical interfaces ( > AliExpress tends to have multiple layers of ‼️ LIMITED SALE ‼️ and 🤑 TOP DEAL COUPON 🤑 going on at the same time. In the mobile app they also have a bunch of connect-four-type games that can score you big AliExpress Coins©. Please continue consuming. -{{ fig(src="/files/aliexpress_minipc.png", alt="A promotional image of the mini PC I picked, hosted here in case the product page goes poof. Please enjoy the broken English.") }} +{{ fig(src="aliexpress_minipc.png", alt="A promotional image of the mini PC I picked, hosted here in case the product page goes poof. Please enjoy the broken English.") }} Regarding disks, I think I want to buy them locally, just in case there are issues with them. It's way less stressful to handle returns and such with a local vendor than with an overseas megacorp. I feel that stuff like RAM is pretty often OK even if bought from less reputable sources, but with disks I don't want to test my luck. diff --git a/content/posts/home-server-part-3.md b/content/posts/home-server-part-3/index.md index 456ee2a..0b553ba 100644 --- a/content/posts/home-server-part-3.md +++ b/content/posts/home-server-part-3/index.md @@ -31,13 +31,13 @@ The initial idea is this: Using the install wizard, I set up the system following my rough plan. And here we go, all up and running: -{{ fig(src="/files/pursotin_fastfetch.png", alt="Fastfetch output showing the machine specs. Disregard the uptime (I took the screenshot way later)") }} +{{ fig(src="pursotin_fastfetch.png", alt="Fastfetch output showing the machine specs. Disregard the uptime (I took the screenshot way later)") }} ### RAIDZ You might notice that I bought 4 x 1 TB of NVMe disks, but `fastfetch` is only showing ~2TB. That's because I set up the disks into a "RAID 1+0" configuration: -{{ fig(src="/files/pursotin_raidz.svg", alt='A "RAID 1+0" configuration') }} +{{ fig(src="pursotin_raidz.svg", alt='A "RAID 1+0" configuration') }} RAID 1+0 is a combination of two RAID levels. RAID 1, or _mirror_, consumes two disks to produce one virtual disk that has the capacity of only one physical disk but can withstand the loss of either one. ZFS can automatically heal missing data in a member of a mirror by copying it over from the healthy member. RAID 0, or _stripe_, consumes two disks to produce a disk that has the capacity of the sum of its member capacities as well as double I/O speed, but fails if either member disk fails. The combination of these is a useful way to get increased speed and increased durability at the price of half your raw capacity. diff --git a/content/posts/home-server-part-3/pursotin_fastfetch.png b/content/posts/home-server-part-3/pursotin_fastfetch.png Binary files differnew file mode 100644 index 0000000..241f5e9 --- /dev/null +++ b/content/posts/home-server-part-3/pursotin_fastfetch.png diff --git a/content/posts/home-server-part-3/pursotin_raidz.svg b/content/posts/home-server-part-3/pursotin_raidz.svg new file mode 100644 index 0000000..d2942ac --- /dev/null +++ b/content/posts/home-server-part-3/pursotin_raidz.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="592" height="289.33"><g transform="translate(-889.0000000000001 -251.66666666666669)" lucid:page-tab-id="jJFWJm6nolyj"><path d="M890 473.33a6 6 0 0 1 6-6h98a6 6 0 0 1 6 6V534a6 6 0 0 1-6 6h-98a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,895.0000000000001,472.33333333333337) translate(19.19753086419753 37.46527777777778)"/><use xlink:href="#b" transform="matrix(1,0,0,1,895.0000000000001,472.33333333333337) translate(68.45679012345678 37.46527777777778)"/><path d="M1040 473.33a6 6 0 0 1 6-6h98a6 6 0 0 1 6 6V534a6 6 0 0 1-6 6h-98a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,1045,472.33333333333337) translate(19.19753086419753 37.46527777777778)"/><use xlink:href="#c" transform="matrix(1,0,0,1,1045,472.33333333333337) translate(68.45679012345678 37.46527777777778)"/><path d="M1220 473.33a6 6 0 0 1 6-6h98a6 6 0 0 1 6 6V534a6 6 0 0 1-6 6h-98a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,1225,472.3333333333333) translate(19.19753086419753 37.46527777777778)"/><use xlink:href="#d" transform="matrix(1,0,0,1,1225,472.3333333333333) translate(68.45679012345678 37.46527777777778)"/><path d="M1370 473.33a6 6 0 0 1 6-6h98a6 6 0 0 1 6 6V534a6 6 0 0 1-6 6h-98a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,1375,472.3333333333333) translate(19.19753086419753 37.46527777777778)"/><use xlink:href="#e" transform="matrix(1,0,0,1,1375,472.3333333333333) translate(68.45679012345678 37.46527777777778)"/><path d="M890 366a6 6 0 0 1 6-6h248a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H896a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#f2f3f5"/><use xlink:href="#f" transform="matrix(1,0,0,1,895.0000000000001,365) translate(86.88271604938272 39.65277777777778)"/><use xlink:href="#b" transform="matrix(1,0,0,1,895.0000000000001,365) translate(150.7716049382716 39.65277777777778)"/><path d="M1220 366a6 6 0 0 1 6-6h248a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6h-248a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#f2f3f5"/><use xlink:href="#f" transform="matrix(1,0,0,1,1225,365) translate(86.88271604938272 39.65277777777778)"/><use xlink:href="#c" transform="matrix(1,0,0,1,1225,365) translate(150.7716049382716 39.65277777777778)"/><path d="M890 258.67a6 6 0 0 1 6-6h578a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H896a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#g" transform="matrix(1,0,0,1,895.0000000000001,257.6666666666667) translate(261.04938271604937 39.65277777777778)"/><path d="M945 465.83v-8.45" stroke="#3a414a" fill="none"/><path d="M945.48 466.33h-.96v-.5h.96z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M945 442.62l4.63 14.26h-9.26z" stroke="#3a414a" fill="#3a414a"/><path d="M1095 465.83v-8.45" stroke="#3a414a" fill="none"/><path d="M1095.47 466.33h-.94v-.5h.94z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1095 442.62l4.63 14.26h-9.27z" stroke="#3a414a" fill="#3a414a"/><path d="M1275 465.83v-8.45" stroke="#3a414a" fill="none"/><path d="M1275.47 466.33h-.94v-.5h.94z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1275 442.62l4.63 14.26h-9.27z" stroke="#3a414a" fill="#3a414a"/><path d="M1425 465.83v-8.45" stroke="#3a414a" fill="none"/><path d="M1425.47 466.33h-.94v-.5h.94z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1425 442.62l4.63 14.26h-9.27z" stroke="#3a414a" fill="#3a414a"/><path d="M1020 358.5v-8.45" stroke="#3a414a" fill="none"/><path d="M1020.48 359h-.96v-.5h.96z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1020 335.3l4.63 14.25h-9.27z" stroke="#3a414a" fill="#3a414a"/><path d="M1350 358.5v-8.45" stroke="#3a414a" fill="none"/><path d="M1350.47 359h-.94v-.5h.94z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1350 335.3l4.63 14.25h-9.27z" stroke="#3a414a" fill="#3a414a"/><defs><path fill="#3a414a" d="M30-248c118-7 216 8 213 122C240-48 200 0 122 0H30v-248zM63-27c89 8 146-16 146-99s-60-101-146-95v194" id="h"/><path fill="#3a414a" d="M24-231v-30h32v30H24zM24 0v-190h32V0H24" id="i"/><path fill="#3a414a" d="M135-143c-3-34-86-38-87 0 15 53 115 12 119 90S17 21 10-45l28-5c4 36 97 45 98 0-10-56-113-15-118-90-4-57 82-63 122-42 12 7 21 19 24 35" id="j"/><path fill="#3a414a" d="M143 0L79-87 56-68V0H24v-261h32v163l83-92h37l-77 82L181 0h-38" id="k"/><g id="a"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#h"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,15.987654320987653,0)" xlink:href="#i"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,20.864197530864196,0)" xlink:href="#j"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,31.975308641975307,0)" xlink:href="#k"/></g><path fill="#3a414a" d="M101-251c68 0 85 55 85 127S166 4 100 4C33 4 14-52 14-124c0-73 17-127 87-127zm-1 229c47 0 54-49 54-102s-4-102-53-102c-51 0-55 48-55 102 0 53 5 102 54 102" id="l"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#l" id="b"/><path fill="#3a414a" d="M27 0v-27h64v-190l-56 39v-29l58-41h29v221h61V0H27" id="m"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#m" id="c"/><path fill="#3a414a" d="M101-251c82-7 93 87 43 132L82-64C71-53 59-42 53-27h129V0H18c2-99 128-94 128-182 0-28-16-43-45-43s-46 15-49 41l-32-3c6-41 34-60 81-64" id="n"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#n" id="d"/><path fill="#3a414a" d="M126-127c33 6 58 20 58 59 0 88-139 92-164 29-3-8-5-16-6-25l32-3c6 27 21 44 54 44 32 0 52-15 52-46 0-38-36-46-79-43v-28c39 1 72-4 72-42 0-27-17-43-46-43-28 0-47 15-49 41l-32-3c6-42 35-63 81-64 48-1 79 21 79 65 0 36-21 52-52 59" id="o"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#o" id="e"/><path fill="#3a414a" d="M240 0l2-218c-23 76-54 145-80 218h-23L58-218 59 0H30v-248h44l77 211c21-75 51-140 76-211h43V0h-30" id="p"/><path fill="#3a414a" d="M114-163C36-179 61-72 57 0H25l-1-190h30c1 12-1 29 2 39 6-27 23-49 58-41v29" id="q"/><path fill="#3a414a" d="M100-194c62-1 85 37 85 99 1 63-27 99-86 99S16-35 15-95c0-66 28-99 85-99zM99-20c44 1 53-31 53-75 0-43-8-75-51-75s-53 32-53 75 10 74 51 75" id="r"/><g id="f"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#p"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,18.456790123456788,0)" xlink:href="#i"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,23.33333333333333,0)" xlink:href="#q"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,30.679012345679006,0)" xlink:href="#q"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,38.02469135802468,0)" xlink:href="#r"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,50.37037037037036,0)" xlink:href="#q"/></g><path fill="#3a414a" d="M185-189c-5-48-123-54-124 2 14 75 158 14 163 119 3 78-121 87-175 55-17-10-28-26-33-46l33-7c5 56 141 63 141-1 0-78-155-14-162-118-5-82 145-84 179-34 5 7 8 16 11 25" id="s"/><path fill="#3a414a" d="M59-47c-2 24 18 29 38 22v24C64 9 27 4 27-40v-127H5v-23h24l9-43h21v43h35v23H59v120" id="t"/><path fill="#3a414a" d="M115-194c55 1 70 41 70 98S169 2 115 4C84 4 66-9 55-30l1 105H24l-1-265h31l2 30c10-21 28-34 59-34zm-8 174c40 0 45-34 45-75s-6-73-45-74c-42 0-51 32-51 76 0 43 10 73 51 73" id="u"/><path fill="#3a414a" d="M100-194c63 0 86 42 84 106H49c0 40 14 67 53 68 26 1 43-12 49-29l28 8c-11 28-37 45-77 45C44 4 14-33 15-96c1-61 26-98 85-98zm52 81c6-60-76-77-97-28-3 7-6 17-6 28h103" id="v"/><g id="g"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#s"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,14.814814814814813,0)" xlink:href="#t"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,20.98765432098765,0)" xlink:href="#q"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,28.33333333333333,0)" xlink:href="#i"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,33.20987654320987,0)" xlink:href="#u"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,45.55555555555555,0)" xlink:href="#v"/></g></defs></g></svg>
\ No newline at end of file diff --git a/content/posts/home-server-part-4.md b/content/posts/home-server-part-4/index.md index 1eff36f..bb44702 100644 --- a/content/posts/home-server-part-4.md +++ b/content/posts/home-server-part-4/index.md @@ -1,13 +1,13 @@ --- -title: "A home server journey, part 4: Network" -date: 2025-12-25 +title: "A home server journey, part 4: Networking" +date: 2025-12-24 description: | - This is the fourth episode in a series where I set up a FreeBSD home server, explaining all the steps, problems and solutions along the way. This time we're setting up the networking. + This is the fourth episode in a series where I set up a FreeBSD home server, explaining all the steps, problems and solutions along the way. This time we're looking at networking. extra: kind: note --- -This is the fourth episode in a series where I set up a FreeBSD home server, explaining all the steps, problems and solutions along the way. This time we're setting up the networking. +This is the fourth episode in a series where I set up a FreeBSD home server, explaining all the steps, problems and solutions along the way. This time we're looking at networking. Check out episodes [1](/posts/home-server-part-1), [2](/posts/home-server-part-2), [3](/posts/home-server-part-3). @@ -19,7 +19,7 @@ I already have a private network (`192.168.0.0/16`) that uses my pfSense router The host will also be connected directly to the ISP's network using its second interface (`wan0`). This interface will get its IP using DHCP. Packets to the internet, as well as packets to public services running on the FreeBSD host go through this interface. -{{ fig(src="/files/pursotin_network.svg", alt="A simplified diagram showing the two interfaces") }} +{{ fig(src="pursotin_network.svg", alt="A simplified diagram showing the two interfaces") }} A dual interface set up like this is simple in theory, but there are important nuances, e.g. regarding return traffic routing and DNS. diff --git a/content/posts/home-server-part-4/pursotin_network.svg b/content/posts/home-server-part-4/pursotin_network.svg new file mode 100644 index 0000000..79d1dea --- /dev/null +++ b/content/posts/home-server-part-4/pursotin_network.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="975" height="327"><g transform="translate(-872 -724)" lucid:page-tab-id="jJFWJm6nolyj"><path d="M500 0h1500v1500H500z" fill="#fff"/><path d="M900 786a6 6 0 0 1 6-6h88a6 6 0 0 1 6 6v208a6 6 0 0 1-6 6h-88a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,905,785) translate(-0.5864197530864175 96.11111111111111)"/><use xlink:href="#b" transform="matrix(1,0,0,1,905,785) translate(24.012345679012345 122.7777777777778)"/><path d="M1000 786a6 6 0 0 1 6-6h58a6 6 0 0 1 6 6v48a6 6 0 0 1-6 6h-58a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#f2f3f5"/><use xlink:href="#c" transform="matrix(1,0,0,1,1005,785) translate(9.043209876543212 30.27777777777778)"/><path d="M1000 946a6 6 0 0 1 6-6h58a6 6 0 0 1 6 6v48a6 6 0 0 1-6 6h-58a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#f2f3f5"/><use xlink:href="#d" transform="matrix(1,0,0,1,1005,945) translate(3.487654320987655 30.27777777777778)"/><path d="M1330 784.67a6 6 0 0 1 6-6h98a6 6 0 0 1 6 6v50.66a6 6 0 0 1-6 6h-98a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#e" transform="matrix(1,0,0,1,1335,783.6666666666667) translate(16.728395061728392 31.02777777777778)"/><path d="M1540 784.67a6 6 0 0 1 6-6h68a6 6 0 0 1 6 6v208a6 6 0 0 1-6 6h-68a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#f2f3f5"/><use xlink:href="#f" transform="matrix(1,0,0,1,1545,783.6666666666667) translate(17.598765432098766 109.65277777777777)"/><path d="M1780 848.67c22.1 0 40 17.9 40 40s-17.9 40-40 40h-80c-22.1 0-40-17.9-40-40s17.9-40 40-40z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#g" transform="matrix(1,0,0,1,1665,853.6666666666667) translate(38.0246913580247 39.65277777777778)"/><path d="M1621.5 888.67h37" stroke="#3a414a" fill="none"/><path d="M1621.5 889.14h-.5v-.95h.5zM1659 888.65l.02.5h-.53v-.96h.53z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1441.5 810h97" stroke="#3a414a" fill="none"/><path d="M1441.5 810.48h-.5v-.96h.5zM1539 810.48h-.5v-.96h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1145 784.67a6 6 0 0 1 6-6h98a6 6 0 0 1 6 6v50.66a6 6 0 0 1-6 6h-98a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#h" transform="matrix(1,0,0,1,1150,783.6666666666667) translate(28.425925925925927 21.09027777777778)"/><use xlink:href="#i" transform="matrix(1,0,0,1,1150,783.6666666666667) translate(19.197530864197528 47.75694444444444)"/><path d="M1256.5 810h72" stroke="#3a414a" fill="none"/><path d="M1256.5 810.48h-.5v-.96h.5zM1329 810.48h-.5v-.96h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1143.5 810h-72" stroke="#3a414a" fill="none"/><path d="M1144 810.48h-.5v-.96h.5zM1071.5 810.48h-.5v-.96h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1071.5 970h467" stroke="#3a414a" fill="none"/><path d="M1071.5 970.48h-.5v-.96h.5zM1539 970.48h-.5v-.96h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1200 842.83v16.67" stroke="#3a414a" fill="none"/><path d="M1200.47 842.85h-.94v-.52h.94zM1200.47 860h-.94v-.5h.94z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1135.74 866a6 6 0 0 1 6-6h116.52a6 6 0 0 1 6 6v40.68a6 6 0 0 1-6 6h-116.52a6 6 0 0 1-6-6z" fill="none"/><use xlink:href="#j" transform="matrix(1,0,0,1,1140.7357407407408,865) translate(0 14.388888888888888)"/><use xlink:href="#k" transform="matrix(1,0,0,1,1140.7357407407408,865) translate(45.38271604938272 14.388888888888888)"/><use xlink:href="#l" transform="matrix(1,0,0,1,1140.7357407407408,865) translate(92.79012345679013 14.388888888888888)"/><use xlink:href="#m" transform="matrix(1,0,0,1,1140.7357407407408,865) translate(0 35.72222222222222)"/><path d="M1072.2 986a6 6 0 0 1 6-6h48.24a6 6 0 0 1 6 6v19.34a6 6 0 0 1-6 6h-48.23a6 6 0 0 1-6-6z" fill="none"/><use xlink:href="#n" transform="matrix(1,0,0,1,1077.2122222222222,985) translate(0 14.555555555555555)"/><path d="M1000.5 754.66a6 6 0 0 1 6-6h101.72a6 6 0 0 1 6 6V774a6 6 0 0 1-6 6h-101.7a6 6 0 0 1-6-6z" fill="none"/><use xlink:href="#o" transform="matrix(1,0,0,1,1005.5096913580246,753.6566666666666) translate(0 14.555555555555555)"/><path d="M1440 823.32a6 6 0 0 1 6-6h48.23a6 6 0 0 1 6 6v19.35a6 6 0 0 1-6 6H1446a6 6 0 0 1-6-6z" fill="none"/><g><use xlink:href="#n" transform="matrix(1,0,0,1,1445,822.3233333333334) translate(0 14.555555555555555)"/></g><path d="M1266.16 754.66a6 6 0 0 1 6-6H1364a6 6 0 0 1 6 6V774a6 6 0 0 1-6 6h-91.84a6 6 0 0 1-6-6z" fill="none"/><g><use xlink:href="#p" transform="matrix(1,0,0,1,1271.1628395061728,753.6566666666666) translate(0 14.555555555555555)"/></g><defs><path fill="#3a414a" d="M63-220v92h138v28H63V0H30v-248h175v28H63" id="q"/><path fill="#3a414a" d="M114-163C36-179 61-72 57 0H25l-1-190h30c1 12-1 29 2 39 6-27 23-49 58-41v29" id="r"/><path fill="#3a414a" d="M100-194c63 0 86 42 84 106H49c0 40 14 67 53 68 26 1 43-12 49-29l28 8c-11 28-37 45-77 45C44 4 14-33 15-96c1-61 26-98 85-98zm52 81c6-60-76-77-97-28-3 7-6 17-6 28h103" id="s"/><path fill="#3a414a" d="M160-131c35 5 61 23 61 61C221 17 115-2 30 0v-248c76 3 177-17 177 60 0 33-19 50-47 57zm-97-11c50-1 110 9 110-42 0-47-63-36-110-37v79zm0 115c55-2 124 14 124-45 0-56-70-42-124-44v89" id="t"/><path fill="#3a414a" d="M185-189c-5-48-123-54-124 2 14 75 158 14 163 119 3 78-121 87-175 55-17-10-28-26-33-46l33-7c5 56 141 63 141-1 0-78-155-14-162-118-5-82 145-84 179-34 5 7 8 16 11 25" id="u"/><path fill="#3a414a" d="M30-248c118-7 216 8 213 122C240-48 200 0 122 0H30v-248zM63-27c89 8 146-16 146-99s-60-101-146-95v194" id="v"/><g id="a"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#q"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,13.518518518518517,0)" xlink:href="#r"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,20.864197530864196,0)" xlink:href="#s"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,33.20987654320987,0)" xlink:href="#s"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,45.55555555555555,0)" xlink:href="#t"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,60.37037037037037,0)" xlink:href="#u"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,75.18518518518518,0)" xlink:href="#v"/></g><path fill="#3a414a" d="M106-169C34-169 62-67 57 0H25v-261h32l-1 103c12-21 28-36 61-36 89 0 53 116 60 194h-32v-121c2-32-8-49-39-48" id="w"/><path fill="#3a414a" d="M100-194c62-1 85 37 85 99 1 63-27 99-86 99S16-35 15-95c0-66 28-99 85-99zM99-20c44 1 53-31 53-75 0-43-8-75-51-75s-53 32-53 75 10 74 51 75" id="x"/><path fill="#3a414a" d="M135-143c-3-34-86-38-87 0 15 53 115 12 119 90S17 21 10-45l28-5c4 36 97 45 98 0-10-56-113-15-118-90-4-57 82-63 122-42 12 7 21 19 24 35" id="y"/><path fill="#3a414a" d="M59-47c-2 24 18 29 38 22v24C64 9 27 4 27-40v-127H5v-23h24l9-43h21v43h35v23H59v120" id="z"/><g id="b"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#w"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,24.691358024691358,0)" xlink:href="#y"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,35.80246913580247,0)" xlink:href="#z"/></g><path fill="#3a414a" d="M24 0v-261h32V0H24" id="A"/><path fill="#3a414a" d="M141-36C126-15 110 5 73 4 37 3 15-17 15-53c-1-64 63-63 125-63 3-35-9-54-41-54-24 1-41 7-42 31l-33-3c5-37 33-52 76-52 45 0 72 20 72 64v82c-1 20 7 32 28 27v20c-31 9-61-2-59-35zM48-53c0 20 12 33 32 33 41-3 63-29 60-74-43 2-92-5-92 41" id="B"/><path fill="#3a414a" d="M117-194c89-4 53 116 60 194h-32v-121c0-31-8-49-39-48C34-167 62-67 57 0H25l-1-190h30c1 10-1 24 2 32 11-22 29-35 61-36" id="C"/><path fill="#3a414a" d="M101-251c68 0 85 55 85 127S166 4 100 4C33 4 14-52 14-124c0-73 17-127 87-127zm-1 229c47 0 54-49 54-102s-4-102-53-102c-51 0-55 48-55 102 0 53 5 102 54 102" id="D"/><g id="c"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,4.876543209876543,0)" xlink:href="#B"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,17.22222222222222,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,29.5679012345679,0)" xlink:href="#D"/></g><path fill="#3a414a" d="M206 0h-36l-40-164L89 0H53L-1-190h32L70-26l43-164h34l41 164 42-164h31" id="E"/><g id="d"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#E"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,15.987654320987653,0)" xlink:href="#B"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,28.333333333333332,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,40.67901234567901,0)" xlink:href="#D"/></g><path fill="#3a414a" d="M233-177c-1 41-23 64-60 70L243 0h-38l-65-103H63V0H30v-248c88 3 205-21 203 71zM63-129c60-2 137 13 137-47 0-61-80-42-137-45v92" id="F"/><path fill="#3a414a" d="M84 4C-5 8 30-112 23-190h32v120c0 31 7 50 39 49 72-2 45-101 50-169h31l1 190h-30c-1-10 1-25-2-33-11 22-28 36-60 37" id="G"/><g id="e"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#F"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,15.987654320987653,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,28.333333333333332,0)" xlink:href="#G"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,40.67901234567901,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,46.851851851851855,0)" xlink:href="#s"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,59.19753086419753,0)" xlink:href="#r"/></g><path fill="#3a414a" d="M33 0v-248h34V0H33" id="H"/><path fill="#3a414a" d="M30-248c87 1 191-15 191 75 0 78-77 80-158 76V0H30v-248zm33 125c57 0 124 11 124-50 0-59-68-47-124-48v98" id="I"/><g id="f"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#H"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,6.172839506172839,0)" xlink:href="#u"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,20.98765432098765,0)" xlink:href="#I"/></g><path fill="#3a414a" d="M24-231v-30h32v30H24zM24 0v-190h32V0H24" id="J"/><g id="g"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,4.876543209876543,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,17.22222222222222,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,23.39506172839506,0)" xlink:href="#s"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,35.74074074074074,0)" xlink:href="#r"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,43.08641975308642,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,55.432098765432094,0)" xlink:href="#s"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,67.77777777777777,0)" xlink:href="#z"/></g><path fill="#3a414a" d="M30 0v-248h33v221h125V0H30" id="K"/><path fill="#3a414a" d="M205 0l-28-72H64L36 0H1l101-248h38L239 0h-34zm-38-99l-47-123c-12 45-31 82-46 123h93" id="L"/><path fill="#3a414a" d="M190 0L58-211 59 0H30v-248h39L202-35l-2-213h31V0h-41" id="M"/><g id="h"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#L"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,27.160493827160494,0)" xlink:href="#M"/></g><path fill="#3a414a" d="M96-169c-40 0-48 33-48 73s9 75 48 75c24 0 41-14 43-38l32 2c-6 37-31 61-74 61-59 0-76-41-82-99-10-93 101-131 147-64 4 7 5 14 7 22l-32 3c-4-21-16-35-41-35" id="N"/><g id="i"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#y"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,11.11111111111111,0)" xlink:href="#E"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,27.098765432098766,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,31.975308641975307,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,38.14814814814815,0)" xlink:href="#N"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,49.25925925925927,0)" xlink:href="#w"/></g><path fill="#635dff" d="M100-194c62-1 85 37 85 99 1 63-27 99-86 99S16-35 15-95c0-66 28-99 85-99zM99-20c44 1 53-31 53-75 0-43-8-75-51-75s-53 32-53 75 10 74 51 75" id="O"/><path fill="#635dff" d="M59-47c-2 24 18 29 38 22v24C64 9 27 4 27-40v-127H5v-23h24l9-43h21v43h35v23H59v120" id="P"/><path fill="#635dff" d="M106-169C34-169 62-67 57 0H25v-261h32l-1 103c12-21 28-36 61-36 89 0 53 116 60 194h-32v-121c2-32-8-49-39-48" id="Q"/><path fill="#635dff" d="M100-194c63 0 86 42 84 106H49c0 40 14 67 53 68 26 1 43-12 49-29l28 8c-11 28-37 45-77 45C44 4 14-33 15-96c1-61 26-98 85-98zm52 81c6-60-76-77-97-28-3 7-6 17-6 28h103" id="R"/><path fill="#635dff" d="M114-163C36-179 61-72 57 0H25l-1-190h30c1 12-1 29 2 39 6-27 23-49 58-41v29" id="S"/><g id="j"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#O"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,9.876543209876544,0)" xlink:href="#P"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,14.814814814814817,0)" xlink:href="#Q"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,24.69135802469136,0)" xlink:href="#R"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,34.567901234567906,0)" xlink:href="#S"/></g><path fill="#635dff" d="M135-143c-3-34-86-38-87 0 15 53 115 12 119 90S17 21 10-45l28-5c4 36 97 45 98 0-10-56-113-15-118-90-4-57 82-63 122-42 12 7 21 19 24 35" id="T"/><g id="k"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#Q"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,9.876543209876544,0)" xlink:href="#O"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,19.75308641975309,0)" xlink:href="#T"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,28.641975308641978,0)" xlink:href="#P"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,33.580246913580254,0)" xlink:href="#T"/></g><path fill="#635dff" d="M24-231v-30h32v30H24zM24 0v-190h32V0H24" id="U"/><path fill="#635dff" d="M117-194c89-4 53 116 60 194h-32v-121c0-31-8-49-39-48C34-167 62-67 57 0H25l-1-190h30c1 10-1 24 2 32 11-22 29-35 61-36" id="V"/><g id="l"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#U"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,3.901234567901235,0)" xlink:href="#V"/></g><path fill="#635dff" d="M27 0v-27h64v-190l-56 39v-29l58-41h29v221h61V0H27" id="W"/><path fill="#635dff" d="M99-251c64 0 84 50 84 122C183-37 130 33 47-8c-14-7-20-23-25-40l30-5c6 39 69 39 84 7 9-19 16-44 16-74-10 22-31 35-62 35-49 0-73-33-73-83 0-54 28-83 82-83zm-1 141c31-1 51-18 51-49 0-36-14-67-51-67-34 0-49 23-49 58 0 34 15 58 49 58" id="X"/><path fill="#635dff" d="M101-251c82-7 93 87 43 132L82-64C71-53 59-42 53-27h129V0H18c2-99 128-94 128-182 0-28-16-43-45-43s-46 15-49 41l-32-3c6-41 34-60 81-64" id="Y"/><path fill="#635dff" d="M33 0v-38h34V0H33" id="Z"/><path fill="#635dff" d="M110-160c48 1 74 30 74 79 0 53-28 85-80 85-65 0-83-55-86-122-5-90 50-162 133-122 14 7 22 21 27 39l-31 6c-5-40-67-38-82-6-9 19-15 44-15 74 11-20 30-34 60-33zm-7 138c34 0 49-23 49-58s-16-56-50-56c-29 0-50 16-49 49 1 36 15 65 50 65" id="aa"/><path fill="#635dff" d="M134-131c28 9 52 24 51 62-1 50-34 73-85 73S17-19 16-69c0-36 21-54 49-61-75-25-45-126 34-121 46 3 78 18 79 63 0 33-17 51-44 57zm-34-11c31 1 46-15 46-44 0-28-17-43-47-42-29 0-46 13-45 42 1 28 16 44 46 44zm1 122c35 0 51-18 51-52 0-30-18-46-53-46-33 0-51 17-51 47 0 34 19 51 53 51" id="ab"/><path fill="#635dff" d="M101-251c68 0 85 55 85 127S166 4 100 4C33 4 14-52 14-124c0-73 17-127 87-127zm-1 229c47 0 54-49 54-102s-4-102-53-102c-51 0-55 48-55 102 0 53 5 102 54 102" id="ac"/><path fill="#635dff" d="M0 4l72-265h28L28 4H0" id="ad"/><g id="m"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,9.876543209876544,0)" xlink:href="#X"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,19.75308641975309,0)" xlink:href="#Y"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,29.629629629629633,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,34.567901234567906,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,44.44444444444445,0)" xlink:href="#aa"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,54.320987654320994,0)" xlink:href="#ab"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,64.19753086419755,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,69.13580246913583,0)" xlink:href="#ac"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,79.01234567901237,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,83.95061728395063,0)" xlink:href="#ac"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,93.82716049382718,0)" xlink:href="#ad"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,98.76543209876544,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,108.64197530864199,0)" xlink:href="#aa"/></g><path fill="#e81313" d="M30-248c118-7 216 8 213 122C240-48 200 0 122 0H30v-248zM63-27c89 8 146-16 146-99s-60-101-146-95v194" id="ae"/><path fill="#e81313" d="M197 0v-115H63V0H30v-248h33v105h134v-105h34V0h-34" id="af"/><path fill="#e81313" d="M212-179c-10-28-35-45-73-45-59 0-87 40-87 99 0 60 29 101 89 101 43 0 62-24 78-52l27 14C228-24 195 4 139 4 59 4 22-46 18-125c-6-104 99-153 187-111 19 9 31 26 39 46" id="ag"/><path fill="#e81313" d="M30-248c87 1 191-15 191 75 0 78-77 80-158 76V0H30v-248zm33 125c57 0 124 11 124-50 0-59-68-47-124-48v98" id="ah"/><g id="n"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#ae"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,12.790123456790125,0)" xlink:href="#af"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,25.58024691358025,0)" xlink:href="#ag"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,38.370370370370374,0)" xlink:href="#ah"/></g><g id="o"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,9.876543209876544,0)" xlink:href="#X"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,19.75308641975309,0)" xlink:href="#Y"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,29.629629629629633,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,34.567901234567906,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,44.44444444444445,0)" xlink:href="#aa"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,54.320987654320994,0)" xlink:href="#ab"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,64.19753086419755,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,69.13580246913583,0)" xlink:href="#ac"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,79.01234567901237,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,83.95061728395063,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,93.82716049382718,0)" xlink:href="#ac"/></g><g id="p"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,9.876543209876544,0)" xlink:href="#X"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,19.75308641975309,0)" xlink:href="#Y"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,29.629629629629633,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,34.567901234567906,0)" xlink:href="#W"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,44.44444444444445,0)" xlink:href="#aa"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,54.320987654320994,0)" xlink:href="#ab"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,64.19753086419755,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,69.13580246913583,0)" xlink:href="#ac"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,79.01234567901237,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,83.95061728395063,0)" xlink:href="#W"/></g></defs></g></svg>
\ No newline at end of file diff --git a/content/posts/it-doesnt-mean-that.md b/content/posts/it-doesnt-mean-that/index.md index adf171f..0fb2988 100644 --- a/content/posts/it-doesnt-mean-that.md +++ b/content/posts/it-doesnt-mean-that/index.md @@ -1,11 +1,9 @@ --- title: It doesn't mean that -date: 2024-03-31 -extra: - kind: note +date: 2024-05-16 --- -<img src="/files/wikimedia_monad.svg" alt="A plain circle with a small dot in the center" style="max-height: 200px; margin-bottom: 0px" /> +<img src="wikimedia_monad.svg" alt="A plain circle with a small dot in the center" style="max-height: 200px; margin-bottom: 0px" /> ## When I learned my first programming language diff --git a/content/posts/it-doesnt-mean-that/wikimedia_monad.svg b/content/posts/it-doesnt-mean-that/wikimedia_monad.svg new file mode 100644 index 0000000..887c3c6 --- /dev/null +++ b/content/posts/it-doesnt-mean-that/wikimedia_monad.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><link xmlns="" type="text/css" rel="stylesheet" id="dark-mode-custom-link"/><link xmlns="" type="text/css" rel="stylesheet" id="dark-mode-general-link"/><style xmlns="" lang="en" type="text/css" id="dark-mode-custom-style"/><style xmlns="" lang="en" type="text/css" id="dark-mode-native-style"/><style xmlns="" lang="en" type="text/css" id="dark-mode-native-sheet"/><path fill="#fff" stroke="#000" stroke-width="2" d="M254 128a126 126 0 1 1-252 0 126 126 0 1 1 252 0z"/><path d="M138 128a10 10 0 1 1-20 0 10 10 0 1 1 20 0z"/><script xmlns="" id="bw-fido2-page-script"/></svg>
\ No newline at end of file diff --git a/content/posts/now-2024-fall/diffuser_1.jpg b/content/posts/now-2024-fall/diffuser_1.jpg Binary files differnew file mode 100644 index 0000000..d5e6693 --- /dev/null +++ b/content/posts/now-2024-fall/diffuser_1.jpg diff --git a/content/posts/now-2024-fall/diffuser_2.jpg b/content/posts/now-2024-fall/diffuser_2.jpg Binary files differnew file mode 100644 index 0000000..f8c8b84 --- /dev/null +++ b/content/posts/now-2024-fall/diffuser_2.jpg diff --git a/content/posts/now-2024-fall/diffuser_3.jpg b/content/posts/now-2024-fall/diffuser_3.jpg Binary files differnew file mode 100644 index 0000000..5efa8ab --- /dev/null +++ b/content/posts/now-2024-fall/diffuser_3.jpg diff --git a/content/posts/now-2024-fall.md b/content/posts/now-2024-fall/index.md index b71de95..1946eda 100644 --- a/content/posts/now-2024-fall.md +++ b/content/posts/now-2024-fall/index.md @@ -35,9 +35,9 @@ extra: } </style> <p class="gallery"> -<a href="/files/diffuser_1.jpg"><img src="/files/diffuser_1.jpg" alt="Sawed and varnished wooden pegs waiting for assembly."></a> -<a href="/files/diffuser_2.jpg"><img src="/files/diffuser_2.jpg" alt="A plywood board with a single row and column of pegs assembled on top."></a> -<a href="/files/diffuser_3.jpg"><img src="/files/diffuser_3.jpg" alt="A complete sound diffuser, comprising a sizeable grid of differently angled pegs."></a> +<a href="diffuser_1.jpg"><img src="diffuser_1.jpg" alt="Sawed and varnished wooden pegs waiting for assembly."></a> +<a href="diffuser_2.jpg"><img src="diffuser_2.jpg" alt="A plywood board with a single row and column of pegs assembled on top."></a> +<a href="diffuser_3.jpg"><img src="diffuser_3.jpg" alt="A complete sound diffuser, comprising a sizeable grid of differently angled pegs."></a> <label>The sound diffuser being built.</label> </p> diff --git a/content/posts/now-2024-spring.md b/content/posts/now-2024-spring/index.md index aa1fe1f..ad10fe5 100644 --- a/content/posts/now-2024-spring.md +++ b/content/posts/now-2024-spring/index.md @@ -9,7 +9,7 @@ extra: Inches of snow are falling on the yard, covering any new green growths. The dog likes it, I don't. <video width="100%" controls> - <source src="/files/jojo-in-snow.webm" type="video/webm"> + <source src="jojo-in-snow.webm" type="video/webm"> Your browser does not support the video tag. </video> diff --git a/content/posts/now-2024-spring/jojo-in-snow.webm b/content/posts/now-2024-spring/jojo-in-snow.webm Binary files differnew file mode 100644 index 0000000..19047e5 --- /dev/null +++ b/content/posts/now-2024-spring/jojo-in-snow.webm diff --git a/content/posts/now-2024-summer/2024-wines.jpg b/content/posts/now-2024-summer/2024-wines.jpg Binary files differnew file mode 100644 index 0000000..81cddef --- /dev/null +++ b/content/posts/now-2024-summer/2024-wines.jpg diff --git a/content/posts/now-2024-summer/aws-exam-drink.jpeg b/content/posts/now-2024-summer/aws-exam-drink.jpeg Binary files differnew file mode 100644 index 0000000..16f8933 --- /dev/null +++ b/content/posts/now-2024-summer/aws-exam-drink.jpeg diff --git a/content/posts/now-2024-summer.md b/content/posts/now-2024-summer/index.md index cc7bb74..d716e4a 100644 --- a/content/posts/now-2024-summer.md +++ b/content/posts/now-2024-summer/index.md @@ -16,13 +16,13 @@ extra: - Started learning about wines. Organized a wine tasting. My top pick: Domaine Laroche Chablis 1er Cru Les Vaudevey 2022. -{{ fig(src="/files/2024-wines.jpg", alt="Wines from the tasting") }} +{{ fig(src="2024-wines.jpg", alt="Wines from the tasting") }} ### Career - I passed the **AWS Certified Developer Associate** certificate exam! A celebratory espresso martini was in order. Planning to do **Solutions Architect Associate** next. -{{ fig(src="/files/aws-exam-drink.jpeg", alt="My hand holding an espresso martini outside in sunny weather") }} +{{ fig(src="aws-exam-drink.jpeg", alt="My hand holding an espresso martini outside in sunny weather") }} ## Played games diff --git a/content/posts/now-2025-fall.md b/content/posts/now-2025-fall/index.md index fe0d1f2..0c21cd6 100644 --- a/content/posts/now-2025-fall.md +++ b/content/posts/now-2025-fall/index.md @@ -20,11 +20,11 @@ We've also been planning the wedding that's taking place in 2026. In many ways I A lot of renovations this summer. One of the biggest ones was the translucent roofing installation: -{{ fig(src="/files/valokate_1.jpg", alt="Installing the sunroof") }} +{{ fig(src="valokate_1.jpg", alt="Installing the sunroof") }} After around six hours (including breaks), it's all done! Just in time for rain. -{{ fig(src="/files/valokate_2.jpg", alt="Complete sunroof") }} +{{ fig(src="valokate_2.jpg", alt="Complete sunroof") }} You can see the gnarly reddish wall in the picture. That and a bunch of other grime and residue was cleaned off as part of a neighborhood exterior painting project. The place is looking a lot nicer now from the outside (no pictures of this I'm afraid). @@ -73,7 +73,7 @@ I late August I went on a company trip to Krakow, Poland for one weekend. A nice In September we had booked a trip to Italy with a group of friends. We stayed in Rome for a couple of days, enjoying the 30C heat and sights such as the Villa Borghese. We had already visited the Colosseum and the Vatican on earlier trips so we decided to avoid the queues and visit less popular places. It was the Jubileum year so many sights were jam-packed. After that we got a rental and drove ~500km south to Calabria, where we spent the next week at a really nice villa overlooking the sea. -{{ fig(src="/files/villa.jpeg", alt="The view from the villa") }} +{{ fig(src="villa.jpeg", alt="The view from the villa") }} Later in September I attended EuroBSDCon 2025 in Zagreb, Croatia. A lot of great talks and lab sessions! I might write a conference notes post about the trip. diff --git a/content/posts/now-2025-fall/valokate_1.jpg b/content/posts/now-2025-fall/valokate_1.jpg Binary files differnew file mode 100644 index 0000000..1ddccf2 --- /dev/null +++ b/content/posts/now-2025-fall/valokate_1.jpg diff --git a/content/posts/now-2025-fall/valokate_2.jpg b/content/posts/now-2025-fall/valokate_2.jpg Binary files differnew file mode 100644 index 0000000..3d66088 --- /dev/null +++ b/content/posts/now-2025-fall/valokate_2.jpg diff --git a/content/posts/now-2025-fall/villa.jpeg b/content/posts/now-2025-fall/villa.jpeg Binary files differnew file mode 100644 index 0000000..51cc84b --- /dev/null +++ b/content/posts/now-2025-fall/villa.jpeg diff --git a/content/posts/now-2025-summer.md b/content/posts/now-2025-summer/index.md index 81293ca..d3bbaa5 100644 --- a/content/posts/now-2025-summer.md +++ b/content/posts/now-2025-summer/index.md @@ -7,7 +7,7 @@ extra: kind: now --- -{{ fig(src="/files/kenrokuen.jpg", alt="A torii gate in the Kenroku-en garden") }} +{{ fig(src="kenrokuen.jpg", alt="A torii gate in the Kenroku-en garden") }} Here's three seasons of updates in one package. @@ -41,7 +41,7 @@ Me and my fiancée made a long-awaited trip to Japan in the spring. We landed in We traveled the central island, Honshū, for three weeks. Mostly by train, but also by bus. We visited Ōsaka, Nara, Kyōto, Gifu-Takayama, Kanazawa and finally Tōkyō. This route skips the popular south-coast bullet train connection, instead going north through the mountains. -{{ fig(src="/files/samurai_garden.jpeg", alt="The garden of a preserved samurai family home, with a koi fish pond and stone lantern") }} +{{ fig(src="samurai_garden.jpeg", alt="The garden of a preserved samurai family home, with a koi fish pond and stone lantern") }} I got to finally test my Japanese. Speaking was very laborious at first, but it got way easier the more I got to practise. My vocabulary didn't improve that much, but what improved were things like _cadence_, _[aizuchi](https://en.wikipedia.org/wiki/Aizuchi)_, and ability to respond with more natural word choices. Big up to active listening and copying native speakers. @@ -49,7 +49,7 @@ We ate and drank well. We mostly gravitated towards traditional-style, or _washo Something to note: pickled veggies go great with meat-centered, hearty meals. We were eager to implement this in our home cooking as soon as we got home. -{{ fig(src="/files/wagyu_grill.jpeg", alt="Wagyu beef, mushroom and peppers on a tabletop charcoal grill") }} +{{ fig(src="wagyu_grill.jpeg", alt="Wagyu beef, mushroom and peppers on a tabletop charcoal grill") }} We visited the obligatory tourist spots, like the _Thousand torī gates_ in Kyōto, and the _Dōtonbori shopping street_ in Ōsaka. We like seeing sights, but we know that our most memorable experiences have always come naturally from exploration and keeping an open mind. That's why we spent only a fraction of our time visiting Tripadvisor locations and most of the time wandering around, following local recommendations and keeping our eyes, ears and nostrils peeled. diff --git a/content/posts/now-2025-summer/kenrokuen.jpg b/content/posts/now-2025-summer/kenrokuen.jpg Binary files differnew file mode 100644 index 0000000..f739d82 --- /dev/null +++ b/content/posts/now-2025-summer/kenrokuen.jpg diff --git a/content/posts/now-2025-summer/samurai_garden.jpeg b/content/posts/now-2025-summer/samurai_garden.jpeg Binary files differnew file mode 100644 index 0000000..f6637b0 --- /dev/null +++ b/content/posts/now-2025-summer/samurai_garden.jpeg diff --git a/content/posts/now-2025-summer/wagyu_grill.jpeg b/content/posts/now-2025-summer/wagyu_grill.jpeg Binary files differnew file mode 100644 index 0000000..0e835bc --- /dev/null +++ b/content/posts/now-2025-summer/wagyu_grill.jpeg diff --git a/content/posts/now-2025-winter/2025_wrapped_genres.jpeg b/content/posts/now-2025-winter/2025_wrapped_genres.jpeg Binary files differnew file mode 100644 index 0000000..630be8a --- /dev/null +++ b/content/posts/now-2025-winter/2025_wrapped_genres.jpeg diff --git a/content/posts/now-2025-winter/backdoor_feature_done.jpeg b/content/posts/now-2025-winter/backdoor_feature_done.jpeg Binary files differnew file mode 100644 index 0000000..a9c71d5 --- /dev/null +++ b/content/posts/now-2025-winter/backdoor_feature_done.jpeg diff --git a/content/posts/now-2025-winter/backdoor_feature_wip.jpeg b/content/posts/now-2025-winter/backdoor_feature_wip.jpeg Binary files differnew file mode 100644 index 0000000..2f381d1 --- /dev/null +++ b/content/posts/now-2025-winter/backdoor_feature_wip.jpeg diff --git a/content/posts/now-2025-winter/dopamine_office.jpeg b/content/posts/now-2025-winter/dopamine_office.jpeg Binary files differnew file mode 100644 index 0000000..aad4e65 --- /dev/null +++ b/content/posts/now-2025-winter/dopamine_office.jpeg diff --git a/content/posts/now-2025-winter.md b/content/posts/now-2025-winter/index.md index 0462760..2fae6f8 100644 --- a/content/posts/now-2025-winter.md +++ b/content/posts/now-2025-winter/index.md @@ -64,7 +64,7 @@ In fact, it might be possible to design this in a way that completely does away Office room number one is now pretty much complete. We tried to combine some of pastel colors and fun patterns, while keeping it smart and tidy. -{{ fig(src="/files/dopamine_office.jpeg", alt="The dopamine office") }} +{{ fig(src="dopamine_office.jpeg", alt="The dopamine office") }} ### Backdoor clothes rack and wall feature @@ -74,17 +74,17 @@ Until now, there has been nowhere to really hang our outdoor clothes nicely. The So we got the idea to repurpose the empty space in the corner, adding some visual interest with acoustic paneling as well as utility with some colorful "knobs" that you can hang coats and scarves on. -{{ fig(src="/files/backdoor_feature_wip.jpeg", alt="Install in progress") }} +{{ fig(src="backdoor_feature_wip.jpeg", alt="Install in progress") }} And the final product (in completely different lighting): -{{ fig(src="/files/backdoor_feature_done.jpeg", alt="An installed wood paneling with some coats hanging off of colored knobs") }} +{{ fig(src="backdoor_feature_done.jpeg", alt="An installed wood paneling with some coats hanging off of colored knobs") }} The white box is an IKEA shoebox. We keep some dog gear in there. ### Cool dog print -{{ fig(src="/files/taulu_koira.jpeg", alt="Cool dog") }} +{{ fig(src="taulu_koira.jpeg", alt="Cool dog") }} ## Games @@ -116,13 +116,13 @@ The white box is an IKEA shoebox. We keep some dog gear in there. Mostly [Moomin music](https://youtu.be/Bf1pR4rkPK8). I went to see the _Muumimusiikkia_ show in Musiikkitalo (Helsinki) in November, and after that I haven't been able to get Shiratori's melodies out of my head. This is a positive problem. -{{ fig(src="/files/muumimusiikkia.jpeg", alt="A photo from our seats at Musiikkitalo, showing the brochure") }} +{{ fig(src="muumimusiikkia.jpeg", alt="A photo from our seats at Musiikkitalo, showing the brochure") }} ### Spotify Wrapped I feel like I'm using Spotify less and less. Might drop the subscription in the near future. I really don't like the policies they are driving. -{{ fig(src="/files/2025_wrapped_genres.jpeg", alt="My top genres, all over the place") }} +{{ fig(src="2025_wrapped_genres.jpeg", alt="My top genres, all over the place") }} ## Previous update diff --git a/content/posts/now-2025-winter/muumimusiikkia.jpeg b/content/posts/now-2025-winter/muumimusiikkia.jpeg Binary files differnew file mode 100644 index 0000000..a99d8f6 --- /dev/null +++ b/content/posts/now-2025-winter/muumimusiikkia.jpeg diff --git a/content/posts/now-2025-winter/taulu_koira.jpeg b/content/posts/now-2025-winter/taulu_koira.jpeg Binary files differnew file mode 100644 index 0000000..11c4f32 --- /dev/null +++ b/content/posts/now-2025-winter/taulu_koira.jpeg diff --git a/content/posts/qcon-london-2024-takeaways/fish-and-chips-duke-of-argyll.jpg b/content/posts/qcon-london-2024-takeaways/fish-and-chips-duke-of-argyll.jpg Binary files differnew file mode 100644 index 0000000..a9fefc8 --- /dev/null +++ b/content/posts/qcon-london-2024-takeaways/fish-and-chips-duke-of-argyll.jpg diff --git a/content/posts/qcon-london-2024-takeaways.md b/content/posts/qcon-london-2024-takeaways/index.md index 17d8b3b..4c644e7 100644 --- a/content/posts/qcon-london-2024-takeaways.md +++ b/content/posts/qcon-london-2024-takeaways/index.md @@ -9,7 +9,7 @@ QCon London 2024 was a multidisciplinary software engineering conference in the This was also my first time in the UK so I had to do some touristing. The weather was a bit chilly, half-cloudy with some intermittent drizzle. -{{ fig(src="/files/london-from-above.jpg", alt="London from above in the late evening") }} +{{ fig(src="london-from-above.jpg", alt="London from above in the late evening") }} ## Common themes @@ -109,4 +109,4 @@ Nothing mindblowing, just good ale and a comfy vibe. A good place to sit out the I had to eat fish & chips at least once just to check it off my bucket list. I don't know if theirs is the best or even proper, but I enjoyed it a lot. -{{ fig(src="/files/fish-and-chips-duke-of-argyll.jpg", alt="Fish and chips at the Duke of Argyll") }} +{{ fig(src="fish-and-chips-duke-of-argyll.jpg", alt="Fish and chips at the Duke of Argyll") }} diff --git a/content/posts/qcon-london-2024-takeaways/london-from-above.jpg b/content/posts/qcon-london-2024-takeaways/london-from-above.jpg Binary files differnew file mode 100644 index 0000000..a7762ed --- /dev/null +++ b/content/posts/qcon-london-2024-takeaways/london-from-above.jpg diff --git a/content/posts/subjective-review-miru/hinokodo-static-abyss.png b/content/posts/subjective-review-miru/hinokodo-static-abyss.png Binary files differnew file mode 100644 index 0000000..edfac67 --- /dev/null +++ b/content/posts/subjective-review-miru/hinokodo-static-abyss.png diff --git a/content/posts/subjective-review-miru.md b/content/posts/subjective-review-miru/index.md index d728a45..59ec7e4 100644 --- a/content/posts/subjective-review-miru.md +++ b/content/posts/subjective-review-miru/index.md @@ -5,7 +5,7 @@ extra: kind: note --- -{{ fig(src="/files/miru_time_to_kill_triple.jpg", alt="A graphic from the first pages of the Miru zine with the text ”Time to kill a god” overlaid on an imposing four-eyed figure.") }} +{{ fig(src="miru_time_to_kill_triple.jpg", alt="A graphic from the first pages of the Miru zine with the text ”Time to kill a god” overlaid on an imposing four-eyed figure.") }} ## TL;DR @@ -31,7 +31,7 @@ With definitions out of the way, let me start by saying that _Miru is the best s ## First look -{{ fig(src="/files/miru_gameplay.jpeg", alt="The Miru zine, polyhedral dice, various stationery and other items strewn across a dining table.") }} +{{ fig(src="miru_gameplay.jpeg", alt="The Miru zine, polyhedral dice, various stationery and other items strewn across a dining table.") }} Miru paints a picture of a dystopian, post-metropolitan society future where humans begrudgingly coexist with humanoid and animal-like robots. The story is kicked off in a scene where a farm worker robot kills a relative of the main character in an act of self defense when it evaluates their drunken hooliganism to be a threat. Stricken, the main character vows revenge and sets off to find out the truth about the machines’ origins. @@ -69,5 +69,5 @@ With that in mind, the designer has released an official soundtrack called [Stat The concept of a soundtrack for a physical game is badass. I own one physical release of such a thing, the Mörk Borg adventure [Putrescence Regnant](https://jnohr.itch.io/putrescence-regnant), which takes the form of a highly stylized LP disc and sleeve. Very cool. -{{ fig(src="/files/hinokodo-static-abyss.png", alt="A photo of the Static Abyss minidisk in its enclosure") }} +{{ fig(src="hinokodo-static-abyss.png", alt="A photo of the Static Abyss minidisk in its enclosure") }} Photo attribution: [Hinokodo](https://hinokodo.itch.io/static-abyss) diff --git a/content/posts/subjective-review-miru/miru_gameplay.jpeg b/content/posts/subjective-review-miru/miru_gameplay.jpeg Binary files differnew file mode 100644 index 0000000..51d8d44 --- /dev/null +++ b/content/posts/subjective-review-miru/miru_gameplay.jpeg diff --git a/content/posts/subjective-review-miru/miru_time_to_kill_triple.jpg b/content/posts/subjective-review-miru/miru_time_to_kill_triple.jpg Binary files differnew file mode 100644 index 0000000..97be7fe --- /dev/null +++ b/content/posts/subjective-review-miru/miru_time_to_kill_triple.jpg diff --git a/content/posts/theres-an-rss-feed-now.md b/content/posts/theres-an-rss-feed-now/index.md index 8ec5448..e52db1a 100644 --- a/content/posts/theres-an-rss-feed-now.md +++ b/content/posts/theres-an-rss-feed-now/index.md @@ -7,4 +7,4 @@ extra: As part of the site build process, I use [`pandoc-rss`](https://github.com/chambln/pandoc-rss) to automatically build an RSS feed of my posts. - + diff --git a/content/posts/theres-an-rss-feed-now/internet_surf.png b/content/posts/theres-an-rss-feed-now/internet_surf.png Binary files differnew file mode 100644 index 0000000..7787770 --- /dev/null +++ b/content/posts/theres-an-rss-feed-now/internet_surf.png diff --git a/content/posts/unfold.md b/content/posts/unfold/index.md index 241703a..8ab3b89 100644 --- a/content/posts/unfold.md +++ b/content/posts/unfold/index.md @@ -12,7 +12,7 @@ extra: I recently presented a lightning talk about the IndieWeb and personal websites to my colleagues at the office. Even though I don't normally enjoy presenting, speaking about things I'm passionate about always turns out to be rather easy. The talk and the presentation that I used to support the talk were well received. </p> -{{ fig(src="/files/indieweb_presentation.png", alt="A slide from the PowerPoint presentation") }} +{{ fig(src="indieweb_presentation.png", alt="A slide from the PowerPoint presentation") }} --- @@ -25,7 +25,7 @@ Later, when I shared my PowerPoint slides in the IndieWeb chat, I was asked if I So curious in fact, that I decided to study up on the ”HTML slideshow landscape”: what kind of tools there are, how do they work on a static site, things like that. Turns out that a tool called `reveal.js` is very popular and often recommended. An idea entered my mind: what if I could turn an HTML note (like this one that you’re reading) into an HTML slideshow, in a somewhat automated fashion? </p> -{{ fig(src="/files/reveal-js-logo.png", alt="Reveal.js logo") }} +{{ fig(src="reveal-js-logo.png", alt="Reveal.js logo") }} --- diff --git a/content/posts/unfold/indieweb_presentation.png b/content/posts/unfold/indieweb_presentation.png Binary files differnew file mode 100644 index 0000000..e9d0096 --- /dev/null +++ b/content/posts/unfold/indieweb_presentation.png diff --git a/content/posts/unfold/reveal-js-logo.png b/content/posts/unfold/reveal-js-logo.png Binary files differnew file mode 100644 index 0000000..f7b671f --- /dev/null +++ b/content/posts/unfold/reveal-js-logo.png diff --git a/content/projects/_index.md b/content/projects/_index.md index 22f6291..592c762 100644 --- a/content/projects/_index.md +++ b/content/projects/_index.md @@ -7,7 +7,7 @@ insert_anchor_links: none # My projects -### [ATK16](atk16) +### [ATK16](atk16/) A 16-bit computer and ecosystem project with a custom ISA and toolchain. @@ -15,7 +15,7 @@ A 16-bit computer and ecosystem project with a custom ISA and toolchain. A dungeon synth / dark ambient duo project with Juuso. -### [Cookbook](cookbook) +### [Cookbook](cookbook/) An online cookbook of recipes I have prepared and enjoyed. Useful for me mostly. @@ -23,10 +23,10 @@ An online cookbook of recipes I have prepared and enjoyed. Useful for me mostly. A CLI tool for communicating with a [Desmofylakas API](https://github.com/poksiala/desmo-api). A kind of a half-humorous attempt at creating something that is like a small Kubernetes but for BSD jails. -### [Diddle](diddle) +### [Diddle](diddle/) A minimalist, performant, accessibility-focused Doodle alternative. See [post](/posts/diddle-event-scheduler). -### [Learning Japanese](learning-japanese) +### [Learning Japanese](learning-japanese/) I have been self-studying Japanese on and off since I was 13. diff --git a/content/projects/atk16/block-diagram.svg b/content/projects/atk16/block-diagram.svg new file mode 100644 index 0000000..138d7a1 --- /dev/null +++ b/content/projects/atk16/block-diagram.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="861" height="511"><g transform="translate(-319 -340)" lucid:page-tab-id="0_0"><path d="M0 0h1500v1000H0z" fill="#fff"/><path d="M340 506a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H346a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#a" transform="matrix(1,0,0,1,345,505) translate(29.135802469135797 26.52777777777778)"/><use xlink:href="#b" transform="matrix(1,0,0,1,345,505) translate(82.09876543209876 26.52777777777778)"/><use xlink:href="#c" transform="matrix(1,0,0,1,345,505) translate(16.728395061728392 53.19444444444445)"/><use xlink:href="#d" transform="matrix(1,0,0,1,345,505) translate(130.1851851851852 53.19444444444445)"/><path d="M580 506a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H586a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#e" transform="matrix(1,0,0,1,585,505) translate(54.96913580246914 39.65277777777778)"/><path d="M580 708.5a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H586a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#f" transform="matrix(1,0,0,1,585,707.5) translate(53.73456790123456 26.52777777777778)"/><use xlink:href="#g" transform="matrix(1,0,0,1,585,707.5) translate(70.92592592592592 53.19444444444445)"/><path d="M340 703.5a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v78a6 6 0 0 1-6 6H346a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#h" transform="matrix(1,0,0,1,345,702.5) translate(73.42592592592592 20.27777777777778)"/><use xlink:href="#i" transform="matrix(1,0,0,1,345,702.5) translate(15.617283950617292 46.94444444444444)"/><use xlink:href="#d" transform="matrix(1,0,0,1,345,702.5) translate(73.45679012345678 73.61111111111111)"/><path d="M534.08 639.48H440.5v-.96h93.58zm365.42 0H608.95v-.96H899.5zM534.08 641.48H440.5v-.96h93.58zm365.42 0H608.95v-.96H899.5zM440.5 639.48h-.5v-.96h.5zM440.5 641.48h-.5v-.96h.5zM900 639.48h-.5v-.96h.5zM900 641.48h-.5v-.96h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#j" transform="matrix(1,0,0,1,534.0840150395552,629.3333333333334) translate(0 14.222222222222223)"/><use xlink:href="#k" transform="matrix(1,0,0,1,534.0840150395552,629.3333333333334) translate(43.35802469135803 14.222222222222223)"/><g fill="none"><path d="M841 481v318"/><path d="M841 481v9.64m0 9.63v19.27m0 9.64v19.28m0 9.63v19.26m0 9.64v19.27m0 9.64v19.28m0 9.64v19.27m0 9.63V693m0 9.64v19.27m0 9.64v19.28m0 9.63v19.28m0 9.63V799" stroke="#282c33" stroke-width="2" stroke-linecap="round"/></g><path d="M439 696v-55.5M441 696v-55.5" stroke="#3a414a" fill="none"/><path d="M439.48 696.5h-.96v-.5h.96zM441.48 696.5h-.96v-.5h.96z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M439 640.5v-.5M441 640.5v-.5M441 581.5v58.04a.2.2 0 0 1-.32.14l-.33-.33M439 581.5V640l.65.65" stroke="#3a414a" fill="none"/><path d="M441.48 581.5h-.96v-.5h.96zM439.48 581.5h-.96v-.5h.96z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M441 639.5v.5M439 639.5v.5" stroke="#3a414a" fill="none"/><path d="M440 366a6 6 0 0 1 6-6h228a6 6 0 0 1 6 6v48a6 6 0 0 1-6 6H446a6 6 0 0 1-6-6z" fill="none"/><use xlink:href="#l" transform="matrix(1,0,0,1,440,360) translate(57.74691358024692 34.44444444444444)"/><use xlink:href="#m" transform="matrix(1,0,0,1,440,360) translate(111.94444444444446 34.44444444444444)"/><path d="M920 366a6 6 0 0 1 6-6h228a6 6 0 0 1 6 6v48a6 6 0 0 1-6 6H926a6 6 0 0 1-6-6z" fill="none"/><use xlink:href="#n" transform="matrix(1,0,0,1,920,360) translate(63.950617283950606 34.44444444444444)"/><path d="M940 456a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H946a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#o" transform="matrix(1,0,0,1,945,455) translate(47.49999999999999 39.65277777777778)"/><path d="M940 556a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H946a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#p" transform="matrix(1,0,0,1,945,555) translate(48.17901234567901 26.52777777777778)"/><use xlink:href="#q" transform="matrix(1,0,0,1,945,555) translate(98.67283950617283 26.52777777777778)"/><use xlink:href="#r" transform="matrix(1,0,0,1,945,555) translate(16.728395061728392 53.19444444444445)"/><use xlink:href="#d" transform="matrix(1,0,0,1,945,555) translate(130.1851851851852 53.19444444444445)"/><path d="M940 656a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H946a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#s" transform="matrix(1,0,0,1,945,655) translate(32.160493827160494 26.52777777777778)"/><use xlink:href="#t" transform="matrix(1,0,0,1,945,655) translate(83.9506172839506 26.52777777777778)"/><use xlink:href="#c" transform="matrix(1,0,0,1,945,655) translate(16.728395061728392 53.19444444444445)"/><use xlink:href="#d" transform="matrix(1,0,0,1,945,655) translate(130.1851851851852 53.19444444444445)"/><path d="M940 756a6 6 0 0 1 6-6h188a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6H946a6 6 0 0 1-6-6z" stroke="#282c33" stroke-width="2" fill="#fff"/><use xlink:href="#u" transform="matrix(1,0,0,1,945,755) translate(38.30246913580247 26.52777777777778)"/><use xlink:href="#v" transform="matrix(1,0,0,1,945,755) translate(90.09259259259258 26.52777777777778)"/><use xlink:href="#c" transform="matrix(1,0,0,1,945,755) translate(16.728395061728392 53.19444444444445)"/><use xlink:href="#d" transform="matrix(1,0,0,1,945,755) translate(130.1851851851852 53.19444444444445)"/><path d="M938.5 495.67H906a5 5 0 0 0-5 5V639.5" stroke="#3a414a" fill="none"/><path d="M938.5 493.67H906a7 7 0 0 0-7 7V639.5" stroke="#3a414a" fill="none"/><path d="M939 496.14h-.5v-.95h.5zM939 494.14h-.5v-.95h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M901 639.5v.5M899 639.5v.5M938.5 591.67H906a5 5 0 0 0-5 5v42.83" stroke="#3a414a" fill="none"/><path d="M938.5 589.67H906a7 7 0 0 0-7 7v42.83" stroke="#3a414a" fill="none"/><path d="M939 592.14h-.5v-.95h.5zM939 590.14h-.5v-.95h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M901 639.5v.5M899 639.5v.5M938.5 691H906a7 7 0 0 1-7-7v-43.5" stroke="#3a414a" fill="none"/><path d="M938.5 689H906a5 5 0 0 1-5-5v-43.5" stroke="#3a414a" fill="none"/><path d="M939 691.48h-.5v-.96h.5zM939 689.48h-.5v-.96h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M899 640.5v-.5M901 640.5v-.5M938.5 791H906a7 7 0 0 1-7-7V640.5" stroke="#3a414a" fill="none"/><path d="M938.5 789H906a5 5 0 0 1-5-5V640.5" stroke="#3a414a" fill="none"/><path d="M939 791.48h-.5v-.96h.5zM939 789.48h-.5v-.96h.5z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M899 640.5v-.5M901 640.5v-.5M679 701v-60.5M681 701v-60.5" stroke="#3a414a" fill="none"/><path d="M679.48 701.5h-.96v-.5h.96zM681.48 701.5h-.96v-.5h.96z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M679 640.5v-.5M681 640.5v-.5M681 581.5v58.04a.2.2 0 0 1-.32.14l-.33-.33M679 581.5V640l.65.65" stroke="#3a414a" fill="none"/><path d="M681.48 581.5h-.96v-.5h.96zM679.48 581.5h-.96v-.5h.96z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M681 639.5v.5M679 639.5v.5" stroke="#3a414a" fill="none"/><defs><path fill="#3a414a" d="M212-179c-10-28-35-45-73-45-59 0-87 40-87 99 0 60 29 101 89 101 43 0 62-24 78-52l27 14C228-24 195 4 139 4 59 4 22-46 18-125c-6-104 99-153 187-111 19 9 31 26 39 46" id="w"/><path fill="#3a414a" d="M30-248c87 1 191-15 191 75 0 78-77 80-158 76V0H30v-248zm33 125c57 0 124 11 124-50 0-59-68-47-124-48v98" id="x"/><path fill="#3a414a" d="M232-93c-1 65-40 97-104 97C67 4 28-28 28-90v-158h33c8 89-33 224 67 224 102 0 64-133 71-224h33v155" id="y"/><g id="a"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#w"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,15.987654320987653,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,30.80246913580247,0)" xlink:href="#y"/></g><path fill="#3a414a" d="M87 75C49 33 22-17 22-94c0-76 28-126 65-167h31c-38 41-64 92-64 168S80 34 118 75H87" id="z"/><path fill="#3a414a" d="M100-194c63 0 86 42 84 106H49c0 40 14 67 53 68 26 1 43-12 49-29l28 8c-11 28-37 45-77 45C44 4 14-33 15-96c1-61 26-98 85-98zm52 81c6-60-76-77-97-28-3 7-6 17-6 28h103" id="A"/><path fill="#3a414a" d="M117-194c89-4 53 116 60 194h-32v-121c0-31-8-49-39-48C34-167 62-67 57 0H25l-1-190h30c1 10-1 24 2 32 11-22 29-35 61-36" id="B"/><path fill="#3a414a" d="M59-47c-2 24 18 29 38 22v24C64 9 27 4 27-40v-127H5v-23h24l9-43h21v43h35v23H59v120" id="C"/><path fill="#3a414a" d="M114-163C36-179 61-72 57 0H25l-1-190h30c1 12-1 29 2 39 6-27 23-49 58-41v29" id="D"/><path fill="#3a414a" d="M141-36C126-15 110 5 73 4 37 3 15-17 15-53c-1-64 63-63 125-63 3-35-9-54-41-54-24 1-41 7-42 31l-33-3c5-37 33-52 76-52 45 0 72 20 72 64v82c-1 20 7 32 28 27v20c-31 9-61-2-59-35zM48-53c0 20 12 33 32 33 41-3 63-29 60-74-43 2-92-5-92 41" id="E"/><path fill="#3a414a" d="M24 0v-261h32V0H24" id="F"/><g id="b"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,7.345679012345679,0)" xlink:href="#w"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,23.333333333333332,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,35.67901234567901,0)" xlink:href="#B"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,48.02469135802469,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,54.19753086419753,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,61.54320987654321,0)" xlink:href="#E"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,73.88888888888889,0)" xlink:href="#F"/></g><path fill="#3a414a" d="M115-194c55 1 70 41 70 98S169 2 115 4C84 4 66-9 55-30l1 105H24l-1-265h31l2 30c10-21 28-34 59-34zm-8 174c40 0 45-34 45-75s-6-73-45-74c-42 0-51 32-51 76 0 43 10 73 51 73" id="G"/><path fill="#3a414a" d="M100-194c62-1 85 37 85 99 1 63-27 99-86 99S16-35 15-95c0-66 28-99 85-99zM99-20c44 1 53-31 53-75 0-43-8-75-51-75s-53 32-53 75 10 74 51 75" id="H"/><path fill="#3a414a" d="M96-169c-40 0-48 33-48 73s9 75 48 75c24 0 41-14 43-38l32 2c-6 37-31 61-74 61-59 0-76-41-82-99-10-93 101-131 147-64 4 7 5 14 7 22l-32 3c-4-21-16-35-41-35" id="I"/><path fill="#3a414a" d="M135-143c-3-34-86-38-87 0 15 53 115 12 119 90S17 21 10-45l28-5c4 36 97 45 98 0-10-56-113-15-118-90-4-57 82-63 122-42 12 7 21 19 24 35" id="J"/><path fill="#3a414a" d="M24-231v-30h32v30H24zM24 0v-190h32V0H24" id="K"/><path fill="#3a414a" d="M177-190C167-65 218 103 67 71c-23-6-38-20-44-43l32-5c15 47 100 32 89-28v-30C133-14 115 1 83 1 29 1 15-40 15-95c0-56 16-97 71-98 29-1 48 16 59 35 1-10 0-23 2-32h30zM94-22c36 0 50-32 50-73 0-42-14-75-50-75-39 0-46 34-46 75s6 73 46 73" id="L"/><g id="c"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#G"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,19.691358024691358,0)" xlink:href="#H"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,32.03703703703704,0)" xlink:href="#I"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,43.14814814814815,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,55.49382716049383,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,66.60493827160494,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,77.71604938271605,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,82.5925925925926,0)" xlink:href="#B"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,94.93827160493828,0)" xlink:href="#L"/></g><path fill="#3a414a" d="M84 4C-5 8 30-112 23-190h32v120c0 31 7 50 39 49 72-2 45-101 50-169h31l1 190h-30c-1-10 1-25-2-33-11 22-28 36-60 37" id="M"/><path fill="#3a414a" d="M33-261c38 41 65 92 65 168S71 34 33 75H2C39 34 66-17 66-93S39-220 2-261h31" id="N"/><g id="d"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#M"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#B"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,24.691358024691358,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,29.5679012345679,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,35.74074074074074,0)" xlink:href="#N"/></g><path fill="#3a414a" d="M240 0l2-218c-23 76-54 145-80 218h-23L58-218 59 0H30v-248h44l77 211c21-75 51-140 76-211h43V0h-30" id="O"/><path fill="#3a414a" d="M210-169c-67 3-38 105-44 169h-31v-121c0-29-5-50-35-48C34-165 62-65 56 0H25l-1-190h30c1 10-1 24 2 32 10-44 99-50 107 0 11-21 27-35 58-36 85-2 47 119 55 194h-31v-121c0-29-5-49-35-48" id="P"/><path fill="#3a414a" d="M179-190L93 31C79 59 56 82 12 73V49c39 6 53-20 64-50L1-190h34L92-34l54-156h33" id="Q"/><g id="e"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#O"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,18.456790123456788,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,30.80246913580247,0)" xlink:href="#P"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,49.25925925925925,0)" xlink:href="#H"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,61.60493827160493,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,68.9506172839506,0)" xlink:href="#Q"/></g><path fill="#3a414a" d="M233-177c-1 41-23 64-60 70L243 0h-38l-65-103H63V0H30v-248c88 3 205-21 203 71zM63-129c60-2 137 13 137-47 0-61-80-42-137-45v92" id="R"/><g id="f"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#R"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,15.987654320987653,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,28.333333333333332,0)" xlink:href="#L"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,40.67901234567901,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,45.55555555555556,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,56.66666666666667,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,62.83950617283951,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,75.18518518518519,0)" xlink:href="#D"/></g><path fill="#3a414a" d="M115-194c53 0 69 39 70 98 0 66-23 100-70 100C84 3 66-7 56-30L54 0H23l1-261h32v101c10-23 28-34 59-34zm-8 174c40 0 45-34 45-75 0-40-5-75-45-74-42 0-51 32-51 76 0 43 10 73 51 73" id="S"/><path fill="#3a414a" d="M143 0L79-87 56-68V0H24v-261h32v163l83-92h37l-77 82L181 0h-38" id="T"/><g id="g"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#S"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#E"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,24.691358024691358,0)" xlink:href="#B"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,37.03703703703704,0)" xlink:href="#T"/></g><path fill="#3a414a" d="M205 0l-28-72H64L36 0H1l101-248h38L239 0h-34zm-38-99l-47-123c-12 45-31 82-46 123h93" id="U"/><path fill="#3a414a" d="M30 0v-248h33v221h125V0H30" id="V"/><g id="h"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#U"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,14.814814814814813,0)" xlink:href="#V"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,27.160493827160494,0)" xlink:href="#y"/></g><path fill="#3a414a" d="M106-169C34-169 62-67 57 0H25v-261h32l-1 103c12-21 28-36 61-36 89 0 53 116 60 194h-32v-121c2-32-8-49-39-48" id="W"/><path fill="#3a414a" d="M16-82v-28h88v28H16" id="X"/><g id="i"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,7.345679012345679,0)" xlink:href="#U"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,22.160493827160494,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,29.50617283950617,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,34.382716049382715,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,40.55555555555556,0)" xlink:href="#W"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,52.901234567901234,0)" xlink:href="#P"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,71.35802469135803,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,83.70370370370371,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,89.87654320987654,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,94.75308641975309,0)" xlink:href="#I"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,105.8641975308642,0)" xlink:href="#X"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,113.20987654320989,0)" xlink:href="#F"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,118.08641975308643,0)" xlink:href="#H"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,130.4320987654321,0)" xlink:href="#L"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,142.77777777777777,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,147.6543209876543,0)" xlink:href="#I"/></g><path fill="#333" d="M24-248c120-7 223 5 221 122C244-46 201 0 124 0H24v-248zM76-40c74 7 117-18 117-86 0-67-45-88-117-82v168" id="Y"/><path fill="#333" d="M133-34C117-15 103 5 69 4 32 3 11-16 11-54c-1-60 55-63 116-61 1-26-3-47-28-47-18 1-26 9-28 27l-52-2c7-38 36-58 82-57s74 22 75 68l1 82c-1 14 12 18 25 15v27c-30 8-71 5-69-32zm-48 3c29 0 43-24 42-57-32 0-66-3-65 30 0 17 8 27 23 27" id="Z"/><path fill="#333" d="M115-3C79 11 28 4 28-45v-112H4v-33h27l15-45h31v45h36v33H77v99c-1 23 16 31 38 25v30" id="aa"/><g id="j"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#Y"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,12.790123456790125,0)" xlink:href="#Z"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,22.66666666666667,0)" xlink:href="#aa"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,28.54320987654322,0)" xlink:href="#Z"/></g><path fill="#333" d="M135-194c52 0 70 43 70 98 0 56-19 99-73 100-30 1-46-15-58-35L72 0H24l1-261h50v104c11-23 29-37 60-37zM114-30c31 0 40-27 40-66 0-37-7-63-39-63s-41 28-41 65c0 36 8 64 40 64" id="ab"/><path fill="#333" d="M85 4C-2 5 27-109 22-190h50c7 57-23 150 33 157 60-5 35-97 40-157h50l1 190h-47c-2-12 1-28-3-38-12 25-28 42-61 42" id="ac"/><path fill="#333" d="M137-138c1-29-70-34-71-4 15 46 118 7 119 86 1 83-164 76-172 9l43-7c4 19 20 25 44 25 33 8 57-30 24-41C81-84 22-81 20-136c-2-80 154-74 161-7" id="ad"/><g id="k"><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,0,0)" xlink:href="#ab"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,10.814814814814815,0)" xlink:href="#ac"/><use transform="matrix(0.04938271604938272,0,0,0.04938271604938272,21.62962962962963,0)" xlink:href="#ad"/></g><g id="l"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#w"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,15.987654320987653,0)" xlink:href="#H"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,28.333333333333332,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,35.67901234567901,0)" xlink:href="#A"/></g><g id="m"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,11.11111111111111,0)" xlink:href="#Q"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,22.22222222222222,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,33.33333333333333,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,39.50617283950617,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,51.85185185185185,0)" xlink:href="#P"/></g><g id="n"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,14.814814814814813,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,27.160493827160494,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,34.50617283950617,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,39.382716049382715,0)" xlink:href="#G"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,51.72839506172839,0)" xlink:href="#W"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,64.07407407407408,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,76.41975308641976,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,83.76543209876544,0)" xlink:href="#E"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,96.11111111111113,0)" xlink:href="#F"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,100.98765432098767,0)" xlink:href="#J"/></g><path fill="#3a414a" d="M194 0L95-120 63-95V0H30v-248h33v124l119-124h40L117-140 236 0h-42" id="ae"/><path fill="#3a414a" d="M85-194c31 0 48 13 60 33l-1-100h32l1 261h-30c-2-10 0-23-3-31C134-8 116 4 85 4 32 4 16-35 15-94c0-66 23-100 70-100zm9 24c-40 0-46 34-46 75 0 40 6 74 45 74 42 0 51-32 51-76 0-42-9-74-50-73" id="af"/><g id="o"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#ae"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,14.814814814814813,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,27.160493827160494,0)" xlink:href="#Q"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,38.27160493827161,0)" xlink:href="#S"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,50.617283950617285,0)" xlink:href="#H"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,62.96296296296296,0)" xlink:href="#E"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,75.30864197530865,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,82.65432098765433,0)" xlink:href="#af"/></g><path fill="#3a414a" d="M127-220V0H93v-220H8v-28h204v28h-85" id="ag"/><g id="p"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#ag"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,13.518518518518517,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,28.33333333333333,0)" xlink:href="#y"/></g><path fill="#3a414a" d="M141 0L90-78 38 0H4l68-98-65-92h35l48 74 47-74h35l-64 92 68 98h-35" id="ah"/><g id="q"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,7.345679012345679,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,13.518518518518519,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,25.864197530864196,0)" xlink:href="#ah"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,36.9753086419753,0)" xlink:href="#C"/></g><g id="r"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#G"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,19.691358024691358,0)" xlink:href="#H"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,32.03703703703704,0)" xlink:href="#I"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,43.14814814814815,0)" xlink:href="#A"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,55.49382716049383,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,66.60493827160494,0)" xlink:href="#J"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,77.71604938271605,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,82.5925925925926,0)" xlink:href="#B"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,94.93827160493828,0)" xlink:href="#L"/></g><g id="s"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,14.814814814814813,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,29.629629629629626,0)" xlink:href="#y"/></g><g id="t"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,7.345679012345679,0)" xlink:href="#G"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,19.691358024691358,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,24.5679012345679,0)" xlink:href="#I"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,35.67901234567901,0)" xlink:href="#C"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,41.851851851851855,0)" xlink:href="#M"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,54.19753086419753,0)" xlink:href="#D"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,61.54320987654321,0)" xlink:href="#A"/></g><g id="u"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#U"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,14.814814814814813,0)" xlink:href="#x"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,29.629629629629626,0)" xlink:href="#y"/></g><g id="v"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#z"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,7.345679012345679,0)" xlink:href="#E"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,19.691358024691358,0)" xlink:href="#M"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,32.03703703703704,0)" xlink:href="#af"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,44.382716049382715,0)" xlink:href="#K"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,49.25925925925926,0)" xlink:href="#H"/></g></defs></g></svg>
\ No newline at end of file diff --git a/content/projects/ATK16.md b/content/projects/atk16/index.md index 204220d..4219b95 100644 --- a/content/projects/ATK16.md +++ b/content/projects/atk16/index.md @@ -54,7 +54,7 @@ extra: - a software emulator for running the built software on your development machine - a register transfer logic (RTL) model designed in [Digital](https://github.com/hneemann/Digital) capable of running the built software -{{ fig(src="/files/atk16-block-diagram.svg", alt="ATK16 block diagram") }} +{{ fig(src="block-diagram.svg", alt="ATK16 block diagram") }} The idea for the project hatched from my admiration for [Ben Eater](https://eater.net/) and his DIY CPU and video card projects. I was enamoured by the elegance of his systems and simply wanted to do something similar. I had none of the required knowledge for this kind of low-level CPU design work, but I had studied digital electronics for a bit in university. @@ -291,7 +291,7 @@ On startup, the _graphics mode_ memory register is set to disabled (0). To activ The TPU is a graphics processor that produces a 40 x 30 character VGA output signal. -{{ fig(src="/files/atk16-text-mode.png", alt="A screenshot of a text mode program displaying a work-in-progress hardware monitor") }} +{{ fig(src="text-mode.png", alt="A screenshot of a text mode program displaying a work-in-progress hardware monitor") }} The TPU has 3 major components: - The character memory (ROM) diff --git a/content/projects/atk16/text-mode.png b/content/projects/atk16/text-mode.png Binary files differnew file mode 100644 index 0000000..93c2752 --- /dev/null +++ b/content/projects/atk16/text-mode.png diff --git a/content/projects/diddle/diddle_screenshot.png b/content/projects/diddle/diddle_screenshot.png Binary files differnew file mode 100644 index 0000000..437567e --- /dev/null +++ b/content/projects/diddle/diddle_screenshot.png diff --git a/content/projects/diddle.md b/content/projects/diddle/index.md index 1fab603..7b51de5 100644 --- a/content/projects/diddle.md +++ b/content/projects/diddle/index.md @@ -13,7 +13,7 @@ Diddle ([live instance](https://diddle.jan.systems/), [Github](https://github.co > **Note**: The instance hosted on my domain might go down any second. Use it at your own discretion. -{{ fig(src="/files/diddle_screenshot.png", alt="Diddle screenshot showing an answerable poll") }} +{{ fig(src="diddle_screenshot.png", alt="Diddle screenshot showing an answerable poll") }} The first 80% of the project was done in two evenings. The last 80% was done during the next week. The tech stack is the _get-shit-done_ stack: **Python** + **Flask** + **PostgreSQL**. There is no required client side javascript: all client side logic is strictly for [progressive enhancement](https://developer.mozilla.org/en-US/docs/Glossary/Progressive_Enhancement). You can use "dumb" browsers like w3m or lynx to enjoy Diddle just fine. |
