<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>printfdebugging - programming</title>
    <subtitle>Sahil Gautam&#x27;s Blog</subtitle>
    <link rel="self" type="application/atom+xml" href="https://printfdebugging.in/programming/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-03-10T00:00:00+00:00</updated>
    <id>https://printfdebugging.in/programming/atom.xml</id>
    <entry xml:lang="en">
        <title>iteration is a feature, not a bug</title>
        <published>2026-03-10T00:00:00+00:00</published>
        <updated>2026-03-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/iteration/"/>
        <id>https://printfdebugging.in/programming/iteration/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/iteration/">&lt;p&gt;there are some interalized biases that new programmers like myself
have towards getting it right in the first go, and thus we keep
thinking about it, going in circles reaching nowhere. a better way
would be to just quickly put together an unoptimised version of the
solution, doesn&#x27;t have to have a structure or design.&lt;&#x2F;p&gt;
&lt;p&gt;then as you have something which works, it&#x27;s far easier to just
rewrite it a few times before you have a really good solution. this
is often faster than thinking more and writing less code. note that
this doesn&#x27;t apply to all situations quite literally, but some form of
prototyping (or prior experience with code) is required. iteration is
a feature not a bug.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>refactors don&#x27;t have to be messy</title>
        <published>2026-03-05T00:00:00+00:00</published>
        <updated>2026-03-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/commits2/"/>
        <id>https://printfdebugging.in/programming/commits2/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/commits2/">&lt;p&gt;part of being a good developer involves thinking backwards from
the users&#x27; and the reviewers&#x27; perspective for the ux and the code
respectively. there&#x27;s a really easy thing you can do to make commits
less messy.&lt;&#x2F;p&gt;
&lt;p&gt;if you are refactoring a function i.e. creating a new function out of
it&#x27;s body, then you should place the new function &quot;physically away&quot;
from the old function in the file. that way git diffs won&#x27;t be messy.
take the following diffs, both do the same thing with the difference
being the physical location of the new function in the file.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;easy-to-review&quot;&gt;easy to review&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;diff&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #ABB2BF);&quot;&gt;diff --git a&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx b&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  2&lt;&#x2F;span&gt;&lt;span&gt;index 39afd0963606..1e48e6e04afa 100644&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #61AFEF);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;---&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #61AFEF);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt; a&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #61AFEF);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+++&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #61AFEF);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt; b&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt;@@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; -912,52 +912,12&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; @@&lt;&#x2F;span&gt;&lt;span&gt; void ScCheckListMenuControl::MarkCheckedMembers()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  6&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  7&lt;&#x2F;span&gt;&lt;span&gt; IMPL_LINK_NOARG(ScCheckListMenuControl, LockCheckedHdl, weld::Toggleable&amp;amp;, void)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  8&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    bool bLockCheckedEntries = mxChkLockChecked-&amp;gt;get_active();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;     MarkCheckedMembers();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 11&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    UpdateVisibleMembers(false);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 13&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    if (mbHasDates)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 14&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 15&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        &#x2F;&#x2F; TODO: flesh this out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 17&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 18&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        mpChecks-&amp;gt;freeze();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 20&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        mpChecks-&amp;gt;clear();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 21&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        mpChecks-&amp;gt;thaw();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 22&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 23&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        OUString aSearchText = mxEdSearch-&amp;gt;get_text();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 24&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        aSearchText = ScGlobal::getCharClass().lowercase(aSearchText);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 25&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        if (aSearchText.isEmpty())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 26&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 27&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            &#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 28&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * when we click on lock, all the checked entries are marked and&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 29&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * this `true` tells `initMembers` to check only the currently&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * checked entries.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 31&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             *&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 32&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * when lock is unchecked we want that the entries which were locked&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 33&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * and checked now become unlocked and checked so that we can select&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 34&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * or deselect more entries, still we want only the marked (selected)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 35&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * entries to remain selected, thus this `true` is valid even in the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 36&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             * uncheck case.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 37&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;             *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 38&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            initMembers(-1, true);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 39&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 40&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 41&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 42&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            std::vector&amp;lt;int&amp;gt; aShownIndexes;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 43&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            loadSearchedMembers(aShownIndexes, maMembers, aSearchText, true);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 44&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            std::vector&amp;lt;int&amp;gt; aFixedWidths { mnCheckWidthReq };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 45&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 46&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            &#x2F;&#x2F; insert the members, remember whether checked or unchecked.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 47&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            mpChecks-&amp;gt;bulk_insert_for_each(aShownIndexes.size(), [this, &amp;amp;aShownIndexes, &amp;amp;bLockCheckedEntries](weld::TreeIter&amp;amp; rIter, int i) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 48&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                size_t nIndex = aShownIndexes[i];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 49&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                insertMember(*mpChecks, rIter, maMembers[nIndex], maMembers[nIndex].mbMarked, bLockCheckedEntries);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 50&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            }, nullptr, &amp;amp;aFixedWidths);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 51&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 52&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 53&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 54&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    &#x2F;&#x2F; unmarking should happen after the members are inserted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 55&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    if (!bLockCheckedEntries)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 56&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    &#x2F;&#x2F; unmarking should happen after the members are inserted or updated&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 57&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    &#x2F;&#x2F; (in case there&amp;#39;s a hierarchy, in which case we don&amp;#39;t clear everything)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 58&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    if (!mxChkLockChecked-&amp;gt;get_active())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 59&lt;&#x2F;span&gt;&lt;span&gt;         for (auto&amp;amp; aMember : maMembers)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 60&lt;&#x2F;span&gt;&lt;span&gt;             aMember.mbMarked = false;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 61&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 62&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt;@@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; -1119,6 +1079,54&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; @@&lt;&#x2F;span&gt;&lt;span&gt; IMPL_LINK_NOARG(ScCheckListMenuControl, SearchEditTimeoutHdl, Timer*, void)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 63&lt;&#x2F;span&gt;&lt;span&gt;     }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 64&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 65&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 66&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;void ScCheckListMenuControl::UpdateVisibleMembers(bool bSearchEditTimeout)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 67&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 68&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    &#x2F;&#x2F; TODO: change it later based on the `SearchEditTimeoutHdl` code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 69&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    bool bLockCheckedEntries = !bSearchEditTimeout &amp;amp;&amp;amp; mxChkLockChecked-&amp;gt;get_active();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 70&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    OUString aSearchText = mxEdSearch-&amp;gt;get_text();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 71&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    aSearchText = ScGlobal::getCharClass().lowercase(aSearchText);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 72&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 73&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    if (mbHasDates)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 74&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 75&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        &#x2F;&#x2F; TODO: flesh it out later&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 76&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 77&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 78&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 79&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        mpChecks-&amp;gt;freeze();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 80&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        mpChecks-&amp;gt;clear();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 81&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        mpChecks-&amp;gt;thaw();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 82&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 83&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        if (aSearchText.isEmpty())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 84&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 85&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            &#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 86&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * when we click on lock, all the checked entries are marked and&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 87&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * this `true` tells `initMembers` to check only the currently&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 88&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * checked entries.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 89&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             *&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 90&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * when lock is unchecked we want that the entries which were locked&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 91&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * and checked now become unlocked and checked so that we can select&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 92&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * or deselect more entries, still we want only the marked (selected)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 93&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * entries to remain selected, thus this `true` is valid even in the&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 94&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             * uncheck case.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 95&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;             *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 96&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            initMembers(-1, true);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 97&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 98&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 99&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            std::vector&amp;lt;int&amp;gt; aShownIndexes;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;101&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            loadSearchedMembers(aShownIndexes, maMembers, aSearchText, true);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;102&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            std::vector&amp;lt;int&amp;gt; aFixedWidths { mnCheckWidthReq };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;103&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;104&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            &#x2F;&#x2F; insert the members, remember whether checked or unchecked.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;105&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            mpChecks-&amp;gt;bulk_insert_for_each(aShownIndexes.size(), [this, &amp;amp;aShownIndexes, &amp;amp;bLockCheckedEntries](weld::TreeIter&amp;amp; rIter, int i) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;106&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                size_t nIndex = aShownIndexes[i];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;107&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                insertMember(*mpChecks, rIter, maMembers[nIndex], maMembers[nIndex].mbMarked, bLockCheckedEntries);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;108&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            }, nullptr, &amp;amp;aFixedWidths);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;109&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;110&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;111&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;112&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;113&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;114&lt;&#x2F;span&gt;&lt;span&gt; IMPL_LINK_NOARG(ScCheckListMenuControl, EdModifyHdl, weld::Entry&amp;amp;, void)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;115&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;116&lt;&#x2F;span&gt;&lt;span&gt;     maSearchEditTimer.Start();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;harder-to-review&quot;&gt;harder to review&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;diff&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #ABB2BF);&quot;&gt;diff --git a&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx b&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  2&lt;&#x2F;span&gt;&lt;span&gt;index 39afd0963606..a38226336130 100644&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #61AFEF);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;---&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #61AFEF);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt; a&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #61AFEF);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+++&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #61AFEF);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt; b&#x2F;sc&#x2F;source&#x2F;ui&#x2F;cctrl&#x2F;checklistmenu.cxx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt;@@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; -875,49 +875,16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; @@&lt;&#x2F;span&gt;&lt;span&gt; namespace&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  6&lt;&#x2F;span&gt;&lt;span&gt;     }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  7&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  8&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;  9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;void ScCheckListMenuControl::MarkCheckedMembers()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 11&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    if (mbHasDates)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 13&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        &#x2F;&#x2F; TODO: flesh it out later&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 14&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 15&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 17&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        &#x2F;&#x2F; go over the members visible in the popup, and remember which one is&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 18&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        &#x2F;&#x2F; checked, and which one is not by setting `mbMarked` to `true`; by default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        &#x2F;&#x2F; `mbMarked` is `false`, we clear all the marks when lock is unchecked, see&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 20&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        &#x2F;&#x2F; at the end of this callback.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 21&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        mpChecks-&amp;gt;all_foreach([this](weld::TreeIter&amp;amp; rEntry){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 22&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            if (mpChecks-&amp;gt;get_toggle(rEntry) == TRISTATE_TRUE)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 23&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 24&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                for (auto&amp;amp; aMember : maMembers)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 25&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 26&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                    if (aMember.maName == mpChecks-&amp;gt;get_text(rEntry))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 27&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 28&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                        aMember.mbMarked = true;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 29&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                        &#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                         * if there are multiple entries with the same&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 31&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                         * name in the range, they all show up as a single&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 32&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                         * entry in the autofilter, so we can break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 33&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                         *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 34&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                        break;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 35&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 36&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;                }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 37&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 38&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 39&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;            return false;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 40&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        });&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 41&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 42&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 43&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 44&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;IMPL_LINK_NOARG(ScCheckListMenuControl, LockCheckedHdl, weld::Toggleable&amp;amp;, void)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 45&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;void ScCheckListMenuControl::UpdateVisibleMembers(bool bSearchEditTimeout)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 46&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 47&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    bool bLockCheckedEntries = mxChkLockChecked-&amp;gt;get_active();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 48&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    MarkCheckedMembers();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 49&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    &#x2F;&#x2F; TODO: change it later based on the `SearchEditTimeoutHdl` code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 50&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    bool bLockCheckedEntries = !bSearchEditTimeout &amp;amp;&amp;amp; mxChkLockChecked-&amp;gt;get_active();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 51&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    OUString aSearchText = mxEdSearch-&amp;gt;get_text();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 52&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    aSearchText = ScGlobal::getCharClass().lowercase(aSearchText);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 53&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 54&lt;&#x2F;span&gt;&lt;span&gt;     if (mbHasDates)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 55&lt;&#x2F;span&gt;&lt;span&gt;     {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 56&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        &#x2F;&#x2F; TODO: flesh this out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 57&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        &#x2F;&#x2F; TODO: flesh it out later&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 58&lt;&#x2F;span&gt;&lt;span&gt;     }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 59&lt;&#x2F;span&gt;&lt;span&gt;     else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 60&lt;&#x2F;span&gt;&lt;span&gt;     {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 61&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt;@@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; -925,8 +892,6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; @@&lt;&#x2F;span&gt;&lt;span&gt; IMPL_LINK_NOARG(ScCheckListMenuControl, LockCheckedHdl, weld::Toggleable&amp;amp;, void)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 62&lt;&#x2F;span&gt;&lt;span&gt;         mpChecks-&amp;gt;clear();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 63&lt;&#x2F;span&gt;&lt;span&gt;         mpChecks-&amp;gt;thaw();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 64&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 65&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        OUString aSearchText = mxEdSearch-&amp;gt;get_text();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 66&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;        aSearchText = ScGlobal::getCharClass().lowercase(aSearchText);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 67&lt;&#x2F;span&gt;&lt;span&gt;         if (aSearchText.isEmpty())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 68&lt;&#x2F;span&gt;&lt;span&gt;         {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 69&lt;&#x2F;span&gt;&lt;span&gt;             &#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 70&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt;@@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; -955,9 +920,51&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #ABB2BF);font-weight: bold;&quot;&gt; @@&lt;&#x2F;span&gt;&lt;span&gt; IMPL_LINK_NOARG(ScCheckListMenuControl, LockCheckedHdl, weld::Toggleable&amp;amp;, void)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 71&lt;&#x2F;span&gt;&lt;span&gt;             }, nullptr, &amp;amp;aFixedWidths);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 72&lt;&#x2F;span&gt;&lt;span&gt;         }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 73&lt;&#x2F;span&gt;&lt;span&gt;     }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 74&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 75&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 76&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;void ScCheckListMenuControl::MarkCheckedMembers()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 77&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 78&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    if (mbHasDates)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 79&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 80&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        &#x2F;&#x2F; TODO: flesh it out later&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 81&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 82&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 83&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 84&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        &#x2F;&#x2F; go over the members visible in the popup, and remember which one is&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 85&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        &#x2F;&#x2F; checked, and which one is not by setting `mbMarked` to `true`; by default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 86&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        &#x2F;&#x2F; `mbMarked` is `false`, we clear all the marks when lock is unchecked, see&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 87&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        &#x2F;&#x2F; at the end of this callback.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 88&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        mpChecks-&amp;gt;all_foreach([this](weld::TreeIter&amp;amp; rEntry){&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 89&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            if (mpChecks-&amp;gt;get_toggle(rEntry) == TRISTATE_TRUE)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 90&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 91&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                for (auto&amp;amp; aMember : maMembers)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 92&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 93&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                    if (aMember.maName == mpChecks-&amp;gt;get_text(rEntry))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 94&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 95&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                        aMember.mbMarked = true;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 96&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                        &#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 97&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                         * if there are multiple entries with the same&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 98&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                         * name in the range, they all show up as a single&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 99&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                         * entry in the autofilter, so we can break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;100&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                         *&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;101&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                        break;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;102&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;103&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;                }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;104&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;105&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;106&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;            return false;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;107&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;        });&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;108&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;109&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;110&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;111&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;IMPL_LINK_NOARG(ScCheckListMenuControl, LockCheckedHdl, weld::Toggleable&amp;amp;, void)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;112&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;113&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    MarkCheckedMembers();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;114&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    UpdateVisibleMembers(false);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;115&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;116&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    &#x2F;&#x2F; unmarking should happen after the members are inserted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;117&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #E06C75);background-color: light-dark(#FFEEF0, #282C34);&quot;&gt;    if (!bLockCheckedEntries)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;118&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    &#x2F;&#x2F; unmarking should happen after the members are inserted or updated&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;119&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    &#x2F;&#x2F; (in case there&amp;#39;s a hierarchy, in which case we don&amp;#39;t clear everything)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;120&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;+&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#22863A, #98C379);background-color: light-dark(#F0FFF4, #282C34);&quot;&gt;    if (!mxChkLockChecked-&amp;gt;get_active())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;121&lt;&#x2F;span&gt;&lt;span&gt;         for (auto&amp;amp; aMember : maMembers)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;122&lt;&#x2F;span&gt;&lt;span&gt;             aMember.mbMarked = false;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;123&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>TUIs are far more flexible than GUIs</title>
        <published>2026-03-04T00:00:00+00:00</published>
        <updated>2026-03-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/tui/"/>
        <id>https://printfdebugging.in/programming/tui/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/tui/">&lt;p&gt;terminal user interfaces (tuis) are much more powerful and versatile
