Read the latest posts from

from Third Spruce Tree On The Left

Dr. (it hurts to use that) Jordan Peterson.. notorious anti-LGBT+, transphobic, libertarian, incelphilic self-help psychology writer, bullshitter and speaker was accredited to practice Psychology in the province of Ontario, Canada.

not YES – As of 2024-02-01 – Still has a psychology license from the College of Psychologists of Ontario.


If you know any better, msg me on Mastodon at or email tezoatlipoca AT gmail.

Why does this matter?


Why do you hate Jordan Peterson?


Why is Jordan Peterson such a douchebag?

in progress. but he is such a huge asshole


from Third Spruce Tree On The Left

Lemme skip to how to find RSS URLS for * Youtube * Substack and Wordpress * Reddit * Medium * Videosift

It used to be, back in the day, that when you wanted to have a presence, a voice on the internet to show people stuff you had to have a website. And to do that, either you needed to have the computery skillz to setup your own webserver or pay people to do it. Or use a freemium hosting service like MySpace or Geocities (unrelated, go checkout, its back baby).

And then there was the problem of how do people find out when you add new shit to your website? If you were a newspaper, or a company or institution that had STUFF that people wanted to read, it was a bit easier. Chances are people would type www.yourdomain into their web browser manually or have it bookmarked, and they’d visit it every day or so, checking for new stuff. Apart from that the only way news and content spread on the internet was through:

  • someone else mentioned and linked the thing from their website
  • someone sent the link to you via email or over one of the early “chat” programs like ICQ, Microsoft/Yahoo/AIM messenger or the very early (and shitty but good for their times) real-time chat/voice over IP programs like Teamspeak or Skype (before Microsoft bought it and it sucked)
  • you saw the link in a newsgroup, email distribution list, IRC channel or a .plan update. Or a CGI/PHP bulletin board: think self-hosted micro-Reddit websites, one each for people playing certain games or who had foot fetishes; even the nazis; little self-contained bubble echo chambers.

Twittle or TubeTok didn’t exist with their bullshit algorithms so you would only discover something if someone sent it TO you, or you went to go find it.

So into this late 90s, early 2000s void of not getting news shoved into your face, arose RSS or Really Simple Syndication. Basically, anything that produced content, or would periodically produce new or updated content, could also publish an RSS feed. This feed would always exist at the same URL address, and all an interested reader on the internet would have to do to subscribe to that websites stream of very interesting stuff, would be to periodically poll that site’s RSS feed and see what’s new.

Here’s the main “all articles” RSS feed for the Toronto Star, found at

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
        <title> - RSS Results in news* of type article</title>
        <atom:link href=";t=article&amp;c=news*&amp;l=50&amp;s=start_time&amp;sd=desc" rel="self" type="application/rss+xml" />
        <description> - RSS Results
		in section(s) news*
		only for asset type(s) of article
        <generator>TNCMS 1.72.4</generator>

            <title>Libya says it suspended oil production at largest field after protesters forced its closure</title>
            <description>CAIRO (AP) — Production at Libya’s largest oil field was suspended Sunday, the country’s state-run oil company said, after protesters forced the facility to close over fuel shortages.</description>
            <pubDate>Sun, 07 Jan 2024 13:42:38 -0500</pubDate>
            <guid isPermaLink="false"></guid>
            <dc:creator>Samy Magdy The Associated Press</dc:creator>
            <enclosure url="" length="67488" type="image/jpeg" />

            <title>Third shooting in three days in Coquitlam, B.C., sends man to hospital</title>
            <description>COQUITLAM, B.C. - Mounties in Coquitlam, B.C., say a third shooting in as many days has left a man with life-threatening injuries.</description>
            <pubDate>Sun, 07 Jan 2024 13:20:41 -0500</pubDate>
            <guid isPermaLink="false"></guid>
            <dc:creator>The Canadian Press</dc:creator>
            <enclosure url="" length="182257" type="image/jpeg" />

