Matt Marshall

11 Posts with Tag development (All tags)

06 Jun 2018, 00:00

Brimstone

Brimstone is the code I use to run this website. You can find the code on Gitlab and, for the time being, on Github. I want to keep this post as a living post, and keep adding to it. That way I hope this post acts like a philosophy.txt.

The code isn't anything special. I write it for several reasons:

  • I like to blog, and wasn't happy with a third-party service like tumblr or Blogspot because
  • I like the own my data, and I met someone at a conference who sold me on the idea of the Indieweb and POSSE.
  • I like to write code. I have a CS degree, and am currently doing HCI research where I don't write a lot of code anymore.
  • I like to make my own tools. For the above reasons, this makes writing blog software useful for the time being. I can develop a tool around my own practices, that helps me achieve my goals.
  • Diversity is pretty neat, and although I doubt anyone will actually use this software -- I like the idea that by writing this code I'm contributing in a small way to that diversity.

Goals

The goal of this software is to provide a simple, lightweight, option for publishing text content online that allows a user (me) to:

  • own the data and
  • share copies of the data via social media, with citations back to the original copy
  • subscribe to some sources of content (e.g. blogs, or feeds) in a distraction-free way.
  • not deal with any particularly cumbersome Javascript on the front-end while writing posts.
  • Fire up an instance with a minimal setup e.g. a box with PHP, MySQL and a webserver of choice.

And allows others to view my content in a way that suits them. So far this includes:

  • scraping my site for content marked up in microformats
  • subscribing to my long-form text via rss
  • Seeing versions of my content appear on social media feeds.
  • Viewing the front-end of my site without any Javascript executing.

Why is it called Brimstone?

The name is derived from the old achemical name for Sulphur. I have a bit of a Satanic streak in me, and I decided to call it Brimstone because I see Satanic practice as providing a challenge to established orthodoxies that are potentially harmful. In this case, the centralisation of the web into silo'd content. In these silos, there's also all sorts of features that are designed to keep your focus on the site -- such as notifications, games, etc. 'Features' that, in people like me, encourage the development of twitches that distract them from their other goals and habits. This is also often combined with harmful anti-privacy policies that are used to monetise your involvement in the site by spying on you.

In this way, I see the act of producing a tool that might help myself (and maybe others) from separating themselves from that as Satanic. Hence the name Brimstone. Also, Sulphur is used as a pesticide and I like that imagery when used in the context of dealing with the corporate web.

Why not use Wordpress, Ghost, etc.?

I have no explicit issue with them - but they're not really my thing. I've used wordpress for a variety of things in the past and it suits those things, but I wanted something light. I've never really used Ghost, but already you're dealing with a fully-fledged CMS with complex management options and theming potential. I wanted something that does not put any Javascript on the public-facing portion of the site, and only uses minimal Javascript for the UI in the admin-panel. I also wanted something that didn't require a lot of configuration.

Equally as important, I wanted to play and develop a few skills.

Ok, so what's it built on?

The current version of Brimstone is built on the Symfony PHP Framework. To run the current version you will need PHP 7.1, and Composer to install the vendor packages.

It's released under the GPL 3. This means that if you fork Brimstone or use any of my code in projects, you're also obliged to release under the GPL. Symfony code is released under the MIT License which, thankfully, allows me to use MIT components inside of a GPL'd project.

Ok so what does it actually do?

It does pretty much what any home-brew blog software can do, but specifically:

  • Basic blogging and microblogging with Posts.
  • Write Posts in Markdown (a la Daring Fireball syntax) -- no heavy interface required.
  • Posts are type-inferred. You can write short notes (like tweets) and longer articles (like blog posts) from the same interface, and they display differently based on your choices -- no explicit configuration necessary other than deciding if you want your post to have a title.
  • Long-form articles are available via an RSS feed for people to subscribe to
  • POSSE Posts to Mastodon with citation back to post on the site
  • POSSE posts to Twitter with citation back to post on the site
  • Posts on the site are marked up with microformats for Indieweb feed compatibility
  • Speaking of the Indieweb; you can send webmentions just like this one to mention others in your posts.
  • There are no comments for your posts stored on the site, but you can receive webmentions on them which get delivered into an inbox as notifications in your admin panel so you can see what people have said.
  • You can export all your posts in an XML file, and import posts into the system from an XML file given it has the proper format.
  • You can also download posts individually as Markdown files
  • Basic controls for hiding/showing posts, in case you want to appropriate posting for keeping private notes.
  • You have a short profile which you can fill out, and this gets marked up as an h-card for indiweb compatibility.
  • You have an optional 'About' page to fill out just like a post; if you don't want it keep it blank and the About link disappears from the site.

