Compare commits
28 Commits
3f60d7ae2a
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 5390d93515 | |||
| 2fa49051e0 | |||
| 112f76e340 | |||
| 9acf8cc77f | |||
| 4773d620bb | |||
| 68f67f5839 | |||
| 090dacdeba | |||
| f757c2ad7d | |||
| 31fe00f4ca | |||
| d45465219a | |||
| 52b0c22d59 | |||
| 655fd7d652 | |||
| 8dea0d1da1 | |||
| bc35c74688 | |||
| 0263c1de66 | |||
| 9327ca3a43 | |||
| f468cc68be | |||
| 9131507c48 | |||
| c00db0e9a2 | |||
| c62e907d32 | |||
| 0f49685d35 | |||
| b5d9cf97ca | |||
| 11caf98972 | |||
| f09b5861ba | |||
| ef7d74ef9a | |||
| c5a634f84d | |||
| 20e0a358d7 | |||
| 762dcd17ad |
@@ -29,6 +29,13 @@ export default {
|
||||
description:
|
||||
"Freethoughtblogs is an open platform for freethought writers. We are skeptics and critics of dogma and authoritarianism, and in addition, we recognize that the nonexistence of deities entails a greater commitment to human values, and in particular, an appreciation of human diversity and equality. We are for feminism, against racism, for diversity, against inequity. Our network of blogs is designed to encourage independent thinking and individual autonomy — freethoughtblogs.com is a vehicle for giving vocal secularists a venue for discussion of their values and interests.",
|
||||
},
|
||||
{
|
||||
title: "Hundred Rabbits",
|
||||
feedUrl: "https://100r.co/links/rss.xml",
|
||||
url: "https://100r.co/",
|
||||
description:
|
||||
"Hundred Rabbits is an artist collective that documents low-tech solutions with the hope of building a more resilient future. We live and work aboard a 10 m sailboat named Pino in remote parts of the world to learn more about how technology degrades beyond the shores of the western world.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -66,12 +73,6 @@ export default {
|
||||
description:
|
||||
"Adam Silver is a designer and frontend engineer from London, UK.",
|
||||
},
|
||||
{
|
||||
title: "Autumn Kotsiuba",
|
||||
feedUrl: "https://autumnkotsiuba.wixsite.com/portfolio/blog-feed.xml",
|
||||
url: "https://autumnkotsiuba.wixsite.com",
|
||||
description: "Autumn blogs about UX content design.",
|
||||
},
|
||||
{
|
||||
title: "Abduzeedo",
|
||||
feedUrl: "https://abduzeedo.com/rss.xml",
|
||||
@@ -239,13 +240,6 @@ export default {
|
||||
description:
|
||||
"This blog got started in 2006 on Xanga as an attempt to write down what I thought about the teas I was drinking. At that point I had been a serious tea drinker for at least six or seven years, but until then, I never really thought much about it. I thought that by writing down my thoughts, it would help me organize my ideas about tea, and in doing so, I hoped to reach an audience who were like minded tea drinkers. My hunch that there were a lot more tea drinkers out there in the West was right, and through this blog I have met quite a number of like-minded individuals, some of whom have become very good friends. I hope that, if nothing else, my musings here will help you find a better tea experience – life’s too short to be drinking bad tea.",
|
||||
},
|
||||
{
|
||||
title: "Cocktail Doodle",
|
||||
feedUrl: "https://cocktaildoodle.substack.com/feed",
|
||||
url: "https://cocktaildoodle.substack.com",
|
||||
description:
|
||||
"A charming (but perhaps abandoned) blog from cocktail expert Luke Andrews.",
|
||||
},
|
||||
{
|
||||
title: "Cwyn's Death by Tea",
|
||||
feedUrl: "https://deathbytea.blogspot.com/feeds/posts/default",
|
||||
@@ -369,12 +363,6 @@ export default {
|
||||
description:
|
||||
"Ayala Moriel Parfums is an independent artisan perfume house dedicated to the art of natural perfumery.",
|
||||
},
|
||||
{
|
||||
title: "A whiff of Ambrosia",
|
||||
feedUrl: "https://whiffofambrosia.wordpress.com/feed/",
|
||||
url: "https://whiffofambrosia.wordpress.com/",
|
||||
description: "Incense reviews and more. (Abandoned?)",
|
||||
},
|
||||
{
|
||||
title: "Dr. Incense",
|
||||
feedUrl: "https://dr-incense.com/blogs/dr-incense-blog.atom",
|
||||
@@ -420,7 +408,7 @@ export default {
|
||||
feedUrl: "https://www.kyarazen.com/feed/",
|
||||
url: "https://www.kyarazen.com/",
|
||||
description:
|
||||
"Very informative (but perhaps abandoned) blog from world-renowned incense maker KyaraZen.",
|
||||
"Very informative blog from world-renowned incense maker KyaraZen.",
|
||||
},
|
||||
{
|
||||
title: "Olfactory Rescue Service",
|
||||
@@ -442,19 +430,12 @@ export default {
|
||||
description:
|
||||
"Incense reviews and writing in German and English from incense maker, enthusiast, and industry insider Irene.",
|
||||
},
|
||||
{
|
||||
title: "Reed's Handmade Incense Blog",
|
||||
feedUrl: "https://reedshandmadeincense.com/blog/feed/",
|
||||
url: "https://reedshandmadeincense.com/blog/",
|
||||
description:
|
||||
"Writing on incense, tea, and other topics from the Reed's Handmade Incense web store.",
|
||||
},
|
||||
{
|
||||
title: "The Parfum Apothecary - Learning & Culture",
|
||||
feedUrl:
|
||||
"https://www.theparfumapothecary.com/blogs/learning-culture.atom",
|
||||
url: "https://www.theparfumapothecary.com/blogs/learning-culture",
|
||||
description: "Writing on perfume and its history. (Abandoned?)",
|
||||
description: "Writing on perfume and its history.",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -477,6 +458,18 @@ export default {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Literature",
|
||||
blogs: [
|
||||
{
|
||||
title: "Moist Poetry Journal",
|
||||
feedUrl: "https://moistpoetryjournal.com/feed/",
|
||||
url: "https://moistpoetryjournal.com",
|
||||
description:
|
||||
"Moist Poetry Journal was born at a poetry house party, where some poets got to talking about words that might cause an editor to immediately reject a poem. One of those words was “moist.” Now. There was a rejector and a defender of “moist” in the conversation, as there will always be, but it was decided that MOIST POETRY JOURNAL would be an ideal journal concept–a place for moist poems, for gendered and queer language, for language play that might not “be a good fit” for other journals.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "News: International",
|
||||
blogs: [
|
||||
@@ -580,13 +573,6 @@ export default {
|
||||
description:
|
||||
"Way back when blogs were called e-zines – the mid-90s – we made one called Bardo Burner… Sadly, our day-to-day lives got in the way of that labour of love and we jacked it in after a couple of years. Here we are again, reviving the old name just because, but this time primarily exploring issues related to healthy, sustainable living, which for us is strongly rooted in veganism… you’ll find articles here covering everything from cruelty-free cake and vegan restaurants to yoga and Pilates.",
|
||||
},
|
||||
{
|
||||
title: "Darek Kay",
|
||||
feedUrl: "https://darekkay.com/atom.xml",
|
||||
url: "https://darekkay.com",
|
||||
description:
|
||||
"Front-end developer and an accessibility advocate, currently working at IBM.",
|
||||
},
|
||||
{
|
||||
title: "Dom Corriveau",
|
||||
feedUrl: "https://blog.ctms.me/index.xml",
|
||||
@@ -600,19 +586,6 @@ export default {
|
||||
url: "https://www.wheresyoured.at/",
|
||||
description: " The Words of Ed Zitron, a PR person and writer.",
|
||||
},
|
||||
{
|
||||
title: "Ellie Kennard",
|
||||
feedUrl: "https://www.elliekennard.ca/feed",
|
||||
url: "https://www.elliekennard.ca",
|
||||
description: "Photography and thoughts in story form.",
|
||||
},
|
||||
{
|
||||
title: "Garbage Collector",
|
||||
feedUrl: "https://blog.zedas.fr/index.xml",
|
||||
url: "https://zedas.fr/",
|
||||
description:
|
||||
"The little space of a writer, tinkerer, and a coffee addict.",
|
||||
},
|
||||
{
|
||||
title: "Later On",
|
||||
feedUrl: "https://leisureguy.ca/rss",
|
||||
@@ -620,12 +593,6 @@ export default {
|
||||
description:
|
||||
"Writing on wet shaving, politics, whole food plant based diets, and more.",
|
||||
},
|
||||
{
|
||||
title: "Luke Andrews",
|
||||
feedUrl: "https://world.hey.com/lukeandrews/feed.atom",
|
||||
url: "https://world.hey.com/lukeandrews",
|
||||
description: "A sparse (abandoned?) blog from Luke Andrews.",
|
||||
},
|
||||
{
|
||||
title: "MediaActivist",
|
||||
feedUrl: "https://www.mediaactivist.com/rss/",
|
||||
@@ -640,13 +607,6 @@ export default {
|
||||
description:
|
||||
"Writing on tech and free / libre and open source philosophy.",
|
||||
},
|
||||
{
|
||||
title: "Rosnovsky Park",
|
||||
feedUrl: "https://rosnovsky.us/feed/feed.xml",
|
||||
url: "https://rosnovsky.us/",
|
||||
description:
|
||||
"Writing on web development, hiking, and random hobbies from the venerable benefactor, founder, and admin of the lounge.town Mastodon instance.",
|
||||
},
|
||||
{
|
||||
title: "Simone",
|
||||
feedUrl: "https://simone.org/rss",
|
||||
@@ -654,25 +614,19 @@ export default {
|
||||
description:
|
||||
"Explore modern life via thought-provoking essays, pictures, and conversations.",
|
||||
},
|
||||
{
|
||||
title: "Steven Kennard : Turned Art, Sculpture and Photography",
|
||||
feedUrl: "https://stevenkennard.com/blog/rss",
|
||||
url: "https://stevenkennard.com/blog",
|
||||
description:
|
||||
"Steven Kennard is a woodturner, sculptor and photographer living and working in Nova Scotia, Canada.",
|
||||
},
|
||||
{
|
||||
title: "Stories by Ellen Feinberg",
|
||||
feedUrl: "https://ellensusie59.medium.com/feed",
|
||||
url: "https://ellensusie59.medium.com",
|
||||
description: "Uptown Chicago gal. Irreverent/Irrelevant/Sarcastic.",
|
||||
},
|
||||
{
|
||||
title: "Thefoggiest.dev",
|
||||
feedUrl: "https://thefoggiest.dev/feed",
|
||||
url: "https://thefoggiest.dev",
|
||||
description: "The personal blog of Diederick de Vries of Amsterdam.",
|
||||
},
|
||||
{
|
||||
title: "ThinksTooMuch",
|
||||
feedUrl: "https://thinkstoomuch.net/index.xml",
|
||||
url: "https://thinkstoomuch.net/",
|
||||
description:
|
||||
"Thoughts on atheism, leftism, firearms, work, and life.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,4 +1,81 @@
|
||||
export default [
|
||||
{
|
||||
title: "Cooking",
|
||||
description: "Some stuff I've made in the kitchen.",
|
||||
synopsis: "Some stuff I've made in the kitchen.",
|
||||
url: "/img/gallery/food/",
|
||||
date: new Date("October 20, 2025"),
|
||||
galleryImage: "_DSC0036_compressed.webp",
|
||||
galleryImageAlt: "",
|
||||
pictures: [
|
||||
{
|
||||
title: "A batch of palmiers",
|
||||
filename: "_DSC0033_compressed.webp",
|
||||
altText:
|
||||
"Fifteen sugar-encrusted palmier pastries on a cooling rack atop a wooden table. The cookies are curled on both ends such that they resemble ears.",
|
||||
thumbAltText:
|
||||
"Fifteen sugar-encrusted palmier pastries on a cooling rack atop a wooden table. The cookies are curled on both ends such that they resemble ears.",
|
||||
caption:
|
||||
"2025-10-18 - Part of a batch of palmiers I made over the weekend; these crunchy, sugary little ears are quite possibly my favorite thing to make with a box of frozen puff pastry.",
|
||||
},
|
||||
{
|
||||
title: "Would you believe this is tofu?",
|
||||
filename: "double-frozen-silken-tofu.webp",
|
||||
altText:
|
||||
"What looks like seared sliced chicken breast on top of some greens next to some pickled beet slices.",
|
||||
thumbAltText:
|
||||
"What looks like seared sliced chicken breast on top of some greens next to some pickled beet slices.",
|
||||
caption:
|
||||
"2025-03-27 - This is what you get if you freeze and defrost silken tofu twice, press hard to drain all water, then sear in a pan.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Illustration",
|
||||
description:
|
||||
"I'm not much of an illustrator, but here are a few things I've done over the years.",
|
||||
synopsis:
|
||||
"I'm not much of an illustrator, but here are a few things I've done over the years.",
|
||||
url: "/img/gallery/illustration/",
|
||||
date: new Date("October 20, 2025"),
|
||||
galleryImage: "doodle.webp",
|
||||
galleryImageAlt: "",
|
||||
pictures: [
|
||||
{
|
||||
title: "Just a wee ice-cream doodle",
|
||||
filename: "doodle.webp",
|
||||
altText:
|
||||
"A rubber-hose doodle of an ice cream cone holding two mini ice-cream cones.",
|
||||
thumbAltText:
|
||||
"A rubber-hose doodle of an ice cream cone holding two mini ice-cream cones.",
|
||||
caption:
|
||||
"Doodled this one day and decided to do a vector trace for fun.",
|
||||
},
|
||||
{
|
||||
title: "A vector illustration of a vape",
|
||||
filename: "Evod Vector-01_white_copy.webp",
|
||||
altText: "A vector illustration of an old-school Evod vape pen.",
|
||||
thumbAltText: "A vector illustration of an old-school Evod vape pen.",
|
||||
caption:
|
||||
"I made this many years ago when vapes were just hitting the market for a website selling e-liquid. The site actually won Adobe Muse Site of the Day!",
|
||||
},
|
||||
{
|
||||
title: "A vector illustration of an empty e-liquid bottle",
|
||||
filename: "10MlBottleVector-08_copy.webp",
|
||||
altText: "A vector illustration of a 10ml e-liquid bottle.",
|
||||
thumbAltText: "A vector illustration of a 10ml e-liquid bottle.",
|
||||
caption: "I also made this for the aforementioned website.",
|
||||
},
|
||||
{
|
||||
title: "A vector illustration of a Sony Xperia Phone",
|
||||
filename: "sony illustration-01.webp",
|
||||
altText: "A vector illustration of an old-school Sony Xperia phone.",
|
||||
thumbAltText:
|
||||
"A vector illustration of an old-school Sony Xperia phone.",
|
||||
caption: "I made this just for fun. It took ages.",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Pop Tart Flavor Memes",
|
||||
description:
|
||||
@@ -360,4 +437,71 @@ export default [
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Shots on film",
|
||||
description: "Some random pictures I took on film years ago.",
|
||||
synopsis: "Some random pictures I took on film years ago.",
|
||||
url: "/img/gallery/film/",
|
||||
date: new Date("October 20, 2025"),
|
||||
galleryImage: "3.webp",
|
||||
galleryImageAlt: "",
|
||||
pictures: [
|
||||
{
|
||||
title: "Tat",
|
||||
filename: "1.webp",
|
||||
altText:
|
||||
"A not-very-good close-up of some oils, spices, and sauces on a kitchen counter.",
|
||||
thumbAltText:
|
||||
"A not-very-good close-up of some oils, spices, and sauces on a kitchen counter.",
|
||||
caption: "I do like to take pictures of random tat.",
|
||||
},
|
||||
{
|
||||
title: "A scented candle",
|
||||
filename: "2.webp",
|
||||
altText: "A scented candle on the corner of a table.",
|
||||
thumbAltText: "A scented candle on the corner of a table.",
|
||||
caption: "More tat.",
|
||||
},
|
||||
{
|
||||
title: "A pretty old camera",
|
||||
filename: "3.webp",
|
||||
altText: "A blurry Pentax camera.",
|
||||
thumbAltText: "A blurry Pentax camera.",
|
||||
caption:
|
||||
"Given to me, like the camera I am using to take the picture, by a photography friend years ago.",
|
||||
},
|
||||
{
|
||||
title: "Double exposure tat",
|
||||
filename: "4.webp",
|
||||
altText:
|
||||
"A double exposure of a carved wood incense burner in the shape of a man and a surreal silk painting.",
|
||||
thumbAltText:
|
||||
"A double exposure of a carved wood incense burner in the shape of a man and a surreal silk painting.",
|
||||
caption: "Is that a box of Satya in the background? Hard to say.",
|
||||
},
|
||||
{
|
||||
title: "Birds on pot",
|
||||
filename: "5.webp",
|
||||
altText: "Some bird silhouettes sat atop a chimney pot.",
|
||||
thumbAltText: "Some bird silhouettes sat atop a chimney pot.",
|
||||
caption: "Dare to resist pot.",
|
||||
},
|
||||
{
|
||||
title: "Streetlamp",
|
||||
filename: "6.webp",
|
||||
altText:
|
||||
"A streetlamp with snow on top, by some snowy trees, all in front of a stone building.",
|
||||
thumbAltText:
|
||||
"A streetlamp with snow on top, by some snowy trees, all in front of a stone building.",
|
||||
caption: "Pretty sure I took this through a window.",
|
||||
},
|
||||
{
|
||||
title: "The cutting edge",
|
||||
filename: "7.webp",
|
||||
altText: "A small electric paper guillotine.",
|
||||
thumbAltText: "A small electric paper guillotine.",
|
||||
caption: "Lost a fingernail to this thing once.",
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
export default {
|
||||
title: "Nathan Upchurch",
|
||||
logo: "/img/logo.svg",
|
||||
holidayLogo: "",
|
||||
url: "https://nathanupchurch.com/",
|
||||
language: "en",
|
||||
description:
|
||||
@@ -50,6 +51,11 @@ export default {
|
||||
linkDisplay: "Life Updates",
|
||||
linkURL: "/now/",
|
||||
},
|
||||
{
|
||||
iconURL: "/img/icons/breeze/link-symbolic.svg",
|
||||
linkDisplay: "Links",
|
||||
linkURL: "/links/",
|
||||
},
|
||||
{
|
||||
iconURL: "/img/burn.svg",
|
||||
linkDisplay: "Now Burning",
|
||||
@@ -106,7 +112,7 @@ export default {
|
||||
{
|
||||
title: "Keyoxide Identity Profile",
|
||||
linkURL: "https://keyoxide.org/31E809FAEA1532AC91BBDCF1EC499D3513F69340",
|
||||
linkDisplay: "Keyoxidee",
|
||||
linkDisplay: "Keyoxide",
|
||||
iconURL: "/img/keyoxide.svg",
|
||||
},
|
||||
{
|
||||
@@ -128,6 +134,12 @@ export default {
|
||||
linkDisplay: "Matrix",
|
||||
iconURL: "/img/matrix-org.svg",
|
||||
},
|
||||
{
|
||||
title: "Movim",
|
||||
linkURL: "https://xmpp.earth/blog/Nathan",
|
||||
linkDisplay: "Movim",
|
||||
iconURL: "/img/movim.svg",
|
||||
},
|
||||
{
|
||||
title: "PeerTube",
|
||||
linkURL: "https://makertube.net/a/nathan/video-channels",
|
||||
@@ -147,7 +159,20 @@ export default {
|
||||
linkDisplay: "Signal",
|
||||
iconURL: "/img/Signal-Logo-White.svg",
|
||||
},
|
||||
{
|
||||
title: "XMPP",
|
||||
linkURL: "xmpp:nathan_u@member.fsf.org",
|
||||
linkDisplay: "XMPP",
|
||||
iconURL: "/img/XMPP.svg",
|
||||
},
|
||||
{
|
||||
title: "WAFRN",
|
||||
linkURL: "https://app.wafrn.net/blog/nathan",
|
||||
linkDisplay: "WAFRN",
|
||||
iconURL: "/img/wafrn.svg",
|
||||
},
|
||||
],
|
||||
weatherSymbol: "🍁",
|
||||
webrings: [
|
||||
{
|
||||
name: "Fediring",
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
<footer>
|
||||
<a href="https://notbyai.fyi/">
|
||||
<img src="/img/written-by-human-not-by-ai-white.svg" alt="Written by humans, not by AI.">
|
||||
</a>
|
||||
|
||||
<p>{% if metadata.copyrightNotice %}<span class="copyright-notice">{{ metadata.copyrightNotice }}</span>{% endif %}
|
||||
|
||||
{% if metadata.webrings %}<br>
|
||||
@@ -15,6 +11,11 @@
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<a href="/sitemap/">Sitemap</a>
|
||||
<a href="/special/flying-toasters" style="color: var(--background-color); text-decoration: none;">Fly</a>
|
||||
</p>
|
||||
<div id="buttonsAndStuffContainer">
|
||||
<a href="https://notbyai.fyi/">
|
||||
<img src="/img/written-by-human-not-by-ai-white.svg" alt="Written by humans, not by AI.">
|
||||
</a>
|
||||
{% include "siteSettings.njk" %}
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<section class="postlist">
|
||||
<div class="postlist-item-container">
|
||||
{% for gallery in galleries | reverse %}
|
||||
{% for gallery in galleries %}
|
||||
{% if not numberOfGalleriesToShow or loop.index <= numberOfGalleriesToShow %}
|
||||
<article class="postlist-item">
|
||||
<a href="../gallery/{{ gallery.title | slugify }}" class="postlist-link">
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
class="home-link">
|
||||
<img
|
||||
class="logo"
|
||||
src="{{ metadata.logo }}"
|
||||
src="{% if metadata.holidayLogo %}{{ metadata.holidayLogo }}{% else %}{{ metadata.logo }}{% endif %}"
|
||||
alt="{{ metadata.title }}">
|
||||
</a>
|
||||
{% if not hideNav %}{% include "nav.njk" %}{% endif %}
|
||||
|
||||
@@ -16,5 +16,6 @@
|
||||
</section>
|
||||
</main>
|
||||
{% include "footer.njk" %}
|
||||
{% include "weather.njk" %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
16
_includes/siteSettings.njk
Normal file
@@ -0,0 +1,16 @@
|
||||
<style>
|
||||
#siteSettingsContainer {
|
||||
& button:not(#settingsDone) {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="siteSettingsContainer">
|
||||
<button onclick="siteSettings.showModal();">Site Settings</button>
|
||||
<dialog id="siteSettings">
|
||||
<h2>Site Settings</h2>
|
||||
{% include "weatherController.njk" %}
|
||||
<button id="settingsDone" onclick="siteSettings.close();">Done</button>
|
||||
</dialog>
|
||||
</div>
|
||||
173
_includes/weather.njk
Normal file
@@ -0,0 +1,173 @@
|
||||
<!-- weather -->
|
||||
<!-- Based on https://codepen.io/codeconvey/pen/xRzQay -->
|
||||
{# This include causes a symbol (text, emoji, et cetera; from metadata.weatherSymbol) to fall from the top of the viewport like snow. #}
|
||||
|
||||
<style>
|
||||
.fallingObject {
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
font-family: Arial;
|
||||
pointer-events: none;
|
||||
text-shadow: 0 0 1px #000;
|
||||
}
|
||||
@keyframes fallingObjects-fall {
|
||||
0% {
|
||||
top: -10%;
|
||||
}
|
||||
100% {
|
||||
top: 100%;
|
||||
}
|
||||
}
|
||||
@keyframes fallingObjects-shake {
|
||||
0% {
|
||||
transform: translateX(0px);
|
||||
}
|
||||
50% {
|
||||
transform: translateX(80px);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(0px);
|
||||
}
|
||||
}
|
||||
.fallingObject {
|
||||
position: fixed;
|
||||
top: -10%;
|
||||
z-index: 9999;
|
||||
user-select: none;
|
||||
cursor: default;
|
||||
animation-name: fallingObjects-fall, fallingObjects-shake;
|
||||
animation-duration: 10s, 3s;
|
||||
animation-timing-function: linear, ease-in-out;
|
||||
animation-iteration-count: infinite, infinite;
|
||||
animation-play-state: running, running;
|
||||
}
|
||||
.fallingObject:nth-of-type(0) {
|
||||
left: 1%;
|
||||
animation-delay: 0s, 0s;
|
||||
& > div {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(1) {
|
||||
left: 10%;
|
||||
animation-delay: 1s, 1s;
|
||||
& > div {
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(2) {
|
||||
left: 20%;
|
||||
animation-delay: 6s, 0.5s;
|
||||
& > div {
|
||||
transform: rotate(60deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(3) {
|
||||
left: 30%;
|
||||
animation-delay: 4s, 2s;
|
||||
& > div {
|
||||
transform: rotate(84deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(4) {
|
||||
left: 40%;
|
||||
animation-delay: 2s, 2s;
|
||||
& > div {
|
||||
transform: rotate(267deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(5) {
|
||||
left: 50%;
|
||||
animation-delay: 8s, 3s;
|
||||
& > div {
|
||||
transform: rotate(200deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(6) {
|
||||
left: 60%;
|
||||
animation-delay: 6s, 2s;
|
||||
& > div {
|
||||
transform: rotate(20deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(7) {
|
||||
left: 70%;
|
||||
animation-delay: 2.5s, 1s;
|
||||
& > div {
|
||||
transform: rotate(78deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(8) {
|
||||
left: 80%;
|
||||
animation-delay: 1s, 0s;
|
||||
& > div {
|
||||
transform: rotate(3120deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(9) {
|
||||
left: 90%;
|
||||
animation-delay: 3s, 1.5s;
|
||||
& > div {
|
||||
transform: rotate(123deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="fallingObjects" id="weather" aria-hidden="true">
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const weather = document.getElementById("weather");
|
||||
const weatherToggle = document.getElementById("weatherToggle");
|
||||
const weatherPreference = localStorage.getItem("weather");
|
||||
|
||||
// Initial weather preference check on page load
|
||||
if (weatherPreference == 0) {
|
||||
weather.classList.add("hidden");
|
||||
weatherToggle.checked = false;
|
||||
} else {
|
||||
weather.classList.remove("hidden");
|
||||
weatherToggle.checked = true;
|
||||
};
|
||||
|
||||
// Handle weather setting toggle
|
||||
weatherToggle.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
localStorage.setItem("weather", 1);
|
||||
weather.classList.remove("hidden");
|
||||
} else {
|
||||
localStorage.setItem("weather", 0);
|
||||
weather.classList.add("hidden");
|
||||
};
|
||||
});
|
||||
</script>
|
||||
<!-- /weather -->
|
||||
30
_includes/weatherController.njk
Normal file
@@ -0,0 +1,30 @@
|
||||
<style>
|
||||
#weatherController {
|
||||
color: var(--text-color);
|
||||
font-size: var(--step--2);
|
||||
font-variation-settings: var(--font-variation-ui);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: var(--ui-letter-spacing);
|
||||
font-family: var(--font-family-ui);
|
||||
& label {
|
||||
display: inline;
|
||||
}
|
||||
& input {
|
||||
accent-color: var(--contrast-color);
|
||||
background-color: var(--background-color);
|
||||
border: var(--border-details);
|
||||
border-color: var(--contrast-color);
|
||||
border-radius: var(--border-radius);
|
||||
color: var(--text-color);
|
||||
&:focus {
|
||||
box-shadow: 0 0 0 2px var(--contrast-color);
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<form id="weatherController">
|
||||
<input type="checkbox" id="weatherToggle" checked />
|
||||
<label for="weatherToggle">Show weather?</label>
|
||||
</form>
|
||||
24
content/blog/job-paranoia-am-i-getting-fired.md
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: "Job Paranoia: Is My Boss Out to Get Me?"
|
||||
description: "Some thoughts on understanding what actually gets people fired."
|
||||
date: 2025-11-14
|
||||
tags:
|
||||
- Quick Thoughts
|
||||
- Work
|
||||
synopsis: "Some thoughts on understanding what actually gets people fired."
|
||||
---
|
||||
I occasionally talk to people facing what I can best describe as job paranoia—the fear that their boss is out to get them, see them fired, et cetera. If you're someone who occasionally feels like this, as someone who has both hired and fired people, I'm here to offer some reassurance. Before we proceed—and I know you'll understand this intuitively because you have excellent reading comprehension—my description to come of certain hiring and management practices is not an endorsement of them.
|
||||
|
||||
In cases of exceptionally poor management, it surely happens that bosses occasionally develop some sort of personal vendetta against someone[^1] but, in these instances, the red flags will usually have been waving for some time. If your workplace seems to be relatively sanely run, however, in most cases management chiefly wants one thing out of you: reliability.
|
||||
|
||||
Getting hired and staying hired are two very different things. You might not have been the best candidate at all; it may be that you simply met some particular piece of the job description that someone far more skilled than you did not (such as a driver's license, even if it's not necessary for the role), and so the better candidate was removed from the pipeline simply because the company has to be able to claim that all candidates were judged by the same criteria (in order to avoid discrimination suits[^2]). Maybe you were hired because management thought your lack of experience would enable them to pay you less. Maybe management used "culture fit" as an excuse to hire you instead of a person who is BIPOC, LGBTQ+, disabled, or a member of some other group for which they harbor a bias against. Maybe your interviewer just thought you seemed especially affable. You will likely never know. All this to say that finding a good fit for a role in question is only one piece of the puzzle when a company decides who to hire.
|
||||
|
||||
Staying hired, however, is another matter (as is getting promoted). Once you're in a position, no one cares about your resume, credentials, experience, or schooling. The quality of your work isn't necessarily of much import either, so long as it meets a minimum standard. When a new hire is made, the principal concern of a busy manager is that they are not a nuisance. Do they show up on time? Can they work independently? Do they get along with others, or are they a frequent subject of complaints? Are they frequently making complaints themself? Can I assign a task to this person and expect them to just get on with it, or will I face a barrage of inane questions? Can this person work out how to use [insert simple software with drag and drop interface here] on their own, or are they going to need training for something others could suss out by clicking around for ten minutes? It's as simple as that. If management feels that you fit in nicely without any grinding or squeaking, you'll typically remain fitted[^3].
|
||||
|
||||
Hiring people and getting them up to speed is a pain that no one wants to go through; firing people makes that pain necessary. This is why people that may seem blisteringly incompetent to you manage to keep their jobs without issue: they simply don't generate sufficient friction for management such that it is worth the hassle of replacing them. These types aren't likely to be promoted either, but that's another matter.
|
||||
|
||||
So, if you find yourself wondering how likely you are to be escorted off the premises carrying a box of your belongings, here's a quick litmus test: How much time am I making management spend on me that could be spent on other tasks? Assuming all else is well, the lower the number, the safer you are.
|
||||
|
||||
[^1]: If you do find yourself in one of these scenarios, or in fact, if you find yourself facing any red flags at all from management, the best thing to do is start applying for other positions right away. This ought to alleviate some of your anxiety about the situation, helping prevent burnout from bad management.
|
||||
[^2]: This should not be taken as an indictment of DEI, nor a suggestion that certain groups of people are commonly hired regardless of their ability to perform a job (with the possible exception of white men).
|
||||
[^3]: Some astute readers may notice that a few of the previous points may disadvantage people with various disabilities. Unfortunately, this is true. If this is a concern for you, you may also benefit from taking measures to protect yourself such as requesting accommodations in writing for *documented* conditions that are *legally recognized as disabilities*, but this is beyond the scope of this post; dealing with these matters is a tricky path best undertaken with individual advice and support.
|
||||
245
content/blog/let-it-snow.md
Normal file
@@ -0,0 +1,245 @@
|
||||
---
|
||||
title: "Let it Snow: Adding a Falling-Snow Effect to Your Eleventy Website"
|
||||
description: As you can see, I'm getting my priorities in order. Here's how I added a falling-snow effect to my website.
|
||||
date: 2025-11-10
|
||||
tags:
|
||||
- Site Updates
|
||||
- Eleventy
|
||||
synopsis: As you can see, I'm getting my priorities in order. Here's how I added a falling-snow effect to my website.
|
||||
mastodon_id: "115528575840719665"
|
||||
---
|
||||
I'm pretty happy with the look and feel of my website but, looking around the indieweb, I see so many creative and fun websites with neat animations and interactive features. Reader, I was jealous; I wanted my website to be more fun. The [flying toasters](/special/flying-toasters) just weren't enough anymore. My first thought was to add a midi-player. I spent a few hours in a hyperfocus-hole digging up all sorts of fun midi tracks, from Kate Bush to Rammstein. I was *excited.* But reality hit me like a truck when I learned that HTML5 dropped support for midi files. This meant that it was either going to be a monumental pain in the arse to implement my midi payer, or I was going to have to rely on some pretty heavy [dependencies](https://github.com/cifkao/html-midi-player?tab=readme-ov-file#installing-from-npm). And look, I know typing `npm install blah` doesn't seem like a big deal to some folk but, where I can, I would really rather avoid summoning from the ether giant directories full of code that I don't understand for my little website. To add to that, provided you don't want your midi files played by some dead-simple synth sound, there's the business of soundfonts: gigabytes of audio samples from mysterious origins which you have to host yourself if you don't want [Google's servers](https://github.com/cifkao/html-midi-player?tab=readme-ov-file#soundfonts) tracking all of your visitors. At least one popular soundfont also seems to be a bit of a mystery; where does SGM Plus come from? No one seems to know. How is it licensed? I sure couldn't find an answer.
|
||||
|
||||
So, yea, I gave up on that idea and decided to implement a falling-snow effect instead. Here's how I did it.
|
||||
|
||||
## Humble beginnings
|
||||
I set out to look for an implementation with as little JavaScript as possible. I have nothing against JavaScript, but I figure it's best to try trimming your toenails with clippers before reaching for a chainsaw. The search led me to a codepen with [this HTML and CSS-only solution](https://codepen.io/codeconvey/pen/xRzQay). I tidied up the formatting, stripped out anything unnecessary, and put together my include, `_includes/weather.njk`:
|
||||
|
||||
{% raw %}
|
||||
``` html
|
||||
<!-- weather -->
|
||||
<!-- Based on https://codepen.io/codeconvey/pen/xRzQay -->
|
||||
{# This include causes a symbol (text, emoji, et cetera; from metadata.weatherSymbol) to fall from the top of the viewport like snow. #}
|
||||
|
||||
<style>
|
||||
.fallingObject {
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
font-family: Arial;
|
||||
pointer-events: none;
|
||||
text-shadow: 0 0 1px #000;
|
||||
}
|
||||
@keyframes fallingObjects-fall {
|
||||
0% {
|
||||
top: -10%;
|
||||
}
|
||||
100% {
|
||||
top: 100%;
|
||||
}
|
||||
}
|
||||
@keyframes fallingObjects-shake {
|
||||
0% {
|
||||
transform: translateX(0px);
|
||||
}
|
||||
50% {
|
||||
transform: translateX(80px);
|
||||
}
|
||||
100% {
|
||||
transform: translateX(0px);
|
||||
}
|
||||
}
|
||||
.fallingObject {
|
||||
position: fixed;
|
||||
top: -10%;
|
||||
z-index: 9999;
|
||||
user-select: none;
|
||||
cursor: default;
|
||||
animation-name: fallingObjects-fall, fallingObjects-shake;
|
||||
animation-duration: 10s, 3s;
|
||||
animation-timing-function: linear, ease-in-out;
|
||||
animation-iteration-count: infinite, infinite;
|
||||
animation-play-state: running, running;
|
||||
}
|
||||
.fallingObject:nth-of-type(0) {
|
||||
left: 1%;
|
||||
animation-delay: 0s, 0s;
|
||||
& > div {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(1) {
|
||||
left: 10%;
|
||||
animation-delay: 1s, 1s;
|
||||
& > div {
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(2) {
|
||||
left: 20%;
|
||||
animation-delay: 6s, 0.5s;
|
||||
& > div {
|
||||
transform: rotate(60deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(3) {
|
||||
left: 30%;
|
||||
animation-delay: 4s, 2s;
|
||||
& > div {
|
||||
transform: rotate(84deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(4) {
|
||||
left: 40%;
|
||||
animation-delay: 2s, 2s;
|
||||
& > div {
|
||||
transform: rotate(267deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(5) {
|
||||
left: 50%;
|
||||
animation-delay: 8s, 3s;
|
||||
& > div {
|
||||
transform: rotate(200deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(6) {
|
||||
left: 60%;
|
||||
animation-delay: 6s, 2s;
|
||||
& > div {
|
||||
transform: rotate(20deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(7) {
|
||||
left: 70%;
|
||||
animation-delay: 2.5s, 1s;
|
||||
& > div {
|
||||
transform: rotate(78deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(8) {
|
||||
left: 80%;
|
||||
animation-delay: 1s, 0s;
|
||||
& > div {
|
||||
transform: rotate(3120deg);
|
||||
}
|
||||
}
|
||||
.fallingObject:nth-of-type(9) {
|
||||
left: 90%;
|
||||
animation-delay: 3s, 1.5s;
|
||||
& > div {
|
||||
transform: rotate(123deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div class="fallingObjects" id="weather" aria-hidden="true">
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
<div class="fallingObject">
|
||||
<div>{{ metadata.weatherSymbol }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /weather -->
|
||||
```
|
||||
{% endraw %}
|
||||
I added this include in my base layout, after the footer, just before the the closing `</body>` tag. Beyond cleanup, I made the following changes:
|
||||
* I replaced the snowflakes in the example with {% raw %}`{{ metadata.weatherSymbol }}`{% endraw %} so that I can easily change the symbol that falls (that's right folks, this'll do more than just snowflakes!).
|
||||
* I added a random amount of rotation to each object.
|
||||
* I changed the class names from anything snowflake related because I'm a pedant.
|
||||
|
||||
Now all we need to do is make sure {% raw %}`{{ metadata.weatherSymbol }}`{% endraw %} exists and we should be cooking with gas. To `_data/metadata.js` I added: `weatherSymbol: "🍁",`; a falling leaf for autumn.
|
||||
|
||||
## Settings
|
||||
Now we have our ~~falling-snow~~ falling leaf effect working but, as with anything fun, there are going to be at least a few crabbit souls who will hate this. For them, let's implement a toggle. First, the toggle itself, in `_includes/weatherController.njk`:
|
||||
|
||||
``` html
|
||||
<form id="weatherController">
|
||||
<input type="checkbox" id="weatherToggle" checked />
|
||||
<label for="weatherToggle">Show weather?</label>
|
||||
</form>
|
||||
```
|
||||
|
||||
Second, a settings modal to hold the toggle, in `_includes/siteSettings.njk` (if the feature happens to be turned on at the moment you should be able to scroll down to the bottom of the page to see this in action):
|
||||
{% raw %}
|
||||
``` html
|
||||
<div id="siteSettingsContainer">
|
||||
<button onclick="siteSettings.showModal();">Site Settings</button>
|
||||
<dialog id="siteSettings">
|
||||
<h2>Site Settings</h2>
|
||||
{% include "weatherController.njk" %}
|
||||
<button id="settingsDone" onclick="siteSettings.close();">Done</button>
|
||||
</dialog>
|
||||
</div>
|
||||
```
|
||||
{% endraw %}
|
||||
Alright, now we just need to pop our site settings include into the site footer and wire everything up together.
|
||||
|
||||
## Wiring it all up
|
||||
Let's first add a quick rule to our CSS:
|
||||
``` CSS
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
```
|
||||
|
||||
Then we can work on our script. Let's add it to the bottom of our weather include, `_includes/weather.njk`, as it's positioned right before the closing `</body>` tag.
|
||||
|
||||
First, we'll check local storage to see if the user has set a preference before; if so, we'll add/remove the `.hidden` CSS rule to our weather element and update the weather-controller checkbox accordingly:
|
||||
|
||||
``` javascript
|
||||
<script>
|
||||
const weather = document.getElementById("weather");
|
||||
const weatherToggle = document.getElementById("weatherToggle");
|
||||
const weatherPreference = localStorage.getItem("weather");
|
||||
|
||||
// Initial weather preference check on page load
|
||||
if (weatherPreference == 0) {
|
||||
weather.classList.add("hidden");
|
||||
weatherToggle.checked = false;
|
||||
} else {
|
||||
weather.classList.remove("hidden");
|
||||
weatherToggle.checked = true;
|
||||
};
|
||||
```
|
||||
|
||||
Then, we'll create an event listener on the checkbox, which will add a value into local storage to save our visitor's preference and add/remove that CSS rule whenever a change to the checkbox value is detected:
|
||||
|
||||
``` javascript
|
||||
// Handle weather setting toggle
|
||||
weatherToggle.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
localStorage.setItem("weather", 1);
|
||||
weather.classList.remove("hidden");
|
||||
} else {
|
||||
localStorage.setItem("weather", 0);
|
||||
weather.classList.add("hidden");
|
||||
};
|
||||
});
|
||||
</script>
|
||||
```
|
||||
## Done!
|
||||
With that, we're done! We now have a "falling-snow" effect that can take any emoji (or arbitrary text) set in `_data/metadata.js`, and can be toggled on and off by the visitor whose preference is retained in local storage across sessions.
|
||||
@@ -29,7 +29,7 @@ The user-interface has been completely overhauled, with new icons, a proper wind
|
||||
|
||||
By highlighting these user-facing improvements in Scribus 1.7.0, I don't mean to diminish the tremendous work that has been done behind the scenes, not least the years of work getting Scribus ready to move to QT6. That work is important, but what excites me so much about this latest release is the change in direction it could represent for the project: these features are not the sort that would be imagined by developers and built for their personal convenience, these features clearly represent the needs of *designers*.
|
||||
|
||||
[](/img/scribus_splash.webp)
|
||||
[](/img/scribus_splash.webp)
|
||||
|
||||
Counterintuitively, this isn't a natural consequence of building software that might be used by design professionals. Take Inkscape, for example. There will be those in the project who see their work solely as creating a tool that implements the SVG specification; this is a fundamentally different point of view from that held by someone like [Martin Owens](https://www.youtube.com/@doctormo) who sees it as his job to create features that make Inkscape users happier, more productive, and to make Inkscape a tool that better suits their needs. This is where you get features like the shape builder tool, and upcoming CMYK support, both very much unnecessary if your goal for the project is a technical one, but critical tools for users who want to use the program in a professional setting where time is at a premium and output may be going to print.
|
||||
|
||||
|
||||
@@ -4,6 +4,24 @@ title: Nathan Upchurch | Changelog
|
||||
structuredData: none
|
||||
---
|
||||
# Changelog
|
||||
* 2025-11-12
|
||||
* Added [Milne Open Textbooks](https://milneopentextbooks.org/) to [/links](/links).
|
||||
* 2025-11-11
|
||||
* Updated [/links](/links).
|
||||
* 2025-11-9
|
||||
* Added [ThinksTooMuch](https://thinkstoomuch.net) to the [blogroll](/blogroll).
|
||||
* Updated [/incense](/incense).
|
||||
* Added snow / weather, and site settings button and dialog.
|
||||
* Added [/links](/links).
|
||||
* 2025-10-20
|
||||
* Added [Moist Poetry Journal](https://moistpoetryjournal.com) to the [blogroll](/blogroll).
|
||||
* Removed some less active and/or abandoned blogs from the [blogroll](/blogroll).
|
||||
* Updated [/wish](/wish).
|
||||
* Added a few [galleries](/galleries).
|
||||
* 2025-10-17
|
||||
* Updated [/me](/me) to include Movim, XMPP, and WAFRN.
|
||||
* 2025-10-07
|
||||
* Added [Hundred Rabbits](https://100r.co/) to the [blogroll](/blogroll).
|
||||
* 2025-10-01
|
||||
* Created [/incense](/incense).
|
||||
* Added "not by AI" badge.
|
||||
|
||||
@@ -55,6 +55,7 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
||||
### Other
|
||||
* [A list of archived URLs](https://web.archive.org/web/*/https://talesofincense.com/*) from a now-defunct site with some good information on Chinese incense.
|
||||
* [All of my writing on incense](/tags/incense/)
|
||||
* [Aromasublime Learning Center](https://www.aromasublime.com/news/category/key+articles++-+learning+center)—Articles on agarwood and agarwood oil.
|
||||
* [incensemakers.org](https://incensemakers.org/) is an invitation-only forum for relatively experienced incense makers. It is not incredibly active, but it does have a number of useful threads visible to non-members. If you are interested in joining, your best bet is to have an existing member you know personally get in touch with [me](/me) to provide a recommendation on your behalf.
|
||||
* See the [incense, fragrance, and perfumery section of my blogroll](/blogroll/#incense-fragrance-and-perfumery) for a list of blogs with writing on incense and related topics.
|
||||
|
||||
@@ -78,6 +79,7 @@ Incense making is hard. While parts of the world with strong incense cultures en
|
||||
* [Shoyeido Factory Works (YouTube)](https://www.youtube.com/watch?v=EQRxB4Gz-JM)
|
||||
* [The Frankincense Trail](https://www.imdb.com/title/tt2056414/)—Kate Humble follows the ancient frankincense trade route from Oman to Palestine. I have linked to the IMDB page, but this documentary series is well worth sailing the high seas for.
|
||||
* [*The Scent of Heaven: Inside Vietnam’s Incense Village* (YouTube)](https://www.youtube.com/watch?v=Wy8pDpIH31g)
|
||||
* [*'The Scent of Sakai' 堺の香り - Handmade incense stick craftsman* (YouTube)](https://www.youtube.com/watch?v=-4vOPSJYvX4)
|
||||
* [*Turf Peat Incense* (YouTube)](https://www.youtube.com/watch?v=4F7Xvdpq-GE)
|
||||
|
||||
## Reputable Suppliers of Aromatics
|
||||
|
||||
109
content/links/index.md
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
title: Nathan Upchurch | Links
|
||||
structuredData: none
|
||||
---
|
||||
|
||||
# Links
|
||||
Here are some links to pages and resources that I believe are worth sharing.
|
||||
## Design tools and resources
|
||||
### Education
|
||||
* [Butterick’s Practical Typography](https://practicaltypography.com/)
|
||||
### Reference
|
||||
* [Design Systems Gallery](https://designsystemsrepo.com/design-systems-recent/)
|
||||
### Software
|
||||
* [Converseen](https://converseen.fasterland.net/)—A Batch Image Converter and Resizer Tool for Windows, Linux and macOS
|
||||
* [darktable](https://www.darktable.org/)—An open source photography workflow application and raw developer
|
||||
* [digiKam](https://www.digikam.org/)—Open-source digital asset manager and image editor
|
||||
* [DisplayCAL](https://displaycal.net/)—Display Calibration and Characterization powered by ArgyllCMS
|
||||
* [G'MIC](https://gmic.eu/)—A Full-Featured Open-Source Framework for Image Processing
|
||||
* [Glaxnimate](https://glaxnimate.org/)—An open-source vector animation and motion design desktop application
|
||||
* [Inkscape](https://inkscape.org/)—A FLOSS vector graphics editor
|
||||
* [Krita](https://krita.org/en/)—A professional FLOSS painting and raster editing tool
|
||||
* [RawTherapee](https://www.rawtherapee.com/)—A free, cross-platform raw image processing program
|
||||
* [Scribus](https://www.scribus.net/)—The Go-To Libre Desktop Publishing Application
|
||||
### Stock graphics
|
||||
* [Artvee](https://artvee.com/)—Browse and download high-resolution, public domain paintings, posters and illustrations
|
||||
* [CocoMaterial](https://cocomaterial.com/)—The Open Source hand-drawn illustration library with 3,293 images
|
||||
* [Free and open source icons](https://www.toools.design/free-open-source-icon-libraries)
|
||||
* [Getty Search Gateway](https://search.getty.edu/gateway/search?q=&cat=type&r=%22Paintings%22&types=%22Paintings$Paintings%22&highlights=%22Open%20Content%20Images$Recent%20Acquisitions%22&rows=10&srt=a&dir=s&dsp=0&img=0&pg=1)
|
||||
* [Museo](https://museo.app/)—A visual search engine that connects you with the Art Institute of Chicago, the Rijksmuseum, the Harvard Art Museums, the Minneapolis Institute of Art, the The Cleveland Museum of Art, and the New York Public Library Digital Collection
|
||||
* [Pexels](https://www.pexels.com/)—The best free stock photos, royalty free images & videos shared by creators
|
||||
* [Pixabay](https://pixabay.com/)—Stunning royalty-free images & royalty-free stock
|
||||
* [Smithsonian Open Access](https://www.si.edu/openaccess)—Download, share, and reuse millions of the Smithsonian’s images
|
||||
### Typefaces
|
||||
* [Badass Libre Fonts By Womxn](https://www.design-research.be/by-womxn/)
|
||||
* [Collletttivo](https://www.collletttivo.it/)—An Open-Source type foundry and a network of people promoting the practice of type design through mutual exchange and collaboration
|
||||
* [coolLabs Fonts](https://fonts.coollabs.io/)—A privacy-friendly drop-in replacement for Google Fonts
|
||||
* [Cyreal](https://cyreal.org/info/)—A Libre/Opensource foundry with expertise in Latin and Cyrillic scripts
|
||||
* [Font Library](https://fontlibrary.org/en)
|
||||
* [FontCDN](https://thomaspark.co/projects/fontcdn/)—A search tool for Google fonts
|
||||
* [Fontsource](https://fontsource.org/)—An updating monorepo full of self-hostable Open Source fonts bundled into individual NPM packages
|
||||
* [Fontspace](https://www.fontspace.com/)—Free downloads of 150,000+ legally licensed fonts
|
||||
* [google-webfonts-helper](https://gwfh.mranftl.com/fonts)—A hassle-free way to self-host google fonts
|
||||
* [Use & Modify](https://usemodify.com/)—A personal selection of beautiful, classy, punk, professional, incomplete, weird typefaces
|
||||
* [Open Foundry](https://open-foundry.com/fonts)
|
||||
* [Open Source Publishing Foundry](https://osp.kitchen/foundry/)
|
||||
## Education
|
||||
### Code
|
||||
* [freeCodeCamp](https://www.freecodecamp.org/)—Advance your career by learning in-demand skills in Programming, DevOps, Cybersecurity, AI Engineering, and English for Developers
|
||||
### Credit-bearing courses and degrees
|
||||
* [saylor.org Academy](https://learn.saylor.org/)—Learn new skills or earn credit towards a degree using free courses from Saylor Academy
|
||||
* [Sophia Learning](https://www.sophia.org/)—Online college-level courses for $99 a month, designed to transfer to 100+ partner colleges, reviewed for credit at 1,000+ other colleges and universities
|
||||
* [University of The People](https://www.uopeople.edu/)—A tuition-free online university, accredited by WSCUC and DEAC
|
||||
### GNU/Linux
|
||||
* [KillerCoda](https://killercoda.com/)—Interactive environments for tech you study, teach or present
|
||||
* [Linux Upskill Challenge](https://linuxupskillchallenge.org/)—Learn the skills required to sysadmin a remote Linux server from the command line
|
||||
* [SadServers](https://sadservers.com/)—Master Linux & DevOps troubleshooting on live servers
|
||||
### Open Textbooks
|
||||
* [LibreTexts Commons](https://commons.libretexts.org/)—The LibreText Commons hosts curated Open Educational Resources from all 16 libraries in the LibreVerse in one convenient location
|
||||
* [Milne Open Textbooks](https://milneopentextbooks.org/)—Milne Library Publishing at SUNY Geneseo manages and maintains Milne Open Textbooks, a catalog of open textbooks authored and peer-reviewed by SUNY faculty and staff
|
||||
* [OER Commons](https://oercommons.org/)—A public digital library of open educational resources
|
||||
* [Open Textbook Library](https://open.umn.edu/opentextbooks/)—Now offering 1739 open textbooks, the Open Textbook Library is supported by the Open Education Network
|
||||
* [openstax](https://openstax.org/)—The world’s largest publisher of open education resources
|
||||
### Scots language
|
||||
* [OpenLearn Create Scots language and culture](https://www.open.edu/openlearncreate/course/index.php?categoryid=382)—This course teaches aspects of Scots, one of the three indigenous languages spoken in Scotland alongside English and Scottish Gaelic
|
||||
* [Scots Language Center](https://www.scotslanguage.com/pages/view/id/9)—Educational resources relating to the Scots language
|
||||
* [ScotsHoose Yaldi](https://www.scotshooseyaldi.com/)—Scots language learning and creativity resource for children, young people, teachers and parents
|
||||
|
||||
|
||||
## Eleventy resources
|
||||
* [11tyBundle](https://11tybundle.dev/)—Learn how others are making the most of 11ty, an exceptionally simple, flexible, and performant, open-source static site generator
|
||||
* [11tyCMS](https://11tycms.com/)—A local, serverless, dependable, and FLOSS CMS for websites made with Eleventy
|
||||
|
||||
## Free/libre software
|
||||
* [Free Software Foundation](https://fsf.org)—A nonprofit with a worldwide mission to promote computer user freedom
|
||||
* [GNU](https://gnu.org)—An operating system that is free software—that is, it respects users' freedom
|
||||
* [KDE](https://kde.org)—An international community developing the world’s finest free and open-source software
|
||||
|
||||
## Friendly Sites (Those not linked elsewhere on this site)
|
||||
* [Davey Dynamite](https://daveydynamite.neocities.org/)
|
||||
* [Mercury Retro](https://calam.us/)
|
||||
|
||||
## Indieweb: discovery
|
||||
* [blogroll.org](https://blogroll.org/)—Because blogs are the soul of the web
|
||||
* [blogs.hn](https://blogs.hn/)—A directory of tech sites, primarily sourced from HackerNews
|
||||
* [blogscroll.com](https://blogscroll.com/)—An open directory of personal sites and blogs
|
||||
* [Feedle](https://feedle.world/)—A search engine for blogs and podcasts
|
||||
* [indieblog.page](https://indieblog.page/)—Discover the indieweb
|
||||
* [Kagi Smallweb](https://kagi.com/smallweb/)
|
||||
* [Marginalia Search](https://marginalia-search.com/)—Search that prioritizes non-commercial content
|
||||
* [Mwmbl](https://mwmbl.org/)—A crowd-sourced search engine
|
||||
* [Mydora](https://mydora.restorativland.org/)—A continuous streaming player that gives you a deep dive into the lost archives of Myspace Music
|
||||
* [ooh.directory](https://ooh.directory/)—A collection of 2,358 blogs about every topic
|
||||
* [searchmysite.net](https://searchmysite.net/)—Search real content by real people from their personal websites
|
||||
|
||||
## Indieweb: resources
|
||||
* [90s Cursor Effects](https://tholman.com/cursor-effects/)
|
||||
* [blinkies.cafe](https://blinkies.cafe/)—Blinkie maker
|
||||
* [GIF Printer 2000](https://melonking.net/frames/pixelsea)
|
||||
* [GifCities](https://gifcities.org/)—The Geocities animated gif search from Internet Archive
|
||||
* [Gify Pet](https://melonking.net/frames/pet)
|
||||
* [Guestbooks](https://guestbooks.meadow.cafe/)
|
||||
* [Hit counters](https://www.websiteout.net/counter.php)
|
||||
* [Nekoweb](https://nekoweb.org/)—A free static website hosting service
|
||||
* [tamaNOTchi](https://tamanotchi.world/)
|
||||
|
||||
## Literature
|
||||
* [TypeLit.io](https://www.typelit.io/)—Test your typing online by practicing on your favorite literature
|
||||
* [Wee Windaes—A continuum o the Scots Leid](https://wee-windaes.nls.uk/)
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Awaji Island Koh-shi Coffee
|
||||
manufacturer: Kunjudo
|
||||
date: 2025-10-17 14:46:00
|
||||
time: 2:46 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Beau Soir
|
||||
manufacturer: Myself
|
||||
date: 2025-11-13 11:28:00
|
||||
time: 11:28 AM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Brunei Kinam
|
||||
manufacturer: Ensar Oud
|
||||
date: 2025-11-10 11:54:00
|
||||
time: 11:54 AM
|
||||
---
|
||||
Carrying on with the agarwood theme by putting a chip (sliver) on the heater.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Butterfly Spring Incense
|
||||
manufacturer: Lijiali
|
||||
date: 2025-10-28 12:07:00
|
||||
time: 12:07 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Cambodi AAA
|
||||
manufacturer: Agaroots
|
||||
date: 2025-11-11 15:45:00
|
||||
time: 3:45 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Green Kinam, AAA
|
||||
manufacturer: Yuzhi Oud
|
||||
date: 2025-11-03 11:41:00
|
||||
time: 11:41 AM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Jinko Daikoboku
|
||||
manufacturer: Seikado
|
||||
date: 2025-11-10 9:21:00
|
||||
time: 9:21 AM
|
||||
---
|
||||
The falling snow outside has put me in the mood for a spicy agarwood stick; this is just the ticket!
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Palo Santo
|
||||
manufacturer: Some random shop
|
||||
date: 2025-11-05 14:37:00
|
||||
time: 2:37 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Rammstein Räucherkerzen
|
||||
manufacturer: KNOX
|
||||
date: 2025-10-06 14:11:00
|
||||
time: 2:11 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Reiryokoh
|
||||
manufacturer: Kunmeido
|
||||
date: 2025-10-06 13:06:00
|
||||
time: 1:06 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Sandalwood
|
||||
manufacturer: hono
|
||||
date: 2025-10-09 16:47:00
|
||||
time: 4:47 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Some weird cedar, lavender, and orris composition I've been working on
|
||||
manufacturer: Myself
|
||||
date: 2025-11-03 9:33:00
|
||||
time: 9:33 AM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: Suzaku
|
||||
manufacturer: Gyokushodo
|
||||
date: 2025-10-07 15:29:00
|
||||
time: 3:29 PM
|
||||
---
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: White Cloud (Hakuun)
|
||||
manufacturer: Shoyeido
|
||||
date: 2025-10-16 13:49:00
|
||||
time: 1:49 PM
|
||||
---
|
||||
|
||||
@@ -9,44 +9,54 @@ structuredData: none
|
||||
This page is a list of wishes, a la [taylor.town/wish-manifesto](https://taylor.town/wish-manifesto), both tangible and intangible.
|
||||
|
||||
## On gifts
|
||||
If you're here looking for a gift idea for me, while I am always grateful that someone is thinking of me, when I look about me I get the impression that I don't really need more objects in the house to store, clean, and look after. When I decide to buy something myself, I do my best to be very intentional in choosing something that I feel will meet my needs perfectly, and will last as long as possible. Not only is this better for the environment, it helps me keep my life as simple and sustainable as possible, and frees me from the sense of obligation to return in kind, which I probably cannot afford to do.
|
||||
If you're here for gift ideas, thank you for thinking of me! While I am genuinely grateful for your consideration, when I look about me I get the impression that I don't really need more objects in the house to store, clean, and look after. For the sake of the environment, I try to reduce the amount of widgets I call into existence by paying for them (or having others pay for them on my behalf). I am also fortunate enough to be able to buy myself pretty much everything I need[^1], so please, rid yourself of any feeling of obligation whatsoever to buy me a gift!
|
||||
|
||||
If, however, *not* getting me a gift seems unconscionable, as best as I can determine, the non-consumable material items below all meet a need exactly and will last long into the future, making them perfect gifts.
|
||||
However if abstention seems unconscionable, I would be delighted if you were to make a charitable donation on my behalf; I would also happily receive any of the consumable items below.
|
||||
|
||||
If, like my mother, the non-consumable items below seem too boring to you to satisfy the gift-giving itch, I'd always be delighted to receive anything from the [tea](#Tea), [edible](#Edible), or [incense](#Incense) sections.
|
||||
## Tangible
|
||||
|
||||
## Charities
|
||||
* [Black Lives Matter](https://blacklivesmatter.com/)
|
||||
* [Howard Brown](https://howardbrown.org/) - Howard Brown provides free and sliding scale general health, sexual health and reproductive care, and counseling and support services in Chicago, with focus on care for the LGBTQ+ community.
|
||||
* [Northwest Side Solidarity Network](https://www.northwestsidesolidarity.com/) - A Chicago organization: "We work in solidarity with mutual aid groups throughout the city to ensure that all our neighbors have access to the resources that they need. Our work focuses on the Northwest side of the city, where we host a monthly free food-pop up with fresh produce, dairy, dried and canned goods."
|
||||
### Charitable donations
|
||||
* [Arch Linux](https://archlinux.org/) - Arch Linux is a lightweight and flexible GNU/Linux distribution that tries to Keep It Simple.
|
||||
* [Black Lives Matter (USA)](https://blacklivesmatter.com/)
|
||||
* [Free Software Foundation](https://www.fsf.org/) - The Free Software Foundation (FSF) is a nonprofit with a worldwide mission to promote computer user freedom.
|
||||
* [Howard Brown (Chicago, USA)](https://howardbrown.org/) - Howard Brown provides free and sliding scale general health, sexual health and reproductive care, and counseling and support services in Chicago, with focus on care for the LGBTQ+ community.
|
||||
* [Inkscape](https://inkscape.org/) - Inkscape is a free/libre and open source vector graphics editor for GNU/Linux, Windows and macOS.
|
||||
* [KDE](https://kde.org/) - "We are a community of technologists, designers, writers and advocates who work to ensure freedom for all people through our software."
|
||||
* [Krita](https://krita.org/en/) - Krita is a professional free/libre and open source painting program made by artists who want to see affordable art tools for everyone.
|
||||
* [National Immigrant Justice Center (USA, Midwest)](https://immigrantjustice.org/) - "The National Immigrant Justice Center (NIJC) defends the rights of immigrants, refugees, and asylum seekers."
|
||||
* [Northwest Side Solidarity Network (Chicago, USA)](https://www.northwestsidesolidarity.com/) - "We work in solidarity with mutual aid groups throughout the city to ensure that all our neighbors have access to the resources that they need. Our work focuses on the Northwest side of the city, where we host a monthly free food-pop up with fresh produce, dairy, dried and canned goods."
|
||||
* [Palestine Children's Relief Fund](https://www.pcrf.net/) - Provides free medical care to thousands of injured and ill children yearly who lack local access to care within the local health care system.
|
||||
* [Transactual](https://transactual.org.uk/) - A trans-led UK based organization working towards a world where trans people can live safely, in dignity and with access to the healthcare they need.
|
||||
* [Transactual (UK)](https://transactual.org.uk/) - A trans-led UK based organization working towards a world where trans people can live safely, in dignity and with access to the healthcare they need.
|
||||
* [Transgender Law Center (USA)](https://transgenderlawcenter.org/) - "Transgender Law Center is the largest national trans-led organization advocating self-determination for all people. Since 2002 we’ve been organizing, assisting, informing and empowering thousands of individual community members towards a long-term, national, trans-led movement for liberation."
|
||||
* [Trans Lifeline (USA)](https://translifeline.org/) - "Trans Lifeline provides trans peer support for our community that’s been divested from police since day one. We’re run by and for trans people."
|
||||
* [Zrythm](https://www.zrythm.org/en/index.html) - A highly automated and intuitive free/libre and open source digital audio workstation.
|
||||
|
||||
## Edible
|
||||
### Food
|
||||
* Vegan haggis - I just miss haggis, and I remember vegan / vegetarian haggis being quite good. I did make a batch of my own once with TVP and it was nice, but it took ages to make.
|
||||
* Vegan mooncakes from [Little Moon Bakehouse](https://littlemoonbakehouse.com/) with lotus paste and fake egg yolk!
|
||||
|
||||
## Incense
|
||||
### Incense
|
||||
* [Baieido Tokusen Kobunboku](https://kikohincense.com/collections/baieido-incense/products/tokusen-kobunboku)
|
||||
* [Inca Aromas White Breu](https://tarotarts.com/products/inca-aromas-all-natural-fair-trade-incense-white-breu-for-clarity-and-spirituality?variant=39838738251860)
|
||||
* [Kida Jinseido Ranjatai Incense](https://kikohincense.com/collections/kida-jinseido-incense-since-1937/products/kida-jinseido-ranjatai-incense)
|
||||
* [Minorien Kyara Fu-In](https://kikohincense.com/collections/minorien-incense-kikoh/products/minorien-kyara-fu-in-incense)
|
||||
* [Shoyeido Horin Assortment](https://shoyeido.com/products/horin-incense-assortment-sampler)
|
||||
* [Shoyeido Kohbai Pressed Incense](https://shoyeido.com/products/kohbai-red-plum-blossoms?variant=41714738921590)
|
||||
* [Shoyeido Kunro Incense Assortment](https://shoyeido.com/products/kunro-incense-assortment)
|
||||
* [Shoyeido Premium Incense Sampler](https://shoyeido.com/products/premium-incense-assortment-sampler)
|
||||
* [Tennendo Hagi Rose Incense](https://kikohincense.com/collections/tennendo-incense-kikoh/products/tennendo-hagi-rose-incense)
|
||||
* [Tennendo Hanano Byakudan](https://www.japanincense.com/tn-0051.html)
|
||||
* [Tennendo Kyara Incense](https://kikohincense.com/products/tennendo-kyara-incense)
|
||||
* [Tennendo Sumire Viotet Incense](https://kikohincense.com/products/tennendo-ysumire-violet-incense)
|
||||
* [Tennendo Sumire Violet Incense](https://kikohincense.com/products/tennendo-ysumire-violet-incense)
|
||||
|
||||
### Tea
|
||||
* A malty black tea from either [Spirit Tea](https://spirittea.co/) or [Yunnan Sourcing](https://yunnansourcing.com/).
|
||||
* A peachy white tea from either [Spirit Tea](https://spirittea.co/) or [Yunnan Sourcing](https://yunnansourcing.com/).
|
||||
* A savory oolong from from either [Spirit Tea](https://spirittea.co/) or [Yunnan Sourcing](https://yunnansourcing.com/).
|
||||
|
||||
## Incense making
|
||||
* [Oak moss](https://www.amazon.com/Oak-Moss-Herb-Natural-Prunastri/dp/B0B4KL6WSJ)
|
||||
* [Powdered ruffle lichen / dagad phool](https://www.amazon.com/dp/B0BYB8XVPZ/?psc=1)
|
||||
## Intangible
|
||||
|
||||
## Life
|
||||
* To advance my knowledge of mathematics.
|
||||
* To be able to direct and sustain my focus.
|
||||
### Life
|
||||
* To learn more math.
|
||||
* To be better able to listen and trust when people describe their challenges.
|
||||
* To become a very good programmer.
|
||||
* To be more patient.
|
||||
@@ -60,8 +70,7 @@ If, like my mother, the non-consumable items below seem too boring to you to sat
|
||||
* To no longer have to worry about money.
|
||||
* Warm hands and feet at all times.
|
||||
|
||||
|
||||
## Society
|
||||
### Society
|
||||
* Anyone who declares a war fights on the front lines.
|
||||
* Common ownership of public utilities and production facilities.
|
||||
* Equitable access to spaces and resources for everyone.
|
||||
@@ -72,7 +81,4 @@ If, like my mother, the non-consumable items below seem too boring to you to sat
|
||||
* For religion and any form of magical thinking to disappear in favor of basing beliefs on evidence and logic.
|
||||
* Healthcare, education, housing, and any resource necessary to sustain life to be free for all.
|
||||
|
||||
## Tea
|
||||
* A malty black tea from either [Spirit Tea](https://spirittea.co/) or [Yunnan Sourcing](https://yunnansourcing.com/).
|
||||
* A peachy white tea from either [Spirit Tea](https://spirittea.co/) or [Yunnan Sourcing](https://yunnansourcing.com/).
|
||||
* A savory oolong from from either [Spirit Tea](https://spirittea.co/) or [Yunnan Sourcing](https://yunnansourcing.com/).
|
||||
[^1]: Within reason—if you are filthy rich and would like to buy me a house or finance an escape to the UK for my partner and I, I'll not slap your hand away.
|
||||
|
||||
@@ -193,7 +193,6 @@ export default async function (eleventyConfig) {
|
||||
);
|
||||
|
||||
// Passthrough
|
||||
|
||||
eleventyConfig
|
||||
.addPassthroughCopy({ "./public/": "/" })
|
||||
.addPassthroughCopy("./content/special/");
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
"mdfigcaption": "^0.1.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"html-midi-player": "^1.6.0",
|
||||
"markdown-it-container": "^4.0.0",
|
||||
"markdown-it-footnote": "^3.0.3",
|
||||
"markdown-it-image-figures": "^2.1.1",
|
||||
|
||||
@@ -180,7 +180,10 @@ html {
|
||||
font-size: 13px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
input,
|
||||
input.answer {
|
||||
display: inline;
|
||||
}
|
||||
input:not(.answer):not(#weatherToggle),
|
||||
textarea {
|
||||
background-color: var(--background-color);
|
||||
border: var(--border-details);
|
||||
@@ -203,6 +206,9 @@ label {
|
||||
display: block;
|
||||
margin-bottom: var(--space-3xs);
|
||||
}
|
||||
.answerBox > label {
|
||||
display: inline;
|
||||
}
|
||||
article:not(.postlist-item) h3 {
|
||||
margin-bottom: var(--space-s);
|
||||
margin-top: var(--space-m);
|
||||
@@ -328,15 +334,17 @@ a {
|
||||
}
|
||||
footer {
|
||||
padding: var(--space-xl) 0 var(--space-m) 0;
|
||||
& p {
|
||||
font-size: var(--step-0);
|
||||
grid-column: var(--span-grid);
|
||||
margin-bottom: 0;
|
||||
}
|
||||
footer .webring {
|
||||
& .webring {
|
||||
display: inline;
|
||||
padding-right: var(--space-xs);
|
||||
}
|
||||
footer p {
|
||||
font-size: var(--step-0);
|
||||
grid-column: var(--span-grid);
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3 {
|
||||
@@ -596,9 +604,6 @@ pre:not([class*="language-"]) {
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
}
|
||||
code {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
/* Footnotes */
|
||||
.footnotes-list {
|
||||
@@ -1045,6 +1050,18 @@ article.post {
|
||||
margin: var(--space-2xs) auto;
|
||||
}
|
||||
}
|
||||
#buttonsAndStuffContainer {
|
||||
display: flex;
|
||||
grid-column: var(--span-grid);
|
||||
width: 100%;
|
||||
& a,
|
||||
img,
|
||||
div {
|
||||
display: inline-block;
|
||||
height: var(--space-m-l);
|
||||
margin-right: var(--space-3xs);
|
||||
}
|
||||
}
|
||||
.gallery-images {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
@@ -1182,3 +1199,6 @@ dialog {
|
||||
gap: var(--grid-gutter);
|
||||
grid-template-columns: repeat(var(--grid-columns), 1fr);
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
98
public/img/XMPP.svg
Normal file
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
viewBox="0 0 200 155.31216"
|
||||
width="200"
|
||||
height="155.31216"
|
||||
x="0px"
|
||||
y="0px"
|
||||
enable-background="new 0 0 200 200"
|
||||
id="svg15"
|
||||
sodipodi:docname="XMPP_logo.svg"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs15" /><sodipodi:namedview
|
||||
id="namedview15"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="2.8284271"
|
||||
inkscape:cx="151.85118"
|
||||
inkscape:cy="74.422988"
|
||||
inkscape:window-width="2048"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg15" />
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_right_"
|
||||
y2="1.279e-13"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1073.2"
|
||||
gradientTransform="translate(1196.604,15.368977)"
|
||||
y1="126.85"
|
||||
x1="-1073.2">
|
||||
<stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop1" />
|
||||
<stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop2" />
|
||||
<stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop3" />
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_left_"
|
||||
y2="1.279e-13"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x2="-1073.2"
|
||||
gradientTransform="matrix(-1,0,0,1,-994.78801,15.367977)"
|
||||
y1="126.85"
|
||||
x1="-1073.2">
|
||||
<stop
|
||||
stop-color="#1b3967"
|
||||
offset=".011"
|
||||
id="stop4" />
|
||||
<stop
|
||||
stop-color="#13b5ea"
|
||||
offset=".467"
|
||||
id="stop5" />
|
||||
<stop
|
||||
stop-color="#002b5c"
|
||||
offset=".9945"
|
||||
id="stop6" />
|
||||
</linearGradient>
|
||||
|
||||
<path
|
||||
d="m 13.416016,15.369141 c 1.063243,41.579163 35.393257,84.758949 76.544921,108.597659 -9.498333,7.49537 -20.257802,13.19524 -31.99414,16.15039 v 0.82617 c -0.01001,0.003 -0.02126,0.003 -0.03125,0.006 v 1.63867 c 12.526661,-1.06734 24.339516,-4.37227 35.210937,-9.3418 2.600598,-1.07628 5.188699,-2.23765 7.761716,-3.47656 2.57234,1.23854 5.16182,2.39862 7.76172,3.47461 10.87142,4.96952 22.68429,8.27641 35.21094,9.34375 v -1.63867 c -0.01,-0.003 -0.0212,-0.005 -0.0312,-0.008 v -0.82422 c -11.73573,-2.955 -22.49617,-8.65559 -31.99414,-16.15039 41.15101,-23.83889 75.48169,-67.018989 76.54492,-108.597659 l -24.70508,9.578125 -0.004,0.0039 -0.082,0.0293 -7.48828,2.677734 -22.44531,6.640625 -0.002,0.002 c 0.076,1.313 0.11914,2.630032 0.11914,3.957031 0,24.446055 -12.3446,54.279487 -32.88477,75.734378 C 80.367456,92.537226 68.023437,62.704246 68.023437,38.257812 c 0,-1.327 0.04314,-2.644031 0.119141,-3.957031 l -0.002,-0.002 -22.460938,-6.648437 -7.472656,-2.669922 -0.08203,-0.0293 -0.0059,-0.0039 z M 101.46484,129.50195 c 4.53066,2.47064 9.23048,4.62545 14.07618,6.41407 -0.62516,-0.23017 -1.24706,-0.46618 -1.86719,-0.70899 -4.18807,-1.63984 -8.26246,-3.55298 -12.20899,-5.70508 z"
|
||||
style="opacity:1;fill:#faf5f5"
|
||||
id="path15" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
BIN
public/img/gallery/film/1.webp
Normal file
|
After Width: | Height: | Size: 234 KiB |
BIN
public/img/gallery/film/2.webp
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
public/img/gallery/film/3.webp
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
public/img/gallery/film/4.webp
Normal file
|
After Width: | Height: | Size: 232 KiB |
BIN
public/img/gallery/film/5.webp
Normal file
|
After Width: | Height: | Size: 233 KiB |
BIN
public/img/gallery/film/6.webp
Normal file
|
After Width: | Height: | Size: 308 KiB |
BIN
public/img/gallery/film/7.webp
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
public/img/gallery/food/_DSC0033_compressed.webp
Normal file
|
After Width: | Height: | Size: 532 KiB |
BIN
public/img/gallery/food/_DSC0036_compressed.webp
Normal file
|
After Width: | Height: | Size: 342 KiB |
BIN
public/img/gallery/food/double-frozen-silken-tofu.webp
Normal file
|
After Width: | Height: | Size: 284 KiB |
BIN
public/img/gallery/illustration/10MlBottleVector-08_copy.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/img/gallery/illustration/10MlBottleVector-08_copy.webp~
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
public/img/gallery/illustration/Evod Vector-01_white_copy.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/img/gallery/illustration/Evod Vector-01_white_copy.webp~
Normal file
|
After Width: | Height: | Size: 31 KiB |
1
public/img/gallery/illustration/doodle.webp
Symbolic link
@@ -0,0 +1 @@
|
||||
/home/n_u/Repos/nathanupchurch.com/public/img/doodle.webp
|
||||
BIN
public/img/gallery/illustration/sony illustration-01.webp
Normal file
|
After Width: | Height: | Size: 22 KiB |
42
public/img/icons/breeze/link-symbolic.svg
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="link-symbolic.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="40.349281"
|
||||
inkscape:cx="7.360726"
|
||||
inkscape:cy="7.6705209"
|
||||
inkscape:window-width="2048"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" /><defs
|
||||
id="defs3051"><style
|
||||
type="text/css"
|
||||
id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style><style
|
||||
type="text/css"
|
||||
id="current-color-scheme-0">.ColorScheme-Text { color: #fcfcfc; } </style></defs><g
|
||||
transform="translate(-3,-1033.3622)"
|
||||
id="g1"
|
||||
style="fill:#faf5f5;fill-opacity:1"><path
|
||||
style="fill:#faf5f5;fill-opacity:1;stroke:none"
|
||||
d="M 4,7 C 3.4459904,7 3,7.4459904 3,8 l 0,6 c 0,0.55401 0.4459904,1 1,1 l 5,0 c 0.55401,0 1,-0.44599 1,-1 l 0,-1 2,0 0,1 c 0,0.554 0.44599,1 1,1 l 5,0 c 0.55401,0 1,-0.446 1,-1 L 19,8 C 19,7.446 18.55401,7 18,7 l -5,0 c -0.55401,0 -1,0.446 -1,1 l 0,1 -2,0 0,-1 C 10,7.4459904 9.55401,7 9,7 Z M 4,8 7,8 9,8 9,9 C 8.4459904,9 8,9.4459904 8,10 l 0,2 c 0,0.55401 0.4459904,1 1,1 l 0,1 -2,0 -3,0 z m 9,0 3,0 2,0 0,6 -2,0 -3,0 0,-1 c 0.55401,0 1,-0.44599 1,-1 l 0,-2 C 14,9.4459904 13.55401,9 13,9 Z m -4,2 4,0 0,2 -4,0 z"
|
||||
transform="translate(0,1030.3622)"
|
||||
id="rect4161"
|
||||
class="ColorScheme-Text" /></g></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
41
public/img/icons/breeze/story-editor.svg
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 16 16"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="story-editor.svg"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="57.0625"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-width="2048"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1" />
|
||||
<defs
|
||||
id="defs3051">
|
||||
<style
|
||||
type="text/css"
|
||||
id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:#faf5f5;fill-opacity:1;stroke:none"
|
||||
d="M 3 2 L 3 14 L 7 14 L 7 13 L 4 13 L 4 5 L 12 5 L 12 7 L 13 7 L 13 2 L 12 2 L 12 4 L 11 4 L 11 2 L 5 2 L 5 4 L 4 4 L 4 2 L 3 2 z M 5 6 L 5 7 L 11 7 L 11 6 L 5 6 z M 5 8 L 5 9 L 8 9 L 8 8 L 5 8 z M 12 8 L 8 12 L 8 14 L 10 14 L 14 10 L 12 8 z M 11.689453 9.6894531 L 12.28125 10.28125 L 10.59375 11.96875 L 10.59375 11.984375 L 9.3125 13.28125 L 8.71875 12.6875 L 11.689453 9.6894531 z M 5 10 L 5 11 L 7 11 L 7 10 L 5 10 z "
|
||||
class="ColorScheme-Text"
|
||||
id="path1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
87
public/img/movim.svg
Normal file
@@ -0,0 +1,87 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
viewBox="0 0 240 240"
|
||||
id="svg23"
|
||||
sodipodi:docname="movim.svg"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
inkscape:export-filename="/var/www/html/movim/public/theme/img/app/512.png"
|
||||
inkscape:export-xdpi="204.8"
|
||||
inkscape:export-ydpi="204.8"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview25"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:pageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.08"
|
||||
inkscape:cx="119.95192"
|
||||
inkscape:cy="120.43269"
|
||||
inkscape:window-width="1023"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg23"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<defs
|
||||
id="defs15">
|
||||
<filter
|
||||
id="c"
|
||||
x="-0.14247762"
|
||||
y="-0.24434544"
|
||||
width="1.2849552"
|
||||
height="1.4886909">
|
||||
<feGaussianBlur
|
||||
stdDeviation="10.686"
|
||||
id="feGaussianBlur2" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="b"
|
||||
x1="40"
|
||||
x2="200"
|
||||
y1="40"
|
||||
y2="200"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
stop-color="#345cca"
|
||||
offset="0"
|
||||
id="stop5"
|
||||
style="stop-color:#5452c9;stop-opacity:1" />
|
||||
<stop
|
||||
stop-color="#5d47c6"
|
||||
offset="1"
|
||||
id="stop7"
|
||||
style="stop-color:#413fb5;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="a"
|
||||
x1="125"
|
||||
x2="174.95"
|
||||
y1="65"
|
||||
y2="210.1"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
stop-color="#344394"
|
||||
offset="0"
|
||||
id="stop10" />
|
||||
<stop
|
||||
stop-color="#7c45df"
|
||||
offset="1"
|
||||
id="stop12"
|
||||
style="stop-color:#5553be;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path
|
||||
d="M 120,10 A 110,110 0 0 0 10,120 110,110 0 0 0 120,230 110,110 0 0 0 230,120 110,110 0 0 0 120,10 Z m -18.41211,63.349609 c 0,0 0.002,0 0.002,0 11.82018,6.94e-4 22.18515,6.215609 28.01563,15.554688 4.3039,-2.0562 9.12664,-3.216797 14.21484,-3.216797 18.231,0 33.01172,14.77877 33.01172,33.00977 0,0.5838 -0.0328,1.15808 -0.0625,1.73437 0.0411,-2.2e-4 0.0814,0 0.12305,0 12.762,0 23.10937,10.34542 23.10937,23.10742 0,12.762 -10.34737,23.10742 -23.10937,23.10742 H 68.0625 c -15.496,0 -28.058594,-12.56159 -28.058594,-28.05859 0,-15.497 12.561594,-28.05868 28.058594,-28.05859 0.26291,0 0.524046,0.0115 0.785156,0.0195 -0.17319,-1.3699 -0.269531,-2.7706 -0.269531,-4.1875 0,-18.230344 14.778673,-33.010654 33.009765,-33.011721 z"
|
||||
style="fill:#faf5f5;stroke:none;stroke-width:3;fill-opacity:1"
|
||||
id="path1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
43
public/img/wafrn.svg
Normal file
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="17.795429mm"
|
||||
height="13.810178mm"
|
||||
viewBox="0 0 17.795429 13.810178"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xml:space="preserve"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
sodipodi:docname="wafrn.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="4.6009954"
|
||||
inkscape:cx="36.187821"
|
||||
inkscape:cy="32.927657"
|
||||
inkscape:window-width="2048"
|
||||
inkscape:window-height="1080"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-16.598227,-5.9097361)"><path
|
||||
style="fill:#faf5f5;stroke-width:5.98699;stroke-linecap:square;paint-order:stroke markers fill"
|
||||
d="m 16.851755,7.5262065 c -0.324821,0.187534 -0.323387,0.436017 -0.07624,0.864081 0.247142,0.428064 4.578865,10.6751685 4.721949,10.9229985 0.143085,0.24784 0.249058,0.40663 0.604856,0.40663 0.355799,0 2.369921,-0.0116 2.622741,-0.15757 0.252823,-0.14596 0.396462,-0.47778 0.66077,-1.13855 0.264306,-0.66077 0.919991,-2.96837 0.919991,-2.96837 0,0 1.064154,3.4146 1.179219,3.61389 0.115062,0.19929 0.188063,0.35072 0.426955,0.35072 0.238895,0 2.416687,0.0243 2.714234,-0.14741 0.297545,-0.17179 0.858125,-0.64079 2.00824,-4.17739 1.150112,-3.536597 1.914591,-8.0083075 1.732359,-8.3239445 -0.182234,-0.315635 -0.445669,-0.294717 -1.617347,-0.524737 -1.171678,-0.230024 -1.717982,-0.416918 -1.876124,-0.301906 -0.158141,0.115012 -1.530225,7.7964985 -2.005509,7.7992055 -0.306689,0.0017 -0.984786,-4.6471765 -1.44483,-4.9347045 -0.460047,-0.287528 -2.77387,-0.177489 -3.108901,0.230022 -0.477958,0.58136 -0.305498,4.9059535 -0.664908,4.8196945 -0.359413,-0.08626 -2.384413,-7.3015685 -3.493472,-7.4182315 -0.62019,-0.06524 -3.303981,1.085572 -3.303981,1.085572 z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="sssssscsscssssssssscs" /></g></svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |