Site repair

#

A small fact about Frank Lloyd Wright’s famous Fallingwater house:

Wright designed the home above the waterfall: Kaufmann had expected it to be below the falls to afford a view of the cascades. It has been said that he was initially very upset with this change.

Contrast this to Chrisopher Alexander’s advice in A Pattern Language 104, “Site Repair”

Buildings must always be built on those parts of the land which are in the worst condition, not the best. This idea is indeed very simple. But it is the exact opposite of what usually happens; and it takes enormous will power to follow it through.

Building the house directly on the waterfall makes for a stunning piece of architecture, and the house’s fame was surely enhanced because of it. Maybe the Kaufmans came to enjoy the unexpected placement of the house.

But it’s a reason I sometimes don’t describe Christopher Alexander as an architect. While I enjoy his buildings, what is really special about them is their relationship with their surroundings and, in a campus setting, with each other. It was his planning, his integration not just of physical spaces but of people and systems, that made his work so valuable.

Consider the site and its buildings as a single living eco-system. Leave those areas that are the most precious, beautiful, comfortable, and healthy as they are, and build new structures in those parts of the site which are least pleasant now.

I wonder… in what other parts of life do we rush to consume beauty, rather than appreciate and nurture it?



Nobody knows about Zulip

#

Zulip is a team chat app, broadly similar to Slack or Microsoft Teams.

When the Future of Coding community started considering Slack alternatives earlier this year, I was reminded that Zulip exists. They didn’t end up moving to it, but I got interested.

The Changelog podcast migrated their community after an interview with one of the Zulip team, so I’ve been using it near daily for the last few months.

And you know what? It’s really excellent.

I am in several Slacks, for my day job and a couple of community groups. The difference when I open Zulip is noticeable. Zulip has a snappier and denser UI. But it’s the way messages are grouped into topics that makes it really easy to ignore a bunch of messages that I don’t need to read. That makes it much faster to get a broad sense of “what’s happening” and then focus on chats I actually care about.

On a personal level, I wish groups with ideological commitments would consider supporting Zulip, a small independent company funded by its customers whose owners are intimately involved in building the product. Rather than Slack (sold to Salesforce) or Discord (raised hundreds of millions of dollars).

I really hope to see more communities and companies considering Zulip as a viable alternative to the corporate players.


Paradicms, a minimum viable CMS

#

I found out about Paradicms when searching for advice about working with RDF data in JavaScript.

(The name appears to be a combination of “paradigms” and “CMS”.)

The pitch is that they’re building a CMS for digital humanities projects like archives and museums in a minimal computing way.

RDF comes in between the data sources (e.g. a spreadsheet) and the static site generation. Spreadsheets in a conventional format are pulled into a linked data graph, which is then queried to create the data on each page. Critically, this happens at build time, not at page load time.

I like:

I worry about:

I wish RDF were more popular as a concept, with apps providing schemas/grammars for their data export.

I’d like to try out the Paradicms approach on some small projects for local groups I’m part of that aren’t technical. I hope this could be a way to responsibly deliver a small data-backed site or app to a group that aren’t coders.


Rebuilding the blog

#

This is me upholding the web developer meme of rebuilding my personal site, and writing about rebuilding my personal site!

My main motivation was to add a micro blog with tags, so I’d be incentivised to write short posts instead of long ones. But along the way I did achieve some secondary goals too:

Designing the URLs:

I spent way too long thinking about URLs. Previously, it was just:

/ → homepage
/blog → list of posts
/blog/:post-slug → a single post

I wanted to separate my “long reads” which are less time-oriented, from my new microblog which is more timely. So I ended up with:

/ → homepage
/:article-slug → just straight into an article
/:year → full content of microblog posts in year
/:year/:post-slug → a single post which happened in year

I like this because:

I also added tag pages at /topic/:tag-slug so I can share the whole story of a single topic on one page.

Hosting:

I stayed with CloudFlare Pages because of their green hosting and very snappy deployment pipeline.

Migrating content to 11ty:

Getting my existing blog content into Eleventy was pretty straightforward. There were a few small hiccups, like configuring a different markdown processor to linkify my headings correctly.

