Tag #sweetroll

I’ve been rewriting the engine that runs this website in the past few months..

and now, finally, unrelenting.technology runs on sweetroll2! Longer writeup coming, this is more of a test post.

Building a reader on your website is not too hard when you already have webmention processing (so you have code to parse entries and whatnot). So I kinda have one now. There’s even some Microsub support, but that’s not complete yet.

There’s a funny bug in my feed fetching though: OAuth for the open web is always on top of the feed (its published date gets set to feed fetch time every time) :D

I was wondering why replies sent with the Omnibear Micropub browser extension ended up with the URL /replies/ instead of the auto generated slug. Turns out Omnibear sends mp-slug="" and my server happily accepted the empty slug :D

I rewrote micro-panel (the “admin panel” for this site) from scratch with LitElement and no material design components. It’s really tiny now! The minified bundle is 57kb (and that still includes a code editor with syntax highlighting). The previous version was nearly 1mb.

Also, the new version is a bit simplified: no iframe mode, only cookie auth. And it doesn’t wrap the whole page in an element, it’s now more of a set of elements.

Check out this piece of code, by the way:

async close () {
  if ('animate' in this && 'finished' in Animation.prototype) {
    await this.animate({transform: ['none', 'translateY(100vh)']},
      {duration: 300, easing: 'ease-out'}).finished
  this.hidden = true

Finally made some updates to this website! On the surface, slightly refreshed design (single column). Under the hood, the Haskell part is now build with GHC 8.2 and the database is upgraded to Postgres 10.

Also, a new section: KnowledgeBase. It’s kinda like a “personal wiki” thing. Alphabetically sorted list of pages, WikiStyleTitles that are put into URLs without lowercasing, and these pages don’t end up on the front page.

So Amazon Lambda has a 6 MB limit on request (and response) size. Binary files have to be Base64 encoded (LOL) which makes the limit even SMALLER! So my micropub media endpoint chokes on full DSLR resolution photos. Yeah the "right way" is to have the API Gateway endpoint upload to S3, and the upload event trigger the Lambda processing which would download from S3, and use a separate Lambda for authentication on that endpoint… but I need the processed URLs in the response body. I need everything to happen in one request! How did AWS engineers not see that use case coming?!

Since 2017-02-01 I've been working on a big change to Sweetroll, the engine that powers this website, and today it's finally live, right here! (Also it's now on my newer VPS, hosted at prgmr and running HardenedBSD 11. The old one was FreeBSD 10 at DigitalOcean.)

tl;dr about the change: from one Haskell app powered by a Git+JSON store and embedded Duktape templates (lol) to two services (Haskell + Node.js) backed by Postgres. It's really cool. I'll be writing more documentation for it soon.

Added Pushover notifications to Sweetroll. It’s a JavaScript plugin that calls an HTTP request function provided from Haskell, because why not :-)

This day in “computers are terrible”: Sweetroll crashes after a few requests to the HTTP proxy… on my laptop with FreeBSD 11-CURRENT… when compiled as a static binary. I don’t think the same static binary ever crashed on my server with 10-RELEASE though. Anyway, removed the -static flag.

Now you can follow this website using an Atom feed reader. I guess that includes GNU social.

(And I can reply to tweets from this website.)

Updated the build of sweetroll on this website – now a better category system, a proxy for images in responses to avoid mixed content and prevent tracking, and a bunch of internal improvements are all LIVE!

(And right after I did this, an IndieWebCamp event live stream started! Seeing a lot of Windows 10 on the projector…)

(This post contains Haskell.)

Landed a couple pull requests (jwt, wai-app-static) that replace the deprecated cryptohash package with cryptonite, because having both as dependencies in sweetroll was terrible.

Also, turns out highlighting-kate has a pcre-light option, so now regex-pcre-builtin isn’t compiled into sweetroll as well. I wish pandoc had a build option to disable Lua script integration. Oh, and build options to disable formats! That would be great. I don’t need docx and epub support in my website.

Find-and-replace mistake I almost committed to Sweetroll: “category” → “dataegory” :D

Another facepalm moment: I didn’t verify the domain in Sweetroll’s token-endpoint. Fixed.

Receiving Webmentions should work now… (not deduplication or updating yet).