~mika/kethel2

afb16cd883eff74d9dc6d0b021b0005f30c9a06b — m1ka 26 days ago d49e46c
NEARLLYYY done for prod

just need to finalise some last blogpost phrasing, and finally add reviews.
M Makefile => Makefile +6 -1
@@ 29,7 29,12 @@ out/favicon.ico: favicon.png
	ffmpeg -y -i favicon.png out/favicon.ico

# list of all pages
pages: out/index.html out/colophon.html out/microblog.html out/macroblog/index.html out/macroblog/kethel2.html out/feed.atom
pages: out/index.html out/colophon.html out/microblog.html out/seealso.html \
	out/macroblog/index.html out/macroblog/kethel2.html out/feed.atom

out/seealso.html: seealso.html
	@mkdir -p out
	./mkpage seealso.html out/seealso.html

out/index.html: index.html mkpage
	@mkdir -p out

M include/stdhead.html => include/stdhead.html +4 -0
@@ 2,6 2,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<style>
p {
    font-size: 16px;
}
blockquote { margin: 1em 0; }
figcaption {
  font-style: italic;


@@ 9,6 12,7 @@ figcaption {
}
a {
    font-style: italic;
    color: #ee41b4;
}
a:visited {
    font-style: initial;

M include/stdnav.html => include/stdnav.html +1 -0
@@ 6,6 6,7 @@
        <a href="/macroblog/index.html">macroblog</a> |
        <a href="/microblog.html">microblog</a> |
        <a href="/review/index.html">review</a> |
        <a href="/seealso.html">see also</a> |
        <a href="/colophon.html">colophon</a>
    </nav>
</header>

M index.html => index.html +2 -2
@@ 10,13 10,13 @@
        <main>
            <h1>
                Welcome, sit down and
                <a href="https://www.rfc-editor.org/info/rfc7168/#section-2.1" >grab a <code>BREW</code></a>!
                <a href="https://www.rfc-editor.org/info/rfc7168/#section-2.1">grab a <code>BREW</code></a>!
            </h1>

            <p>
                I'm currently in my exam year of highschool
                (<abbr title="(Dutch) Pre-university Physics/Biology">VWO-NT/NG</abbr>).
                However, this hasn't stopped me from <a href="/thoughts.html">shitposting on main</a>, <a href="/blog/index.html">vagueposting on main</a>,
                However, this hasn't stopped me from <a href="/microblog.html">shitposting on main</a>, <a href="/macroblog/index.html">vagueposting on main</a>,
                and <a href="/review/index.html">livetweeting about the latest game/series/<span title="in american that's movie">film</span></a> i've watched.
            </p>


M kethel2/aggregate.c => kethel2/aggregate.c +0 -1
@@ 1,4 1,3 @@
#include <_stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

M macroblog/index.html => macroblog/index.html +3 -3
@@ 2,15 2,15 @@
<html lang="en">
    <head>
<!--LOAD include/stdhead.html -->
        <title>blogroll - m1kadev.nl</title>
        <title>blogposts - m1kadev.nl</title>
    </head>

    <body>
<!--LOAD include/stdnav.html -->
        <main>
            <h1>blogroll</h1>
            <h1>blogposts!</h1>
            <p>
                <em lang="fr">Voici, mes amies</em>, my <em lang="fr">assorti des essais</em>.
                tl;dr: i hate computers, and they should teach <a href="https://en.wikipedia.org/wiki/Dada">dada</a> in every SWE and CS class
            </p>
            <nav>
<!-- PUT -->

M macroblog/kethel2.html => macroblog/kethel2.html +47 -4
@@ 19,13 19,56 @@
                if a template or TSV ends with a newline, is probably vulnerable to several buffer overflow attacks,
                as no bounds checking is implemented at all for the templates, and treats HTML as plain text, with only a
                <code>strncmp</code> "parser". Yet, it still works! <br />
                So, I'd like to explain some design decisions behind Kethel, and convince YOU to use less CSS in your website!
                So, I'd like to explain some design decisions behind Kethel/2, and convince YOU to use less CSS in your website!
            </p>
            <h2><code>aggregate.c</code>, and the solution to index page generation</h2>
            <h2><code>aggregate</code>, and my "solution" to index page generation</h2>
            <p>
                The kethel2 workflow is heavily inspired by my experiences with <code>make</code>, linking errors, and C object files.

                Aggregate was the 2nd program I wrote for my site, which fills the spot of a 'compiler', if we're following
                the compiler/linker metaphor. The RSS feed generation for my site before was really iffy
                (<a href="https://www.rfc-editor.org/info/rfc822/">RFC822</a> and <a href="https://www.rfc-editor.org/info/rfc2822/">RFC2822</a> are to blame).
                I could definitely have switched to atom feeds instead of RSS in the original kethel, but i had better things to do with my time then
                refactor all my elixir code.
                <span>(this isnt an issue with elixir per se, but moreso that i didnt really wanna debug MY code every time i wanted to make a change
                    to my site, architecturally kethel1 kinda sucked)</span>
            </p>
            <p>
               The general idea with aggregate is that you provide a TSV file, with some free-form data, and aggregate could transform that into an index page,
               but also an atom <code>&lt;entry&gt;</code>, with proper tag uri support. Coming back to the first sentence about the 'compiler' metaphor,
               aggregate does not generate the final html, but only take the TSV and generate a <code>mkpage</code>-compatible 'object page'. Since I've
               only used C in this project, I already had an obj folder for intermediate output, so it was easy to just generate all the indexes, and
               various feed entries, and use <code>mkpage</code> as an <em>ersatz</em>-linker, to generate the final XML/HTML.
            </p>
            <h2>So, what is this <code>mkpage</code> all about then?</h2>
            <p>
                mkpage is the original program that orchestrated all HTML generation, inspired by PHP's "it's just html!" approach, and
                <a href="https://zed.dev/">my code editors</a> unwillingness to let me use unclosed tags in a template file. I chose to use simple HTML comments
                with some meaning, which I then decode in C.
            </p>
            <p>
                However, it quickly become clear that my linear-time no-seek approach to page generation wasnt really going to scale to, say,
                more than 2 pages in a directory. mkpage only supports 2 commands, <code>LOAD</code> and <code>STAMP</code>. <code>LOAD</code>
                takes a path, and puts the file's contents where the directive used to be.
                <code>STAMP</code> is used mostly for atom feed generation, but is generalised to work in most cases where you'd need a timestamp.
            </p>
            <p>
                Therefore, aggregate deals with most of the more complex parts of my websites build pipeline.
                Aggregate supports a lot more commands, compared to mkpage.
            </p>
            <ul>
                <li><code>ANCHOR</code> - generates a reproducible id for any content-item, another issue i was dealing with in kethel2 </li>
                <li><code>PUT</code> - pastes a tsv table value, verbatim, does still have some issues with newlines thought</li>
                <li><code>LINK</code> - generates a permalink to a (section of a) page, for my microblog this uses </li>
                <li><code>ATOM</code> - generates all atom metadata for an entry</li>
                <li><code>DATE</code> - pretty prints the date</li>
            </ul>
            <h2>So that's it, honestly</h2>
            <p>
                Besides some dependency modelling in make, this is all that Kethel2 comes with. I hope that you find some inspiration
                in my architectural choices here, and if not, i'll still keep enjoying my sub-halfsecond build times.
            </p>
            <figure>
                <blockquote><em>Merci d'avoir lu!</em></blockquote>
            </figure>
        </main>
	<hr>
<!--LOAD include/stdfooter.html -->

A seealso.html => seealso.html +40 -0
@@ 0,0 1,40 @@
<!DOCTYPE html>
<html lang="en">
    <head>
<!--LOAD include/stdhead.html -->
        <title>other links - m1kadev.nl</title>
        <style>
main>div {
    display: flex;
    width: max-content;
    gap: .5em;
}


        </style>
    </head>

    <body>
<!--LOAD include/stdnav.html -->
        <main>
            <h1>See also !!</h1>
            <div>
                <section>
                    <h2>meee :3</h2>
                    <ul>
                        <li>my <a href="https://letterboxd.com/m1kadev/">letterboxd</a></li>
                    </ul>
                </section>
                <hr />
                <section>
                    <h2>others</h2>
                    <ul>
                        <li>my <a href="https://letterboxd.com/m1kadev/">letterboxd</a></li>
                    </ul>
                </section>
            </div>
        </main>
        <hr />
<!--LOAD include/stdfooter.html -->
    </body>
</html>