compared to graphical user interfaces. you can run tuis without any
graphical environment, you can ssh into a system and attach the tuis
running in that system (easily with tmux).&lt;&#x2F;p&gt;
&lt;p&gt;this shines when you are in a situation where the input devices are
blocked by some gui like a menu, and there&#x27;s no way you can pass
commands to the debugger. if it comes to that, you can ssh from
another machine and attach the tui and continue from there.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>build systems to help you build habbits</title>
        <published>2026-01-02T00:00:00+00:00</published>
        <updated>2026-01-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/habbits/"/>
        <id>https://printfdebugging.in/programming/habbits/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/habbits/">&lt;p&gt;building habbits is not an easy task, they require change and change
creates friction. but not all changes have to create friction and
systems are ways to slip in changes into your routine in a way that
the resulting friction doesn&#x27;t cause bruses.&lt;&#x2F;p&gt;
&lt;p&gt;for example, i have some gym equipment at home and i tried doing some
exercises myself but i couldn&#x27;t do it regularly because it was just
too boring doing it alone. so i joined a badminton academy. i just
have to go there and rest happens on it&#x27;s own, some days it&#x27;s matches,
which is fun, and some days it&#x27;s a lot of running and training, which
is less fun, but with people around, it&#x27;s doable with some chats and
smiles and screems :).&lt;&#x2F;p&gt;
&lt;p&gt;i have a few rivals now, so i am careful about what i eat at home as i
want to build a good physique to match thier level, i jump ropes when
i am waiting for my turn on the court. one good system can create a
lot of positive feedback loops. i haven&#x27;t stated the other benifits of
sports.&lt;&#x2F;p&gt;
&lt;p&gt;another system i built recently was that of timelogging. previously i
used gtimelog to track the time spent on work tasks, but now i log my
activities as well to see where the day went exactly. i am not micro
managing anything but i am now conscious about where i spend the next
30m or 1h. time is the only constant you can&#x27;t change :).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;habbits&#x2F;.&#x2F;assets&#x2F;gtimelog.png&quot; alt=&quot;gtimelog&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Systems like these, paired with the ability to make steady &lt;a href=&quot;&#x2F;programming&#x2F;progress&#x2F;&quot;&gt;progress&lt;&#x2F;a&gt;,
allow you to get the maximum value from your time.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>making progress on tasks</title>
        <published>2026-01-02T00:00:00+00:00</published>
        <updated>2026-01-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/progress/"/>
        <id>https://printfdebugging.in/programming/progress/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/progress/">&lt;p&gt;it&#x27;s quite easy to drift off in certain unwanted direction like
reading a comment in the codebase about a tool and then reading the
whole manpage of that tool, or joining the irc channel for that tool
to discuss certian term you couldn&#x27;t understand from the man page. but
it wasn&#x27;t about the tool in the first place.&lt;&#x2F;p&gt;
&lt;p&gt;this is called &#x27;getting distracted or sidetracked&#x27;, and it&#x27;s a big
hurdle preventing you from finishing the tasks. one has to narrow down
their focus to things which help make progress on the task. having an
agenda before starting the work helps, and there after you can just
check whether what you are doing aligns with the agenda or not.&lt;&#x2F;p&gt;
&lt;p&gt;the agenda should be specific, it&#x27;s your plate for the day. put no
more than what you can eat and digest. be consistent, and that&#x27;s how
you eat an elephant, one bite at a time.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the book printing episode (part 2)</title>
        <published>2025-12-24T00:00:00+00:00</published>
        <updated>2025-12-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/books2/"/>
        <id>https://printfdebugging.in/programming/books2/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/books2/">&lt;h2 id=&quot;the-last-attempt&quot;&gt;the last attempt&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;programming&#x2F;books&quot;&gt;last time&lt;&#x2F;a&gt; when i printed some books, i basically
created images out of the pdf to then crop and put back into a pdf.
this approach worked however it added blur to the final generated pdf.
and there was a font problem where if the book&#x2F;spec had a very thin
monospace font, i didn&#x27;t know how to change it. i found a solution to
both of these problems.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;changing-monospace-font-in-the-pdf&quot;&gt;changing monospace font in the pdf&lt;&#x2F;h2&gt;
&lt;p&gt;i searched quite a bit, on the archwiki and on forums in general and
i couldn&#x27;t find some magical command to change a specific font in the
pdf. instead i found that i can edit the pdf with libreoffice-draw and
replace certain fonts with other fonts. this worked quite well.&lt;&#x2F;p&gt;
&lt;p&gt;Steps:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;open the pdf in libreoffice draw&lt;&#x2F;li&gt;
&lt;li&gt;right-click -&amp;gt; page properties -&amp;gt; set the margins to 0&lt;&#x2F;li&gt;
&lt;li&gt;switch to the tabbed ui or open the sidebar&lt;&#x2F;li&gt;
&lt;li&gt;click on the text-frame with the font to substitute&lt;&#x2F;li&gt;
&lt;li&gt;copy the font name from the fonts dropdown list (on sidebar or on nbbar)&lt;&#x2F;li&gt;
&lt;li&gt;click on menu &lt;code&gt;Tools &amp;gt; Options &amp;gt; LibreOffice &amp;gt; Fonts&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;add the font and it&#x27;s replacement, select &lt;code&gt;Always&lt;&#x2F;code&gt; checkbox, click apply &amp;amp; ok&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;books2&#x2F;.&#x2F;assets&#x2F;fonts-dialog.png&quot; alt=&quot;fonts-dialog&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;you might want to adjust the replacement font sizes a bit or it might
be a bit off from the center of the line. as you can see below, the
exported pdf is much more readable &amp;amp; printable.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;books2&#x2F;.&#x2F;assets&#x2F;font-change.png&quot; alt=&quot;font-change&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reducing-the-page-margins&quot;&gt;reducing the page margins&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;pdfcrop&lt;&#x2F;code&gt; is an amazing tool which can remove the page margins, or set
them to a desired value. i set &lt;code&gt;25mm&lt;&#x2F;code&gt; on all sides with the following
command and you can see how much area we saved (effectively zoomed
in).&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;pdfcrop&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;-margins&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;25 25 25 25&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; in.pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; out.pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;books2&#x2F;.&#x2F;assets&#x2F;margin-reduced.png&quot; alt=&quot;margin-reduced&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;this might not seem like a big difference as these files are still
pdfs, but when they get printed to the paper, the one on the right
will be way more larger than the one on the left as the text is going
to get more area on the page.&lt;&#x2F;p&gt;
&lt;p&gt;i am quite happy with how it turned out, though i have already printed
most of the books&#x2F;specs i needed :_).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>knowledge building</title>
        <published>2025-12-16T00:00:00+00:00</published>
        <updated>2025-12-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/knowledge-building/"/>
        <id>https://printfdebugging.in/programming/knowledge-building/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/knowledge-building/">&lt;p&gt;i recently learnt a very important lesson, the most important skill
one needs as a programmer is to &quot;figure out the unknown&quot;. for most
great things, there aren&#x27;t any predefined steps, people try different
things, fail at many. these failures&#x2F;experiments help in knowledge
building and after a point they have sufficient knowledge to make it
work.&lt;&#x2F;p&gt;
&lt;p&gt;i learnt that there are no shortcuts that one must take the same long
path that many took before them. it might be that the others who went
that way left some nice sign boards &amp;amp; journals about their journey,
but it might as well be the case that you are the first one exploring
that road.&lt;&#x2F;p&gt;
&lt;p&gt;i was scared of failing, i would double check things on the internet
before writing them in the code, i learnt to be comfortable around
errors. it&#x27;s fine if you can&#x27;t get it to work in the first go, just
run it and figure out what&#x27;s not working.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>hackers don&#x27;t need permission to look at the source</title>
        <published>2025-11-26T00:00:00+00:00</published>
        <updated>2025-11-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/approach/"/>
        <id>https://printfdebugging.in/programming/approach/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/approach/">&lt;p&gt;this blog is about approach, you are using emacs and you are annoyed
by a prompt asking you whether to create a missing directory or not.
one thing you can do is to go to the IRC channel and ask them how to
not see that prompt. other thing (the right thing) you can do is to
open the elisp code and try to find out what&#x27;s printing that prompt.
once you found the source, try to implement the fix yourself and if
you are stuck somewhere, ask for some help.&lt;&#x2F;p&gt;
&lt;p&gt;the application crashes, you got a stacktrace, don&#x27;t post it on the
IRC channel rightaway and ask for help&#x2F;(who knows what it is about),
put a breakpoint there and try to fix it yourself. if you aren&#x27;t able
to fix it, ask for help. this differentiates a good programmer from
the rest.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>read the friendly manual</title>
        <published>2025-11-26T00:00:00+00:00</published>
        <updated>2025-11-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/manual/"/>
        <id>https://printfdebugging.in/programming/manual/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/manual/">&lt;p&gt;the friendly manual has all the answers. it can be quite long
sometimes and it may require some tries before you find what you were
looking for. patience and reading skills are the key here. i often
make a mistake where i quickly scroll my eyes over the manual trying
to spot the answer, and most of the times, i miss the spot and thus
end up spending more time to find my solution.&lt;&#x2F;p&gt;
&lt;p&gt;a good manual has topic wise examples, make sure you include them if
you happen to write one. but most manuals don&#x27;t have examples, so
don&#x27;t expect to find the solution straight away, it might require some
experimentation. you can ask on IRC channels and get pointers to the
topics which you should read from the manual to find what you are
looking for.&lt;&#x2F;p&gt;
&lt;p&gt;don&#x27;t use AI, it enforces bad habbits and expectations and you don&#x27;t
build muscle over time as LLMs are black boxes. reading man pages
on the other hand is like using vim, it would be slow at first but
you build intuition and muscle memory over time and it keeps getting
better from there.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>reading comments, manuals, instructions</title>
        <published>2025-11-26T00:00:00+00:00</published>
        <updated>2025-11-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/reading/"/>
        <id>https://printfdebugging.in/programming/reading/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/reading/">&lt;p&gt;reading is the single most important skill one requires as a
programmer. we don&#x27;t just read the code, but the comments, the
reviews, the instructions and user feedback. reading is therefore a
skill we cannot ignore or assume as something which comes naturally.&lt;&#x2F;p&gt;
&lt;p&gt;one must pay attention to each word with their whole attention reading
at a slow steady pace. i miss out on important details when i try to
read fast or skim over the text. :) that one time i asked for help
and i learnt that it was already mentioned by szymon in one of his
comments.&lt;&#x2F;p&gt;
&lt;p&gt;reading requires patience, therefore it&#x27;s not like one can be good at
reading and live a chaotic life, the whole lifestyle, things you do
in a day have to complement the conditions required for one to be and
remain a good reader.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>report complete and accurate observations</title>
        <published>2025-11-26T00:00:00+00:00</published>
        <updated>2025-11-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/reporting/"/>
        <id>https://printfdebugging.in/programming/reporting/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/reporting/">&lt;p&gt;we can also reword this topic as &quot;asking for help the right way&quot;. we
are trying something, it&#x27;s not working and we need help. we go to an
irc or matrix chat and share what we were trying to do. now at this
point we should make sure that we provide the complete context and
complete description of the problem and the findings from various
attempts at it.&lt;&#x2F;p&gt;
&lt;p&gt;we should also avoid half baked sentenses because they can mislead
the readers about the problem wasting their time. sharing some
screenshots, pastebins and steps to reproduce are much appreciated.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>bias and assumptions</title>
        <published>2025-11-19T00:00:00+00:00</published>
        <updated>2025-11-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/bias/"/>
        <id>https://printfdebugging.in/programming/bias/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/bias/">&lt;p&gt;confirm the code does what you think it does. i just copied some code
