Compare commits

..

3 Commits

Author SHA1 Message Date
87fa41f2ac Get rid of web components 2025-11-21 17:56:20 -06:00
3e24bb336a Add masto id 2025-11-21 17:56:04 -06:00
69d97852a8 now burning entries 2025-11-21 17:55:44 -06:00
15 changed files with 95 additions and 460 deletions

View File

@@ -6,6 +6,7 @@ tags:
- Quick Thoughts - Quick Thoughts
- Work - Work
synopsis: "Some thoughts on understanding what actually gets people fired." synopsis: "Some thoughts on understanding what actually gets people fired."
mastodon_id: "115549540413041782"
--- ---
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. 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.

View File

@@ -0,0 +1,7 @@
---
title: Golden Pavillion (Kinkaku)
manufacturer: Shoyeido
date: 2025-11-18 14:22:00
time: 2:22 PM
---
A perfect stick for this time of year. Thanks Irene!

View File

@@ -0,0 +1,7 @@
---
title: Orange Blossom
manufacturer: The Mothers Fragrances
date: 2025-11-19 10:29:00
time: 10:29 AM
---

View File

@@ -0,0 +1,7 @@
---
title: Patchouli
manufacturer: The Mothers Fragrances
date: 2025-11-18 18:38:00
time: 6:38 PM
---

View File

@@ -0,0 +1,7 @@
---
title: Premium Agarwood
manufacturer: Asayu
date: 2025-11-20 15:16:00
time: 3:16 PM
---

View File

@@ -0,0 +1,7 @@
---
title: Sandalwood
manufacturer: Vajra
date: 2025-11-18 17:40:00
time: 5:40 PM
---
Some of the better rope incense I've tried to date. Gentle woody and burning paper notes.

View File

@@ -0,0 +1,7 @@
---
title: Shirohato
manufacturer: Kyukyodo
date: 2025-11-19 12:02:00
time: 12:02 PM
---

View File

@@ -0,0 +1,7 @@
---
title: Texas Red Cedar
manufacturer: The World Makes Scents
date: 2025-11-17 10:34:00
time: 10:34 AM
---

View File

