<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://henriquecsj.github.io/feed/notes.xml" rel="self" type="application/atom+xml" /><link href="https://henriquecsj.github.io/" rel="alternate" type="text/html" hreflang="pt-BR" /><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/feed/notes.xml</id><title type="html">Henrique’s Blog | Notes</title><subtitle>Química computacional, programação e outras ideias.</subtitle><entry xml:lang="en"><title type="html">Serendipity-based outlook as a driver for large-scale personal projects</title><link href="https://henriquecsj.github.io/notes/serendipity-outlook/" rel="alternate" type="text/html" title="Serendipity-based outlook as a driver for large-scale personal projects" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/serendipity-outlook</id><content type="html" xml:base="https://henriquecsj.github.io/notes/serendipity-outlook/"><![CDATA[<p>Goal-oriented outlook for large-scale personal projects seem to be detrimental in a sense that in the absence of an enforcing agent it seems to be contributing to issues like will-power dissolution, decision fatigue, burn-out, guilt etc owing to the disincentives of self-enforced adherence to an idea/project for a long term. This is based on the idea by Kurzban et. al that overcommiting to a task, that is only expected to show its result in distant future, can dissolve will power to an extent of a burnout or complete unproductivity. And in my opinion, it not just affects the quantifiable components, it also affects your qualitative components like creative autonomy.</p>

<p>After talking with few interesting people and trying out various different processes myself I have come to the conclusion that some of the strategies mentioned below can help in persistance of motivation in a long term personal project without any unnatural self-enforced adherence. I call it serendipity-based outlook because the diversion[[…‘I bounce between projects to maintain my interest. (In Kurzban’s theory, willpower seems to reflect opportunity cost and a built-in aversion to overcomitting to a task which hasn’t delivered any large rewards yet, and switching regularly helps prevent burnout.) Since many of my pages are incremental, there’s always little things to be done’…<br /><cite>—Email Exchange with Gwern</cite>::lsn]]. from the singular focus towards the main project seems to be allowing for some kind unexpected results and epiphanies as byproducts.</p>

<p>Working Strategies:</p>