At the top there’s some metadata about what type / format of RSS stream this is, then some metadata about the website including some self referencing info for the news reader application... and then individual items, one for each thing in the feed. Here’s one:

            <title>A dog shelter appeals for homes for its pups during a cold snap in Poland, and finds a warm welcome</title>
            <description>WARSAW, Poland (AP) — With a deep freeze approaching, an animal shelter in Krakow sent out an urgent appeal to people to adopt or at least temporarily shelter some of its dogs until the dangerous cold spell passes.</description>
            <pubDate>Sun, 07 Jan 2024 12:16:44 -0500</pubDate>
            <guid isPermaLink="false"></guid>
            <dc:creator>The Associated Press</dc:creator>
            <enclosure url="" length="213355" type="image/jpeg" />

Its got a title, a publication date and a description. Depending on the RSS feed, the content of the description could be a traditional news slug (i.e. a short summary or hook like description of the article to get you to click) or it could be the whole body of the article itself.

Here’s what that news article looks like in the news reader I use (yarr – Yet Another RSS Reader):

browser screenshot showing YARR - Yet Another News Reader - a 3 column view: list of RSS feeds, list of items or articles IN one of those feeds, and the content of one of those items

In the left I’ve got a list of all the RSS feeds I subscribe to, the center is the list of articles (or items) in one of those feeds and the right is the content. By default, the Toronto Star’s RSS feed only shows me the headline, byline and the slug. But if I click that Read Here button

closeup of the YARR interface showing the Read Here button

.. my newsreader goes and retrieves the content of the article and displays it here. Woot.

YARR screenshot showing how YARR has gone and retreived the full body content of the referenced article for display here, and not in the shitty website

Ok, sometimes this doesn’t get any pictures, but it DOES strip out all the cookie popups, ads, scripting and all the other bullshit. This also (usually) sidesteps any annoying paywalls. The behavior of this depends a lot on a) what newsreader you use and how it behaves b) the nature of the RSS feed and how content is published / linked to it by the content provider.

Well this is pretty cool. Why the hell don’t we get news this way now?

I dunno. The RSS feeds never went anywhere – any content publishing platform that has existed since oh, 1999 or so, has been capable of publishing RSS feeds. And unless the websites that use these platforms deliberately turn them off, they’ve always been there.. still are there.

I think between Yahoo/Google/Bing news “home pages” in your browser, and algorithms in Twitter and Facebook shoving news in our faces (or getting people in our social networks to SEND us stuff) we just fell out of practice of actively going to where the content is and curating our feeds ourselves. Its easy to zone out in front of the TV when there’s a steady drip of just-engaging-enough on the tube; same thing online; if what the algorithm shoves in your face is just engaging enough, we lose interest in finding out the really good stuff that takes a bit of work.

Subscribing to RSS feeds takes back that control. Read only what YOU want to read.

Ok this is nice and all but how do I read these RSS feeds?

Chances are you already have an app that does it. Every major email client made in the last 20 years has had RSS feed reading capabilities. e.g: – outlook: – thunderbird:

(not just these, almost everyone I can recall using has been able to to some degree: Forte, Eudora..)

RSS reader apps: Then, you have purpose built RSS reader applications of which I won’t even bother mentioning because I’m sure you can use a search engine/app store.

The problem with using standalone RSS reader apps or using your email client is that if you want to read RSS feed content on another device you have to copy/clone the news feeds that you subscribe to that device. (although there are OPML files which are used to export/import these) And then, you have to manually pick through what you’ve already read on the other device vs. this device. That leads us to:

RSS ‘Feed Aggregators’ services or apps that synchronize between devices: These apps or services let you subscribe to RSS feeds in one spot and read (and keep track of what you’ve read) across multiple devices. Some are websites, some are apps, some are browser plugins.

Again six seconds in any search engine will bring up dozens of these services, but some examples just off the top of my head are Feedly, Feeder, NewsBlur but there are tons of others.

The problem with these is that you gotta create an account and maybe have a subscription... or deal with ads. And you have to use their APP. Whatever happened to just using a web browser. What if I want to self-host my own? You can do that!

