<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Untitled Publication]]></title><description><![CDATA[Untitled Publication]]></description><link>https://semigrp.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 16:51:02 GMT</lastBuildDate><atom:link href="https://semigrp.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The 'Chi' in 'Muchi-Muchi.' - On the Pursuit of Knowledge]]></title><description><![CDATA[1. The Challenge of the Unknown
In today's world, overflowing with information and witnessing daily technological innovations, we find ourselves navigating a vast digital ocean. Engineers set sail into this expansive sea, continually challenging them...]]></description><link>https://semigrp.hashnode.dev/the-chi-in-muchi-muchi-on-the-pursuit-of-knowledge</link><guid isPermaLink="true">https://semigrp.hashnode.dev/the-chi-in-muchi-muchi-on-the-pursuit-of-knowledge</guid><category><![CDATA[learning]]></category><dc:creator><![CDATA[Seiichiro Furuya]]></dc:creator><pubDate>Fri, 11 Oct 2024 10:50:48 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-1-the-challenge-of-the-unknown">1. The Challenge of the Unknown</h2>
<p>In today's world, overflowing with information and witnessing daily technological innovations, we find ourselves navigating a vast digital ocean. Engineers set sail into this expansive sea, continually challenging themselves in search of new knowledge and technologies. However, recognizing and confronting one's own "ignorance" during this voyage is no easy feat. It requires the courage to pursue unknown truths, much like how Copernicus and Galileo once advocated for heliocentrism, standing against established norms.</p>
<p>In this article, we will unravel the narrative of this journey into the unknown, explore the profound concept of <strong>"Muchi-Muchi no Chi"</strong> (the knowledge of unknowing unknowing), and examine <a target="_blank" href="https://knotix.vercel.app/search">Knotix</a>, the compass that guides us toward it. Through this exploration, we aim to illuminate the path of self-growth.</p>
<p><a target="_blank" href="https://knotix.vercel.app/search">https://knotix.vercel.app/search</a></p>
<h2 id="heading-2-what-is-ignorance">2. What Is Ignorance?</h2>
<p><strong>Ignorance</strong> refers to what we do not yet know or understand. However, beneath this lies a reverence and curiosity for the unknown. The ancient Greek philosopher Socrates introduced the concept of "knowing one's ignorance," asserting that recognizing one's own lack of knowledge is the first step toward true wisdom. Through the paradox of "I know that I know nothing," he highlighted the limits of human understanding and the importance of humility.</p>
<p>This mirrors the image of those who gazed at the night sky, contemplating the movements of the stars. Reverence for the unknown has propelled new discoveries and scientific advancements. In engineering, too, confronting unknown challenges and problems is unavoidable, and acknowledging one's ignorance while maintaining a continuous learning attitude is essential for resolution.</p>
<h2 id="heading-3-what-is-unknowing-unknowing">3. What Is "Unknowing Unknowing"?</h2>
<p><strong>Unknowing unknowing</strong> refers to a state where one is unaware of their own ignorance. Just as people once unwaveringly believed that the Earth was the center of the universe, in this state, accepting new truths or perspectives becomes challenging.</p>
<p>Psychologists David Dunning and Justin Kruger introduced this phenomenon to the modern era through the <strong>Dunning-Kruger effect</strong>. Their research suggests that individuals with lower abilities tend to overestimate their competence, while those with higher abilities often underestimate themselves. This occurs because they cannot recognize their lack of knowledge or skills, which becomes a hindrance to self-growth.</p>
<p>In engineering, being in a state of unknowing unknowing risks falling behind by not embracing new technologies or methodologies. Failing to recognize one's limitations can lead to communication barriers within a team and potentially result in project failures.</p>
<h2 id="heading-4-what-is-the-knowledge-of-unknowing-unknowing">4. What Is the Knowledge of "Unknowing Unknowing"?</h2>
<p><strong>The knowledge of unknowing unknowing</strong> is the realization that one is in a state of unknowing unknowing. It embodies the courage to step into the vast ocean of the unknown and pursue truth. This concept deepens Socrates' teachings, representing those who recognize their limitations and strive for greater heights.</p>
<p>Educational theorist David Kolb's <strong>Experiential Learning Model</strong> posits that learning progresses through the following four cycles:</p>
<ol>
<li><p><strong>Concrete Experience</strong>: Learning through actual actions or experiences.</p>
</li>
<li><p><strong>Reflective Observation</strong>: Reflecting deeply on the experiences.</p>
</li>
<li><p><strong>Abstract Conceptualization</strong>: Summarizing observations into theories or concepts.</p>
</li>
<li><p><strong>Active Experimentation</strong>: Testing and applying the derived theories or concepts in practice.</p>
</li>
</ol>
<p>The knowledge of unknowing unknowing intensifies the phases of reflective observation and abstract conceptualization, enabling individuals to recognize their ignorance and promote new learning. This enhances <strong>metacognition</strong>—the ability to understand and control one's cognitive processes—leading to the development of effective learning strategies.</p>
<h2 id="heading-5-encounter-with-knotix">5. Encounter with Knotix</h2>
<p>Just as travelers once navigated using star charts, modern engineers have a compass called <a target="_blank" href="https://knotix.vercel.app/search">Knotix</a>. Knotix illuminates unknown territories and guides the journey of learning. While traditional tools present known information, Knotix opens doors to the unknown.</p>
<p>Powered by machine learning and artificial intelligence, technologies like <strong>knowledge graphs</strong> (visual representations of relationships between knowledge concepts) and natural language processing reveal each user's realms of ignorance, charting courses toward new insights.</p>
<p>Knotix analyzes users' search histories and interests to identify information and skills they have yet to discover. This enables engineers to recognize gaps in their knowledge and proceed with learning efficiently.</p>
<h2 id="heading-6-the-impact-of-knotix-on-the-engineers-journey">6. The Impact of Knotix on the Engineer's Journey</h2>
<p>Knotix influences an engineer's learning journey in several ways:</p>
<h3 id="heading-61-clarifying-knowledge-gaps">6.1 Clarifying Knowledge Gaps</h3>
<p>Similar to the educational psychology concept of the <strong>Zone of Proximal Development (ZPD)</strong>, Knotix indicates the next steps engineers should take. ZPD refers to tasks learners cannot accomplish alone but can achieve with appropriate support. By presenting content within this range, Knotix maximizes learners' growth.</p>
<p>This acts as a map and guidepost for venturing into uncharted territories. Engineers can clarify their current position and destination, formulating efficient learning plans.</p>
<h3 id="heading-62-personalizing-learning">6.2 Personalizing Learning</h3>
<p>Each engineer walks a unique path. Knotix crafts personalized learning routes based on individual learning styles, paces, and interests. As research in learning sciences indicates, <strong>personalized learning</strong> enhances outcomes.</p>
<p>As an adaptive learning system, Knotix dynamically adjusts provided content based on user feedback. This allows learners to study topics at optimal difficulty levels, improving learning efficiency.</p>
<h3 id="heading-63-promoting-self-regulated-learning">6.3 Promoting Self-Regulated Learning</h3>
<p>Empowering oneself to reflect on the journey and determine the path ahead, Knotix assists engineers in planning their learning and reassessing progress. It's akin to sailors checking their position by the stars.</p>
<p><strong>Self-regulated learning</strong> involves learners autonomously managing their learning processes, including goal setting, strategy selection, and progress evaluation. Knotix visualizes learning progress and achievement levels, enabling learners to effectively control their learning.</p>
<h2 id="heading-7-how-to-utilize-knotix">7. How to Utilize Knotix</h2>
<p>As a tool for your journey, here's how to make the most of Knotix:</p>
<h3 id="heading-71-set-learning-objectives">7.1 Set Learning Objectives</h3>
<p>First, identify the star you aim to reach. Using the <strong>SMART goals</strong> framework (Specific, Measurable, Achievable, Relevant, Time-bound), set concrete and clear learning objectives.</p>
<p>For example: "Master a new programming language within three months to a level where it can be practically applied."</p>
<h3 id="heading-72-explore-your-ignorance">7.2 Explore Your Ignorance</h3>
<p>Utilize Knotix's search functionality to explore unknown realms. Input topics or keywords of interest and review the presented unfamiliar information. This unknown data becomes the gateway to new discoveries.</p>
<h3 id="heading-73-plan-your-learning-journey">7.3 Plan Your Learning Journey</h3>
<p>Chart your learning path as you would plan a voyage. Based on psychologist Albert Bandura's theory of <strong>self-efficacy</strong>—the belief in one's ability to achieve goals—set attainable steps. Enhancing self-efficacy boosts learning motivation.</p>
<p>By establishing specific learning steps and accumulating small successes, you reinforce your self-efficacy.</p>
<h3 id="heading-74-monitor-progress-and-adjust-course">7.4 Monitor Progress and Adjust Course</h3>
<p>Knotix records your journey's progress, prompting course adjustments as necessary—a crucial process to avoid storms and obstacles. Regularly evaluate your learning progress, revisiting goals and plans to maintain efficient learning.</p>
<h3 id="heading-75-regenerate-your-learning-tree-for-continuous-growth">7.5 Regenerate Your Learning Tree for Continuous Growth</h3>
<p>Leverage Knotix's features to continually nurture your learning tree. Like a mighty oak adding rings, this becomes a journey of deepening knowledge. When new learning content or interests emerge, regenerate your tree to sustain a continuous learning cycle.</p>
<h2 id="heading-8-the-growth-of-engineers-and-the-importance-of-knowing-unknowing-unknowing">8. The Growth of Engineers and the Importance of Knowing "Unknowing Unknowing"</h2>
<p>Recognizing one's ignorance and maintaining a commitment to learning fosters <strong>Continuous Professional Development (CPD)</strong>. CPD involves professionals continually enhancing their knowledge and skills, essential for adapting to rapidly evolving technological environments.</p>
<p>In engineering, new technologies and methodologies emerge constantly. By embracing the knowledge of unknowing unknowing, you can identify your learning needs and proactively acquire new knowledge—a key to maintaining competitiveness and advancing your career.</p>
<h2 id="heading-9-at-the-journeys-end">9. At the Journey's End</h2>
<p>Navigating the vast ocean of information, engineers equipped with the compass of <strong>the knowledge of unknowing unknowing</strong> and the map called <strong>Knotix</strong> can confidently embark on journeys into the unknown. Though the path may sometimes be challenging and shrouded in darkness, by embracing the unknown and committing to continuous learning, new horizons will emerge.</p>
<p>Lately, I've increasingly recognized my own "knowledge of unknowing unknowing," often pondering how best to learn and reflect on daily life. Personally, I believe it's crucial to proceed with planned learning while being mindful of the ZPD. Knotix is exceptionally suited for learning that incorporates these concepts. If you're interested, I encourage you to give it a try. Until next time.</p>
<p><a target="_blank" href="https://knotix.vercel.app/search">https://knotix.vercel.app/search</a></p>
]]></content:encoded></item><item><title><![CDATA[Variable-Length Encoding]]></title><description><![CDATA[Understanding Variable-Length Encoding: A Deep Dive with Practical Examples
In the digital realm, efficiently storing and transmitting data is paramount. Variable-length encoding is a method that optimizes space by encoding integers in a compact form...]]></description><link>https://semigrp.hashnode.dev/variable-length-encoding</link><guid isPermaLink="true">https://semigrp.hashnode.dev/variable-length-encoding</guid><category><![CDATA[algorithms]]></category><dc:creator><![CDATA[Seiichiro Furuya]]></dc:creator><pubDate>Fri, 15 Mar 2024 00:37:05 GMT</pubDate><content:encoded><![CDATA[<h3 id="heading-understanding-variable-length-encoding-a-deep-dive-with-practical-examples">Understanding Variable-Length Encoding: A Deep Dive with Practical Examples</h3>
<p>In the digital realm, efficiently storing and transmitting data is paramount. Variable-length encoding is a method that optimizes space by encoding integers in a compact form. This technique shines when dealing with a vast range of integer values, offering significant space savings. Let's unravel this concept using a couple of practical examples: encoding the integers 300 and 128.</p>
<h4 id="heading-the-case-of-integer-300">The Case of Integer 300</h4>
<p>To comprehend how we encode 300 using variable-length encoding, follow these steps:</p>
<ol>
<li><p><strong>Binary Representation</strong>: First, we convert 300 into its binary form, which is <code>100101100</code>.</p>
</li>
<li><p><strong>Applying the Mask</strong>: We use a mask (<code>0x7F</code> or <code>01111111</code> in binary) to extract the lower 7 bits. For 300, this gives us <code>00101100</code>.</p>
</li>
<li><p><strong>Checking for Continuation</strong>: Since there's more than 7 bits in our number, we need to signal that there's another byte to follow. This is done using a continuation flag.</p>
</li>
<li><p><strong>Encoding with Continuation Flag</strong>: We add a continuation flag to our extracted bits, resulting in <code>10101100</code> for the first 7 bits. For the remaining bit, since it's the last byte, we represent it as <code>00000010</code>.</p>
</li>
</ol>
<p>Thus, the encoded sequence for 300 is <code>[172, 2]</code>, where 172 represents the first byte with a continuation flag, and 2 represents the last byte without a need for further continuation.</p>
<h4 id="heading-the-case-of-integer-128">The Case of Integer 128</h4>
<p>Encoding 128 presents a unique challenge due to its binary representation (<code>10000000</code>), where the significant bit is exactly at the 8th position. Here's how we tackle it:</p>
<ol>
<li><p><strong>Special Handling for 128</strong>: Since the binary representation of 128 doesn't fit neatly into the lower 7 bits, we need a special approach. The significant bit sits at the boundary, necessitating a different encoding strategy.</p>
</li>
<li><p><strong>Encoding with a Zero Byte</strong>: To encode 128, we first mark the continuation with <code>10000000</code>, then add a zero byte (<code>00000001</code>) to signal the end of our encoding. This way, we accurately represent 128 in a variable-length format.</p>
</li>
</ol>
<p>The resulting encoded sequence for 128 is <code>[128, 1]</code>, efficiently packing the number into two bytes.</p>
<h3 id="heading-decoding-process-reversing-the-magic">Decoding Process: Reversing the Magic</h3>
<p>Decoding is simply the process of reversing the encoding steps. Taking the encoded sequence <code>[172, 2]</code> as an example for 300, we check each byte for continuation flags and reconstruct the original integer by piecing together the bits from each byte.</p>
<ul>
<li>By stripping the continuation flag from <code>172</code>, we retrieve <code>00101100</code>. Adding the bits from the second byte <code>2</code> (<code>00000010</code>), we seamlessly reconstruct the binary representation of 300 (<code>100101100</code>).</li>
</ul>
<h3 id="heading-why-does-this-matter">Why Does This Matter?</h3>
<p>Variable-length encoding is not just a theoretical exercise; it's widely used in technologies around us. Whether it's compressing data files to save space on your hard drive or optimizing data transmission over the internet, understanding the inner workings of such encoding schemes allows developers and engineers to build more efficient and effective software solutions.</p>
<p>By examining examples like encoding the integers 300 and 128, we gain a deeper appreciation for the clever mechanisms at play behind the scenes of our digital world, ensuring data is stored and transmitted in the most efficient way possible.</p>
]]></content:encoded></item><item><title><![CDATA[Where should IDs be numbered in a clean architecture?]]></title><description><![CDATA[When designing a software system with Clean Architecture, one of the key considerations is how and where to generate unique identifiers (IDs) for entities. Clean Architecture, a concept popularized by Robert C. Martin, suggests a way to organize a sy...]]></description><link>https://semigrp.hashnode.dev/where-should-ids-be-numbered-in-a-clean-architecture</link><guid isPermaLink="true">https://semigrp.hashnode.dev/where-should-ids-be-numbered-in-a-clean-architecture</guid><category><![CDATA[Clean Architecture]]></category><category><![CDATA[software design]]></category><dc:creator><![CDATA[Seiichiro Furuya]]></dc:creator><pubDate>Wed, 14 Feb 2024 00:39:24 GMT</pubDate><content:encoded><![CDATA[<p>When designing a software system with Clean Architecture, one of the key considerations is how and where to generate unique identifiers (IDs) for entities. Clean Architecture, a concept popularized by Robert C. Martin, suggests a way to organize a system so that it's easy to maintain, test, and scale. It does so by dividing the system into distinct layers, each with its own responsibility. But within this well-organized structure, where exactly should ID generation occur? Let's delve into this topic and explore the best practices for ID generation in the context of Clean Architecture.</p>
<h3 id="heading-the-essence-of-clean-architecture">The Essence of Clean Architecture</h3>
<p>Before we tackle ID generation, it's essential to understand the basic structure of Clean Architecture. It consists of four main layers:</p>
<ol>
<li><p><strong>Entities</strong>: These are the core business objects of your application.</p>
</li>
<li><p><strong>Use Cases</strong>: This layer contains the business rules that operate on the entities.</p>
</li>
<li><p><strong>Interface Adapters</strong>: This layer adapts data from the format most convenient for use cases and entities, to the format most convenient for external agencies such as databases or the web.</p>
</li>
<li><p><strong>Frameworks &amp; Drivers</strong>: The outermost layer, which includes tools like databases and web frameworks that your application depends on.</p>
</li>
</ol>
<h3 id="heading-where-to-generate-ids">Where to Generate IDs?</h3>
<p>According to Clean Architecture principles, ID generation should logically occur in or around the Use Case layer. This approach stems from several reasons:</p>
<ul>
<li><p><strong>Entity Independence</strong>: Entities, being the core business objects, should be agnostic of how their IDs are generated to maintain their reusability and independence.</p>
</li>
<li><p><strong>Flexibility for Use Cases</strong>: Different use cases might require different strategies for ID generation. Some entities might be best served by UUIDs, while others might need simple sequential numbers. Handling ID generation at the Use Case layer allows for this flexibility.</p>
</li>
<li><p><strong>Separation from Infrastructure</strong>: Tying ID generation too closely to the infrastructure (such as relying on a database's auto-increment feature) can lead to a tight coupling that Clean Architecture aims to avoid. By abstracting ID generation away from the infrastructure, we ensure the business logic's independence.</p>
</li>
</ul>
<h3 id="heading-practical-considerations">Practical Considerations</h3>
<p>In practice, the implementation of ID generation can vary based on specific application requirements or constraints. For instance, if an application's entities require IDs that are generated externally (e.g., by an external service or through specific infrastructure capabilities), these details might be managed at the Interface Adapter or Infrastructure layers. However, the initiation and coordination of these operations should still be governed by the Use Cases layer to adhere to the decoupling principles of Clean Architecture.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>In Clean Architecture, the question of where to generate IDs is more than a technical detail—it's a decision that impacts the maintainability, scalability, and flexibility of your application. By favoring the Use Case layer for ID generation, you ensure that your entities remain independent, your application can flexibly accommodate different ID generation strategies, and your business logic stays decoupled from the infrastructure. This approach not only aligns with the principles of Clean Architecture but also sets the stage for a system that is easier to test, maintain, and evolve over time.</p>
]]></content:encoded></item></channel></rss>