Things I've learned

  • Conversational affordances

    Listening to JSParty introduced me to an excellent article Good conversations have lots of doorknobs.

    The most exciting bits was the concept of conversational affordances and how they they're the key to conversations that click. This comes on the tails of recently reading How to Win Friends and Influence People and The Fine Art of Small Talk. I find the concept of conversational affordances a more refined and realistic take on the general takeaway of those two books: Listening is an essential part of conversations; Pummel your ego out of the way as much as you can.

    Three bits that really stuck with me were

    Conversational affordances are things like digressions and confessions and bold claims that beg for a rejoinder.

    What matters most, then, is not how much we give or take, but whether we offer and accept affordances

    Conversational affordances often require saying something at least a little bit intimate about yourself, so even the faintest fear of rejection on either side can prevent conversations from taking off

    This was one of those articles that felt like I came across it at exactly the right moment, primed by doing Improve, interest in improving my conversational skills, and having spoken 2 hours earlier with friends about it.

  • Presence and Souls

    Listened to two fantastic podcasts today Rick Glassman and The Fundamentalists

    The most interesting tidbits being

    Harry Mack stating

    Being true to your self is about being present

    And from the Myth of Hustle Culture

    To be human is to desire knowing what the other wants

    The soul is that which turns events into experiences

  • Rap Theory & Practice

    YouTube's algorithm recommended a fascinating lecture from MIT by Lupe Fiasco Lupe Fiasco presents “Rap Theory & Practice: an Introduction”

    Of which the most compelling aspects I found were:

    1. Pondering things in terms of themselves. In the video, Lupe uses forming an acronym from RAP as the example but urges the audience to consider the same for their roles and passions in life.
    2. Being intentional about the balance between shape and detail when thinking.
      • A sub-detail of that that seems valuable is practicing being more aware of when a context is focusing on the shape or the detail of a given artifact or topic.
    3. Being intentional about learning, because it will happen whether you consciously choose to or not. And in fact makes it more enjoyable.

    Some other carry aways I'll be pondering:

    • How can I utilize surprise, or schema deviance, to make conversations, speeches, presentations, and other forms of information distribution stick better?

  • The 1975 Interview

    The YouTube algorithm recommended The 1975: ‘Being Funny In a Foreign Language’ Interview | Apple Music of which I've developed a great deal of respect for Matt Healy, his outlook on life, and his ability to articulate it.

    The part that stuck out was a word he made up and defined: sceneius

    Someone of exceptional capacity to recognize an environment and create new something from it

    This is a paraphrase of the actual quote but I think it is quite accurate. It really opened my eyes to the commonalities between music and starting a business/disruption in general.

    A person with vision for a successful disruption not only needs to:

    • have a good idea
    • the capacity to execute on it
    • be capable of explaining to others their idea
    • understand how this idea differs from what's come before

    But they also need to be able to read the scene or environment to know if this is the right moment to introduce a disruption. It's not uncommon to hear of failed startups because it "wasn't the right time"

  • Deriving Deserialize on Structs as Arrays

    Was watching Decrusted: Serde and found out when you derive #[serde(Deserialize, Serialize)] it can be to an array as opposed to a mapping of some key:value.

    This is especially helpful as I've got some little automations which query Fastmail via jmap which heavily utilizes arrays for defining what query to run.


    #[derive(serde::Deserialize, serde::Serialize)]
    struct RGB {
      r: u64,
      g: u64,
      b: u64

    can correctly deserialize [12,222,55] into a Rust struct with named fields!

  • impl anyhow Errors into Axum Responses

    Been playing around with reimplementing this site using axum and maud, using incremental static generation.

    Took my eyes awhile to see the axum example of how to convert anyhow errors into axum Responses.

    Quite simply, it is.

    struct AppError(anyhow::Error);
    impl IntoResponse for AppError {
        fn into_response(self) -> Response {
                format!("Something went wrong: {}", self.0),
    // This enables using `?` on functions that return `Result<_, anyhow::Error>` to turn them into
    // `Result<_, AppError>`. That way you don't need to do that manually.
    impl<E> From<E> for AppError
        E: Into<anyhow::Error>,
        fn from(err: E) -> Self {

  • Sympathy vs Empathy

    Today's debate was about the difference between sympathy and empathy. The best explanation we reached was the following:

    You're sad because you lost your chocolate.

    Sympathy is that I'm also sad because I know how it;s like to lose chocolate and it makes me sad that you lost your chocolate.

    Empathy is that i know how much you like chocolate and because you lost it, I know how sad that can be. I don't even have to be a chocolate lover to understand that.

  • Iterator Chaining

    Trying out Simon Willison's suggestion about what to blog about.

    This Reddit Comment

    TIL, chaining iterators in rust doesn't mean that each operation happens on the entire list in each step, but all of them occur on the current element in an iteration.