Bookmarks

This is what the indiewebmasters might call a link blog. It's a list of links to things other folks have created with some quotes and commentary to boot.

An RSS feed is available at https://danott.website/feeds/bookmarks.xml.

On Notebooks and Pens

Despite a fascination with digital tools, pen and paper is where my real thinking happens.

My experience is seasonal. I haven’t been journaling in the analog lately. And I think a big part of that is because I don’t like the quality of my latest notebook.

Noah Verrier's Oil Paintings

Noah’s oil paintings of modern food are perfect. An original will cost you thousands of dollars on ebay. I wish I could support an artist at that level.

📄 Calling Private Methods Without Losing Sleep at Night

The only problem? The method I need, ActionDispatch::FileHandler#find_file is private, meaning that I really “shouldn’t” be calling it. But also, it’s a free country, so whatever. I wrote this and it worked:

This is the beauty of programming in Ruby. You are trusted with sharp knives to accept (and mitigate) your own risks.

Of course, I could write a test to ensure this method still works, but I didn’t want to give this method even more of my time. So instead, I codified this assumption in an initializer:

Writing a test that will fail is routine to me. It feels like an understanding unlock to move that failure from test time to boot time. A failing test can be ignored as flaky. An app that won’t boot demands attention for resolution.

Hiring Judgement

the end, judgment comes first. And that means hiring is a gut decision.

As much science as people want to try to pour into the hiring process, art always floats to the top.

Hiring benefits from introducing process and constraints. But the final decision can never be systematized away.

Unnamed Document

Everything we do must be grounded in truth and compassion.

“What we win people with is what we win people to’’ comes to mind.

SocialWeb.Network

A handy high-level reference to the various competing standards for establishing a decentralized social network.

The Benefits of Being Yourself

Business want risks that aren’t risky, art that isn’t challenging, and new experiences that are immediately familiar. But if branding is about differentiation, we have to actually differentiate. Diverge. Do something, anything, that isn’t what’s around.

Rewards flow towards risks. But they also flow towards compliance with paved paths. There’s a tension in trying to serve both reward mechanisms. Small differentiators are a hedging of bets.

Being yourself is a better differentiator than any other strategy.

It’s the easiest to consistently implement, too!

If you’re being yourself, you are your moat.

Resegregation, Coups, Orwell, and the Importance of Precise Language

Here’s why this matters: imprecise and euphemistic language is the language of fascists, authoritarians, and oppressors — power-craving leaders who either don’t want people to know what they are doing or don’t want them to think too hard about the illegality or immorality of their actions.

This motivates me to pursue a life of direct and precise language.

rails.style

rails.style is a curated resource hub for Rails developers.

Lists of tools aren’t a thing I need every day. But it’s nice to have them bookmarked when you need them!

ferrum

Ferrum provides you a high level API interface to Chrome browser and allows you to fully automate it and grab data from any public site you want. There’s no additional software required — only Chrome, Ruby and you.

I have yet to meet the limits of Mechanize, but it’s good to know there are other tools out there.

Alternatives to "Sorry"

The problem here is that “sorry” both conveys sympathy without fault and sympathy with fault, i.e. “I’m sorry your feelings were hurt” vs. “I’m sorry I hurt your feelings”.

It is literally difficult to convey sorry without adding additional qualifiers.

To make things more confusing, “sorry-not-sorry” expresses unsympathy with fault.

This complication makes me believe we need another permutation that expresses sympathy even when fault of the speaker is assumed incorrectly.

Let's Not Misuse Refactoring

I find that many people confuse refactoring with any change in code.

It’s true. I need to learn how to be gentler when confronting it because it irks me deeply.

When this happens, I say that the interface becomes a published interface (a step beyond a public interface).

Languages provide mechanisms for marking methods public or private. What would a convention for marking a method “published” look like?

It’s at the seams of the system, that’s a good place to start.

Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior.

Refactor (verb): to restructure software by applying a series of refactorings without changing its observable behavior.

So while we refactor (verb), we apply several refactorings (noun).

It’s great to have the definitions handy.

The Law of Leaky Abstractions

Here’s the magic part: TCP is built on top of IP. In other words, TCP is obliged to somehow send data reliably using only an unreliable tool.

Every time I relearn this I stand amazed in the presence of TCP/IP.

What is a string library? It’s a way to pretend that computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It’s a way to pretend that a hard drive isn’t really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-within-folders containing individual files that in turn consist of one or more strings of bytes.

What is a language? It’s a way to pretend we can understand the same concepts in a world of imprecision and subjective experience.

One reason the law of leaky abstractions is problematic is that it means that abstractions do not really simplify our lives as much as they were meant to.

Conceptual compression allows ideas to travel faster and further. Ideas need play with each other to be remixed into something new. Decompressing an idea into its component parts creates opportunities for new compounds. Everything in its time.

Code generation tools which pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting.

This was written in 2002! Long before LLMs were going to take our jobs.

It was true then and it’s true now: writing code is not the hard part of the work. Reading and comprehending and safely transforming the code to achieve refined and emerging desired outcomes is the hard part.

So the abstractions save us time working, but they don’t save us time learning.

This is why curious programmers are the best programmers. They have an insatiable hunger for learning how things work.

Subjectivity in Productivity

You can find out where things stand. But the answer is a human one, not a digital one. It’s fuzzy, it’s a bit abstract, and it’s more a feeling than a figure. It’s taking stock of all the things that can’t be measured, and speaking or writing the actual answer, not pointing to an abstract number. “63” means nothing. “We think next Tuesday” means something.

Ledgers want numbers. Leaders want truth.

Numbers provide facts. Facts are true, but they’re not the truth.

That imprecise wiggle room is also known as the truth.

Truth is subjective when creating something new and putting it into the world. This is a feature, not a bug.

Subjectivity is a good thing. A human thing. It’s with the grain. Subjectivity and productivity are partners, not adversaries.

If I believe I’ve been productive, I’ve been productive. I can be wrong, which is why I check that belief with my peers. Shared belief and shared believability is the next step.

Over time we’ll be adding more imprecision like this to Basecamp. The more we can reflect reality, not a false premise, the better off teams will be.

Reality is the believable interpretation of facts. Facts alone aren’t enough. Facts, in context, with value judgements are desired.

I probably could have just highlighted the entire piece. It’s worth a read, and the truth is probably somewhere in the middle.

Apropos of Everything

Look, we get it. “Write a policy” is a very boring idea. As a vibe, it’s giving taupe, bureaucracy, and mildew. But putting some careful thought into documents like these gives your team clarity about where you stand as an organization, and what to do when the ick — however implausible — shows up. Given the current state of, well, everything? It might be some of the most vital work you do this year.

Well written policies can be a consensus-building and decision-making accelerant. Poorly written policies generate more questions than they answer.

A Real-World Example of a Mocktail Test

Names that put the verb before the noun. By giving the verb primacy, as the system grows and opportunities for reuse arise, this encourages me to generalize the direct object of the class via polymorphism as opposed to generalizing the core function of the class, violating the single-responsibility principle (i.e. PetsDog may evolve into PetsAnimal, whereas DogPetter is more likely to evolve into a catch-all DogManager)

I’ve definitely written classes that (d)evolved from DogPetter to DogManager. I’m going to give this verb-first naming a spin.

What Happens When We Misuse Refactoring in Conversation?

Done well, refactoring is a low-risk investment in future productivity, by reorganising code without changing its behaviour. Often however, our conversations position work that doesn’t meet this description - and needs more scrutiny - as refactoring. Let’s look at what goes wrong when this happens.

I’m thankful one of the giant robots at Thoughtbot wrote this so I don’t have to.

After a while, long periods of work with no result creates distrust.

Results build trust! Results come in the form of desirable change or desirable predictability. Refactoring is focused on not introducing change, so it must be focused on retaining predictability.

A listener is more likely to ask: “why do I need this change and not something else?”, or “what does success look like?” when meaning is not hidden.

Say what you mean and mean what you say.

We need to be careful not to claim that we’re refactoring when we’re really making bug fixes, adding new features, or otherwise changing the code’s behaviour and our product’s user experience. Disguising that work as refactoring sabotages important conversations and creates suspicion about the concept. We can fix this by getting more specific in our language and by learning more about what refactoring really is.

Amen.

How to Make a Damn Website

A lot of modern solutions may not save time as much as they introduce complexity and reliance on more tools than you need. This whole process is not that complex.

Managing complexity takes more time than the effort saved. It’s true in many cases.

Faster Horses

User adoption doesn’t work if it’s forced; it has to come from a genuine user belief that the new feature can help them achieve their goals. And it certainly doesn’t work if your feature actually creates a worse experience for the user and degrades the quality of the product.

Autonomy in adopting a new behavior is the ultimate sticking point.

The people might have asked for faster horses, but instead they got donkeys on LSD.

I literally lol’d at this. What a great reframing of a misquote.

Moving on From React, a Year Later

The server doing something useful is a requirement for building an interesting business. The client doing something is often a nice-to-have.

It’s always helpful to recognize the difference between needs and wants. Maslov’s heirarchy of introducing complexity.

We Don't Need More Cynics. We Need More Builders.

Cynicism is the cheap seats. It’s the fast food of intellectual positions. Anyone can point at something and say it’s broken, corrupt, or destined to fail. The real challenge? Building something better.

I’ve been sitting in the cheap seats, apparently. I’m just happy to be in the stadium, watching live sports, eating fast food.

Putting aside the choice of analogies, I want to accept the challenge—to value creation above critique.

Cynicism comes with hidden taxes. Every time we default to assuming the worst, we pay in missed opportunities, reduced social trust, and diminished creative capacity. These costs compound over time, creating a self-fulfilling prophecy in which cynical expectations shape cynical realities.

Being right feels so good that you’ll continue pursuing it even if it’s making you miserable.

Call it pragmatic meliorism — the belief that while perfect solutions may not exist, better ones do.

Don’t let the pursuit of the perfect become the enemy of “good enough”.

Full Feed RSS

Full Feed RSS is a simple RSS feed reader that displays the full content of the articles.

This is the kind of stuff that makes the web great. Following an RSS feed that requires a click-through to view the whole article? Build your own tool that brings the full article into the reading environment you want.

Minimum Levels of Stress

The dumber the disagreements, the better the world actually is.

Don’t be surprised when disagreements exist. Instead, use their banality as a gauge for how things are actually going.

Range

Online verification is an invented problem.

Domain ownership and SSL certificates solved this problem at a lower tier before Web 2.0. Centralization on platforms has invented an arguably unnecessary problem of authentication.

The only reason we don’t have this at scale now is because we don’t have a good RSS writer for regular people.

We need more publishing tools for regular people.

The Rise and Fall of Getting Things Done