and refactored it into a function assuming that it takes me to a
particular cell. but actually it was code to assert that this cell is
a particular cell. that&#x27;s why it&#x27;s important to read code carefully.&lt;&#x2F;p&gt;
&lt;p&gt;another such assumption can be thinking that you read all the code
in ana file d you know what it does. it happened to me once, i had
read some code a few weeks ago so i didn&#x27;t bother reading it again
and assumed that i have an idea of what it does. turns out i didn&#x27;t
quite understand the code i read the last time and i there were some
callbacks i wasn&#x27;t aware of, which were needed to fix the problem i
was working on.&lt;&#x2F;p&gt;
&lt;p&gt;there&#x27;s no harm in quickly going over what you know once again, maybe
write it in a structured order, start with some questions and read
the code while finding answers to them. ask yourself, &lt;code&gt;do i really understand the code i am working with&lt;&#x2F;code&gt; as that&#x27;s the most important
question.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the initial few hours into a project are a bit scary</title>
        <published>2025-11-19T00:00:00+00:00</published>
        <updated>2025-11-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/fear/"/>
        <id>https://printfdebugging.in/programming/fear/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/fear/">&lt;p&gt;maybe i am the coward one, whenever i start a new project, i am scared
out of my wits, i quite literally feel a vacuum around me. at that
point the instincts take over and either i fight or flight :). i
recently learnt that it&#x27;s all about understanding.&lt;&#x2F;p&gt;
&lt;p&gt;as you start a new project, you know almost nothing about it. as you
read more and more code, when you ask questions and find answers to
them, when you take some help (after a few decent tries), you slowly
start understanding and pick up the speed, the fear goes away.&lt;&#x2F;p&gt;
&lt;p&gt;the initial few hours were scary for me because i was rushing towards
the solution, through shortcuts in a town i knew nothing about, no
surprise they led me to some pretty scary places. approach a project
from the perspective of understanding the problem, the code around it.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>how to solve any programming problem</title>
        <published>2025-11-19T00:00:00+00:00</published>
        <updated>2025-11-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/understanding/"/>
        <id>https://printfdebugging.in/programming/understanding/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/understanding/">&lt;p&gt;understanding is the key. if you understand the problem space and
the problem surface, then it becomes as simple as wanting something
and knowing exactly what will do what and what one has to do to
get something to work. this works on all kinds of problems on all
scales, though larger problems require more time (patience) and well
documented logs to stay focused.&lt;&#x2F;p&gt;
&lt;p&gt;asking good&#x2F;decisive questions helps understand the problem
space&#x2F;surface faster. questions like:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;what exactly happens when i do this&lt;&#x2F;li&gt;
&lt;li&gt;how does that happen&lt;&#x2F;li&gt;
&lt;li&gt;what does this code do&lt;&#x2F;li&gt;
&lt;li&gt;how does the stack look like at that point&lt;&#x2F;li&gt;
&lt;li&gt;how does the value of this variable change over some interaction&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;these questions give a direction to the investigation, threads which
you can hold on to, one at a time. and as you go over a few of them,
they start coming together and you reach a point where you have
covered quite a lot of the problem surface.&lt;&#x2F;p&gt;
&lt;p&gt;with hard&#x2F;complicated problems, shortcuts are almost always bad. while
estemating, almost always estemate time needed to cover the surface
area of the problem and a few days for the fixing the problem which
includes cleanup, tests and reviews -- you would have a working
prototype as you cover the surface.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>think at the global scope as you modify some local scope</title>
        <published>2025-11-12T00:00:00+00:00</published>
        <updated>2025-11-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/context/"/>
        <id>https://printfdebugging.in/programming/context/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/context/">&lt;p&gt;reading other&#x27;s code and modifying it can be tricky, there might be
some code somewhere which uses the code you just modified and you have
no idea about it. therefore as you read&#x2F;modify some code, ask yourself&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;is this required?&lt;&#x2F;li&gt;
&lt;li&gt;how does this relate to the other code, some of which i just read and some which i have no idea about.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;don&#x27;t keep the mental model limited to the local scope (file or
module), zoom out a bit and try to understand the code you are
reading&#x2F;modifying in the bigger picture (series of events).&lt;&#x2F;p&gt;
&lt;p&gt;just asking &quot;what does it do and how&quot; isn&#x27;t enough. you also need to
ask what other code uses this code, how does changing this code change
the behavior of that code, and other similar questions.&lt;&#x2F;p&gt;
&lt;p&gt;like while doing some code cleanup, ask yourself whether the code you
are removing&#x2F;moving is used by some code somewhere which you aren&#x27;t
aware of? i made some changes to the checkbox widget code and that
introduced some bugs in the dialog checkboxes, had i not checked
that, the bug would have made it to the release (but some tests are
failing, so thanks to the dev who wrote those tests).&lt;&#x2F;p&gt;
&lt;!-- vim:tw=70:ts=4:sw=4:et:ft=markdown:norl:iskeyword+=-,.: --&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>how to fix your code after code reviews</title>
        <published>2025-11-12T00:00:00+00:00</published>
        <updated>2025-11-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/fixing/"/>
        <id>https://printfdebugging.in/programming/fixing/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/fixing/">&lt;p&gt;usually the changes are in a series of commits one after the other.
start from first read all the comments and try to understand if they
suggest some small changes or something which spans multiple commits
and is related.&lt;&#x2F;p&gt;
&lt;p&gt;let&#x27;s say there&#x27;s no such big change suggested, which is ususally the
case, then you start from the very first commit in the series and
implement the suggested changes. don&#x27;t mark the comment as resolved
yet as these suggestions don&#x27;t just apply to one commit, make sure you
look through other commits to see if this suggestion applies there
and if it does, make the fixes in those commits and then resolve this
comment. do it for reach comment.&lt;&#x2F;p&gt;
&lt;p&gt;when you are fixing something, make sure that you test the fix on
top of the commit series and once it works there, you can just stash
the changes and apply and ammend them to a particular commit in
interactive rebase. the idea is to not checkout to a particular commit
and then implement the fix as that fix might not play well with the
following commits and then it would be just more work to test it
twice (and potentially fix it twice).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>experiments lead to deep insights</title>
        <published>2025-11-11T00:00:00+00:00</published>
        <updated>2025-11-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/experiments/"/>
        <id>https://printfdebugging.in/programming/experiments/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/experiments/">&lt;p&gt;programming is a creative domain and there are many ways to approach
a problem. experimentation is therefore important to understand
different aspects of a concept, problem or even the solution.
tutorials and books are usually linear, good ones suggest you some
experiments to do on your own.&lt;&#x2F;p&gt;
&lt;p&gt;a good programmer should have the patience to stay with one concept,
problem or solution for a little longer and play with it, tweek the
parameters and see what happens. the insights you gain from that are
quite valuable.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>don&#x27;t rush to get the changes in</title>
        <published>2025-11-11T00:00:00+00:00</published>
        <updated>2025-11-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/rush/"/>
        <id>https://printfdebugging.in/programming/rush/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/rush/">&lt;p&gt;when something is almost done, it&#x27;s tempting to quickly get it
reviewed and merged. while you shouldn&#x27;t stall things unnecessarily,
it&#x27;s equaly important that you don&#x27;t create a rush to get the changes
in.&lt;&#x2F;p&gt;
&lt;p&gt;if you are not sure about something, take some more time, understand
what works and why, potential bugs, add tests and then start the
review process. if the action statement involves the terms like &lt;code&gt;last minute&lt;&#x2F;code&gt; or &lt;code&gt;just before&lt;&#x2F;code&gt; or &lt;code&gt;quickly&lt;&#x2F;code&gt;, then be extra careful and get
some more time if possible.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>remote work and staying online</title>
        <published>2025-11-06T00:00:00+00:00</published>
        <updated>2025-11-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/chat/"/>
        <id>https://printfdebugging.in/programming/chat/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/chat/">&lt;p&gt;for a long time i have struggled with chat applications. as a remote
developer, chat is the only means of communication other than some
scheduled calls. and so i had to keep these chat applications running
in the background. if i turned on notifications on these applications
then they would just show every message sent, so that wasn&#x27;t an option.&lt;&#x2F;p&gt;
&lt;p&gt;often i closed these applications when i wanted some focus time but
then there was a part of my brain wondering about &quot;what if someone
pings me about something&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;finally i found a nice solution to the problem. i just pin tabs on
the browser and that puts them out of the way. and if someone pings
me, the pinned tabs show a dot telling me it&#x27;s time to check the chat.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;chat&#x2F;.&#x2F;assets&#x2F;chat.png&quot; alt=&quot;chat&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>tracking progress on assigned projects</title>
        <published>2025-11-01T00:00:00+00:00</published>
        <updated>2025-11-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/planning/"/>
        <id>https://printfdebugging.in/programming/planning/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/planning/">&lt;p&gt;often we are working on multple tasks at a time and we switch between