Self host your own RSS news aggregator

There are lots out there, and you can find them easily searching for self-hosted RSS aggregator. I’ve tried a few including: – FreshRSS - – TinyRSS -

.. and more from amongst others.

The problem I faced is that I just wanted something simple, single-user, doesn’t require a Docker/K8 container; reading the feeds could be done through a browser. AND, I want it served on a custom port. For one, a little security through obscurity, another I already run THIS WriteFreely site on 80 and 443, and I didn’t want to futz around with a reverse proxy – yet.


Yarr – Yet Another RSS Reader

get it:

You can run Yarr on a desktop – it then self-hosts at localhost:port and puts an icon down in your system tray that launches your browser to that address.

Or you can set it up as a linux service, which is what I have done.

(see below for that)

Where /How do I find RSS feeds for various sites/platforms?

Ok so you’ve got a suitable reader setup, how do you find RSS feeds? If you’re lucky the website will show it to you:

Snip from the techdirt website showing they have a nice SUBSCRIBE TO MAH RSS FEED RIGHT HERE button

Other times you have to go digging and searching a bit using site search or search engine. For example here’s the Washington Post’s list of RSS feeds:

Sometimes a blog or a news site doesn’t WANT you to know their RSS address... because if you could use an RSS reader you could doge their cookies, ads, proprietary apps and other bullshit (and we can’t have that happen!) But even though they’re hidden, I bet the RSS is still there, you just have to be sneaky:

Substack / WordPress RSS

Strip off the url, +/feed. Doesn't work with sub-substacks or “channels” i.e. sub-blogs of a larger account. /feed –> (

Reddit RSS

You can subscribe to individual subreddits (OR users) by simply tacking /.rss onto the end of the subreddit or user URL – each new top level post/thread is an item in RSS parlance, and you don’t get the comments and replies. (ugh, you’ll have to use the Reddit app like a filthy commoner)

(how long before they close THIS hole I wonder?)

Medium RSS

Medium is actually up front about theirs, good job Medium.

except for paywalled content all you’ll get is the slug essentially.

VideoSift RSS

You can get a stream of everything submitted, but before its “sifted”

You can also RSS subscribe to individual user posts: and their bookmarks: (these are on their user page)

but you can’t follow channels or tags

Youtube RSS

Find the Youtube channel URL you want to follow:

Now take that channel ID off the end and tack it to the end of this:

voila, RSS feed:

thanks to for this one.

What if I can’t find the RSS feed?

A lot of RSS aggregator services have “scraping” capabilities, where they’ll scrape the webpage in question and generate a feed for you. (yarr doesn’t do this, it only works on a well formed rss file)

If you have a website that you want to generate an RSS feed from and can’t figure out how, msg me at and maybe I can figure out how.. but really all Ill be doing is using a search engine. But, figure out how to get RSS from a website I haven’t mentioned, msg me and Ill add it here!