Mann posted a self-reflective essay on 43 Folders, in which he revealed a growing dissatisfaction with the world of personal productivity. Productivity pr0n, he suggested, was becoming a bewildering, complexifying end in itself—list-making as a “cargo cult,” system-tweaking as an addiction. “On more than a few days, I wondered what, precisely, I was trying to accomplish,” he wrote. Part of the problem was the recursive quality of his work. Refining his productivity system so that he could blog more efficiently about productivity made him feel as if he were being “tossed around by a menacing Rube Goldberg device” of his own design; at times, he said, “I thought I might be losing my mind.” He also wondered whether, on a substantive level, the approach that he’d been following was really capable of addressing his frustrations. It seemed to him that it was possible to implement many G.T.D.-inflected life hacks without feeling “more competent, stable, and alive.” He cleaned house, deleting posts. A new “About” page explained that 43 Folders was no longer a productivity blog but a “website about finding the time and attention to do your best creative work.”

I think about this article every time I rebuild my personal website. I love the exploration in finding new ways to do things. But once again I’m confronted with what I’m actually trying to accomplish.

I am drawn to work of a recursive nature.

Every token is a feature

Infinite customizability and peak performance are often at odds.

Resiliency trades off against efficiency. Customization trades off against performance. I love finding and living in the tension in our systems.

Egoless Engineering

I cannot find a video of this presentation. The slides and speaker notes are gold.

A big mistake they made in my view was that they conflated roles with work a little too much. Frontend engineers did all of the frontend work and none of the backend work, and vice versa.

I have seen this. In the worst characterizations it interprets people as interchangable parts instead of unique collaborators with strengths, weakenesses, and room for growth.

One big thing that a lot of people love to do is create new role types. For any new thing a company wants to do, the tendency is to put up a new job description.

Resist this urge. Start doing the new thing. If it ends up taking an inordinate amount of time, hire someone to do the thing.

Once people have subdivided work, they naturally try to arrange people into assembly lines. If you have AI work, hand it over to the AI person. If you have ops work, give it to the ops person.

That’s the kind of thing that feels obvious to leaders, but I think it’s wrong. And sometimes it’s wrong in a mathematically provable way.

Thinking Fast & Slow comes to mind. It feels intuitive, but it never works out quite that way in practice.

The most important bit that we took from that movement was that we should tear down existing barriers between roles. So after about two years of creative destruction pretty much everybody was pitching in on pretty much everything.

Tearing down dividing walls is work of the highest nobility.

the thing we were actually going to do was use our rare and precious organizational power, and the free time that came with it, to lift up other teams and make them more effective.

Seeing your work make the lives of real people better is the most rewarding outcome.

We tried really hard to have domain experts, but never really domain owners.

Ownership is a word that means different things to different people. I like the idea of floating experts serving the team rather than stationary owner controlling their fief.

There were other ways in which we didn’t just wait for the streams to cross themselves. We injected sustaining energy into this system very intentionally.

Good organizing patterns and collaboration don’t just happen. They require the intention of leaders.

None of them would admit this, but I think there’s an industry instinct that misery gets results. I think this is mistaken. Misery is a shitty proxy metric for results.

Misery loves companies. This rebellion against misery as a metric reminds me of the bigger argument within Accelerate (the most high-performing teams are those that are healthy and enjoyable to be on).

Deltas to the Global Maxima: Better Career Conversations

So why is it that career tracks can be misused? The issue is that they are a simplification of a complex, multi-dimensional problem space. People’s careers can go in limitless directions, and career tracks are just one possible path at one possible company. They are represent a local maxima, not the global maxima.

It is easy to forget the vastness of the forest when you’re gathering all your resources from a single tree.

We need to stop obsessing over dangling the next step on the career track as a carrot. Doing so almost always leads to disappointment. Long term conversations become short term: why can’t I have that role now? When can I get that role? What’s the fastest way to get there? These are all questions that are focused on shortcuts and checking boxes, and not on doing impactful work for customers or increasing their skills.

Doing something that is already defined can be appealing. This is the work of clergy cementing the norms of an institution. But many would rather be trailblazing or pioneering.

Instead, we need to help our reports consider the bigger picture: what is the global maxima of their career?

This global maxima is the point at which we are at our most skilled, our most impactful, and the most satisfied. The global maxima may not even be a role, but a state of being where everything comes together: life, work, compensation, contribution, and happiness.

This is interesting, because it will be different for every single person. Maxing out one attribute of life can lead to dread. Satisfizing within the local maxima may lead to more fulfillment.

Quit Your Job

But you cannot pursue interesting novelty—things that no one else is doing or which you have never seen before, or the little threads of nagging curiosity or doubt—by chasing along known direct value gradients. But that’s where the treasure is. That’s how you will find the place where you need to build. To get the biggest and most interesting payoffs, you have to start by chasing merely interesting novelty in an open-ended way.

This describes my learning style. Follow curiosities with no clear end in mind, just fascination.

This efficient pursuit of predictable value is the quiet dignity of the mass of working people. But if we are to solve the bigger structural, spiritual, and intellectual problems which aren’t addressed by existing institutions, someone needs to be exploring off of the established road, where there is a high probability of failing to accomplish anything at all, and a significant probability of discovering and exploiting the next big breakthroughs.

Conference talks of trailblazers, pioneers, and settlers come to mind.

But this isn’t really about your job. It’s about your relationship to resources and value.

A helpful frame. A job is not an identity. It’s a proxy broker of resources and value.

Capability makes your life simpler

Capability makes your life simpler. Tolerance, skills, knowledge, and health are always with you, wherever you go. They are assets but they take up no space. They are stored in your body.

Tolerance, skills, knowledge, and health. Investing in these things is an investment in yourself.

Runestone

A plain text editor. That’s it.

iA Writer is my go-to mobile text editor. But it is strictly for words. Having a plain text editor for code-like things could be useful. And this is the tool I’d reach for to do it.

Scriptable

Automate iOS using JavaScript

An alternative to Shortcuts for scripting on iOS. Seems compelling.

Introducing o(m)g:image

Social share images are basically billboards on the information superhighway. Perhaps they were intended to convey additional context about the article, but in practice they’re really just screaming to catch your eye (and attention) and hopefully make you click.

How can I can turn my website into the Wall Drug of the internet?

100 miles to Wall Drug

50 miles to Wall Drug

25 miles to Wall Drug

10 miles to Wall Drug

Countdown accelerated anticipation doesn’t work, because websites are always one click away. Unless I create a labyrinth of indirection—multiple properties across dozens of domains.

1,092 miles to Buccees

That is a real billboard I have seen.

Chicago Kare by Duane King

A Faithful Reproduction of the Bitmap Version of the Chicago Typeface Created by Susan Kare for Apple Computer in 1984.

Reading words set in this type took me all the way back to the computer lab in elementary school. I’m just happy this exists and I can download it.

Offensive Horticulture

In this series, I’ll be using the definitions interchangably because I’m not a good writer.

This is a great sentence. Good writers set the tone and the expectations.

In Kyoto

In Kyoto,\
hearing the cuckoo,\
I long for Kyoto.

A beautiful little poem that I came across in the course of my weekend.

Being in the details

Middle management is not just a communication bus. You should be making things happen.

A parked car needs no alignment. A vehicle’s need for realignment is only revealed when observing it in motion.

New senior managers who have become highly effective at managing smaller teams may overdelegate in larger organizations to the point that they require someone else to answer all of the key questions for them. This is a bug, not a feature. You need to know what your org is doing if you are accountable for it.

Which requires some kind of organized communication bus, which cannot be the entire job.

Facets and Social Networks

Current social network technology strongly favors the former: if you write about just one area it’s much easier for algorithms to figure out who to show your posts to. And so you see a lot of advice to build your personal brand about an area: write about cooking, or housing policy, or military history.

This is very much not for me. I want to write about whatever I want to write about, which is a lot of different things, and I’ve generally just accepted that this is a bad fit for Facebook and the other places people read my writing.

The desire for an author to write about whatever they want to write about resonates strongly with my own desire for writing.

I can add this to the pile of excuses for why I haven’t shared my writing. Or I can just get over it and start writing.

Interview with Tobi Lütke

Lots of gold nuggets in this interview with Shopify Founder Tobi Lütke.

My attention is the most liquid and valuable resource that I have.

It’s okay that every day doesn’t look the same. Embrace the liquidity of your most valuable resource!

if those assumptions are faulty, the seemingly perfect decision is faulty too.

Challenge every assumption, especially your own, to arrive at good decisions.

One of my biggest beefs with engineers, in general, is that they love determinism. I think there’s very little determinism in engineering left that’s of value. An individual computer is deterministic; once you introduce even just a network connection into the mix, everything becomes unpredictable and you have to write code that’s resilient to the unknown. Most interesting things come from non-deterministic behaviors. People have a love for the predictable, but there is value in being able to build systems that can absorb whatever is being thrown at them and still have good outcomes.

Build systems that handle the unpredictable. This is why people with an emergency fund sleep better at night than those who assume nothing in their life will ever fail.

Syndicating to Bluesky

One day Bluesky will go away. It won’t matter much to me. My website will still be here.

I’m going to join the POSSE strategy.

The Cleanse

the lack of healthy debate on most social media is one of the core issues with the platform. Humans must disagree, but these platforms do not provide a proper bi-directional medium (or set of tools) for these debates

Normalize disagreeing respectfully. Can this medium even support it?

in the primarily anonymous world of social media, it’s normal not to consider the other human a human. They are the last thing they wrote that you disagree with. There is no relationship; it’s simply the last thing they posted. And how do you feel about that post.

Eleanor Rosevelt said something along the lines of “Great minds discuss ideas; average minds discuss events; small minds discuss people.” It seems like we’ve all become great minds, but have forgotten their is value from the other points on the belle curve.

Great hearts care for people; average hearts show up for events; small hearts hold only ideas.

Not everyone needs to be talking to customers

Putting everybody in one room is the lowest denominator of collaboration. Same with asking everyone to take part in the same work.

Everyone in the same room should be rare, to refill the trust batteries. Everyone in the same room as the mode of collaboration is waste.

Real collaboration is when someone knows something deeply, another person knows something else deeply, and we put our heads together. We bridge the gaps, we fill in different perspectives, we add in information the other doesn’t have. It’s 1+1=3. More comes out than we put in.

1+1 can equal 3. 1+1+1 can also equal 3. 1+1+1+1 can equal 2. The limit approaches zero.

What we need to collaborate better is (1) appreciation of each others’ strengths and (2) a common language to communicate with.

Creating the common language takes time in smaller groups.

How I ship projects at big tech companies

Shipping in a big tech company is a very different skill to writing code, and lots of people who are great at writing code are terrible at shipping.

This statement is true at all scales of companies based on my anecdata.

Projects do not ship automatically once all the code has been written or all the Jira tickets closed. They ship because someone takes up the difficult and delicate job of shipping them.

Tasks done as the definition of shipped feels very waterfall. Each completed task reveals more information about the gaps between what’s been done and when the project will be done.

What does it mean to ship? It does not mean deploying code or even making a feature available to users. Shipping is a social construct within a company. Concretely, that means that a project is shipped when the important people at your company believe it is shipped.

I resonate with this idea that “shipping is a social construct”. It seems to explain why defining what “done” means is so difficult to nail down. It’s dynamic based on the scope and impact and progress of the project.

Really, the whole thing could be highlighted. Go read it.

link-to-text-fragment

The Link to Text Fragment extension allows for the easy creation of text fragment URLs via the context menu

Linking to text fragments is a thing that I forget is available. Putting it into the browser extensions may help me remember.