them, ask for a code review on one task and continue working on the
other. in all this to-and-fro, it&#x27;s easy to forget about some task
assigned to you, or some PR which still hasn&#x27;t been reviewed.&lt;&#x2F;p&gt;
&lt;p&gt;one can go over all the mails and lists to stay aware of what&#x27;s going
on and what&#x27;s important, but i say there&#x27;s a better way, one which
scales quite well even for large number of tasks. the idea is to have
one log file and in that have a section for each task with a rough
checklist of things which has been done and things which are in the
pipeline. very high priority tasks are at the top of the log file
while the less important ones are on the bottom side.&lt;&#x2F;p&gt;
&lt;p&gt;you can either use markdown or some other file format for it, i use
vim&#x27;s help format. whenever i commit something, or get a mail, or
chat with mentors about the task (and get some pointers), i either
cross-out some item from the list, or i add a new item to the list.
the idea is to keep this file updated with various developments.&lt;&#x2F;p&gt;
&lt;p&gt;so let&#x27;s say i am done with the first task and i asked gokay to review
it. i will add that entry to the list and then move this whole task to
the second position as then the priorities suggest that i work on the
second task till i get a review on this one.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;---------------------------------------------------------------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;[Cannot hide comments from the notebookbar &amp;gt; review tab buttons](https:&#x2F;&#x2F;example.com)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;  - [x] some cleanup suggestions&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;  - [x] the comment line is still visible for the selected comment even after toggling it off&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;  - [x] recenter the document when the comments are manually removed and none are left&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;    - [x] don&amp;#39;t show the comments or their lines when comments are hidden&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span&gt;    - [x] don&amp;#39;t move the document when there are no comments on it (stashed)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;    - [x] when all the comments are hidden and a new comment is inserted then just show all of them and adjust document margins to pull them in view&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span&gt;    - [x] when a new comment is inserted, comments are set to &amp;quot;visible&amp;quot; that triggers the callback which doesn&amp;#39;t account for offset which the document is already at, and thus keeps moving the document as we insert comments, fix this&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;    - [x] when all the comments are removed, why does the document keep moving left, where&amp;#39;s the bug?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;    - [x] why doesn&amp;#39;t the commentList.size value reflect the change in the callback when the comment is removed?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;    - [x] when document is zoomed in and a new comment is inserted, then this code should fire and adjust document to show comment or bubble the comment, currently it&amp;#39;s just half visible.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;span&gt;    - [x] test against pranam&amp;#39;s pr -&amp;gt; all ok&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;14&lt;&#x2F;span&gt;&lt;span&gt;    - [x] fix the failing unit test -&amp;gt; it passed locally&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;    - [x] check why comments are hidden when reducing the window width and fix it -&amp;gt; turns out the offset is increasing and decreasing as i resize why?. -&amp;gt; serious logical error&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;16&lt;&#x2F;span&gt;&lt;span&gt;    - [-] the comments hide when the document is resized horizontally and the tolerances are quite small -&amp;gt; turns out getSize returns int size for the map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;17&lt;&#x2F;span&gt;&lt;span&gt;    - [ ] write massive amounts of tests to freeze the feature in time&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;    + [ ] application crashes on context menu -&amp;gt; page style .uno:PageDialog&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;19&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;20&lt;&#x2F;span&gt;&lt;span&gt;---------------------------------------------------------------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;21&lt;&#x2F;span&gt;&lt;span&gt;[Notebookbarbuilder: Add checkbox + label widget](https:&#x2F;&#x2F;example.com)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;22&lt;&#x2F;span&gt;&lt;span&gt;  - [x] read some typescript documentation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;23&lt;&#x2F;span&gt;&lt;span&gt;  - [x] commit 1: JSDialogBuilder.js#L1099 -&amp;gt; separate file  control&#x2F;jsdialog&#x2F;Widget.Checkbox.js&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;24&lt;&#x2F;span&gt;&lt;span&gt;    - [x] commit 2: did some code cleanup in the original js file&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;25&lt;&#x2F;span&gt;&lt;span&gt;    - [x] commit 2 - ammend: replace var with const&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;26&lt;&#x2F;span&gt;&lt;span&gt;  - [x] commit 3: convert control&#x2F;jsdialog&#x2F;Widget.Checkbox.js -&amp;gt; control&#x2F;jsdialog&#x2F;Widget.Checkbox.ts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;27&lt;&#x2F;span&gt;&lt;span&gt;  - [x] commit 4: add type for JSON in https:&#x2F;&#x2F;github.com&#x2F;CollaboraOnline&#x2F;online&#x2F;blob&#x2F;master&#x2F;browser&#x2F;src&#x2F;control&#x2F;jsdialog&#x2F;Definitions.Types.ts and use in widget&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;28&lt;&#x2F;span&gt;&lt;span&gt;  - [x] szymon just merged this patch -&amp;gt; me should set it to draft from next time&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;29&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] add new property for firing uno command on toggle on top :) (i think this means do the same like what happens when a toggle button is clicked which then fires a command)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] add a checkbox for ruler and bind it&#x2F;make it work nicely&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;31&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] add a checkbox for grid lines and bind it&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] add a checkbox for another control (check if there are more which need this) ???&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;33&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] look out for corner&#x2F;edge cases like various places where we return if it&amp;#39;s a radiobutton or checkbox&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;34&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;35&lt;&#x2F;span&gt;&lt;span&gt;---------------------------------------------------------------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;36&lt;&#x2F;span&gt;&lt;span&gt;[Style preview: Add button that expands container (GH#12171)](https:&#x2F;&#x2F;example.com)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;37&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] read and figure out the suggestions&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;38&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] szymon said that there are some pointers&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;39&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;---------------------------------------------------------------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;41&lt;&#x2F;span&gt;&lt;span&gt;[Design Bits : Cursor does not change when hovering or resizing the handles of an object](https:&#x2F;&#x2F;example.com)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;42&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] fix the regression nicely&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;43&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] write a test for the regression fix&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;44&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;45&lt;&#x2F;span&gt;&lt;span&gt;---------------------------------------------------------------------------------------------------------------&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;46&lt;&#x2F;span&gt;&lt;span&gt;[GH#12177 Refactor and Split COOLWSD.cpp into Logical Modules](https:&#x2F;&#x2F;github.com&#x2F;CollaboraOnline&#x2F;online&#x2F;issues&#x2F;12177)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;47&lt;&#x2F;span&gt;&lt;span&gt;  - [x] pushed the first dumpWsd refactor, thanks ash and mst&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;48&lt;&#x2F;span&gt;&lt;span&gt;  - [ ] now separate out PrisonerRequestDispatcher&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;49&lt;&#x2F;span&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;all that said, one more thing remains, which is the most important in
this workflow, quick access. you should be able to open the log file
as quickly as possible, probably with just one keyborad shortcut. i
use neovim and tmux, and i have a script which opens a tmux popup
in the current tmux session with the file. this makes it quite easy to
go back-and-forth.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;#!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; GNU GPLv2, June 1991&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; Copyright (c) 2025 Sahil Gautam &amp;lt;printfdebugging@gmail.com&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; See LICENSE for full license declaration&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;dependencies&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;    t&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;    n&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;for&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; dependency&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;dependencies&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #ABB2BF);&quot;&gt;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #ABB2BF);&quot;&gt; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; which&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;dependency&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #ABB2BF);&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #ABB2BF);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #ABB2BF);&quot;&gt;&amp;gt;&amp;amp;1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;        echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;dependency&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; not found&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; exit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;15&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;done&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;17&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;18&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;tasks_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;LOGS_DIR-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;tasks_file&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;tasks_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&#x2F;tasks.txt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;21&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;tmux&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; popup&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;w&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; 100%&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;h&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; 90%&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;EE&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;cd &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;tasks_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;amp;&amp;amp; nvim &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;tasks_file&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;let&#x27;s say i am writing this blog and i want to open the tasks file, i
would just press a key-combination and this would happen. in the
second screenshot, a popup covers the terminal window and we have the
tasks file opened in it. now we can quickly edit, or quickly take a look
at what we are working on and what&#x27;s next.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;planning&#x2F;.&#x2F;assets&#x2F;terminal.png&quot; alt=&quot;terminal&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;planning&#x2F;.&#x2F;assets&#x2F;popup.png&quot; alt=&quot;popup&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>printf-debugging</title>
        <published>2025-11-01T00:00:00+00:00</published>
        <updated>2025-11-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/printfdebugging/"/>
        <id>https://printfdebugging.in/programming/printfdebugging/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/printfdebugging/">&lt;p&gt;printf-debugging is pretty useful in situations where you want to
understand the behavior of a function or a group of functions over a
certain action. in such cases, you can&#x27;t really use a debugger and
set breakpoints specially if the interaction involves cursor as the
debugger will keep breaking at the set breakpoints and you would have
to either change window focus or move your cursor to the debugger
controls.&lt;&#x2F;p&gt;
&lt;p&gt;for javascript, looking at the the logs in the console below while
interacting with the user interface elements is a nice way to see
the state of various variables in real time. though one needs to
carefully decide what they want to log and what not because these logs
pile up really fast. ideally i prefer 5-6 lines of logs per
interaction &quot;while trying to understand&#x2F;debug&quot;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>writing code with a nicely* organized* context</title>
        <published>2025-10-31T00:00:00+00:00</published>
        <updated>2025-10-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/refactoring2/"/>
        <id>https://printfdebugging.in/programming/refactoring2/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/refactoring2/">&lt;p&gt;code has a context it&#x27;s written in like the various files&#x2F;modules
it interacts with, the various cases it is triggered in and how it
handles them. code (data and data-processors == functions) moves from
an organized state towards chaos if you just keep adding code without
giving a critical thought to the context.&lt;&#x2F;p&gt;
&lt;p&gt;code readability doesn&#x27;t mean just nice&#x2F;understandable variable names.
the variable names should also represent the context in which they
are being written. the context tends to spread with time and just being
aware of this fact can help you avoid that. designing perfect code in
advance is almost impossible. in any real world setting, there are
invariants which you will know about only when you write code.&lt;&#x2F;p&gt;
&lt;p&gt;code too is written in iterations over the initial prototype and it
changes form with each commit. so the focus should be that with each
commit, the code should become more readable, readable such that when
someone new looks at that code, they get the whole picture, they
shouldn&#x27;t later find out that this code handles some edge cases which
are not obvious from the code, which are not described using comments
or the commit message.&lt;&#x2F;p&gt;
&lt;p&gt;treating data and logic separately helps with this as then you think
of the data, the logic and the context that they interact in. then
you can keep an eye at each of these and improve things with each
iteration.&lt;&#x2F;p&gt;
&lt;!-- vim:tw=70:ts=4:sw=4:et:ft=markdown:norl:iskeyword+=-,.: --&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>haste is bad, think twice before pressing any button</title>
        <published>2025-10-28T00:00:00+00:00</published>
        <updated>2025-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/haste/"/>
        <id>https://printfdebugging.in/programming/haste/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/haste/">&lt;p&gt;haste is bad for programmers, you hastily click a button and later
find that it was a mistake, you click on some other button to fix that
and you just pinged&#x2F;notified&#x2F;disturbed others (twice) cc&#x27;d on that
page.&lt;&#x2F;p&gt;
&lt;p&gt;you might delete some important data or you might configure some wrong
setting on the server which might potentially affect thousands of
users. you merge an untested patch at the last minute which might
break the release.&lt;&#x2F;p&gt;
&lt;p&gt;so think twice before performing any action. speak out what you are
about to do and ask your rubber duck &quot;is it the right thing to do&quot;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the process matters if it gets results (mostly)</title>
        <published>2025-10-28T00:00:00+00:00</published>
        <updated>2025-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/process/"/>
        <id>https://printfdebugging.in/programming/process/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/process/">&lt;p&gt;processes are important, no doubts about that. processes by themselves
mean nothing, they can&#x27;t exist in vacuum. and if a process exists for
something, some goal, some result, what&#x27;s the point if it doesn&#x27;t help
you progress towards that goal&#x2F;result.&lt;&#x2F;p&gt;
&lt;p&gt;so results matter at the end, and based on results and goals you
create processes which help you achieve them. in other words: get
stuff done.&lt;&#x2F;p&gt;
&lt;p&gt;processes are medium difficulty to design and hard to implement. so,
you only do it for things that repeat often or are system critical.
everything else better to keep organic.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>what editor you use matters!</title>
        <published>2025-10-28T00:00:00+00:00</published>
        <updated>2025-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/raw-tools-2/"/>
        <id>https://printfdebugging.in/programming/raw-tools-2/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/raw-tools-2/">&lt;p&gt;editor is a window through which the programmer looks into the world
of computers. if that window is small and translucent or very big and
transparent affects how you see the world beyond it. does the window
ask you to sit at a certain position at a certain distance to get the
best view, or does it get out of your way as soon as you start looking
through it?&lt;&#x2F;p&gt;
&lt;p&gt;neovim is a great editor, it gets out of my way as soon as i start
using it, the muscle memory kicks in and i navigate through the code
effortlessly. neovim&#x27;s &lt;code&gt;loclist&lt;&#x2F;code&gt;s lets me get a list of references for
a variable and i can travel through that list with &lt;code&gt;M-n&lt;&#x2F;code&gt; and &lt;code&gt;M-p&lt;&#x2F;code&gt;.
then if i want to preserve this list and do the same for some other
variable i found while investigating, i can do that because loclists
are window local to a tab&#x2F;window.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;raw-tools-2&#x2F;.&#x2F;assets&#x2F;loclist.png&quot; alt=&quot;loclist&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;another interesting feature is outline. instead of scrolling through
the file and reading it to find something, i can just search in the
outline and get an idea of what&#x27;s available in the file&#x2F;module. this
makes life so much easier.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;raw-tools-2&#x2F;.&#x2F;assets&#x2F;outline.png&quot; alt=&quot;outline&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>when to ask others to review your patches</title>
        <published>2025-10-28T00:00:00+00:00</published>
        <updated>2025-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/review2/"/>
        <id>https://printfdebugging.in/programming/review2/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/review2/">&lt;p&gt;reviewers are developers often busier than you :) so if you cc them
as soon as you push the patch, &quot;they can&#x27;t do anything&quot; since the ci
hasn&#x27;t finished. what if the ci fails? they will get a notification
too and they can&#x27;t do anything, and you just wasted their time.&lt;&#x2F;p&gt;
&lt;p&gt;so, ask others for a review (cc them or message them) only once the ci
passes and you want a final thumbs up from them. asking for help is
different from asking to review, if you are stuck and have exhaused
quite a few approaches, you should ask for help. see &lt;a href=&quot;&#x2F;programming&#x2F;code-reading&#x2F;&quot;&gt;reading others&#x27;
code&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>don&#x27;t stress about it too much</title>
        <published>2025-10-27T00:00:00+00:00</published>
        <updated>2025-10-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/chill/"/>
        <id>https://printfdebugging.in/programming/chill/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/chill/">&lt;p&gt;all this time i was quite unfair to myself, i treated myself like shit
and i expected things based on distorted understanding of the past and
my abilities. back then i just attempted something and i was able to
do it. the attempt was without any expectations, it was just a try, it
worked out, fine, if it didn&#x27;t work out, it would have been fine then
too.&lt;&#x2F;p&gt;
&lt;p&gt;the whole thing is &quot;if you want to do something&quot;, reasons don&#x27;t
matter, then just do it. if you are able to do it, fine. and if you
are not able to do it, then too it&#x27;s just fine, who cares. don&#x27;t
burden yourself with comparison with yourself or the other, it doesn&#x27;t
matter at the end. just find something which you like and give it a
try, a playful attempt.&lt;&#x2F;p&gt;
&lt;p&gt;that doesn&#x27;t mean it will be easy, but who said you can&#x27;t take breaks
and slow down a bit when things get difficult. just pay a little
more attention and it&#x27;s a matter of time before you understand that
difficult thing too.&lt;&#x2F;p&gt;
&lt;p&gt;having an image of yourself is the most unfair thing you can do to
yourself. you won&#x27;t understand the code at first glance, you have to
experiment and read it bit by bit and make sense out of it. you will
be more focused at sometimes and less otherwise, who cares. don&#x27;t beat
yourself over every little thing.&lt;&#x2F;p&gt;
&lt;p&gt;software as a profession needs decades of time investment before you
truely start understanding anything. and it asks that investment on a
daily basis, you have to be consistent. don&#x27;t micromanage every aspect
of the experience, just take small steps one at a time in the right
direction and things will be just fine.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>reading other&#x27;s code</title>
        <published>2025-10-23T00:00:00+00:00</published>
        <updated>2025-10-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/code-reading/"/>
        <id>https://printfdebugging.in/programming/code-reading/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/code-reading/">&lt;p&gt;often a task involves jumping into a new area in the codebase and
figuring out how the code there works, what causes the buggy behaviour
and how to fix it. here are the levels at which this is done:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;get pointers from someone who knows that area well&lt;&#x2F;li&gt;
&lt;li&gt;read the code and build a mental model&lt;&#x2F;li&gt;
&lt;li&gt;git log and see the commit-messages and diffs which added&#x2F;modified the code&lt;&#x2F;li&gt;
&lt;li&gt;ask for help :)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>only commit messages (and tests) survive the test of time</title>
        <published>2025-10-23T00:00:00+00:00</published>
        <updated>2025-10-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/commits-survive/"/>
        <id>https://printfdebugging.in/programming/commits-survive/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/commits-survive/">&lt;p&gt;commit messages and tests survive the test of time therefore should
have enough information for others to make sense. just having a good
commit title isn&#x27;t enough, include reference to the commit hashes
which this commit builds on, not the immediate parents but the distant
ones if any.&lt;&#x2F;p&gt;
&lt;p&gt;the rule of thumb is to imagine some new dev (or yourself) reading
your code in future and by then you forgot everything about the code.
the commit message and the tests should have enough information for
the reader to quickly (in reasonable time) understand what&#x27;s going on.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>push -&gt; review -&gt; rework -&gt; review cycle, the programming pipeline</title>
        <published>2025-10-23T00:00:00+00:00</published>
        <updated>2025-10-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/cycle/"/>
        <id>https://printfdebugging.in/programming/cycle/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/cycle/">&lt;p&gt;for a long time i believed my work is done as soon as i have a working
patch and i push it, it&#x27;s on the reviewers then to check it and either
push it or ask for changes. pushing the changes is only half the work.&lt;&#x2F;p&gt;
&lt;p&gt;the rest of it involves checking which patches are pending, pinging
the reviewers after a reasonable amount of time, making sure the
patches are rebased and fixing issues pointed out in the reviews.
if one isn&#x27;t paying attention, these can quickly pile up and then
it would be hard for both the reviewer and the uploader to navigate
through that pile.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>profiling code in browser</title>
        <published>2025-10-23T00:00:00+00:00</published>
        <updated>2025-10-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/profiling-web/"/>
        <id>https://printfdebugging.in/programming/profiling-web/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/profiling-web/">&lt;p&gt;browsers have a performance tab in the developer tools console.
it usually has a button which when clicked starts recording the
performance statistics, then you perform the activity and hit stop
recording.&lt;&#x2F;p&gt;
&lt;p&gt;after that it presents you a nice ui with call-trees, flame-graphcs
and screenshots. you can then find out the action which you want to
profile and look through it. you do it twice, once with your changes
and once without your chanes and see if your changes made it worst
somehow.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>writing tests for your code</title>
        <published>2025-10-23T00:00:00+00:00</published>
        <updated>2025-10-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/unit-testing/"/>
        <id>https://printfdebugging.in/programming/unit-testing/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/unit-testing/">&lt;p&gt;tests are very important, often 1 test is equivalent to 20 future bug
fixes. documentation gets outdated, comments get outdated, but tests
never get outdated. they document the behaviour and enforce it on each
change.&lt;&#x2F;p&gt;
&lt;p&gt;countless times it has happened that i pushed some code and someone
broke it. qa tagged me on that because they found my commit introduced
the now-buggy-feature. having tests ensures this never happens, when
you push a test, you are saying &quot;don&#x27;t break my code!&quot;.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>log files are better than stdout</title>
        <published>2025-10-22T00:00:00+00:00</published>
        <updated>2025-10-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/reading-errors/"/>
        <id>https://printfdebugging.in/programming/reading-errors/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/reading-errors/">&lt;p&gt;often error messages or verbose command outputs are big text walls