<ul>
  <li>Multiple projects requiring varying degree of proficiency with the main one allowing the maintenance of a Flow State(i.e., not too difficult to deprive you of maintaining motivation, not too easy to be waded off as trivial, one that can challenge you while using your current level of understanding). And Constantly bouncing between them as an alternative to the main one.</li>
  <li>Stretches of idle days working on nothing or random things can lead to surprising results <strong>See:</strong> [[Nassim Taleb on this::https://m.facebook.com/nntaleb/posts/10152466038423375]] and [[Bertrand Russell on the praise of this::https://harpers.org/archive/1932/10/in-praise-of-idleness/]].</li>
  <li>Frequent alternation between recreational projects like writing, blogging etc as an anti-dote to the side-effects of the main project.</li>
  <li>Undirected effort(such as researching) effort towards a sub-goal. Letting serendipity take over.[[…‘Having no set goal in mind means you are not worried about completing anything. Also lately, I’m finding things are more interconnected than they seem. So whatever I learn contributes to a the whole than narrowing down to a slice of it’…<br /><cite>—Twitter Exchange with Prathyush</cite>::rsn]]</li>
  <li>[[Do Things That Don’t Scale::https://paulgraham.com/ds.html]]</li>
</ul>

<p><strong>**</strong>One thing that I have been observing is multiyear projects with smaller-side projects can help incorporate the Hybrid Routine Easily.*</p>

<hr />

<h2 id="references">References</h2>

<p>Baumeister &amp; Tierney. (2011). <em>[[Do You Suffer From Decision Fatigue::https://www.nytimes.com/2011/08/21/magazine/do-you-suffer-from-decision-fatigue.html?pagewanted=all]]</em></p>

<blockquote>
  <p>…‘Good decision making is not a trait of the person, in the sense that it’s always there,’ Baumeister says. ‘It’s a state that fluctuates.’ His studies show that people with the best self-control are the ones who structure their lives so as to conserve willpower. They don’t schedule endless back-to-back meetings. They avoid temptations like all-you-can-eat buffets, and they establish habits that eliminate the mental effort of making choices. Instead of deciding every morning whether or not to force themselves to exercise, they set up regular appointments to work out with a friend. Instead of counting on willpower to remain robust all day, they conserve it so that it’s available for emergencies and important decisions….’Even the wisest people won’t make good choices when they’re not rested and their glucose is low,’ Baumeister points out. That’s why the truly wise don’t restructure the company at 4 p.m. They don’t make major commitments during the cocktail hour. And if a decision must be made late in the day, they know not to do it on an empty stomach. ‘The best decision makers,’ Baumeister says, ‘are the ones who know when not to trust themselves.’…</p>
</blockquote>

<p>Conversation with [[Gwern Branwen::https://twitter.com/gwern]]. (2019-Dec-19). <em>Email Exchange</em></p>

<blockquote>
  <p>…‘I bounce between projects to maintain my interest. (In Kurzban’s theory, willpower seems to reflect opportunity cost and a built-in aversion to overcomitting to a task which hasn’t delivered any large rewards yet, and switching regularly helps prevent burnout.) Since many of my pages are incremental, there’s always little things to be done’…</p>
</blockquote>

<p>Conversation with [[Prathyush Pramod::https://twitter.com/prathyvsh]]. (2019-Nov-15th). <em>Twitter Exchange</em></p>

<blockquote>
  <p>…‘Having no set goal in mind means you are not worried about completing anything. Also lately, I’m finding things are more interconnected than they seem. So whatever I learn contributes to a the whole than narrowing down to a slice of it’…</p>
</blockquote>

<p>Taleb, Nicholas Nassim. (2015). <em>Antifragile</em></p>

<p>Taleb, Nicholas Nassim. (2018). <em>[[Twitter thread on routine::https://twitter.com/nntaleb/status/1029812693660848129]]</em></p>

<blockquote>
  <p>Routine is effortless. Most humans, alas, prefer to expend physical, never intellectual energy. Creating requires much, much more effort.</p>
</blockquote>

<p>Graham, Paul. (2013). [[Do Things That Don’t Scale::https://paulgraham.com/ds.html]]</p>

<p>My Journal Entry, Jan 6th 2019</p>

<blockquote>
  <p>Clearly, my brain has learned to ignore the Google calendar notifications. Initially, scheduling and completely the event/task used to feel rewarding, so I built up on that and kept adding trivial items in my calendar like gym, writing, journaling, etc. Although it worked for a couple of days, somehow there was a behavioral shift in how I was responding to the notifications, now it was not only the trivial ones that I was ignoring, the important ones too got side-tracked as a result of decision fatigue.</p>

  <p>Although the extremely important ones had this aging process of incremental prioritization owing to [[Parkinson’s Law::https://en.wikipedia.org/wiki/Parkinson%27s_law]].</p>

  <blockquote>
    <p><strong><em>Parkinson’s Law:</em></strong> Work expands so as to fill the time available for its completion</p>
  </blockquote>
</blockquote>]]></content><author><name></name></author><category term="outlook" /><category term="project" /><category term="writing" /><summary type="html"><![CDATA[Goal-oriented outlook for large-scale personal projects seem to be detrimental in a sense that in the absence of an enforcing agent it seems to be contributing to issues like will-power dissolution, decision fatigue, burn-out, guilt etc owing to the disincentives of self-enforced adherence to an idea/project for a long term. This is based on the idea by Kurzban et. al that overcommiting to a task, that is only expected to show its result in distant future, can dissolve will power to an extent of a burnout or complete unproductivity. And in my opinion, it not just affects the quantifiable components, it also affects your qualitative components like creative autonomy. After talking with few interesting people and trying out various different processes myself I have come to the conclusion that some of the strategies mentioned below can help in persistance of motivation in a long term personal project without any unnatural self-enforced adherence. I call it serendipity-based outlook because the diversion[[…‘I bounce between projects to maintain my interest. (In Kurzban’s theory, willpower seems to reflect opportunity cost and a built-in aversion to overcomitting to a task which hasn’t delivered any large rewards yet, and switching regularly helps prevent burnout.) Since many of my pages are incremental, there’s always little things to be done’…—Email Exchange with Gwern::lsn]]. from the singular focus towards the main project seems to be allowing for some kind unexpected results and epiphanies as byproducts. Working Strategies: Multiple projects requiring varying degree of proficiency with the main one allowing the maintenance of a Flow State(i.e., not too difficult to deprive you of maintaining motivation, not too easy to be waded off as trivial, one that can challenge you while using your current level of understanding). And Constantly bouncing between them as an alternative to the main one. Stretches of idle days working on nothing or random things can lead to surprising results See: [[Nassim Taleb on this::https://m.facebook.com/nntaleb/posts/10152466038423375]] and [[Bertrand Russell on the praise of this::https://harpers.org/archive/1932/10/in-praise-of-idleness/]]. Frequent alternation between recreational projects like writing, blogging etc as an anti-dote to the side-effects of the main project. Undirected effort(such as researching) effort towards a sub-goal. Letting serendipity take over.[[…‘Having no set goal in mind means you are not worried about completing anything. Also lately, I’m finding things are more interconnected than they seem. So whatever I learn contributes to a the whole than narrowing down to a slice of it’…—Twitter Exchange with Prathyush::rsn]] [[Do Things That Don’t Scale::https://paulgraham.com/ds.html]] **One thing that I have been observing is multiyear projects with smaller-side projects can help incorporate the Hybrid Routine Easily.* References Baumeister &amp; Tierney. (2011). [[Do You Suffer From Decision Fatigue::https://www.nytimes.com/2011/08/21/magazine/do-you-suffer-from-decision-fatigue.html?pagewanted=all]] …‘Good decision making is not a trait of the person, in the sense that it’s always there,’ Baumeister says. ‘It’s a state that fluctuates.’ His studies show that people with the best self-control are the ones who structure their lives so as to conserve willpower. They don’t schedule endless back-to-back meetings. They avoid temptations like all-you-can-eat buffets, and they establish habits that eliminate the mental effort of making choices. Instead of deciding every morning whether or not to force themselves to exercise, they set up regular appointments to work out with a friend. Instead of counting on willpower to remain robust all day, they conserve it so that it’s available for emergencies and important decisions….’Even the wisest people won’t make good choices when they’re not rested and their glucose is low,’ Baumeister points out. That’s why the truly wise don’t restructure the company at 4 p.m. They don’t make major commitments during the cocktail hour. And if a decision must be made late in the day, they know not to do it on an empty stomach. ‘The best decision makers,’ Baumeister says, ‘are the ones who know when not to trust themselves.’… Conversation with [[Gwern Branwen::https://twitter.com/gwern]]. (2019-Dec-19). Email Exchange …‘I bounce between projects to maintain my interest. (In Kurzban’s theory, willpower seems to reflect opportunity cost and a built-in aversion to overcomitting to a task which hasn’t delivered any large rewards yet, and switching regularly helps prevent burnout.) Since many of my pages are incremental, there’s always little things to be done’… Conversation with [[Prathyush Pramod::https://twitter.com/prathyvsh]]. (2019-Nov-15th). Twitter Exchange …‘Having no set goal in mind means you are not worried about completing anything. Also lately, I’m finding things are more interconnected than they seem. So whatever I learn contributes to a the whole than narrowing down to a slice of it’… Taleb, Nicholas Nassim. (2015). Antifragile Taleb, Nicholas Nassim. (2018). [[Twitter thread on routine::https://twitter.com/nntaleb/status/1029812693660848129]] Routine is effortless. Most humans, alas, prefer to expend physical, never intellectual energy. Creating requires much, much more effort. Graham, Paul. (2013). [[Do Things That Don’t Scale::https://paulgraham.com/ds.html]] My Journal Entry, Jan 6th 2019 Clearly, my brain has learned to ignore the Google calendar notifications. Initially, scheduling and completely the event/task used to feel rewarding, so I built up on that and kept adding trivial items in my calendar like gym, writing, journaling, etc. Although it worked for a couple of days, somehow there was a behavioral shift in how I was responding to the notifications, now it was not only the trivial ones that I was ignoring, the important ones too got side-tracked as a result of decision fatigue. Although the extremely important ones had this aging process of incremental prioritization owing to [[Parkinson’s Law::https://en.wikipedia.org/wiki/Parkinson%27s_law]]. Parkinson’s Law: Work expands so as to fill the time available for its completion]]></summary></entry><entry xml:lang="en"><title type="html">Reading the material to completion over interest-based pickups-n-drops</title><link href="https://henriquecsj.github.io/notes/reading-material/" rel="alternate" type="text/html" title="Reading the material to completion over interest-based pickups-n-drops" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/reading-material</id><content type="html" xml:base="https://henriquecsj.github.io/notes/reading-material/"><![CDATA[<p>It is becoming common these days among people to preach dropping and picking up a book based on interest, but if you seriously want to express your opinion on the material or the person who has written that, at least try reading it completely before letting your preconceived notions get better of you.</p>

<ol>
  <li>[[I generally read everything through if I go past the abstract at all. I feel you can’t really have an opinion if you haven’t read the whole thing; if you don’t read the whole thing, and you say anything about it, you are all too often perpetuating lies or half-truths<br /><cite>—Email Exchange with Gwern</cite>::rmn]]Seen one way you would be misleading people who trust your opinion and perpetrating a lie that might destroy the credibility of the original creator.</li>
  <li>And in another way, this is just pure incompetence that is being rationalized as efficient mechanism to imbibe knowledge. Doesn’t provide authority, doesn’t allow for legitimacy, all it does is allows you to create an echo chamber for yourself where you can engage in a pseudo-random verbal-diarrhea with like minded people.</li>
</ol>

<p>An example would be this:</p>

<blockquote class="medium serif">
  <p>“Witness here how salaried physicists are dismissing @stephen_wolfram Wolfram’s automata BEFORE even hearing him Just as Freeman Dyson publicly dismissed_A New Kind of Science_ c. 2002; it turned out that he did not read the book. &amp; pple who refused to read it referred to Dyson!”<br /><cite>—Tweet by Nassim Taleb</cite></p>
</blockquote>

<p>That said, it should be noted that switching books based on interest is not wrong, caution must be applied while talking about topics that you yourself have not completely gone through.</p>

<p>[[I’m convinced a lot of leprechauns or ‘citogenesis’ comes from people who don’t read past the title or abstract but decide to cite it anyway as proof<br /><cite>—Email Exchange with Gwern</cite>::lsn]]Gwern describes this better than I ever can by comparing such second-hand partial information mongers to people who use leprechauns or ‘citogenesis’ based on reading the title/abstract of a paper. <em>(See Below)</em></p>

<p><strong><em>Note:</em></strong> Remember any resource that you pick up is someone’s sweat and blood. If you do not wish to read it, always make sure not to form opinions on it, or at least not to promulgate any partial information on it. Always try to put yourself in such a situation and see how you’d have taken it — The Silver Rule.</p>

<blockquote class="boxit serif medium">
  <p>“Do not do unto others as you would not have them do unto you.”</p>
</blockquote>

<p>Most of the time our inability to read to completion has to do with association of the act of reading instead of the book that we are read, context-switching can really here. Also <span class="infotip"><a href="/notes/reading-fractailized/">Reading with fractalized mental pattern</a><span class="right bottom" aria-hidden="true"><span class="infotip-title">Reading with fractalized mental pattern</span><br /><span class="infotip-excerpt">Fractalize your mental patterns instead of reading as a whole (i.e., one single pattern, where the mood of the act is associated with the ego), that way you will be able to selectively associate yourself with a book inst</span></span></span> can be extremely useful in such situations.</p>

<hr />

<h2 id="references">References</h2>

<p>Conversation with Gwern Branwen. (19-Dec-2019). <em>Email Exchange</em></p>

<blockquote>
  <p>…I generally read everything through if I goes past the abstract at all. I feel you can’t really have an opinion if you haven’t read the whole thing; if you don’t read the whole thing, and you say anything about it, you are all too often perpetuating lies or half-truths. I’m convinced a lot of leprechauns or ‘citogenesis’ comes from people who don’t read past the title or abstract but decide to cite it anyway as proof….</p>
</blockquote>

<p>Nicholas, Nassim Taleb. (2020). <em>Tweet</em></p>

<blockquote>
  <p>“Witness here how salaried physicists are dismissing @stephen_wolfram Wolfram’s automata BEFORE even hearing him Just as Freeman Dyson publicly dismissed_A New Kind of Science_ c. 2002; it turned out that he did not read the book. &amp; pple who refused to read it referred to Dyson!”</p>
</blockquote>]]></content><author><name></name></author><category term="reading" /><summary type="html"><![CDATA[It is becoming common these days among people to preach dropping and picking up a book based on interest, but if you seriously want to express your opinion on the material or the person who has written that, at least try reading it completely before letting your preconceived notions get better of you. [[I generally read everything through if I go past the abstract at all. I feel you can’t really have an opinion if you haven’t read the whole thing; if you don’t read the whole thing, and you say anything about it, you are all too often perpetuating lies or half-truths—Email Exchange with Gwern::rmn]]Seen one way you would be misleading people who trust your opinion and perpetrating a lie that might destroy the credibility of the original creator. And in another way, this is just pure incompetence that is being rationalized as efficient mechanism to imbibe knowledge. Doesn’t provide authority, doesn’t allow for legitimacy, all it does is allows you to create an echo chamber for yourself where you can engage in a pseudo-random verbal-diarrhea with like minded people. An example would be this: “Witness here how salaried physicists are dismissing @stephen_wolfram Wolfram’s automata BEFORE even hearing him Just as Freeman Dyson publicly dismissed_A New Kind of Science_ c. 2002; it turned out that he did not read the book. &amp; pple who refused to read it referred to Dyson!”—Tweet by Nassim Taleb That said, it should be noted that switching books based on interest is not wrong, caution must be applied while talking about topics that you yourself have not completely gone through. [[I’m convinced a lot of leprechauns or ‘citogenesis’ comes from people who don’t read past the title or abstract but decide to cite it anyway as proof—Email Exchange with Gwern::lsn]]Gwern describes this better than I ever can by comparing such second-hand partial information mongers to people who use leprechauns or ‘citogenesis’ based on reading the title/abstract of a paper. (See Below) Note: Remember any resource that you pick up is someone’s sweat and blood. If you do not wish to read it, always make sure not to form opinions on it, or at least not to promulgate any partial information on it. Always try to put yourself in such a situation and see how you’d have taken it — The Silver Rule. “Do not do unto others as you would not have them do unto you.” Most of the time our inability to read to completion has to do with association of the act of reading instead of the book that we are read, context-switching can really here. Also [[Reading with fractalized mental pattern]] can be extremely useful in such situations. References Conversation with Gwern Branwen. (19-Dec-2019). Email Exchange …I generally read everything through if I goes past the abstract at all. I feel you can’t really have an opinion if you haven’t read the whole thing; if you don’t read the whole thing, and you say anything about it, you are all too often perpetuating lies or half-truths. I’m convinced a lot of leprechauns or ‘citogenesis’ comes from people who don’t read past the title or abstract but decide to cite it anyway as proof…. Nicholas, Nassim Taleb. (2020). Tweet “Witness here how salaried physicists are dismissing @stephen_wolfram Wolfram’s automata BEFORE even hearing him Just as Freeman Dyson publicly dismissed_A New Kind of Science_ c. 2002; it turned out that he did not read the book. &amp; pple who refused to read it referred to Dyson!”]]></summary></entry><entry xml:lang="en"><title type="html">Reading with fractalized mental pattern</title><link href="https://henriquecsj.github.io/notes/reading-fractailized/" rel="alternate" type="text/html" title="Reading with fractalized mental pattern" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/reading-fractailized</id><content type="html" xml:base="https://henriquecsj.github.io/notes/reading-fractailized/"><![CDATA[<p>Fractalize your mental patterns instead of reading as a whole (i.e., one single pattern, where the mood of the act is associated with the ego), that way you will be able to selectively associate yourself with a book instead of the act of reading. Most people stop reading when they are bored of reading, but by fractalizing your mental patterns you will be able to dissociate yourself from that particular book and move on to another book instead of stopping reading altogether.</p>

<blockquote class="serif medium">
  <p>“Be bored with a book, not with the act of reading”<br /> &gt; <cite>—Nassim Nicholas Taleb, Antifragile</cite></p>
</blockquote>

<h2 id="references">References</h2>

<p>Taleb, Nicholas Nassim. (2015). <em>Antifragile</em>.</p>]]></content><author><name></name></author><category term="reading" /><summary type="html"><![CDATA[Fractalize your mental patterns instead of reading as a whole (i.e., one single pattern, where the mood of the act is associated with the ego), that way you will be able to selectively associate yourself with a book instead of the act of reading. Most people stop reading when they are bored of reading, but by fractalizing your mental patterns you will be able to dissociate yourself from that particular book and move on to another book instead of stopping reading altogether. “Be bored with a book, not with the act of reading” &gt; —Nassim Nicholas Taleb, Antifragile References Taleb, Nicholas Nassim. (2015). Antifragile.]]></summary></entry><entry xml:lang="en"><title type="html">Everyone should have a project that they control 100% of</title><link href="https://henriquecsj.github.io/notes/project-control/" rel="alternate" type="text/html" title="Everyone should have a project that they control 100% of" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/project-control</id><content type="html" xml:base="https://henriquecsj.github.io/notes/project-control/"><![CDATA[<p>To improve as a programmer, every programmer whether working independently or in an organization should atleast have one project that they control 100% of, and it doesn’t matter if it is your main project or a side project. When you are working for an organization or working independently on a collaborative oss, the major chunk of your cognitive bandwidth gets allocated to those projects, which is not bad per-se, it does teach you how to work in a collaborative environment and to learn from people who are better at the concerned technology/concept than you. But the issue is more personal and emotional in when you are working on something bigger than you, it unwittingly causes a self-effacive effect i.e., you tend to devalue the emotional effects of being able to create something with complete autonomy, or crave for the autonomy and burnout as a result of the cognitive exhaustion. The sense of freedom and the liberating experience that comes out of the creative autonomy is just unmatched.</p>

<p>Even a side-project in github that you consider to be trivial has an effect that only such kind of projects can provide, of having done everything yourself and without anyone putting constraints on what you can and what you can’t. It allows you to experiment outside of what would be acceptable within a project you are doing with others. Something like what if I just re-wrote this entire engine on top of openGL would never (or almost never) make sense in a collaborative project, but it would make perfect sense if it is just you.</p>

<p>The other obvious advantage is it makes you much more light-hearted because you know that if this doesn’t work out the way I like it or good for me, then I can just go. When you are working on a personal project out of your own free will, it has a certain kind of air that a collaborative project won’t. It is purely voluntary, and you can just up and leave at any time. That adds something to the mix. The responsibility of joy or stress that comes out of it suddenly becomes more tolerable as well as enjoyable. Note that I am not advocating that you drop everything that you don’t like, it is just that having certain things in your life that you can control can help handle that which you can’t.</p>

<p>Related: [[Creativity is a quality without a name]]</p>

<h2 id="references">References</h2>

<p>Andreas Kling. (2019). <em>[[Commute Talk: How to improve as a programmer::<a href="https://youtu.be/DY3Islql6xs">https://youtu.be/DY3Islql6xs</a>]]</em></p>]]></content><author><name></name></author><category term="project" /><category term="programming" /><summary type="html"><![CDATA[To improve as a programmer, every programmer whether working independently or in an organization should atleast have one project that they control 100% of, and it doesn’t matter if it is your main project or a side project. When you are working for an organization or working independently on a collaborative oss, the major chunk of your cognitive bandwidth gets allocated to those projects, which is not bad per-se, it does teach you how to work in a collaborative environment and to learn from people who are better at the concerned technology/concept than you. But the issue is more personal and emotional in when you are working on something bigger than you, it unwittingly causes a self-effacive effect i.e., you tend to devalue the emotional effects of being able to create something with complete autonomy, or crave for the autonomy and burnout as a result of the cognitive exhaustion. The sense of freedom and the liberating experience that comes out of the creative autonomy is just unmatched. Even a side-project in github that you consider to be trivial has an effect that only such kind of projects can provide, of having done everything yourself and without anyone putting constraints on what you can and what you can’t. It allows you to experiment outside of what would be acceptable within a project you are doing with others. Something like what if I just re-wrote this entire engine on top of openGL would never (or almost never) make sense in a collaborative project, but it would make perfect sense if it is just you. The other obvious advantage is it makes you much more light-hearted because you know that if this doesn’t work out the way I like it or good for me, then I can just go. When you are working on a personal project out of your own free will, it has a certain kind of air that a collaborative project won’t. It is purely voluntary, and you can just up and leave at any time. That adds something to the mix. The responsibility of joy or stress that comes out of it suddenly becomes more tolerable as well as enjoyable. Note that I am not advocating that you drop everything that you don’t like, it is just that having certain things in your life that you can control can help handle that which you can’t. Related: [[Creativity is a quality without a name]] References Andreas Kling. (2019). [[Commute Talk: How to improve as a programmer::https://youtu.be/DY3Islql6xs]]]]></summary></entry><entry xml:lang="en"><title type="html">Humility is the knowing that you don’t know a lot of things not a false pretension to deceive people into praising you.</title><link href="https://henriquecsj.github.io/notes/humility-false-pretension/" rel="alternate" type="text/html" title="Humility is the knowing that you don’t know a lot of things not a false pretension to deceive people into praising you." /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/humility-false-pretension</id><content type="html" xml:base="https://henriquecsj.github.io/notes/humility-false-pretension/"><![CDATA[<p>The contemporary view of humility seems to be to pretend as if one knew little instead of realizing it. Here fake it till you make it doesn’t seem to work as, the more you pretend to be humble without realizing how little you know—not relatively, but absolutely—-the ego grows by holding onto the relative superiority.</p>

<p>Most of the issue of not understanding the fragility of one’s epistemic confidence arises due to comparision, but more often than not <span class="infotip"><a href="/notes/comparison-based-accomplishment/">Comparison based on accomplishment does not have a baseline</a><span class="right bottom" aria-hidden="true"><span class="infotip-title">Comparison based on accomplishment does not have a baseline</span><br /><span class="infotip-excerpt">I would just note that you have an image of some "great X" that you are trying to live up to, when really, there is no frame of reference to standardize a measure for X. Point being you and your circumstances are complet</span></span></span>.</p>

<h2 id="reference">Reference</h2>

<p>Taleb, Nicholas Nassim. (2015). <em>Antifragile: Things that gain from disorder</em></p>]]></content><author><name></name></author><category term="virtue" /><summary type="html"><![CDATA[The contemporary view of humility seems to be to pretend as if one knew little instead of realizing it. Here fake it till you make it doesn’t seem to work as, the more you pretend to be humble without realizing how little you know—not relatively, but absolutely—-the ego grows by holding onto the relative superiority. Most of the issue of not understanding the fragility of one’s epistemic confidence arises due to comparision, but more often than not [[Comparison based on accomplishment does not have a baseline]]. Reference Taleb, Nicholas Nassim. (2015). Antifragile: Things that gain from disorder]]></summary></entry><entry xml:lang="en"><title type="html">Epistemic humility to avoid unintended ontological dust while writing</title><link href="https://henriquecsj.github.io/notes/epistemic-humility/" rel="alternate" type="text/html" title="Epistemic humility to avoid unintended ontological dust while writing" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/epistemic-humility</id><content type="html" xml:base="https://henriquecsj.github.io/notes/epistemic-humility/"><![CDATA[<p>When writing an essay <em>(applies to both opinion piece as well as factual ones)</em>, remember to clearly portray the epistemic humility[[<strong>Epistemic Humility</strong>: Recognizing the fragility of your epistemic confidence i.e., you (can) only know so much::rmn]], that is required of the subject in hand, in your writing. My observation has been that writing essays involve introduction of at least some amount of ontological dust that sprouts from past vague encounters or influences that you cannot remember. You cannot willingly avoid your perceptions and thoughts, but what you can definitely do is direct them to a more neutral ground by showing what you know is not all of it.</p>

<p>See Related: [[Humility is the knowing of the epistemic gap]]</p>

<h2 id="references">References</h2>

<p>Raghuveer S. (2018). <em>Journal Entry</em></p>]]></content><author><name></name></author><category term="writing" /><summary type="html"><![CDATA[When writing an essay (applies to both opinion piece as well as factual ones), remember to clearly portray the epistemic humility[[Epistemic Humility: Recognizing the fragility of your epistemic confidence i.e., you (can) only know so much::rmn]], that is required of the subject in hand, in your writing. My observation has been that writing essays involve introduction of at least some amount of ontological dust that sprouts from past vague encounters or influences that you cannot remember. You cannot willingly avoid your perceptions and thoughts, but what you can definitely do is direct them to a more neutral ground by showing what you know is not all of it. See Related: [[Humility is the knowing of the epistemic gap]] References Raghuveer S. (2018). Journal Entry]]></summary></entry><entry xml:lang="en"><title type="html">Dark theme adoption as a function of cognitive exhaustion</title><link href="https://henriquecsj.github.io/notes/dark-theme-adoption/" rel="alternate" type="text/html" title="Dark theme adoption as a function of cognitive exhaustion" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/dark-theme-adoption</id><content type="html" xml:base="https://henriquecsj.github.io/notes/dark-theme-adoption/"><![CDATA[<p>Sensitivity to brightness can occur due to number of issues ranging from corneal issues like infections and abrasions, to dry eye, to concussions, to allergies; eg: Keratoconus, Uveitis, Keratitis, Preeclampsia. Google claims in its [[android developer guide that dark themes can improve visibility for people who have low vision and are sensititive to brightness::<a href="https://developer.android.com/guide/topics/ui/look-and-feel/darktheme">https://developer.android.com/guide/topics/ui/look-and-feel/darktheme</a>]], but people I have spoken to on this topic (n≈20) had normal vision and normal range of sensitivity to light.</p>

<p>Even people with mild eye issues[[Jason Harrison, UBC - People with astigmatism (approximately 50% of the population) find it harder to read white text on black than black text on white.::lsn]] seem to benefit from light theme than dark theme in most cases. And to top it all, even the researches that focus on the legibility[[Bauer, D., &amp; Cavonius, C., R. (1980). <em>Improving the legibility of visual display units through contrast reversal.</em> <br /><strong>See Below for more</strong>.::rsn]] and aesthetics claim that dark on light is almost always better than dark on light. Every article I have read and referenced below vouch for dark on light, which I find to be true too at least in most occasions.</p>

<p>How can what is relatively bad for legibility in most ocassions, bad in terms of expressibility of authorial aesthetics be a wide-spread preference? My hypothesis is this is primarily due to cognitive exhaustion like sleep deprivation, burn-out, stress etc (Extrapolating from n=1), which due to implicity conformity and [[preference falsification::<a href="https://en.wikipedia.org/wiki/Preference_falsification">https://en.wikipedia.org/wiki/Preference_falsification</a>]] has become a normative social element. My experience has been that when I have had a bad last night sleep or stress due to office, I invariably am looking for less polarity, otherwise the dark on white seems more appealing to me both aesthetics wise and legibility wise. An extension of these could be that cognitive stress elevate the ocular stress like accomodative/refractive/convergence stress leading up to this, but I contest dark mode being the wide-spread personal/subjective preference.</p>

<hr />

<h2 id="references">References</h2>

<p>Bauer, D., &amp; Cavonius, C., R. (1980). <em>Improving the legibility of visual display units through contrast reversal.</em>
(From: [[UX Stackexchange on theme and eye strain::<a href="https://ux.stackexchange.com/questions/53264/dark-or-white-color-theme-is-better-for-the-eyes">https://ux.stackexchange.com/questions/53264/dark-or-white-color-theme-is-better-for-the-eyes</a>]])</p>

<blockquote>
  <p>“…However, most studies have shown that dark characters on a light background are superior to light characters on a dark background (when the refresh rate is fairly high). For example, Bauer and Cavonius (1980) found that participants were 26% more accurate in reading text when they read it with dark characters on a light background…”</p>
</blockquote>

<p>Pabini Gabriel-Petit. (2007). <em>[[Applying color theory to digital displays::<a href="https://www.uxmatters.com/mt/archives/2007/01/applying-color-theory-to-digital-displays.php">https://www.uxmatters.com/mt/archives/2007/01/applying-color-theory-to-digital-displays.php</a>]]</em></p>

<blockquote>
  <p>“…While white text on a black background provides very high value contrast, it is less readable and causes greater eye fatigue than black text on a white background…”</p>
</blockquote>

<p>Jason Harrison – Post Doctoral Fellow, Imager Lab Manager – Sensory Perception and Interaction Research Group, University of British Columbia</p>

<blockquote>
  <p>People with astigmatism (approximately 50% of the population) find it harder to read white text on black than black text on white. Part of this has to do with light levels: with a bright display (white background) the iris closes a bit more, decreasing the effect of the “deformed” lens; with a dark display (black background) the iris opens to receive more light and the deformation of the lens creates a much fuzzier focus at the eye.</p>
</blockquote>

<p>Raluca Budiu. (2020). <em>[[Dark mode v Light Mode: Which is better::<a href="https://www.nngroup.com/articles/dark-mode/">https://www.nngroup.com/articles/dark-mode/</a>]]</em></p>

<blockquote>
  <p>“…Their results showed that light mode won across all dimensions: irrespective of age, the positive contrast polarity was better for both visual-acuity tasks and for proofreading tasks. However, the difference between light mode and dark mode in the visual-acuity task was smaller for older adults than for younger adults — meaning that, although light mode was better for older adults, too, they did not benefit from it as much as younger adults, at least in the visual-acuity task.</p>

  <p>When researchers looked at fatigue metrics, they concluded that there was no significant difference of contrast polarity on any of them (meaning that it wasn’t the case that dark mode made people more tired, or vice versa)…”</p>
</blockquote>

<p>Lauren V. Scharff, Albert J Ahumada. (2005). [[Why is light text harder to read than dark text::<a href="https://jov.arvojournals.org/article.aspx?articleid=2132608">https://jov.arvojournals.org/article.aspx?articleid=2132608</a>]]</p>

<blockquote>
  <p>“…For paragraph readability and letter identification, responses to light text were slower and less accurate for a given contrast….”</p>
</blockquote>

<p>Jim Sheedy, Kevin Larson. (2008). <em>[[Blink: The stress of Reading::<a href="https://www.eyemagazine.com/opinion/article/eye-strain">https://www.eyemagazine.com/opinion/article/eye-strain</a>]]</em></p>]]></content><author><name></name></author><category term="ux" /><category term="programming" /><category term="sleep" /><category term="cognition" /><summary type="html"><![CDATA[Sensitivity to brightness can occur due to number of issues ranging from corneal issues like infections and abrasions, to dry eye, to concussions, to allergies; eg: Keratoconus, Uveitis, Keratitis, Preeclampsia. Google claims in its [[android developer guide that dark themes can improve visibility for people who have low vision and are sensititive to brightness::https://developer.android.com/guide/topics/ui/look-and-feel/darktheme]], but people I have spoken to on this topic (n≈20) had normal vision and normal range of sensitivity to light. Even people with mild eye issues[[Jason Harrison, UBC - People with astigmatism (approximately 50% of the population) find it harder to read white text on black than black text on white.::lsn]] seem to benefit from light theme than dark theme in most cases. And to top it all, even the researches that focus on the legibility[[Bauer, D., &amp; Cavonius, C., R. (1980). Improving the legibility of visual display units through contrast reversal. See Below for more.::rsn]] and aesthetics claim that dark on light is almost always better than dark on light. Every article I have read and referenced below vouch for dark on light, which I find to be true too at least in most occasions. How can what is relatively bad for legibility in most ocassions, bad in terms of expressibility of authorial aesthetics be a wide-spread preference? My hypothesis is this is primarily due to cognitive exhaustion like sleep deprivation, burn-out, stress etc (Extrapolating from n=1), which due to implicity conformity and [[preference falsification::https://en.wikipedia.org/wiki/Preference_falsification]] has become a normative social element. My experience has been that when I have had a bad last night sleep or stress due to office, I invariably am looking for less polarity, otherwise the dark on white seems more appealing to me both aesthetics wise and legibility wise. An extension of these could be that cognitive stress elevate the ocular stress like accomodative/refractive/convergence stress leading up to this, but I contest dark mode being the wide-spread personal/subjective preference. References Bauer, D., &amp; Cavonius, C., R. (1980). Improving the legibility of visual display units through contrast reversal. (From: [[UX Stackexchange on theme and eye strain::https://ux.stackexchange.com/questions/53264/dark-or-white-color-theme-is-better-for-the-eyes]]) “…However, most studies have shown that dark characters on a light background are superior to light characters on a dark background (when the refresh rate is fairly high). For example, Bauer and Cavonius (1980) found that participants were 26% more accurate in reading text when they read it with dark characters on a light background…” Pabini Gabriel-Petit. (2007). [[Applying color theory to digital displays::https://www.uxmatters.com/mt/archives/2007/01/applying-color-theory-to-digital-displays.php]] “…While white text on a black background provides very high value contrast, it is less readable and causes greater eye fatigue than black text on a white background…” Jason Harrison – Post Doctoral Fellow, Imager Lab Manager – Sensory Perception and Interaction Research Group, University of British Columbia People with astigmatism (approximately 50% of the population) find it harder to read white text on black than black text on white. Part of this has to do with light levels: with a bright display (white background) the iris closes a bit more, decreasing the effect of the “deformed” lens; with a dark display (black background) the iris opens to receive more light and the deformation of the lens creates a much fuzzier focus at the eye. Raluca Budiu. (2020). [[Dark mode v Light Mode: Which is better::https://www.nngroup.com/articles/dark-mode/]] “…Their results showed that light mode won across all dimensions: irrespective of age, the positive contrast polarity was better for both visual-acuity tasks and for proofreading tasks. However, the difference between light mode and dark mode in the visual-acuity task was smaller for older adults than for younger adults — meaning that, although light mode was better for older adults, too, they did not benefit from it as much as younger adults, at least in the visual-acuity task. When researchers looked at fatigue metrics, they concluded that there was no significant difference of contrast polarity on any of them (meaning that it wasn’t the case that dark mode made people more tired, or vice versa)…” Lauren V. Scharff, Albert J Ahumada. (2005). [[Why is light text harder to read than dark text::https://jov.arvojournals.org/article.aspx?articleid=2132608]] “…For paragraph readability and letter identification, responses to light text were slower and less accurate for a given contrast….” Jim Sheedy, Kevin Larson. (2008). [[Blink: The stress of Reading::https://www.eyemagazine.com/opinion/article/eye-strain]]]]></summary></entry><entry xml:lang="en"><title type="html">Cultural artefacts to improve the resonance and life expectancy of your writing</title><link href="https://henriquecsj.github.io/notes/cultural-artefacts/" rel="alternate" type="text/html" title="Cultural artefacts to improve the resonance and life expectancy of your writing" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/cultural-artefacts</id><content type="html" xml:base="https://henriquecsj.github.io/notes/cultural-artefacts/"><![CDATA[<p>Cultural additions like one’s philosophical inclinations, directed social interactions through common social artefacts, etc can add personal touch to the essays,which not only elevates the engagement but also the life expectancy of an essay. Take any essay by Orwell from [[As I Please::<a href="https://www.orwell.ru/library/articles/As_I_Please/english/">https://www.orwell.ru/library/articles/As_I_Please/english/</a>]] during his time in The Tribune, or his other [[essays::<a href="https://www.orwell.ru/library/essays/index_en">https://www.orwell.ru/library/essays/index_en</a>]].</p>

<p><strong>Example:</strong> Apart from the quirky and chirpy attitude, what makes this this [[Application to New Yorker for a Job::<a href="https://fs.blog/2014/05/eudora-welty-to-the-new-yorker-the-best-job-application-ever/">https://fs.blog/2014/05/eudora-welty-to-the-new-yorker-the-best-job-application-ever/</a>]] by Eudora Welty so memorable in my opinion is her use of common social artefacts like subtle mention of her background and its significance in how it relates to her being in this position right now;</p>

<blockquote class="boxit serif small-medium">
  <p>…I am 23 years old, six weeks on the loose in N.Y. However, I was a New Yorker for a whole year in 1930– 31 while attending advertising classes in Columbia’s School of Business. Actually I am a southerner, from Mississippi, the nation’s most backward state. Ramifications include Walter H. Page, who, unluckily for me, is no longer connected with Doubleday-Page, which is no longer Doubleday-Page, even. I have a B.A. (’ 29) from the University of Wisconsin, where I majored in English without a care in the world. For the last eighteen months I was languishing in my own office in a radio station in Jackson, Miss., writing continuities, dramas, mule feed advertisements, santa claus talks, and life insurance playlets; now I have given that up….</p>
</blockquote>

<p>The witty use of what I like to call a socio-cultural confabulation in the form of a movie review and a relatable but madeup word that is also original in a sense.</p>

<blockquote class="boxit serif small-medium">
  <p>…As to what I might do for you— I have seen an untoward amount of picture galleries and 15¢ movies lately, and could review them with my old prosperous detachment, I think; in fact, I recently coined a general word for Matisse’s pictures after seeing his latest at the Marie Harriman: concubineapple. That shows you how my mind works—quick, and away from the point. I read simply voraciously, and can drum up an opinion afterwards…</p>
</blockquote>

<p>The mention of India print and subtle showcase of how she knows the struggles in the industry without any explicit mention.</p>

<blockquote class="boxit serif small-medium">
  <p>…Since I have bought an India print, and a large number of phonograph records from a Mr. Nussbaum who picks them up, and a Cezanne Bathers one inch long (that shows you I read e. e. cummings I hope), I am anxious to have an apartment, not to mention a small portable phonograph. How I would like to work for you! A little paragraph each morning— a little paragraph each night, if you can’t hire me from daylight to dark, although I would work like a slave. I can also draw like Mr. Thurber, in case he goes off the deep end. I have studied flower painting…</p>
</blockquote>

<p>And the final invocation of the extremely common social contruct i.e., <strong><em>the leprechaun throw.</em></strong></p>

<blockquote class="boxit serif small-medium">
  <p>There is no telling where I may apply, if you turn me down; I realize this will not phase you, but consider my other alternative: the U of N.C. offers for $12.00 to let me dance in Vachel Lindsay’s Congo. I congo on. I rest my case, repeating that I am a hard worker.</p>
</blockquote>

<p>This may not have been the best application in a formal sense, but the reason people go to it is probably because what it reminds them of — the cultural nostalgia (the shared social artefact).</p>

<p>Another type of common artefact is sincere immitation of great works, the sincere admiration can help with the remembrance. Related: [[Sincere imitation is authentic]]</p>

<h3 id="addendum">Addendum</h3>

<p>Incorporation of common artefacts might also help with remebering and understanding it easily when you read them years later. To put it succintly, it help you [[Write so your future self can remember]]</p>

<h2 id="references">References</h2>

<p>Orwell, George. (1930s). <em>[[As I Please, The Tribune::<a href="https://www.orwell.ru/library/articles/As_I_Please/english/">https://www.orwell.ru/library/articles/As_I_Please/english/</a>]]</em></p>

<p>Virginia Woolf. (1921). <em>[[Monday and Tuesday::<a href="https://www.gutenberg.org/files/29220/29220-h/29220-h.htm">https://www.gutenberg.org/files/29220/29220-h/29220-h.htm</a>]]</em></p>

<p>Welty, Eudora. <em>[[Application to New Yorker for a Job::<a href="https://fs.blog/2014/05/eudora-welty-to-the-new-yorker-the-best-job-application-ever/">https://fs.blog/2014/05/eudora-welty-to-the-new-yorker-the-best-job-application-ever/</a>]]</em></p>]]></content><author><name></name></author><category term="writing" /><summary type="html"><![CDATA[Cultural additions like one’s philosophical inclinations, directed social interactions through common social artefacts, etc can add personal touch to the essays,which not only elevates the engagement but also the life expectancy of an essay. Take any essay by Orwell from [[As I Please::https://www.orwell.ru/library/articles/As_I_Please/english/]] during his time in The Tribune, or his other [[essays::https://www.orwell.ru/library/essays/index_en]]. Example: Apart from the quirky and chirpy attitude, what makes this this [[Application to New Yorker for a Job::https://fs.blog/2014/05/eudora-welty-to-the-new-yorker-the-best-job-application-ever/]] by Eudora Welty so memorable in my opinion is her use of common social artefacts like subtle mention of her background and its significance in how it relates to her being in this position right now; …I am 23 years old, six weeks on the loose in N.Y. However, I was a New Yorker for a whole year in 1930– 31 while attending advertising classes in Columbia’s School of Business. Actually I am a southerner, from Mississippi, the nation’s most backward state. Ramifications include Walter H. Page, who, unluckily for me, is no longer connected with Doubleday-Page, which is no longer Doubleday-Page, even. I have a B.A. (’ 29) from the University of Wisconsin, where I majored in English without a care in the world. For the last eighteen months I was languishing in my own office in a radio station in Jackson, Miss., writing continuities, dramas, mule feed advertisements, santa claus talks, and life insurance playlets; now I have given that up…. The witty use of what I like to call a socio-cultural confabulation in the form of a movie review and a relatable but madeup word that is also original in a sense. …As to what I might do for you— I have seen an untoward amount of picture galleries and 15¢ movies lately, and could review them with my old prosperous detachment, I think; in fact, I recently coined a general word for Matisse’s pictures after seeing his latest at the Marie Harriman: concubineapple. That shows you how my mind works—quick, and away from the point. I read simply voraciously, and can drum up an opinion afterwards… The mention of India print and subtle showcase of how she knows the struggles in the industry without any explicit mention. …Since I have bought an India print, and a large number of phonograph records from a Mr. Nussbaum who picks them up, and a Cezanne Bathers one inch long (that shows you I read e. e. cummings I hope), I am anxious to have an apartment, not to mention a small portable phonograph. How I would like to work for you! A little paragraph each morning— a little paragraph each night, if you can’t hire me from daylight to dark, although I would work like a slave. I can also draw like Mr. Thurber, in case he goes off the deep end. I have studied flower painting… And the final invocation of the extremely common social contruct i.e., the leprechaun throw. There is no telling where I may apply, if you turn me down; I realize this will not phase you, but consider my other alternative: the U of N.C. offers for $12.00 to let me dance in Vachel Lindsay’s Congo. I congo on. I rest my case, repeating that I am a hard worker. This may not have been the best application in a formal sense, but the reason people go to it is probably because what it reminds them of — the cultural nostalgia (the shared social artefact). Another type of common artefact is sincere immitation of great works, the sincere admiration can help with the remembrance. Related: [[Sincere imitation is authentic]] Addendum Incorporation of common artefacts might also help with remebering and understanding it easily when you read them years later. To put it succintly, it help you [[Write so your future self can remember]] References Orwell, George. (1930s). [[As I Please, The Tribune::https://www.orwell.ru/library/articles/As_I_Please/english/]] Virginia Woolf. (1921). [[Monday and Tuesday::https://www.gutenberg.org/files/29220/29220-h/29220-h.htm]] Welty, Eudora. [[Application to New Yorker for a Job::https://fs.blog/2014/05/eudora-welty-to-the-new-yorker-the-best-job-application-ever/]]]]></summary></entry><entry xml:lang="en"><title type="html">Comparison based on accomplishment does not have a baseline</title><link href="https://henriquecsj.github.io/notes/comparison-based-accomplishment/" rel="alternate" type="text/html" title="Comparison based on accomplishment does not have a baseline" /><published>2026-10-30T21:58:45-03:00</published><updated>2026-10-30T21:58:45-03:00</updated><id>https://henriquecsj.github.io/notes/comparison-based-accomplishment</id><content type="html" xml:base="https://henriquecsj.github.io/notes/comparison-based-accomplishment/"><![CDATA[<p>I would just note that you have an image of some “great X” that you are trying to live up to, when really, there is no frame of reference to standardize a measure for X. Point being you and your circumstances are completely unique[[Warren Buffet talks about the idea of maintaining an inner score card of principles to escape this girardian mimetic rat-race::rmn]]. Also, James Richardon, the poet, says this beautifully in his book “Vectors: Aphorisms and 10 Second Essays”:</p>

<blockquote class="boxit serif medium">
  <p>“He wants to know what the best is so he can be superior to everything at once by seeing that the best isn’t perfect”.</p>
</blockquote>

<p>One way to handle this would be to realize the fragility of the epistemic confidence acquired as a result of accomplishment based superiority. Socio-cultural structure like Humility can help with this a lot. It is to be noted that , and not the false pretension to decieve each other into playing the comparison and pseudo-superiority game, which would just defeat the purpose of seeing the uniqueness of circumstance.</p>

<h2 id="references">References</h2>

<p>Warren Buffet. (Unknown). <em>[[The Inner Scorecard::<a href="https://fs.blog/2016/08/the-inner-scorecard/">https://fs.blog/2016/08/the-inner-scorecard/</a>]]</em></p>]]></content><author><name></name></author><category term="virtue" /><category term="life" /><summary type="html"><![CDATA[I would just note that you have an image of some “great X” that you are trying to live up to, when really, there is no frame of reference to standardize a measure for X. Point being you and your circumstances are completely unique[[Warren Buffet talks about the idea of maintaining an inner score card of principles to escape this girardian mimetic rat-race::rmn]]. Also, James Richardon, the poet, says this beautifully in his book “Vectors: Aphorisms and 10 Second Essays”: “He wants to know what the best is so he can be superior to everything at once by seeing that the best isn’t perfect”. One way to handle this would be to realize the fragility of the epistemic confidence acquired as a result of accomplishment based superiority. Socio-cultural structure like Humility can help with this a lot. It is to be noted that , and not the false pretension to decieve each other into playing the comparison and pseudo-superiority game, which would just defeat the purpose of seeing the uniqueness of circumstance. References Warren Buffet. (Unknown). [[The Inner Scorecard::https://fs.blog/2016/08/the-inner-scorecard/]]]]></summary></entry><entry xml:lang="en"><title type="html">Shipping jekyll-audit — Dogfooding a Jekyll QA CLI on a production site</title><link href="https://henriquecsj.github.io/notes/jekyll-audit-dogfooding/" rel="alternate" type="text/html" title="Shipping jekyll-audit — Dogfooding a Jekyll QA CLI on a production site" /><published>2025-08-21T00:00:00-03:00</published><updated>2025-08-21T00:00:00-03:00</updated><id>https://henriquecsj.github.io/notes/jekyll-audit-dogfooding</id><content type="html" xml:base="https://henriquecsj.github.io/notes/jekyll-audit-dogfooding/"><![CDATA[<p>For over a decade, I’ve shipped sites with Jekyll. It’s simple, battle‑tested, and it fits my writing workflow. But every time I wanted a single CLI to check accessibility, links, HTML validity, and Lighthouse in one go, nothing quite fit. So I built one.</p>

<p>Meet <code class="language-plaintext highlighter-rouge">jekyll-audit</code> — an npm CLI that builds/serves your Jekyll site, crawls it, and runs a stack of audits (Lighthouse, Pa11y, Linkinator, HTML validator), then writes a consolidated summary.</p>

<p>I didn’t want another “sample demo.” I ate my own dogfood on a real site: my Jekyll project <code class="language-plaintext highlighter-rouge">enjoyment-work</code> (100+ GitHub ⭐), and used the findings to make concrete HTML and accessibility fixes.</p>

<p>Links:</p>
<ul>
  <li>jekyll-audit repo: https://github.com/brennanbrown/jekyll-audit</li>
  <li>enjoyment-work repo: https://github.com/brennanbrown/enjoyment-work</li>
</ul>

<h2 id="what-jekyll-audit-does">What jekyll-audit does</h2>

<ul>
  <li>Builds your site with Jekyll (<code class="language-plaintext highlighter-rouge">JEKYLL_ENV=production</code>).</li>
  <li>Serves locally and auto-detects <code class="language-plaintext highlighter-rouge">baseurl</code> from <code class="language-plaintext highlighter-rouge">_config.yml</code>.</li>
  <li>Discovers pages via <code class="language-plaintext highlighter-rouge">sitemap.xml</code> (or falls back to specified paths).</li>
  <li>Runs:
    <ul>
      <li>Lighthouse (performance, SEO, best-practices)</li>
      <li>Pa11y (accessibility)</li>
      <li>Linkinator (broken links)</li>
      <li>HTML validation (WHATWG)</li>
    </ul>
  </li>
  <li>Writes JSON (and optionally MD/HTML) reports to a dir (default <code class="language-plaintext highlighter-rouge">reports/</code>).</li>
  <li>Emits a consolidated <code class="language-plaintext highlighter-rouge">summary.json</code> and exits non-zero if thresholds fail.</li>
</ul>

<h2 id="quick-start">Quick start</h2>

<p>Requirements: Node 18+, Ruby/Jekyll.</p>

<ul>
  <li>Local (from a clone of jekyll-audit):
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install
</span>npm run build
node bin/jekyll-audit <span class="nt">--help</span>
node bin/jekyll-audit audit
</code></pre></div>    </div>
  </li>
  <li>npx (recommended):
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx @brennanbrown/jekyll-audit audit
</code></pre></div>    </div>
  </li>
  <li>Target a running server:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx @brennanbrown/jekyll-audit <span class="nt">--baseUrl</span> http://127.0.0.1:4000 audit
</code></pre></div>    </div>
  </li>
  <li>Useful flags:
```bash
    <h1 id="faster-link-checks-internal-only">Faster link checks (internal only)</h1>
    <p>npx @brennanbrown/jekyll-audit audit –linksInternalOnly –linksConcurrency 200 –linksTimeout 15000</p>
  </li>
</ul>

<h1 id="limit-to-fewer-pages-and-disable-sitemap">Limit to fewer pages and disable sitemap</h1>
<p>npx @brennanbrown/jekyll-audit audit –maxPages 20 –noSitemap</p>

<h1 id="heavier-lighthouse-output">Heavier Lighthouse output</h1>
<p>npx @brennanbrown/jekyll-audit audit –output full –includeDetails –includeScreenshots</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
Optional config file `jekyll-audit.config.js`:
```js
/** @type {import('./dist/config/schema.js').AuditConfig} */
export default {
  jekyll: { buildDir: '_site', buildCommand: 'bundle exec jekyll build' },
  crawl:  { useSitemap: true, maxPages: 50, paths: ['/'] },
  thresholds: {
    lighthouse: { performance: 0.8, seo: 0.9, 'best-practices': 0.9 },
    accessibility: { maxIssues: 0 },
    links: { maxBroken: 0 },
    html: { maxErrors: 0 },
  },
  reports: { formats: ['json'], outDir: 'reports' },
};
</code></pre></div></div>

<h2 id="ci-usage-github-actions">CI usage (GitHub Actions)</h2>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">name</span><span class="pi">:</span> <span class="s">Jekyll Audit</span>
<span class="na">on</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">push</span><span class="pi">,</span> <span class="nv">pull_request</span><span class="pi">]</span>
<span class="na">jobs</span><span class="pi">:</span>
  <span class="na">audit</span><span class="pi">:</span>
    <span class="na">runs-on</span><span class="pi">:</span> <span class="s">ubuntu-latest</span>
    <span class="na">steps</span><span class="pi">:</span>
      <span class="pi">-</span> <span class="na">uses</span><span class="pi">:</span> <span class="s">actions/checkout@v4</span>
      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Set up Ruby</span>
        <span class="na">if</span><span class="pi">:</span> <span class="s">hashFiles('**/Gemfile') != ''</span>
        <span class="na">uses</span><span class="pi">:</span> <span class="s">ruby/setup-ruby@v1</span>
        <span class="na">with</span><span class="pi">:</span>
          <span class="na">ruby-version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">3.2'</span>
          <span class="na">bundler-cache</span><span class="pi">:</span> <span class="kc">true</span>
      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Install Jekyll deps</span>
        <span class="na">if</span><span class="pi">:</span> <span class="s">hashFiles('**/Gemfile') != ''</span>
        <span class="na">run</span><span class="pi">:</span> <span class="pi">|</span>
          <span class="s">bundle config set --local path 'vendor/bundle'</span>
          <span class="s">bundle install</span>
      <span class="pi">-</span> <span class="na">uses</span><span class="pi">:</span> <span class="s">actions/setup-node@v4</span>
        <span class="na">with</span><span class="pi">:</span>
          <span class="na">node-version</span><span class="pi">:</span> <span class="s1">'</span><span class="s">20'</span>
          <span class="na">cache</span><span class="pi">:</span> <span class="s1">'</span><span class="s">npm'</span>
      <span class="pi">-</span> <span class="na">run</span><span class="pi">:</span> <span class="s">npm ci</span>
      <span class="pi">-</span> <span class="na">run</span><span class="pi">:</span> <span class="s">npm run build</span>
      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Run jekyll-audit</span>
        <span class="na">run</span><span class="pi">:</span> <span class="s">node bin/jekyll-audit audit</span>
      <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Upload reports</span>
        <span class="na">if</span><span class="pi">:</span> <span class="s">always()</span>
        <span class="na">uses</span><span class="pi">:</span> <span class="s">actions/upload-artifact@v4</span>
        <span class="na">with</span><span class="pi">:</span>
          <span class="na">name</span><span class="pi">:</span> <span class="s">jekyll-audit-reports</span>
          <span class="na">path</span><span class="pi">:</span> <span class="s">reports/</span>
</code></pre></div></div>

<h2 id="dogfooding-on-enjoyment-work">Dogfooding on enjoyment-work</h2>

<p>I ran the CLI against my real site and triaged the results. Representative run (summary):</p>

<ul>
  <li>Lighthouse: performance 0.90, best-practices 1.00, SEO 1.00</li>
  <li>Accessibility (Pa11y): 39 issues across 39 pages</li>
  <li>Links (Linkinator): 33 broken links</li>
  <li>HTML validator: 464 total errors across 39 pages</li>
</ul>

<p>Performance/SEO were great. The biggest wins were in markup correctness and link hygiene.</p>

<h3 id="1-duplicate-ids-in-templates">1) Duplicate IDs in templates</h3>

<ul>
  <li>Files: <code class="language-plaintext highlighter-rouge">_pages/tags.md</code>, <code class="language-plaintext highlighter-rouge">_pages/categories.md</code>, <code class="language-plaintext highlighter-rouge">_pages/dates.md</code></li>
  <li>Problem: repeated IDs on list items and containers (invalid HTML, accessibility confusion).</li>
  <li>Fix: convert repeated <code class="language-plaintext highlighter-rouge">id</code> usage to <code class="language-plaintext highlighter-rouge">class</code> and keep single, meaningful IDs for headings.</li>
</ul>

<p>Before (from <code class="language-plaintext highlighter-rouge">_pages/tags.md</code>):</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;ul</span> <span class="na">id=</span><span class="s">"tag-grid"</span><span class="nt">&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>markdown<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>jekyll<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>theme<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>test<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>practical<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>purpose<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>inspiration<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>productivity<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>habits<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>planning<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>writing<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>goals<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>creativity<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>notekeeping<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>quantum mechanics<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>soc<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>plot<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>bash<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">id=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>hint<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
<span class="nt">&lt;/ul&gt;</span>
</code></pre></div></div>

<p>After:</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;ul</span> <span class="na">class=</span><span class="s">"tag-grid"</span><span class="nt">&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>markdown<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>jekyll<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>theme<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>test<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>practical<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>purpose<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>inspiration<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>productivity<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>habits<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>planning<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>writing<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>goals<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>creativity<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>notekeeping<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>quantum mechanics<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>soc<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>plot<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>bash<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
    <span class="nt">&lt;li</span> <span class="na">class=</span><span class="s">"tag-content"</span><span class="nt">&gt;&lt;a</span> <span class="na">href=</span><span class="s">"#"</span><span class="nt">&gt;</span>hint<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
  
<span class="nt">&lt;/ul&gt;</span>
<span class="nt">&lt;h3</span> <span class="na">id=</span><span class="s">""</span><span class="nt">&gt;&lt;/h3&gt;</span>
</code></pre></div></div>

<p>Why this matters: duplicate IDs break document semantics and can confuse assistive tech. It also creates fragile CSS/JS selectors.</p>

<h3 id="2-self-closing-br--html5-br">2) Self-closing <code class="language-plaintext highlighter-rouge">&lt;br/&gt;</code> → HTML5 <code class="language-plaintext highlighter-rouge">&lt;br&gt;</code></h3>

<ul>
  <li>Files: <code class="language-plaintext highlighter-rouge">_includes/backlinks.html</code>, <code class="language-plaintext highlighter-rouge">_includes/related.html</code>, <code class="language-plaintext highlighter-rouge">_includes/footer.html</code>, <code class="language-plaintext highlighter-rouge">_notes/*.md</code>, <code class="language-plaintext highlighter-rouge">_pages/*</code></li>
  <li>Problem: HTML5 treats <code class="language-plaintext highlighter-rouge">&lt;br/&gt;</code> as non-standard; validators flag it.</li>
  <li>Fix: <code class="language-plaintext highlighter-rouge">&lt;br/&gt;</code> → <code class="language-plaintext highlighter-rouge">&lt;br&gt;</code> in all templates and markdown content.</li>
</ul>

<p>Examples:</p>
<ul>
  <li><code class="language-plaintext highlighter-rouge">_notes/reading-material.md</code></li>
  <li><code class="language-plaintext highlighter-rouge">_notes/serendipity-outlook.md</code></li>
  <li><code class="language-plaintext highlighter-rouge">_notes/dark-theme-adoption.md</code></li>
  <li><code class="language-plaintext highlighter-rouge">_notes/reading-fractailized.md</code></li>
  <li><code class="language-plaintext highlighter-rouge">_pages/tags.md</code>, <code class="language-plaintext highlighter-rouge">_pages/categories.md</code>, <code class="language-plaintext highlighter-rouge">_pages/dates.md</code></li>
</ul>

<p>Before:</p>
<div class="language-md highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gt">&gt; "... quoted text ..." &lt;br/&gt;&lt;cite&gt;—Source&lt;/cite&gt;</span>
</code></pre></div></div>

<p>After:</p>
<div class="language-md highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gt">&gt; "... quoted text ..." &lt;br&gt;&lt;cite&gt;—Source&lt;/cite&gt;</span>
</code></pre></div></div>

<h3 id="3-void-element-solidus-on-img-and-input">3) Void element solidus on <code class="language-plaintext highlighter-rouge">&lt;img&gt;</code> and <code class="language-plaintext highlighter-rouge">&lt;input&gt;</code></h3>

<ul>
  <li>Files: <code class="language-plaintext highlighter-rouge">_includes/content.html</code>, <code class="language-plaintext highlighter-rouge">_posts/2020-04-01-Exploring-the-features-of-enjoyment-work.md</code></li>
  <li>Problem: trailing <code class="language-plaintext highlighter-rouge">/&gt;</code> on void elements is unnecessary in HTML5 and often flagged alongside other markup issues.</li>
  <li>Fix: remove the solidus.</li>
</ul>

<p>Before:</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;img</span> <span class="na">src=</span><span class="s">"/assets/img/feed.png"</span> <span class="na">alt=</span><span class="s">"Feed"</span> <span class="na">width=</span><span class="s">"80%"</span> <span class="nt">/&gt;</span>
</code></pre></div></div>

<p>After:</p>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;img</span> <span class="na">src=</span><span class="s">"/assets/img/feed.png"</span> <span class="na">alt=</span><span class="s">"Feed"</span> <span class="na">width=</span><span class="s">"80%"</span><span class="nt">&gt;</span>
</code></pre></div></div>

<p>Also corrected generated HTML strings in <code class="language-plaintext highlighter-rouge">_includes/content.html</code> where <code class="language-plaintext highlighter-rouge">&lt;img&gt;</code> and <code class="language-plaintext highlighter-rouge">&lt;input&gt;</code> were assembled with a <code class="language-plaintext highlighter-rouge">/&gt;</code> and converted those to standard HTML5 tags.</p>

<h3 id="4-placement-and-structure-tweaks-around-loops">4) Placement and structure tweaks around loops</h3>

<ul>
  <li>File: <code class="language-plaintext highlighter-rouge">_pages/tags.md</code></li>
  <li>Problem: stray <code class="language-plaintext highlighter-rouge">&lt;br&gt;</code> inside loops created awkward structure.</li>
  <li>Fix: move <code class="language-plaintext highlighter-rouge">&lt;br&gt;</code> outside loops to avoid repeated, stray breaks and improve flow for screen readers.</li>
</ul>

<h3 id="5-links-and-404s">5) Links and 404s</h3>

<p>The link scan surfaced 33 broken links. Typical fixes include:</p>
<ul>
  <li>Updating moved posts/notes to current slugs.</li>
  <li>Replacing external dead links with archived copies (e.g., web.archive.org).</li>
  <li>For “nice to have” external references, gracefully removing or rewording.</li>
</ul>

<p>I keep link checks in summary mode for CI, then dive into a full detail pass locally when I’m ready to fix.</p>

<h2 id="takeaways">Takeaways</h2>

<ul>
  <li>Eat your own dogfood: A real site will surface validation and a11y issues that simple demos never hit.</li>
  <li>HTML correctness matters: small, systematic fixes (<code class="language-plaintext highlighter-rouge">&lt;br/&gt;</code>, duplicate IDs, void-element solidus) significantly clean the validator output and reduce noisy errors that hide the real problems.</li>
  <li>Keep audits lean for CI: default “summary” outputs are diff‑friendly and fast. When you’re ready to fix, flip on the heavier flags locally.</li>
  <li>Jekyll is still a great publishing surface: with a modern QA pipeline, it holds up well on performance/SEO and is easy to make accessible.</li>
</ul>

<h2 id="try-it-on-your-site">Try it on your site</h2>

<ul>
  <li>Minimal run:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx @brennanbrown/jekyll-audit audit
</code></pre></div>    </div>
  </li>
  <li>Heavier local analysis:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx @brennanbrown/jekyll-audit audit <span class="nt">--output</span> full <span class="nt">--includeDetails</span> <span class="nt">--includeScreenshots</span> <span class="nt">--a11yIncludeDetails</span> <span class="nt">--linksIncludeDetails</span> <span class="nt">--htmlIncludeDetails</span>
</code></pre></div>    </div>
  </li>
  <li>Faster internal-only link checks:
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npx @brennanbrown/jekyll-audit audit <span class="nt">--linksInternalOnly</span> <span class="nt">--linksConcurrency</span> 200 <span class="nt">--linksTimeout</span> 15000
</code></pre></div>    </div>
  </li>
</ul>

<p>If you ship with Jekyll and want a single CLI to answer “Is my site healthy?” across performance, accessibility, HTML, and link quality — give <code class="language-plaintext highlighter-rouge">jekyll-audit</code> a spin, and let me know what else you’d like it to check.</p>]]></content><author><name></name></author><category term="jekyll" /><category term="tooling" /><category term="accessibility" /><category term="performance" /><category term="seo" /><category term="links" /><category term="audit" /><summary type="html"><![CDATA[For over a decade, I’ve shipped sites with Jekyll. It’s simple, battle‑tested, and it fits my writing workflow. But every time I wanted a single CLI to check accessibility, links, HTML validity, and Lighthouse in one go, nothing quite fit. So I built one. Meet jekyll-audit — an npm CLI that builds/serves your Jekyll site, crawls it, and runs a stack of audits (Lighthouse, Pa11y, Linkinator, HTML validator), then writes a consolidated summary. I didn’t want another “sample demo.” I ate my own dogfood on a real site: my Jekyll project enjoyment-work (100+ GitHub ⭐), and used the findings to make concrete HTML and accessibility fixes. Links: jekyll-audit repo: https://github.com/brennanbrown/jekyll-audit enjoyment-work repo: https://github.com/brennanbrown/enjoyment-work What jekyll-audit does Builds your site with Jekyll (JEKYLL_ENV=production). Serves locally and auto-detects baseurl from _config.yml. Discovers pages via sitemap.xml (or falls back to specified paths). Runs: Lighthouse (performance, SEO, best-practices) Pa11y (accessibility) Linkinator (broken links) HTML validation (WHATWG) Writes JSON (and optionally MD/HTML) reports to a dir (default reports/). Emits a consolidated summary.json and exits non-zero if thresholds fail. Quick start Requirements: Node 18+, Ruby/Jekyll. Local (from a clone of jekyll-audit): npm install npm run build node bin/jekyll-audit --help node bin/jekyll-audit audit npx (recommended): npx @brennanbrown/jekyll-audit audit Target a running server: npx @brennanbrown/jekyll-audit --baseUrl http://127.0.0.1:4000 audit Useful flags: ```bash Faster link checks (internal only) npx @brennanbrown/jekyll-audit audit –linksInternalOnly –linksConcurrency 200 –linksTimeout 15000 Limit to fewer pages and disable sitemap npx @brennanbrown/jekyll-audit audit –maxPages 20 –noSitemap Heavier Lighthouse output npx @brennanbrown/jekyll-audit audit –output full –includeDetails –includeScreenshots Optional config file `jekyll-audit.config.js`: ```js /** @type {import('./dist/config/schema.js').AuditConfig} */ export default { jekyll: { buildDir: '_site', buildCommand: 'bundle exec jekyll build' }, crawl: { useSitemap: true, maxPages: 50, paths: ['/'] }, thresholds: { lighthouse: { performance: 0.8, seo: 0.9, 'best-practices': 0.9 }, accessibility: { maxIssues: 0 }, links: { maxBroken: 0 }, html: { maxErrors: 0 }, }, reports: { formats: ['json'], outDir: 'reports' }, }; CI usage (GitHub Actions) name: Jekyll Audit on: [push, pull_request] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Ruby if: hashFiles('**/Gemfile') != '' uses: ruby/setup-ruby@v1 with: ruby-version: '3.2' bundler-cache: true - name: Install Jekyll deps if: hashFiles('**/Gemfile') != '' run: | bundle config set --local path 'vendor/bundle' bundle install - uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - run: npm ci - run: npm run build - name: Run jekyll-audit run: node bin/jekyll-audit audit - name: Upload reports if: always() uses: actions/upload-artifact@v4 with: name: jekyll-audit-reports path: reports/ Dogfooding on enjoyment-work I ran the CLI against my real site and triaged the results. Representative run (summary): Lighthouse: performance 0.90, best-practices 1.00, SEO 1.00 Accessibility (Pa11y): 39 issues across 39 pages Links (Linkinator): 33 broken links HTML validator: 464 total errors across 39 pages Performance/SEO were great. The biggest wins were in markup correctness and link hygiene. 1) Duplicate IDs in templates Files: _pages/tags.md, _pages/categories.md, _pages/dates.md Problem: repeated IDs on list items and containers (invalid HTML, accessibility confusion). Fix: convert repeated id usage to class and keep single, meaningful IDs for headings. Before (from _pages/tags.md): &lt;ul id="tag-grid"&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;markdown&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;jekyll&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;theme&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;test&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;practical&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;purpose&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;inspiration&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;productivity&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;habits&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;planning&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;writing&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;goals&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;creativity&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;notekeeping&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;quantum mechanics&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;soc&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;plot&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;bash&lt;/a&gt;&lt;/li&gt; &lt;li id="tag-content"&gt;&lt;a href="#"&gt;hint&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; After: &lt;ul class="tag-grid"&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;markdown&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;jekyll&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;theme&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;test&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;practical&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;purpose&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;inspiration&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;productivity&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;habits&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;planning&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;writing&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;goals&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;creativity&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;notekeeping&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;quantum mechanics&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;soc&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;plot&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;bash&lt;/a&gt;&lt;/li&gt; &lt;li class="tag-content"&gt;&lt;a href="#"&gt;hint&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;h3 id=""&gt;&lt;/h3&gt; Why this matters: duplicate IDs break document semantics and can confuse assistive tech. It also creates fragile CSS/JS selectors. 2) Self-closing &lt;br/&gt; → HTML5 &lt;br&gt; Files: _includes/backlinks.html, _includes/related.html, _includes/footer.html, _notes/*.md, _pages/* Problem: HTML5 treats &lt;br/&gt; as non-standard; validators flag it. Fix: &lt;br/&gt; → &lt;br&gt; in all templates and markdown content. Examples: _notes/reading-material.md _notes/serendipity-outlook.md _notes/dark-theme-adoption.md _notes/reading-fractailized.md _pages/tags.md, _pages/categories.md, _pages/dates.md Before: &gt; "... quoted text ..." &lt;br/&gt;&lt;cite&gt;—Source&lt;/cite&gt; After: &gt; "... quoted text ..." &lt;br&gt;&lt;cite&gt;—Source&lt;/cite&gt; 3) Void element solidus on &lt;img&gt; and &lt;input&gt; Files: _includes/content.html, _posts/2020-04-01-Exploring-the-features-of-enjoyment-work.md Problem: trailing /&gt; on void elements is unnecessary in HTML5 and often flagged alongside other markup issues. Fix: remove the solidus. Before: &lt;img src="/assets/img/feed.png" alt="Feed" width="80%" /&gt; After: &lt;img src="/assets/img/feed.png" alt="Feed" width="80%"&gt; Also corrected generated HTML strings in _includes/content.html where &lt;img&gt; and &lt;input&gt; were assembled with a /&gt; and converted those to standard HTML5 tags. 4) Placement and structure tweaks around loops File: _pages/tags.md Problem: stray &lt;br&gt; inside loops created awkward structure. Fix: move &lt;br&gt; outside loops to avoid repeated, stray breaks and improve flow for screen readers. 5) Links and 404s The link scan surfaced 33 broken links. Typical fixes include: Updating moved posts/notes to current slugs. Replacing external dead links with archived copies (e.g., web.archive.org). For “nice to have” external references, gracefully removing or rewording. I keep link checks in summary mode for CI, then dive into a full detail pass locally when I’m ready to fix. Takeaways Eat your own dogfood: A real site will surface validation and a11y issues that simple demos never hit. HTML correctness matters: small, systematic fixes (&lt;br/&gt;, duplicate IDs, void-element solidus) significantly clean the validator output and reduce noisy errors that hide the real problems. Keep audits lean for CI: default “summary” outputs are diff‑friendly and fast. When you’re ready to fix, flip on the heavier flags locally. Jekyll is still a great publishing surface: with a modern QA pipeline, it holds up well on performance/SEO and is easy to make accessible. Try it on your site Minimal run: npx @brennanbrown/jekyll-audit audit Heavier local analysis: npx @brennanbrown/jekyll-audit audit --output full --includeDetails --includeScreenshots --a11yIncludeDetails --linksIncludeDetails --htmlIncludeDetails Faster internal-only link checks: npx @brennanbrown/jekyll-audit audit --linksInternalOnly --linksConcurrency 200 --linksTimeout 15000 If you ship with Jekyll and want a single CLI to answer “Is my site healthy?” across performance, accessibility, HTML, and link quality — give jekyll-audit a spin, and let me know what else you’d like it to check.]]></summary></entry></feed>