Accessible tips for people to protect their privacy

These steps can reduce risk, which is great, but it’s not the same as eliminating risk. Do what works for you, and do it as consistently as possible. The best steps you take are the ones you take. Start small, build up gradually, and make informed choices.

Some times all you need is a README on GitHub.

Four Years in New Brunswick

I don’t like how certain events have played out, but I’ve learned to accept that - while I am only in control of myself - I am in control of myself. I’ve learned not to assume responsibility for the feelings and actions of others. I’ve learned boundaries. I’ve grown. And I’ve had to accept that not everyone is interested in that growth.

Emphasis mine. Because it matches my experience over the last few years.

…my wife and I have largely gone where life has taken us. That has led to great adventures, but it has also carried great costs…

…change is slow. We’re more in the driver’s seat of our own lives than ever before.

I’m bookmarking Ash’s blog post because it feels like something I could have written about my similar experiences.

Conferences talks from Sandi Metz

The secret to my success as a developer has been watching every talk Sandi Metz has ever recorded, reading every book she’s ever written, and assuming her instruction is correct until proven wrong.

This is not a democracy

As a leader, you can change the rules. You can do so unilaterally. It is so often your job to make the hard calls. No one writing this newsletter would tell you otherwise. What we can tell you, though, is that when you change the rules your people will notice. And at that moment, they will have some hard calls of their own to consider.

A leader can create whatever environment they want. Everyone will choose how they want to respond to that environment.

Colophon (Interconnected)

The site is served by Apache2 with mod_wsgi from a lowish-end Ubuntu instance hosted at Digital Ocean. I don’t use an dedicated app server, or a CDN or cache. Posts have hit the top of Hacker News a handful of times without load struggle; this approach seems fine.

Another drop in the bucket of anecdotal evidence that I do not need the complexity of a git based workflow, Netlify, etc.

But what I lose in simplicity I gain in control.

This is the unspoken trade off of static site generators. I want control. I want dynamism.

In praise of hype docs

I quickly realised that if I didn’t toot my own trumpet (or at least record the notes I played), they’d quickly get lost in the noise of a 500+ person organisation.

Striking the balance between shipping code and highlighting why those contributions are valuable is an art unto itself. It can feel like documenting your own career becomes your career in a large enough organization.

A Message From the Past (Thoughts on Nostalgia)

When thinking about our own lives, we don’t remember how we actually felt in the past; We remember how we think we should have felt, given what we know today.

The transition from uncertainty to certainty melts the memories of anxiety and worry.

So much of what matters in investing – this is true for a lot of things in life – is how you manage the psychology of uncertainty. The problem with looking back with hindsight is that nothing is uncertain. You think no one had anything to worry about, because most of what they were worrying about eventually came to pass.

“You should have been happy and calm, given where things ended up,” you say to your past self. But your past self had no idea where things would end up. Uncertainty dictates nearly everything in the current moment, but looking back we pretend it never existed.

Michael Scott said it best: “should have had hindsight.”

Nice, nice, very nice

The neat part about cultural change is that it’s a rolling average of the last thousand or so interactions you’ve had. And the really neat part about humans is how quickly we adapt to changes in culture.

Can I show up intentionally 1,000 times in a row? Will I show up with adaptability 1,000 times in a row? Its probably a dance of both.

a disagreement happening out loud is one we can resolve. A disagreement happening in silence is not.

Disagreement, like expectations, need to be shared out loud if there is going to be any relational progress.

HTML for People

Though I work professionally in the field, I feel strongly that anyone should be able to make a website with HTML if they want. This book will teach you how to do just that. It doesn’t require any previous experience making websites or coding. I will cover everything you need to know to get started in an approachable and friendly way.

I resonate with this message deeply. Learning HTML was one of the best happy accidents of my life. I hope this resource stays available for a long time.

Here’s What Not To Do

A brief introduction to Cicero got me thinking this morning. A cautionary tale for those of us who like to live in the world of ideas. (It me.)

He loved to talk about it, he was fascinated by it intellectually, but his ego and his expensive tastes got in the way of actually practicing it day to day.

It’s easier to want to curate a vibe that projects an identity than to practice a discipline in obscurity.

He loved the art of rhetoric more than the practice of virtue.

And, as always, “actions speak louder than words” in the long game.

Acquiring Fireside

As they say, first time founders are obsessed with product and second time founders are obsessed with distribution.

I didn’t know they said that. But it makes sense and I trust the founders who have gone before me.

iA-Writer-Templates

Templates are built with web pages. You can use HTML, CSS, and JavaScript to lay out your documents. If you know how to make a web site, you can easily make an iA Writer template.

You can use HTML, CSS, and Javascript is a great lead to any publishing endeavor. Remember OSX widgets built with HTML, CSS, and JavaScript? What a joy!

Your Way Is the Only Way

A talented person can quickly become mediocre when you force them to be someone they aren’t.

Are there any examples of it going the other way? Can talent supplant mediocrity through the denial of self?

You do your best work and have the most fun when you’re not burdened by fear that someone else thinks you’re doing it wrong.

Remember to correctly frame your relationship to research. Not everything that is written down is right. Often it was right, for them, in context.

Blogging & Listening

So if you don’t know what to blog about, listen. Listen to what you hear and write it down. I doubt you’re the only one hearing it, but you can be one of the few writing it down.

Listening refines my thinking. Writing refines my thinking. Imagine what could happen if listening and writing oh look a squirrel.

The 4 components of product quality: performance, bugs, completeness, and consistency

These 4 components of quality have proven to be straightforward, independent, mostly measurable streams to track. There’s no need for a “grand quality metric” which combines them, and no complex coordination system required to manage all these in lockstep. Customers are happy when any of these improve, so I can just make progress on each of them individually whenever it makes sense.

I’m always down for a simple system that does not overcomplicate things.

Smooth Space

And screens are the exception that prove the rule because, as Byung-Chul Han has noted, we look through them rather than at them. Screens don’t decorate the physical environment so much as they invite us to stare through a window into a different kind of non-place.

I’m writing these reflections of interest into my special corner of the non-place.

Slop is Good

The web has always been built on trust.

TCP/IP, HTTP(S), DNS, HTML, CSS, and many other protocols along the chain are the medium. And the medium is the message. Trust is at the core. The message of slop goes against the grain of the medium of the open web.

The human component of the web won’t change. People will need answers that they can trust. Folks on the web are also resourceful; they always have been.

It’s humans trusting humans all the way down. We’ll build new networks of reliable information we can trust. Or, to quote the world’s most reputable chaotician Dr. Ian Malcolm: “life finds a way.”

Ephemeral tic tac toe

What a brilliant idea. And implementted in a codepen, to boot!

Nobody wants to use any software

Nobody wakes up in the morning thinking, “I want some software.”

This is a problem for those of us who wake up desiring to build software, hypothetically.

I want a milkshake. I want to drink a milkshake, preferably with a friend, while we sit around and talk in person

Me too. But often I’ll talk about building software, in Ruby.

I hope nobody ever screams at their phone or their computer because of what I’ve done. I’m sure they have, and I hate it. 

Same.

A Stalled American Dream

I’ve come to realize I don’t like America, not as a place to live. We have an ugly, selfish, winner-take-all culture — devoid of community, meaning, and the majestic — and almost all our policy is built around the notion that individual liberty, with the most stuff at the cheapest price, is the ultimate good

A brutal run on sentence from a guy who’s walking around the world.

Susan Wojcicki, a Pivotal Chief of YouTube, Dies at 56

I read this obituary of Susan Wojcicki. She was the chief of YouTube. She died of lung cancer.

It could have been anyone’s death that caused a moment of reflection and meditation. This obituary did it for me.

She was only 16 years older than me. She led one of the biggest culture shifting platforms of our lifetime. She’s still dead.

Steve Jobs died over a decade ago. The culture of Apple has slowly degraded and changed. The brands and institutions being built outlive their founders. The founders still die.

What did they say when you told them?

When a grievance like this lands in front of you, there’s a sentence to get good at. If you need to, you can practice it in front of the mirror first. It goes, “what did they say when you told them?”

It’s a gentle shove. You’re not saying “I don’t want to hear it.” You’re just reminding them that it’s a fair expectation that they would try to resolve it directly

I want to get better at this. Embracing conflict is a learned skill and I’m early in my practice.

Chase the product, not the data

In many organizations it doesn’t matter if the product gets better, so long as the weird garbage kaleidoscope that we call “data” gets better.

A product distributed transmutes into data if you don’t contend for the product.

Design ain’t a democracy

building should be hard, decisions should be easy and if that’s not the case then it’s management who’s to blame

Optimize for quick, bold, reversible decisions.

Against the Advice of My Superintelligence

Solicited advice is rare because people don’t solicit advice. All this time I could’ve asked my friends/family how to be happier. But I avoid honest feedback. I elect to “flop [sic] around and find out”. No flashlight – at full speed, I will navigate this dark landscape entirely with my big toe, which is now gnarled beyond medical intervention (and divine intervention).

Halfway to a Third Place

As often happens, it probably became necessary to finally name the third place because it was disappearing from the American landscape

Disappearance as the catalyst for naming is a sad sentiment. But it rings true in many contexts.

the uncanny valley of blogging

I have stopped thinking of myself as an observer and critic and started thinking of myself as a preserver and transmitter.

There are different motivations for writing and sharing online. Conservation, preservation, and transmission resonate with me.

3-2-1: The key to great relationships, the will to achieve, and beauty as a guiding principle

“Some projects benefit from early action. If you’re writing a book, it’s easy to spend a lot of time brainstorming titles and dreaming up an outline, but it’s better to simply write. The book discovers itself as you go. Yes, you’ll need to go back and organize things, but this is easier to do once you have material. The key is to act first and then organize your thinking.

Other projects benefit from early planning. The best way to build a skyscraper is to plan carefully. If you start placing steel beams on day one, you’re guaranteed to run into problems. It is harder to make changes once you’ve begun. You’ll need to tear it down and start over again. The key is to organize your thinking and then act.

Do you need early action or early planning?”

There’s more than one way to achieve a goal. Know which mode would be most helpful. I’ve also heard it described as “scrappy or scaling”.

Living with Linux and Android after two decades of Apple

Don’t be afraid to take the trip, but give it at least two weeks (if not two months!), and don’t think of the journey as a way to find the same home in a different place. Be open to a new home, in a new way, in a new place. You might just like it.

David is talking about migrating from Apple to Linux and Android. The paragraph applies to all kinds of experimental life changes.

You Don’t Get To Do This Anymore

This is the price of success, of a platform, of power—that is, responsibility. Honesty is still required, but discretion is too. Catharsis is something you’ve given up. Venting is for outsiders. Speaking off the cuff is off the table. You’ll have to learn to keep some things to yourself now. You’ll have to be disciplined, conscientious, deliberate. You’re too visible now. Too much depends on you.

The Switch

The ease of transition is suspicious. How did this happen? Why did I magically wake up and find it simple to return to work on this day of all days? If I don’t understand it, anything might switch it off again. So I err on the side of secrecy, and remain a jealous guardian of my time.

Seasons of work ebb and flow. I want to find the secret to the seasons that have clicked for me.