with densely packed information which is hard to navigate on the
stdout. redirecting it to a file and then reading that file helps as
then you can format the output, separate out important parts from
unimportant ones, save it for later review etc.&lt;&#x2F;p&gt;
&lt;p&gt;editors can be customized to highlight the keywords like &lt;code&gt;ERROR&lt;&#x2F;code&gt;,
&lt;code&gt;FAILURE&lt;&#x2F;code&gt;, the whole line with such words can be highlighted. you can
also grep out these words from the file. redirecting to a log file
makes life easy.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>focus, attention, reading and deep work</title>
        <published>2025-10-12T00:00:00+00:00</published>
        <updated>2025-10-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/focus/"/>
        <id>https://printfdebugging.in/programming/focus/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/focus/">&lt;p&gt;reading, focus, attention are quite important skills for a software
engineer to be good at. how good you are at these skills depends on
the environment more than you, choices are yours to make though.&lt;&#x2F;p&gt;
&lt;p&gt;i am back to using a single monitor instead of two because i find it
easy to focus when i have a single monitor. reading a book before
sleeping is another thing i am doing now.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>searching for help on a disfunctional internet</title>
        <published>2025-10-11T00:00:00+00:00</published>
        <updated>2025-10-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/help/"/>
        <id>https://printfdebugging.in/programming/help/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/help/">&lt;p&gt;:) internet is quite functional if you know what you want, it&#x27;s not
a safe place for the clueless wonderers, it has never been. after
gathering some basic vocubulary from the internet you should ask about
it on appropriate irc and matrix channels. after that you would have
a pretty good idea about the topic. i got a gamedev&#x2F;opengl mentor on irc.&lt;&#x2F;p&gt;
&lt;p&gt;books by far are the best place to gain deep knowledge about any topic
if you are just starting out. it can either be a traditional book or a
website like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learncpp.com&quot;&gt;learncpp.com&lt;&#x2F;a&gt; and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;learnopengl.com&quot;&gt;learnopengl.com&lt;&#x2F;a&gt;. if you want to know
about the practical usage of that knowledge, you should dive into open
source projects.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>starting the day with a list of tasks</title>
        <published>2025-10-11T00:00:00+00:00</published>
        <updated>2025-10-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/starting/"/>
        <id>https://printfdebugging.in/programming/starting/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/starting/">&lt;p&gt;same as you don&#x27;t take on the ocean without a map of the seas, you
don&#x27;t start your day as a programmer without a clear plan. the plan is
basically a text file with the list of tasks you would be working on
during the day and the timeboxes for those tasks.&lt;&#x2F;p&gt;
&lt;p&gt;so while working on those tasks, you would have a clear idea of the
progress you made that day and you would be able to adjust your pace
accordingly. while investigating or programming, one roams around the
codebase a lot and often gets lost. having such a list quickly reminds
you of the priorities. read &lt;a href=&quot;&#x2F;programming&#x2F;timeboxing&#x2F;&quot;&gt;a timer is better than a clock for timeboxing&lt;&#x2F;a&gt;
to learn about timeboxing.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>a timer is better than a clock for timeboxing</title>
        <published>2025-10-11T00:00:00+00:00</published>
        <updated>2025-10-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/timeboxing/"/>
        <id>https://printfdebugging.in/programming/timeboxing/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/timeboxing/">&lt;p&gt;timeboxing means allocating certain amount of time to work on some
specific task. while working it&#x27;s easy to get sidetracked from the
original task, so it&#x27;s important to keep asking yourself, &quot;what am
i working on now&quot;, &quot;what am i trying to achieve by working on it&quot;
&quot;what&#x27;s my approach&quot; and &quot;by working on it, am i making progress on
the task&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;don&#x27;t use a wall-clock for time tracking, it&#x27;s a distraction, instead
use a timer application like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alarm-clock-applet.github.io&#x2F;&quot;&gt;alarm-clock-applet&lt;&#x2F;a&gt; which tells you &quot;how
much time is left&quot; in this timebox. when i use a timer, i feel as
though time doesn&#x27;t exist and it&#x27;s just me in a box. clock on the other
hand introduces an overhead about what time it is now and all the
implications that awareness brings about.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>comments are better than separate file worklogs</title>
        <published>2025-10-11T00:00:00+00:00</published>
        <updated>2025-10-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/worklogging/"/>
        <id>https://printfdebugging.in/programming/worklogging/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/worklogging/">&lt;p&gt;a worklog is a journal, but for projects. you write things you found
during investigation like weird error messages, approaches which don&#x27;t
work and build a mental model of the problem on paper (a text file).
but there&#x27;s a problem with this separate file approach, it makes you
switch context quite too often and that adds overhead as you come back
and pickup from where you left.&lt;&#x2F;p&gt;
&lt;p&gt;comments solve this issue. with multiline comments, you can add as
much information as you want next to the code without any context
switch. you can number those comments to leave a trail which you can
backtrack on. it also comes in handy when you want others to look at
your code and suggest changes as you don&#x27;t have to share a separate
log file to communicate your observations and reasoning as you log
that right next to the code you change. later you can just remove the
unneccessary comments and keep the important ones.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>approaching big projects</title>
        <published>2025-10-02T00:00:00+00:00</published>
        <updated>2025-10-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/abstractions/"/>
        <id>https://printfdebugging.in/programming/abstractions/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/abstractions/">&lt;p&gt;the first stage is rapid prototyping where you build a rough
working prototype of the final project with the core functionality.
code organization should be avoided at this stage and focus should be
on exploration and implementation. this way one can avoid surprises and
find pitfalls earlier and fix them. the prototype doesn&#x27;t have to have
all the bells and whistles, the idea is to understand most of the landscape
in the least amount of time to avoid surprises later.&lt;&#x2F;p&gt;
&lt;p&gt;starting with a rigid structure is a bad idea as that sets you off in
certain direction, which works for well known problems like compilers
and regexp engines, but for more complex problems which don&#x27;t have a
clear implementation roadmap, it&#x27;s like shooting a few of your toes
off at the start of a sprint. &lt;a href=&quot;&#x2F;programming&#x2F;design-decisions&quot;&gt;delay design decisions&lt;&#x2F;a&gt;
even during the implementation stage.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>no task is easier than other</title>
        <published>2025-09-26T00:00:00+00:00</published>
        <updated>2025-09-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/easy/"/>
        <id>https://printfdebugging.in/programming/easy/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/easy/">&lt;p&gt;i think i wrote about this before, but will do again. no task is
easier than other, some take less time, some take more. i made a
similar statement recently &quot;this is easy, just a 10m task&quot; regarding a
task, and it took me quite some time to finish it. similar thing
happened with another taks in the past, i thought it&#x27;s easy and i
overlooked some details, which were caught in a code review.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>refactoring code</title>
        <published>2025-09-26T00:00:00+00:00</published>
        <updated>2025-09-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/refactoring/"/>
        <id>https://printfdebugging.in/programming/refactoring/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/refactoring/">&lt;p&gt;in &lt;a href=&quot;&#x2F;programming&#x2F;design-decisions&quot;&gt;delay design decisions&lt;&#x2F;a&gt;, we talked about not
refactoring ahead of time when you don&#x27;t know what problems lie ahead.
that was all true, but that only applies to projects in their initial
stage. this doesn&#x27;t apply to multi people projects which are past that
initial stage.&lt;&#x2F;p&gt;
&lt;p&gt;interfaces can also be used for refactoring, but it can be a little
tricky. interfaces introduce some assumptions and if the platform api
or the implementation api doesn&#x27;t conform to those assumptions, it
becomes a complex mess pretty quickly.&lt;&#x2F;p&gt;
&lt;p&gt;so if you are working on multiple projects, then note that they may
require totally different approach to things as basic as refactoring.
the rules which apply to one might not apply to other. usually asking
the question &quot;can this be improved&quot; takes you to a crossroad where you
have all the options cached into your head to decide what&#x27;s best.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>data and system security</title>
        <published>2025-09-19T00:00:00+00:00</published>
        <updated>2025-09-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/security/"/>
        <id>https://printfdebugging.in/programming/security/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/security/">&lt;p&gt;data at rest should be encrypted, i.e through disk encryption. data
which moves around should be encrypted either with a password or with
asymmetric keys. disable &lt;code&gt;sshd.service&lt;&#x2F;code&gt;, keep passwords super secret.
don&#x27;t execute any script from the internet on your system. use a password
manager to generate and store passwords.&lt;&#x2F;p&gt;
&lt;p&gt;have multiple copies of the data, with multiple git hosting providers.
private repositories aren&#x27;t private, never push plaintext secrets.
backup data at regular intervals on hard-drives, once an ssd is dead,
your data is lost forever. use open source software and get into a habbit
of reading and auditing other&#x27;s code.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>getting things done</title>
        <published>2025-09-18T00:00:00+00:00</published>
        <updated>2025-09-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/getting-things-done/"/>
        <id>https://printfdebugging.in/programming/getting-things-done/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/getting-things-done/">&lt;p&gt;it takes time. put in time and you get things done. put in little
little time in multiple places and you hardly make any progress in
any of them. if you hit a wall, ask yourself what&#x27;s the problem and
how it can be fixed. always maintain a log of what you thought and did
and what you found. initially it takes some time before things start
making any sense.&lt;&#x2F;p&gt;
&lt;p&gt;ask for help from your mentors or from devs on irc as soon as you find
you are not making any progress even after trying a few approaches. a
fragmented effort doesn&#x27;t produce much results, so make sure you are
not shifting contexts often.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>delay design decisions</title>
        <published>2025-09-15T00:00:00+00:00</published>
        <updated>2025-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/design-decisions/"/>
        <id>https://printfdebugging.in/programming/design-decisions/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/design-decisions/">&lt;p&gt;delay design decisions for as long as possible, only work on things
which you think are absolutely neccessary to make progrss. long
functions, long files are not bad specially when you are starting out.&lt;&#x2F;p&gt;
&lt;p&gt;this is good because the future you would have more context on the
problem and would be able to make wiser choices, also then the
consequences of wrong decisions would be low as you would have made
quite some progress by not building blocks and falling over them over
and over.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>search the error message on the internet</title>
        <published>2025-09-15T00:00:00+00:00</published>
        <updated>2025-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/googleit/"/>
        <id>https://printfdebugging.in/programming/googleit/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/googleit/">&lt;p&gt;some error messages like file not found can be fixed by some
investigation, other&#x27;s which are more complex can be googled. it&#x27;s
quite possible that someone else got that error and asked about
it either in some github issue or some developer forum like stack
overflow.&lt;&#x2F;p&gt;
&lt;p&gt;asking on irc&#x2F;matrix can be helpful, you get help pretty quickly on
irc&#x2F;matrix specially for errors related to languages and tools. you
can also get some good ideas as people there are quite experienced
with software and tools.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>don&#x27;t delete your code, even if you think it&#x27;s useless</title>
        <published>2025-09-06T00:00:00+00:00</published>
        <updated>2025-09-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/old-code/"/>
        <id>https://printfdebugging.in/programming/old-code/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/old-code/">&lt;p&gt;i have made this mistake over and over, if i don&#x27;t like the code, i
just delete it (or used to do so), but that&#x27;s a foolish mistake. after
learning the hard way, i found that i should store whatever piece of
code i write, in a separate git repository if it&#x27;s a neat project or
in some common dump repository. this way it will not be lost.&lt;&#x2F;p&gt;
&lt;p&gt;countless times i have needed the same piece of code and i was like
&quot;holy shit! i deleted that last week&quot;. code is an asset when you are
able to look into it and recall things, it&#x27;s a liability when it&#x27;s
running on other&#x27;s system, so in that case producing too much code is
not a good idea if you can go by in less.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>writing code top down</title>
        <published>2025-08-25T00:00:00+00:00</published>
        <updated>2025-08-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/topdown/"/>
        <id>https://printfdebugging.in/programming/topdown/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/topdown/">&lt;p&gt;the high level understanding of the problem&#x2F;code comes first. once you
have that, implementation becomes quite easy. then you go to the lower
level details like the language constructs and the apis needed for the
implementation.&lt;&#x2F;p&gt;
&lt;p&gt;while writing code we start with high level functions and break them
into smaller helper functions doing the low level stuff. we don&#x27;t mix
high level functions with low level operations. this doesn&#x27;t mean you
start out with some design or write a lot of boiler plate code. read
&lt;a href=&quot;&#x2F;programming&#x2F;design-decisions&quot;&gt;delay design decisions&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;programming&#x2F;design-decisions&quot;&gt;refactoring code&lt;&#x2F;a&gt;
to know more about design and refactoring.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>programming and questions</title>
        <published>2025-08-24T00:00:00+00:00</published>
        <updated>2025-08-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/questions/"/>
        <id>https://printfdebugging.in/programming/questions/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/questions/">&lt;p&gt;if you have questions while working, note them down in the logs, ask
later. some questions can distract you from the important issue at
hand. often staying with your questions gives you answers to them.
don&#x27;t ask questions ahead of time, they are just distractions.&lt;&#x2F;p&gt;
&lt;p&gt;for valid questions, first look for the answers yourself. if you don&#x27;t
find anything after a few attempts, ask your mentors or developers on
irc. ask one question at a time. if you have some new questions about the
answers you are getting, note them down, first let the current context
conclude.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>english for non-natives</title>
        <published>2025-08-24T00:00:00+00:00</published>
        <updated>2025-08-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/speakingstyle/"/>
        <id>https://printfdebugging.in/programming/speakingstyle/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/speakingstyle/">&lt;p&gt;speak slowly, that&#x27;s the mantra. focus on delivering what you think.
it will make through without any issues. trying too hard is the first
step to failure. small pauses while thinking are fine, everyone has to
do a word lookup, even the natives.&lt;&#x2F;p&gt;
&lt;p&gt;don&#x27;t fake the accent. i know some people who do that, and even i
can&#x27;t understand what they are saying. good people generally don&#x27;t
care about your accent as long as they hear you. there&#x27;s a vocabulary
associated with the professions, make sure to learn it. &quot;shooting
in the foot&quot; is a well known one in the c&#x2F;c++ community.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>stages in a programming pipeline</title>
        <published>2025-08-24T00:00:00+00:00</published>
        <updated>2025-08-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/stages/"/>
        <id>https://printfdebugging.in/programming/stages/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/stages/">&lt;h2 id=&quot;understanding-the-problem&quot;&gt;understanding the problem&lt;&#x2F;h2&gt;