Yarr linux installation

  1. grab the source and compile or grab the prebuilt binary of your choosing
  2. dump the binary somewhere (/usr/local/bin/yarr/yarr) and chmod appropriately for execution by users
  3. write a user script (/home/<user name>/ launches said application and chmod for execution ONLY by that user:

    /usr/local/bin/yarr/yarr -addr "<ip to bind to>:<port>" -auth <user name>:<user yarr pwd not their system pwd> > /var/log/yarr.log 2>&1
  4. make sure user above has permission to write to that log file (otherwise yarr won’t run)

  5. If you want to run it as is, just run the script. If you want to install it as a system service that autostarts, create a systemd file that identifies this as a system service:


ExecStart=/home/<user name>/

  1. register and start the service.

When it runs, yarr will host itself at <host/ip>:<port> and it will prompt for the credentials specified on the command line in Its database of rss feeds and read status is stored at /home/<user>/.config/yarr/storagedb as a single self-contained sqlite database file, so whatever user/home backup system you have in place will automatically snab user yarr info too.

By changing the user and ports used in the launching script file (and creating suitable systemd entries) you can create a custom yarr instance for multiple users.


2024-01-07 – initial 2024-01-07A – moved yarr config to bottom. + toc


from Third Spruce Tree On The Left

Sometimes we get stuck in a bog. Everything seems impossible, insurmountable, too much. No motivation, no energy, why bother? where to start? The school of No More Zero Days simplifies things down to a single binary. Do one thing, no matter how trivial – make it a Not Zero Day – and you win. Because anything at all is better than nothing.

Many years ago this got posted to the sub-reddit /r/GetDisciplined by user /u/ryans01 in response to a user's post (since deleted) about having a tough couple of days and beating themselves up about it.

This shot to the front page, and even spawned memes, motivational posters, video anaglyphs, and a dedicated sub for disciples at []

It has been perhaps one of the biggest crutches in my day to day life since then, and it has been a huge help to the ADHD neurospicy girlfriend.

TL;DR – No More Zero Days

The Rules:

1. No More Zero Days

Promise yourself that you will do one thing every day that takes you one step closer to your goal(s)

2. Be Grateful To The Three "You"s

Past Self: Thank your past self for the favours they did for you
Present Self: Do your future self a favour - they deserve it!
Future Self: Your absolute best friend, and a great person.

3. Forgive Yourself

It's okay to fuck up. Forgive your past self, and be a better friend for your future self.

4. Exercise and Books

Get your heart rate up and try to read when you can. Also the easiest way to avoid a Zero Day!

Since social media sites seem to be melting down faster than the glaciers these days, I thought I'd archive it here in case Reddit implodes. But all credit is due to [].

"Ouch. Sounds like you're having a tough time max. That sucks. I've been there, so I kinda know what you're talking about. I've been in the ever circling vortex of self doubt, frustration, and loathing. It's no bueno. I know. If you don't mind lemme tell you a couple things. You can read em if you want, read em again later if you feel like it. But honestly man, if I spend all this time typing this out to you and you don't let it be a little tinder for your fire, well, you're just letting us both down. And you don't HAVE to do that. You don't HAVE to do anything. But you get to choose. (Who am I? My name’s Ryan and I live in Canada. Just moved to a new city for a dream job that I got because of the rules below. I owe a lot of my success to people much cooler, kinder, more loving and greater than me. When I get the chance to maybe let a little bit of help out, it’s a way of thanking them. ) Rule numero uno - There are no more zero days. What's a zero day? A zero day is when you don't do a single fucking thing towards whatever dream or goal or want or whatever that you got going on. No more zeros. I'm not saying you gotta bust an essay out everyday, that's not the point. The point I'm trying to make is that you have to make yourself, promise yourself, that the new SYSTEM you live in is a NON-ZERO system. Didnt' do anything all fucking day and it's 11:58 PM? Write one sentence. One pushup. Read one page of that chapter. One. Because one is non zero. You feel me? When you're in the super vortex of being bummed your pattern of behaviour is keeping the vortex goin, that's what you're used to. Turning into productivity ultimate master of the universe doesn't happen from the vortex. It happens from a massive string of CONSISTENT NON ZEROS. That's rule number one. Do not forget. La deuxieme regle - yeah i learnt french. its a canadian thing. please excuse the lack of accent graves, but lemme get into rule number 2. BE GRATEFUL TO THE 3 YOU'S. Uh what? 3 me's? That sounds like mumbo jumbo bullshit. News flash, there are three you's homeslice. There's the past you, the present you, and the future you. If you wanna love someone and have someone love you back, you gotta learn to love yourself, and the 3 you's are the key. Be GRATEFUL to the past you for the positive things you've done. And do favours for the future you like you would for your best bro. Feeling like shit today? Stop a second, think of a good decision you made yesterday. Salad and tuna instead of Big Mac? THANK YOU YOUNGER ME. Was yesterday a nonzero day because you wrote 200 words (hey, that's all you could muster)? THANK YOU YOUNGER ME. Saved up some coin over time to buy that sweet thing you wanted? THANK YOU. Second part of the 3 me's is you gotta do your future self a favour, just like you would for your best fucking friend (no best friend? you do now. You got 2. It's future and past you). Tired as hell and can't get off reddit/videogames/interwebs? fuck you present self, this one's for future me, i'm gonna rock out p90x Ab Ripper X for 17 minutes. I'm doing this one for future me. Alarm clock goes off and bed is too comfy? fuck you present self, this one's for my best friend, the future me. I'm up and going for a 5 km run (or 25 meter run, it's gotta be non zero). MAKE SURE YOU THANK YOUR OLD SELF for rocking out at the end of every.single.thing. that makes your life better. The cycle of doing something for someone else (future you) and thanking someone for the good in your life (past you) is key to building gratitude and productivity. Do not doubt me. Over time you should spread the gratitude to others who help you on your path. Rule number 3- don't worry i'm gonna too long didnt' read this bad boy at the bottom (get a pencil and piece of paper to write it down. seriously. you physically need to scratch marks on paper) FORGIVE YOURSELF. I mean it. Maybe you got all the know-how, money, ability, strength and talent to do whatever is you wanna do. But lets say you still didn't do it. Now you're giving yourself shit for not doing what you need to, to be who you want to. Heads up champion, being dissapointed in yourself causes you to be less productive. Tried your best to have a nonzero day yesterday and it failed? so what. I forgive you previous self. I forgive you. But today? Today is a nonzero masterpiece to the best of my ability for future self. This one's for you future homes. Forgiveness man, use it. I forgive you. Say it out loud. Last rule. Rule number 4, is the easiest and its three words. exercise and books. that's it. Pretty standard advice but when you exercise daily you actually get smarter. when you exercise you get high from endorphins (thanks body). when you exercise you clear your mind. when you exercise you are doing your future self a huge favour. Exercise is a leg on a three legged stool. Feel me? As for books, almost every fucking thing we've all ever thought of, or felt, or gone through, or wanted, or wanted to know how to do, or whatever, has been figured out by someone else. Get some books max. Post to reddit about not caring about yourself? Good first step! (nonzero day, thanks younger me for typing it out) You know what else you could do? Read 7 habits of highly successful people. Read "emotional intelligence". Read "From good to great". Read “thinking fast and slow”. Read books that will help you understand. Read the bodyweight fitness reddit and incorporate it into your workouts. (how's them pullups coming?) Reading is the fucking warp whistle from Super Mario 3. It gets you to the next level that much faster. That’s about it man. There’s so much more when it comes to how to turn nonzero days into hugely nonzero days, but that’s not your mission right now. Your mission is nonzero and forgiveness and favours. You got 36 essays due in 24 minutes and its impossible to pull off? Your past self let you down big time, but hey… I forgive you. Do as much as you can in those 24 minutes and then move on. I hope I helped a little bit max. I could write about this forever, but I promised myself I would go do a 15 minute run while listening to A. Skillz Beats Working Vol. 3. Gotta jet. One last piece of advice though. Regardless of whether or not reading this for the first time helps make your day better, if you wake up tomorrow, and you can’t remember the 4 rules I just laid out, please, please. Read this again. Have an awesome fucking day ☺ tldr; 1. Nonzero days as much as you can. 2. The three you’s, gratitude and favours. 3. Forgiveness 4. Exercise and books (which is a sneaky way of saying self improvement, both physical, emotional and mental) Edit: Wow reddit gold? Thanks! No idea what to do with it or whats the deal but many thanks! Edit2: Someone asked what I meant by "much more when it comes to how to turn nonzero days into hugely nonzero days". The long and short of it is a simple truth, but it's tough to TOTALLY UNDERSTAND AND PRACTICE. It's this: you become what you think. This doesnt mean if I think of a tree, I'll be oakin' it by august. It means that the WAY you think, the THINGS you think of, and the IDEAS YOU HOLD IN YOUR MIND defines the sum total that is you. You procrastinate all the time and got fear and worry goin on for something? You are becoming a procrastinator. You keep thinking about how much you want to run that 5 k race in the spring and finish a champion? Are ya keeping it in mind all the time? Is it something that is defining your ACTIONS and influencing you DECISIONS? If it is, then you're becoming the champion you're dreaming about. Dreaming about it makes it. Think and it shall be. But do not forget that action is thought's son. Thoughts without actions are nothing. Have faith in whatever it is you've steeled your mind to. Have faith and follow through with action. Ok, Ryan that's a bunch of nice words n shit, but how does that help me turn slightly nonzero days into hugely nonzero days. Do you believe all these words you just read? Does it makes sense to you that you BECOME WHAT YOU THINK OF? Ask yourself: What do I think of? When you get home and walk in the door. (how quickly did you turn that laptop on? Did turning it on make you closer to your dreams? What would?) At the bus stop. Lunch break. What direction are you focusing your intentions on? If you're like I was a few years ago, the answer was either No direction, or whatever caught my eye at the moment. But no stress, forgive yourself. You know the truth now. And knowing the truth means you can watch your habits, read books on how you think and act, and finally start changing your behaviour. Heres an example: Feeling like bunk cause you had zero days or barely nonzero days? THINK ABOUT WHAT YOURE DOING. and change just a little bit more. in whatever positive direction you are choosing to go."

The four rules of No More Zero Days in poster form No More Zero Days computer desktop wallpaper


2023-07-03 – initial


from Third Spruce Tree On The Left

The anti-woke, anti-EDI Stop SOPs lost the election, but they're still up to their dickish ways.

A few weeks ago I wrote about the epic battle leading up to this year's quadrennial Law Society of Ontario bencher election. Every four years, all 57k lawyers and 10k paralegals in the province elect “benchers” to their governance board.

On one hand, you have the Bencher Good Governance Coalition which wants to do/keep doing “good” things like support and enforce a statement of principles, promote and support Equality, Diversity, and Inclusion initiatives and outreach programs to bring legal supports to marginalized communities. You know, to fight the legacy of the law profession is a bunch of straight old white dudes, where you can't be openly gay, trans, female, or not white.

On the other hand, you have the Stop SOP team. Anti-woke, anti-.. well.. everything. Who feels that EDI programs and adherence to a statement of principles (to not be racist, hateful, phobic dicks) is compelled speech... and it costs money they don't want to spend. And generally just like complaining about everything. If we were south of the border, they'd be Republicans. And their biggest supporter is Dickimus Prime himself, Jordan Peterson.

Well, I am pleased to say that the BGGC won. All 45 slots (20 from Toronto, 20 from outside, and five paralegals).

Like.. it wasn't even close. Here are the votes from the LSO's election results page, vs. the BGGC's slate of candidates (the Stop SOP slate has been removed from their dank website, almost as if they're embarrassed by their shellacking). The red lines are where the BGG slates end.