Creativity is the byproduct of work

Great ideas don’t come to me if I wait for them, they happen whilst I’m bouncing my head off the wall.

Action begets insight. Insight inspires action. It’s a virtuous cycle.

Don’t wait. Just keep noodling. Creativity isn’t a thing that you are, or a thing that you will be temporarily in the future. Creativity isn’t luck, either.

Creativity is simply a byproduct of work.

Do. The. Work.

Do You Want New Wave or Do You Want the Truth?

One of the most graceful ways you can age is by becoming a person who sits around outside doing nothing. I’ve started doing it a bit myself.

I’ve been sitting outside doing nothing since my twenties. I want to pick up the frequency on doing nothing for hours.

It’s not just that iPhones are easy for babies to use—iPhones are actually for babies, and when we use our phones we become more baby-like ourselves, endowed with agency-on-training-wheels. You can see why we lose interest in the edge of the sidewalk.

“Agency-on-training-wheels!” What a perfect sentiment for feeling empowered when viewing the world through a window.

Group Chat City

At this point, group chats are probably overtheorized. They are a seemingly irresistible object of cultural analysis and trend reporting, perhaps because they are so subliminal—the information layer just below the surface of daily experience, literal subtext, hidden in plain sight, begging to be brought into the foreground and discussed.

This article made me wonder if I’m in far fewer group chats than my peers. But I’m afraid to ask because I don’t want to be invited to even more than the few I already manage.

What can we remove?

Our bias is to always add more. More rules, more process, more code, more features, more stuff. Interdependencies proliferate, and gradually strangle us. Systems want to grow and grow, but without pruning, they collapse. Slowly, then spectacularly.

Prune the fruit-bearing branch, or cut back the dead wood. Either way, a cut is coming.

When convenience becomes a liability

Resiliency of storage trades off against ease of sharing with others.

Emily and I are trying to find a way to share photos from a three month road trip in Apple photos and it’s painful.

Endless Shrimp Jesus

This post is about a cynical analogy for understanding the generative AI boom.

Explain it to me like I’m addicted to cheddar biscuits.

The popover drama

Software development is full of merchants of complexity. They will tell you about great engineering practices and how to optimize for the local, but they never stop to discuss cost/benefit or how the system as a whole will suffer. The recent debate was a great showcase of such a way of thinking.

Curation, search, and the future of the web

I think curation, actual human curation, is going to play an important role in the future. In a web filled with generated nonsense, content curated by knowledgeable human beings is going to be incredibly valuable.

The Brazilianization of the Internet

When institutions die now, they rarely give us the closure of ceasing to exist—they live on in zombie form, and we learn to tolerate the gradually worsening conditions they impose.

I don’t know that this is new. The haunting of long dead institutions still holds sway on culture.

The red badge notification used to be one of the most reliable indicators of signal amid the noise, but even that has degraded, thanks to proliferating groupchats as well as the feature’s exploitation by legacy platforms. Now you have to come up with your own system, or brace yourself for an onslaught of meaningless alerts.

Growl was great because it was novel and opt-in. Notifications as a first class primitive of the operating system is a burden because it’s opt-out.

Errors Aren’t All Bad

Allow me to make errors and give me the space to correct them, rather than preventing them altogether.

A system without errors has completed the work of entrenching all biases. Acknowledgement of the error state would be ceding the truth that other ways of being exist.

How I Think About Debt

As debt increases, you narrow the range of outcomes you can endure in life.

Debt trades away future optionality for accelerating the present desire. Accelerating a nascent desire is not worth the trade most of the time.

Tacos El Gordo

Best tacos in Gaslamp. A group from Planning Center ate here before the Reds vs. Padres game. The tacos were incredible enough that I wanted to write it down to remember later.

Is the Internet the Enemy of Progress?

the pull of online reality and headset-mediated simulations almost automatically carries us toward a variation on the Crichton dystopia, a version of stagnation that’s sustained by the illusion of exploration, an age of fundamental conformity disguised by the personal tailoring of everyone’s private holodeck.

The diversity of personalized simulated realities with sensory-dense stimulation will become a commodity. It will result in wide-open spaces with nothing to do becoming a luxury good, available only to the affluent.

How the internet became shit

There’s a reason many people are now searching Reddit rather than Google. Since it’s more difficult to monetise content on Reddit, there is less incentive to stuff it with SEO goop in an attempt to capture keyword rankings.

Every where I look: incentives.

Move at the speed of trust

whenever attempting any effort with other people, prioritize building trust and respect for each other over and above any other goal. The trust forms the foundation from which the work can grow.

Trust requires movement. The tension of drifting apart reinforces the importance of strengthening the bond.

James Clear Newsletter

Is the situation actually complicated or is it really quite straightforward, but you’re making it complicated because it requires a lot of courage to make the straightforward decision?

Complexity can be incidental. It can also be an avoidance mechenism.

Good and useful writing

The most important lesson that blogging taught me is that writing is for thinking first, communication last.

Write to think! Write to communicate! In that order!

Fill up those praise folders

anytime someone says something nice about you, record it in a central place that you can go back to. Keep up this habit for even a few months, and you will start to have a little resource for the days when your inner critic tries to tell you that you’re no good at anything.

A valuable resource if you can build it.

On the DNA of Companies

Their current homepage has the feel of a departmental civil war, with little fiefdoms vying for above-the-fold favor from their feudal lord, constrained by their in-fighting to produce copies of their conflict.

Not exactly inspiring for the consumer. Or good for business. People mostly care about their problems being solved for a price they can live with. On the surface of that exchange, none of the org charts, internal politics, policies, procedures, KPIs, or corporate culture jargon du jour matter to the customer. But each of those things affect the customer, since they shape the outcome. So companies should care, if they want to stay in business.

Expose Platform APIs Over Wrapping Them

Additionally, you don’t solely write code. You also run it and debug it. When I open my webpage and there’s a 1:1 correspondence between the <meta> tags I see in the devtools and the <meta> tags I see in my code, I can move quickly in debugging issues and trusting in the correctness of my code.

the biggest threat facing your team, whether you’re a game developer or a tech founder or a CEO, is not what you think

It went from a studio constantly making new, amazing things to a studio that just. Kept. Making. The Same. Things. And they started losing the experts who knew how to make things and started bringing in people whose job it was to simply make more of the thing

A common refrain in every failure, from Marvel to Warner Brothers to Boeing, was this: “Leadership doesn’t know what they want,” and “leadership doesn’t trust the people who know what they’re doing to do their jobs.” It’s a deadly combination — people who try to use easy data to justify making decisions when they don’t know the first thing about a product, because they’re too busy numberfucking and datafucking to try to make number bigger, results in every one of these companies getting worse.

The only people who can survive repeated failures are the people running platforms and stores. If you aren’t doing that — and it’s impossible for you or I to go into our garage and start a new Apple, because instead of competing with nobody for the personal computer or games console, we’re competing with the biggest, most stable companies in the world, with research and development fortunes that will smother us alive.

Smart Words From Smart People

“I believe pretty strongly that one’s overarching aim in life and work is to always be making one’s self obsolete.” – Tim Hanson

I’ll become obsolete anyway. Might as well prepare the way for those I care about.

Leadership requires taking some risk

If you want to make choices, expect that you’re going to be accountable for outcomes

Be mindful of holding opinions about everything and making decisions about nothing. Decisions speak louder than commentary.

A risk-free existence isn’t a leadership role, regardless of whatever your title might be.

Leading people is inherently risky. If there’s no risk involved, it’s probably not leadership.

The upside is that almost all meaningful personal and career growth is hidden behind the risk-taking door. There’s a lot of interesting lessons to learn out there, and while you can learn a lot from others, some of them you have to learn yourself.

Make better documents.

A super practical collection of actionable advice for writing in the workplace.

There's no such thing as a zero-marginal-cost free tier

If you’re a conventional SaaS, by offering a free tier you are allocating money (in the form of ops load, compute, and various other things) in order to acquire customers. Whether or not that offering is correct is not subjective or qualitative: it’s just like any other avenue of paid acquisition, where you look at CAC and you look at LTV and you look at your runway and you call the shot.

Daft Social

This is the most compelling social media I’ve seen yet. Send an email. Embrace the subject line. That’s it.

Tech has graduated from the Star Trek era to the Douglas Adams age

When technology becomes absurd, we must respond with absurd inventions.

More than that, we must straight-faced embrace the absurdity. Otherwise the pomposity of today’s technology will eat us alive.

32-Bit Cafe

Yes. You can build your own website. 32-Bit Cafe has the no assumptions guide you need to get started.

Lenticular Photos

My favorite lenticular illusion was a Ghostbusters bookmark. This is a pleasing effect that makes reasonable use of on device technology. Jump strait to the prototype and tilt your mobile phone.

A dozen thoughts about AI

Maybe we need a new fairy tale about a kid who lets a witch’s robot do all their chores and then the kid gets eaten up by the witch.

100% onboard for the re-emergence of cautionary tales to introduce children to the dangers of putting too much trust in technology.

SvelteJS Tenets

I haven’t used Svelte beyond tinkering with demos. It’s easy to align with these tenets in the abstract.

Hill-Making vs Hill-Climbing

Hill-making, hill-climbing, and hill-finding are all mentioned in this piece. A great metaphor to think through team interactions.

I’ve noticed that conversations between a hill-makers and a hill-climbers devolve quickly. One person thinks about terraforming the landscape. The other person assumes a fixed landscape that need only to be taken. Then there are others who will only ascend the hill if there is a clearly marked path before them.

Don’t Disable Form Controls

This burden should always be on the author, not the user. If you find yourself blaming the user for the pattern you built, you might be bad at your job.

Squeaky Wheel Gets the Grease

Any working system can become invisible to the point where the system loses value because it’s working.

“Look at all the things that aren’t falling apart” is one of the greatest challenges of building tight operations. Things that are done well are invisible because the problems are being consistently, adequately, and even automatically solved.

Enhance

THE HTML FIRST FULL STACK WEB FRAMEWORK

The bold headline worked on me. This is one to watch. Their “server rendered custom elements” feels like a good name for what I was playing with a few weeks ago.

HTML!

The Trust Flip

We will come to see that our default of “trust first and check later” was only a short temporary anomaly in our long history. We are back to the state we have been in for most of our time as humans, where we “check first and trust later.”

This historical perspective is helpful. It is a short window of human history where photographs and videos were the primary validation of truth claims. We’ve operated on networks of trust and reputation before. We can operate on them again.

"enshittification is what happens when a disney adult learns about captialism"

every venture backed company has the following plan: spend a lot of money to gain a monopoly, use the monopoly to price gouge everyone, replace all core services with subcontractors until the company only exists to add a 5% convenience charge on all transactions.

5% of the biggest pie is always going to be bigger than 100% of a small pie.

There will always be outliers who aren’t here to eat pie. The folks who enjoy the end-to-end practice of baking a pie from scratch. And seeing our friends enjoy it.

Acts Not Facts weeknote #7

It is insane how itchy and irritable I get when there is something I want to get out in the world, and it is just inches away from getting there. I always forget.