&lt;p&gt;the first stage involves &lt;code&gt;reading&#x2F;preparation&lt;&#x2F;code&gt; before you jump
into the code. you read the ticket in this issue and take notes
about what&#x27;s the problem and what are the proposed solutions, who&#x27;s
mentoring the project etc.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rapid-prototyping&quot;&gt;rapid prototyping&lt;&#x2F;h2&gt;
&lt;p&gt;once you understand the request, the &lt;code&gt;prototyping and exploration&lt;&#x2F;code&gt;
stage starts. this involves trying different approaches and code
reading. the goal is to cover the most breadth in the least amount
of time. read &lt;a href=&quot;&#x2F;programming&#x2F;abstractions&quot;&gt;approaching big projects&lt;&#x2F;a&gt;, &lt;a href=&quot;&#x2F;programming&#x2F;worklogging&#x2F;&quot;&gt;comments are better than
separate file worklogs&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;programming&#x2F;refactoring&#x2F;&quot;&gt;refactoring code&lt;&#x2F;a&gt; to learn more. during
this stage, you sit down with your mentors and iterate on the ideas
quickly and find what works.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;refactoring-and-code-cleanup&quot;&gt;refactoring and code cleanup&lt;&#x2F;h2&gt;
&lt;p&gt;after prototyping, you fill in the imprtant details to cover the edge
cases. once that is done and all the asks were implemented, you start
refactoring the code, to make it readable read. now is the time to remove
the project log comments from the code. &lt;a href=&quot;&#x2F;programming&#x2F;review&#x2F;&quot;&gt;be the first reviewer before
pushing the changes&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;testing&quot;&gt;testing&lt;&#x2F;h2&gt;
&lt;p&gt;tests are scary but they are important. once you push the change for a
final review, you start putting together a follow-up patch with tests.
code constructs and comments can express some assumptions but code
changes over time and comments are at a risk of becoming obsolete.
tests make sure that certain assumptions hold true and they will fail
if some change far away violates those assumptions.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the importance of mentors</title>
        <published>2025-08-23T00:00:00+00:00</published>
        <updated>2025-08-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/mentor/"/>
        <id>https://printfdebugging.in/programming/mentor/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/mentor/">&lt;p&gt;early in a career in any field be it sports or programming, one needs
good mentors. mentors help you with the basics, support and correct
you when you make mistakes and keep a watch over you to not let you go
stray.&lt;&#x2F;p&gt;
&lt;p&gt;one bad programming habbit i have is that i start running ahead of
myself, i would create an empty project and start with a logger
implementation and then would ask others how do we save user events to
the disk to be able to replay them. and i haven&#x27;t rendered a single
triangle on the screen.&lt;&#x2F;p&gt;
&lt;p&gt;thanks to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nitrix.me&quot;&gt;nitrix&lt;&#x2F;a&gt; calling me a moron on #c, i realized this. i should
focus on making progress in the project and these abstractions like
logger, or classes&#x2F;structs to bundle things together should come
naturally as an after effect, i shouldn&#x27;t start with them.&lt;&#x2F;p&gt;
&lt;p&gt;as someone learning, one should learn without any fear of judgement
or disapproval. good developers often don&#x27;t sugar coat things and
sometimes it can be pointy. you are there to learn and learn from the
scoldings too, &quot;why are you being scolded&quot;, what did you do wrong?&lt;&#x2F;p&gt;
&lt;p&gt;sometimes in arguments over approaches, there is this urge to prove
your point and put the other&#x27;s argument down, don&#x27;t give into it.
always put both sides side-by-side and without bias see which one is
better, if you find other&#x27;s argument week, point it out politely.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            good mentors are gems and if you have one, find yourself lucky&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            and if you get a chance to mentor someone, find yourself lucky&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                            &amp;quot;you learn more when you teach&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>raw tools are better than clicky-cliks</title>
        <published>2025-08-22T00:00:00+00:00</published>
        <updated>2025-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/raw-tools/"/>
        <id>https://printfdebugging.in/programming/raw-tools/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/raw-tools/">&lt;p&gt;i still think clicky-cliks like vscode have a point, i recently setup
an opengl &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;printfdebugging&#x2F;learnopengl&quot;&gt;project&lt;&#x2F;a&gt; and vscode made it possible for me to forget
about the build system and the debugger, and just focus on code. i
can clone the project on windows or linux, open it in vscode and the
extensions will be automatically installed, the workspace settings
will be applied.. see &lt;code&gt;.vscode&#x2F;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;but beyond that &quot;cross platform, shared config, just code&quot; usecase,
clicky-cliks are pretty limited. i was assigned a task to add german
translations of calc functions to online notebookbar. had i been a
vscode only person, the only approaches i could have thought of would
have been &quot;do it manually for all 480 functions, one at a time&quot;, or
&quot;ask copilot&#x2F;llm to do it for me&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;the llm&#x27;s output is quite unreliable, not something which you can just
push (if you are responsible) and if i had to then verify each one,
what&#x27;s the point of using an allm in the first place.&lt;&#x2F;p&gt;
&lt;p&gt;i had a list of english functions which i previously got by printing
them from a running libreoffice (as it loaded them). to get the german
translations, i created a shell script which looped over all those
480 functions and greped them from the translations repo, i found a
pattern in the greps.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;po&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;#.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; BhqdB&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;#:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; sc&#x2F;uiconfig&#x2F;scalc&#x2F;ui&#x2F;headerfootercontent.ui:420&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgctxt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;headerfootercontent|buttonBTN_DATE|tooltip_text&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgid&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgstr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Datum&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;so then i git greped for &lt;code&gt;msgid \&quot;$enName\&quot;&lt;&#x2F;code&gt; with &lt;code&gt;-A 1&lt;&#x2F;code&gt; to include
the next line, and i wrote it to a file. it looked somewhat like this.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;po&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;..&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgid&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Pages&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgstr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Seiten&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgid&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgstr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Datum&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgid&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Time&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;msgstr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Uhrzeit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#B31D28, #FFFFFF);font-style: italic;&quot;&gt;..&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;then using neovim&#x27;s macros and find&#x2F;replace, i cleaned this up to align
every two consecutive lines. then i added the json constructs around each
line using the capture groups in neovim&#x27;s find&#x2F;replace. in the end i
had a reasonably reliable list of function names in english and german.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E06C75);&quot;&gt; en&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Pages&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E06C75);&quot;&gt; de&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Seiten&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E06C75);&quot;&gt; en&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Date&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E06C75);&quot;&gt; de&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Datum&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E06C75);&quot;&gt; en&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Time&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E06C75);&quot;&gt; de&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;Uhrzeit&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;after greping i also used &lt;code&gt;uniq&lt;&#x2F;code&gt; to remove duplicates. i had to read
the man pages while i was writing this script, and i could do both in
neovim (like this). this is why i think cli tools like neovim are far
superior to tools like vscode.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;printfdebugging.in&#x2F;programming&#x2F;raw-tools&#x2F;assets&#x2F;raw-tools-attachment-man-pages-in-neovim.png&quot; alt=&quot;man page in neovim&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;clicky-cliks are still needed as cli tools are sometimes not supported
on all the platforms, neovim and it&#x27;s clangd don&#x27;t work that well with
libreoffice on windows, half of the editor is filled with red error
markers and goto-definitions are unreliable. so in those cases, a well
configured vscode might work better. it&#x27;s important to develop muscle
memory with these raw tools so that whenever you find some non-trivial
task, you can use them and save some time and frustration.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>testing one last time</title>
        <published>2025-08-22T00:00:00+00:00</published>
        <updated>2025-08-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/testing/"/>
        <id>https://printfdebugging.in/programming/testing/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/testing/">&lt;p&gt;it&#x27;s important to test things one last time before pushing the changes
for review. often some change would break something else around it
which worked just fine before the change. if you work based on
assumptions then you would assume &quot;something works as it did&quot;, but in
reality it does not anymore. it&#x27;s a good practice to validate your
assumptions atleast once when starting the work, and once before
pushing the change.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>msys2 is amazing</title>
        <published>2025-08-19T00:00:00+00:00</published>
        <updated>2025-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/msys2/"/>
        <id>https://printfdebugging.in/programming/msys2/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/msys2/">&lt;p&gt;today i discovered msys2, thanks to a good friend who lives on #c irc
channel, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nitrix.me&quot;&gt;nitrix&lt;&#x2F;a&gt;. msys2 from my perspective is
archlinux cli on windows, the package manager is called &lt;code&gt;pacman&lt;&#x2F;code&gt;,
almost everything is available, &lt;code&gt;glfw&lt;&#x2F;code&gt;, &lt;code&gt;clang&lt;&#x2F;code&gt;, &lt;code&gt;neovim&lt;&#x2F;code&gt;, &lt;code&gt;cmake&lt;&#x2F;code&gt;,
&lt;code&gt;ansible&lt;&#x2F;code&gt;... :) everything.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>it takes time, don&#x27;t ^C immediately</title>
        <published>2025-08-19T00:00:00+00:00</published>
        <updated>2025-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/takestime/"/>
        <id>https://printfdebugging.in/programming/takestime/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/takestime/">&lt;p&gt;today i installed windows 10 in a vm and for some time the progress
bar on the installer was stuck to 0%, i thought something is wrong and
was about to press cross button but then at the last moment decided
against it, thought i should wait for a few more moments.&lt;&#x2F;p&gt;
&lt;p&gt;all the sudden the progress counter changed to 100% and i learnt this
lesson. had i pressed that button, i would have wasted quite some time
as i am sure the next time it would have taken the same time, but the
frustration would have built up. but &quot;sometimes things take time&quot; this
shouldn&#x27;t be used as an excuse for merging crappy code into master :).
so be patient but not blind, blind to obvious problems.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>look around the code you are editing</title>
        <published>2025-08-14T00:00:00+00:00</published>
        <updated>2025-08-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/lookaround/"/>
        <id>https://printfdebugging.in/programming/lookaround/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/lookaround/">&lt;p&gt;sometimes you are blinded by your understanding of the problem, your
mental model. therefore one must ask others for code review to see if
what you think is indeed the best solution or if there&#x27;s something
obviously wrong with it which you aren&#x27;t able to see.&lt;&#x2F;p&gt;
&lt;p&gt;sometimes the answer is in the code around the lines you are working
so make sure that you look around, read a few function declarations
above and below and see how things are done there, if it has anything
which you can reuse, some better way of doing things. sometimes it&#x27;s
not &quot;obvious&quot; so read diligently.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>logging macros and programming</title>
        <published>2025-08-13T00:00:00+00:00</published>
        <updated>2025-08-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/logging/"/>
        <id>https://printfdebugging.in/programming/logging/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/logging/">&lt;p&gt;recently i happened to write some code which i think was beautiful,
not because the code had something special about it, but the logging
macros were a sight to behold. they make the code rock solid, if
logging is on and the condition fails, it would be logged on the
stderr, or to a file making it much easier for the developers to find
what&#x27;s wrong. they won&#x27;t have to spend time to find where the issue
is.&lt;&#x2F;p&gt;
&lt;p&gt;this reminds me of the verbose switch, a developer should include a
verbose flag in their logger implementation so that enabling various
levels of logging is a piece of cake, both for other developers and
the users of the software.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;cpp&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;case&lt;&#x2F;span&gt;&lt;span&gt; SID_NAVIGATOR_SELECT_COMMENT:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; SfxPoolItem&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; pItem&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;pArgs &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; pArgs&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;HasItem&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;FN_PARAM_1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;pItem&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span&gt;        OUString aCommentString &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #ABB2BF);&quot;&gt; static_cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; SfxStringItem&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;pItem&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;GetValue&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span&gt;SfxChildWindow&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; pWin &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt; GetViewFrame&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;GetChildWindow&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;SID_NAVIGATOR&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span&gt;        {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span&gt;            SwNavigatorWin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; pNavWin &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #ABB2BF);&quot;&gt; static_cast&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;SwNavigatorWin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;pWin&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;GetWindow&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;pNavWin&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;m_xNavi&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; pNavWin&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;m_xNavi&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;m_xContentTree&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;                pNavWin&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;m_xNavi&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;m_xContentTree&lt;&#x2F;span&gt;&lt;span&gt;-&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;BringCommentToAttention&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;aCommentString&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;        }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;        else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;            SAL_WARN&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;sw.ui&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;GetChildWindow(SID_NAVIGATOR) == nullptr&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;17&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;        SAL_WARN&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;sw.ui&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;failed to extract FN_PARAM_1 i.e. CommentNumber&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;18&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;break&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;21&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;    assert&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;false&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;wrong request method&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;22&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    break&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>don&#x27;t stop at just one change</title>
        <published>2025-08-11T00:00:00+00:00</published>
        <updated>2025-08-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/seniordev02/"/>
        <id>https://printfdebugging.in/programming/seniordev02/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/seniordev02/">&lt;p&gt;senior developers don&#x27;t stop at just one patch in the area. they send
patches from one area in dozens, each building over the previous, or
maybe not. this might be because they notice problems as they go over
the code and then as a consequence end up writing a lot of patches to
fix those.&lt;&#x2F;p&gt;
&lt;p&gt;simply put, be interested in the code around the change, don&#x27;t just be
focused on fixing the issue at hand and you would build insights over
time. an easy way is to zoom out at the mental model of the code you
just worked on, and push the boundaries of that model just a little
beyond the known region.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>read others code and review their patches</title>
        <published>2025-08-10T00:00:00+00:00</published>
        <updated>2025-08-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/seniordev01/"/>
        <id>https://printfdebugging.in/programming/seniordev01/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/seniordev01/">&lt;p&gt;i have noticed that senior&#x2F;experienced developers don&#x27;t shy away from