Working with Eleventy’s content system was different to the very post-centric workflow I was used to. It seems good though! I’m interested to see if I can bend it to more shapes, like adding book reviews and a sketchbook, like Tom MacWright’s site.

To be done:

Thoughts so far:

Learning Nunjucks to create HTML templates was… let me just say, it’s been a long time since I used a templating engine that wasn’t Blade, and I much prefer it when they just let you embed the host language instead of coming up with their own expression language. “Filters” for everything feels very 2005.

I think I’ve abused the content system frightfully to create a collection of years to generate my blog post year pages from. That may need to be revised…

or, I could just write more blog posts and not worry about it!


Rebooting the blog

#

After trying to write long-form content for a while back in 2019-20 and realising that a) I now don’t have the time for it, and b) it’s hard to stay motivated for the length of an entire piece, I’ve decided to revamp my website and focus on building up a short-form blog.

As I get increasingly involved in local housing groups, my church, and hopefully doing more speaking in the local PHP and JS communities, I want to start writing up my thoughts and learning publicly.

My inspirations are:

I’m going to try copying Tom’s micro-blog format to give myself a space to not write multi-page multi-draft epics.


Framework unboxing

#

I’m really excited to go Linux full-time with a just-arrived Framework 13" running Fedora. The experience has been fantastic so far. DIY setup, software installation, customisation, wifi, external screens, Flathub apps, everything Just Works. This is definitely my year of Linux On The Desktop.

I did have one assembly hiccup which felt scary. An extra magnet had snuck in on top of one that was supposed to be there, so the input surface (keyboard+touchpad) didn’t fit on properly. I didn’t realise what the raised component was for a while, and was getting set up to contact support, ask the community etc. But fortunately I realised and just prised the extra magnet off then everything was perfect.

I guess that’s the kind of thing you sign up for when getting a DIY assembly version. I’m just glad it wasn’t an actual problem as I was so keen to get started using it.

And let me tell you, after Windows’ evolution in recent years, using an open-source operating system which hasn’t been enshittified to death by megacorp product managers just feels… so clean.


Attending Yearly Meeting 2024

#

Yearly Meeting is the annual gathering of all Australian Quakers.

This was my first time at an in-person Yearly Meeting, having only started to attend Quaker meetings in late 2019. And I was so glad that I decided to come!

I deeply appreciated experiencing the formal sessions and seeing how the Society conducts its business. This, on paper, was something that had attracted me to Quakerism as I was just learning about it. But being in a large room full of Friends patiently expressing themselves and building up in the spirit of unity really helped me understand it deeply.

Even though I was only able to attend the final Thursday, Friday and Saturday, I was overwhelmed in the best possible way. The chance to meet Friends from other cities and states was a blessing. Our community may be small, but its vitality and vivaciousness were evident! I got the sense that many others were relieved to be meeting in person again after years of online Meetings.

I am very much looking forward to the next time we can do so.


Relational

#

There seem to be a common misconception about the meaning of the term “relational” (in the context of “relational databases”).

There are a few commonly-used phrases:

One of these things is not like the others.

A classic demonstration of the misunderstanding:

Collectively, multiple tables of data are called relational data because it is the relations, not just the individual datasets, that are important. Relations are always defined between a pair of tables.

https://r4ds.had.co.nz/relational-data.html

The Drizzle ORM also gets this annoyingly wrong, although fortunately they didn’t bake the word relation into the library’s API.

A relation, properly defined, is closely analogous to a table. Relational data is just data stored in tables.

If somebody asks you “if your data is relational”, they may be suffering from this misunderstanding.


Exponential ideas

#

Many people in tech are obsessed with exponential growth. But I wonder…

Are things which look like exponential growth always the spread of an idea between humans? Are they always ideas whose implementation can be easily parallelized or distributed, so that as the idea spreads, the growth of its implementation is not bottlenecked?

Where the growth of an idea was not exponential, was that because its implementation couldn’t proceed in a decentralised way? Was it because the material resources needed for its implementation weren’t already widely available, ready to be put to use?

Is the end of exponential growth (the top of the S curve) due to saturation of the idea among humans?