It’s like… when something is out, whether it’s a public demo or better in people hands, it can stop living in my head and start being material that I work with to make the next thing.

(This goes for things I’m making with my own hands or making with other people.)

And when I’m carrying something half-complete in my imagination… it’s a weight, it’s a drag.

So it’s not just me. Phew.

The radiating programmer

Radiating information is not free; it takes time. You need to find a balance that makes sense. I estimate I spend one or two hours per week writing what I did or project updates. I usually leave it for the last part of my day. It doesn’t interrupt my main focused work, and it doesn’t happen every day. It’s also a muscle to train. The more you do it, the easier it gets.

And whenever it feels like a chore, I remind myself that it is a chore that lets me spend most of my time doing what I like.

I’ve noticed that humble people tend to share too little information. They want to avoid the risks of appearing arrogant. They want the work to speak for itself.

These are good motivations. Nobody wants to work with the arrogant one. And the work should be good enough to speak for itself.

Distilling a week’s worth of work down into a digestible paragraph or sentence is a skill. It is an amplifier to the work that speaks for itself. And the work that won’t hold water in two weeks time.

Summarizing accomplishments is an extract of the raw goods. Good work can be communicated in brief summaries. This signals that the essence of the problem being solved was understood. Shotty work makes for disjointed summaries. The person is trying to get to the essence of the problem for the first time in reflection.

You hear about this all the time. A thoughtful person goes to write the git commit. While writing about the problem and their solution they uncover a new understanding of the problem and a clearer solution. They don’t settle for first impressions and first drafts. Their own writing is a feedback loop that improves their writing.

Unsigned Commits

Commits cannot meaningfully be changed to become signed retroactively. Unlike an online website, they are part of a historical record, not an operating program. So we cannot establish the difference in treatment by changing how unsigned commits are treated.

Thinking of a website as an operating program is a new thought for me. “Static site generators” shape the thinking that websites are static. The request/response lifecycle that takes my html to your machine is not static. It’s alive!

That probably seemed like increasingly unhinged hyperbole, and it was.

This is a great sentence. Unhinged hyperbole respects unhinged hyperbole.

Just from a baseline utilitarian philosophical perspective, for a given action A, all else being equal, it’s always better not to do A, because taking an action always has some non-zero opportunity cost even if it is just the time taken to do it. Epsilon cost and zero benefit is still a net harm.

Opportunity costs and unpredictable second and third order effects are always present. This isn’t a reason to not take action. It is a reason to truly find value in the desired outcome of the action being taken.

What I am actually trying to point out here is that it is useful to carefully consider how to avoid adding junk complexity to your systems. One area where junk tends to leak in to designs and to cultures particularly easily is in intimidating subjects like trust and safety, where it is easy to get anxious and convince ourselves that piling on more stuff is safer than leaving things simple.

Less is more.

People & Blogs: Ran Prieur

Fame is when people who don’t know you, build an image of you in their head for their own purposes, and if you behave differently from that image, they get mad at you

I don’t want to be famous.

What PWA Can Do Today

This website is living and installable documentation about progressive web apps. I learned a few things while tapping around it on my iPhone.

Kagi Search - A Premium Search Engine

No ads, fast and personalised results. The search engine you deserve.

I’ve made the leap to paying for email. The time may be approaching to begin paying for search. Privacy is worth it.

My Two Journals

And yet, as much as I enjoy this handwritten journal, I still use Day One in the evenings. The two journals flow from different parts of my brain, though they work together in an interesting way.

This matches my experience. There are different flow states in different writing environments. Even within the same medium.

Before shelving it in its lovely slipcase alongside my other paper journals, I archived a PDF copy with the scanner app on my iPhone for safekeeping.

I’ve got a box full of journals that date back 20+ years. Digitizing them has been a long horizon idea. Something as simple as scanning them into PDFs using Notes on my iPhone hadn’t occurred to me as a minimal first step. I’m gonna take it.

A Chain Reaction

But wait, here’s a question. These transformations have to happen somewhere on the way between your computer and mine. So where do they happen?

Do they happen on your computer?

Or do they happen on mine?

This is a pretty pedantic post. And I think it needs to be. But the trailing question is the best. Transformation of named custom concepts into agreed upon standards has to happen. That’s web development.

Where that translation happens? That is the question.

Only you can give meaning to your career: How to mark moments that matter by planting a flag

But here’s the thing: I create these things for me and me alone. When a bunch of people read something I wrote or show up to one of my talks, do I find it encouraging and validating? Sure. But it’s not what drives me. I started creating things to punctuate my life’s sentences long before anybody took an interest in me and I wouldn’t stop even if everyone loses interest in me.

What’s more, a lot of (ugh) content creators are the same way. In the course of my travels, I’ve gotten to meet many of my heroes, and while a few have disappointed me spectacularly (don’t meet your heroes!), I’ve found that a surprising number of them got into the thought-leading racket for the same selfish reason I did. They create stuff to scratch their own intrinsic creative itches and to give meaning to their careers. If other people’s attention factors in at all, it’s usually to justify the time they spend making stuff.

A few gems in this blog post. A few things that ring true to me:

Is htmx Just Another JavaScript Framework?

javascript fatigue:\
longing for a hypertext\
already in hand

I was delighted by this haiku. The rest of the article is fine. What I want to remember is the poem.

How to rename a tag in pinboard

curl "https://api.pinboard.in/v1/tags/rename?old=OldTag&new=NewTag&auth_token=YOUR_API_TOKEN"

I use tags for importing Pinboard bookmarks into my website. I wanted to rename tags when changing from https://www.danott.co to https://danott.website. There’s no clear way in the Pinboard website. But this API endpoint did the trick!

The unimagined orange and new frontiers in management consultancy

I’m going to be on the lookout for triangle plots that need to exist. 2x2 matrices are great. Venn diagrams are great. Bringing three dimensions adds the nuance that drives depth perception.

RSS Anything

Transform any old website with a list of links into an RSS Feed

Yes, please.

Cold-blooded software

Maybe your CI isn’t working because one of the services you depend on got bought or ran out of money. You add a new dependency and find yourself needing to upgrade your compiler. Another package you depend on is deprecated, and doesn’t work with the latest version of the compiler.

Some projects are different. You work alone, make some changes when you’re inspired, and then don’t touch it again for another year, or two, or three. You can’t run something like that as a warm-blooded project. There’s not enough activity to keep the temperature up.

This dichotomy of “warm-blooded software” and “cold-blooded software” is really helpful. It invokes feelings of “choose the right tool for the job”, but on an entirely different horizon. Production applications with paying customers can carry the costs of being a warm-blooded project. A personal blog might be more suited to being a cold-blooded project.

Deep Cloning Objects in JavaScript, the Modern Way

Today I learned about structuredClone in JavaScript. Very cool to see the progress in this language over the years. What was implemented as a best attempt in user land is now a native capability that supports all the data structures, circular dependencies, et. al.

Homeownership

rent is the most you’ll pay, whereas a mortgage is the baseline.

My lived experience bears this out.

Leave the Planet

Forced mobility of this kind is an emerging theme of the 21st century, in contrast to the discretionary mobility that defined the 20th, which began with the advent of the automobile and ended with supersonic air travel—a century characterized by technology expanding the physical scope of life, propelling us faster and faster, juicing us up with kinetic energy until we seemed to overdose on it, a moment perhaps symbolized by the weaponization of airplanes on 9/11.

In a 2019 newsletter, I quoted Alain Bertaud’s observation that “the new proletariat in places like the United States no longer consists of industrial workers, but rather people who are forced to commute for three or more hours a day because they can’t live near their jobs” The same motorized transport that was once pure luxury is now as likely to be a curse.

Luxuries becoming curses is something I’m on the lookout for. Access to information. The immediacy of cellular communication. Working from home. Doordash.

The luxuries in themselves aren’t the problem.

Ask a Sober Oldster #6: Elizabeth Crane

I no longer believe I have the answers for anyone but myself.

Ask a Sober Oldster #5: Ray Cocks

One of my favorite acronyms and one of the first I heard was for the word SOBER: Son Of a Bitch, Everything’s Real.

I haven’t mentioned the improvements in my relationships because they are so close that all I can really say is, life is all about relationship—to everything and everyone.

Tom MacWright's Recently (December, 2023)

Something I’ve been encountering time and time again is the difficulty of getting both “good vibes” and “good ideas” in the same movement.

This tension is real in many domains.

HTML Web Components are Just JavaScript?

Custom Elements seem designed for providing (wait for it) custom elements (markup), while framework components (old and new) put more focus on combining all the elements into reusable templates.

This distinction between “custom elements” and “reusable templates” is helpful. Many (not all) framework component authors don’t believe their consumers can be trusted with the raw materials. So they provide a templating language instead of composable pieces.

The auto-register idea towards the end of the post is compelling. If quickly defining templates with slots is what you need.

Desktop progressive web applications

I love seeing a desktop progressive web application that just works. A Great little utility. And greater inspiration for what can be achieved by going with the grain of the web these days.

Stuck in the Valley of Doing

The mix of status quo bias, organizational inertia, satisficing, risk aversion, and incrementalism is a recipe for change aversion. And everything is OK until it isn’t (at which point you have zero adaptive capabilities and can’t weather the storm).

Prepper Web Dev

Principles to build by.

Faster Horses

The Henry Ford quote is so well known in product development that I don’t need to to quote it here.

“faster” wasn’t the selling point of cars over horses. Speed wasn’t the problem. Spending huge amounts of money, time, and space on keeping horses alive and dealing with the literal horse shit was the problem.

Those original problems are so far removed from modern day. It’s not intuitive to imagine the problems I’ve never had to solve. It’s intuitive to substitue my modern problem of speed over everything.

TL;DR: Henry Ford did not say “If I had asked people what they wanted, they would have said faster horses”. He pretty much said the exact opposite.

Listen to people. Get their point of view. Discover their problems.

Efficiency trades off against resiliency

I mean a much more general notion of “ability to absorb or respond to change” – change of all sorts, including both bugs or failures, but also change in product needs, change in the market, change in the organization or team composition, whatever.

The true competitive advantage is being able to adapt to changing conditions.

A system with no slack is efficient as long it works, but brittle and will break down quickly in the presence of any changes to its usual operating modes.

When we accuse a system of being wasteful and inefficient, it’s worth pausing to ask what that “waste” may be buying. When we set out to optimize a system, pause to understand where the joints and flexibility in the current system are, and which ones are vital, and to do our best to preserve those. When we set metrics or goals for a system or a team or an organization that ask for efficiency, let us be aware that, absent countervailing pressures, we are probably also asking for the system to become more brittle and fragile, too.

“Become more fragile” is not something I would wish on any team. This is helpful framing.

Typography Manual by Mike Mai

A beautiful little site with big opinions about web typography.

libraries vs. publishers

publishing conglomerates don’t care about readers; they only care about customers. If they had their way reading would be 100% digital, because they continue to own and have complete control over digital books, which cannot therefore be sold or given to others. They are the enemies of circulation in all its forms, and circulation is the lifeblood of reading.

Circulation is a word worth dwelling on. Even at rest, there is constant circulation of certain resources.

The difference between ambition and entitlement

