From b7b903a48009a4b8f19fad7a5097f32f025718ec Mon Sep 17 00:00:00 2001 From: m1ka Date: Tue, 29 Sep 2026 10:20:31 +0200 Subject: [PATCH] a --- Makefile | 34 ++++++++++++++--------------- TODO | 7 +----- blog/data.tsv | 2 -- blog/helloworld.html | 31 -------------------------- colophon.html | 6 ++--- favicon.png | Bin 0 -> 29347 bytes feed.atom | 2 +- gallery/index.html | 15 ------------- include/stdfooter.html | 2 +- include/stdhead.html | 9 +++++++- include/stdnav.html | 7 +++--- kethel2/aggregate.c | 4 ++-- kethel2/mkpage.c | 2 +- macroblog/data.tsv | 2 ++ {blog => macroblog}/index.html | 0 {blog => macroblog}/item.html | 0 macroblog/kethel2.html | 33 ++++++++++++++++++++++++++++ {thoughts => microblog}/data.tsv | 2 +- {thoughts => microblog}/feed.html | 0 {thoughts => microblog}/index.html | 0 {thoughts => microblog}/item.html | 2 +- 21 files changed, 74 insertions(+), 86 deletions(-) delete mode 100644 blog/data.tsv delete mode 100644 blog/helloworld.html create mode 100644 favicon.png delete mode 100644 gallery/index.html create mode 100644 macroblog/data.tsv rename {blog => macroblog}/index.html (100%) rename {blog => macroblog}/item.html (100%) create mode 100644 macroblog/kethel2.html rename {thoughts => microblog}/data.tsv (61%) rename {thoughts => microblog}/feed.html (100%) rename {thoughts => microblog}/index.html (100%) rename {thoughts => microblog}/item.html (96%) diff --git a/Makefile b/Makefile index 89f6d7773a10a652eeee20f6a6af82538d1f3f1f..30d6c36b85f800a691df907b4ae86821e61b5639 100644 --- a/Makefile +++ b/Makefile @@ -3,9 +3,9 @@ CFLAGS=-Wall -Wextra -Werror -pedantic -O2 -std=c99 DEVSERVER='https://raw.githubusercontent.com/emikulic/darkhttpd/refs/heads/master/darkhttpd.c' -.PHONY: all serve pages static +.PHONY: all serve pages -all: mkpage aggregate pages +all: mkpage aggregate pages out/favicon.ico serve: all darkhttpd ./darkhttpd out @@ -25,12 +25,11 @@ aggregate: kethel2/aggregate.c $(CC) $(CFLAGS) -c kethel2/aggregate.c -o obj/aggregate.o $(CC) $(CFLAGS) obj/aggregate.o -o aggregate -# TODO: manage statics in a better way than `cp -r` -#static: -# cp -r static out/static +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/thoughts.html out/blog/index.html out/blog/helloworld.html out/feed.atom +pages: out/index.html out/colophon.html out/microblog.html out/macroblog/index.html out/macroblog/kethel2.html out/feed.atom out/index.html: index.html mkpage @mkdir -p out @@ -40,21 +39,22 @@ out/colophon.html: colophon.html mkpage @mkdir -p out ./mkpage colophon.html out/colophon.html -out/thoughts.html: thoughts/data.tsv thoughts/item.html thoughts/index.html aggregate mkpage +out/microblog.html: microblog/data.tsv microblog/item.html microblog/index.html aggregate mkpage @mkdir -p out obj - ./aggregate thoughts/data.tsv thoughts/item.html thoughts/index.html obj/thoughts.o.html - ./mkpage obj/thoughts.o.html out/thoughts.html + ./aggregate microblog/data.tsv microblog/item.html microblog/index.html obj/microblog.o.html + ./mkpage obj/microblog.o.html out/microblog.html -out/blog/index.html: blog/data.tsv blog/index.html blog/item.html aggregate mkpage +out/macroblog/index.html: macroblog/data.tsv macroblog/index.html macroblog/item.html aggregate mkpage @mkdir -p out obj - ./aggregate blog/data.tsv blog/item.html blog/index.html obj/blogroll.o.html - ./mkpage obj/blogroll.o.html out/blog/index.html + @mkdir -p out/macroblog + ./aggregate macroblog/data.tsv macroblog/item.html macroblog/index.html obj/blogroll.o.html + ./mkpage obj/blogroll.o.html out/macroblog/index.html -out/blog/helloworld.html: blog/helloworld.html mkpage - @mkdir -p out - ./mkpage blog/helloworld.html out/blog/helloworld.html +out/macroblog/kethel2.html: macroblog/kethel2.html mkpage + @mkdir -p out/macroblog + ./mkpage macroblog/kethel2.html out/macroblog/kethel2.html -out/feed.atom: thoughts/data.tsv +out/feed.atom: microblog/data.tsv @mkdir -p out obj - ./aggregate thoughts/data.tsv thoughts/feed.html NONE obj/thoughts.o.atom + ./aggregate microblog/data.tsv microblog/feed.html NONE obj/microblog.o.atom ./mkpage feed.atom out/feed.atom diff --git a/TODO b/TODO index 1d7218a3d550a9fdcfc141763196d8d904fb9d8c..fb9703c439335ce9409eedc5623ccb17b715c02c 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,6 @@ - media reviews n so -- gallery -- atom feeds +- atom feeds (microblog: done, todo macro & reviews); atom feed is NEARLYYY done for /microblog, /macroblog still needs some work /reviews is generally a more specialised form of blog, maybe cool stats? -steam-esque reviews as in REC/NREC. - -/gallery more as a "media lookup", with all s from blogposts linking to here -semi-wikimedia-esque diff --git a/blog/data.tsv b/blog/data.tsv deleted file mode 100644 index 0e631162c6a38fa370a37785ad8645669010d6c8..0000000000000000000000000000000000000000 --- a/blog/data.tsv +++ /dev/null @@ -1,2 +0,0 @@ -rowid bdate LINK TITLE SUMMARY -0 2026-09-15T16:39:46+0200 /blog/helloworld.html Hello, world! Testing blog post :3 diff --git a/blog/helloworld.html b/blog/helloworld.html deleted file mode 100644 index f48f8e437412ed53db8bbc636e1c5b678559db4d..0000000000000000000000000000000000000000 --- a/blog/helloworld.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - blog: hello, world! - m1kadev.nl - - - - -
-

