add learning
This commit is contained in:
@@ -548,6 +548,11 @@ pre[class*="language-diff-"] {
|
||||
<details><summary>2025</summary>
|
||||
<ol reversed="" class="archivelist">
|
||||
|
||||
<li class="archivelist-item">
|
||||
<a href="/learning/" class="archivelist-link">Learning</a><br>
|
||||
<time class="archivelist-date" datetime="2025-09-07">07 September 2025</time>
|
||||
</li>
|
||||
|
||||
<li class="archivelist-item">
|
||||
<a href="/success-at-last/" class="archivelist-link">Success, at Last</a><br>
|
||||
<time class="archivelist-date" datetime="2025-08-31">31 August 2025</time>
|
||||
|
||||
@@ -687,7 +687,89 @@ hr.new {
|
||||
<h3 id="webmentions-2">Webmentions</h3>
|
||||
|
||||
|
||||
<p>No replies yet.</p>
|
||||
<h4 id="1-reply">1 Reply</h4>
|
||||
<ol class="webmentions__list">
|
||||
|
||||
<li class="webmentions__item">
|
||||
<article class="webmention h-cite" id="webmention-1936163">
|
||||
<div class="webmention__meta">
|
||||
|
||||
<a class="webmention__author p-author h-card u-url" href="https://www.ryanpatrickrandall.com/weekly-assemblage/wa-2024-week-26" target="_blank" rel="noopener noreferrer">
|
||||
|
||||
<img class="webmention__author__photo" src="/blog/img/default_avatar.png" alt="">
|
||||
|
||||
<strong class="p-name">By: Ryan P. Randall</strong>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<time class="webmention__pubdate dt-published" datetime="2024-07-02T17:39:49-06:00">02 Jul 2024 - 23:39</time>
|
||||
|
||||
</div>
|
||||
<div class="webmention__content p-content">
|
||||
On this pageFlock of the WeekViewingUgly BettyStar Trek: DiscoveryStar Trek: Picard and Lower DecksBookWyrmSite Refinements of the WeekWeekly Whaaa…?
|
||||
|
||||
Flock of the Week
|
||||
|
||||
A family of wild turkeys has apparently taken up residence in our neighborhood. I’ve seen them strolling, scratching, and insect-buffeting their way through our yard twice, and also seen them a few streets away on an evening walk. Two adults, plus about seven offspring.
|
||||
|
||||
I’m used to our many geese neighbors, but the turkeys were quite a surprise the first time I saw them! The cat has seemed even more surprised both times he’s seen them.
|
||||
|
||||
Viewing
|
||||
|
||||
Ugly Betty
|
||||
|
||||
We somehow tore through all of Ugly Betty in the last few months. I never caught it during its initial airing, but at least to me, it certainly doesn’t seem as outdated as its age might suggest.
|
||||
|
||||
Star Trek: Discovery
|
||||
|
||||
We also made it through the first couple seasons of Star Trek: Discovery, the first of which was much more of a slog. Although I can definitely get why it’s a compelling idea to put a jumble of redemption narratives at the center of interlocking stories set in the Star Trek world, I honestly don’t comprehend what audience they had in mind for the repeated torture sequences involved in one of these storylines.
|
||||
|
||||
We almost gave up on watching it—multiple times!
|
||||
|
||||
Thankfully, the second season rediscovers excitement at the prospect of strange new worlds, and decides to be far less hostile to the viewer.
|
||||
|
||||
Star Trek: Picard and Lower Decks
|
||||
|
||||
As part of our Viewing Alpha, we’re watching all the series and movies in release order. At this point we’ve also watched the entire—and quite fun—first season of Picard and are partially through Lower Decks. They’re both much more pleasant than Discovery’s first season, and Lower Decks in particular is very rewarding considering the way we’re doing such an extended speed-run of everything.
|
||||
|
||||
BookWyrm
|
||||
|
||||
Seeing Kathleen Fitzpatrick mention BookWyrm on her blog provided just enough of a nudge for me to start trying it again. I went ahead and made lists from the books in my exam reading lists, and I’m hoping that the extra potential for interaction on BookWyrm will give me more inertia on both the lists and using that site in general.
|
||||
|
||||
Of course, I’m still going to keep tracking my reading here, especially since I’ll be able to annotate articles and add my own extended notes and posts.
|
||||
|
||||
If you’re on BookWyrm and want to connect, please do. If you’re not, why not give it a try? It’s a nice, gentle introduction to some of the core ideas of the “Fediverse” (the collectively-owned network of platforms like Mastodon).
|
||||
|
||||
Site Refinements of the Week
|
||||
|
||||
Did you know that, by default, Jekyll’s “related posts” are actually just the most recent posts, not posts more meaningfully related to the content of a post? Yeah, that’s bugged me for years. And I’ve finally done something about it.
|
||||
|
||||
After a bit of searching, I found this post from Webjeda, which is written to work either by tag or by category. I use both here, so I’ve been slowly weaving the two together. Currently I prioritize tags as more meaningful than categories, so if a post has both tags and a category, its tags will determine what goes in the “related” section. (I do still want to work out what to display when a post has neither tags nor categories. Probably I’ll extend my current set of if statements into a larger set of if/elsif/else statements.)
|
||||
|
||||
I also improved on the Webjeda code by using actual semantic elements. Why use a bunch of <div> elements when you’re really making an unsorted list? Accept<ul> and <li> as your friends already, developers!
|
||||
|
||||
Finally, I made the tags and categories functional links. And, since the list of tags could quickly become unruly, I hid those within a <details> disclosure widget. I’ve thus far only ever used a single category at a time (and plan to continue that), so those always remain visible at the bottom of each related post’s excerpt rather than requiring extra interaction.
|
||||
|
||||
As far as I can tell, this is all done accessibly. To reduce repeated content for screen readers—and to lower cognitive load for everyone—I also removed the author sidebar from most posts and pages.
|
||||
|
||||
If you have any feedback on any of this, I’d appreciate hearing from you!
|
||||
|
||||
|
||||
Kudos
|
||||
|
||||
Did you enjoy this? Let me know:
|
||||
|
||||
|
||||
|
||||
Perhaps even leave a comment below?
|
||||
</details></li></ul></div>
|
||||
</div></article>
|
||||
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -5,11 +5,39 @@
|
||||
<subtitle>The long-running and erratically updated blog of Kathleen Fitzpatrick.</subtitle>
|
||||
<link href="https://kfitz.info/feed/feed.xml" rel="self" />
|
||||
<link href="https://kfitz.info/" />
|
||||
<updated>2025-08-31T18:34:18Z</updated>
|
||||
<updated>2025-09-07T17:28:41Z</updated>
|
||||
<id>https://kfitz.info/</id>
|
||||
<author>
|
||||
<name>Kathleen Fitzpatrick</name>
|
||||
</author>
|
||||
<entry>
|
||||
<title>Learning</title>
|
||||
<link href="https://kfitz.info/learning/" />
|
||||
<updated>2025-09-07T17:28:41Z</updated>
|
||||
<id>https://kfitz.info/learning/</id>
|
||||
<content type="html"><p>Over the last several months, I've been engaged in a project designed to bring a bunch of the stuff I'm hosting in various places around the internet home. And I mean &quot;home&quot; quite literally: I not only wanted to control the data I was putting out into the world, and the software I was using to do it, but also the metal on which it's hosted. I wanted my stuff on my server in my very own house.</p>
|
||||
<p>Why? I can't fully articulate the drive. Some of it stems from a long-standing desire to &quot;<a href="https://en.wikipedia.org/wiki/DeGoogle">de-google</a>,&quot; to <a href="https://www.theverge.com/24293448/x-twitter-musk-deactivate-how-to">quit Twitter</a>, and to focus my creative energy on formats and platforms that I can trust and over which I can exercise some level of control. But that drive got exacerbated by everything that's happened around us since January and the creeping sense that even good actors in today's technology landscape could wind up being attacked, or even weaponized. And so the question started nagging at me a bit: what would it be to <em>really</em> self-host? What would be required, and what would I need to learn?</p>
|
||||
<p>I want to acknowledge the very clear ways in which the privileges of my education, my social position, and my income allow me to take a project like this on just because I feel like it. I have the disposable income to invest in a small home server and other equipment, and I live in a house that is wired for very fast fiber-based internet. I've also been an intermittent tinkerer for a couple of decades, having launched a blog on a shared hosting provider back in 2002 and having taken that blog -- uh, <em>this blog</em> -- through a wide variety of redesigns, platform migrations, and hosting changes over the years. Much of that tinkering is <a href="https://kfitz.info/tags/tinkering/">documented in the archives</a>, including my 2023 move away from WordPress, first to Jekyll and then to Eleventy.</p>
|
||||
<p>So I've had a long-standing desire to be more in control of my digital footprint, to ensure that I own as much of the work I do online as possible, and to live up to <a href="https://about.hcommons.org/about-us/">the values that the Knowledge Commons team has developed</a>, including experimenting with new modes of working and supporting the open exchange of knowledge and using open-source tools to do so. And the last year has made me all the more cognizant of the ways that trusting my digital past and presence to services that I cannot fully control -- that may be highly trustworthy today but whose leadership could change and whose guiding values could shift at any time -- opened up a range of potential risks.</p>
|
||||
<p>On top of which, each time I've learned something new in the process of my tinkering, I've found myself wanting to know more. So I decided at some point this spring that I was going to invest in the hardware and the time required for me to set up a home network capable of allowing me to self-host the various sites and services I've had scattered around elsewhere.</p>
|
||||
<p>What I didn't recognize when I started down this path was how little I knew about networking. I'd sort of self-hosted a pretty good range of sites and services on Digital Ocean (including migrating from Github to my own <a href="https://kfitz.info/gitea/">Gitea</a> instance), and I'd gotten passably good at pretty basic Linux systems administration thanks to their amazing suite of <a href="https://www.digitalocean.com/community/tutorials?q=docker+ubuntu">tutorials</a><sup class="footnote-ref"><a href="https://kfitz.info/learning/#fn1" id="fnref1">[1]</a></sup>. I knew how to obtain a domain name and how to configure its DNS records to point to a particular server. I could follow the documentation provided for the installation and use of packages on that server. But several things had never occurred to me, things as basic as how you make it possible for devices on a local, private network to be selectively and securely reachable from outside that network when desired. Or what is required to set up a fully functioning webserver when you're starting with bare metal.</p>
|
||||
<p>It took several months and a bunch of frustration for me to get everything working, but if you're reading this post it's currently working well. I'm writing in an Obsidian vault that contains the content of my Eleventy-based site. When I'm done writing I'll use npm to build and index the site and git to push it to the Gitea instance on my home server. I'll then ssh into the container hosting my website and pull the updates in from Gitea. It's super simple when it's all working.</p>
|
||||
<p>But when it's not, finding the right search terms to track down what could be wrong -- not to mention an unbefouled engine through which to do that search -- is really, really hard. And increasingly so when the results include posts made as long as 15 years ago about obsolete versions of the software you're asking about, on forums where n00bs are routinely yelled at for asking stupid questions and/or insulted for doing it wrong. And then there's the documentation that requires significant expertise to comprehend, and the &quot;getting started&quot; instructions that leave out key steps.</p>
|
||||
<p>I got enormous help in sorting out some intractable issues from two key directions, though: prior blog posts here (see in particular <a href="https://kfitz.info/networking/">Networking</a> and <a href="https://kfitz.info/networking-continued/">Networking Continued</a>), which produced generous, thoughtful responses from several people (most notably the always amazing <a href="https://jadin.me">Taylor Jadin</a> of Reclaim Hosting<sup class="footnote-ref"><a href="https://kfitz.info/learning/#fn2" id="fnref2">[2]</a></sup>), and a series of Mastodon chats (most recently with the very kind and helpful <a href="https://floss.social/@monospace">Monospace Mentor</a><sup class="footnote-ref"><a href="https://kfitz.info/learning/#fn3" id="fnref3">[3]</a></sup>). There's something to be said here about the ways that the human-to-human contact made possible by small networks and self-hosted open-source projects can allow for far better learning than can the aging content buried in vast piles of self-aggrandizing bloviation on major forums.</p>
|
||||
<p>It's a point that should be obvious, except that we live at a time when a not insubstantial number of tech billionaires are trying to convince us that the future of education lies in AI rather than in human interactions and connections. Given the extent to which AI has already undermined our ability to find the information we need on the web, we would be well-served by spending more time thinking about how to reinforce the human networks that can support learning in the midst of entropic decline.</p>
|
||||
<hr class="footnotes-sep">
|
||||
<section class="footnotes">
|
||||
<ol class="footnotes-list">
|
||||
<li id="fn1" class="footnote-item"><p>The thing I most love about these tutorials is that they're written not as though you're just there to find the answer and get out, but as though you actually want to learn. That is, they don't just provide command after command, but rather walk you through what each command does and why you want to do it. <a href="https://kfitz.info/learning/#fnref1" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn2" class="footnote-item"><p>I so, so admire his self-description as someone who is &quot;passionate about educating and empowering people who want to make cool stuff on the web.&quot; I wish that there were more of that around and a lot fewer Reddit bros needing to display their dominance by trashing folks with less experience. <a href="https://kfitz.info/learning/#fnref2" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn3" class="footnote-item"><p>Self-described &quot;greybeard geek&quot; who offers courses, support, and mentoring for folks seeking to build their DevOps skills -- as well as generous support for random folks on Mastodon asking &quot;but how does the VM know that I'm asking it to be a webserver?&quot; <a href="https://kfitz.info/learning/#fnref3" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
</content>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Success, at Last</title>
|
||||
<link href="https://kfitz.info/success-at-last/" />
|
||||
@@ -152,24 +180,6 @@
|
||||
<p>On the one hand, I take this as an encouraging sign: I really do want to work on this thing!</p>
|
||||
<p>On the other, I recognize the temptations posed by the alluring project you don't have time for, and the ways that turning that project into your primary point of focus can take a lot of the shine off.</p>
|
||||
<p>But right here, right now, I long for a writing project to really wrestle with. And so I'm looking forward to carving out the moments here and there to work on it, even if I don't quit my day job to do it.</p>
|
||||
</content>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Leading Generously, the Audiobook!</title>
|
||||
<link href="https://kfitz.info/leading-generously-audiobook/" />
|
||||
<updated>2025-02-18T13:39:29Z</updated>
|
||||
<id>https://kfitz.info/leading-generously-audiobook/</id>
|
||||
<content type="html"><p>I am delighted this morning to share the news that <em>Leading Generously</em> is now available as an <a href="https://www.audible.com/pd/Leading-Generously-Audiobook/B0DW9LHBL8?source_code=AUDFPWS0223189MWU-BK-ACX0-434650&amp;ref=acx_bty_BK_ACX0_434650_pd_us">audiobook</a>,<sup class="footnote-ref"><a href="https://kfitz.info/leading-generously-audiobook/#fn1" id="fnref1">[1]</a></sup> in addition to its <a href="https://www.press.jhu.edu/books/title/12787/leading-generously">print and e-book formats</a>! The audiobook is narrated by the amazing <a href="https://www.linkedin.com/in/kristin-aikin-salada-386a32">Kristin Aikin Salada</a>, who has posted a more enticing excerpt on her <a href="https://www.linkedin.com/posts/%F0%9F%8E%A4kristin-aikin-salada-386a32_we-put-people-first-say-so-many-employers-activity-7297457727751012352-B7vG?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAA8vjagBut77QdZiq1_BYQEcHrmB129syng">LinkedIn announcement</a> than the opening pages that Audible shares.<sup class="footnote-ref"><a href="https://kfitz.info/leading-generously-audiobook/#fn2" id="fnref2">[2]</a></sup></p>
|
||||
<p>If you listen to the audiobook, I'd love to hear your thoughts. I'm thinking hard about the form that I might want my next project to take, and I'm wondering how thinking about that project as audio-first (whether audiobook or podcast) might affect my approach.</p>
|
||||
<hr class="footnotes-sep">
|
||||
<section class="footnotes">
|
||||
<ol class="footnotes-list">
|
||||
<li id="fn1" class="footnote-item"><p>The audiobook is also <a href="https://www.audible.co.uk/pd/Leading-Generously-Audiobook/B0DW9JDZZK">available in the UK</a>, and I assume elsewhere, though the link doesn't localize on its own. <a href="https://kfitz.info/leading-generously-audiobook/#fnref1" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn2" class="footnote-item"><p>My friends at <a href="https://www.rawsignal.ca/">Raw Signal Group</a> might find the opening lines of her excerpt a bit familiar! Which raises an interesting question about citations in audiobooks. I know how that would be handled in an audio-first project, but the translation from print to audio isn't quite as conducive to sharing your sources. <a href="https://kfitz.info/leading-generously-audiobook/#fnref2" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
</content>
|
||||
</entry>
|
||||
</feed>
|
||||
@@ -545,13 +545,21 @@ pre[class*="language-diff-"] {
|
||||
<subtitle>The long-running and erratically updated blog of Kathleen Fitzpatrick.</subtitle>
|
||||
<link href="https://kfitz.info/feed/masto.xml" rel="self"/>
|
||||
<link href="https://kfitz.info/"/>
|
||||
<updated>2025-08-31T18:34:18Z</updated>
|
||||
<updated>2025-09-07T17:28:41Z</updated>
|
||||
<id>https://kfitz.info/</id>
|
||||
<author>
|
||||
<name>Kathleen Fitzpatrick</name>
|
||||
<email>kfitz@kfitz.info</email>
|
||||
</author>
|
||||
|
||||
<entry>
|
||||
<title>Learning</title>
|
||||
<link href="https://kfitz.info/learning/"/>
|
||||
<updated>2025-09-07T17:28:41Z</updated>
|
||||
<id>https://kfitz.info/learning/</id>
|
||||
<content type="html">Over the last several months, I've been engaged in a project designed to bring a bunch of the stuff I'm hosting in various places around the internet home. And I mean &quot;home&quot; quite literally: I not only wanted to control the data I was...</content>
|
||||
</entry>
|
||||
|
||||
<entry>
|
||||
<title>Success, at Last</title>
|
||||
<link href="https://kfitz.info/success-at-last/"/>
|
||||
|
||||
@@ -680,7 +680,7 @@ hr.new {
|
||||
<h3 id="webmentions-2">Webmentions</h3>
|
||||
|
||||
|
||||
<h4 id="1-reply">1 Reply</h4>
|
||||
<h4 id="2-replies">2 Replies</h4>
|
||||
<ol class="webmentions__list">
|
||||
|
||||
<li class="webmentions__item">
|
||||
@@ -706,6 +706,73 @@ hr.new {
|
||||
|
||||
</li>
|
||||
|
||||
<li class="webmentions__item">
|
||||
<article class="webmention h-cite" id="webmention-1936203">
|
||||
<div class="webmention__meta">
|
||||
|
||||
<a class="webmention__author p-author h-card u-url" href="https://www.ryanpatrickrandall.com/postroll/" target="_blank" rel="noopener noreferrer">
|
||||
|
||||
<img class="webmention__author__photo" src="/blog/img/default_avatar.png" alt="">
|
||||
|
||||
<strong class="p-name">By: Ryan P. Randall</strong>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<time class="webmention__pubdate dt-published" datetime="2024-07-05T00:00:00-06:00">05 Jul 2024 - 06:00</time>
|
||||
|
||||
</div>
|
||||
<div class="webmention__content p-content">
|
||||
On this pageWhat’s a Postroll?My Postroll ProperOther Peoples’s Postrolls (OPP)What’s a Postroll?
|
||||
|
||||
How can a blogroll page function differently?
|
||||
|
||||
On this postroll page—inspired by Brandon’s—I’ll list n share-worthy posts, aiming to add two or more new posts a week. This means that older entries will eventually cycle out of the list. (As of 2024-07-05, I’m still deciding how many n will equal, a number which will almost certainly intertwingle with how quickly I add new posts.)
|
||||
|
||||
This approach is not quite analogous to a mixtape full of things that work well together, but it will hopefully highlight particular posts in a different way than my blogroll page’s more general “hey, check out this feed (or band / musician)” can do.
|
||||
|
||||
My Postroll Proper
|
||||
|
||||
This list is numbered chronologically, with “1” indicating the newest addition to the list. (It feels worth reiterating: 1. does not mean “best”, and it is also unrelated to when the post was published. The first link is just the most recently thing I’ve added to this list.)
|
||||
|
||||
Tracy Durnell’s Using personal weeknotes as a tool for attention reflects on how she started using weeknotes and how she uses them now, with an emphasis on awareness, accountability, and shaping her own behavior. I also really appreciate how she shares her weeknotes template and the process she uses for compiling them.
|
||||
Ernie Smith’s Cassingle Culture weaves a ton of punk / (indie) pop culture / media history into a breezy yet deep narrative of cassette singles. Bow Wow Wow? Boy George? Malcolm McLaren? Yep, they’re all in just the first few paragraphs, before we even get to the Go-Go’s and R.E.M.
|
||||
Jacky Alciné’s post about not bothering with electoral politics online anymore provides me a very welcome reminder of what’s behind some people’s reasons to avoid discussions of elections online.
|
||||
Jason Heppler’s How I use Obsidian post covers a lot of the strengths to using Obsidian for notes and longer-form writing. Although I don’t currently use any of the plugins or organizational strategies discussed here, I’m considering making a Dataview-powered way of searching my literature notes along the lines of the Doing History with Zotero and Obsidian guide by Elena Razlogova linked to from this post.
|
||||
James’s reflection on four years of the personal web mentions a lot of same things I find so compelling about maintaining a website / blog / digital garden. You can do things with less worry about other people’s expectations.
|
||||
As soon as you encounter the three-digit number in the title of John Coulthart’s Weekend links 732, you can realize how long this blog has been running. It’s been a constant in my RSS readers for coming up on two full decades—I feel like I probably first heard of it through Arthur magazine or something! This particular week includes a mention of a new album where Shackleton (purveyor of often-otherworldly bass & percussion music) collaborates with Six Organs of Admittance (conjuror of often-psychedelic folk), links ranging from a pulp paperback book artists to a Wire magazine article on experimental radio to a collection of 60s acid rock buttons, and a great Japanese woodblock print from the late 1800s.
|
||||
Anil Dash’s Today’s AI is unreasonable succinctly describes what I also find regrettable about the current generative AI hype: they generate bullshit by design, this bullshit is inconsistently generated in ways that cannot be easily debugged by users, and systems designed around these types of unpredictability and unreasonableness tend to remove agency from users.
|
||||
Sara Joy’s This is My Church resonates with me both regarding particular communities (I helped start a swing dancing club at UC Riverside as an undergrad) and regarding the ways that social media and blogging communities feel to me now.
|
||||
Tracy Durnell’s The injustice embedded in our infrastructure quickly weaves together a game, a book, an email, a city’s community budget process, and other people’s blogs while making the post’s point. This is a really nice example of how a blog post can act as a condensed essay, taking a reader on a quick travel through a set of ideas and perhaps coming away with a changed perspective.
|
||||
John M. Jackson’s Befores and afters profoundly resonates with me in terms of no longer feeling like I’m “part of the new guard.” Although I’m actually new enough as an instructional designer to not even know whether there’s as much of a sense of “newer” and “older” guards in this field as there is in librarianship, I definitely feel like I’m traversing similar thresholds in life. As a side note, I also appreciate how John tends to add sections like “What I’m reading” and “Garden update” to his posts.
|
||||
Keenan’s An alarmingly concise and very hinged summary of what it was like to build this site from scratch relates how they built their site… a story told with enough zest and humor that I feel better about the peculiar blend of empowerment and continual facepalming that drive my own site.
|
||||
Kathleen Fitzpatrick’s Generosity and Pragmatism shares an insight from Deb Chachra’s How Infrastructure Works about how being generous is simultaneously being pragmatic. This post is also a great example of a type of blog post that hovers somewhere between a long social media post and a miniature essay.
|
||||
Arthur Boston’s When Do Checks Become Review? asks what lines we can draw around peer review and integrity checks.
|
||||
Olu Niyi-Awosusi’s Weeknotes #4 (Week 24, 2024) showed me how nicely one can style a site made with Quartz—and the look of Olu’s Bear-based blog inspired me to trim the author sidebar links and some other elements from most of my own blog pages. Their various weeknotes are also a great example of that genre of blog post!
|
||||
Spoiler alert! W. Evan Sheehan’s Twelve favorite problems currently only has a list of 5. I can’t remember previously hearing about this “favorite problems” framework, which Evan ascribes to Richard Feynman, but I’m instantly a fan.
|
||||
Vic Kostrzewski’s My mental health stack – everyday things I use for my mental health shares a lot of technologies that I don’t use, but I deeply appreciate this sharing of struggles and approaches.
|
||||
Mandy Brown’s Common future reading note connects Ursula Franklin’s earthworm theory of social change to climate change, since talking about the weather is increasingly one way of talking about our common future.
|
||||
Sri Seah’s GHDR Report 0404: Powered by Prosocial Motivation shares a great insight into motivation—and I think I’m often motivated similarly, by feeling connections with other people. (The post also touches on how Sri has “conversations” with ChatGPT, a use I’d rarely considered before outside of working with students.)
|
||||
John Maxwell’s All I Need to Know about DH I Learned in a MOO shares welcome insights about some early formats of online communities.
|
||||
Robb Knight’s Slash Pages is a brief and welcome backstory for why he started Slashpages.net.
|
||||
P.L. Thomas’s What Works?: The Wrong Question for Education Reform shares his personal educational history as well as pointing out various ways that “what works?” is untenable as a question for education reform.
|
||||
Brandon’s On Adding A Blogroll Slashpage gave me the idea for this alterative format in the first place.
|
||||
Other Peoples’s Postrolls (OPP)
|
||||
|
||||
Do you have a postroll page? Let me know and I’ll try to add it here.
|
||||
|
||||
(I can’t commit to maintaining this kind of list forever, for the same reasons that maintaining a blogroll can be awkward. But I’m excited to point to some other postrolls for now.)
|
||||
|
||||
Brandon’s Postroll.
|
||||
Jedda’s Postroll.
|
||||
Kudos
|
||||
|
||||
Did you enjoy this? Let me know:
|
||||
</div>
|
||||
</article>
|
||||
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
14
index.html
14
index.html
@@ -14,7 +14,7 @@
|
||||
|
||||
|
||||
|
||||
<style>.postlist { counter-reset: start-from 1807 }
|
||||
<style>.postlist { counter-reset: start-from 1808 }
|
||||
/* This is an arbitrary CSS string added to the bundle */
|
||||
/* Defaults */
|
||||
@font-face {
|
||||
@@ -562,6 +562,11 @@ Director, <a href="https://hcommons.org">Knowledge Commons</a>.</p>
|
||||
|
||||
<ol reversed="" class="postlist">
|
||||
|
||||
<li class="postlist-item">
|
||||
<a href="/learning/" class="postlist-link">Learning</a>
|
||||
<time class="postlist-date" datetime="2025-09-07">September 2025</time>
|
||||
</li>
|
||||
|
||||
<li class="postlist-item">
|
||||
<a href="/success-at-last/" class="postlist-link">Success, at Last</a>
|
||||
<time class="postlist-date" datetime="2025-08-31">August 2025</time>
|
||||
@@ -582,17 +587,12 @@ Director, <a href="https://hcommons.org">Knowledge Commons</a>.</p>
|
||||
<time class="postlist-date" datetime="2025-06-26">June 2025</time>
|
||||
</li>
|
||||
|
||||
<li class="postlist-item">
|
||||
<a href="/all-this/" class="postlist-link">All This</a>
|
||||
<time class="postlist-date" datetime="2025-05-31">May 2025</time>
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
|
||||
|
||||
|
||||
|
||||
<p>1801 more posts can be found in <a href="/blog/">the archive</a>.</p>
|
||||
<p>1802 more posts can be found in <a href="/blog/">the archive</a>.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
725
learning/index.html
Normal file
725
learning/index.html
Normal file
@@ -0,0 +1,725 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Learning</title>
|
||||
<meta name="description" content="The long-running and erratically updated blog of Kathleen Fitzpatrick.">
|
||||
<link rel="alternate" href="feed/feed.xml" type="application/atom+xml" title="kfitz">
|
||||
<script async="" src="https://talk.hyvor.com/embed/embed.js" type="module"></script>
|
||||
<link rel="webmention" href="https://webmention.io/kfitz.info/webmention">
|
||||
<link rel="pingback" href="https://webmention.io/kfitz.info/xmlrpc">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<style>/**
|
||||
* okaidia theme for JavaScript, CSS and HTML
|
||||
* Loosely based on Monokai textmate theme by http://www.monokai.nl/
|
||||
* @author ocodia
|
||||
*/
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: #f8f8f2;
|
||||
background: none;
|
||||
text-shadow: 0 1px rgba(0, 0, 0, 0.3);
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
font-size: 1em;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
border-radius: 0.3em;
|
||||
}
|
||||
|
||||
:not(pre) > code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #272822;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre) > code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: #8292a2;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #f8f8f2;
|
||||
}
|
||||
|
||||
.token.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #f92672;
|
||||
}
|
||||
|
||||
.token.boolean,
|
||||
.token.number {
|
||||
color: #ae81ff;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #a6e22e;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string,
|
||||
.token.variable {
|
||||
color: #f8f8f2;
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #e6db74;
|
||||
}
|
||||
|
||||
.token.keyword {
|
||||
color: #66d9ef;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important {
|
||||
color: #fd971f;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
||||
/*
|
||||
* New diff- syntax
|
||||
*/
|
||||
|
||||
pre[class*="language-diff-"] {
|
||||
--eleventy-code-padding: 1.25em;
|
||||
padding-left: var(--eleventy-code-padding);
|
||||
padding-right: var(--eleventy-code-padding);
|
||||
}
|
||||
.token.deleted {
|
||||
background-color: hsl(0, 51%, 37%);
|
||||
color: inherit;
|
||||
}
|
||||
.token.inserted {
|
||||
background-color: hsl(126, 31%, 39%);
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* Make the + and - characters unselectable for copy/paste */
|
||||
.token.prefix.unchanged,
|
||||
.token.prefix.inserted,
|
||||
.token.prefix.deleted {
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
.token.prefix.inserted,
|
||||
.token.prefix.deleted {
|
||||
width: var(--eleventy-code-padding);
|
||||
background-color: rgba(0,0,0,.2);
|
||||
}
|
||||
|
||||
/* Optional: full-width background color */
|
||||
.token.inserted:not(.prefix),
|
||||
.token.deleted:not(.prefix) {
|
||||
display: block;
|
||||
margin-left: calc(-1 * var(--eleventy-code-padding));
|
||||
margin-right: calc(-1 * var(--eleventy-code-padding));
|
||||
text-decoration: none; /* override del, ins, mark defaults */
|
||||
color: inherit; /* override del, ins, mark defaults */
|
||||
}
|
||||
/* This is an arbitrary CSS string added to the bundle */
|
||||
/* Defaults */
|
||||
@font-face {
|
||||
font-family: "Atkinson Hyperlegible";
|
||||
src: url('/css/files/atkinson-hyperlegible-latin-400-normal.woff2') format('woff2');
|
||||
font-display: swap;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "Atkinson Hyperlegible";
|
||||
font-weight: bold;
|
||||
src: url('/css/files/atkinson-hyperlegible-latin-700-normal.woff2') format('woff2');
|
||||
font-display: swap;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "Atkinson Hyperlegible";
|
||||
font-style: italic
|
||||
src: url('/css/files/atkinson-hyperlegible-latin-400-italic.woff2') format('woff2');
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
:root {
|
||||
--font-family: "Atkinson Hyperlegible", -apple-system, system-ui, sans-serif;
|
||||
--font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
/* Theme colors */
|
||||
:root {
|
||||
--color-gray-20: #e0e0e0;
|
||||
--color-gray-50: #C0C0C0;
|
||||
--color-gray-90: #333;
|
||||
|
||||
--background-color: #fff;
|
||||
|
||||
--text-color: var(--color-gray-90);
|
||||
--text-color-link: #d61d4a;
|
||||
--text-color-link-active: #853439;
|
||||
--text-color-link-visited: #e8325e;
|
||||
|
||||
--syntax-tab-size: 2;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--color-gray-20: #e0e0e0;
|
||||
--color-gray-50: #C0C0C0;
|
||||
--color-gray-90: #dad8d8;
|
||||
|
||||
/* --text-color is assigned to --color-gray-_ above */
|
||||
--text-color-link: #1493fb;
|
||||
--text-color-link-active: #6969f7;
|
||||
--text-color-link-visited: #a6a6f8;
|
||||
|
||||
--background-color: #15202b;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Global stylesheet */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@view-transition {
|
||||
navigation: auto;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
padding: 0;
|
||||
margin: 0 auto;
|
||||
font-family: var(--font-family);
|
||||
color: var(--text-color);
|
||||
background-color: var(--background-color);
|
||||
}
|
||||
html {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
body {
|
||||
max-width: 40em;
|
||||
}
|
||||
|
||||
/* https://www.a11yproject.com/posts/how-to-hide-content/ */
|
||||
.visually-hidden {
|
||||
clip: rect(0 0 0 0);
|
||||
clip-path: inset(50%);
|
||||
height: 1px;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
white-space: nowrap;
|
||||
width: 1px;
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
p {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
li {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
a[href] {
|
||||
color: var(--text-color-link);
|
||||
}
|
||||
a[href]:visited {
|
||||
color: var(--text-color-link-visited);
|
||||
}
|
||||
a[href]:hover,
|
||||
a[href]:active {
|
||||
color: var(--text-color-link-active);
|
||||
}
|
||||
|
||||
main,
|
||||
footer {
|
||||
padding: 1rem;
|
||||
}
|
||||
main :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
header {
|
||||
border-bottom: 1px dashed var(--color-gray-20);
|
||||
}
|
||||
header:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
footer {
|
||||
border-top: 1px dashed var(--color-gray-50);
|
||||
}
|
||||
|
||||
.links-nextprev {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: .5em 1em;
|
||||
list-style: "";
|
||||
border-top: 1px dashed var(--color-gray-20);
|
||||
padding: 1em 0;
|
||||
}
|
||||
.links-nextprev > * {
|
||||
flex-grow: 1;
|
||||
}
|
||||
.links-nextprev-next {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table {
|
||||
margin: 1em 0;
|
||||
}
|
||||
table td,
|
||||
table th {
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
font-family: var(--font-family-monospace);
|
||||
}
|
||||
pre:not([class*="language-"]) {
|
||||
margin: .5em 0;
|
||||
line-height: 1.375; /* 22px /16 */
|
||||
-moz-tab-size: var(--syntax-tab-size);
|
||||
-o-tab-size: var(--syntax-tab-size);
|
||||
tab-size: var(--syntax-tab-size);
|
||||
-webkit-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
direction: ltr;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
overflow-x: auto;
|
||||
}
|
||||
code {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
header {
|
||||
display: flex;
|
||||
gap: 1em .5em;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
padding: 1em;
|
||||
}
|
||||
.home-link {
|
||||
font-size: 1.5em; /* 16px /16 */
|
||||
font-weight: 700;
|
||||
margin-right: 2em;
|
||||
}
|
||||
.home-link:link:not(:hover) {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* Nav */
|
||||
.nav {
|
||||
display: flex;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.nav-item {
|
||||
display: inline-block;
|
||||
margin-right: 1em;
|
||||
}
|
||||
.nav-item a[href]:not(:hover) {
|
||||
text-decoration: none;
|
||||
}
|
||||
.nav a[href][aria-current="page"] {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Posts list */
|
||||
.postlist {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
.postlist-item {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: baseline;
|
||||
counter-increment: start-from -1;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.postlist-item:before {
|
||||
display: inline-block;
|
||||
pointer-events: none;
|
||||
content: "" counter(start-from, decimal-leading-zero) ". ";
|
||||
line-height: 100%;
|
||||
text-align: right;
|
||||
margin-left: -1.5rem;
|
||||
}
|
||||
.postlist-date,
|
||||
.postlist-item:before {
|
||||
font-size: 0.8125em; /* 13px /16 */
|
||||
color: var(--color-gray-90);
|
||||
}
|
||||
.postlist-date {
|
||||
word-spacing: -0.5px;
|
||||
}
|
||||
.postlist-link {
|
||||
font-size: 1.1875em; /* 19px /16 */
|
||||
font-weight: 700;
|
||||
flex-basis: calc(100% - 1.5rem);
|
||||
padding-left: .25em;
|
||||
padding-right: .5em;
|
||||
text-underline-position: from-font;
|
||||
text-underline-offset: 0;
|
||||
text-decoration-thickness: 1px;
|
||||
}
|
||||
.postlist-item-active .postlist-link {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Archive list */
|
||||
.archivelist {
|
||||
padding: 0;
|
||||
padding-left: 2.5rem;
|
||||
}
|
||||
.archivelist-item {
|
||||
align-items: baseline;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.archivelist-item::marker {
|
||||
text-align: right;
|
||||
margin-left: -1.5rem;
|
||||
font-size: 0.8125em; /* 13px /16 */
|
||||
color: var(--color-gray-90);
|
||||
}
|
||||
.archivelist-date {
|
||||
font-size: 0.8125em; /* 13px /16 */
|
||||
color: var(--color-gray-90);
|
||||
word-spacing: -0.5px;
|
||||
}
|
||||
.archivelist-link {
|
||||
font-size: 1.1875em; /* 19px /16 */
|
||||
font-weight: 700;
|
||||
flex-basis: calc(100% - 1.5rem);
|
||||
padding-left: .25em;
|
||||
padding-right: .5em;
|
||||
text-underline-position: from-font;
|
||||
text-underline-offset: 0;
|
||||
text-decoration-thickness: 1px;
|
||||
}
|
||||
.archivelist-item-active .archivelist-link {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
/* Tags */
|
||||
.post-tag {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-transform: capitalize;
|
||||
font-style: italic;
|
||||
}
|
||||
.postlist-item > .post-tag {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
/* Tags list */
|
||||
.post-metadata {
|
||||
display: inline-flex;
|
||||
flex-wrap: wrap;
|
||||
gap: .5em;
|
||||
list-style: none;
|
||||
border-top: 1px dashed var(--color-gray-20);
|
||||
border-bottom: 1px dashed var(--color-gray-20);
|
||||
padding: 3px 0px 3px 0px;
|
||||
margin: 0;
|
||||
font-size: .8em;
|
||||
}
|
||||
.post-metadata time {
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
/* Direct Links / Markdown Headers */
|
||||
.header-anchor {
|
||||
text-decoration: none;
|
||||
font-style: normal;
|
||||
font-size: 1em;
|
||||
margin-left: .1em;
|
||||
}
|
||||
a[href].header-anchor,
|
||||
a[href].header-anchor:visited {
|
||||
color: transparent;
|
||||
}
|
||||
a[href].header-anchor:focus,
|
||||
a[href].header-anchor:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
a[href].header-anchor:focus,
|
||||
:hover > a[href].header-anchor {
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
h2 + .header-anchor {
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
summary {
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
margin-bottom: .5em;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
display: block;
|
||||
margin-left: 2em;
|
||||
margin-right: 3em;
|
||||
padding-left: 10px;
|
||||
border-left: 10px solid var(--text-color-link);
|
||||
}
|
||||
|
||||
hr.new {
|
||||
border: none;
|
||||
border-top: 1px dashed var(--color-gray-50);
|
||||
}
|
||||
/* Webmention Section */
|
||||
|
||||
.webmentions {
|
||||
display:block;
|
||||
text-align: left;
|
||||
}
|
||||
.webmentions__facepile {
|
||||
display:flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.webmentions__face {
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
flex: none;
|
||||
}
|
||||
.webmentions__list {
|
||||
list-style-type: none;
|
||||
padding:0;
|
||||
}
|
||||
.webmentions__item {
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
/* Single Webmention */
|
||||
|
||||
.webmention {
|
||||
display:block;
|
||||
}
|
||||
.webmention__meta,
|
||||
.webmention__author {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.webmention__meta {
|
||||
margin-bottom:.5rem;
|
||||
}
|
||||
.webmention__author {
|
||||
margin-right:.25rem;
|
||||
}
|
||||
.webmention__author__photo {
|
||||
height: 3rem;
|
||||
width: 3rem;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
margin-right:.5rem;
|
||||
}
|
||||
.webmention__pubdate {
|
||||
font-style: italic;
|
||||
}
|
||||
/* Message Box */
|
||||
.message-box {
|
||||
--color-message-box: #ffc;
|
||||
|
||||
display: block;
|
||||
background-color: var(--color-message-box);
|
||||
color: var(--color-gray-90);
|
||||
padding: 1em 0.625em; /* 16px 10px /16 */
|
||||
}
|
||||
.message-box ol {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.message-box {
|
||||
--color-message-box: #082840;
|
||||
}
|
||||
}</style>
|
||||
</head>
|
||||
<body>
|
||||
<a href="#skip" class="visually-hidden">Skip to main content</a>
|
||||
|
||||
<header>
|
||||
<a href="/" class="home-link">kfitz</a>
|
||||
<nav>
|
||||
<h2 class="visually-hidden" id="top-level-navigation-menu">Top level navigation menu</h2>
|
||||
<ul class="nav">
|
||||
<li class="nav-item"><a href="/">Home</a></li>
|
||||
<li class="nav-item"><a href="/blog/">Archive</a></li>
|
||||
<li class="nav-item"><a href="/about/">About</a></li>
|
||||
<li class="nav-item"><a href="/projects/">Projects</a></li>
|
||||
<li class="nav-item"><a href="/presentations/">Presentations</a></li>
|
||||
<li class="nav-item"><a href="/teaching/">Teaching</a></li>
|
||||
<li class="nav-item"><a href="/feed/feed.xml">Feed</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<link href="/pagefind/pagefind-ui.css" rel="stylesheet">
|
||||
<script src="/pagefind/pagefind-ui.js"></script>
|
||||
<div id="search"></div>
|
||||
<script>
|
||||
window.addEventListener('DOMContentLoaded', (event) => {
|
||||
new PagefindUI({ element: "#search", showSubResults: true });
|
||||
});
|
||||
</script>
|
||||
|
||||
<main id="skip">
|
||||
<heading-anchors>
|
||||
|
||||
<h1 id="learning">Learning</h1>
|
||||
|
||||
<ul class="post-metadata">
|
||||
<li><time datetime="2025-09-07">07 September 2025</time></li>
|
||||
<li><a href="/tags/tinkering/" class="post-tag">tinkering</a></li>
|
||||
</ul>
|
||||
|
||||
<p>Over the last several months, I've been engaged in a project designed to bring a bunch of the stuff I'm hosting in various places around the internet home. And I mean "home" quite literally: I not only wanted to control the data I was putting out into the world, and the software I was using to do it, but also the metal on which it's hosted. I wanted my stuff on my server in my very own house.</p>
|
||||
<p>Why? I can't fully articulate the drive. Some of it stems from a long-standing desire to "<a href="https://en.wikipedia.org/wiki/DeGoogle">de-google</a>," to <a href="https://www.theverge.com/24293448/x-twitter-musk-deactivate-how-to">quit Twitter</a>, and to focus my creative energy on formats and platforms that I can trust and over which I can exercise some level of control. But that drive got exacerbated by everything that's happened around us since January and the creeping sense that even good actors in today's technology landscape could wind up being attacked, or even weaponized. And so the question started nagging at me a bit: what would it be to <em>really</em> self-host? What would be required, and what would I need to learn?</p>
|
||||
<p>I want to acknowledge the very clear ways in which the privileges of my education, my social position, and my income allow me to take a project like this on just because I feel like it. I have the disposable income to invest in a small home server and other equipment, and I live in a house that is wired for very fast fiber-based internet. I've also been an intermittent tinkerer for a couple of decades, having launched a blog on a shared hosting provider back in 2002 and having taken that blog -- uh, <em>this blog</em> -- through a wide variety of redesigns, platform migrations, and hosting changes over the years. Much of that tinkering is <a href="https://kfitz.info/tags/tinkering/">documented in the archives</a>, including my 2023 move away from WordPress, first to Jekyll and then to Eleventy.</p>
|
||||
<p>So I've had a long-standing desire to be more in control of my digital footprint, to ensure that I own as much of the work I do online as possible, and to live up to <a href="https://about.hcommons.org/about-us/">the values that the Knowledge Commons team has developed</a>, including experimenting with new modes of working and supporting the open exchange of knowledge and using open-source tools to do so. And the last year has made me all the more cognizant of the ways that trusting my digital past and presence to services that I cannot fully control -- that may be highly trustworthy today but whose leadership could change and whose guiding values could shift at any time -- opened up a range of potential risks.</p>
|
||||
<p>On top of which, each time I've learned something new in the process of my tinkering, I've found myself wanting to know more. So I decided at some point this spring that I was going to invest in the hardware and the time required for me to set up a home network capable of allowing me to self-host the various sites and services I've had scattered around elsewhere.</p>
|
||||
<p>What I didn't recognize when I started down this path was how little I knew about networking. I'd sort of self-hosted a pretty good range of sites and services on Digital Ocean (including migrating from Github to my own <a href="/gitea/">Gitea</a> instance), and I'd gotten passably good at pretty basic Linux systems administration thanks to their amazing suite of <a href="https://www.digitalocean.com/community/tutorials?q=docker+ubuntu">tutorials</a><sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>. I knew how to obtain a domain name and how to configure its DNS records to point to a particular server. I could follow the documentation provided for the installation and use of packages on that server. But several things had never occurred to me, things as basic as how you make it possible for devices on a local, private network to be selectively and securely reachable from outside that network when desired. Or what is required to set up a fully functioning webserver when you're starting with bare metal.</p>
|
||||
<p>It took several months and a bunch of frustration for me to get everything working, but if you're reading this post it's currently working well. I'm writing in an Obsidian vault that contains the content of my Eleventy-based site. When I'm done writing I'll use npm to build and index the site and git to push it to the Gitea instance on my home server. I'll then ssh into the container hosting my website and pull the updates in from Gitea. It's super simple when it's all working.</p>
|
||||
<p>But when it's not, finding the right search terms to track down what could be wrong -- not to mention an unbefouled engine through which to do that search -- is really, really hard. And increasingly so when the results include posts made as long as 15 years ago about obsolete versions of the software you're asking about, on forums where n00bs are routinely yelled at for asking stupid questions and/or insulted for doing it wrong. And then there's the documentation that requires significant expertise to comprehend, and the "getting started" instructions that leave out key steps.</p>
|
||||
<p>I got enormous help in sorting out some intractable issues from two key directions, though: prior blog posts here (see in particular <a href="https://kfitz.info/networking/">Networking</a> and <a href="https://kfitz.info/networking-continued/">Networking Continued</a>), which produced generous, thoughtful responses from several people (most notably the always amazing <a href="https://jadin.me">Taylor Jadin</a> of Reclaim Hosting<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>), and a series of Mastodon chats (most recently with the very kind and helpful <a href="https://floss.social/@monospace">Monospace Mentor</a><sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>). There's something to be said here about the ways that the human-to-human contact made possible by small networks and self-hosted open-source projects can allow for far better learning than can the aging content buried in vast piles of self-aggrandizing bloviation on major forums.</p>
|
||||
<p>It's a point that should be obvious, except that we live at a time when a not insubstantial number of tech billionaires are trying to convince us that the future of education lies in AI rather than in human interactions and connections. Given the extent to which AI has already undermined our ability to find the information we need on the web, we would be well-served by spending more time thinking about how to reinforce the human networks that can support learning in the midst of entropic decline.</p>
|
||||
<hr class="footnotes-sep">
|
||||
<section class="footnotes">
|
||||
<ol class="footnotes-list">
|
||||
<li id="fn1" class="footnote-item"><p>The thing I most love about these tutorials is that they're written not as though you're just there to find the answer and get out, but as though you actually want to learn. That is, they don't just provide command after command, but rather walk you through what each command does and why you want to do it. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn2" class="footnote-item"><p>I so, so admire his self-description as someone who is "passionate about educating and empowering people who want to make cool stuff on the web." I wish that there were more of that around and a lot fewer Reddit bros needing to display their dominance by trashing folks with less experience. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
<li id="fn3" class="footnote-item"><p>Self-described "greybeard geek" who offers courses, support, and mentoring for folks seeking to build their DevOps skills -- as well as generous support for random folks on Mastodon asking "but how does the VM know that I'm asking it to be a webserver?" <a href="#fnref3" class="footnote-backref">↩︎</a></p>
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
|
||||
<ul class="links-nextprev"><li class="links-nextprev-prev">← Previous<br> <a href="/success-at-last/">Success, at Last</a></li>
|
||||
</ul>
|
||||
|
||||
<hyvor-talk-comments website-id="9100" page-id="/learning/"></hyvor-talk-comments>
|
||||
|
||||
<div class="webmentions" id="webmentions">
|
||||
<h3 id="webmentions-2">Webmentions</h3>
|
||||
|
||||
|
||||
<p>No replies yet.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</heading-anchors>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<p><em>Built with <a href="https://www.11ty.dev/">Eleventy v3.1.0</a>. All content <a href="https://creativecommons.org/licenses/by/4.0/deed.en">CC BY 4.0</a> if you're human.</em></p><p></p>
|
||||
</footer>
|
||||
|
||||
<script type="module" src="/dist/rJ3_G-2ArF.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
pagefind/fragment/en_28815ac.pf_fragment
Normal file
BIN
pagefind/fragment/en_28815ac.pf_fragment
Normal file
Binary file not shown.
BIN
pagefind/fragment/en_3d6a978.pf_fragment
Normal file
BIN
pagefind/fragment/en_3d6a978.pf_fragment
Normal file
Binary file not shown.
BIN
pagefind/fragment/en_50f7a25.pf_fragment
Normal file
BIN
pagefind/fragment/en_50f7a25.pf_fragment
Normal file
Binary file not shown.
BIN
pagefind/fragment/en_59aebaf.pf_fragment
Normal file
BIN
pagefind/fragment/en_59aebaf.pf_fragment
Normal file
Binary file not shown.
BIN
pagefind/fragment/en_a9188dc.pf_fragment
Normal file
BIN
pagefind/fragment/en_a9188dc.pf_fragment
Normal file
Binary file not shown.
BIN
pagefind/fragment/en_ea3f4b3.pf_fragment
Normal file
BIN
pagefind/fragment/en_ea3f4b3.pf_fragment
Normal file
Binary file not shown.
BIN
pagefind/fragment/en_ff3168e.pf_fragment
Normal file
BIN
pagefind/fragment/en_ff3168e.pf_fragment
Normal file
Binary file not shown.
BIN
pagefind/index/en_1110f74.pf_index
Normal file
BIN
pagefind/index/en_1110f74.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_11686c6.pf_index
Normal file
BIN
pagefind/index/en_11686c6.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_15273a8.pf_index
Normal file
BIN
pagefind/index/en_15273a8.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_184ecc9.pf_index
Normal file
BIN
pagefind/index/en_184ecc9.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_2420338.pf_index
Normal file
BIN
pagefind/index/en_2420338.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_2a44397.pf_index
Normal file
BIN
pagefind/index/en_2a44397.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_2a63239.pf_index
Normal file
BIN
pagefind/index/en_2a63239.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_2bfb174.pf_index
Normal file
BIN
pagefind/index/en_2bfb174.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_2eed637.pf_index
Normal file
BIN
pagefind/index/en_2eed637.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_2fafc2e.pf_index
Normal file
BIN
pagefind/index/en_2fafc2e.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_46e818b.pf_index
Normal file
BIN
pagefind/index/en_46e818b.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_4c36a0d.pf_index
Normal file
BIN
pagefind/index/en_4c36a0d.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_4edd5a2.pf_index
Normal file
BIN
pagefind/index/en_4edd5a2.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_5460b3f.pf_index
Normal file
BIN
pagefind/index/en_5460b3f.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_54a08a3.pf_index
Normal file
BIN
pagefind/index/en_54a08a3.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_5ceb6a7.pf_index
Normal file
BIN
pagefind/index/en_5ceb6a7.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_5ea88e3.pf_index
Normal file
BIN
pagefind/index/en_5ea88e3.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_5f8a746.pf_index
Normal file
BIN
pagefind/index/en_5f8a746.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_605eeb3.pf_index
Normal file
BIN
pagefind/index/en_605eeb3.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_60fadac.pf_index
Normal file
BIN
pagefind/index/en_60fadac.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_63a5787.pf_index
Normal file
BIN
pagefind/index/en_63a5787.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_642cebc.pf_index
Normal file
BIN
pagefind/index/en_642cebc.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_6f26e05.pf_index
Normal file
BIN
pagefind/index/en_6f26e05.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_7331f42.pf_index
Normal file
BIN
pagefind/index/en_7331f42.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_78bddde.pf_index
Normal file
BIN
pagefind/index/en_78bddde.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_83b7532.pf_index
Normal file
BIN
pagefind/index/en_83b7532.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_85eacf4.pf_index
Normal file
BIN
pagefind/index/en_85eacf4.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_8831574.pf_index
Normal file
BIN
pagefind/index/en_8831574.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_8910b94.pf_index
Normal file
BIN
pagefind/index/en_8910b94.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_9250bae.pf_index
Normal file
BIN
pagefind/index/en_9250bae.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_92b3d01.pf_index
Normal file
BIN
pagefind/index/en_92b3d01.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_959118d.pf_index
Normal file
BIN
pagefind/index/en_959118d.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_acfc982.pf_index
Normal file
BIN
pagefind/index/en_acfc982.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_adcb82c.pf_index
Normal file
BIN
pagefind/index/en_adcb82c.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_b0b8f19.pf_index
Normal file
BIN
pagefind/index/en_b0b8f19.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_b3855bc.pf_index
Normal file
BIN
pagefind/index/en_b3855bc.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_b7f468e.pf_index
Normal file
BIN
pagefind/index/en_b7f468e.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_b9cae13.pf_index
Normal file
BIN
pagefind/index/en_b9cae13.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_bad52db.pf_index
Normal file
BIN
pagefind/index/en_bad52db.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_bb7b443.pf_index
Normal file
BIN
pagefind/index/en_bb7b443.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_bbc0fa1.pf_index
Normal file
BIN
pagefind/index/en_bbc0fa1.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_bc6bf4b.pf_index
Normal file
BIN
pagefind/index/en_bc6bf4b.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_bcfcfed.pf_index
Normal file
BIN
pagefind/index/en_bcfcfed.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_bed42db.pf_index
Normal file
BIN
pagefind/index/en_bed42db.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_bf279fd.pf_index
Normal file
BIN
pagefind/index/en_bf279fd.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_c1a3597.pf_index
Normal file
BIN
pagefind/index/en_c1a3597.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_c358392.pf_index
Normal file
BIN
pagefind/index/en_c358392.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_c44e817.pf_index
Normal file
BIN
pagefind/index/en_c44e817.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_c7bb94e.pf_index
Normal file
BIN
pagefind/index/en_c7bb94e.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_c97a26c.pf_index
Normal file
BIN
pagefind/index/en_c97a26c.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_cb841b8.pf_index
Normal file
BIN
pagefind/index/en_cb841b8.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_cbc2e82.pf_index
Normal file
BIN
pagefind/index/en_cbc2e82.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_d285767.pf_index
Normal file
BIN
pagefind/index/en_d285767.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_d2e3bd0.pf_index
Normal file
BIN
pagefind/index/en_d2e3bd0.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_d8b4d6e.pf_index
Normal file
BIN
pagefind/index/en_d8b4d6e.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_e03aa00.pf_index
Normal file
BIN
pagefind/index/en_e03aa00.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_e0a0a66.pf_index
Normal file
BIN
pagefind/index/en_e0a0a66.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_e82fe4a.pf_index
Normal file
BIN
pagefind/index/en_e82fe4a.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_e9ce914.pf_index
Normal file
BIN
pagefind/index/en_e9ce914.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_eccd2cc.pf_index
Normal file
BIN
pagefind/index/en_eccd2cc.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_f59feaf.pf_index
Normal file
BIN
pagefind/index/en_f59feaf.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_fdceba3.pf_index
Normal file
BIN
pagefind/index/en_fdceba3.pf_index
Normal file
Binary file not shown.
BIN
pagefind/index/en_fe7194f.pf_index
Normal file
BIN
pagefind/index/en_fe7194f.pf_index
Normal file
Binary file not shown.
@@ -1 +1 @@
|
||||
{"version":"1.3.0","languages":{"en":{"hash":"en_d2d4c8a118","wasm":"en","page_count":1880}}}
|
||||
{"version":"1.4.0","languages":{"en":{"hash":"en_5e61cad585","wasm":"en","page_count":1881}},"include_characters":["_","‿","⁀","⁔","︳","︴","﹍","﹎","﹏","_"]}
|
||||
@@ -29,7 +29,7 @@ var require_mark = __commonJS({
|
||||
"node_modules/mark.js/dist/mark.js"(exports, module) {
|
||||
(function(global, factory) {
|
||||
typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.Mark = factory();
|
||||
})(exports, function() {
|
||||
})(exports, (function() {
|
||||
"use strict";
|
||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) {
|
||||
return typeof obj;
|
||||
@@ -41,25 +41,22 @@ var require_mark = __commonJS({
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
};
|
||||
var createClass = function() {
|
||||
var createClass = /* @__PURE__ */ (function() {
|
||||
function defineProperties(target, props) {
|
||||
for (var i = 0; i < props.length; i++) {
|
||||
var descriptor = props[i];
|
||||
descriptor.enumerable = descriptor.enumerable || false;
|
||||
descriptor.configurable = true;
|
||||
if ("value" in descriptor)
|
||||
descriptor.writable = true;
|
||||
if ("value" in descriptor) descriptor.writable = true;
|
||||
Object.defineProperty(target, descriptor.key, descriptor);
|
||||
}
|
||||
}
|
||||
return function(Constructor, protoProps, staticProps) {
|
||||
if (protoProps)
|
||||
defineProperties(Constructor.prototype, protoProps);
|
||||
if (staticProps)
|
||||
defineProperties(Constructor, staticProps);
|
||||
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
||||
if (staticProps) defineProperties(Constructor, staticProps);
|
||||
return Constructor;
|
||||
};
|
||||
}();
|
||||
})();
|
||||
var _extends = Object.assign || function(target) {
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
@@ -71,7 +68,7 @@ var require_mark = __commonJS({
|
||||
}
|
||||
return target;
|
||||
};
|
||||
var DOMIterator = function() {
|
||||
var DOMIterator = (function() {
|
||||
function DOMIterator2(ctx) {
|
||||
var iframes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
|
||||
var exclude = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : [];
|
||||
@@ -381,8 +378,8 @@ var require_mark = __commonJS({
|
||||
}
|
||||
}]);
|
||||
return DOMIterator2;
|
||||
}();
|
||||
var Mark$1 = function() {
|
||||
})();
|
||||
var Mark$1 = (function() {
|
||||
function Mark3(ctx) {
|
||||
classCallCheck(this, Mark3);
|
||||
this.ctx = ctx;
|
||||
@@ -962,7 +959,7 @@ var require_mark = __commonJS({
|
||||
}
|
||||
}]);
|
||||
return Mark3;
|
||||
}();
|
||||
})();
|
||||
function Mark2(ctx) {
|
||||
var _this = this;
|
||||
var instance = new Mark$1(ctx);
|
||||
@@ -985,7 +982,7 @@ var require_mark = __commonJS({
|
||||
return this;
|
||||
}
|
||||
return Mark2;
|
||||
});
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1024,8 +1021,7 @@ var PagefindHighlight = class {
|
||||
}
|
||||
// Inline styles might be too hard to override
|
||||
addHighlightStyles(className) {
|
||||
if (!className)
|
||||
return;
|
||||
if (!className) return;
|
||||
const styleElement = document.createElement("style");
|
||||
styleElement.innerText = `:where(.${className}) { background-color: yellow; color: black; }`;
|
||||
document.head.appendChild(styleElement);
|
||||
@@ -1046,8 +1042,7 @@ var PagefindHighlight = class {
|
||||
}
|
||||
highlight() {
|
||||
const params = this.getHighlightParams(this.highlightParam);
|
||||
if (!params || params.length === 0)
|
||||
return;
|
||||
if (!params || params.length === 0) return;
|
||||
this.addStyles && this.addHighlightStyles(this.markOptions.className);
|
||||
const markInstance = this.createMarkInstance();
|
||||
this.markText(markInstance, params);
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
pagefind/pagefind.en_5e61cad585.pf_meta
Normal file
BIN
pagefind/pagefind.en_5e61cad585.pf_meta
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -9081,8 +9081,13 @@
|
||||
<lastmod>2025-08-31</lastmod>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfitz.info/learning/</loc>
|
||||
<lastmod>2025-09-07</lastmod>
|
||||
</url>
|
||||
|
||||
<url>
|
||||
<loc>https://kfitz.info/feed/feed.xml</loc>
|
||||
<lastmod>2025-08-31</lastmod>
|
||||
<lastmod>2025-09-07</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
|
||||
@@ -672,7 +672,7 @@ hr.new {
|
||||
<p>In my current setup, I have Nginx Proxy Manager running in a container on my Proxmox, with a DNS entry set up pointing my IP address to it. Then I have a proxy host pointing to another container in which I'm running Gitea, and I'm successfully pushing and pulling code for this site to and from it.</p>
|
||||
<p>Next up is setting the actual hosting of this site and a few others that I've been wanting to pull in house. It's nice to see the end of the network architecture phase of this project near and to have the creative work of writing and building opening up in front of me at last!</p>
|
||||
|
||||
<ul class="links-nextprev"><li class="links-nextprev-prev">← Previous<br> <a href="/longevity/">Longevity and Sustainability</a></li>
|
||||
<ul class="links-nextprev"><li class="links-nextprev-prev">← Previous<br> <a href="/longevity/">Longevity and Sustainability</a></li><li class="links-nextprev-next">Next →<br><a href="/learning/">Learning</a></li>
|
||||
</ul>
|
||||
|
||||
<hyvor-talk-comments website-id="9100" page-id="/success-at-last/"></hyvor-talk-comments>
|
||||
@@ -685,8 +685,42 @@ hr.new {
|
||||
|
||||
|
||||
|
||||
<h4 id="1-like">1 Like</h4>
|
||||
<div class="webmentions__facepile">
|
||||
|
||||
|
||||
|
||||
<a class="h-card u-url link-u-exempt" href="https://bsky.app/profile/kfitz.info/post/3lxpqx2gyt427#liked_by_did:plc:hnpt7ns2lecdujegbi6qkqqm" target="_blank" rel="noopener noreferrer">
|
||||
|
||||
|
||||
|
||||
<img class="webmention__author__photo" src="https://avatars.webmention.io/cdn.bsky.app/82a7c56b51c6c0b537e5a0b9a8c2bc35fbf9c19e40f8b01ac39e96e2d88ee68a.jpg" alt="Martin Paul Eve" title="Martin Paul Eve" loading="lazy">
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<h4 id="1-repost">1 Repost</h4>
|
||||
<div class="webmentions__facepile">
|
||||
|
||||
|
||||
<a class="h-card u-url link-u-exempt" href="https://bsky.app/profile/kfitz.info/post/3lxpqx2gyt427#reposted_by_did:plc:hnpt7ns2lecdujegbi6qkqqm" target="_blank" rel="noopener noreferrer">
|
||||
|
||||
|
||||
|
||||
<img class="webmention__author__photo" src="https://avatars.webmention.io/cdn.bsky.app/82a7c56b51c6c0b537e5a0b9a8c2bc35fbf9c19e40f8b01ac39e96e2d88ee68a.jpg" alt="Martin Paul Eve" title="Martin Paul Eve" loading="lazy">
|
||||
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
|
||||
|
||||
<style>.postlist { counter-reset: start-from 56 }
|
||||
<style>.postlist { counter-reset: start-from 57 }
|
||||
/* This is an arbitrary CSS string added to the bundle */
|
||||
/* Defaults */
|
||||
@font-face {
|
||||
@@ -546,6 +546,11 @@ pre[class*="language-diff-"] {
|
||||
|
||||
<ol reversed="" class="postlist">
|
||||
|
||||
<li class="postlist-item">
|
||||
<a href="/learning/" class="postlist-link">Learning</a>
|
||||
<time class="postlist-date" datetime="2025-09-07">September 2025</time>
|
||||
</li>
|
||||
|
||||
<li class="postlist-item">
|
||||
<a href="/networking-continued/" class="postlist-link">Networking Continued</a>
|
||||
<time class="postlist-date" datetime="2025-08-09">August 2025</time>
|
||||
|
||||
Reference in New Issue
Block a user