Last Modified: 13 Aug 2018, 21:20

development brimstone indieweb php

01 Aug 2018, 10:09

Quick thoughts on Minimalist Design Patterns for Brimstone

Minimalism is one of the inspirations I draw from when hacking at Brimstone. So far this has manifested by removing things like excessive UI elements, cumbersome Javascript and CSS frameworks (thankfully PureCSS exists), and streamlining things such as how Posts work and are displayed.

I had a thought recently when considering the About page, and how a more minimal approach might look. At the moment, the approach is still relatively minimal; the UserProfile object has a field which can store text used to render the About page using markdown. If it's null or empty, the templates don't render a link to the About page and the controller redirects any attempts to directly go to /about to the index page.

How then, do I think it may be improved? Obviously these are rough ideas -- I also don't think there's anything explicitly wrong with the way things are done currently. What might seem simple to me might not be simple to others, and in fact I think there's an argument that these design patterns could add complexity in some regards.

Under both of the following proposals, the UserProfile object has the about attribute removed, and controller logic is changed to accommodate the new pattern.

Idea 1 - Using a Post for an About Page

Under the current design, the About page is simply a text field containing markdown that is rendered when the visitor calls /about. This works basically exactly the same as a Post but is a bit less versatile e.g. Posts store a lastModified attribute which can inform the reader if/when the Post was last edited and give some idea of freshness.

Under this design pattern, Post receives a new boolean attribute which marks it as the About page. A form or button is implemented, along with a controller to handle elevating a Post to this position with the following logic:

post = post // from controller
previousAbout = searchPosts(where: about == true)

if ( previousAbout is not null ):
    previousAbout.setAbout(false)
fi

post.setAbout(true)

return new Response(200)

The About page template can actually remain, with the controller simply changing the variable it passes into it to achieve the goal. Another consideration, however, is the header templates logic when choosing to render an /about link. Currently it utilises a UserProfile object already passed in to the template which is used for H-Card generation and Site titles as well as visible elements such as the name and profile image. Since the UserProfile object also contains the About page, it simply checks to see if it's null or not to decide whether to render the /about link. If I made the About page a Post, the controller would need to inform the template separately, unless the UserProfile maintained a 1-to-1 relationship with a single post, which is nullable. This changes the previous controller logic above to:

post = post // from controller
userProfile = user.getProfile()

userProfile.setAbout(post)

return new Response(200)

Which I actually prefer. The UserProfile still has an about attribute, but it's a reference to pre-existing content and can be switched without a search of the database and it prevents duplication; where since Post already contains the necessary attributes for a good About page it makes sense to leverage it.

Idea 2 - Using a tag for an About Page

This one also utilises Posts, but with a slight twist. Instead of elevating a single Post to become an About page, what if we simply used a Tag? That way, the user could add content to their about page on-the-fly simply by tagging a Post with an about tag?

I don't think this is without issues -- for example how do you order things? What about reordering things on the page? How about editing posts, you have to hunt them down (admittedly just a search for the tag about…)? There's also the issue of the header rendering the /about link from earlier -- this means every controller needs to do a search for Posts tagged with about and check the length of that result, to decide.

I'm sure there's a way around this, and I really like the idea of a cumulative About page which can be made up of otherwise disparate content, for now I'm going to try out Idea 1 and see how that goes.

Last Modified: 01 Aug 2018, 10:10

development brimstone minimalism php minimalist design design patterns web design

16 Aug 2016, 20:39

Feature Creep, and Doing.