hello, world!

-

- Testing content bli bla blu -

- Chud, with a 'billions must try' T-shirt - facing the camera, and showing one of his first drawings. Behind him, a monitor which displays a manuscript of 'Chud's tool story'. -

- Why, though? -

-

- Why not? -

-
-
- - - diff --git a/colophon.html b/colophon.html index f660875e8fd2be8743ef7eb1ae0acea0724522c4..e2a3d093ef3d7c67ffa47a8ef0a1d6f5141ecf54 100644 --- a/colophon.html +++ b/colophon.html @@ -20,14 +20,14 @@

The current iteration of m1kadev.nl is an experiment, to see how far i could get by using - as little javascript and css, and with as little intermediate steps as possible, while still - having a functional site + as little javascript and css, and with as little intermediate steps as possible, while still + having a functional site.

Used technologies:


diff --git a/favicon.png b/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc140de471c08548372c426f4352b5935bbeef1 GIT binary patch literal 29347 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 - + diff --git a/gallery/index.html b/gallery/index.html deleted file mode 100644 index 632447a0e827ccda42556197ae0e19455bc1fedf..0000000000000000000000000000000000000000 --- a/gallery/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - PAGETITLE - m1kadev.nl - - - - -
-

your content here

-
- - - diff --git a/include/stdfooter.html b/include/stdfooter.html index 56996b76e8764a928b598a1c96a71a8488f87c95..ac789cdcac9ffd84edc758b480feb7262856e4b7 100644 --- a/include/stdfooter.html +++ b/include/stdfooter.html @@ -1,3 +1,3 @@

Built with make and 2 C programs. colophon.

