The Arsse

“The… what?” Yeah. You read that correctly. The Arsse is a project Jeff King and I have been working on. It is an RSS aggregator — in other words a means to self-host RSS feeds on your server. If anyone is familiar with Tiny Tiny RSS The Arsse is quite like the aggregator part of it. In fact, Tiny Tiny RSS is why The Arsse exists in the first place.

Origins

Both Jeff and I run our own private servers, and we have for quite a few years now. We have HTTP, mail, XMPP, and a bunch of other things running on our servers. The time came one day when he decided to put an RSS aggregator on his server. I usually just let him explore like that because he’ll figure it all out and then tell me how to do it. It’s a great working relationship — one beneficial to me in any case.

In his research he ran across Tiny Tiny RSS and seemed to like it. It had one caveat, however: it wouldn’t run with SQLite. We just need the software for one, maybe two users on our servers. Running an entire instance of P​ostgreSQL or M​ySQL is wasteful especially when it’s used for absolutely nothing else but storing a couple of feeds. It’s the software equivalent of buying an 18-wheeler to go grocery shopping. After digging around on the community forums he discovered that they had no intention of supporting SQLite. His thoughts were that it couldn’t be that difficult to implement it, so he went about it.

After a bit he had a few questions to ask. The responses were antagonistic to say the least. All he wanted to do was add in support for SQLite and was perfectly willing to do the work himself; all he got in return were jeers and insults. Immediately after the first response I was telling him, “Let’s just write one ourselves. You’ve been saying you want a coding project to work on; this is it.” He persisted because he was willing to prove to the asshole he’d do it. After digging into Tiny Tiny RSS’ code he realized he really was wasting his time as its code is a rat’s nest of a mess. He decided to go my route, and we now have something to show.

Okay, okay. That’s all fine and dandy, but why “The Arsse”? We both have a mutual friend that goes way back to our times of trying and failing to do an online webcomic around the turn of the century; we come to him anytime we need to name something. He just has a knack for this kind of thing. He’s also now a doctor (no he’s not a proctologist). Our intention was just to use something funny as the working title for the project and rename it later. The renaming part never happened. Originally it was just “Arsse” and was an acronym for something I forget now and doesn’t really matter anymore. The article before it was added quite recently. Good thing, too. When we looked to get the domain for it thearsse.com was available but oddly enough arsse.com wasn’t.

The Website

The Arsse’s website

The Arsse’s website was designed by me and is a simple one-pager. I thought since there wasn’t a lot of content yet to put up there I would have a bit of fun with it by fashioning a large vintage-looking logo in SVG. I tried to make it look like a late 1950’s or early 1960’s detergent packaging. To make it show that it is for an RSS server I put a subtle emphasis on the RSS part of “Arsse” by using a centerline just on those letters. Seeing as the name of the product evokes something unpleasant, the design would have a bigger pop by showing just the opposite: cleanliness.

Design from that era liked diagonals as a means to draw attention, so I decided to use them as dividers between the different sections. It is a bit tricky to create such a thing in CSS, so I thought I’d show it here. The effect is done by using a pseudo-element, absolute positioning, and a bit of geometry. The example below is SCSS, but it’s possible to do it manually with CSS. I just wanted my code to be resuable.

@mixin divider($angle: 1deg) {
    position: relative;
    z-index: 1;

    &::before {
        position: absolute;
        display: block;
        background-color: inherit;
        content: '';
        bottom: 0;

        @if $angle > 0 {
            // slope = tan(angle)
            // y2 = slope * (x2 - x1) + y1
            top: 0 - tan($angle) * 100vw;
        } @else {
            top: 0;
       }

       left: 0;
       right: 0;
       z-index: -1;
       transform-origin: top left;
       transform: skewY($angle);
       width: 100%;
       height: 100%;
    }
}
A SCSS mixin for the angled dividers on thearsse.com

What is going on here is when the angle is positive the skewing of the pseudo-element causes it to appear further down than it should be — exactly the height of the skew. If you think of it as a right triangle with the hypotenuse’s being the angled line, what we’d need to find is the height of the vertical leg so it can be moved upwards exactly that distance:

The “triangle” formed by the skewing of the divider pseudo-element

I have the angle because that is used in the transform itself, and if I set the origin at the top left point of the triangle the x coordinate of the one on the other side of the hypotenuse would be the width of the document. The width of the document isn’t constant, so the amount the divider needs to be moved upward is relative to the width of the viewport. There’s a CSS unit for that: vw. If you treat the top left point as (0, 0) and the right point’s x-coordinate as 100 (for 100vw) then calculating the vertical is easy… except SCSS doesn’t have trig functions. I use node-sass, so creating the tan custom function wasn’t difficult.

What’s Next?

Right now The Arsse is at a very early stage. Jeff is quite prolific with testing, so what is there works really well. The idea from the beginning was to make The Arsse compatible with multiple APIs. We needed to pick one to implement first. Tiny Tiny RSS would seem like the logical choice considering they were the reason this software exists in the first place, but the API is badly documented (and designed… for another day). After a bit of discussion we implemented NextCloud News 1.2 first. Tiny Tiny RSSAPI is next, though.

Since The Arsse is just an aggregator a web client at the very least is necessary. That’s on the drawing board, too. I am designing it out while discussing with Jeff how we should construct it. When there is more to show I’ll post here.


Please take a look at The Arsse at its website and if interested look at its code and contribute on our Gitea.