Ambition is when you expect yourself to close the gap between what you have and what you want.

Entitlement is when you expect others to close the gap between what you have and what you want.

Moderate Drinking Has No Health Benefits, Analysis of Decades of Research Finds

For decades, scientific studies suggested moderate drinking was better for most people’s health than not drinking at all, and could even help them live longer.

A new analysis of more than 40 years of research has concluded that many of those studies were flawed and that the opposite is true.

Whoops.

Who runs Engineering processes?

What I’ve learned since, mostly through designing thoughtful processes that nonetheless failed, is that good process is a deliberate tradeoff between quality and overhead.

This reads like the managerial manifestation of “do you want more boilerplate or more magic [in your codebase]?” Nobody likes having more overhead…but nobody likes defaulting to uncertainty to handle routine situations, either. Knowing that the tradeoff must be made made feels like the smallest increment of progress.

This Is the Beginning of the Fourth Revolution of Work

The technologies that most empower humanity almost always produce a shadow ledger of pain. The steam engine unleashed the industrial revolution and brutally shortened life spans. Nuclear technology can power energy reactors or atomic bombs. The internet makes us productive and unproductive, delighted and miserable, informed and deluded. Like the future of everything else, the future of work will be, above all, messy.

There is no silver bullet. Every benefit has associated cost(s).

Scattered ChatGPT thoughts

I try to have the things in my life — particularly books, media, and software — be as high quality as possible, because I enjoy having a nice life where things work and I am surrounded by beauty. Seeing people transfixed by a machine that can generate massive amounts of mediocrity is baffling to me.

Flattening the curve on creativity.

Liberating Our Homes From the Real Estate–Industrial Complex

The home is no longer seen as a space of personal expression or comfort, or as the backdrop of everyday life, but primarily as an investment and as an asset—meaning that enforcing one’s aesthetics is a financially detrimental decision. Those with the capital to become homeowners (already a diminishing segment of the public) conceive of their houses as being for selling before they even live a day in them.

Curating our personal space for hypothetical mass appeal is dumb and I want to be done with it.

Overreliance as a service

I like having a mix of bullish and bearish thoughts about ChatGPT and large language models. This critique is worth the time.

[ChatGPT] wants to incrementally bring us to the conclusion that “overreliance” is actually convenience, the classic affective alibi for all forms of imposed automation: Why would you want to bother with the effort of thinking? Where is the edge in that? Why struggle internally with how to express yourself when you can instantly produce results? Why struggle to find new kinds of consensus with other people when all the collaboration we need is already built into and guaranteed by the model? What’s more robotic than doing what society tells you to do and being part of a group?

A prediction engine will flatten the discourse toward acceptable mediocrity.

Convenience has also long served as a way to repackage isolation as a treat.

Geesh. Individual microwave meals come to mind on a completely different horizon of technological advancement. How convenient it is to dine alone in perpetuity.

Modern Font Stacks

I love a good CSS baseline to make things look halfway decent.

Creating a tunnel to localhost with Cloudflare

I’ve always wanted to be one of those kids in my computer science classes that routed all traffic through an SSH tunnel. This is an approach I can keep up with.

The perfect link

An ode to the hyperlink. Practical advice with a focus on accessibility for all.

Doing more only makes a to-do list grow longer

A to-do list isn’t a catch all. It’s not a list of tasks that could be done. It’s a ruthlessly prioritized list of tasks that must be done.

Each and every item on a to-do list must earn its spot. If a new one is to be added it must at least be better than the bottom item on the list.

A set of criteria I’m apt to adopt. I’m great at the capture step of Getting Things Done methodology. The act of capturing is not enough proof of worth. Catch and release is an available strategy.

unsimulated

of course people think we’re in a computer simulation. We always conceive of our minds as a dominant technology of our moment.

This historical trend is a new insight for me. How does the availability of a metaphor shape our mind’s relationship with our bodies? Does reaching for virtual private servers instead of managing racks of hardware cause a devaluation in the embodied experience? Are there trends of (un)health that correlate with hardware choices? Does using Docker cause a person to have a more compartmentalized form of attachment?

The Brink

I always forget this so here’s a reminder for the future: books are always the answer when things suck.

Six tight paragraphs about a reader’s relationship with books and self.

feeeed

Build your own news feed

A beautiful imagining of RSS, web clips, and other bygone ideas that need to come back to the forefront.

Writing an engineering strategy

There’s a lot of nuggets of truth in this post. Worth the read if you’re into (engineering) organizational leadership & health.

The reason most written strategies don’t apply is because they’re actually visions of how things could ideally work, rather than accurate descriptions of how things work today. This means they don’t help you plot a course through today’s challenges to the desired state.

I’ve been encountering this in multiple spheres. Changes in habits are necessary as an organizations grow. Changes in individual habits are slow. Incremental adaptations are the basis of transformation on all horizons. Writing things down should be mostly an act of documentation. Maybe 5% of a document should be testing out a mutation that you’d like to be true.

Once you’ve documented them, discussions will happen more frequently, which will create a persistent pull towards improvement. It’s better to go slowly than to avoid starting altogether.

This also matches my experience. Action begets action. Documentation unearths differences. The key is making sure everyone understands that mutual understanding and shared clarity is the goal. Most documents are editable. Most decisions are reverisble. And most decisions are small bets. One foot in front of the other makes for a nice walk in the park.

An engine of precaritization

At what point do you realize the engine you are building is the one that’s preparing to run you over?

The Coffee Alternative Americans Just Can’t Get Behind

Dilution, added sugar, and individualism sells better than ritual and intimacy. The former is what we want. The latter is what we need.

Writing is thinking

Authenticity concerns aside, a powerful reason to NOT use ChatGPT to write stuff on your behalf is that it will prevent you from thinking.

Every time I write to think I’m happy with how I spent my time. The anecdotes are true. Writing (in english) before writing (in code) produces better solutions. And clearer scopes for dividing up the problem.

The Art and Science of Spending Money

A blog post from the author of The Psychology of Money. Providing a fly-by view of some attitudes that emerge. Particularly of those who are entrenched in their habits.

Manage Your Time

Some immediately actional advice to start making better use of your time. From the author of 168 Hours.

The pitfalls of “cool parent” leadership

I think we’ve lost the idea that there is such a thing as professionalism, but I think we need to bring that back.

This entire article is helpful. Some companies need to inject more empathy into their culture. Others need to quit calling a business a family and bring back the idea of professionalism.

Alias your mastodon account to your own domain with Netlify redirect

I don’t plan to get on Mastadon. But knowing about some of these open protocols and how to satisfy them with Netlify redirects is pretty neat!

How to be a writer on a marketing team without sounding like a jerk

Practical tips for writing within an organization.

“Good enough for now, and safe enough to try"

The title sums it up. What a helplful bit of advice for keeping momentum moving forward. Uncertainty is a constant. Waiting for a solution that completely obliterates it stalls progress. Aim for small safe moves instead.

Aegir.org

This is the best personal website I’ve encountered in a while. Bespoke style on every page at a manageable scale. Don’t be surprised if I end up doing this soon.

Lessons on Leadership: Michael Abrashoff on Turning the Worst Ship in the Navy into the Best

The thing about rules and policies is they become very hard to fix once they are put in place. Both the people who put them in place and the people whose jobs it is to exercise them become highly motivated advocates of the policies. Even if the policies originally made sense, they become very hard to change. When you try to change something but can’t, you start becoming a tenant and stop being an owner.

BICEPS

BICEPS is a helpful acronym for recalling the six core that are important for all humans.

Cynch Propane Tank Delivery

What an amazing business idea. Exchanging propane tanks is a propane in my neck.

Not available where I live, yet. 😢

What’s your webcam?

Joshua Blankenship’s very nice website about web cameras and microphones for telepresence setup.

Don’t tell someone how to feel

All we get to control are our own actions and intentions. Consider those carefully. Then let others be free from your expectations about how they ought to feel about that.

How Social Justice Became a New Religion

I think what we’ve got now is [that] politics is the amphetamines of the people.

A Single file Rails Application

Using single file applications to demonstrate core ideas or reproduce edge case bugs is an invaluable tool. Greg provided a nice little write-up about how to do it.

Just hit publish

in most cases, this kind of perfectionism is holding me back.

Marco hits the nail on the head with this one. The goal of blogging is to share ideas and continually learn. If you wait for 100% certainty and the feelings of authority, nothing will ever be written.

The Thinking Path

Walking at a comfortable pace unlocks better thinking and problem solving. It really is that simple.

Practice the future

practice is a commitment to a process, not a predetermined outcome. And the outcome was not what I predicted.

Viewing the future fatalistically isn’t helpful. Prenteding you can trol the entire outcome is equally helpful. But the insistence on nudging, influencing, and practicing is a nice balance between the two, setting realistic expectations.

Serving as a kind of midwife to change is a magical experience. The opportunities I’ve had to build close and trusting relationships with people, both my reports and others—when I’ve been able to listen deeply, sit with someone through big feelings, or ask open questions and discover the insight that bubbles up—have been the most rewarding parts of my career. The times when I’ve missed the chance to do that represent my greatest regrets.

The analogy of midwifery is perfect. Supporting others as new features are brought into the world. I think this emphasis on coaching resonates with me.

My Three Strikes Rule for Blogging

Here’s how to stop being so darn precious about your blogging: The third time you use an idea in a conversation, you have to blog about it.

A great rule of thumb that I’d like to adopt. And to extend the analogy—there is no use in trying to go back to bat on old ideas that have struck out. They’ll bubble back up if they’re truly enduring, and you’ll get another swing at it.

An app can be a home-cooked meal

Everyone should learn to cook. Everyone should learn to code. Not every cook aspires to be a restauranteur. Some just want to host good parties for their families and friends. You can take the same approach to coding.

In which Beat Saber does odd things to my head

I feel like in our modern era there is an over-fixation on engagement and being in the moment

This is the first time I’ve hear of “in-the-moment”’ism called into question. He goes on to find a quote positing this position from the early days of computer interaction in 1993.

Engagement is not the only virtue.

Design Principles

Adactio’s Design Principles page is an amazing collection of principles from various organizations and individuals.

I’m not a goblin, I just play one in Google Docs

LARP rules everything around me.

Make it boring

Those technologies may seem boring, but boring is fast. Boring is usable. Boring is resilient and fault tolerant. Boring is accessible

Ego and Design

But design work is so much healthier/better when you stop telling yourself that you’re changing lives. Websites can just be…websites! And your front end framework or side project doesn’t need to reshape human civilization for it to be worth while.

Once you relieve yourself of that pressure it’s so much easier to be happy and to do good, useful work.

How to Freaking Find Great Developers By Having Them Read Code

Once heard, this idea seems so obvious that it’s painful. Have candidate read code instead of writing code. Most of the job is reading things that have already been written, not writing new things. I like it.

A Grand Unified Theory of Buying Stuff

The problem is that certain kinds of stuff simply attract more stuff. The home is an obvious one: It craves sofas, sweaters, buffet cabinets, chandeliers. Computers are another; they grow USB tendrils. Smartphones beget earbuds, cloud backups, and music service subscriptions. I am jealous of the people who make it work with an Eames chair, a fancy ottoman, some nice art books, and multigenerational inherited wealth.