results 1 - lawyers from Toronto results 2 - lawyers from outside Toronto results 3 - paralegals

Now, since the election results, a few of the Stop SOPers have been promoted to fill vacancies in the benchers – one bencher became the new “Treasurer” (the LSO “president” if you will), and three were appointed to actual benches aka be judges.

One of the “promoted” Stop SOP dudes, Murray Klippenstein, is suing the LSO over that 2016 survey/report that was the genesis of the LSO's proposed Statement of Principles.. complaining amongst other things that:

  1. respondent rate was low, at 6%
  2. respondents were self-selected
  3. didn't differentiate between lawyers and paralegals
  4. the actual report was never released outside of the LSO committee on equality and diversity (who crafted the SOP)

Yeah – doesn't like the SOP, so let's attack the statistical validity of the report that suggested its necessity. But Murray needs to stay in his lane on this one.

  1. any statistics wonk will tell you that 10% of your sampled population is the most practical up to a sample size of 1000; anything more than 1000 samples is overkill. 6% of 57,000 lawyers + 10,000 paralegals is – I know math for lawyers is hard, lemme see – 4,020. So way more than 1000 is required for statistical rigor.

  2. So fucking what – if a subset of LSO members feel sexualized, racialized, discriminated, or marginalized, and a subset doesn't.... and if the former are the only ones who respond to a survey on EDI, does it matter if the latter does not? Of course not. The former is saying there's a problem; just because the latter isn't aware of a problem doesn't make the problem not exist. Ludicrous.

  3. Again, so fucking what – does it matter if someone is a lawyer or a paralegal when they're being racialized, sexualized, discriminated against, or marginalized? Of course, it fucking doesn't.

  4. This is the only one where Murray may have a point. But, usually when survey reports aren't openly distributed, there are good reasons. Personal testimonies or unique characterizations that might doxx individuals for one. Yeah, this can be sanitized, but that costs money, and Murray and the SSoP heads are already whining about how $wasteful$ the LSO is. Maybe he should join the EDI committee.