poking into other&#x27;s patches. this is a great habbit to inculcate as
you keep yourself updated with the changes happening in the codebase.
you would pick up good habbits as you read others patches. this down
the road would save you a lot of time in reviews.&lt;&#x2F;p&gt;
&lt;p&gt;you then know who worked on what yesterday and whom to talk to about
certain areas of the codebase. reading patches and asking quesions
also helps improve the code quality and it is a nice social thing in
itself.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the book printing episode</title>
        <published>2025-08-02T00:00:00+00:00</published>
        <updated>2025-08-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/books/"/>
        <id>https://printfdebugging.in/programming/books/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/books/">&lt;h1 id=&quot;the-problem&quot;&gt;the problem&lt;&#x2F;h1&gt;
&lt;p&gt;over time i found quite a few programming books which i wanted to
read, books like &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;web.mit.edu&#x2F;6.001&#x2F;6.037&#x2F;sicp.pdf&quot;&gt;sicp&lt;&#x2F;a&gt;. but these books were quite expensive online,
sicp was listed on amazon around ₹4400&#x2F;€44&#x2F;$51. printing it myself
would cost me ₹800 which is a steal of a deal.&lt;&#x2F;p&gt;
&lt;p&gt;but there was one issue, the lisp code is synatx highlighted i.e. when
printed in grayscale, the readability is compromised. i searched on
the internet &quot;how to convert a colored pdf to a black-and-white pdf&quot;
and the results weren&#x27;t that useful. it wasn&#x27;t that simple, but since
i am not an average computer user, i saw an opportunity.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;putting-it-together&quot;&gt;putting it together&lt;&#x2F;h1&gt;
&lt;p&gt;i found &lt;code&gt;pdftoppm&lt;&#x2F;code&gt; which could convert the pages of the pdf file into
images and &lt;code&gt;imagemagick&lt;&#x2F;code&gt; which could transform the appearance of the
images and put them back into a pdf file. after reading imagemagick
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;imagemagick.org&#x2F;&quot;&gt;wiki&lt;&#x2F;a&gt; for quite some time, i found a few options which gave me
exactly what i wanted.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;magick&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; $&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_file&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;    -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;colorspace&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; Gray&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;    -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;level&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; 40%,100%&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;    -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;gravity&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; Center&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;    -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;crop&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; 90x90%+0+0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;    +repage&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;    $&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;output_file&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;this converts the image to grayscale and increases the contrast
deepening the blacks, crops the extra margin space giving us a zoomed
in image.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;automating-things-with-a-makefile&quot;&gt;automating things with a makefile&lt;&#x2F;h1&gt;
&lt;p&gt;a makefile is basically an evolved shell script, it can do everything
which a shell script can do, but in a makefile one can define the
relationships between sources and targets and this with the &lt;code&gt;-j&lt;&#x2F;code&gt; flag
exponentially speeds up things.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;make&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;SHELL&lt;&#x2F;span&gt;&lt;span&gt;       =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf&lt;&#x2F;span&gt;&lt;span&gt;   =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; sicp.pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;output_pdf&lt;&#x2F;span&gt;&lt;span&gt;  =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; sicp_converted.pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;page_count&lt;&#x2F;span&gt;&lt;span&gt;  =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;shell&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; pdfinfo &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; | awk &amp;#39;&#x2F;^Pages:&#x2F; &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;print &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;$2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&amp;#39; | sed &amp;#39;s&#x2F;Pages:&#x2F;&#x2F;;s&#x2F; &#x2F;&#x2F;g&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf_images_dir&lt;&#x2F;span&gt;&lt;span&gt;  		=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;_original&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;converted_pdf_images_dir&lt;&#x2F;span&gt;&lt;span&gt; 	=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;_converted&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;original_images&lt;&#x2F;span&gt;&lt;span&gt; 	=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;foreach&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; page_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;shell&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; seq -w 1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;page_count&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;shell&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; echo &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;page_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;.png&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;converted_images&lt;&#x2F;span&gt;&lt;span&gt; 	=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;patsubst&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;.png&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;converted_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt;%&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;.png&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;original_images&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;sorted_images_list&lt;&#x2F;span&gt;&lt;span&gt; 	=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;sort&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;converted_images&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;all&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; pdf_to_images create_converted_pdf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;14&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;15&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;pdf_to_images&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;	mkdir -p &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;17&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;	pdftoppm &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; -pn&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;g&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;18&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;original_images&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; : pdf_to_images&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;21&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;create_converted_pdf&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;converted_images&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;22&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;	magick &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;sorted_images_list&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;output_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;23&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;24&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;converted_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;&#x2F;%.png : &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;&#x2F;%.png&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;	mkdir -p &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt; $@&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;26&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;	magick &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;$&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;27&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;		-colorspace Gray &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;28&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;		-level 40%,100% &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;29&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;		-gravity Center &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;30&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;		-crop 90x90%+0+0 &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;31&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;		+repage &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #56B6C2);&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;32&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;		$@&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;33&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;34&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;clean&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;35&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;	rm -rf &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;output_pdf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;input_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;converted_pdf_images_dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#032F62, #98C379);&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;there&#x27;s a lot of room for improvement, currently we convert the
whole pdf to images in &lt;code&gt;pdf_to_images:&lt;&#x2F;code&gt;, one could break that into
individual step where the original image is generated on the fly so
that we can run that on multiple threads and speed up things.&lt;&#x2F;p&gt;
&lt;p&gt;but this would take some time, some other day :).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>levels of abstractions (functions)</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/abstractions2/"/>
        <id>https://printfdebugging.in/programming/abstractions2/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/abstractions2/">&lt;p&gt;what the function does should be apparent from the function, variable
and struct names. low level functionality should be separated out into
functions so that when someone is reading a high level function, they
have a choice of diving into details (i got that from clean code.
there can be exceptions to this but generally i like this approach).&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>bad critics should be dealt with</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/critics/"/>
        <id>https://printfdebugging.in/programming/critics/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/critics/">&lt;p&gt;critiques are good, they help you improve, but not all critiques are
good, and for those bad ones, one needs to stand for their opinions.
these critiques don&#x27;t provide any solid reasoning in their comments,
just say &quot;i don&#x27;t like it&quot;, &quot;i don&#x27;t agree&quot;, &quot;i am against it&quot;, or
they use too many words which conveny almost nothing.&lt;&#x2F;p&gt;
&lt;p&gt;good ones tell you &quot;why they dislike the idea&quot; and what they consider
a better approach&#x2F;solution.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>reading error messages carefully</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/errors/"/>
        <id>https://printfdebugging.in/programming/errors/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/errors/">&lt;p&gt;often error messages are quite long and it&#x27;s a hunt to find the
useful ones. redirecting the log&#x2F;errors to a log file is one possible
solution. even then it takes patience and quite some scrolling before
you get to the important part. the editor can highlight keywords like
&lt;code&gt;ERROR&lt;&#x2F;code&gt; or &lt;code&gt;FAILURE&lt;&#x2F;code&gt; to help spot the hotspots.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the natural way of expressing things</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/expression/"/>
        <id>https://printfdebugging.in/programming/expression/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/expression/">&lt;p&gt;each function or logical block of code has a direction, it calls some
functions on objects, gets some data, operates on that data. there are
multiple ways of expressing this flow, not all being good.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gerrit.libreoffice.org&#x2F;c&#x2F;core&#x2F;+&#x2F;188621&quot;&gt;this&lt;&#x2F;a&gt; commit demonstrates it pretty well, instead of checking &lt;code&gt;if (vUrls.empty())&lt;&#x2F;code&gt; and returning, we check for the favourible case and
thus connect the logical chain with the previous statement i.e. &lt;code&gt;get the urls&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;if not empty, open them all&lt;&#x2F;code&gt;. when written the bad way,
it reads like &lt;code&gt;get the urls&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;return if empty&lt;&#x2F;code&gt; -&amp;gt; &lt;code&gt;if not empty, open them all&lt;&#x2F;code&gt;, there`s redundent logic in this chain of thought.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>when learning to program</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/learning/"/>
        <id>https://printfdebugging.in/programming/learning/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/learning/">&lt;p&gt;150-200 page books are a good place to start. man pages are ok for
cli tools but for bigger tools and languages, one needs a good book.
after gaining some experience, one might want to dive deep into the
specification to learn more about the system.&lt;&#x2F;p&gt;
&lt;p&gt;and it takes time. programming skills don&#x27;t compound if you keep
switching context on a weekly&#x2F;monthly basis. you have to do one
thing for years to get good at it. and it takes long sittings at a
time. constant context switching isn&#x27;t helpful, you gain some insights
only when you spend some time with the problem.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>add nice screenshots to the patches</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/screenshots/"/>
        <id>https://printfdebugging.in/programming/screenshots/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/screenshots/">&lt;p&gt;when pushing ui changes, it&#x27;s very very important that we add the
screenshots along with the change. that way it becomes very easy
for the reviewers as they know what to look for while testing,
often issues are directly visible in the screenshots, so the
review-rework-push cycle moves quickly.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>shiny object syndrome</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/shiny/"/>
        <id>https://printfdebugging.in/programming/shiny/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/shiny/">&lt;p&gt;in disciplines like programming where you don&#x27;t have a clearly laid
out plan, it&#x27;s quite easy to pick up 10 things on the way and jump
from one to the other every other day and waste a lot of time doing
this.&lt;&#x2F;p&gt;
&lt;p&gt;one must ask themselves what they are after, what they want to achieve
by doing one thing or the other and then focus on one thing at a time,
on the thing which makes the most sense at the moment.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>project planning and time management</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/time/"/>
        <id>https://printfdebugging.in/programming/time/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/time/">&lt;p&gt;proper planning is the most important part of any project, you keep
track of the most important resource i.e. time. weekly milestones help
with this, you know where you want to be at the end of this week and
therefore you know how to spend the time you have. this way you are
not shooting arrows in the dark and have a roadmap.&lt;&#x2F;p&gt;
&lt;p&gt;planning is not easy, you can over estimate your abilities and
add too much to your plate. so having a reasonable free buffer is
also important so that you have some time to be creative with your
approach, some wiggle room for possibilities.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>programming verbally and thinking with language constructs</title>
        <published>2025-07-31T00:00:00+00:00</published>
        <updated>2025-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/verbally/"/>
        <id>https://printfdebugging.in/programming/verbally/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/verbally/">&lt;p&gt;programming is an active process, you speak out what you see in your
head. just looking at the code is not enough to get things done in
reasonable time, you got to have a systematic approach. the processing
has to be on the conscious mind, not the subconscious. after a few hours
of verbal investigation, you understand what&#x27;s going on.&lt;&#x2F;p&gt;
&lt;p&gt;this is specially relevant when you are dealing with a large codebase.
&lt;a href=&quot;&#x2F;programming&#x2F;worklogging&#x2F;&quot;&gt;comments are better than separate file worklogs&lt;&#x2F;a&gt;. a worklog helps you
externalize the mental model so that you can pick up where you left
the last time. an important use of worklog is hierarchies, parent-child
hierarchies and relationships of types with the others. so you add the
type to your hierarchy as you go on reading and at the end you have a
pretty clear picture of how things are laid out.&lt;&#x2F;p&gt;
&lt;p&gt;while reading code, pay special attention to the types, and ask
yourself why is this type passed into this function, or in that
class&#x27;s constructor. why this parent class instance keeps a reference
to the child etc. these help you build a mental model. thinking
in terms of functionality instead of parent-child terms helps as
parent-child analogy is just a language construct for who has what
functionality, code is always in terms of functionality.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>chatbots are not tools, just a search engine at best</title>
        <published>2025-07-30T00:00:00+00:00</published>
        <updated>2025-07-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/chatbots/"/>
        <id>https://printfdebugging.in/programming/chatbots/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/chatbots/">&lt;p&gt;chatbots are not tools, most of the times they are black boxes
controled by big companies. they aren&#x27;t reliable and to write
something usable, it takes more time to fix the code written by a
chatbot than writing it yourself from scratch.&lt;&#x2F;p&gt;
&lt;p&gt;the worst part is that you don&#x27;t have any control over their pricing,
the quality of results they produce and the algorithm working behind
the scenes.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>manpages and documentation are the original sources</title>
        <published>2025-07-30T00:00:00+00:00</published>
        <updated>2025-07-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/manpages/"/>
        <id>https://printfdebugging.in/programming/manpages/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/manpages/">&lt;p&gt;man pages and documentation are the original sources of knowledge on
any tool or language. good documentation involves tutorials to get one
used to the tool. then there are some good books on the topic.&lt;&#x2F;p&gt;
&lt;p&gt;manpages, documentation and books can be outdated though. so it&#x27;s
important to read them with a grain of salt and if something doesn&#x27;t
match then looking at the code is the next best step. looking at
code (eg: oss projects) comes in quite handy when learning some new
language or library as it takes you beyond the tutorial.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>better tools exist, the cli ones</title>
        <published>2025-07-30T00:00:00+00:00</published>
        <updated>2025-07-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/tools/"/>
        <id>https://printfdebugging.in/programming/tools/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/tools/">&lt;p&gt;cli tools are better than gui tools (generally) as they are way more
extensible and they don&#x27;t change much over time. cli tools can be
cobbled together to accomplish some complex task. open source tools
are better than propriatery tools.&lt;&#x2F;p&gt;
&lt;p&gt;since they don&#x27;t change over time, you are less likely to face any
hinderance in your workflows. cli tools often provide qutie powerful
mechanisms (like vim macros) and complex tasks become quite simple
when you utilize these mechanisms.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>i love unit tests and code reviews</title>
        <published>2025-07-29T00:00:00+00:00</published>
        <updated>2025-07-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/tests/"/>
        <id>https://printfdebugging.in/programming/tests/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/tests/">&lt;p&gt;unit tests don&#x27;t just save me from extra work on regressions
introduced by someone else&#x27;s changes somewhere, they also help the
other developers find bugs in their code. now when unit tests fail on
my code, i am thankful that someone wrote that test or else the bug
might have slipped into the code unnoticed.&lt;&#x2F;p&gt;
&lt;p&gt;not to undermine the role reviewers have in making sure that the
code isn&#x27;t sloppy or missing some edge case somewhere. i learn
from reviewers (senior devs) the way to think about edge cases and
potential bugs, how to find them and squash them.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>sometimes old way is the best way</title>
        <published>2025-07-29T00:00:00+00:00</published>
        <updated>2025-07-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/the-old-way/"/>
        <id>https://printfdebugging.in/programming/the-old-way/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/the-old-way/">&lt;p&gt;some problems are complex and comments and class hierarchy on a text