The supply chain is fractal: Zoom in on your stuff and there’s more stuff, ad infinitum.

Those HTML Attributes You Never Use

I learned a thing or two from this post. I love me some semantic HTML.

What do executives do, anyway?

…the job of an executive is: to define and enforce culture and values for their whole organization, and to ratify good decisions.

That’s all.

The whole post is great, and this quote sums it up.

Semantic Versioning for Teams

Someone smart said to me that “Teams are Immutable”, so they would contend that if you add or take away one member you essentially have a whole new team because the dynamics and skills within the team are different. So how can you convey that idea that the team is significantly different at different stages in time?

Immutability as the backing data structures for teams is a super compelling mental model. People intuit this during every transition. “This is going to change the team”…the language of mutability. It feels primed for loss, and slightly hopeful for improvemement. Changing the mental model to “this is a fork of the team” seems to mitigate the feelings of loss in my mind.

About these notes

Andy has a fresh take on note taking on the Internet. No index of every note available. All exploratory cross-linking. I dig it!

The idea that having a better future...

The idea that having a better future is mostly about building personal wealth puts the onus on personal responsibility instead of a system that is pitted against entire communities. Everyone deserves to live a great life. And to live in a system that supports them.

I appreciate Ben’s thoughts often. This one in particular stuck out.

Manage with courage

This is a beautiful website. And the content it presents is infinitely helpful for management training.

Mozilla’s vision for the evolution of the Web

I sure do appreciate Mozilla existing, and advocating for the grain of the web.

curl-to-ruby: Convert curl commands to ruby's net/http

Does what it says on the tin. This would be super handy when throwing together Ruby scripts that don’t require dependencies.

What makes writing more readable?

This is what the web was made for. A nice big toggle shows a comparison of writing styles. I want to write the simple way.

Choose Boring Technology

A perfectly named website—where the elevator pitch pretty much says it all.

Webster's 1913

This is what a web-based dictionary should be.

Johannes Binotto

These explorations in the medium of video are fascinating.

hotkey

Trigger an action on an element with a keyboard shortcut

A JavaScript library made by GitHub itself. If it’s good enough for GitHub, it’s good enough for me!

The people of the metaverse

The reason we talk so much about authenticity now is because authenticity is no longer available to us. At best, we simulate authenticity: we imbue our deep fakeness with the qualities that people associate with the authentic. We assemble a self that fits the pattern of authenticity, and the ever-present audience applauds the pattern as “authentic.” The likes roll in, the views accumulate. Our production is validated. If we’re lucky, we rise to the level of influencer. What is an influencer but the perfection of the deep-fake self?

Build your metadata library

Katy DeCorah’s use of GitHub repos and actions to track metadata is super cool! Simple yaml storage for the win!

Recipes for Food

A beautiful collection of simple recipes, without the unnecessary narrative.

spcss

A simple, minimal, classless stylesheet for simple HTML pages

A style sheet for when ~dinosaurs~ plain-old-semantic-HTML ruled the world.

The Big Short of Streaming

Spotify building its business on arbitrage and viewing music as valueless is a take.

Vestaboard

A Smart Display To Connect And Inspire

This is the kind of product I crave. Nostalgic aesthetic with just the right amount of technology to make it useful in a modern context.

Product Ideas

If something is too expensive for most people to buy, standardize and produce in volume.

If later it becomes so cheap that people are no longer price sensitive, make an artisan version.

This is an eternal commercial loop.

I think about this tweet a lot.

Pantheons of gods map to the shapes of complex systems (Interconnected)

Economists are priests of the economy.

Economy as religion is an idea I’ve been tugging on. Especially when reading Debt: The First 5000 Years. Matt Webb expands on this idea much more eloquently than I have.

The 30 Second Habit That Can Have a Big Impact On Your Life

Immediately after every lecture, meeting, or any significant experience, take 30 seconds — no more, no less — to write down the most important points. If you always do just this, said his grandfather, and even if you only do this, with no other revision, you will be okay.

Code is sourdough

A great metaphor for maintaining a codebase over the life of the project.

Object Toaster

A parable on the king’s requirements and invention of a toaster.

My Tungsten Cube

Something to compliment the rubber duck on a programmer’s desk.

Attention is your scarcest resource

Great insights on how to embrace the scarcity, and use it wisely.

How to detect fullscreen mode using CSS

A useful technique for leaning into CSS for practical presentation needs.

Duncan McDougall's Eleventy + SCSS/SASS Setup

Eleventy doesn’t have any processing for styles or scripts out of the box. Which is kind of a feature when you’re looking for a non-prescriptive tool. This post was helpful in creating a very simple setup for compiling sass, and getting it into the page.

Help users change passwords easily by adding a well-known URL

Well Known URLs are a new-to-me convention that I find interesting.

Style Stage

The spiritual successor of the CSS Zen Garden.

FeedParser Gem

A web feed parser and normalizer. Supports Atom, RSS, & JSON Feed.

Feedjira

A ruby gem for parsing RSS feeds. Supports RSS and Atom feeds.

Confident humility

Whatever you’re doing, a sense of superiority will make you worse at it. Humility, on the other hand, will make you better.

The moment you think you’ve got it all figured out, your progress stops. Instead, continue to advance and improve by reminding yourself how much more there will always be to discover.

Confidence is positive and empowering, but arrogance is deadly. Be confident, but not at the expense of your respect for others.

Don’t burn up all your energy proving how great you are. Invest your time and energy being thoughtful and helpful.

See the victories not as proof of your supremacy, but as opportunities to offer more value to life. See the defeats not as personal affronts, but as chances to learn and grow stronger.

Take care not to waste your time in delusions of grandeur. Embrace the power of confident humility, and live well.

— Ralph Marston

Wavelength

A telepathic party game

Performing meaningless rituals boosts our self-control through making us feel more self-disciplined

The discipline of gathering links and posting them to a website, for example.

The complete guide to CSS media queries

An article that delivers on its title. Really helpful to put some terms and definitions around the parts of a media query that are relied on every day.

Mavo

A new, approachable way to create Web applications

This is an extremely interesting idea. Make your site editable in place with a backing data store, and some markup.

A user’s guide to CSS variables

I’ve recently been jumping back into the world of CSS development. I’m so thankful for the invention of CSS variables, and this article is a great place to get familiarized with them.

68 Bits of Unsolicited Advice

From someone celebrating their 68th birthday. I’m a sucker for these kinds of lists.

Intro to CSS 3D transforms

The front-end heavy work I was entrenched in years ago would love the abilities that CSS provides out of the box these days.

ActiveJob Style Guide

This Background Jobs style guide is a list of best practices working with Ruby background jobs.

This guide arrived at many of the conclusions I’ve arrived at while leaning into ActiveJob, and I learned a thing or two along the way.

Enhanced Shell Scripting with Ruby

For those of us who like doing as much as possible in Ruby.

Famous Speeches

James Clear’s growing collection of the greatest species of all-time.

noticed

Notifications for Ruby on Rails applications.

Forms best practice

Easy to grok, actionable advice about how to design forms that people will fill out reliably.

A Ruby Macaroon Library

Macaroons, like cookies, are a form of bearer credential. Unlike opaque tokens, macaroons embed caveats that define specific authorization requirements for the target service, the service that issued the root macaroon and which is capable of verifying the integrity of macaroons it recieves.

If it means I can avoid JavaScript Web Tokens, I’m interested in exploring further.

Ink 3

Building command line applications using React.

tinykeys

A tiny library for adding keyboard shortcuts in JavaScript.

Always bet on HTML...being misunderstood

A great read on the promise and peril of leaning into tried and true semantic HTML.

HTML5 UP!

Responsive HTML5 and CSS3 templates released under the The Creative Commons Attribution 3.0 License. If you wanna ditch the license, it’s only $19 at pixelarity.com.

Building GitHub-style Hovercards with StimulusJS and HTML-over-the-wire

For starters, I love the domain name boringrails.com. This tutorial delivers on the title of building some highly dynamic interaction with a few JavaScript sprinkles.

Inertia.js

Self-billed as The Modern Monolith. My read is that it’s a protocol for how to structure your ajax interactions to have predictable re-rendering when receiving a response.

Polly.js

Record, Replay, and Stub HTTP Interactions in JavaScript. A project on GitHub by Netflix.

Hourly Billing Is Nuts

Jonathan’s Stark’s thesis is pretty easy to grok. This has been my intuition for a long time, but he’s got the goods on how to make it a reality.

How the Blog Broke the Web

Amy Hoy’s got a theory on how the web went south, and I am nodding in agreement with every argument.

Building a digital garden

Tom Critchlow has some thoughts on how to build a digital garden, and I’m digging them.

Icons8

Free icons, music, stock photos, and vectors. Could be useful in a pinch.

Rails Bytes

A mechanism for quickly adding behavior to a Rails application. Like bin/rails generate scaffold… but in the cloud.

Notes on RSI for Developers Who Don't Have It (Yet)

Some practical tips for desk-work ergonomics.

stimulus-use

A collection of composable behaviors for your Stimulus Controllers. The spirit of this effort is to bring the reusability of React hooks to Stimulusjs. Time will tell if the idea can span the paradigm differences.

Untools

Self described as tools for better thinking. Strategies to get you off of the screen, and into thinking.

Everything Easy is Hard Again

Illegibility comes from complexity without clarity.

The new methods were invented to manage a level of complexity that is completely foreign to me and my work. It was easy to back away from most of this new stuff when I realized I have alternate ways of managing complexity. Instead of changing my tools or workflow, I change my design. It’s like designing a house so it’s easy to build, instead of setting up cranes typically used for skyscrapers.

Deku Deals

Nintendo Switch price tracking and wishlist notifications

I started building something like this on AWS when I wanted to wait for Celeste to go back on sale. I’m so happy somebody else did it and I can delete those stale resources.

Spotify's Failed #SquadGoals

If it sounds too abstract to be functional, it just may be.

github.com/sindresorhus/slugify

A JavaScript utility for turning a human readable string into a slug suitable for URL.

simonwep/pickr

A simple, multi-themed, responsive, dependency-free, and hackable color-picker library.

Poolors

Generate unique color palettes.

Minimum viable dark mode

Chase McCoy offers a minimal approach to begin supporting Dark Mode. I’d love to kick the tires on this and see how it handles in real life.

To be a good software engineer, become a French skeptic

So when someone asks you for something, be it your time, thoughts, or effort, be skeptical and be French. Ask “why” and (mostly) say “no”. It’s good for you.

Railway Oriented Programming

Thinking as a railway conductor serves as an interesting approach for making fault tolerant systems.

On focus, persistence, and misfortune

The most useful form of patience is persistence. Patience implies waiting for things to improve on their own. Persistence implies keeping your head down and continuing to work when things take longer than you expect.

The History of the URL

A long read, but fun to understand the humble URL that we depend on all day every day.

Diagonal Layouts in 2020

A nice playground for diagonal website layouts. Interact-able and everything!

A Complete Guide to Data Attributes

CSS Tricks is at it again with a focused article on an API we take for granted every day. Data Attributes are still the best-in-class solution for laying behavior onto Plain Old HTML.

