← Blog

Hello, World!

Hello, World!

Introduction

Welcome to my first blog post. My name is Stephen Szwiec, and I am a computational tool builder and Internet person. I have begun this blog for the following reasons:

  1. I tend to produce a lot of creative, technical output in a sporadic manner, which would otherwise go undocumented and therefore be unavailable to others. I hope that this blog will also help me to push my work out into the world in a more consistent basis.
  2. I produce a lot of work which is infrastructure for other work, but which is not itself a product. This blog is how I smuggle these methods to the outside world.
  3. The academic publishing cycle is quite frankly boring and unfulfilling.
  4. I would like to talk to people who are interested in the same things I am, and perhaps more importantly, operate in the same way, and to seek collaborators and friends. Please feel free to use the contact page.

I don't really post anywhere else, but I have a GitHub, and my ORCID is 0000-0003-2414-1118 for academic publishing.

I will be writing on a variety of topics, but I expect many of my posts will be project updates and post-mortems, tutorial posts on methods and tools I use or have developed, and more design-oriented posts. In addition, I hope to use this platform to talk a bit more about Internet subculture lore. I will also be using this blog to link-out to other work and provide commentary on it, and to share my thoughts on the world in general.

About Me

I believe the web is meant to be a place you can go to, rather than just an extension of Meatspace.

I am an Internet person based in North Dakota, where I work on high performance computing for researchers. My main hobbies include setting up DIY infrastructure for self-hosted services, Internet Volkskultur (especially imageboard culture,) and homebrewing. My interest in homebrewing is what initially spurred my interest in self-assembling chemistry.

I also research materials science using machine learning and quantum chemical methods. My main focus right now would be organic energetic materials and producing free and open research software to support their discovery.

I am somewhat skeptical of social media and the attention economy, and I am interested in exploring alternative models for online social interaction and community building which respect digital sovereignty.

This Blog

Yes! The thing you're reading. I hope it's fun.

This site is running on Hetzner and is a self-contained web-server running Redbean. The site is a hypermedia-driven application built with htmx to augment HTML with dynamic behavior. Everything else is written in Lua for scripting and templating, and SQLite for data storage. FullMoon was used as a minimal web framework to handle routing and request handling.

Features

  • Multi-platform support: Thanks to Redbean, this site can run and behave identically due to its single-file actually-portable executable format, allowing it to run on most modern operating systems without modification.
  • Hypermedia-driven design: The site is designed as a hypermedia-driven application, with dynamic behavior implemented using htmx to enhance the user experience without relying on client-side JavaScript frameworks. It works in lynx and other text-based browsers.
  • Markdown support: All posts are written in Markdown, which is rendered to HTML on the server using a Lua Markdown parser.
  • Tagging system: Posts can be tagged with multiple tags, which are used for categorization and navigation.
  • Search functionality: Users can search for posts by title, content, or tags.
  • Color scheme toggle: Users can toggle between light and dark color schemes, and a media block attempts to respect the user's system preferences by default. Shoutout to Solarized for the color scheme inspiration.

Quick tests with my browser showed a 659kB resource load into 4.9MB of heap. I have yet to do any performance optimizations, and know that rendering is blocking, so I expect that there is room for improvement. I hope to keep the site lightweight and fast, and I will be monitoring performance as I add features and content.

Current non-features

As a project post mortem, I would like to share some of the features that I considered implementing, but ultimately decided against for the MVP. These are features that I may add in the future, but which are not currently implemented:

  • mTLS-based Authentication: I considered using mutual TLS (mTLS) for authentication, which would allow me to authenticate my admin user without relying on passwords. However, Redbean's mTLS implementation is for all requests, rather than any specific route, so I would have to create a custom route handler to handle authentication, which would be a bit of a hack. For the MVP, I decided to implement password-based auth with Argon2d and a salted hash, which is OWASP recommended, but not nearly as cool.
  • TLSv1.3 support: Redbean does not support TLSv1.3, so the site is currently served over TLSv1.2. This situation will be monitored, and the site will be upgraded to TLSv1.3 when Redbean adds support for it. This is important, because TLSv1.2 does not support post-quantum cryptography, which is a concern for the long-term confidentiality of communications on the site (although I would be the only person using the authentication system, so this is totally a me problem, and not an us problem).
  • Full-text Search: SQLite3 supports full-text search (the FTS5 extension,) but the implementation within Redbean does not select it as a compile target for the default build. This means that the search functionality is currently implemented using a simple LIKE query, which may not be as efficient or effective as a full-text search implementation. For the MVP, this is sufficient, but I will have to use a custom build of Redbean with FTS5 support if I want to implement full-text search in the future.
  • RSS/Atom Feeds: The site does not currently support RSS or Atom feeds, which are common formats for syndicating content. This is a feature that may be added in the future to allow users to subscribe to updates from the blog.

Future Plans

I have a lot of ideas for features and improvements to the site, but I will be prioritizing content creation and consistency over feature development for the time being.

The files related to this website, including a tutorial for setting up a daemon, are available under a GPLv3 license, and provided at my blog repo. I welcome and encourage contributions, and I am happy to provide guidance and support for anyone who is interested in contributing to the project.