From 8d17a31bd701d7b9c90c546b29f3bf9ffa4cc41f Mon Sep 17 00:00:00 2001 From: Collin Williams <96917990+bluedragon1221@users.noreply.github.com> Date: Thu, 11 Jun 2026 12:40:51 -0500 Subject: changes to article structure, wrote about ai --- article.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ forgejno.html | 16 ++++++---------- no_ai.html | 30 ++++++++++++++++++++++++++++++ prose.css | 1 + soplt.html | 19 +++++++++---------- style.css | 2 ++ toc.js | 49 ------------------------------------------------- writing.html | 1 + 8 files changed, 102 insertions(+), 69 deletions(-) create mode 100644 article.js create mode 100644 no_ai.html delete mode 100644 toc.js diff --git a/article.js b/article.js new file mode 100644 index 0000000..4818a3d --- /dev/null +++ b/article.js @@ -0,0 +1,53 @@ +function addTOC() { + var tocDiv = document.createElement("div"); + tocDiv.classList += "toc"; + var toc = document.createElement("ul"); + + document.body.querySelectorAll('h1, h2, h3, h4, h5, h6').forEach(heading => { + var link = document.createElement('a'); + link.setAttribute('href', '#'+heading.id.toLowerCase()); + link.textContent = heading.textContent; + + var li = document.createElement('li'); + li.appendChild(link); + + toc.appendChild(li); + }); + + tocDiv.append(toc); + document.body.prepend(tocDiv); + + var styleBlock = document.createElement("style"); + styleBlock.textContent = ` + .toc { + position: fixed; + width: 17rem; + top: 32px; + left: calc(50vw - 37.5ch - 20rem); + padding-right: 0.75rem; + z-index: 1; + + ul { + margin: 0; + padding-left: 1rem; + line-height: 1.4; + } + + li { + margin-bottom: 0.35rem; + font-size: 1.1rem; + } + } + + @media (max-width: 1000px) { + .toc { + display: none; + } + } + `; + document.head.append(styleBlock); +} + +document.addEventListener("DOMContentLoaded", () => { + addTOC() +}) \ No newline at end of file diff --git a/forgejno.html b/forgejno.html index e84d1a2..a8a970c 100644 --- a/forgejno.html +++ b/forgejno.html @@ -1,19 +1,15 @@ - - - - + + You don't need Forgejo - - - +
-

You Don't Need Forgejo

+

You don't need Forgejo

published May 3, 2026

-
+

People ditching @@ -63,7 +59,7 @@

Caddy

-

To complete the set up, add this block to the Caddyfile to serve cgit.

+

To complete the setup, add this block to the Caddyfile to serve cgit.