Oh no wait, he doesn't believe it's necessary to have an EDI committee.


2023-07-03 – initial 2023-07-03 – bork link line 1


from Third Spruce Tree On The Left

You like the style of my blog? It only took me all afternoon. I may have some work catch-up to do this weekend.

So one of the reasons I broke up with WordPress, other than it was heckaspensive to host a domain, and it was over featured, and I wanted to self-host, etc., etc. – was because I couldn't futz with the stylesheet for this blog without paying even more money. That's dumb.

I mean all I wanted was monospaced text for snips of code, is that too much to ask for?

#WriteFreely on the other hand, lets you muck with your #CSS directly. However, it's not quite as simple as it would seem. For one, the last time I futzed with Cascading Style Sheets, #webrings were still a thing and everyone still used #ICQ. CSS has come a long way and is a lot more powerful – at the same time a lot more complex.

Out of the box WriteFreely CSS customization

So drill into your Blog's customization menu either from your blog's landing/index page: or from your account's Blogs page: and scroll down until you see Custom CSS. Then, all you have to do is paste in your custom CSS, save and go check it out right?

Not quite. Throw in some basics like an h1 or a a:hover and you'll find it will work in some instances but not others.

What happens is, the custom CSS you paste in there has to compete with the site/WriteFreely's default stylesheet. THAT bad boy is linked over here. No, that's no mistake; and yes, it IS a big glob of CSS with no formatting or whitespace or comments – good luck reading that; that's the form its served up from WriteFreely's statics folder.