-
+ \ No newline at end of file diff --git a/include/stdhead.html b/include/stdhead.html index eb2bf5b98ad44a79b4303324dc56fc4ae875f03b..07d0558ee4c82f66b1d05b398918b32ffe3c66e1 100644 --- a/include/stdhead.html +++ b/include/stdhead.html @@ -12,6 +12,13 @@ a { } a:visited { font-style: initial; - color: #0000ee; + color: #ee41b4; +} + +@media (prefers-color-scheme: dark) { + html { + background-color: #212121; + color: #F5F5F5; + } } diff --git a/include/stdnav.html b/include/stdnav.html index 150f4528512af65f04554decf82ee3a242e6e7ca..5ea1b011c866acd12ed245bed390a35d73cdd222 100644 --- a/include/stdnav.html +++ b/include/stdnav.html @@ -3,10 +3,9 @@ / diff --git a/kethel2/aggregate.c b/kethel2/aggregate.c index dda915eb899149edba2c9d3e6309a6e2ceac6830..86ff508519678b07c454ad6187c9b136382262d0 100644 --- a/kethel2/aggregate.c +++ b/kethel2/aggregate.c @@ -113,7 +113,7 @@ void write_item_data(char* restrict row, const char* restrict template, FILE* ou /// 2. a schema, usually a

tag with replacers for csv items with idx > 0 int main(int argc, char* argv[]) { if (argc <= 4) { - fputs("usage: aggregate \n", stderr); + fputs("usage: aggregate \n", stderr); return -1; } @@ -124,7 +124,7 @@ int main(int argc, char* argv[]) { char buf[512]; if (strncmp(argv[3], "NONE", strlen("NONE")) != 0) { - FILE* index = fopen(argv[3], "r"); + index = fopen(argv[3], "r"); while (fgets(buf, sizeof(buf), index) != NULL) { if (strncmp(buf, " + blog: kethel/2 - m1kadev.nl + + + + +

+

Kethel/2: A high level overview of a low-level SSG

+

+ I've been meaning to rewrite my old elixir-based SSG for a newer, and easier to set up alternative. + So, what language is the most portable, has universal support across linux distributions? + ISO/IEC 9899:1999, or The C Programming Language - of course! +

+

+ Kethel isn't a perfect SSG by any means; it sometimes just writes garbled data to the output HTML fil + 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 + strncmp "parser". Yet, it still works!
+ So, I'd like to explain some design decisions behind Kethel, and convince YOU to use less CSS in your website! +

+

aggregate.c, and the solution to index page generation

+

+ The kethel2 workflow is heavily inspired by my experiences with make, linking errors, and C object files. + +

+
+
+ + + diff --git a/thoughts/data.tsv b/microblog/data.tsv similarity index 61% rename from thoughts/data.tsv rename to microblog/data.tsv index 7b956ed51e1dfa3b842dc6ddfc81856996794651..e49b5767680298aba38d9bdf7ddee26b7c7cc08b 100644 --- a/thoughts/data.tsv +++ b/microblog/data.tsv @@ -1,2 +1,2 @@ thought bdate BODY AUTHOR -0 2026-09-15T18:31:15+02:00 we always call it the 'fridge',, Howevere, why do we not call outside the 'warmdge' ? mika +0 2026-09-15T18:31:15+02:00 we always call it the 'fridge',, Howevere, why do we not call outside the 'warmdge' ? mika, diff --git a/thoughts/feed.html b/microblog/feed.html similarity index 100% rename from thoughts/feed.html rename to microblog/feed.html diff --git a/thoughts/index.html b/microblog/index.html similarity index 100% rename from thoughts/index.html rename to microblog/index.html diff --git a/thoughts/item.html b/microblog/item.html similarity index 96% rename from thoughts/item.html rename to microblog/item.html index 06af2fab5f1c78d516794785ead8a45f9a5a240f..680c386cfb4b03b2369365c308ba5f4f24ce3356 100644 --- a/thoughts/item.html +++ b/microblog/item.html @@ -4,7 +4,7 @@
-, at +at