Paged.js

Conventions for laying out PDF printable content. Could prove useful when you get around to writing that book.

Hanami::API on Amazon AWS Lambda

A very compelling idea for serving a Rack application on AWS Lambda. As long as the Ruby footprint is small enough, I think this could be a really nice deployment story!

In an 8-Hour Day, the Average Worker Is Productive for This Many Hours

The number behind the clickbait title is 3. 3 hours out of 8. If you focus for even half the time, you can stand out.

How to test static sites with RSpec, Capybara, and Webkit

I’ve long had this idea in the back of my mind. It’s nice to see it executed elsewhere, and establish a baseline for the usefulness of automated test on even “simple” projects.

Understanding CSS Grid: Grid Template Areas

I haven’t had a chance to dig in on CSS Grid. A quick glance suggests that it’s the tool I’ve wanted many times in the past.

How I MITM'd rubygems.org ... Kinda

A really fun investigation into how much damage you can do with one person’s typo.

Mirage JS

“An API mocking library for frontend developers”. Seems powerful for stubbing out all kinds of data that will eventually have a real source.

Inversion: The Crucial Thinking Skill Nobody Ever Taught You

James Clear of Atomic Habits fame offers up this nice little insight on the power of looking at things from the opposite angle

Greed Rules Everything Except Nature

A skate video. Released in 2020. Feels strait out of the 1990s. Nostalgia weighs heavy.

StimulusReflex

An interesting idea for building on top of Stimulus, ActionController, and ActionCable to coordinate patterns of server-client communication. HTML-over-the-wire sounds good to me.

Bit Brigade performing Mega Man 2

This is my kind of performance art. Mega Man 2 holds a special place in my heart, and I fully endorse this message.

@suspiriadam on The Oscars

not a single oscar nomination for Carly Rae Jepsen’s EMOTION… just because it “isn’t a film” and “came out in 2015”…disgusting

This will be an evergreen tweet in my book. Emotion is the album of the millennium.

strftimer

A Ruby strftime generator. Type in the desired human readable format, get back the strftime formatting string.

5 Tips for More Helpful Code Reviews

A brief introduction to making yourself a more valuable code reviewer.

NEON PALM MALL

Today I learned that vaporwave is a genre of music, and I am into it.

Stanford Encyclopedia of Philosophy

Seems like a good place to start a basic study of philosophy.

The Parable of the Mexican Fisherman

I’ve heard this parable in a variety of contexts, and no one seems to know the origin. At least this link provides a place where it’s written down succinctly.

Why is modern web development so complicated?

A great explanation of how we got to where we’re at as an industry.

Internal Requests in Rails

def internal_request(path, params={})
  request_env = Rack::MockRequest.env_for(path, params: params.to_query).merge({
    'rack.session' => session  # remove if session is unavailable/undesired in request
  })

  # Returns: [ status, headers, body ]
  Rails.application.routes.call(request_env)
end

This is the method I built on top of for building a static site generator in Rails.

Working Around ActiveRecord Callbacks

This is a great pattern for opting out of named callbacks. Never underestimate the versatility of an attr_accessor!

aniftyco/react-provider-tree

“Break out of provider tree hell.” As I move more state management into the React tree with hooks and context, this is becoming increasingly useful.

"Paradox of tolerance" on Wikipedia

The paradox of tolerance states that if a society is tolerant without limit, its ability to be tolerant is eventually seized or destroyed by the intolerant.

How to Carve a Turkey

This is the hard hitting journalism I need: a short video about how to effectively carve a turkey. Solid advice for Thanksgiving day.

On The Shoulders of Giants

“Sometimes it takes a long time to sound like yourself.”

A refreshing challenge to be unoriginal, and pay tribute to those who do well what we want to do well.

Gall's Law

A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system.

A Tweet about virgin births

Christians believe in the virgin birth of Jesus. Materialists believe in the virgin birth of the cosmos.

Choose your miracle.

At some point, we’re all putting our faith in something.

Happy Hues

“Curated colors in context.” A beautiful little site for previewing a color palette in the context of a web application.

Refactoring Ruby with Monads

A great introduction to the scary-word that is “monads”. Monads have never felt more useful, usable, and approachable.

‎Flow Focus and Break Timer

A minimal macOS app for working the pomodoro method.

pure: Pretty, minimal and fast ZSH prompt

Very useful now that macOS has transitioned to zsh by default.

Tyke

A small scratchpad in the MacOS menu bar. Great for removing formatting, and freeing up your clipboard.

lynnandtonic.com

One of the most inspiring personal websites I’ve ever seen. A lot of gems in all the things Lynn has shared over the years.

Chartkick

Create beautiful JavaScript charts with one line of Ruby. There’s many a Rails CRUD project where I can imagine having benefited from knowing about this library.

Carbon

Create and share beautiful images of your source code.

Planning advice found on Twitter

Every time I make myself write out

We are doing _____
Because we see the problem of _____
We know it’s a problem because _____
If we don’t fix it, we’ll see _____
We’ll know we’ve fixed it when we get _____

the rest of the conversation/project/doc goes SO much easier.

Analogue Pocket

One handheld gaming hardware to rule them all. Accepts a slew of cartridges to play all the games I regrettably traded away years ago.

Let's hash this out

A compelling case for sticking to Ruby’s plain old Hash as much as possible. I’ve lived the pain of serialization errors in higher level of abstractions, so I’d vouch for sticking to low level primitives as much as possible when it comes to persistence.

Awesome list of open source applications for macOS.

A GitHub repo with links to a bunch’a open source macOS apps.

Scripting OS X

I found this site because macOS Catalina transitioned the default shell from bash to zsh and I am always trying to embrace defaults. A lot of great information for becoming more useful in the macOS Terminal.

Causes and symptoms

The secret to being a senior engineer: Focus on causes rather than symptoms

The secret to being a staff engineer: Enable your group to focus on causes rather than symptoms

The secret to being a principal level engineer: Enable your org to focus on causes rather than symptoms

Destroy all Docker Containers and Images

This gist was very helpful when I needed to obliterate everything that Docker had ever built.

spleeter

Command line tool to extract voices, drums, bass… anything from a song.

Tricks and Tips for using Fixtures effectively in Rails

The biggest takeaway: don’t use ids unless absolutely necessary. Rely on the autogenerated, deterministic ids, and you get a bunch of behavior for free.

Nostalgia for brokenness

Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become it’s signature. -Brian Eno (1995)

Focus Entirely on Execution and Not on Result

Daring Fireball offering commentary on the idea from Christopher McQuarrie. You can control the inputs, but not the outputs. Focus on consistently delivering inputs.

Hooks for fetching, caching and updating asynchronous data in React

This appears to be a well thought out solution for fetching data in a post-hooks, pre-Suspense world. A lot of hand rolled patterns codified into consistent solutions seems worth a shake.

Taming Large Rails Applications with Private ActiveRecord Models

A compelling idea for sticking with ActiveRecord and making explicit domain objects. I’m eager to kick the tires on this idea.

Rails 6.0 new framework defaults: what they do and how to safely uncomment them

I would love to see a post like this come with the release notes of every Rails version. Extremely helpful.

Linux directories cheat sheet

A tweet sized cheat sheet of what all those abbreviated directory names mean.

Ask for advice, not feedback.

The word “feedback” encourages people to think about the past, not the future. Asking for “advice” instead triggers others to think specifically about what might help someone improve in the future.

htmlhead.dev

A handy reference for all the things that can and should be placed inside the html <head> element.

Creating multiple models with form objects in Rails

I’m a big fan of leaning into ActiveModel::Model to build form objects. This is one of the more strait-forward explanations I’ve seen.

Map Redis types directly to Ruby objects

I’ve built toy systems that wrap Redis types with Ruby objects. This solutions seems more substantial than I ever dreamed of.

I particularly appreciate the emphasis that it is not an ORM.

Unfollowing Everybody

Anil Dash’s write up about why and how he unfollowed everybody on Twitter is compelling.

Just Delete Me

Self-billed as a directory of direct links to delete your account from web services. It also provides useful information about the relative ease of deleting those accounts.

Popup pump

A fun experiment with popup windows by Matthew Rayfield. I’m excited to see small tinkering like this that make the Internet fun again.

chart.xkcd

A library for creating charts in the style of xkcd. Uses canvas in the browser.

Why Your Privacy Is Worth More Than You Think

A video by Duck Duck Go making the case for privacy. Explicitly calls out Facebook and Google for their shady practices. Communicates the concerns in a way you can share with your non “tech” friends.

Consume less, create more

My dotcomrade Jeremy Ricketts linked to this post that will strike a nerve with a whole lot of folks, myself included. It’s not about screen time vs non screen time. It’s about consumption vs creativity.

Using a headless browser to capture page screenshots

Take screenshots of web pages using headless Chrome.

chrome --headless --disable-gpu --screenshot https://bitsofco.de

A React component for playing a variety of URLs

A React Component that can play videos from YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia and DailyMotion.

Fast Software, the Best Software

Craig’s observations about the trust and reliability implied by the speed of software are spot on. Make it work. Make it fast. Make it faster.

What if I called FLUSHALL on your Redis instance?

Great piece for architecture introspection. Redis has established itself as rock-solidly-reliable in my experience, but there’s always user error to protect against!

Stimulus

Basecamp triples down on server rendered HTML with StimulusJS. Having built a similar pattern when transitioning away from batman.JS years ago, I really appreciate the refinement of the ideas here.

My only complaint about this project is that they didn’t name it Sprinkles. That would have been awesome.

SpreadsheetArchitect

SpreadsheetArchitect lets you turn any activerecord relation or ruby object collection into a XLSX, ODS, or CSV spreadsheet

There are several Ruby and Rails projects in my rear view that would have benefited from this tool.

Cache-busting in Jekyll, GitHub pages

A simple approach to busting asset caches on GitHub pages. It could stand to have a little more nuance for a highly trafficked site. But it gets the job done for now!

Introduction to Immutable.js and Functional Programming Concepts

The article title says exactly what it is. There’s a lot of Immutable talk out there, but this long read is a good introduction if you’re going to pick only one.

The Effective Emailer

If you can’t say it in plain text, you don’t have anything worth saying

Yes Lord, amen.

Avoid these traps when nesting Ruby modules

It turns out that the “inheritance” of a parent’s constants by the child isn’t due to the parent/child relationship. It’s lexical. That means that it’s based on the structure of your code, not on the structure of the objects your code is building.

Vim and Ctags

A wet-the-appetite introduction to using ctags with vim.

Using CORS

An explanation of CORS that you’ll actually use.

Ruby's case statement

Ruby’s case statement uses the === operator behind the scenes. This can be used (or abused) for conciseness and/or cleverness.

What if the user was a function?

Andre Staltz ask this question at JSConf. Exploring that question introduces some very interesting ideas about functional programming, and how we can model user/computer interactions.

A new way to understand your Rails app’s performance

The takeaway is to use rack-mini-profiler to find hot spots in your rails code.

Go Object Oriented Design

How to write object oriented-ish code in Go. Uses Sandi Metz’s examples from Practical Object Oriented Design in Ruby as a reference point.