The reason that's a big glob is because it's rendered – during WriteFreely install – on the fly from some LESS scripts; LESS is a CSS pseudo language, and there's a LESS node.js tool that compiles them into CSS. So the source of the stylesheets are easier to maintain for the WF/Write.As developers, but makes it a bit thicker for us trying to twiddle with our blog styles.

CSS Specificity Sucks

The problem we bang up against is CSS Specificity – to whit, the more specific, or narrow in scope your style declaration is, the higher precedence it will have. For example, we could use this CSS

h1 {
 color: blue

but then have the HTML

<h1 style="color: pink">The heading yo</h1>

and the latter would win (in the CSS engine Battle For Supremacy) because its more specific.

So this is the same WriteFreely default stylesheet from above, but run through the nice CSS Formatter at Look at all those very specific styles! For example, we could be trying to change the font-size and padding of every h1, but we'd get clobbered by

body#subpage #wrapper h1{
    padding:0 2rem 2rem;

.. that is any h1 tag in the HTML that is a descendant of a body tag (with an id=subpage) or any element with id=wrapper.

The helpful link – below the box where you paste your CSS – to the CSS customization page over at Write.As gives you a few hints of what you have to cover, but not much.

UGH. HTML. I still have that Dreamweaver 3 CD around somewhere..

What you have to do is delve into the HTML that WF spits out and see what's there. OR, you can use a tool (like I do) that lets you load the webpage and analyze all the CSS stylings. I use Skybound's Stylizer for Windows, it lets you click on page elements and see what style rules/declarations from where are affecting it, and you can tweak or suppress any declaration, then copy-paste your new styles into your new stylesheet.

There are two main pages we care about in our WF blog: the blog's index page – this is the landing page for that blog; and a “post” page for each WF post entry. Diving into the HTML for the index we see:

 HEADER    <-- pinned posts, the byline from the Customize page
  H1 <blog title - link to this page>
SECTION#wrapper   <-- the list of individual post titles
 ARTICLE     <-- each one is wrapped in one of these
 H2 <article title>
 TIME <post date>
  <article content>

and on each blog post's individual page or direct URL

  H1 <link back to index page>

so you see, if you tweak the style for an element, say <p>, it will get clobbered if there is a more specific ruling for the same attributes for a <p> that shows under a <BODY id=post> or <BODY id=collection> tag.

So – either you make overriding style declarations for everything:

body#post,body#collection p {
    <CSS for p>

but unless you're a CSS guru (I am NOT), WriteFreely's paste-your-CSS widget (which has a nice syntax checker) might complain about those tags already being defined which was a real hassle for me. Or you can use the allowed, but probably-not-the-best-way method, the !important directive.

h3 {
    color: #FFCC00 !important;

The !important directive tells the CSS engine yeah, I know a more specific style declaration may take precedence, but I really want THIS attribute in this declaration to take priority.

So the !important directive lets us pull a trump card and force our attribute declarations over the ones in the default stylesheet. But what about where we don't even want an attribute to be specified? Well, the sad news is you have to overwrite each attribute to their “null” or “default” state. For example, the default style for preformatted or pre tags is:

BODY#collection PRE, BODY#post PRE, BODY#subpage PRE
	max-width: 100%;
	margin: 0;
	background: #F8F8F8;
	border: 1px solid #CCC;
	padding: 0.375em 0.625em;
	font-size: 0.86em;
	-webkit-border-radius: .25em;
	-moz-border-radius: .25em;
	border-radius: 0.25em;

I didn't wan't the rounded border, the padding or any of that stuff, but I had to overwrite all the attributes:

pre {
    border: 1px solid #FFCC00 !important;
    padding: 10px !important;
    line-height: 1 !important;
    max-width: 100% !important;
	margin: 0 !important;
	background:#222222 !important;
	font-size: smaller !important;
	-webkit-border-radius: 0 !important;
	-moz-border-radius: 0 !important;
	border-radius: 0 !important;

Not a huge deal; it's just an annoyance is all. Depending on what type of attribute, the “null” or “default” value could be 0 (for most dimensions, thickness, pixels, %s) “none” or “auto”.

In any case, here's the final stylesheet for this blog – Not super awesome (and not documented yet) but it covers all of the Markdown styles that WriteFreely supports, that I cover over in my WriteFreely Markdown Cheat Sheet.

If you are a Master In The Way Of Exploding Stylesheet and can point out how I'm pretty stupid and there was a totally easier – or more elegant from a legit CSS cascading sheet way to do this, I would be totally grateful for your wisdom.



  • 2023-06-23 – initial revision

from wfootest

Heading 1 (must include space)

heading 2

heading 3


bold text

  • bullet 1
  • bullet 2
    • sub bullet 2
  • bullet 3
  1. list1
    1. sublist 1
  2. list2
  3. restartnumber

image alt text

Sample Link to somewhere

quoted text l1 quoted text l2

this is code in backticks

this is gated multiline
code that should all be 
left alone even if it includes <div class="blah">formatting</div>

from MetalSamurai

Writing Freely

A test, writing a basic blog entry on Write Freely, the Fediverse aware ActivityPub supporting blogging platform.

I have resisted learning Markdown. Primarily through apathy, but more recently as I’ve come to the realisation that Swartz and Gruber ignored longstanding existing conventions for marking up plain text with asterisks, underscores and slashes to come up with their own clunky, redundant format instead.

I will shake my fist at these kids and yell at them to get off my lawn.