@@ -117,77 +117,22 @@ export default async function (eleventyConfig) {
}); });
// Shortcodes // Shortcodes
// Audio player
// Cowsay
eleventyConfig.addFilter("cowsay", (cowText) => {
const cowCaptionReplacementTable = [
[
`
o ^__^
o (oo)\\_______
(__)\\ )\\/\\
||----w |
|| ||`,
"",
],
[/\(\s+/g, ""],
[/\s+\(/g, ""],
[/_{3,}/g, ""],
[/-{3,}/g, ""],
[/\s\)/g, ""],
[/\n/g, ""],
[/\s{2,}/g, " "],
[/^ /, ""],
];
return `
<figure>
<pre class="language-" role="img" aria-label="ASCII COW">${cowText}</pre>
<figcaption id="cow-caption">
A cow thinking: <em>${multiReplace(cowText, cowCaptionReplacementTable)}</em>. The cow is illustrated using
preformatted text characters.
</figcaption>
</figure>
`;
});
// Embed a toot
eleventyConfig.addAsyncShortcode("toot", async function (instance, ID) {
const tootData = await fetch(`https://${instance}/api/v1/statuses/${ID}`);
const toot = await tootData.json();
const dateObj = new Date(toot.created_at);
const dateTime = `${dateObj.getDate()}${dateSuffixAdder(dateObj.getDate())} of ${monthMap[dateObj.getMonth()]}, ${dateObj.getFullYear()}, at ${timeFormatter(dateObj.getHours(), dateObj.getMinutes())}`;
return `
<wc-toot
author_name="${toot.account.display_name}"
author_url="${toot.url.replace(/\/[0-9]+/, "")}"
author_username="${toot.account.username}"
avatar_url="${toot.account.avatar_static}"
toot_content="${toot.content}"
toot_url="${toot.url}"
publish_date="${dateTime}"
sharp_corner="">
</wc-toot>
`;
});
// Embed audio
eleventyConfig.addShortcode( eleventyConfig.addShortcode(
"audio", "audio",
function (title, artist, media_url, cover_url) { function (title, artist, media_url, cover_url) {
return ` return `
<wc-card> <figure class="mplayer">
<wc-mplayer <div class="coverContainer">
title="${title}" <img src="${cover_url}" class="albumCover">
artist="${artist}" </div>
media_url="${media_url}" <div class="captionAndPlayer">
cover_url="${cover_url}" <figcaption class="mplayerInfo">
/> <span class="songTitle">${title}</span><br /><span class="artist">${artist}</span>
</wc-card> </figcaption>
<audio controls src="${media_url}" class="player"></audio>
</div>
</figure>
`; `;
}, },
); );

View File

@@ -127,18 +127,6 @@
/* Shadow */ /* Shadow */
--box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); --box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
/* Web Component Tokens */
--wc-card-background-color: var(--card-color);
--wc-card-border-radius: var(--border-radius);
--wc-card-margin: 0 0 var(--space-s) 0;
--wc-card-box-shadow: var(--box-shadow);
--wc-link-color: var(--text-color);
--wc-link-decoration-color: var(--contrast-color);
--wc-link-decoration-thickness: var(--link-decoration-thickness);
--wc-comment-text-margin: var(--space-xs) 0 0 0;
--wc-profile-pic-size: var(--space-l);
--wc-profile-pic-border-radius: 10rem;
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
@@ -438,7 +426,7 @@ body.barebones {
text-align: center; text-align: center;
} }
figcaption { figcaption:not(.mplayerInfo) {
font-size: var(--step--1); font-size: var(--step--1);
font-style: italic; font-style: italic;
padding-top: var(--space-3xs); padding-top: var(--space-3xs);
@@ -504,43 +492,47 @@ table th {
} }
/* Audio Player */ /* Audio Player */
wc-mplayer { .albumCover {
width: 100%; object-fit: cover;
} }
wc-mplayer::part(artist) { .albumCover,
font-size: var(--meta-font-size); .coverContainer {
} width: var(--space-4xl);
height: var(--space-4xl);
wc-mplayer::part(cover),
wc-mplayer::part(coverContainer) {
width: var(--space-3xl);
height: var(--space-3xl);
border-radius: var(--border-radius); border-radius: var(--border-radius);
} }
wc-mplayer::part(captionAndPlayer) { .artist {
font-size: var(--meta-font-size);
margin-bottom: var(--space-s);
}
.captionAndPlayer {
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
justify-content: space-between; justify-content: space-between;
width: 100%; width: 100%;
} }
wc-mplayer::part(main) { .mplayer {
background-color: var(--card-color);
border-radius: var(--border-radius); border-radius: var(--border-radius);
box-shadow: var(--box-shadow);
display: flex; display: flex;
gap: var(--space-s); gap: var(--space-s);
margin: 0; margin: 0 0 var(--space-s) 0;
padding: var(--space-m); padding: var(--space-m);
width: 100%;
} }
wc-mplayer::part(player) { .player {
align-self: flex-end; align-self: flex-end;
border-radius: var(--border-radius); border-radius: var(--border-radius);
width: 100%; width: 100%;
} }
wc-mplayer::part(title) { .songTitle {
font-size: var(--step-1); font-size: var(--step-1);
font-variation-settings: font-variation-settings:
"opsz" 50, "opsz" 50,
@@ -550,41 +542,13 @@ wc-mplayer::part(title) {
} }
/* Comments */ /* Comments */
#comments {
grid-column: var(--span-grid);
}
.continue-discussion { .continue-discussion {
grid-column: var(--span-grid); grid-column: var(--span-grid);
} }
.continue-discussion button { .continue-discussion button {
margin-top: var(--space-xs); margin-top: var(--space-xs);
} }
wc-comment::part(author-link),
wc-toot::part(author-link) {
font-size: var(--step-0);
text-decoration: none;
}
wc-comment::part(main) {
padding: var(--space-m);
}
wc-comment::part(publish-date),
wc-toot::part(publish-date) {
font-family: var(--meta-font-family);
font-size: var(--meta-font-size);
font-style: var(--meta-font-style);
font-variation-settings: var(--font-variation-settings);
}
wc-toot::part(main) {
color: white;
font-family: var(--meta-font-family);
font-size: var(--step--1);
}
wc-toot::part(author),
wc-toot::part(author-link) {
color: white;
font-style: var(--meta-font-style);
font-variation-settings: "wght" 600;
}
/* Code Fences */ /* Code Fences */
pre, pre,
code { code {
@@ -1062,6 +1026,18 @@ article.post {
margin-right: var(--space-3xs); margin-right: var(--space-3xs);
} }
} }
.card {
align-items: flex-start;
background-color: var(--card-color);
border-radius: var(--border-radius);
box-shadow: var(--box-shadow);
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
margin: 0 0 var(--space-s) 0;
padding: var(--single-gap) 1.1rem var(--single-gap) 1.1rem;
width: 100%;
}
.gallery-images { .gallery-images {
display: flex; display: flex;
flex-flow: row wrap; flex-flow: row wrap;

View File

@@ -1,33 +0,0 @@
const template = document.createElement('template');
template.innerHTML = `
<style>
#card {
align-items: flex-start;
background-color: var(--wc-card-background-color);
border-radius: var(--wc-card-border-radius);
box-shadow: var(--wc-card-box-shadow);
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
margin: var(--wc-card-margin);
padding: var(--single-gap) 1.1rem var(--single-gap) 1.1rem;
width: 100%;
}
</style>
<div id="card" part="main">
<slot></slot>
</div>
`
class card extends HTMLElement {
constructor() {
super();
this._shadowRoot = this.attachShadow({ 'mode': 'open' });
this._shadowRoot.appendChild(template.content.cloneNode(true));
}
}
window.customElements.define('wc-card', card);

View File

@@ -1,76 +0,0 @@
const template = document.createElement('template');
template.innerHTML = `
<style>
a {
color: var(--wc-link-color);
text-decoration-color: var(--wc-link-decoration-color);
text-decoration-thickness: var(--wc-link-decoration-thickness);
}
#comment {
margin: var(--wc-comment-text-margin);
}
#comment p {
margin: 0 auto 0 auto;
}
#meta {
display: flex;
flex-flow: row nowrap;
}
#meta-text {
display: flex;
flex-flow: column nowrap;
width: 100%;
}
#meta-text p {
margin: 0 1rem 0 1rem;
}
</style>
<article id="commentContainer" class="blog-comment" part="main">
<div id="meta" part="meta">
<div>
<wc-profile-pic url="" />
</div>
<div id="meta-text" part="meta-text">
<p id="author" part="author">
<a id="author-link" part="author-link"></a><span> says:</span>
</p>
<p id="publish-date" part="publish-date"></p>
</div>
</div>
<div id="comment" part="content">
</div>
</article>
`
class comment extends HTMLElement {
constructor() {
super();
this._shadowRoot = this.attachShadow({ 'mode': 'open' });
this._shadowRoot.appendChild(template.content.cloneNode(true));
this.$comment = this._shadowRoot.querySelector('#commentContainer');
}
static get observedAttributes() {
return ['author_name', 'author_url', 'avatar_url', 'comment_content', 'publish_date'];
}
attributeChangedCallback(name, oldVal, newVal) {
if (oldVal != newVal) {
this[name] = newVal;
this.render();
}
}
render() {
this.$comment.querySelector('#author-link').innerHTML = this.author_name;
this.$comment.querySelector('#author-link').href = this.author_url;
this.$comment.querySelector('wc-profile-pic').setAttribute('url', this.avatar_url)
this.$comment.querySelector('#comment').innerHTML = this.comment_content;
this.$comment.querySelector('#publish-date').innerHTML = this.publish_date;
}
}
window.customElements.define('wc-comment', comment);

View File

@@ -1,51 +0,0 @@
const template = document.createElement("template");
template.innerHTML = `
<style>
.cover {
object-fit: cover;
}
</style>
<figure class="mplayer" part="main">
<div class="coverContainer" part="coverContainer">
<img src="" class="cover" part="cover">
</div>
<div part="captionAndPlayer">
<figcaption part="caption">
<span class="title" part="title"></span><br /><span class="artist" part="artist"></span>
</figcaption>
<audio controls src="" class="player" part="player"></audio>
</div>
</figure>
`;
class mplayer extends HTMLElement {
constructor() {
super();
this._shadowRoot = this.attachShadow({ mode: "open" });
this._shadowRoot.appendChild(template.content.cloneNode(true));
this.$mplayer = this._shadowRoot.querySelector(".mplayer");
}
static get observedAttributes() {
return ["title", "artist", "media_url", "cover_url"];
}
attributeChangedCallback(name, oldVal, newVal) {
if (oldVal != newVal) {
this[name] = newVal;
this.render();
}
}
render() {
this.$mplayer.querySelector(".title").innerHTML = this.title;
this.$mplayer.querySelector(".artist").innerHTML = this.artist;
this.$mplayer.querySelector(".player").src = this.media_url;
this.$mplayer.querySelector(".coverContainer > img").src = this.cover_url;
}
}
window.customElements.define("wc-mplayer", mplayer);

View File

@@ -1,40 +0,0 @@
const template = document.createElement('template');
template.innerHTML = `
<style>
#profilePic {
border-radius: var(--wc-profile-pic-border-radius);
width: var(--wc-profile-pic-size);
height: var(--wc-profile-pic-size);
}
</style>
<img src="" id="profilePic"/>
`
class profilePic extends HTMLElement {
constructor() {
super();
this._shadowRoot = this.attachShadow({ 'mode': 'open' });
this._shadowRoot.appendChild(template.content.cloneNode(true));
this.$profilePic = this._shadowRoot.querySelector('#profilePic');
}
static get observedAttributes() {
return ['url'];
}
attributeChangedCallback(name, oldVal, newVal) {
if (oldVal != newVal) {
this[name] = newVal;
this.render();
}
}
render() {
this.url ? this.$profilePic.src = this.url : null;
}
}
window.customElements.define('wc-profile-pic', profilePic);

File diff suppressed because one or more lines are too long