Infopost | 2023.11.05

Hunter S Thompson Fear and Loathing holding laptop

Three interesting posts from elsewhere on the indieweb:
And two arts and entertainment posts for a little variety:
There's a recurring theme of static site generators (SSGs), so I'll start with talking about my own.
Graphics on an SSG

Putting a photo or screenshot or gif on a webpage is easy. Doing more than one can get a little tricky - it's not really a technical challenge (unless you make it one) but more a matter of how to use real estate. Here's a brief history of my SSG's graphics widgets.

Static site generator triptych graphics widget surfer

It started with a polyptych. Triptychs are common art presentation styles that can show juxtapositions or - more relevant to me - sequences of frames (though they are almost always cascaded horizontally). Adding these to my early SSG amounted to a width check and placing the images in a table.

Static site generator gallery graphics widget

Then came the gallery of thumbnails. Centering and cropping the full images could have been accomplished in javascript and/or aggressive html/css but that's not my thing. Graphics are my thing, so with a little raster work I added the ability to create arbitrary-sized thumbnails for use in gallery widgets.

The initial thumbnailing implementation looked at contrast to automatically hone in on areas of interest. This worked well most of the time but a couple corner cases dicatated that I either use an off-the-shelf algorithm or, what I settled on, use a simple click + mousewheel to specify thumbnail dimensions when generating a new post. I probably have enough data to train a half-decent machine learning model to do this automatically.

Static site generator polyptych graphics widget Stray

Since the center of a thumbnail is probably the highest area of interest in an image, that center value can be used to crop the shot to a non-thumbnail size. And so horizontal polyptychs that stretch to the page width became a thing.

New widget

Triptychs are sometimes dictated by the content - e.g. three sequential frames of Shane on and off his board tells the story. Alternatively, cascaded images is a nice way to show downscaled previews that might or might not interest a reader. Since I'm occasionally a UI guy, I broke it down into the following use cases:
  1. "I want to see full res photos of everything on this subject because it interests me and I don't want to open new tabs to see full res." An example would be if there was a gallery of my nephew at a pumpkin patch - I'm in it for all the photos, just show them to me. For this I have the '[+]' slideshow view next to each month (it should probably also be available for each post).
  2. "I'm reading, but not sold on a subject, maybe something will catch my eye." E.g. I'm reading a post about bonds but the author also has some adorable dog pics, I might click through or I might want to keep reading about investing. Having an unintrustive graphics widget that highlights the best of the content is how I'd accomplish this.
  3. Finally, "I want to see photos on this subject, but let me see all of them with minimal scrolling". E.g. I'm looking for Halloween costume ideas, the thumbnails aren't detailed enough but the full size images don't have as much information density as something cropped and scaled.
Static site generator gallery widget photos

I took the horizontal polyptych widget and made it have rows. There was some greatest common multiple work to get a clean right edge but it wasn't as painful as getting the tiling working in the thumbnail gallery. The rows alternate even/odd so the channels should never line up. Each row can have 2-5 images, favoring 3 and 4 but with a composition that's randomly created through (quick) brute force. And the images can be sequential or randomized.
More good reads

Back in September I mentioned a couple of entertaining posts from a blog called Read Max. Or Max Read. Or whatever. Well here are two more good posts and then a bonus one from someone who decided web publishing might be fun.

Buzzfeed, Gawker, and the end of the 2010s

Read max 2010s post journalism

Max Read Buzzfeed and Gawker will be remembered in future movies and TV shows and novels as more than anything as symbols of a more-or-less lost decade, a privacy-flouting, social media-friendly ten years.

You know I'm something of a 20-teens cultural commentator myself. This post gave me those 2010s nostalgia feels - Buzzfeed was the punching bag of internet culture and the Gawker network (mostly io9, Kotaku, Jalopnik, and Consumerist) was a great place for almost-news. To its credit, I guess Buzzfeed briefly had a Pulitzer-winning journalism shop.

Max Read But the decade really kicked into gear around 2012, when Facebook, apparently motivated by jealousy over Twitter's popularity among journalists (and specifically the extent to which they were crediting Twitter with the Arab revolutions of 2011), opened up a fire hose of traffic to anyone willing to make their headlines sound like they'd been written by a dog, but a dog who'd been genetically/cybernetically manipulated to have the intelligence of a seventh grader, but was subsequently brain damaged in a lab accident, and was also on coke.

My life in the Telegram Bitcoin scam group chat of ghosts