git.my.tld {
     @assets path /cgit.css /cgit.js /favicon.svg /robots.txt
     handle @assets {
diff --git a/no_ai.html b/no_ai.html
new file mode 100644
index 0000000..3a4cabe
--- /dev/null
+++ b/no_ai.html
@@ -0,0 +1,30 @@
+
+
+
+    Taking a break
+    
+    
+
+
+    
+

Prolonged access to LLMs is making me stupid. I can't code as fluently as I used to. (and I'm not the only one)

+

+ I experienced the drunkening power from the speed at which development is possible with Claude Code (I built an Emacs clone in a day; it was amazing). + But when the tokens ran out, I felt the overwhelming discomfort of not having Claude's help when starting a new project. That feeling was a wakeup call. +

+

+ At heart, I am a programmer. Not a manager, and not the CEO of a multi-million dollar corperation. I don't require ultimate productivity and perfection. + To me, what matters most is familiarity with the tools and techniques (languages, libraries, frameworks), and bossing around agents all day does not give me those skils. +

+ +

What this isn't

+

I don't hate LLMs. In fact, I still see them a very impressive tool! I love to see people building awesome things, and I think AI empowers more builders than any other piece of technology. I'm not "falling for the anti-AI hype"

+

People who believe that AI is the right tool for their workflow should keep using it. And who knows? Maybe I'll continue vibecoding in the future. I just don't think AI is the right tool for me, for now.

+ +

Taking a Break

+

So I'm taking a break. I'm uninstalling OpenCode and Pihole-ing ChatGPT. My programming language project this summer will be 0% vibecoded.

+

Is it a good idea? I don't even know. How long will it last? I'm not really sure.

+

All I know is that I never want to feel out of place without the help of an LLM ever again. And hopefully this is one way of achieving that.

+
+ + \ No newline at end of file diff --git a/prose.css b/prose.css index 0babb5e..9c812fd 100644 --- a/prose.css +++ b/prose.css @@ -1,4 +1,5 @@ @import url('https://fonts.googleapis.com/css2?family=Gelasio:ital,wght@0,400..700;1,400..700&display=swap'); +@import url('style.css'); .content { width: 100%; diff --git a/soplt.html b/soplt.html index c26608c..0835c4b 100644 --- a/soplt.html +++ b/soplt.html @@ -1,13 +1,9 @@ - + - - Summer of PLT - - - +
@@ -18,15 +14,16 @@

Looking for a summer coding project? Try making a programming language!

I think that every programmer, new or experienced, could benefit from understanding a little bit about how the languages they use daily actually work.

As such, this is my collection of resources that I used to teach myself a little bit of Programming Language Theory last summer, which concluded in my creation of CI lisp.

-

I'm planning on doing something similar this summer, so I figured I'd invite other people to try a 'Summer of PLT' too.

+

I'm planning on doing something similar this summer, so I figured I'd invite other people to try a 'Summer of PLT' too.

Disclaimer: I'm just a guy with no formal education in PLT. Like Daniel Fedorin said, I just love the field of programming languages.

Read a Book

- If you're new to the field of programming languages, my first piece of advice is READ CRAFTING INTERPRETERS! + If you're new to the field of programming languages, my first piece of advice is to read Crafting Interpreters! (or at least the first section, "A Treewalking Interpreter") In my opinion, there is no better way to break into the field of PLT than by reading Bob Nystrom's book on the subject: Crafting Interpreters. - There's also a free HTML version on his site if you don't feel like paying money.

+ There's also a free HTML version on his site if you don't feel like paying money. +

After that, I would suggest looking into Lisp.

@@ -38,9 +35,10 @@

Alternatively, you could consider going down the Emacs rabbit hole to teach yourself lisp. In the Emacs environment, you'll quickly gain proficiency with the parentheses, but you'll probably lose at least a few weeks in the process.

Theory-wise, I would recommend reading the original John McCarthy Lisp paper (be prepared for dense academic writing though): Recursive Functions of Symbolic Expressions and Their Computation by Machine.

+

Additionally, many suggest the book Structure and Interpretation of Computer Programs, which also includes some

+

The C2 lisp rant is also a fun read (but by no means required): Lost Ina Seaof Parentheses.

-

If you want more of a guided, handhold-y tutorial for making a lisp clone, I can only recommend mal - Make a Lisp. I personally have not gone through it, but I've heard good things.

Alternatively, ask an LLM to help you learn how programming languages work. Just make sure that you're actually learning, not just copying whatever it says to do. Try something like "Don't give me any code, just explain to me..."

@@ -58,6 +56,7 @@

Monadic IO

Also on the theory-heavy side, you could learn about Haskell's system for safe IO operations which use monads.

This paper on the subject (discovered on the Haskell wiki) is a pretty dense, but has all of the foundational ideas for Monadic IO in Haskell: Monadic I/O in Haskell 1.3.

+

The foundational ideas of Monads are well explained in Monads for functional programming by Phillip Wadler. I found this paper easier to understand than the prior one, and it gives you a great intuition for why Monads are cool. Definitely read this one!

Syntactic Sugar

diff --git a/style.css b/style.css index 13d21ff..0172983 100644 --- a/style.css +++ b/style.css @@ -16,6 +16,8 @@ body { justify-content: center; align-items: flex-start; padding-top: 2rem; + padding-left: 2rem; + padding-right: 2rem; } h1 { diff --git a/toc.js b/toc.js deleted file mode 100644 index 633088a..0000000 --- a/toc.js +++ /dev/null @@ -1,49 +0,0 @@ -document.addEventListener("DOMContentLoaded", () => { - var tocDiv = document.createElement("div"); - tocDiv.classList += "toc"; - var toc = document.createElement("ul"); - - document.body.querySelectorAll('h1, h2, h3, h4, h5, h6').forEach(heading => { - var link = document.createElement('a'); - link.setAttribute('href', '#'+heading.id.toLowerCase()); - link.textContent = heading.textContent; - - var li = document.createElement('li'); - li.appendChild(link); - - toc.appendChild(li); - }); - - tocDiv.append(toc); - document.body.prepend(tocDiv); - - var styleBlock = document.createElement("style"); - styleBlock.textContent = ` - .toc { - position: fixed; - width: 17rem; - top: 32px; - left: calc(50vw - 37.5ch - 20rem); - padding-right: 0.75rem; - z-index: 1; - - ul { - margin: 0; - padding-left: 1rem; - line-height: 1.4; - } - - li { - margin-bottom: 0.35rem; - font-size: 1.1rem; - } - } - - @media (max-width: 1000px) { - .toc { - display: none; - } - } - `; - document.head.append(styleBlock); -}) \ No newline at end of file diff --git a/writing.html b/writing.html index bceef66..ec1fe51 100644 --- a/writing.html +++ b/writing.html @@ -22,6 +22,7 @@