I have always had a problem with the dreaded Feature Creep. Not only with software development, but in life generally. I take a lot of pleasure in the doing of something, and when I stumble across something that I feel I may enjoy doing I get incredibly excited at the prospect of its doing. If that made sense :-/

I experienced this quite early on in my strength training journey -- attempting to integrate a full Calisthenics system with a Power Lifting one. When I finally dropped my Power Lifts to focus on Calisthenics, instead of relishing the extra time and simplicity I instantly started trying to do various different forms of calisthenics training (my foundation was always Convict Conditioning, but I was attempting to Grease the Groove on quite a lot of things too, and was rushing the addition of extra exercise progressions).

I've most recently experienced this with Brimstone, my little indie blog project. I've only recently gotten around to actually fixing the main feed, and integrating everything together. Mainly, features creep in and keep me awake via RSS feeds (it's getting shinier back here, btw). The same can be said with my PhD. People keep trying to introduce 'features', or aspects of the research. For the most part I welcome it, and their interest in it is exciting (if pressuring). But there's only so much I can do.

The most dangerous feature creep I've experienced is that which I indicated right at the start of this post. The doing features of my life. I take a real, carnal, pleasure in doing things, taking things in, and being part of things. Throughout high school and 6th Form (college) I was involved in a local theatre group. When I got a job making pizzas, I found it difficult to manage acting alongside 6th Form, the job, and a new girlfriend (oh myyy). So acting was dropped. I managed to get by in 6th Form without too much feature creep. My Open-Sourceness became more pronounced, so I suppose that was one thing I was doing, but otherwise I was pretty simple. I watched a lot of TV shows.

When I came to Uni, the acting came back in and I am ashamed to say that I let some good friends (and splendid talent) down by dropping out in the most heinous way possibe: ceasing to show up. I was busy being a Computer Science student, an active Satanist, a fledgling executive member of Rocksoc, and I had a new girlfriend (this one was a model! ohhh errr). I also still had my job slinging pizzas (in a different shop), and my social life was abuzz with clubbing and friends. Also now I had to cook for myself!

Years later, things are looking tamer; but I worry about feature creep still. The things I like to do keep growing. Every time I enjoy cooking something, especially if it takes effort, I long for a ritual of doing it daily or weekly. My Strength Training is so ingrained in me now that I can't help but do it -- but it remains something that I do so it affects my day significantly. I enjoy doing maintenance on clothes and boots. I enjoy doing reading, and writing. I enjoy doing development, especially adding new features to software. I've recently took up a light practice of making, which is absolutely rife with doing things -- lots of things! Also carving, if there ever was something that was doing; carving is it. Since developing an interest in Politcal Economy, and being awakened as a Feminist (or ally) I've being doing those things. Oh, and after a nice long spell of being out of the habit of doing being a Satanist; I'm being enticed back in by a new and sexy UK community.

I don't know what to make of all this. Juxtaposing the desire to experience rich variety against the desire to not feel bad for not doing something is becoming tougher every day. Is it wrong to love drowning in it?

calisthenics diary development reflections brimstone life

15 Nov 2016, 07:49

Hero's Journey: Call to Adventure, or Road of Trials?

I'm a bit of a poetic shithead when it comes to thinking about my life, challenges, and achievements. I listen a lot to Elliott Hulse and try my best to see my life as a long journey and development process. Constantly striving to become the next "better version of myself".

Through Elliott I was introduced to the work of Joseph Campbell; the mythologist most famed for his work around the Hero's Journey, which I've since lapped up. For those unfamiliar, it goes something like this:

A hero ventures forth from the world of common day into a region of supernatural wonder: fabulous forces are there encountered and a decisive victory is won: the hero comes back from this mysterious adventure with the power to bestow boons on his fellow man. - The Hero with a Thousand Faces, Joseph Cambell

Viewing my life through this framework on both macro and micro scales has been of huge emotional benefit to me. It encourages reflection, forcing me to take account of everything going on in order to make sense of it and make some estimation of where I think (and where I feel) I am in a cycle of the journey. The journey is divided into 17 distinct parts, across 3 Acts:

  1. Act I - Departure
    • The Call to Adventure
    • Refusal of the Call
    • Supernatural Aid
    • Crossing the Threshold
    • Belly of the Whale
  2. Act II - Initiation
    • The Road of Trials
    • The Meeting with the Goddess
    • Woman as Temptress
    • Atonement with the Father
    • Apotheosis
    • The Ultimate Boon
  3. Act III - Return
    • Refusal of the Return
    • The Magic Flight
    • Rescue from Without
    • The Crossing of the Return Threshold
    • Master of Two Worlds
    • Freedom to Live

I heartily recommend reading through The Hero with a Thousand Faces if you want to read thoroughly about this. For now, however, there's a pretty good summary here, and I always liked how Elliott discusses the framework.

Anyway. To the point.

I'm currently at a turning point in my life, and am trying to figure out if something I'm experiencing is a new Call to Adventure, or a trial on the Road of Trials. I've been living with my flatmate for over 5 years now. I arrived at this situation through a very explicit call to adventure, where prior to starting University he messaged me off-hand on social media with "Fancy moving in together in my dad's flat in Newcastle?". That kick-started the adventure of my undergraduate degree: I received mentorship and talismans from allies, I was tested both academic prowess and personal qualities, I met with a goddess, and I ultimately transformed through my experiences at undergraduate and was tested at the end.

Living with my flatmate has been a mixed bag. I must first acknowledge that without him and the opportunities that this flat offered, I would be a lot worse off. Seriously. 100%. Forever indebted. He's been on his own journey and trials during our time here, culminating in his own equilibrium. Recently, though, I've had a distinct urge to just get out of the flat and my day-to-day experience of it has become increasingly frustrating. I live in an area densely populated by students, who are increasingly noisy. My flatmate and I have opposing schedules and interests; I wake up early to train, and he's knocking about during the night. These things cause frustration, yes, but why do they justify my feelings of irritation?

Important to remember is that my landlord is my flatmate's father. Which is how this whole thing has been possible. We paid discounted rent as students, and my rent increased this last year. My flatmate's didn't. I also remember speaking to his bandmate and learning that he didn't actually pay any rent. These sound bad, but I think that I understand the reasons for it, related to my flatmate's own Road of Trials. I get that; I'd be a pretty bad Communist if I thought that he didn't deserve the safety net. That it's privilege inherited from his bourgeoisie father is a cognitive dissonance I have to reconcile at a later date.

It's not so much the economics that bother me, so much as the politics of space. I strive to have as little impact on the communal space as possible, through both cleaning up after myself like a normal person, but also my hobbies aren't particularly imposing: I wake up at 0500 to train in the backyard, and I read books, and I wear headphones, etc. My problem arises from what I perceive to be a lack of courtesy and respect flowing the opposite way: his dishes pile slowly grows and absorbs all useful items; he smokes weed and the stench of it flows into my window, preventing me from sleeping (in summer I can't sleep with the window closed, it's too hot); he plays the drums; he'll sleep in until the last moment and then rush into the shower, not checking that people need the bathroom to finish off morning routines they'd otherwise be delayed on; and he never cleans.

All of this has resulted in this urge, experienced largely these last two years, to just. Get. Out. Why haven't I? I can't tell whether being on the receiving end of these behaviours / events / experiences is part of my Road of Trials, and I'm to grow and learn to be less pissy and more tolerant as a result. Or is it the beginning of a new Call to Adventure? By remaining here am I refusing the call, and growing more bitter as a result? It's scary out there. That's the point. I see my comrades with their own spaces, or a shared equilibrium with their house mates. My partner and I want to consider getting our own space, as we feel a bit suffocated (she lives with her parents and visits here). I think part of it is fear. I'm afraid that I'll be stuck paying lots of rent to a shitty landlord, unable to get out. I'm afraid that after my PhD I will be poor, and homeless. Surely that means it's a call? My flatmate has been away for a fortnight, returning today. I've really enjoyed his absence. My colleagues at the lab describe being able to afford their own flats slightly further afield in Gatehead without sweating it. I think that they're all signs.

But what if they're not?

development reflection growth josephcampbell herosjourney

12 Apr 2016, 19:35

Grumbly Review - VidaHost hosting (is bad for devs)

Warning: I'm going to have a bitch here, although I think I make some good points; the purpose of this piece is pretty much just as therapy for my coder-rage.

I've been hosting mrshll.uk with UK-based hosting company Vidahost for a little while now, and as the year has went on I have increasingly grown to dislike them. Tbh, I only have myself to blame as I bought their hosting package in a fit of urgency without any particular market research as to the best hosting company for my needs. I was young age of 22 and I didn't see myself developing much web software in my little spare time, so shoved up a holding page and got on with my life.

That changed when I began seriously developing my own indie CMS, and I learned very quickly that I was going to have to jump through hoops.

The Good

First the good. Gotta start on a positive.

Decent PHP support I develop Brimstone CMS in Symfony 2.x, and I can't recall a specific incident that's made developing the application harder by being through Vidahost. They let you use .htaccess, and let you choose your PHP version pretty much all the way up to PHP7. I've largely been able to fire and forget.

Splendid customer service Every time I've posted a support ticket to Vidahost I've had some pretty swift replies, and they've usually responded within about 25 mins day or night. Most of the time they solve the issue within an hour, and the rest of the time I've been on Stack Overflow and realised I was the problem all along.

Easy spin-up of basics It's been pretty easy for me to add subdomains, MySQL databases / users, email accounts, etc. The basics that you expect a hosting company to do. Some of the one-click installs for Wordpress etc are also pretty nifty.

The Bad

Here we go.

Slow I've noticed that sites I've developed on other hosting services have had pretty similar speeds to having everything run on localhost. Not Vidahost. It's relatively sluggish in a Web circa 2008 sort of way. I've even just pushed a feature involving more Twitter functionality, with shiny ajax requests for favouriting (screw the like/heart combo), and it's broken it straight away and gives me timeouts on pages that were admittedly slow before -- but not game-breaking.

Shit SSH Vidahost begrudgingly let you SSH into a domain's hosting area in order to play around. For serious users of a web framework you'll probably need command-line access to run various tools or scripts that come bundled with your framework (Symfony and Doctrine for example). Every time I push a feature or update a template, I need to ssh in to update the database schema or clear the template cache. This is obviously not a problem except that Vidahost don't allow you to add any SSH keys, meaning you need to remember a password that they auto-generate for you. I'm not necessarily complaining about the auto-generation -- it stops people from choosing silly passwords and potentially weeds out those who don't know what they're doing, but if you're that security conscious surely the extra step of letting me use SSH keys makes it equally secure? Grrah. Also, I know it's probably best to err on the side of caution and let SSH sessions expire pretty quickly -- but I've logged in, switched to my text editor to make a very quick change (like, uncommenting-something quick), upload it, and then the session's frozen and I have to re-log in. Bah.

PHP Session clear-up I've got a whole control panel back here that most of the dev time is spent on. I can log in, and then interact with Twitter and post blog posts and all sorts of standard CMS clart. I've had it before where I've logged in, and then went to write a Note (Tweet) which is sent over AJAX, only to have the server respond with the login page as the session's been cleared. This process taking roughly 20s. Wtf? That's mental.

SSL Certificate aka. Vidahost love to squeeze you for cash. When I knew that I wanted to build an indie site and I would often be sending my password (or precious blog posts) across the pipe I knew I had to encrypt it. So I looked at the SSL options. I was presented with the option of paying £40 for a fresh cert, or £20 for the privilege of having them install a home-generate one. I parted with my cash. When Mozilla's Let's Encrypt came of age I enquired as to whether Vidahost would be supporting this, as Let's Encrypt is designed to be automated (my logic being that after an initial set up effort they could set domains and certificates away running forever and be happy). Wrong. Vidahost responded with a resounding "Sorry!", presumably whilst rubbing themselves in £20 notes and bathing in the tears of web devs everywhere.

Conclusions

Use vidahost if you're just looking to set up shop with a presence on the web and use stuff like Wordpress. Don't use them for any serious development work. I can't wait until my hosting expires and I move to Digital Ocean.

review grumble vidahost development