<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Alex Brovkin]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://alex.brovk.in/</link><image><url>https://alex.brovk.in/favicon.png</url><title>Alex Brovkin</title><link>https://alex.brovk.in/</link></image><generator>Ghost 5.73</generator><lastBuildDate>Thu, 26 Mar 2026 14:49:17 GMT</lastBuildDate><atom:link href="https://alex.brovk.in/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Movies, documentaries and shows]]></title><description><![CDATA[<p>An incomplete list of movies, documentaries and shows I liked and want to remember...</p><p>Movies: </p><ul><li>Malcom and Marie</li><li>Wes Anderson: Fantastic Mr Fox</li><li>Ghibli: Howl&#x2019;s Moving Castle; My Neighbor Totoro; The Boy and the Heron; The Wind Rises</li></ul><p>Interactive movies (aka video games): </p><ul><li>Outer Wilds</li></ul><p>Documentaries:</p><ul><li>Sisters in</li></ul>]]></description><link>https://alex.brovk.in/misc/movies-documentaries-and-shows/</link><guid isPermaLink="false">65f7a112ef31d8e46b386c3d</guid><category><![CDATA[Misc]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Thu, 26 Jun 2025 19:38:38 GMT</pubDate><content:encoded><![CDATA[<p>An incomplete list of movies, documentaries and shows I liked and want to remember...</p><p>Movies: </p><ul><li>Malcom and Marie</li><li>Wes Anderson: Fantastic Mr Fox</li><li>Ghibli: Howl&#x2019;s Moving Castle; My Neighbor Totoro; The Boy and the Heron; The Wind Rises</li></ul><p>Interactive movies (aka video games): </p><ul><li>Outer Wilds</li></ul><p>Documentaries:</p><ul><li>Sisters in transistors</li><li>Paris Is Burning</li><li>Abstract</li><li><a href="https://alex.brovk.in/r/b55d582a?m=c38ebc7d-b361-4d73-9829-f11a275a3085">Pina</a>&#xA0;by Wim Wenders - I love this documentary about the Pina Bausch dance troop and Pina&#x2019;s work as a choreographer.&#xA0;</li><li><a href="https://alex.brovk.in/r/194de236?m=c38ebc7d-b361-4d73-9829-f11a275a3085">American Symphony</a>&#xA0;- a documentary on Jon Batiste and Suleika Jaouad about music, cancer, and life. / &#x201C;You might not pull it off, but you need to have unwavering faith.&#x201D; / &#x201C;Why be jealous, be you.&#x201D;</li></ul><p>TV Shows:</p><ul><li>Heated Rivalry</li><li>Schitt&#x2019;s Creek</li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[📚 Book: L'élégance du hérisson]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/11/image.png" class="kg-image" alt loading="lazy" width="2000" height="1449" srcset="https://alex.brovk.in/content/images/size/w600/2024/11/image.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/11/image.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/11/image.png 1600w, https://alex.brovk.in/content/images/size/w2400/2024/11/image.png 2400w" sizes="(min-width: 720px) 720px"></figure><p>L&apos;&#xC9;l&#xE9;gance du h&#xE9;risson - Muriel Barbery</p><blockquote>Alors, buvons une tasse de th&#xE9;. (23)</blockquote><p>Je me suis fait dire maintes fois que les traductions du roman L&apos;&#xC9;l&#xE9;gance du h&#xE9;risson sont toutes aussi excellentes, mais je voulais</p>]]></description><link>https://alex.brovk.in/reading/book-l-elegance-de-l-herisson/</link><guid isPermaLink="false">6732b81461e09d058293199d</guid><category><![CDATA[Reading]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Tue, 12 Nov 2024 03:15:19 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/11/Screenshot-2024-11-11-at-10.10.57-PM.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/11/image.png" class="kg-image" alt="&#x1F4DA; Book: L&apos;&#xE9;l&#xE9;gance du h&#xE9;risson" loading="lazy" width="2000" height="1449" srcset="https://alex.brovk.in/content/images/size/w600/2024/11/image.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/11/image.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/11/image.png 1600w, https://alex.brovk.in/content/images/size/w2400/2024/11/image.png 2400w" sizes="(min-width: 720px) 720px"></figure><img src="https://alex.brovk.in/content/images/2024/11/Screenshot-2024-11-11-at-10.10.57-PM.png" alt="&#x1F4DA; Book: L&apos;&#xE9;l&#xE9;gance du h&#xE9;risson"><p>L&apos;&#xC9;l&#xE9;gance du h&#xE9;risson - Muriel Barbery</p><blockquote>Alors, buvons une tasse de th&#xE9;. (23)</blockquote><p>Je me suis fait dire maintes fois que les traductions du roman L&apos;&#xC9;l&#xE9;gance du h&#xE9;risson sont toutes aussi excellentes, mais je voulais le lire dans le texte, question que Mme Michel, concierge et personnage principal, aurait sans doute appr&#xE9;ci&#xE9; l&#x2019;importance.</p><blockquote>Il renifle bruyamment, renvoyant la coulure nasale l&#xE0; d&#x2019;o&#xF9; elle n&#x2019;est m&#xEA;me jamais venue et je suis contrainte par la rapidit&#xE9; de l&#x2019;action &#xE0; assister aux contractions f&#xE9;briles de sa pomme d&#x2019;Adam en vue de faciliter le passage de ladite. (21)</blockquote><p>Le texte est en soi un plaisir, au vocabulaire pointu et tournures de phrases qui virent vers le sarcasme. Certains chapitres on d&#xFB; avoir &#xE9;t&#xE9; &#xE9;crit pour moi, comme l&#xE0; o&#xF9; Mme Michel lit une introduction &#xE0; la ph&#xE9;nom&#xE9;nologie de Kant en prenant une bouch&#xE9;e de chocolat noir 70% pour en faire comparaison. (Je pr&#xE9;f&#xE8;re du chocolat 72%, mais bon.)</p><blockquote>Si on y r&#xE9;fl&#xE9;chit bien, il n&#x2019;y a rien de plus laid qu&#x2019;une porte ouverte. Dans la pi&#xE8;ce o&#xF9; elle se trouve, elle introduit comme une rupture, un parasitage provincial qui brise l&#x2019;unit&#xE9; de l&#x2019;espace. (40)</blockquote><p>Une des th&#xE9;matiques principales sont les structures socio-&#xE9;conomiques qui sont impos&#xE9;es par la soci&#xE9;t&#xE9;, mais le roman est aussi une inquisition sur la beaut&#xE9;, la philosophie et l&#x2019;Art, en autre mots &#x2013; la vie. </p><blockquote>Mais il est si ext&#xE9;nuant de d&#xE9;sirer sans cesse&#x2026; Nous aspirons bient&#xF4;t &#xE0; un plaisir sans qu&#xEA;te, nous r&#xEA;vons d&#x2019;un &#xE9;tat bienheureux qui ne commencerait ni ne finirait et o&#xF9; la beaut&#xE9; ne serait plus fin ni projet mais deviendrait l&#x2019;&#xE9;vidence m&#xEA;me de notre nature. Or, cet &#xE9;tat, c&#x2019;est l&#x2019;Art. (58)</blockquote><p>N&#x2019;ayant m&#xEA;me pas encore fini le livre, je pleure &#xE0; grosses goutes tout simplement parce ce que je resent cette lourdeur, ce sentiment que la vie qui n&#x2019;est ni trop dure ni trop belle, mais tout simplement trop large pour que je puisse la contenir d&apos;un seul coup. </p><blockquote>Ces jours-l&#xE0;, vous avez d&#xE9;sesp&#xE9;r&#xE9;ment besoin d&#x2019;Art. (25)</blockquote>]]></content:encoded></item><item><title><![CDATA[Movies to gif]]></title><description><![CDATA[<p>In my newsletters, I often like to include short gif from movies so that they can play right in the email. To do that, I need to convert movies (e.g. from my phone) to a GIF file. </p><pre><code class="language-Bash">ffmpeg -i Untitled.mp4 -r 10 -s 480x270 output.gif</code></pre><p>This requires</p>]]></description><link>https://alex.brovk.in/misc/misc-movies-to-gif/</link><guid isPermaLink="false">6732b5cf61e09d0582931984</guid><category><![CDATA[Misc]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Tue, 12 Nov 2024 02:01:37 GMT</pubDate><content:encoded><![CDATA[<p>In my newsletters, I often like to include short gif from movies so that they can play right in the email. To do that, I need to convert movies (e.g. from my phone) to a GIF file. </p><pre><code class="language-Bash">ffmpeg -i Untitled.mp4 -r 10 -s 480x270 output.gif</code></pre><p>This requires installing <code>ffmpeg</code> if you haven&apos;t already, of course. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://alex.brovk.in/content/images/2024/09/ezgif-2-605ba034e9.gif" class="kg-image" alt loading="lazy"><figcaption><span style="white-space: pre-wrap;">Example movie clip converted to a gif file</span></figcaption></figure><p>Some times the file is either too large or too slow or feels choppy. In those cases I will use a GIF editor (even an <a href="https://ezgif.com/split?ref=alex.brovk.in" rel="noreferrer">online one like this one</a> would work).</p>]]></content:encoded></item><item><title><![CDATA[-ucking chicken nugget]]></title><description><![CDATA[I’m not upset at you. I’m just really tired. I have run too deep into the red zone to come out of fight or flight. ]]></description><link>https://alex.brovk.in/writing/ucking-chicken-nugget/</link><guid isPermaLink="false">671c400361e09d05829318e2</guid><category><![CDATA[Writing]]></category><category><![CDATA[People]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Sun, 27 Oct 2024 02:59:55 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/10/Edvard_Munch-_1893-_The_Scream-_oil-_tempera_and_pastel_on_cardboard-_91_x_73_cm-_National_Gallery_of_Norway.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/10/Screenshot-2024-10-26-at-9.25.43-PM.png" class="kg-image" alt="-ucking chicken nugget" loading="lazy" width="1472" height="860" srcset="https://alex.brovk.in/content/images/size/w600/2024/10/Screenshot-2024-10-26-at-9.25.43-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/10/Screenshot-2024-10-26-at-9.25.43-PM.png 1000w, https://alex.brovk.in/content/images/2024/10/Screenshot-2024-10-26-at-9.25.43-PM.png 1472w" sizes="(min-width: 720px) 720px"></figure><img src="https://alex.brovk.in/content/images/2024/10/Edvard_Munch-_1893-_The_Scream-_oil-_tempera_and_pastel_on_cardboard-_91_x_73_cm-_National_Gallery_of_Norway.jpg" alt="-ucking chicken nugget"><p>I was going to bed with the guilt of a dirty kitchen, the physical representation of all the shoulds smeared around the house and our lives. </p><p>At night the dirty dishes rot into a dream about a house so humid and wrecked that its ceilings crack and fall apart like a blue-grey moldy loaf of bread. </p><p>In the morning, the dishes are still there, along with their stale smell of guilt that hasn&#x2019;t had a chance to air out. </p><p>It was quick dinner because I didn&#x2019;t have it in me for more, but the time it took stretched as my focus wained. Every ingredient, every vegetable washed, every chop of the pairing knife was just one more. Just one more. Just one more. </p><p>I&#x2019;m not upset at you. I&#x2019;m just really tired. I have run too deep into the red zone to come out of fight or flight. </p><hr><p>And then came the chicken nugget that tasted like fish. </p><hr><p>I just couldn&#x2019;t.</p><p>I just cry. </p><p>I&#x2019;m so tired. </p><p>I love you so much. </p><p>I knew it was time, the shakes are here, the foot tap, the roll your head from side to side. <em>Baby, I&#x2019;ve been here before. I know this room, I&#x2019;ve walked this floor.</em> I also know how the rotten floor gives way to my step, and how I fall into a basement I didn&#x2019;t even think could go so deep.</p><p>So I go for this walk. I smoke this joint. I sit down by the library and write this. I had been wanting to write something to the caregivers group, but right then it was too much, and now it seems too far.</p><p>It&#x2019;s times like these when life feels like a lot. </p>]]></content:encoded></item><item><title><![CDATA[Repo history filter]]></title><description><![CDATA[<p>I  worked on a git history rewrite, because I wanted to split a project that got fairly large away from my monorepo of experiments. I wanted to preserve the history, and I wanted the history for that project to only pertain to work done for that project only. </p><p>It&apos;</p>]]></description><link>https://alex.brovk.in/misc/repo-history-filter/</link><guid isPermaLink="false">671467d061e09d0582931880</guid><category><![CDATA[Misc]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Mon, 16 Sep 2024 01:11:00 GMT</pubDate><content:encoded><![CDATA[<p>I  worked on a git history rewrite, because I wanted to split a project that got fairly large away from my monorepo of experiments. I wanted to preserve the history, and I wanted the history for that project to only pertain to work done for that project only. </p><p>It&apos;s kind of like a Canadian history class in high-school, where a part of the history is isolated and omitted from the curriculum, and you need to go to the library to get a separate book to learn about it. We see it happen in the news a lot too. </p><hr><p>I used <code>filter-repo</code> to move a subfolder&#x2019;s history into a separate repo. Compared to a <code>subtree</code> which create a new fork in the history, I like the result of the former better, because it gave me something closer to as if I had started in a separate repo in the first place. </p><p>In a nutshell, that&apos;s all there is to it</p><pre><code>git filter-repo --path receipts/ --path-rename receipts/: --force</code></pre><p>For some I got a ton of conflicts when I started from a fresh remote pull. I was able to make it work by using a copy of my working folder and using the <code>--force</code>. </p>]]></content:encoded></item><item><title><![CDATA[Cry Baby made crying cool again]]></title><description><![CDATA[What I didn't know yet is how abundant such precious moments are and how close at reach they are. With this new awareness, I started noticing these gems here, there and everywhere. ]]></description><link>https://alex.brovk.in/writing/cry-baby-made-crying-cool-again/</link><guid isPermaLink="false">66e70ef661e09d05829315e9</guid><category><![CDATA[Writing]]></category><category><![CDATA[People]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Sun, 15 Sep 2024 22:34:44 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/09/20240822_115506-2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://alex.brovk.in/content/images/2024/09/20240822_115506-2.jpg" alt="Cry Baby made crying cool again"><p>When I met Cry Baby, she was unapologetically sure about her new nickname. On <a href="https://firstdescents.org/our-impact/?ref=alex.brovk.in" rel="noreferrer">First Descents</a> trips, everyone gets a nickname, but she owned it. Cry Baby cried out of sadness, cried in moments of joy, and cried when we could all feel this closeness and love within the group. She was so real about her emotions that it was contagious, and soon enough all of us were sharing in some tears.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://alex.brovk.in/content/images/2024/09/20240822_115506-3.jpg" class="kg-image" alt="Cry Baby made crying cool again" loading="lazy" width="2000" height="1500" srcset="https://alex.brovk.in/content/images/size/w600/2024/09/20240822_115506-3.jpg 600w, https://alex.brovk.in/content/images/size/w1000/2024/09/20240822_115506-3.jpg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/09/20240822_115506-3.jpg 1600w, https://alex.brovk.in/content/images/size/w2400/2024/09/20240822_115506-3.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Photo by Sweet D, First Descents trip August 2024</span></figcaption></figure><p>Old me swallowed my tears, and avoided difficult or vulnerable conversations, but Cry Baby made me realize that some of my fondest memories are anchored in the conversations and experiences I wasn&apos;t able to avoid. There was an overwhelming amount of these conversations with this group, and that is in part what made our  time together so memorable. Cry Baby thought us to let go of the tears, and welcome the difficult conversations and moments, because they are opportunities to connect to feel connected, heard, and truly alive.</p><p>On our way back to the airport, there was a conversation in the shuttle van about keeping conversations deep and real when we go back to real life after leaving the container we created on the trip. The container held space for a vast amount of vulnerability and heartfelt interactions, and we knew that the average conversation  in the outside world can hold a lot of bitching, whining, and negativity. We talked about ways to steer away from these, and Midas suggested a great alternative conversation prompt: &quot;on a scale of 1 to 10, how good is this guacamole?&quot;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://alex.brovk.in/content/images/2024/09/20240820_132449-1.jpg" class="kg-image" alt="Cry Baby made crying cool again" loading="lazy" width="2000" height="1500" srcset="https://alex.brovk.in/content/images/size/w600/2024/09/20240820_132449-1.jpg 600w, https://alex.brovk.in/content/images/size/w1000/2024/09/20240820_132449-1.jpg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/09/20240820_132449-1.jpg 1600w, https://alex.brovk.in/content/images/size/w2400/2024/09/20240820_132449-1.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Rogue River, Oregon, First Descents Trip</span></figcaption></figure><p>What I didn&apos;t know yet is how abundant such precious moments are and how close at reach they are. With this new awareness, I started noticing these gems here, there and everywhere. It was the smile I got from a kid boarding his first flight ever, or from the lady in line behind me who caught me dancing to Kait&apos;s playlist, or the conversations with old friends I was able to have before catching the last leg of my way home. I noticed my conversations and interactions being significantly more meaningful since. There are times when asking about the guacamole is moderately appropriate, but keeping this prompt in the back of my mind serves as a reminder to be present and genuine in the conversations I choose to have. </p><p>&quot;Cry Baby made crying cool again,&quot; said Rutroh, and that really resonated with me. I want to welcome this Cry Baby lens, and set an intention to feel this kind of love in my life on a regular basis. Love is everywhere, and as Rutroh also said &quot;love has to win, it just has to.&quot;</p><hr><p>I participated in a week-long kayaking trip along the Wild and Scenic Rogue River in Oregon with First Descent&apos;s Caregiver group in August 2024. As a caregiver for a young adult with cancer, the river taught me lessons about fear, control, and surrender that have deeply meaningful. It also allowed me to foster connections with an incredible community of caregivers that continues to provide support for one another. </p><p>&#x1F449; <a href="https://support.firstdescents.org/squirrelly?ref=alex.brovk.in" rel="noreferrer">Please consider supporting future participants to the program donating to the First Descent donations page</a>. &#x1F448;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://alex.brovk.in/content/images/2024/09/20240822_111609.jpg" class="kg-image" alt="Cry Baby made crying cool again" loading="lazy" width="2000" height="2667" srcset="https://alex.brovk.in/content/images/size/w600/2024/09/20240822_111609.jpg 600w, https://alex.brovk.in/content/images/size/w1000/2024/09/20240822_111609.jpg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/09/20240822_111609.jpg 1600w, https://alex.brovk.in/content/images/size/w2400/2024/09/20240822_111609.jpg 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Rogue River, Oregon, photo by Jelly, First Descents</span></figcaption></figure>]]></content:encoded></item><item><title><![CDATA[📚 Book: Dispersals]]></title><description><![CDATA[<p>Dispersals by Jessica J. Lee</p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg" class="kg-image" alt loading="lazy" width="1024" height="768" srcset="https://alex.brovk.in/content/images/size/w600/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg 1000w, https://alex.brovk.in/content/images/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg 1024w" sizes="(min-width: 720px) 720px"></figure><p>This is a non-fiction book, but it <em>reads</em> like fiction. The writing is dense in its historical and biological precision, but remains light through the personal narrative that weaved the chapters together.</p><p>I loved the parallels the author draws between plant and human histories, for</p>]]></description><link>https://alex.brovk.in/reading/book-dispersals/</link><guid isPermaLink="false">66d3d44361e09d05829314ef</guid><category><![CDATA[Reading]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Sun, 01 Sep 2024 02:50:52 GMT</pubDate><content:encoded><![CDATA[<p>Dispersals by Jessica J. Lee</p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg" class="kg-image" alt loading="lazy" width="1024" height="768" srcset="https://alex.brovk.in/content/images/size/w600/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg 1000w, https://alex.brovk.in/content/images/2024/09/0D6E3D0C-0F1E-4946-A056-F13D74A47589_1_105_c-1.jpeg 1024w" sizes="(min-width: 720px) 720px"></figure><p>This is a non-fiction book, but it <em>reads</em> like fiction. The writing is dense in its historical and biological precision, but remains light through the personal narrative that weaved the chapters together.</p><p>I loved the parallels the author draws between plant and human histories, for these new connections brought me new perspectives, or mental models, to view my experiences through.</p><blockquote>But these questions are not new: that even nineteenth-century texts on plant introductions highlight the anthropogenic forces that shape such plants&apos; movements, I think, forces us to interrogate where and when, exactly, we might locate a version of nature to which we would like to return. At what point do we decide an intervention in the natural world is acceptable? 112-113</blockquote><p>In the very first chapters, Lee defines the ideas or borders and margins through patterns plant migration patterns, and highlights how these plant movements are intrinsically intertwined with anthropogenic movements. I found this link between the natural environment and our human experience very powerful, for it forces a shift from humans as being thrown onto a natural world to humans coevolving with it, and calls to reflect about not only about our affect on the world, but the affect of a future world on us, a world that has been affected by us.</p><p>Personally, I was taken with the chapters on tea, and pines; but the book is full of gems, each chapter bringing a perspective and lesson.</p><blockquote>So I may not think of soil when I think of seed banks&#x2014;but I do think of the past, and the future that the past makes possible. Perhaps a seed&apos;s time is not as linear as I imagine it to be. 184</blockquote><p>One one hand, these are histories told through plants, but it also narrative about humans conceptualizing what history is.</p><blockquote>I write that when we speak of conservation, it is essential to ask exactly which vision of a place we are conserving. Which means doing history. 217</blockquote><p>This also touches on the idea of beauty, and how it is influenced by the empire that defined its meaning. </p><blockquote>And I tell him of my love for heather. I have never told anyone about this. I tell him that I want this love to be neutral and easy. But it&apos;s bound up with my questions about beauty, how England takes up space in the cultural imagination even if you aren&apos;t from here. Underneath, I know the discomfort our conversation points towards: words like &quot;migrant,&quot; like &quot;colony.&quot; At the crest of the hills, the bus jolts to a stop and we disembark. 223</blockquote><p>The book left me so much to think about, but also left me very inspired in a way I can&apos;t quite capture. </p><blockquote>At the end of our visit, he tells me he&apos;ll stay for the day to write, feeling inspired again. And I feel it, too. Something between longing for a place and a longing to write: I feel it now so rarely. 224</blockquote>]]></content:encoded></item><item><title><![CDATA[SUPERPOWER CAPS LOCK KEY ON LINUX]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/06/keyboard-1.gif" class="kg-image" alt loading="lazy" width="2000" height="991" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/keyboard-1.gif 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/keyboard-1.gif 1000w, https://alex.brovk.in/content/images/size/w1600/2024/06/keyboard-1.gif 1600w, https://alex.brovk.in/content/images/size/w2400/2024/06/keyboard-1.gif 2400w" sizes="(min-width: 720px) 720px"></figure><blockquote>The caps lock key is probably the most useless button on your keyboard, and arguably the Internet would be a better place without it. </blockquote><p>I originally wrote an <a href="https://medium.com/@Brovalex/superpower-the-caps-lock-key-28be84869cb?ref=alex.brovk.in">article on Medium</a> to do this on Mac OS, but I have recently switched to Linux and really missed the functionality. </p><p>A</p>]]></description><link>https://alex.brovk.in/misc/superpower-caps-lock-key-on-linux/</link><guid isPermaLink="false">6674ea7161e09d05829310ee</guid><category><![CDATA[Misc]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Fri, 28 Jun 2024 13:00:18 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/06/keyboard.gif" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/06/keyboard-1.gif" class="kg-image" alt="SUPERPOWER CAPS LOCK KEY ON LINUX" loading="lazy" width="2000" height="991" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/keyboard-1.gif 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/keyboard-1.gif 1000w, https://alex.brovk.in/content/images/size/w1600/2024/06/keyboard-1.gif 1600w, https://alex.brovk.in/content/images/size/w2400/2024/06/keyboard-1.gif 2400w" sizes="(min-width: 720px) 720px"></figure><blockquote>The caps lock key is probably the most useless button on your keyboard, and arguably the Internet would be a better place without it. </blockquote><img src="https://alex.brovk.in/content/images/2024/06/keyboard.gif" alt="SUPERPOWER CAPS LOCK KEY ON LINUX"><p>I originally wrote an <a href="https://medium.com/@Brovalex/superpower-the-caps-lock-key-28be84869cb?ref=alex.brovk.in">article on Medium</a> to do this on Mac OS, but I have recently switched to Linux and really missed the functionality. </p><p>A great way to use the caps lock key is to turn it into what some call the &quot;hyper key&quot;  which is mapping the one caps lock key to a combination of <code>Ctrl+Alt+Super+Shift</code> (where Super is Meta/Cmd/Win)... not to be confused with the actual &quot;Hyper&quot; key if you&apos;re using a <a href="https://en.wikipedia.org/wiki/Space-cadet_keyboard?ref=alex.brovk.in#/media/File:Space-cadet.jpg">space-cadet keyboard</a>.</p><p>The great thing about this &quot;hyper&quot; key is it allows you to associate new key shortcuts that are unlikely to conflict with other apps. For example, I use HYPER+e to launch VSCode, HYPER+c for my browser, HYPER+t for Terminal, HYPER+arrow keys to move windows between monitors, and so on. </p><h3 id="the-linux-problem">The Linux problem</h3><p>Mac OS was nice and simple, but for Linux I could not find an easy solution. There are a few ways to do it with X11, but I didn&apos;t want to move away from Wayland, so I used <a href="https://github.com/kmonad/kmonad?ref=alex.brovk.in" rel="noreferrer">KMonad</a>, which seems like one of the few options. </p><p>The process of getting it setup isn&apos;t complicated, but not it&apos;s exactly quick, and you need to know your way around bash profiles or setting up services. These instructions will be based on Ubuntu 24.04 + Wayland GNOME, but should work across distros and desktops. </p><p>(1) First you need to install KMonad. The <a href="https://github.com/kmonad/kmonad/blob/master/doc/installation.md?ref=alex.brovk.in" rel="noreferrer">installation instructions</a> are pretty good, but might involve installing <em>stack</em> Haskell project manager (lol), and you might need to add a <code>$PATH</code>, and you need to set the permission correctly (<a href="https://github.com/kmonad/kmonad/blob/master/doc/faq.md?ref=alex.brovk.in" rel="noreferrer">see the FAQ for instructions on these</a>) &#x2013; don&apos;t skip this. </p><p>(2) Second, create your configuration file. There&apos;s an insanely long tutorial for it, but the TL:DR; is that you need to create an alias <code>(defalias sym C-A-M-sft)</code> and put <code>@sym</code> where the caps lock button is on your layer. You can grab <a href="https://github.com/brovalex/linux-tweaks/blob/main/config-all.kbd?ref=alex.brovk.in" rel="noreferrer">my full configuration file</a> on GitHub, but take note that I also swap my Super and Alt keys to match my Apple keyboard, and I also use a script to load all my keyboards (see below). </p><p>(3) If you have multiple keyboards you need to create config files for each. </p><pre><code>cp /etc/init.d/kmonad /etc/init.d/kmonad2
cp /etc/kmonad/config.kbd /etc/kmonad/config-epomaker.kbd</code></pre><p>The only change to make in the <code>.kbd</code> config is the path to the the device. </p><pre><code class="language-bash">#!/bin/bash
# /etc/kmonad/config.kbd
input (device-file &quot;/dev/input/by-id/...</code></pre><p>And adjust the service config for each keybaord:</p><pre><code>command=&quot;/usr/local/bin/kmonad&quot;
command_args=&quot;/etc/kmonad/config-epomaker.kbd&quot;
command_background=&quot;true&quot;
pidfile=&quot;/run/kmonad2.pid&quot;</code></pre><p>I used to have bash script that would dynamically load all keyboards, and while that sort of worked most of the time, it didn&apos;t play well with OpenRC, and since I&apos;m not switching the physical keyboard itself all that often, manually adding each is more convenient approach. </p><p>(4) Finally, you need a way load your configuration file. You could have run <code>kmonad</code> with your configuration file, but you&apos;d need to do that every time you turn on your computer. </p><pre><code># on gentoo openrc
rc-update add kmonad default
rc-update add kmonad2 default
# then start the services, or reboot</code></pre><p>I also had to add this to <code>/etc/udev/rules.d/99-kmonad2.rules</code> so that kmonad properly restarts after the computer goes to sleep. </p><pre><code>ACTION==&quot;add&quot;, SUBSYSTEM==&quot;usb&quot;, RUN+=&quot;/sbin/rc-service kmonad2 restart&quot;</code></pre><p>You can start KMonad automatically in a number of ways (e.g. adding the command in Settings &gt; Startup applications), but you also add the GNOME Extension <a href="https://extensions.gnome.org/extension/6069/kmonad-toggle/?ref=alex.brovk.in" rel="noreferrer">KMonad Toggle</a>. Note that I&apos;m specifying my custom script at the bottom, and I&apos;ve added an <code>&amp;</code> so that the cursor doesn&apos;t get stuck on &quot;in progress&quot;. </p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/06/image-5.png" class="kg-image" alt="SUPERPOWER CAPS LOCK KEY ON LINUX" loading="lazy" width="1614" height="872" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/image-5.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/image-5.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/06/image-5.png 1600w, https://alex.brovk.in/content/images/2024/06/image-5.png 1614w" sizes="(min-width: 720px) 720px"></figure><p>(5) Now for the fun part - you should be able to shortcuts using the caps lock key. When you press it, you should see it show as <code>Ctrl+Alt+Super+Shift</code> &#x1F389; !!</p>]]></content:encoded></item><item><title><![CDATA[Configurer un clavier Apple en canadien français sur Linux]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/06/image-4.png" class="kg-image" alt loading="lazy" width="1094" height="872" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/image-4.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/image-4.png 1000w, https://alex.brovk.in/content/images/2024/06/image-4.png 1094w" sizes="(min-width: 720px) 720px"></figure><p>Probl&#xE9;matique: si vous utilisez un clavier Apple (ex. Magic Keyboard) avec Linux (dans ce cas-ci Ubuntu 24.04 et GNOME Wayland), les touches ne correspondent pas &#xE0; leur emplacement que vous seriez habitu&#xE9; d&apos;utiliser sur Mac OS X. </p><p>Il y a un bonne explication sur</p>]]></description><link>https://alex.brovk.in/misc/clavier-francais-canadien-sur-linux/</link><guid isPermaLink="false">6674e30a61e09d05829310a7</guid><category><![CDATA[Misc]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Fri, 21 Jun 2024 02:47:09 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1605894705356-c573ef879bbe?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGFwcGxlJTIwa2V5Ym9hcmR8ZW58MHx8fHwxNzE4OTM3OTg5fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/06/image-4.png" class="kg-image" alt="Configurer un clavier Apple en canadien fran&#xE7;ais sur Linux" loading="lazy" width="1094" height="872" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/image-4.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/image-4.png 1000w, https://alex.brovk.in/content/images/2024/06/image-4.png 1094w" sizes="(min-width: 720px) 720px"></figure><img src="https://images.unsplash.com/photo-1605894705356-c573ef879bbe?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wxMTc3M3wwfDF8c2VhcmNofDJ8fGFwcGxlJTIwa2V5Ym9hcmR8ZW58MHx8fHwxNzE4OTM3OTg5fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Configurer un clavier Apple en canadien fran&#xE7;ais sur Linux"><p>Probl&#xE9;matique: si vous utilisez un clavier Apple (ex. Magic Keyboard) avec Linux (dans ce cas-ci Ubuntu 24.04 et GNOME Wayland), les touches ne correspondent pas &#xE0; leur emplacement que vous seriez habitu&#xE9; d&apos;utiliser sur Mac OS X. </p><p>Il y a un bonne explication sur <a href="https://ubuntu-mate.community/t/make-your-own-custom-keyboard-layout-for-linux/19733?ref=alex.brovk.in" rel="noreferrer">cet article ici</a>. En sommaire, il y a 5 fichiers &#xE0; modifier. </p><p>(1) <code>base.lst</code> et <code>evdev.lst</code> dans <code>/usr/share/X11/xkb/rules</code> pour ajouter parmi les autres dispositions (ligne 489 environ, au dessus de fr-legacy): </p><pre><code>  fr-apple-ab     ca: French (Canada, Apple)</code></pre><p>et (2) <code>evdev.xml</code> et <code>base.xml</code> il faut ajouter parmi les autres (ligne 3605 environ, au dessus de fr-legacy):</p><pre><code>&lt;variant&gt;
    &lt;configItem&gt;
        &lt;name&gt;fr-apple-ab&lt;/name&gt;
        &lt;!-- Keyboard indicator for French layouts --&gt;
         &lt;shortDescription&gt;fr&lt;/shortDescription&gt;
         &lt;description&gt;French (Canada, Apple)&lt;/description&gt;
    &lt;/configItem&gt;
&lt;/variant&gt;</code></pre><p>Finalement on peut configurer nouvelle disposition qu&apos;on ajoute dans le fichier <code>ca</code> du dossier <code>/usr/share/X11/xkb/symbols</code> (ligne 124 environ, au dessus de fr-legacy):  </p><pre><code>partial
xkb_symbols &quot;fr-apple-ab&quot; { name[Group1] = &quot;French (Canada, Apple)&quot;;
  key &lt;TLDE&gt; {[ ugrave, bar, backslash ]};
  key &lt;AE01&gt; {[ 1, exclam, plusminus ]};
  key &lt;AE02&gt; {[ 2, quotedbl, at ]};
  key &lt;AE03&gt; {[ 3, slash, sterling ]};
  key &lt;AE04&gt; {[ 4, dollar, cent ]};
  key &lt;AE05&gt; {[ 5, percent, currency ]};
  key &lt;AE06&gt; {[ 6, question, notsign ]};
  key &lt;AE07&gt; {[ 7, ampersand, brokenbar ]};
  key &lt;AE08&gt; {[ 8, asterisk, twosuperior ]};
  key &lt;AE09&gt; {[ 9, parenleft, threesuperior ]};
  key &lt;AE10&gt; {[ 0, parenright, onequarter ]};
  key &lt;AE11&gt; {[ minus, underscore, onehalf ]};
  key &lt;AE12&gt; {[ equal, plus, threequarters ]};
  key &lt;AD01&gt; {[ q, Q ]};
  key &lt;AD02&gt; {[ w, W ]};
  key &lt;AD03&gt; {[ e, E, EuroSign ]};
  key &lt;AD04&gt; {[ r, R ]};
  key &lt;AD05&gt; {[ t, T ]};
  key &lt;AD06&gt; {[ y, Y, yen ]};
  key &lt;AD07&gt; {[ u, U ]};
  key &lt;AD08&gt; {[ i, I ]};
  key &lt;AD09&gt; {[ o, O, section ]};
  key &lt;AD10&gt; {[ p, P, paragraph ]};
  key &lt;AD11&gt; {[dead_circumflex, dead_circumflex, bracketleft ]};
  key &lt;AD12&gt; {[ ccedilla, Ccedilla, bracketright ]};
  key &lt;AC01&gt; {[ a, A ]};
  key &lt;AC02&gt; {[ s, S ]};
  key &lt;AC03&gt; {[ d, D ]};
  key &lt;AC04&gt; {[ f, F ]};
  key &lt;AC05&gt; {[ g, G ]};
  key &lt;AC06&gt; {[ h, H ]};
  key &lt;AC07&gt; {[ j, J ]};
  key &lt;AC08&gt; {[ k, K ]};
  key &lt;AC09&gt; {[ l, L ]};
  key &lt;AC10&gt; {[ semicolon, colon, asciitilde ]};
  key &lt;AC11&gt; {[ egrave, dead_grave, braceleft ]};
  key &lt;BKSL&gt; {[ agrave, greater, braceright ]};
  key &lt;LSGT&gt; {[guillemotleft, guillemotright, degree]};
  key &lt;AB01&gt; {[ z, Z ]};
  key &lt;AB02&gt; {[ x, X ]};
  key &lt;AB03&gt; {[ c, C ]};
  key &lt;AB04&gt; {[ v, V ]};
  key &lt;AB05&gt; {[ b, B ]};
  key &lt;AB06&gt; {[ n, N ]};
  key &lt;AB07&gt; {[ m, M, mu ]};
  key &lt;AB08&gt; {[ comma, apostrophe, macron ]};
  key &lt;AB09&gt; {[ period, period, hyphen ]};
  key &lt;AB10&gt; {[ eacute, Eacute, dead_acute ]};
  key &lt;SPCE&gt; {[ space, space, nobreakspace ]};
 include &quot;level3(ralt_switch)&quot;};</code></pre><p>&#xC0; noter: j&apos;utilise un clavier &quot;US&quot; anglais avec une disposition de touches en fran&#xE7;ais &quot;Canadian - CSA&quot; sur mon Mac. Si vous utiliser un clavier fran&#xE7;ais avec la grosse touche Entrez, il faut valider les codes des touches (une recherche sur Google <code>keyboard labels xkb</code> donnera des images de r&#xE9;f&#xE9;rence).</p>]]></content:encoded></item><item><title><![CDATA[Chat with my house RAG]]></title><description><![CDATA[<p><strong>Objective: </strong>learn and try basic text chunking, embeddings, and search from vector store. I want results that are accurate (no hallucination) and that show the source document. </p><p>I wanted to chat with my house, and after a few months of brewing the idea at the back of my mind, I&</p>]]></description><link>https://alex.brovk.in/chat-with-my-house-rag-ai/</link><guid isPermaLink="false">668ddd0c61e09d05829312a3</guid><category><![CDATA[Dev]]></category><category><![CDATA[Data]]></category><category><![CDATA[Experiment]]></category><category><![CDATA[Housing]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Mon, 17 Jun 2024 01:07:00 GMT</pubDate><content:encoded><![CDATA[<p><strong>Objective: </strong>learn and try basic text chunking, embeddings, and search from vector store. I want results that are accurate (no hallucination) and that show the source document. </p><p>I wanted to chat with my house, and after a few months of brewing the idea at the back of my mind, I&apos;ve cooked up a prototype of an AI bot that can answer questions based on instruction manuals for our appliances. </p><p>I ask it how and how often to care for the little humidifier in the bed room. The hard truth is that most weeks taking the garbage out can feel like a chore, I ain&apos;t washing the humidifier every week even if the manuals tells me to. Garbage in, garbage out. </p><p>The code and setup is quite simple, my <a href="https://github.com/brovalex/public-experiments/blob/main/rag-gpt-pdf/rag-gpt-pdf.ipynb?ref=alex.brovk.in" rel="noreferrer">notebook is on GitHub</a>: </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/brovalex/public-experiments/blob/main/rag-gpt-pdf/rag-gpt-pdf.ipynb?ref=alex.brovk.in"><div class="kg-bookmark-content"><div class="kg-bookmark-title">public-experiments/rag-gpt-pdf/rag-gpt-pdf.ipynb at main &#xB7; brovalex/public-experiments</div><div class="kg-bookmark-description">Contribute to brovalex/public-experiments development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">brovalex</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/c78b27517db41c6a1adaee9f138f0956139d36fd5bdc2cc573a6b0376b770519/brovalex/public-experiments" alt></div></a></figure><p><strong>Results: </strong>I&apos;m generally happy with the results, I am impressed at how fast and easy this is to set up. </p><p><strong>Next steps: </strong>I will try this with a much larger set of documents, try alternative models, and build a UI for it. </p>]]></content:encoded></item><item><title><![CDATA[📚⭐️ Book: The Human Condition]]></title><description><![CDATA[<p>The Human Condition - Hannah Arendt</p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg" class="kg-image" alt loading="lazy" width="1024" height="768" srcset="https://alex.brovk.in/content/images/size/w600/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg 1000w, https://alex.brovk.in/content/images/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg 1024w" sizes="(min-width: 720px) 720px"></figure><p>I loved this book. I am sharing some notes below, knowing full well that a summary just wouldn&#x2019;t do justice it just. It&#x2019;s a book you would read for the process and experience, not key points that can be summarized</p>]]></description><link>https://alex.brovk.in/reading/book-human-condition-arendt/</link><guid isPermaLink="false">668f318361e09d05829313a9</guid><category><![CDATA[Reading]]></category><category><![CDATA[People]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Tue, 04 Jun 2024 01:13:00 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c-1.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://alex.brovk.in/content/images/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c-1.jpeg" alt="&#x1F4DA;&#x2B50;&#xFE0F; Book: The Human Condition"><p>The Human Condition - Hannah Arendt</p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg" class="kg-image" alt="&#x1F4DA;&#x2B50;&#xFE0F; Book: The Human Condition" loading="lazy" width="1024" height="768" srcset="https://alex.brovk.in/content/images/size/w600/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg 1000w, https://alex.brovk.in/content/images/2024/07/7AFE82D5-F78C-47EA-84A3-A65A06818563_1_105_c.jpeg 1024w" sizes="(min-width: 720px) 720px"></figure><p>I loved this book. I am sharing some notes below, knowing full well that a summary just wouldn&#x2019;t do justice it just. It&#x2019;s a book you would read for the process and experience, not key points that can be summarized in a post.</p><p>The books is part deep analysis of philosophical thinking through times and places, and part dissection of the concepts of labour, work, and thought and action.</p><p>I have the past year thinking about my identity outside of &#x201C;work&#x201D;, and I appreciated how the book provided excellent ways to frame my thinking. In particular, Arendt contrasts action and speech to labour and work, and how they create our conceptualization of the self, and its relationship with the world.</p><blockquote>To live together in the world means essentially that a world of things is between those who have it in common, as a table is located between those who sit around it; the world, like every in-between, relates and separates men at the same time. 52</blockquote><blockquote>With word and deed we insert ourselves into the human world, and this insertion [&#x2026;] is not forced upon us by necessity, like labor, and it is not prompted by utility, like work. 176-177</blockquote><blockquote>The disclosure of the &quot;who&quot; through speech, and the setting of a new beginning through action, always fall into an already existing web [of human relationships] where their immediate consequences can be felt. Together they start a new process which eventually emerges as the unique life story of the newcomer, affecting uniquely the life stories of all those with whom he comes into contact. 184</blockquote><p>The last section of the book dives into the history and role of science, what it shares with philosophy, and how it has parted ways, and the how that affects society and informs our understanding of the world. It was first published in 1958, but it is so incredibly relevant to science and work today.</p>]]></content:encoded></item><item><title><![CDATA[Hard Drive Speakers]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/dAn5ynO5U_k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Old hard drive turned into speakers"></iframe></figure><p>I wired an old hard drive to a LM386 audio amplifier to turn it into a speaker. I used a 9v power source and an audio jack I salvaged from an old desktop. I also added a capacitor to smoothen the sound a little bit. </p><p>Reference videos (with good explanations)</p>]]></description><link>https://alex.brovk.in/misc/hard-drive-speakers/</link><guid isPermaLink="false">665fcc9061e09d0582930eb5</guid><category><![CDATA[Misc]]></category><category><![CDATA[Hardware]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Sat, 01 Jun 2024 02:31:00 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/06/Screenshot-2024-06-04-at-10.32.45-PM.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/dAn5ynO5U_k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="Old hard drive turned into speakers"></iframe></figure><img src="https://alex.brovk.in/content/images/2024/06/Screenshot-2024-06-04-at-10.32.45-PM.png" alt="Hard Drive Speakers"><p>I wired an old hard drive to a LM386 audio amplifier to turn it into a speaker. I used a 9v power source and an audio jack I salvaged from an old desktop. I also added a capacitor to smoothen the sound a little bit. </p><p>Reference videos (with good explanations): <a href="https://www.youtube.com/watch?v=rVPjQou42i8&amp;ref=alex.brovk.in" rel="noreferrer">for the speaker</a> and for the <a href="https://www.youtube.com/watch?v=4ObzEft2R_g&amp;ref=alex.brovk.in" rel="noreferrer">amplifier</a>, though I used an assembled LM386 board with filter capacitors and potentiometer. </p><p>The original idea / inspiration came from <a href="https://www.sexartandtravel.com/post/97307329372/big-ideas-dont-get-any-radiohead-nude-video?ref=alex.brovk.in#notes" rel="noreferrer">James Houston&apos;s remix</a> of Radiohead&apos;s Nude. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/06/037302DB-964B-4D96-850C-1339F4238F89_1_105_c.jpeg" width="1024" height="768" loading="lazy" alt="Hard Drive Speakers" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/037302DB-964B-4D96-850C-1339F4238F89_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/037302DB-964B-4D96-850C-1339F4238F89_1_105_c.jpeg 1000w, https://alex.brovk.in/content/images/2024/06/037302DB-964B-4D96-850C-1339F4238F89_1_105_c.jpeg 1024w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/06/IMG_4292.jpeg" width="2000" height="1500" loading="lazy" alt="Hard Drive Speakers" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/IMG_4292.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/IMG_4292.jpeg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/06/IMG_4292.jpeg 1600w, https://alex.brovk.in/content/images/size/w2400/2024/06/IMG_4292.jpeg 2400w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/06/IMG_4290.jpeg" width="2000" height="1500" loading="lazy" alt="Hard Drive Speakers" srcset="https://alex.brovk.in/content/images/size/w600/2024/06/IMG_4290.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/06/IMG_4290.jpeg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/06/IMG_4290.jpeg 1600w, https://alex.brovk.in/content/images/size/w2400/2024/06/IMG_4290.jpeg 2400w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption><p dir="ltr"><span style="white-space: pre-wrap;">Hard drive, second hand hard at work, basic circuit (missing extra capacitor)</span></p></figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Backup sump pump]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/04/IMG_4171.jpeg" class="kg-image" alt="upload in progress, 0" loading="lazy"></figure><p>Summary: </p><p>I installed a Red Lion backup 12v sump pump system, but I don&apos;t feel like the kit was well worth the money. I tried rebuilding my own kit - it&apos;s a a work in progress, I will update this page with finding later.</p><p>Context: </p><p>In</p>]]></description><link>https://alex.brovk.in/misc/backup-sump-pump/</link><guid isPermaLink="false">663175bd61e09d0582930b7e</guid><category><![CDATA[Misc]]></category><category><![CDATA[Housing]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Wed, 01 May 2024 01:32:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/04/IMG_4171.jpeg" class="kg-image" alt="upload in progress, 0" loading="lazy"></figure><p>Summary: </p><p>I installed a Red Lion backup 12v sump pump system, but I don&apos;t feel like the kit was well worth the money. I tried rebuilding my own kit - it&apos;s a a work in progress, I will update this page with finding later.</p><p>Context: </p><p>In the last few years, weather patterns and power grid disruptions have been increasingly erratic, and I didn&apos;t want to lose my sump pump when we lose power. Having no prior knowledge on sump pumps and available options, I&apos;ve documented here my experience with choosing and installing a backup sump pump. </p><p>Objectives:</p><ul><li>Approximately 24 hours of safety net should there be a power failure</li><li>Secondary: A backup for mechanical failures of the primary pump are a nice to have, but not an explicit objective for me. </li></ul><p>Background: </p><p>Our basement has a sump pit that&apos;s approximately 2 feet wide, long, and deep, located in the basement crawl space. We already have a primary 115v 1/3HP sump pump, it runs occasionally after rain and has no trouble clearing the water out. </p><p>Research: </p><p>Having experience with electronics but little to no experience with higher wattage electricity, and no preconceived solution, I started researching possible approaches.</p><ul><li>Water-powered pumps: I ruled out water-powered (no electricity) solutions because we have hard water, which calcifies very quickly. </li><li>Power for the whole house: I looked at installing a back-up power bank for the whole house. It was very expensive (10-50k), though it could also power my fridge and freeze, and could eventually be used with solar panels. </li><li>115v power banks: I looked at power banks with inverters, but I did not see a significant use case for it. </li><li>12V backup battery: a 12v (&quot;car&quot; battery) connected to a DC 12V sump pump. This is the approach I went with. </li></ul><p>Considerations:</p><p>At the time I was familiar only with electronics, and I knew little about larger wattage systems, and sump pumps as a whole. I looked around for different kits, and went with a more reputable brand (Red Lion). At the time it was about $370 at Princess Auto, not including the battery. </p><p>For the battery, the pump kit recommends a Group 27 90-100 Ah deep-cycle battery. The instruction manual says lead acid or AGM. The best deal I found was at Costco for a 100 Ah RV lead-acid battery for about $180 with a great return policy. Reddit users strongly advise against using lead-acid batteries in enclosed spaces (they release hydrogen, which is explosive), but many other sources say that it&apos;s highly unlikely. I wasn&apos;t comfortable with highly-unlikely approach, and found a 110 Ah AGM (sealed) group 31 battery at a local battery dealer (Dixon Batteries) for about twice the price. </p><p>Installation: </p><p>The kit was fairly easy to install. Instructions were clear, and the most difficult part is building the Wye pipe assembly, which does not come included in the can (another $50 for the piping and check-valve). The manual instructs plugging the primary and secondary pumps on separate circuits without extensions cords, which can be a challenging ask in certain setups. </p><p>Outcomes: </p><p>The setup works great, the 2500 GPH sump pump does a great job clearing the water when the primary pump is unplugged. I tested it with a much smaller 12v battery I had access to, and then plugged in the group 31 battery that took a few days on the trickle charger to be fully charged. </p><p>That said, the key elements of the kit are just the sump pump and switch. The sump pump seems like a generic submerged 12v sump pump. The switch is a diaphragm switch, which was problematic for my installation in two ways. The instructions say that it need 6 to 8 inches of water to be triggered, but it didn&apos;t go off until it&apos;s submerged a full 8 to 10 inches. </p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/05/image.png" class="kg-image" alt loading="lazy" width="1398" height="716" srcset="https://alex.brovk.in/content/images/size/w600/2024/05/image.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/05/image.png 1000w, https://alex.brovk.in/content/images/2024/05/image.png 1398w" sizes="(min-width: 720px) 720px"></figure><p>Given the depth of my pit, it meant that either I have to lower the trigger point for my primary point to just a very low level, or have the diaphragm switch be submerged in water. Given that the water around here is fairly hard, and the diaphragm depends on a very small hole for the water to seep in, I worry that it can easily get clogged, which means that the backup pump may not trigger at all when the primary pump fails. </p><p>Learnings: </p><p>The key pieces I would focus on for a backup sump pump system are the battery ($150-400, not included in kit), charger ($25-60), the pump itself ($50-90), and the switch ($0-150). Whether you buy a kit or not, you will need some plumbing connectors (e.g. Wye and back flow valves). The other elements in the kit can be purchased separately, but are not needed: case for battery ($35), buzzer alarm and LED lights. </p>]]></content:encoded></item><item><title><![CDATA[Arduino automatic dispenser]]></title><description><![CDATA[Proof of concept, 3D printed auger mechanism  using microcontroller]]></description><link>https://alex.brovk.in/work/programmatic-arduino-auger/</link><guid isPermaLink="false">65e2827eef31d8e46b386bdb</guid><category><![CDATA[Work]]></category><category><![CDATA[Experiment]]></category><category><![CDATA[Technology]]></category><category><![CDATA[3D]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Sun, 31 Mar 2024 02:35:35 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.09.13-PM-1.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.09.13-PM.png" class="kg-image" alt="Arduino automatic dispenser" loading="lazy" width="864" height="626" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-8.09.13-PM.png 600w, https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.09.13-PM.png 864w" sizes="(min-width: 720px) 720px"></figure><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.09.13-PM-1.png" alt="Arduino automatic dispenser"><p><strong>Context: </strong>I wanted to stretch my skills outside of web development, and work on a mechatronics project. I wanted a project that is challenging, but one I could have a first prototype for within a month, and that is anchored it into somewhat real problem. Watching a friend roast and pack coffee, I noticed a lot of time goes into measuring out 340g bags of coffee. The setup is slow and not ergonomic (an almost perfect case study for my industrial engineering classes back in the day!) so I thought it would be a good anchor for the project. The primary objective, however, is learning, and I don&apos;t intend to push the polishing past a working proof of concept. </p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/gJl6Js3_f6A?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen title="3D-printed coffee dispenser auger"></iframe></figure><p>Timeline: approximately 70 hours over two months of active work, though a lot of my modelling and thinking is done in the shower and in my sleep, which is not accounted for here. </p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.12.02-PM.png" class="kg-image" alt="Arduino automatic dispenser" loading="lazy" width="2000" height="1015" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-8.12.02-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/Screenshot-2024-03-30-at-8.12.02-PM.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/Screenshot-2024-03-30-at-8.12.02-PM.png 1600w, https://alex.brovk.in/content/images/size/w2400/2024/03/Screenshot-2024-03-30-at-8.12.02-PM.png 2400w" sizes="(min-width: 720px) 720px"></figure><p><strong>Concept: </strong>The idea is to automate the dispensing of coffee to save on time and wrist strain. The initial concept is a feedback loop between an Arduino-powered scale and the motor powering the auger. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.05.57-PM.png" width="1646" height="1164" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-8.05.57-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/Screenshot-2024-03-30-at-8.05.57-PM.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/Screenshot-2024-03-30-at-8.05.57-PM.png 1600w, https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.05.57-PM.png 1646w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.05.46-PM.png" width="1638" height="1152" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-8.05.46-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/Screenshot-2024-03-30-at-8.05.46-PM.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/Screenshot-2024-03-30-at-8.05.46-PM.png 1600w, https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.05.46-PM.png 1638w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption><p><span style="white-space: pre-wrap;">Early sketches of the overall idea</span></p></figcaption></figure><p><strong>Process: </strong>My prior experience in mechatronics was very limited, so the biggest challenge was to orient myself within what is possible, more so than actually building the thing. I summarized the key parts of the process below, though the process was not linear, many things failed and I went back and forth between mechanical design and circuitry. </p><ul><li>Ideation: I started by reading tutorials around building the two subsystems I will need, the scale and the motor. The two are fairly well established in the Arduino world, so I knew I would have a load cell and a driver. </li><li>Design: while I waited on the components to arrive from Ali Express, I iterated on mechanical designs for each individual subsystem, namely the auger, scale, outer shell, hopper, and housing for the electronic component. </li><li>Simulation: I used Fusion 360 to build the full mechanical assembly and simulate the rotation of the auger, and I used an online Arduino simulator (Wokwi) to validate a very basic circuit. </li><li>Prototype: I built and tested the individual systems one at a time as the components arrived, I started with a scale, then a basic motor circuit, then assembled the two together and so on. </li><li>Testing: with the subsystems assembled and connected I was able to do a first full test of the complete system in the real world. The initial design needed to be revisited, of course, and more prototyping followed. </li></ul><hr><h2 id="technical-details">Technical details</h2><h3 id="overall-concept">Overall concept</h3><p>In the initial steps, I knew I would need a scale and a dispenser. I went through several ideas on paper sketches to identify so initial parameters to guide me. </p><ul><li>I knew that the auger would need to reliably and precisely dispense 340g to 1kg at a time, so the feasibility auger design would be pivotal for the rest of the project. I narrowed down to a horizontal auger (see auger details below). </li><li>I knew that batches of coffee would come in about 4-5 grams, so I would need either a hefty stand or a wall attachment (see below). </li><li>I am limited by the bed size of my Prusa Mini, and I wanted to keep the amount of filament use reasonable (see below). </li></ul><p>I researched existing commercial products and DIY projects. Commercial products were mostly complex and industrial, and DIY projects were mostly low speed cat food feeders. The closest product I found was the Acaia bean doser, which is meant to dispense much smaller doses, but it did heavily influence the initial design. </p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/34DD92EB-74DE-484A-ACBD-603A37B95D87_1_102.jpeg" width="1536" height="2048" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/34DD92EB-74DE-484A-ACBD-603A37B95D87_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/34DD92EB-74DE-484A-ACBD-603A37B95D87_1_102.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/34DD92EB-74DE-484A-ACBD-603A37B95D87_1_102.jpeg 1536w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/B7836888-76BB-411D-BE8E-2505A7009C0D_1_102.jpeg" width="1536" height="2048" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/B7836888-76BB-411D-BE8E-2505A7009C0D_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/B7836888-76BB-411D-BE8E-2505A7009C0D_1_102.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/B7836888-76BB-411D-BE8E-2505A7009C0D_1_102.jpeg 1536w" sizes="(min-width: 720px) 720px"></div></div></div></figure><h3 id="auger">Auger</h3><p>The auger was my starting point because I knew that the prototype hinged on being able to dispense 340g in a reasonable amount of time, i.e. considerably faster than doing it manually. I roughly estimated 30 seconds for dispensing one bag, and calculated the diameter and pitch of the auger thread. These measurements were very loose, I wanted to be approximately right, but thorough product and user research is day job material, and not a learning objective for me in this project. <br><br>I looked at auger designs in pharmaceutics and farming, and opted for a horizontal auger design, because it seems best suited for whole coffee beans (they flow better than powder and dirt, but won&apos;t drip like a liquid).</p><p>The auger design itself was fairly straightforward. Fusion 360 made it really easy to create the auger and tweak the size and pitch. I had recently worked on a <a href="https://www.youtube.com/watch?v=U2YYjcZJ2oQ&amp;ref=alex.brovk.in" rel="noreferrer">modelling a custom thread</a>, which was effectively the same as an auger.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.14.41-PM.png" class="kg-image" alt="Arduino automatic dispenser" loading="lazy" width="2000" height="993" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-8.14.41-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/Screenshot-2024-03-30-at-8.14.41-PM.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/Screenshot-2024-03-30-at-8.14.41-PM.png 1600w, https://alex.brovk.in/content/images/size/w2400/2024/03/Screenshot-2024-03-30-at-8.14.41-PM.png 2400w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Early auger model in Fusion 360</span></figcaption></figure><p>The 3D print of the auger was challenging. I was restricted to the bed size, and I didn&apos;t want to print the auger in multiple pieces. The pitch of auger is to aggressive to print vertically, and would require a ton of supports. I opted for printing it in two horizontal halves, following a great tip from Dave to also leave room for a steel rod, which I&apos;m able to do with this approach. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/2BBBD57F-8303-402D-81A3-9861ECFF20D6_1_102.jpeg" width="1536" height="2048" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/2BBBD57F-8303-402D-81A3-9861ECFF20D6_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/2BBBD57F-8303-402D-81A3-9861ECFF20D6_1_102.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/2BBBD57F-8303-402D-81A3-9861ECFF20D6_1_102.jpeg 1536w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/00BC1B1D-7853-4D2B-B8A7-95EA4ACC052F_1_102.jpeg" width="2000" height="1500" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/00BC1B1D-7853-4D2B-B8A7-95EA4ACC052F_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/00BC1B1D-7853-4D2B-B8A7-95EA4ACC052F_1_102.jpeg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/00BC1B1D-7853-4D2B-B8A7-95EA4ACC052F_1_102.jpeg 1600w, https://alex.brovk.in/content/images/2024/03/00BC1B1D-7853-4D2B-B8A7-95EA4ACC052F_1_102.jpeg 2048w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/7077D200-2159-439C-AB68-D746887BA477_1_102.jpeg" width="1536" height="2048" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/7077D200-2159-439C-AB68-D746887BA477_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/7077D200-2159-439C-AB68-D746887BA477_1_102.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/7077D200-2159-439C-AB68-D746887BA477_1_102.jpeg 1536w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption><p><span style="white-space: pre-wrap;">Photos of printing the auger</span></p></figcaption></figure><h3 id="shell-assembly">Shell assembly</h3><p>The shell assembly was dictated by the size of the auger, but also by the constraints of the bed size of 3D printer. It took some time to come up with a good way to assemble it. I wanted to it work, but also to look good. There were many iterations, but they mostly happened while I sat on the couch staring at the wall, or during my very long neurodivergent showers. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/4A544E34-07D9-42AE-945B-5AA28457DBCA_1_102.jpeg" width="2000" height="1500" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/4A544E34-07D9-42AE-945B-5AA28457DBCA_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/4A544E34-07D9-42AE-945B-5AA28457DBCA_1_102.jpeg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/4A544E34-07D9-42AE-945B-5AA28457DBCA_1_102.jpeg 1600w, https://alex.brovk.in/content/images/2024/03/4A544E34-07D9-42AE-945B-5AA28457DBCA_1_102.jpeg 2048w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/2DC82BD3-2760-476F-9B0D-7D6091A62149_1_102.jpeg" width="1536" height="2048" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/2DC82BD3-2760-476F-9B0D-7D6091A62149_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/2DC82BD3-2760-476F-9B0D-7D6091A62149_1_102.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/2DC82BD3-2760-476F-9B0D-7D6091A62149_1_102.jpeg 1536w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/7D924DE4-067C-41C7-902A-0183CDA15398_1_105_c.jpeg" width="1200" height="654" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/7D924DE4-067C-41C7-902A-0183CDA15398_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/7D924DE4-067C-41C7-902A-0183CDA15398_1_105_c.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/7D924DE4-067C-41C7-902A-0183CDA15398_1_105_c.jpeg 1200w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption><p><span style="white-space: pre-wrap;">Left: where the printer froze at the power outage. Middle: inside the wall-side half of the shell where the motor is mounted. Right: 2 of 3 pieces assembled (missing the butt</span></p></figcaption></figure><p>There was a storm and a power outage partway through the 16-hour print of on of the larger pieces of the shell. I was able to adjust the design to salvage it, but it also made me realize that I could simply the design into a two-piece assembly, instead of the original &quot;3-piece inner/outer sleeve&quot; concept. </p><figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.55.20-PM.png" class="kg-image" alt="Arduino automatic dispenser" loading="lazy" width="2000" height="1087" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-8.55.20-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/Screenshot-2024-03-30-at-8.55.20-PM.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/Screenshot-2024-03-30-at-8.55.20-PM.png 1600w, https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.55.20-PM.png 2330w" sizes="(min-width: 720px) 720px"></figure><p>The restrictions over the print size turned out to be very useful constraints, because having smaller pieces to assemble made it very easy to add the motor and wiring. I also avoided permanently gluing pieces as much as possible, which was useful for diagnosing issues, and incrementally iterating on the design of the shell without reprinting a large piece. </p><h3 id="motor-assembly">Motor assembly</h3><p>I didn&apos;t know what motor I would need, in fact I didn&apos;t know much about motors at all. With lots of reading and the help of some friends, I narrowed down on a 1.2A NEMA 17 stepper motor. While I waited for it to arrive in the mail, I started designing the assembly. </p><p>The biggest challenge was the assembly. In order to secure the motor inside the shell, I made a coupling plate that I could attach the motor to, and slide the whole thing into the shell. The motor needed to be coupled with the auger shaft, which was challenging because the auger needed to have a close fit with shell leaving no room to tighten bolts. I added a small hole at the bottom part of the shell which gave access for an Allen key to reach the coupling joint bolts. I only had a flange coupler, so I made a makeshift setup while I wait for the proper bellow sleeve coupling. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/E3FE0515-E8D9-460C-B7DF-161220F388B8_1_102-1.jpeg" width="1536" height="2048" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/E3FE0515-E8D9-460C-B7DF-161220F388B8_1_102-1.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/E3FE0515-E8D9-460C-B7DF-161220F388B8_1_102-1.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/E3FE0515-E8D9-460C-B7DF-161220F388B8_1_102-1.jpeg 1536w" sizes="(min-width: 1200px) 1200px"></div></div></div><figcaption><p><span style="white-space: pre-wrap;">Exploded assembly view, and coupling access whole</span></p></figcaption></figure><p>Another challenge was wiring. At first I thought of housing most of the component in the shell, but I landed on housing only the motor in the shell and used the wall attachment piece as a way to pass through the motor cable. </p><h3 id="hopper-dispenser-and-wall-attachment">Hopper dispenser and wall attachment</h3><p>I wanted to be able to load the full 4-5 kg roast for dispensing at once, which required both a large enough hopper, and a strong enough attachment to hold that weight. The solution I came up with was attaching a hopper to the wall, so that the shell is not bearing the weight. Printing a hoper that size would have been very time consuming and would require a lot of support material. I opted to use a 18L water bottle instead; I later found out that the 15L ones are cheaper because they don&apos;t have a recycling deposit; and I was able to score one out of the neighbour&apos;s recycling bin. </p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/5D70E4E8-0542-4D81-B49D-6ACC0E1DC4AD_1_105_c.jpeg" width="768" height="1024" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/5D70E4E8-0542-4D81-B49D-6ACC0E1DC4AD_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/2024/03/5D70E4E8-0542-4D81-B49D-6ACC0E1DC4AD_1_105_c.jpeg 768w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.59.14-PM.png" width="1578" height="1268" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-8.59.14-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/Screenshot-2024-03-30-at-8.59.14-PM.png 1000w, https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-8.59.14-PM.png 1578w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption><p><span style="white-space: pre-wrap;">The 15 litre bottle is small enough to be upright, my original design had a larger 18L bottle that would need to be at angle to fit.</span></p></figcaption></figure><h3 id="scale">Scale</h3><p>The scale was the first electronic component I built because thought the motor should work fine. What I like about this design is that I was able to use the load cell to hold the two pieces together and to hide the bolts underneath. </p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/BF433E88-41B5-4BE1-ABD4-809F60A2FE0A_1_102.jpeg" width="2000" height="1500" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/BF433E88-41B5-4BE1-ABD4-809F60A2FE0A_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/BF433E88-41B5-4BE1-ABD4-809F60A2FE0A_1_102.jpeg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/BF433E88-41B5-4BE1-ABD4-809F60A2FE0A_1_102.jpeg 1600w, https://alex.brovk.in/content/images/2024/03/BF433E88-41B5-4BE1-ABD4-809F60A2FE0A_1_102.jpeg 2048w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/7EA2E8AF-25C8-40AA-B5BF-F8AD1F2B70A8_1_102.jpeg" width="2000" height="1500" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/7EA2E8AF-25C8-40AA-B5BF-F8AD1F2B70A8_1_102.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/7EA2E8AF-25C8-40AA-B5BF-F8AD1F2B70A8_1_102.jpeg 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/7EA2E8AF-25C8-40AA-B5BF-F8AD1F2B70A8_1_102.jpeg 1600w, https://alex.brovk.in/content/images/2024/03/7EA2E8AF-25C8-40AA-B5BF-F8AD1F2B70A8_1_102.jpeg 2048w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://alex.brovk.in/content/images/2024/03/F174BF05-CCB6-4E30-A951-5BF7376D594C_1_105_c.jpeg" width="1024" height="768" loading="lazy" alt="Arduino automatic dispenser" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/F174BF05-CCB6-4E30-A951-5BF7376D594C_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/F174BF05-CCB6-4E30-A951-5BF7376D594C_1_105_c.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/F174BF05-CCB6-4E30-A951-5BF7376D594C_1_105_c.jpeg 1024w" sizes="(min-width: 720px) 720px"></div></div></div></figure><h3 id="electronics-housing">Electronics housing</h3><p>I&apos;ll need to figure out where I shove the rat&apos;s nest of cables. I haven&apos;t decided yet what the interface will look like, and I&apos;m not sure I&apos;ll want to do it at all (I&apos;m able to test as is, and I&apos;ve done enough interface design in my day job). </p><h3 id="code">Code</h3><p>Below is the code for the combined scale + stepper motor with DRV8825 driver + activation button. I haven&apos;t pursued this code any further in terms of optimization or other features, because the scale is too imprecise to be used in the real world (see more notes on that in the testing section). </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/brovalex/public-experiments/blob/main/arduino-automatic-dispenser.ino?ref=alex.brovk.in"><div class="kg-bookmark-content"><div class="kg-bookmark-title">public-experiments/arduino-automatic-dispenser.ino at main &#xB7; brovalex/public-experiments</div><div class="kg-bookmark-description">Contribute to brovalex/public-experiments development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" alt="Arduino automatic dispenser"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">brovalex</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/247a08bf65c22d0a56ae0514c8cbd37e77d6597da3883a2873938c941bcc8da2/brovalex/public-experiments" alt="Arduino automatic dispenser"></div></a></figure><hr><h2 id="testing">Testing</h2><p>I had tested the sub-assembly and circuits individually. There were tons of issues and challenges, which I won&apos;t dive into here. Once all the sub-systems were functional, putting it altogether wasn&apos;t all that difficult. </p><p>Conceptually the real world test worked as expected: coffee beans are moved really fast, the scale would stop the motor when it reached the desired weight. However, there were two main failures. </p><p>Firstly, the scale is terribly inaccurate, and has significant creep (e.g. after a few minutes of use, the reading would climb by 30-50g). Having done further research on these cells, building an accurate scale would be a project of its own, and would definitely not be worthwhile compared to an existing off-the-shelf USB-enabled scale. Since I am using a stepper motor, I decided I could just calibrate the dispenser to a number of steps, and just repeat it for each bag. In some ways, that&apos;s actually a more elegant solution in my opinion. </p><p>Second, and as predicted by a few friends, the auger gets stuck when fully loaded. When the beans are dropped slowly, there&apos;s no issue, but as soon as the auger has to cold start from a full hopper, it gets stuck. I had tried a chamfer on the edge of hole where the auger meets the shell, but that&apos;s nowhere near enough to stop the auger from jamming. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-9.17.46-PM.png" class="kg-image" alt="Arduino automatic dispenser" loading="lazy" width="1438" height="1114" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/Screenshot-2024-03-30-at-9.17.46-PM.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/Screenshot-2024-03-30-at-9.17.46-PM.png 1000w, https://alex.brovk.in/content/images/2024/03/Screenshot-2024-03-30-at-9.17.46-PM.png 1438w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Sneaky bean gets stuck</span></figcaption></figure><h3 id="next-steps">Next steps</h3><p>I have printed a new shell prototype that has generous clearance above the auger. I have yet to assemble it and try it out. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://alex.brovk.in/content/images/2024/03/image-1.png" class="kg-image" alt="Arduino automatic dispenser" loading="lazy" width="2000" height="1160" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/image-1.png 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/image-1.png 1000w, https://alex.brovk.in/content/images/size/w1600/2024/03/image-1.png 1600w, https://alex.brovk.in/content/images/2024/03/image-1.png 2072w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">New shell design iteration with generous clearance above the auger</span></figcaption></figure><hr><h2 id="challenges-and-learnings">Challenges and learnings</h2><p>This project has been so far a really good size. I had to learn a lot of basic skills to get started, from soldering to understanding the differences between types of motors, but it was a small enough project I was able to put something together. </p><ul><li>Sourcing electronics: to keep the budget lean, I have order a lot of components from Ali Express. This meant that I would have to plan weeks ahead of time, figure out too late that I&apos;m missing a component, or have to adjust my approach for makeshift fixes. </li><li>Understanding components: figuring out what motor I need or what motor driver to use took a lot of research. Even with extensive research, here were things I didn&apos;t know, for example that the DIY load cell would be so inaccurate. </li><li>Electronics as a whole: from issues soldering to understanding differences between types of capacitors for decoupling and filtering, it was a challenge to get my circuitry working. I was fortunate to remember a lot of the basic circuitry and Ohm&apos;s Law from university which helped a lot. </li><li>Unexpected issues: quite a few times I had to really scratch my head to figure out what was happening. For example, when I connected the scale and the motor on one circuit, my motor speed reduced significantly; the issue was the my scale was outputting values via the serial port, and the rate there (baud) reduced the step of my motor. </li><li>Arduino basics: this was the main area I wanted to learn about, and certainly had a good run of things to figure out with Arduino programming (in particular the single thread / synchronous loop structure), pin outs, pull down resistors, voltage, and using the various components. </li><li>3D printing: I haven&apos;t planned for this, but this project really upped my 3D printing skills, from designing for different tolerances, to using brass inserts and bolts, I&apos;ve learned a lot about using Fusion 360 and using my printer. </li></ul><hr><h2 id="many-thanks">Many thanks</h2><p>I&apos;ve leaned into some friends to help me out at different parts, and learned a ton from them. A big thanks to David for giving me excellent feedback on multiple areas of the design, to Vince for his patience in teaching me so much about electric motors, and Vince, Jimmy, Tom, and others who have fielded questions along the way. And, of course, I would have so many people to thank for all the videos, tutorials, and resources that have been shared online. </p>]]></content:encoded></item><item><title><![CDATA[📚 Book: maquillée]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg" class="kg-image" alt loading="lazy" width="1024" height="768" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg 1024w" sizes="(min-width: 720px) 720px"></figure><p><a href="https://mtlshop.drawnandquarterly.com/item/tQko92h9CaGyUXY6pmOc4A?ref=alex.brovk.in" rel="noreferrer">maquill&#xE9;e by Daphn&#xE9; B</a></p><p>Through a mix of elegant wordplays, personal narratives, and quotes, Daphn&#xE9; B uncovers patterns about society and our lives. I loved how the narrative is woven together through the lens of make-up, and how layer by layer she brought attention to things</p>]]></description><link>https://alex.brovk.in/reading/book-maquillee/</link><guid isPermaLink="false">6608c592ef31d8e46b386e81</guid><category><![CDATA[Reading]]></category><category><![CDATA[People]]></category><dc:creator><![CDATA[Alex Brovkin]]></dc:creator><pubDate>Sun, 31 Mar 2024 02:14:10 GMT</pubDate><media:content url="https://alex.brovk.in/content/images/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c-1.jpeg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://alex.brovk.in/content/images/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg" class="kg-image" alt="&#x1F4DA; Book: maquill&#xE9;e" loading="lazy" width="1024" height="768" srcset="https://alex.brovk.in/content/images/size/w600/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg 600w, https://alex.brovk.in/content/images/size/w1000/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg 1000w, https://alex.brovk.in/content/images/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c.jpeg 1024w" sizes="(min-width: 720px) 720px"></figure><img src="https://alex.brovk.in/content/images/2024/03/B2DD1D0B-E143-4B7A-94F3-5529BED3EB64_1_105_c-1.jpeg" alt="&#x1F4DA; Book: maquill&#xE9;e"><p><a href="https://mtlshop.drawnandquarterly.com/item/tQko92h9CaGyUXY6pmOc4A?ref=alex.brovk.in" rel="noreferrer">maquill&#xE9;e by Daphn&#xE9; B</a></p><p>Through a mix of elegant wordplays, personal narratives, and quotes, Daphn&#xE9; B uncovers patterns about society and our lives. I loved how the narrative is woven together through the lens of make-up, and how layer by layer she brought attention to things that are right in front of me. I loved her writing, so much so it made me want to read in French again, and reminded me of how much writing can be beautiful and powerful way to make sense of human experiences.</p><p>The book touches on many themes, but I will points out ones that resonated with me personally. Having just finished <a href="https://alex.brovk.in/reading/book-care-and-capitalism/" rel="noreferrer">Care and Capitalism</a>, I was particularly tuned into questions around care and self-care.</p><blockquote>Ainsi, le selfcare exige un mouvement, non pas de repli sur soi, mais bien de retour vers soi. En prenant soin de nous, c&apos;est &#xE0; notre propre regard qu&apos;on se r&#xE9;v&#xE8;le. Cette chose que l&apos;on tait, notre chair, nous appara&#xEE;t soudain. Et d&apos;ailleurs, c&apos;est seulement une fois qu&apos;on a pris conscience de sa vie qu&apos;on peut lutter pour elle. (139)</blockquote><p>The contrast between the &#x201C;repli sur soi&#x201D; and &#x201C;retour vers soi&#x201D; is so beautiful in how precisely it distinguishes the deficit-based way of looking at care (e.g. mend the broken) from a strength-based way (e.g. cherish what is). </p><p>I also love the distinction self-care as a disembodied concept applied to a &quot;self&quot; vs. something that start from the &quot;self&quot; itself. It has been really empowering for me to think of care as a celebration of self (worthy of care), taking a step away from seeing my self as broken (in need of care). </p><p>In talking about putting on makeup, Daphn&#xE9; celebrates the time it takes, time that is reclaimed for oneself. In Care and Capitalism, time is emphasized as an critical component of care, because it is an affective activity that requires the presence and attention of a person. In a similar way, maquill&#xE9;e reminds me that self-care as resistance requires deliberately taking time to come back to myself.</p><p>I have not figured out what self-care looks like for me, mostly because I&apos;m still working through layers of baggage that make it difficult to reach. However, the book made me take pause, and assess what I am choosing to put time into. There is a clue here that activities which are deliberately non-transactional, &quot;unproductive&quot;, and bodily are likely a good starting point for me. </p>]]></content:encoded></item></channel></rss>