Read Max scam analyst job number

Another two things I like: investing and scammers getting theirs. I also have some affection for Telegram because NCD often relays vatnik cope from Telegram channels. So I was naturally enthralled by Max's synopsis of being invited to a scam investor group.

What happened to blogging for the hell of it?

Whiona I consulted my friend Startpage.com with the obvious prompt: "blog post ideas."

What I got was a roaring cascade of capitalist buzzword swill:
  • 120 profitable blog niche ideas and how to pick the right one (Write what'll make you money!)

  • 50+ blog post ideas to drive traffic and increase followers (Get those numbers UP, baby!)

  • 60 blog post ideas to fill your content calendar (Gotta push out that ~content~ often enough for the algorithm!)

Oh man, this reminded me of Dr. Jigsaw's SEO tips.

Whiona I'm probably saying nothing new to anybody who's been on the blogging scene for some time, but as a newcomer who's just here to write creatively and have fun, it was a stark reminder of how corporate the web has become.

...

I'm sick of everything having to be a hustle now, even something personal like sharing our ramblings with strangers on the internet.

Say what you will about being old, it's refreshing to not know anyone who has a hustle or claims to be a sigma anything. On the subject of cynicism, I got to Whiona's post by way of Hacker News where the comment section was naturally full of snark, blog links, and Kagi smallweb mentions.

Whiona I really want to write about Baldur's Gate 3, how it compares to Bioware titles, and how my personal feelings on said titles have changed over the years-but it would be pretty silly to do so before I've finished Baldur's Gate 3. I'm 100+ hours in now and just barely got inside the city walls!
Smallweb, SSG, POSSE, etc.

Static site generator java code html
Gross, but necessary.

"What happened to blogging for the hell of it" is a good segue into some more interesting discussions from HN.

Why You Should Write Your Own Static Site Generator

Arne Bahlo [Friends talking about upgrading Next.js] made me think about the longevity and robustness of my website and so I decided I don't want to depend on other people's decisions and run after version upgrades I don't care about.

And even if your content is Markdown and media, almost everything around it needs to be updated when switching frameworks-sometimes even when upgrading.

Writing a bunch of web publishing code simply to avoid a deprecation rugpull isn't the most convincing of arguments but having hated the transition from Blogger and Flickr, I'm on board. It's worth mentioning that those very simple platforms aren't nearly as expansive as the Substacks and Wordpresses.

Arne Bahlo After contemplating to build something dynamic2 for search without JavaScript, I decided to stay with a static site. It's faster and you don't have to worry about security or stability. And of course I choose the best programming language on the planet, Rust (my beloved). Wait, come back, this is not a Rust post!

A static site generator mostly needs to do five things:
  1. Convert markdown to HTML

  2. Render HTML templates

  3. Compile CSS

  4. Generate RSS feeds

  5. Generate a sitemap

And of these you might not even need the last three. Surely your favourite programming language has a Markdown parser and a templating engine.

Arne's recipe makes writing an SSG seem simple and, in it's purest form, it really is that simple. I got by without rss or a sitemap for many years. Ingesting text and producing html can be solved with a nice, reliable, static library. But if it wasn't obvious from my widget polishing at the top of this post, I prefer a fully-featured SSG.

I wasn't enamoured with some of the HN commentary.

onli Blogs are the worst use case for a ssg and you should focus on writing first. It's the articles that make or break a blog, and you might actually want the comforts of a dynamic blog engine. Plus comments, trackbacks and pingbacks, so it is a real blog.

Where static site generators shine are websites that are not blogs. Especially when generated from a data source. Then you can tailor your ssg to the data source, update the data and run the generator to update the site.

Certainly content (not necessarily writing) is the most important aspect of web publishing but only the most time-constrained enthusiast needs to choose one over the other. And in the same way that any automation opens up one's availability to do other things, automated site generation can liberate time for writing.

I really don't get that second paragraph about generating a site from a data source, that's exactly how my SSG works. The text files and images constitute a data source, the SSG publishes the content with a healthy dose of meta information and logic.

Then there were these comments:

Linux-Fan I certainly learned to keep the featureset of such a program to a minimum in order to have a chance to "complete" and publish it.

hombre_fatal It's a procrastination time hole that mostly just distracts us from the harder, less concrete, less fun thing we supposedly set out to do in the first place. It keeps us from shipping real shit.

e.g. Quit dicking around with your SSG and write the damn blog post already. The hard part of writing something worth reading is not your tech stack.

What is it with the Hacker News commenters and not being able to manage their time? Oh, okay that tracks. This talk of 'shipping' and grinding reminds me of Whiona's dissatisfaction with the influencer mentality of the web.

Regardless, hombre_fatal forgets about a little friend we call Sunk Cost Fallacy; if I spent my weeknights coding a new site feature I'm not going to subject myself to the regret of having spent that time on unused code. Also:
But the real value of a custom SSG? Features.

Source. Yes, an SEO post about if image alt text matters does feature a screenshot with stretched dimensions.

It starts with implementing the stuff any web publishing tool would have - photo editing/labeling, galleries, logs integration. When I came across the Wordpress photo labeling tool a couple years ago, I was surprised by its similarity to my own.

But then when you realize you write about a lot of board games or video games, they should be their own semantic thing on the site rather than a generic tag. Or Erik asks, "hey remember that time we did that one thing, do you still have photos of that?" Or you realize you need a dive log.

A blog post is a very long and complex search query...

... to find fascinating people and make them route interesting stuff to your inbox
yCombLinks The writing is pretentious, but the post has several interesting insights.

No kidding.

Moving on from SSGs, a few months back I outlined how tag/text/symantic matching between sub-corporate sites could be a great substitute for the lack of search engine support for quality user content. This 2022 blog post linked from HN took the same concept in a slightly different direction:

Henrik Karlsson The more precise and niche the words I input, the better the internet would match me with people I could forge meaningful relationships with.

My first and second iterations compared rss feeds to my site, in effect finding blogs like mine. Henrik proposes using this method to find people like me.

From the comments section:

celeritascelery This makes me wonder if I should be writing on substack. I currently use a static site generator and host with netlify[1]. This is great because it is simple and I have complete control over the site. But at the same time I can't see when people visit my site and there is no comment section. I rely or external forums like HN, lobsters, and Reddit to have a discussion. And I have no way of knowing when my content gets shared because I can't see the traffic.

But my purpose of writing is the same as the authors, to find like minded people and have a discussion with them. It's kind of cure for intellectual loneliness.

[1] https://coredumped.dev/

I should say that traffic and referral information is available if your can get and parse logs from your host but there is a certain loneliness in the SSG life. The big publishing platforms provide a lot of social network-esque features, ones that Henrik might use to find his tribe:

Henrik Karlsson When writing in public, there is a common idea that you should make it accessible. This is a left over from mass media. Words addressed to a large and diverse set of people need to be simple and clear and free of jargon. It is valuable to write clearly of course, to a degree. Clear writing is clear thinking. But to make the content accessible? To cut digressions and obscure references to reduce the number of things people need to understand to make sense of your argument? Really?

That is against our purposes here. A blog post is a search query. You write to find your tribe; you write so they will know what kind of fascinating things they should route to your inbox. If you follow common wisdom, you will cut exactly the things that will help you find these people.

From the perspective of an indieweb discovery algorithm, peppering posts with jargon is a great way to identify similar content. But I would expect that for most, creating social circles is a secondary objective of web publishing.



Related - internal

Some posts from this site with similar content.

Post
2023.09.23

Small web

Kagi sees an opportunity to index the indieweb.
Post
2023.09.27

Enwebbed

Parsing RSS feeds to find peers.
Post
2023.12.20

Rim worlds

Visiting and connecting the fringes of the web.

Related - external

Risky click advisory: these links are produced algorithmically from a crawl of the subsurface web (and some select mainstream web). I haven't personally looked at them or checked them for quality, decency, or sanity. None of these links are promoted, sponsored, or affiliated with this site. For more information, see this post.

404ed
hswolff.com

Introducing Yarn

Note! Yarn has been renamed to ReptarHello everyone! I want to introduce you to my newest creation, Yarn!Yarn is a static site generator that I wrote. It was built due to my frustrations with the current static site generators available. I figured, Hey, it cant be that hard to write my own static
cdevroe.com

Building Tuff A static site generator just for me Colin Devroe

Just about a month ago, for some unknown and undoubtedly a sleep deprived reason, I began building my own static site generator (SSG). And I did it entirely wrong. This is that story. A sensible
404ed
aleksandrhovhannisyan.com

11ty: The Good, the Bad, and the... Possum? | Aleksandr Hovhannisyan

An in-depth review of 11ty, an extensible static site generator written in Node that supports a variety of template languages.

Created 2024.04 from an index of 203,266 pages.