file might not be enough to understand the problem. a text file allows
you to write only in two directions, up or down.&lt;&#x2F;p&gt;
&lt;p&gt;paper on the other hand provides you four dimentions and more
expressibility. you can draw boxes, arrows from one thing to the other
and illustrations. some problems require a more expressive medium than
just thought and a text file, and nothing beats the good old
paper-pencil combo at that.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>thinking of software and ux from the users&#x27; perspective</title>
        <published>2025-07-29T00:00:00+00:00</published>
        <updated>2025-07-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/users/"/>
        <id>https://printfdebugging.in/programming/users/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/users/">&lt;p&gt;as a developer, it&#x27;s quite important to not design things for yourself
but for the users. the term users covers a vast demographic from ones
who are quite good at computers to the ones who don&#x27;t have any idea about
computers and are trying to understand what all the options in the
user interface mean.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>real world bugs are not so simple</title>
        <published>2025-07-28T00:00:00+00:00</published>
        <updated>2025-07-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/bugs/"/>
        <id>https://printfdebugging.in/programming/bugs/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/bugs/">&lt;p&gt;some of these bugs don&#x27;t show up when testing with a dummy document,
or testing in a developer environment. these bugs are quite hard to
reproduce. other bugs might trigger in certain conditions on only
certain systems.&lt;&#x2F;p&gt;
&lt;p&gt;bit flags cause quite some headaches specially in languages like
c and c++ which don&#x27;t even complaint about such errors. types are
another concern in such languages as you can often use wrong type like
equating&#x2F;assigning to&#x2F;from different sized integers. these are also a
nightmare to debug.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the risks of copy pasting code</title>
        <published>2025-07-28T00:00:00+00:00</published>
        <updated>2025-07-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/copy-paste-errors/"/>
        <id>https://printfdebugging.in/programming/copy-paste-errors/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/copy-paste-errors/">&lt;p&gt;every now and then you might copy some code from here and paste it
there forgetting to update to pasted code and the worst thing is that
it might still work :).&lt;&#x2F;p&gt;
&lt;p&gt;then you get to know about this in production. worst when someone else
pushes a patch titled copy paste error and adds you as the reviewer,
have been there myself, not a good place to be in.&lt;&#x2F;p&gt;
&lt;p&gt;if you have such copy-paste errors in your code, that means that you
are not reading the code properly. one should first go through the
code token by token and only as they parse the token in their head,
they should think of it&#x27;s high level meaning and where it fits in the
mental model.&lt;&#x2F;p&gt;
&lt;p&gt;while parsing each token, ask yourself, is this the right token? does
this belong here? is it used correctly? and based on that decide
whether a token should be there or should be removed. this should be
done while writing the code, while copy-pasting code and while code
reviewing.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>don&#x27;t get lost in the surrounding code</title>
        <published>2025-07-28T00:00:00+00:00</published>
        <updated>2025-07-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/surrounding-code/"/>
        <id>https://printfdebugging.in/programming/surrounding-code/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/surrounding-code/">&lt;p&gt;there are a lot of classes around the code that you are trying to
debug and understand, and it&#x27;s easy to get sidetracked by going to
definition of class after class and digging into the specifics.&lt;&#x2F;p&gt;
&lt;p&gt;therefore one should make their way through the code to the core of
the problem, to the code which is causing the issue and then expand
from there as much as required. setting the right breakpoints helps,
using conditional breakpoints and printf statements helps. if it&#x27;s a
crash then stack traces tell exactly where you should set the first
breakpoint.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the verbose switch</title>
        <published>2025-07-28T00:00:00+00:00</published>
        <updated>2025-07-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/verbose-switch/"/>
        <id>https://printfdebugging.in/programming/verbose-switch/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/verbose-switch/">&lt;p&gt;every program has some kind of verbose switch, specially those which
run as daemons&#x2F;clients&#x2F;listeners. it enables various levels of
logging which helps us understand what&#x27;s actually going on and fix our
issues.&lt;&#x2F;p&gt;
&lt;p&gt;while writing your own programs, it&#x27;s quite important to add such log
statements at key points such as conditionals and data state check
points so that if anything goes wrong, the users of your program get
to know exactly what&#x27;s going on.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>self documenting code is a lie, write comments!</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/comments/"/>
        <id>https://printfdebugging.in/programming/comments/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/comments/">&lt;p&gt;comments should explain why the code is this way. this helps the
readers of the code quickly get clues about what is going on so that
they don&#x27;t have to goto the definition of each call and figure things
out. header files should have doxygen comments to describe the api
and the internals of a struct like why it exists.&lt;&#x2F;p&gt;
&lt;p&gt;here are a few code snippets from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ghemawat&quot;&gt;sanjay ghemawat&lt;&#x2F;a&gt;&#x27;s (a well known
google enginner) code, one can read the code with comments like prose.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;go&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; findfilter is a filter that produces matching nodes under a filesystem&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; directory.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt; findfilter&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; struct&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;    dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;       string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;    ifmode&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    func&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt;os&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt;filemode&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; bool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;    skipdirif&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; func&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; bool&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; find returns a filter that produces matching nodes under a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; filesystem directory. the items yielded by the filter will be&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; prefixed by dir. e.g., if dir contains subdir&#x2F;file, the filter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; will yield dir&#x2F;subdir&#x2F;file. by default, the filter matches all types&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; of files (regular files, directories, symbolic links, etc.).&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; this behavior can be adjusted by calling findfilter methods&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;15&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A737D, #7F848E);&quot;&gt; before executing the filter.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;func&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt; find&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;dir&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt;findfilter&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;17&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt;findfilter&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;18&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;        dir&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;       dir&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;        ifmode&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    func&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt;os&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt;filemode&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; bool&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;        skipdirif&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; func&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#E36209, #E06C75);&quot;&gt;d&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; bool&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; return&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; false&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;21&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;22&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>the art of writing commit messages</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/commit-messages/"/>
        <id>https://printfdebugging.in/programming/commit-messages/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/commit-messages/">&lt;p&gt;the commit message should be clean and to the point. it should not
include any text walls which might make it hard for the reader to
distinguish useful information from some text that you thought would
be nice there.&lt;&#x2F;p&gt;
&lt;p&gt;write everything that (you or) your fellow developer from future
should know about the code you are pushing, when they git blame and
read the commit message, they should get the whole technical and
design story of that change.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>push changes in a series of clean atomic commits</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/commits/"/>
        <id>https://printfdebugging.in/programming/commits/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/commits/">&lt;p&gt;each patch&#x2F;commit that you create should do just one thing and
shouldn&#x27;t do anything else. avoid unneccessary formatting changes and
cleanups in the middle of a feature commit as they just introduce
noise to the patch making it harder to review.&lt;&#x2F;p&gt;
&lt;p&gt;when someone is reviewing your patch, they don&#x27;t know anything about
it, so they have to load your-change into their head and make sense
out of it and when they find that they loaded formatting changes, they
have to take it out which impedes the process of reviewing.&lt;&#x2F;p&gt;
&lt;p&gt;each commit should fix a subproblem and should be created as you fix
that subproblem. this way you don&#x27;t have a lot of uncommited code at
later stages and thus avoid the risk of breaking something and not
knowing what broke, sure you can figure out, but that wastes time.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>don&#x27;t write many conditions inside the conditional</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/conditionals/"/>
        <id>https://printfdebugging.in/programming/conditionals/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/conditionals/">&lt;p&gt;often we find ourselves in situations where we are have many
conditions with &lt;code&gt;==&lt;&#x2F;code&gt; and &lt;code&gt;!=&lt;&#x2F;code&gt; and &lt;code&gt;&amp;amp;&amp;amp;&lt;&#x2F;code&gt; and &lt;code&gt;||&lt;&#x2F;code&gt; in various
combinations. in such cases we should refactor the code and create
boolean variables out of those conditions and then put those boolean
variables in the conditionals. this makes the code much more readable.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#24292E, #ABB2BF); background-color: light-dark(#FFFFFF, #282C34);&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;private&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt; adjustDocumentMarginsForComments&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;onZoomOrResize&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;boolean&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt; commentSection&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt; app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;sectionContainer&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;getSectionWithName&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;        app&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;CSections&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;CommentList&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;    )&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; as&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt; cool&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #E5C07B);&quot;&gt;CommentSection&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 6&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt; cursorAtComment&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;        commentSection&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;sectionProperties&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;selectedComment&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 8&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt;        !&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;commentSection&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;sectionProperties&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;selectedComment&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;isEdit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt; 9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;10&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;onZoomOrResize&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt; cursorAtComment&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;11&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;        commentSection&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;unselect&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;12&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;13&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;14&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt; commentsHiddenOrNotPresent&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;15&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;        commentSection&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;sectionProperties&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; ||&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;16&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;        commentSection&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;sectionProperties&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E5C07B);&quot;&gt;commentList&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E06C75);&quot;&gt;length&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;17&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;18&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;commentsHiddenOrNotPresent&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;19&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;        this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;recenterDocument&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;20&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;21&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;22&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;23&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;documentCanMoveLeft&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;24&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;        this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;documentScrollOffset&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt; this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;documentMoveLeftByOffset&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;25&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;        this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6F42C1, #61AFEF);&quot;&gt;scrollHorizontal&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;documentScrollOffset&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;26&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; else&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #C678DD);&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;onZoomOrResize&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;27&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #E5C07B);&quot;&gt;        this&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#24292E, #E06C75);&quot;&gt;documentScrollOffset&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#D73A49, #56B6C2);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#005CC5, #D19A66);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;28&lt;&#x2F;span&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;giallo-ln&quot; style=&quot;color: light-dark(#1B1F234D, #495162);&quot;&gt;29&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;this typescript code is quit readable, the boolean variables which are
later used in the conditionals give meaning to the bunch of conditions
themselves and thus we don&#x27;t need comments there to describe what the
conditional is there for or what the conditions represent.&lt;&#x2F;p&gt;
&lt;p&gt;there is no crouding in one place. had these conditions been placed
directly in the conditionals, the could would have been messy and
hard to understand as one wouldn&#x27;t know what those conditions and
conditionals represent without some doing digging themselves.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>decoupling data from the processing logic</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/data-and-code/"/>
        <id>https://printfdebugging.in/programming/data-and-code/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/data-and-code/">&lt;p&gt;you have data, some of it is global i.e. the application state and
some of it is local to modules or functions. some functions process
the data changing it form one consistant state to another and produce
no side-effect, while others produce side-effects based on the input
data. no function should do both of them together. we are not talking
about constructors here.&lt;&#x2F;p&gt;
&lt;p&gt;this is relevant at the cleaning-up stage, not at the prototyping
stage where the soul focus should be on exploring hidden corners and
implementation details instead of building abstractions. read
&lt;a href=&quot;&#x2F;programming&#x2F;refactoring&#x2F;&quot;&gt;refactoring code&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;programming&#x2F;stages&quot;&gt;stages in a programming pipeline&lt;&#x2F;a&gt; to know more.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>good code vs bad code (and documentation)</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/examples/"/>
        <id>https://printfdebugging.in/programming/examples/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/examples/">&lt;p&gt;good code is very descriptive about itself, it doesn&#x27;t present a
fragmented context&#x2F;model of the problem to the reader but tries to
fill in as many details as possible, either through comments or by
using code constructs which make that aspect of the mental model
&#x27;obvious&#x27; at first look.&lt;&#x2F;p&gt;
&lt;p&gt;the reader knows at the first look where to go next. enums and data
structures are one way to do it, proper naming of functions and
structures help quickly understand what data is being transformed in
what way. but most of the code out there is not that good, some of it
is written by me ;).&lt;&#x2F;p&gt;
&lt;p&gt;documentation and manpages should have minimal examples so that the
users of the program&#x2F;library have something to hold on to. maybe this
is what a tutorial is supposed to do. i hate man pages without any
examples at the end.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>you own the code you write, thus are responsible for it</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/ownership/"/>
        <id>https://printfdebugging.in/programming/ownership/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/ownership/">&lt;p&gt;this applies to a &lt;code&gt;junior++ &amp;amp;&amp;amp; senior--&lt;&#x2F;code&gt; developer. during a project
there are a lot of moments which pivit the direction of development,
be it changes in the proposed interface layout, or some additional
feature&#x2F;mechanism which aren&#x27;t that simple.&lt;&#x2F;p&gt;
&lt;p&gt;taking input&#x2F;suggestions is nice but at the end you must decide for
yourself whether you want to follow those suggestions or not. because
at the end, you have to implement it and maintain it. having realistic
proposals and verifying their validity before starting the work is a
nice way to avoid such issues later down othe road. that said, things can
be incrementally added, one at a time.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>be the first reviewer before pushing the changes</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/review/"/>
        <id>https://printfdebugging.in/programming/review/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/review/">&lt;p&gt;before pushing the patch, review it yourself both the small change
that you just made and where it stands in the long series of changes
or in relation to the change you are going to ammend it to. often
it happens that an ammend voids the previously added comments and
assumptions in code, so they need to be updated. then question every
single line as if it&#x27;s not your code and then push and ask someone
else to review it.&lt;&#x2F;p&gt;
&lt;p&gt;you are responsible for the changes you push therefore you should do
the most amount of work to see that it&#x27;s correct. pushing changes
carelessly, expecting someone else to correct you shows how involved
you are in the process.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>complexity and clever solutions come back to bite you</title>
        <published>2025-07-26T00:00:00+00:00</published>
        <updated>2025-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://printfdebugging.in/programming/simple/"/>
        <id>https://printfdebugging.in/programming/simple/</id>
        
        <content type="html" xml:base="https://printfdebugging.in/programming/simple/">&lt;p&gt;clever solutions are often complex and therefore only a few understand
them. thus other devs might change the code around your complex
solution and the whole thing might fall apart. thus it becomes a
maintainance nightmare.&lt;&#x2F;p&gt;
&lt;p&gt;good reviewers usually don&#x27;t approve such changes, or if they don&#x27;t
oppose it, their reluctance to push it is quite clear. code is not an
asset, it&#x27;s a liability, and i don&#x27;t remember the exact implementation
details of projects i implemented an year ago. so keep it simple and
you would thank yourself.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
