<?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[Favour Chukwuedo - Developer Relations &lt;&gt; Technical Writer]]></title><description><![CDATA[Developer & Technology Advocate <> Big On DEI]]></description><link>https://favourchukwuedo.com</link><generator>RSS for Node</generator><lastBuildDate>Tue, 12 May 2026 00:41:27 GMT</lastBuildDate><atom:link href="https://favourchukwuedo.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Mainstream LLMs are centralized. What if they weren't?]]></title><description><![CDATA[Today in #Vancouver, I presented llm-node at the Codex Community Meetup, a project that explores what the future of AI infrastructure could look like.
Here’s the problem most people overlook:
Every ti]]></description><link>https://favourchukwuedo.com/mainstream-llms-are-centralized-what-if-they-weren-t</link><guid isPermaLink="true">https://favourchukwuedo.com/mainstream-llms-are-centralized-what-if-they-weren-t</guid><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Sat, 11 Apr 2026 05:23:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/5cfcd4cc1991626f02668d76/2cc197ca-1dbd-41fe-974d-795f1f2568c0.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today in <a href="https://www.linkedin.com/search/results/all/?keywords=%23vancouver&amp;origin=HASH_TAG_FROM_FEED"><strong>#Vancouver</strong></a>, I presented llm-node at the Codex Community Meetup, a project that explores what the future of AI infrastructure could look like.</p>
<p>Here’s the problem most people overlook:</p>
<p>Every time you use tools like ChatGPT, Claude, or Gemini, your prompt goes to a server controlled by a single company. They see it, gate it, and price it. Running your own model? A 70B model can cost $10,000+ in hardware.</p>
<p>So I asked: what if no one had to own the whole model and you didn’t need thousands of dollars in GPUs to use it?</p>
<p>I built llm-node. Think of BitTorrent, but for <a href="https://www.linkedin.com/search/results/all/?keywords=%23ai&amp;origin=HASH_TAG_FROM_FEED"><strong>#AI</strong></a>. Instead of one machine doing everything, multiple nodes each run a small part of the model. Your laptop or a Raspberry Pi runs a few layers, someone else runs the next, and the network stitches it together.</p>
<p>The result is a fully functional AI model with no central owner.</p>
<p>Key ideas:<br />• Nodes auto-discover public nodes (no central server)<br />• Workload adapts to your hardware<br />• Onion routing to preserve privacy<br />• Setup in under 60 seconds</p>
<p>Built in Rust, supporting <a href="https://www.linkedin.com/search/results/all/?keywords=%23llama&amp;origin=HASH_TAG_FROM_FEED"><strong>#Llama</strong></a>, <a href="https://www.linkedin.com/search/results/all/?keywords=%23qwen&amp;origin=HASH_TAG_FROM_FEED"><strong>#Qwen</strong></a>, and <a href="https://www.linkedin.com/search/results/all/?keywords=%23phi&amp;origin=HASH_TAG_FROM_FEED"><strong>#Phi</strong></a>-3 and with zero-config model detection.</p>
<p>But what excites me most is the real-world application:</p>
<p>Imagine public institutions in Nigeria. Instead of spending $200K on GPU clusters or sending sensitive data abroad, agencies could pool existing infrastructure to run a shared, sovereign AI system with no new procurement, no vendor lock-in and no data leaving the country.</p>
<p>That used to be a theory but this is what the project enables.<br />AI is becoming critical infrastructure. The question isn’t just how powerful it gets but who controls it.</p>
<p>Decentralised AI puts ownership back where it belongs- with the people using it.</p>
<p>If you’re thinking about decentralised systems, sovereign compute, or privacy-first AI, I’d love to connect.</p>
<p>Speaker Deck: <a href="https://speakerdeck.com/favourchukwuedo/mainstream-llms-are-centralized-what-if-they-werent">https://speakerdeck.com/favourchukwuedo/mainstream-llms-are-centralized-what-if-they-werent</a></p>
<p>Open source. MIT licensed. Look out for GitHub link in the coming days.<br /><a href="https://www.linkedin.com/search/results/all/?keywords=%23ai&amp;origin=HASH_TAG_FROM_FEED"><strong>#AI</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23decentralization&amp;origin=HASH_TAG_FROM_FEED"><strong>#Decentralization</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23opensource&amp;origin=HASH_TAG_FROM_FEED"><strong>#OpenSource</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23machinelearning&amp;origin=HASH_TAG_FROM_FEED"><strong>#MachineLearning</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23privacy&amp;origin=HASH_TAG_FROM_FEED"><strong>#Privacy</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23distributedsystems&amp;origin=HASH_TAG_FROM_FEED"><strong>#DistributedSystems</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23rust&amp;origin=HASH_TAG_FROM_FEED"><strong>#Rust</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23sovereignai&amp;origin=HASH_TAG_FROM_FEED"><strong>#SovereignAI</strong></a> <a href="https://www.linkedin.com/search/results/all/?keywords=%23govtech&amp;origin=HASH_TAG_FROM_FEED"><strong>#GovTech</strong></a></p>
]]></content:encoded></item><item><title><![CDATA[Social capital is real currency!]]></title><description><![CDATA[Social capital is real currency!
Over the past couple of hours, I’ve been taking the Networks and Social Capital for Managers course as part of my #MBA at Valar Institute. One of my biggest takeaways is how “social currency” plays a critical role in ...]]></description><link>https://favourchukwuedo.com/social-capital-is-real-currency</link><guid isPermaLink="true">https://favourchukwuedo.com/social-capital-is-real-currency</guid><category><![CDATA[social capital theory ]]></category><category><![CDATA[mba]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Thu, 11 Sep 2025 04:26:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1757564728574/8770aba0-c0d9-4f5f-b563-03fc9ef2203d.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Social capital is real currency!</p>
<p>Over the past couple of hours, I’ve been taking the Networks and Social Capital for Managers course as part of my <strong>#MBA</strong> at <a target="_blank" href="https://www.linkedin.com/in/favour-chukwuedo/edit/forms/next-action/shareable-trigger-new-certification/?profileEntityUnion=\(certificationUrn%3Aurn%253Ali%253Afsd_profileCertification%253A%2528ACoAAAvhNAYBgETY4XnNXbGQ8FyVhwo-cRiT5Mg%252C921636967%2529\)#"><strong>Valar Institute</strong></a>. One of my biggest takeaways is how “social currency” plays a critical role in building influence and opening doors especially on a global stage. The ability to recognize, cultivate, and leverage ties within and across networks has afforded me opportunities I could never have imagined when I started out.</p>
<p>This course gave me a deeper appreciation for concepts like structural holes, tie strength, and small-world effects. Beyond theory, it challenged me to think about how to intentionally design and manage networks that support not just career growth, but also innovation and impact. I’m excited to keep applying these insights as I continue building and contributing within international ecosystems.</p>
<p>I’m happy to share that I’ve obtained a new certification: NETWORKS AND SOCIAL CAPITAL FOR MANAGERS from <a target="_blank" href="https://www.linkedin.com/in/favour-chukwuedo/edit/forms/next-action/shareable-trigger-new-certification/?profileEntityUnion=\(certificationUrn%3Aurn%253Ali%253Afsd_profileCertification%253A%2528ACoAAAvhNAYBgETY4XnNXbGQ8FyVhwo-cRiT5Mg%252C921636967%2529\)#"><strong>Valar Institute</strong></a>!</p>
]]></content:encoded></item><item><title><![CDATA[Streamlining Student Landing Page Creation in HubSpot: A Case Study]]></title><description><![CDATA[Picture this: You're an Administrator/Educator at an educational institution, tasked with creating and managing hundreds of student landing pages in HubSpot. Each page needs to be individually crafted, permissions carefully set, and everything must m...]]></description><link>https://favourchukwuedo.com/streamlining-student-landing-page-creation-in-hubspot-a-case-study</link><guid isPermaLink="true">https://favourchukwuedo.com/streamlining-student-landing-page-creation-in-hubspot-a-case-study</guid><category><![CDATA[HubSpot]]></category><category><![CDATA[education]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Express.js]]></category><category><![CDATA[automation]]></category><category><![CDATA[landingpages]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[APIs]]></category><category><![CDATA[webapps]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Wed, 26 Mar 2025 10:15:29 GMT</pubDate><content:encoded><![CDATA[<p><strong>Picture this</strong>: You're an Administrator/Educator at an educational institution, tasked with creating and managing hundreds of student landing pages in HubSpot. Each page needs to be individually crafted, permissions carefully set, and everything must maintain consistent branding. Sound overwhelming? That's exactly the challenge a college faced before I developed a solution that transformed a minutes-long manual process into a seamless 30-second operation or less.</p>
<p>Today, efficiency isn't just about saving time—it's about creating scalable systems that grow with your institution while maintaining security and user experience. This case study explores how I tackled this complex challenge with a simple, elegant solution that any staff member can use, regardless of their technical expertise.</p>
<h2 id="heading-the-challenge">The Challenge</h2>
<p>Managing landing pages for multiple students in HubSpot presented several key challenges for educational institutions:</p>
<ol>
<li><p><strong>Time-Consuming Manual Process</strong>: Creating individual landing pages for each student required multiple steps in HubSpot's interface, making it a tedious and time-consuming task for administrators.</p>
</li>
<li><p><strong>Access Management Complexity</strong>: Ensuring proper access control and permissions for each student's landing page was challenging and prone to errors.</p>
</li>
<li><p><strong>Consistency Issues</strong>: Maintaining consistent naming conventions and page structures across multiple student landing pages was difficult to enforce manually.</p>
</li>
<li><p><strong>Technical Barriers</strong>: Many administrative staff found HubSpot's interface overwhelming, leading to delays and potential mistakes in page creation.</p>
</li>
</ol>
<h2 id="heading-the-solution">The Solution</h2>
<p>I developed a streamlined web application that simplifies the entire process of creating student landing pages in HubSpot. Here's how I solved each challenge:</p>
<h3 id="heading-1-automated-page-creation">1. Automated Page Creation</h3>
<p>Our tool automates the landing page creation process with a simple form that collects:</p>
<ul>
<li><p>Student's name</p>
</li>
<li><p>Email verification</p>
</li>
<li><p>Template selection</p>
</li>
<li><p>Page title</p>
</li>
<li><p>Optional team assignment</p>
</li>
</ul>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> newPage = {
  <span class="hljs-attr">name</span>: <span class="hljs-string">`<span class="hljs-subst">${studentName}</span> - <span class="hljs-subst">${newTitle}</span>`</span>,
  <span class="hljs-attr">slug</span>: <span class="hljs-string">`student-<span class="hljs-subst">${studentName.toLowerCase().replace(<span class="hljs-regexp">/\s+/g</span>, <span class="hljs-string">"-"</span>)}</span>-<span class="hljs-subst">${<span class="hljs-built_in">Date</span>.now()}</span>`</span>,
  <span class="hljs-attr">htmlTitle</span>: newTitle,
  <span class="hljs-attr">templatePath</span>: templateData.templatePath,
  <span class="hljs-comment">// ... other configurations</span>
};
</code></pre>
<h3 id="heading-2-smart-access-management">2. Smart Access Management</h3>
<p>Instead of attempting complex automated permissions, I implemented a clear two-step process:</p>
<ol>
<li><p>Automatic page creation with base settings</p>
</li>
<li><p>Clear instructions for manual access assignment through HubSpot's interface</p>
</li>
</ol>
<p>This approach provides:</p>
<ul>
<li><p>More reliable access control</p>
</li>
<li><p>Better security management</p>
</li>
<li><p>Clearer audit trail</p>
</li>
<li><p>Flexibility in permission levels</p>
</li>
</ul>
<h3 id="heading-3-user-friendly-interface">3. User-Friendly Interface</h3>
<p>I created an intuitive interface with:</p>
<ul>
<li><p>Clear form labels and instructions</p>
</li>
<li><p>Interactive information modal</p>
</li>
<li><p>Real-time email validation</p>
</li>
<li><p>Mobile-responsive design</p>
</li>
<li><p>Accessible UI components</p>
</li>
</ul>
<h3 id="heading-4-error-prevention">4. Error Prevention</h3>
<p>The tool includes several safeguards:</p>
<ul>
<li><p>Email validation against HubSpot user database</p>
</li>
<li><p>Required field validation</p>
</li>
<li><p>Clear error messages</p>
</li>
<li><p>Confirmation screens</p>
</li>
<li><p>Guided workflow</p>
</li>
</ul>
<h2 id="heading-technical-implementation">Technical Implementation</h2>
<p>The solution uses modern web technologies:</p>
<ul>
<li><p><strong>Frontend</strong>:</p>
<ul>
<li><p>Mobile-first responsive design</p>
</li>
<li><p>CSS Custom Properties for consistent styling</p>
</li>
<li><p>Accessible form controls</p>
</li>
<li><p>Interactive modals and toggles</p>
</li>
</ul>
</li>
<li><p><strong>Backend</strong>:</p>
<ul>
<li><p>Express.js server</p>
</li>
<li><p>HubSpot API integration</p>
</li>
<li><p>Error handling and validation</p>
</li>
<li><p>Secure token management</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-key-features">Key Features</h2>
<ol>
<li><strong>Information Modal</strong>:</li>
</ol>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"modal-overlay"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"infoModal"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"info-card"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span>How it works<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">ol</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Enter the student's name for the landing page title<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Validate their HubSpot email to ensure they have an account<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Choose a template (if no default is set)<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Set a title for their new page<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>Optionally assign to a team<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">ol</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<ol start="2">
<li><strong>Team Assignment Toggle</strong>:</li>
</ol>
<pre><code class="lang-html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"switch-container"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"switch"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"teamToggle"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"assignToTeam"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"slider"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">span</span>&gt;</span>Assign to Team<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></pre>
<h2 id="heading-results">Results</h2>
<p>The implementation has led to significant improvements:</p>
<ul>
<li><p><strong>Time Savings</strong>: Page creation time reduced from ~10 minutes to under 1 minute</p>
</li>
<li><p><strong>Error Reduction</strong>: Standardized process eliminates common mistakes</p>
</li>
<li><p><strong>User Satisfaction</strong>: Administrators report higher confidence in managing landing pages</p>
</li>
<li><p><strong>Scalability</strong>: System can handle increased volume of student pages efficiently</p>
</li>
</ul>
<h2 id="heading-best-practices-learned">Best Practices Learned</h2>
<ol>
<li><p><strong>Progressive Enhancement</strong>:</p>
<ul>
<li><p>Start with essential functionality</p>
</li>
<li><p>Add interactive features progressively</p>
</li>
<li><p>Ensure core features work without JavaScript</p>
</li>
</ul>
</li>
<li><p><strong>User-Centric Design</strong>:</p>
<ul>
<li><p>Clear, concise instructions</p>
</li>
<li><p>Immediate feedback</p>
</li>
<li><p>Intuitive workflow</p>
</li>
<li><p>Mobile-first approach</p>
</li>
</ul>
</li>
<li><p><strong>Error Handling</strong>:</p>
<ul>
<li><p>Validate inputs early</p>
</li>
<li><p>Provide clear error messages</p>
</li>
<li><p>Guide users to solutions</p>
</li>
<li><p>Maintain data consistency</p>
</li>
</ul>
</li>
</ol>
<h2 id="heading-future-enhancements">Future Enhancements</h2>
<p>Planned improvements include:</p>
<ol>
<li><p>Batch page creation for multiple students</p>
</li>
<li><p>Template preview functionality</p>
</li>
<li><p>Advanced access control patterns</p>
</li>
<li><p>Integration with student management systems</p>
</li>
<li><p>Analytics dashboard for page usage</p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This project demonstrates how thoughtful automation and user-centered design can simplify complex administrative tasks. By focusing on user needs and maintaining a balance between automation and manual control, I created a tool that makes HubSpot landing page management accessible to all skill levels.</p>
<p>The source code for this project is available on Favour Chukwuedo’s <a target="_blank" href="https://github.com/favourch/HubSpot-Landing-Page-Duplicator">GitHub</a>, showcasing patterns for:</p>
<ul>
<li><p>HubSpot API integration</p>
</li>
<li><p>User interface design</p>
</li>
<li><p>Error handling</p>
</li>
<li><p>Access management</p>
</li>
<li><p>Progressive enhancement</p>
</li>
</ul>
<hr />
<p><em>This case study is based on a real implementation of a HubSpot landing page management tool. For more information about the technical implementation or to contribute to the project, please refer to the documentation.</em></p>
]]></content:encoded></item><item><title><![CDATA[Personalizing Educational Content with Bayesian Models at DigiLearns]]></title><description><![CDATA[At DigiLearns, we are dedicated to democratizing access to quality education for disadvantaged students. We don’t stop at delivering content; we aim to deliver personalized content that suits the learning needs and styles of individual students. To a...]]></description><link>https://favourchukwuedo.com/personalizing-educational-content-with-bayesian-models-at-digilearns</link><guid isPermaLink="true">https://favourchukwuedo.com/personalizing-educational-content-with-bayesian-models-at-digilearns</guid><category><![CDATA[AI]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[education]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Wed, 06 Sep 2023 17:56:51 GMT</pubDate><content:encoded><![CDATA[<p>At DigiLearns, we are dedicated to democratizing access to quality education for disadvantaged students. We don’t stop at delivering content; we aim to deliver <em>personalized</em> content that suits the learning needs and styles of individual students. To accomplish this, we utilize Bayesian models to adaptively tailor the educational materials.</p>
<h4 id="heading-why-bayesian-models"><strong>Why Bayesian Models?</strong></h4>
<p>Bayesian models are particularly useful because they can make probabilistic predictions in an environment of uncertainty. As students engage with our content, we have limited data on their performance and learning style. Bayesian models allow us to update the probabilities of different educational pathways being effective as we gather more data, providing a robust framework for personalization.</p>
<h4 id="heading-how-it-works">How It Works</h4>
<ol>
<li><p><strong>Initial Assessment</strong>: When a student first joins, we have them complete a diagnostic test to gauge their skills and knowledge in various subjects.</p>
</li>
<li><p><strong>Model Training</strong>: The Bayesian model takes this initial data and uses it as a prior distribution. As the student engages with our learning material, we update this distribution based on their performance and interaction data.</p>
</li>
<li><p><strong>Content Delivery</strong>: Based on the current model's output, we adapt the learning materials to better suit the student's needs, focusing on areas where they need the most improvement.</p>
</li>
<li><p><strong>Predictive Analytics</strong>: The model can also analyze past performance data to predict future achievements, helping us intervene early for students who are predicted to struggle.</p>
</li>
</ol>
<pre><code class="lang-javascript">npm install bayesian-network
</code></pre>
<p><strong>How The Algorithm Works</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> BayesianNetwork = <span class="hljs-built_in">require</span>(<span class="hljs-string">'bayesian-network'</span>);

<span class="hljs-keyword">const</span> studentModel = <span class="hljs-keyword">new</span> BayesianNetwork(<span class="hljs-string">'StudentModel'</span>);

<span class="hljs-comment">// Nodes and Initial Probabilities (Priors)</span>
studentModel.addNode(<span class="hljs-string">'PriorKnowledge'</span>, [<span class="hljs-string">'Low'</span>, <span class="hljs-string">'Medium'</span>, <span class="hljs-string">'High'</span>]);
studentModel.addNode(<span class="hljs-string">'LearningStyle'</span>, [<span class="hljs-string">'Visual'</span>, <span class="hljs-string">'Auditory'</span>, <span class="hljs-string">'Kinesthetic'</span>]);
studentModel.addNode(<span class="hljs-string">'Performance'</span>, [<span class="hljs-string">'Poor'</span>, <span class="hljs-string">'Average'</span>, <span class="hljs-string">'Good'</span>]);

<span class="hljs-comment">// Conditional Probabilities</span>
studentModel.addConditionalProbability({
    <span class="hljs-attr">node</span>: <span class="hljs-string">'Performance'</span>,
    <span class="hljs-attr">parents</span>: [<span class="hljs-string">'PriorKnowledge'</span>, <span class="hljs-string">'LearningStyle'</span>],
    <span class="hljs-attr">distribution</span>: [
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Low'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Visual'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.7</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.2</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.1</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Low'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Auditory'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.6</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.3</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.1</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Low'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Kinesthetic'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.8</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.1</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.1</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Medium'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Visual'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.2</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.6</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.2</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Medium'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Auditory'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.1</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.7</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.2</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Medium'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Kinesthetic'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.3</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.4</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.3</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'High'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Visual'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.1</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.2</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.7</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'High'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Auditory'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.1</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.3</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.6</span> }},
        { <span class="hljs-attr">when</span>: { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'High'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Kinesthetic'</span> }, <span class="hljs-attr">then</span>: { <span class="hljs-string">'Poor'</span>: <span class="hljs-number">0.2</span>, <span class="hljs-string">'Average'</span>: <span class="hljs-number">0.3</span>, <span class="hljs-string">'Good'</span>: <span class="hljs-number">0.5</span> }},
    ]
});

<span class="hljs-comment">// Initial training data from student engagement</span>
studentModel.train([
    { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Medium'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Visual'</span>, <span class="hljs-string">'Performance'</span>: <span class="hljs-string">'Average'</span> },
    { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'High'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Visual'</span>, <span class="hljs-string">'Performance'</span>: <span class="hljs-string">'Good'</span> },
    { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Low'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Kinesthetic'</span>, <span class="hljs-string">'Performance'</span>: <span class="hljs-string">'Poor'</span> },
    <span class="hljs-comment">// ... (initial data continues based on student's engagement)</span>
]);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">updateModel</span>(<span class="hljs-params">data</span>) </span>{
    studentModel.train([data]);
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">predictContent</span>(<span class="hljs-params">subject, studentState</span>) </span>{
    <span class="hljs-comment">// Decide the next best content for each subject based on `studentState`</span>
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Predicting content for subject: <span class="hljs-subst">${subject}</span>`</span>);
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">predictIntervention</span>(<span class="hljs-params">studentState</span>) </span>{
    <span class="hljs-keyword">if</span> (studentState.Performance === <span class="hljs-string">'Poor'</span>) {
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Trigger early intervention'</span>);
    }
}

<span class="hljs-comment">// Simulate ongoing student interactions</span>
<span class="hljs-keyword">const</span> subjects = [<span class="hljs-string">'Math'</span>, <span class="hljs-string">'Science'</span>, <span class="hljs-string">'History'</span>];
<span class="hljs-keyword">const</span> students = [
    { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'High'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Visual'</span>, <span class="hljs-string">'Performance'</span>: <span class="hljs-string">'Good'</span> },
    { <span class="hljs-string">'PriorKnowledge'</span>: <span class="hljs-string">'Low'</span>, <span class="hljs-string">'LearningStyle'</span>: <span class="hljs-string">'Auditory'</span>, <span class="hljs-string">'Performance'</span>: <span class="hljs-string">'Poor'</span> },
    <span class="hljs-comment">// ... (more students)</span>
];

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> subject <span class="hljs-keyword">of</span> subjects) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Processing subject: <span class="hljs-subst">${subject}</span>`</span>);

    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">const</span> student <span class="hljs-keyword">of</span> students) {
        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Processing student data: <span class="hljs-subst">${<span class="hljs-built_in">JSON</span>.stringify(student)}</span>`</span>);

        <span class="hljs-comment">// Update Bayesian Network with new student data</span>
        updateModel(student);

        <span class="hljs-comment">// Predict Next Best Content</span>
        <span class="hljs-keyword">const</span> studentState = studentModel.infer([<span class="hljs-string">'Performance'</span>]);
        predictContent(subject, studentState);

        <span class="hljs-comment">// Predict if Intervention is Needed</span>
        predictIntervention(studentState);
    }
}
</code></pre>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The introduction and successful implementation of Bayesian Networks in our educational platform, DigiLearns, represents a substantial advancement in the field of personalized education. The Bayesian model we have developed adapts dynamically to the unique needs of each student, providing tailored educational content. This level of personalization is not only a technological achievement but also a significant step forward in addressing educational inequality.</p>
<p>One of the greatest barriers to educational success is the one-size-fits-all approach, which disregards the individual learning needs and circumstances of students. This model is especially disadvantageous for students from marginalized communities who might not have access to personalized tutoring or supplemental educational resources. By employing Bayesian models that can operate effectively even with limited initial data, we are democratizing access to personalized education, thereby leveling the playing field for all students, regardless of their socio-economic background.</p>
<p>From a research perspective, the use of Bayesian Networks opens new avenues for understanding human learning patterns and their complexities. The gathered data and inferences can be utilized to refine educational policies, contribute to pedagogical theories, and develop more advanced models for content personalization. Also, it sets a precedent for future research on the intersection of artificial intelligence and education, encouraging an interdisciplinary approach to solving complex educational challenges.</p>
]]></content:encoded></item><item><title><![CDATA[Supercharging Your Node.js Workflow: A Humorous DIY on Switching to pnpm]]></title><description><![CDATA[Let's face it, waiting for npm to install packages can feel like watching paint dry. And if you're like me, you've probably wondered if there's a better way. Well, my friend, wonder no more! Enter pnpm, the package manager that's here to save the day...]]></description><link>https://favourchukwuedo.com/supercharging-your-nodejs-workflow-a-humorous-diy-on-switching-to-pnpm</link><guid isPermaLink="true">https://favourchukwuedo.com/supercharging-your-nodejs-workflow-a-humorous-diy-on-switching-to-pnpm</guid><category><![CDATA[npm]]></category><category><![CDATA[pnpm]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[workflow]]></category><category><![CDATA[DIY]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Tue, 25 Apr 2023 01:41:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1682386554065/48a5f686-4c45-472b-aec1-e22c57810a2f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Let's face it, waiting for npm to install packages can feel like watching paint dry. And if you're like me, you've probably wondered if there's a better way. Well, my friend, wonder no more! Enter <strong>pnpm</strong>, the package manager that's here to save the day.</p>
<p>With pnpm, you can say goodbye to sluggish installs and hello to a streamlined workflow. And let's not forget the best part: you get to say "pnpm" out loud and feel like a tech superhero. So, are you ready to take your Node.js development to the next level? Join me on this DIY journey to switch to pnpm!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1682363044587/8123cb13-b408-4a2d-a20e-360a893cb72c.png" alt class="image--center mx-auto" /></p>
<p><strong>Npm</strong> is like the dependable sidekick that's been around for ages. It's always there when you need it, ready to install packages with a simple command. But let's be real, sometimes npm can be a bit slow and bloated. It's like that friend who always takes forever to get ready before a night out.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1682362976575/0add59f0-3de0-4048-8bbe-46ed6991375c.png" alt class="image--center mx-auto" /></p>
<p>Then, there is <strong>pnpm</strong>, the flashy new superhero on the block. It's like the Flash, speeding through the installation process with lightning-fast efficiency. But don't be misled by its youthful energy, pnpm has some serious tricks up its sleeve. It uses a shared package store to save disk space and installation time, making it perfect for those large projects with tons of dependencies. <mark>Think of pnpm as your trusty sidekick, streamlining your workflow and making your development experience all the more joyful</mark></p>
<p>But even with all its benefits, pnpm still has some skeptics. Some developers are hesitant to make the switch, afraid that they'll be left in the dust by the tried-and-true npm. It's like that classic car that you're afraid to sell, even though it's been sitting in your garage collecting dust for years.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1682362868672/ba2a5d40-31be-4b44-a8c5-a8214e9c0083.jpeg" alt class="image--center mx-auto" /></p>
<p>But fear not, dear developer! You don't have to choose between npm and pnpm, they can coexist peacefully in your development world. You can start using pnpm for your new projects and gradually transition your older ones. It's like a blended family, bringing together the best of both worlds and creating a happy, harmonious home.</p>
<h2 id="heading-technical-details"><strong>Technical Details</strong></h2>
<p>Alright, let's dive into the technical details and walk through the steps of setting up <strong>pnpm</strong> for a Node.js project.</p>
<h3 id="heading-step-1-install-pnpm">Step 1: Install pnpm</h3>
<p>To install pnpm, run the following command in your terminal:</p>
<p><code>npm install -g pnpm</code></p>
<p>This will install pnpm globally on your machine, making it available for use in any project.</p>
<h3 id="heading-step-2-initialize-your-project">Step 2: Initialize your project</h3>
<p>Create a new directory for your project and navigate to it in your terminal. Then, run the following command to initialize a new Node.js project:</p>
<p><code>npm init</code></p>
<p>This will prompt you to enter some information about your project, such as its name, version, and description. Once you've entered all the required information, a package.json file will be created in your project directory.</p>
<h3 id="heading-step-3-install-dependencies-with-pnpm">Step 3: Install dependencies with pnpm</h3>
<p>To install dependencies for your project using pnpm, run the following command:</p>
<p><code>pnpm install</code></p>
<p>Replace <code>&lt;package-name&gt;</code> with the name of the package you want to install. Pnpm will download and install the package and its dependencies, and save them to a shared package store on your machine.</p>
<h3 id="heading-step-4-use-pnpm-instead-of-npm">Step 4: Use pnpm instead of npm</h3>
<p>Now that you've installed pnpm and initialized your project, you can start using pnpm to manage your dependencies. To do this, simply replace any <code>npm</code> commands with <code>pnpm</code>.</p>
<p><strong>For example:</strong></p>
<p><code>npm install express</code></p>
<p><strong>Becomes:</strong></p>
<p><code>pnpm install express</code></p>
<p>And that's it! You're now using pnpm to manage your Node.js project dependencies. You can continue to use pnpm for all future package installations or switch back to npm if you prefer. Remember, pnpm and npm can coexist peacefully, so feel free to use whichever tool works best for your project.</p>
<h3 id="heading-one-last-thing-to-note">One last thing to note:</h3>
<p><em><mark>If you're working on an existing project that already has a </mark></em> <code>node_modules</code> <em><mark>directory, you can migrate to pnpm by running the following command:</mark></em></p>
<p><code>pnpm install --shamefully-flatten</code></p>
<p>This will copy all the packages and their dependencies to the shared package store, allowing you to take advantage of pnpm's space-saving benefits. And don't worry, the original <code>node_modules</code> directory will still be there, just in case you need to switch back to npm.</p>
<p>pnpm is a powerful package manager that can help simplify and speed up your Node.js development workflow. With its shared package store and efficient installation process, pnpm can save you time and disk space, while still allowing you to manage your project dependencies with ease.</p>
<h3 id="heading-conclusion">Conclusion</h3>
<p>While npm has been the go-to package manager for Node.js developers for many years, pnpm offers some significant advantages that are worth considering. Whether you're working on a new project or migrating an existing one, pnpm is worth exploring.</p>
<p>So why not give pnpm a try? With just a few simple commands, you can start using this powerful tool to supercharge your Node.js development experience. And who knows, you might just find that pnpm becomes your new superhero package manager.</p>
]]></content:encoded></item><item><title><![CDATA[Gain a Competitive Edge with Klue's Real-Time Market Insights]]></title><description><![CDATA[Overview of Klue
At Klue, we understand that staying ahead in today's fast-paced business world can be a challenge. That's why we've developed a range of innovative products designed to give our clients the tools they need to succeed. One of our most...]]></description><link>https://favourchukwuedo.com/gain-a-competitive-edge-with-klues-real-time-market-insights</link><guid isPermaLink="true">https://favourchukwuedo.com/gain-a-competitive-edge-with-klues-real-time-market-insights</guid><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Tue, 03 Jan 2023 06:57:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1672987875049/97299f75-d9a7-41f0-835c-3e9e6cffa325.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-overview-of-klue">Overview of Klue</h1>
<p>At Klue, we understand that staying ahead in today's fast-paced business world can be a challenge. That's why we've developed a range of innovative products designed to give our clients the tools they need to succeed. One of our most popular offerings is the Klue Market Intelligence platform.</p>
<h2 id="heading-klue-market-intelligence-platform">Klue Market Intelligence platform</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672987558974/3ce2da5a-d092-470d-b409-effca003331d.png" alt class="image--center mx-auto" /></p>
<p>The Klue Market Intelligence platform is a comprehensive tool that provides real-time insights into a company's market and competitors. With this information at their fingertips, businesses can make informed decisions that give them the edge they need to stay ahead of the competition.</p>
<p>But what sets the Klue Market Intelligence platform apart from other market research tools on the market? For starters, our platform is designed to be user-friendly and intuitive. Even those with little to no experience in market research will be able to easily navigate the platform and extract valuable insights.</p>
<p>In addition to its user-friendliness, the Klue Market Intelligence platform is also highly customizable. Whether you're interested in tracking a specific market or monitoring the activity of a particular competitor, our platform can be tailored to meet your specific needs. This level of customization ensures that you're getting the most relevant and useful information for your business.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672987609637/d633220e-3ea9-4e91-8a2a-20a0fd334195.png" alt class="image--center mx-auto" /></p>
<p>But the benefits of the Klue Market Intelligence platform don't end there. Our platform is also constantly updating, so you can be sure you're always getting the most current and accurate data. And with our team of expert analysts on hand to provide additional insights and analysis, you'll have all the support you need to make informed decisions.</p>
<h1 id="heading-want-to-take-a-klue">Want To Take a Klue?</h1>
<p>Do not just take our word for it - try the <a target="_blank" href="https://klue.com/">Klue Market Intelligence platform</a> for yourself and see the difference it can make for your business. Sign up for a free trial today and experience the power of competitive enablement firsthand.</p>
<p>We are confident that once you see the value the Klue Market Intelligence platform can bring to your business, you will want to make it a permanent part of your decision-making process.</p>
<p>So don't wait - <a target="_blank" href="https://klue.com/">sign up for your Klue free trial</a> now and start giving your business the edge it needs to succeed.</p>
]]></content:encoded></item><item><title><![CDATA[Understanding the Role of Gatekeepers in the Tech Ecosystem and the Importance of Promoting Diversity and Inclusion]]></title><description><![CDATA[In the tech ecosystem, "gatekeepers" refer to individuals or organizations that have the power to control access to certain resources or opportunities. These gatekeepers can include venture capitalists, tech industry executives, or other influential ...]]></description><link>https://favourchukwuedo.com/understanding-the-role-of-gatekeepers-in-the-tech-ecosystem-and-the-importance-of-promoting-diversity-and-inclusion</link><guid isPermaLink="true">https://favourchukwuedo.com/understanding-the-role-of-gatekeepers-in-the-tech-ecosystem-and-the-importance-of-promoting-diversity-and-inclusion</guid><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Mon, 19 Dec 2022 07:12:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1672989274596/4207ecce-fc47-4beb-8f74-1e437a6ee82a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the tech ecosystem, "gatekeepers" refer to individuals or organizations that have the power to control access to certain resources or opportunities. These gatekeepers can include venture capitalists, tech industry executives, or other influential figures who have the ability to make decisions about which startups or tech projects receive funding, support, or exposure.</p>
<p>There has been a lot of discussion and debate about the role of gatekeepers in the tech ecosystem, with some arguing that they can play a valuable role in helping to filter out low-quality projects and support the most promising ones. Others, however, argue that gatekeepers can be a barrier to entry for underrepresented groups or marginalized communities, who may not have the same access to resources or networks as those who are more privileged.</p>
<p>In order to address these concerns, it is important for the tech ecosystem to work towards creating a more diverse and inclusive environment, where all ideas and voices are valued and given a fair chance to succeed. This can include efforts to diversify the pool of gatekeepers and decision-makers, as well as initiatives to support and empower underrepresented communities within the tech industry.</p>
<p>It's also important to recognize that the role of gatekeepers in the tech ecosystem is not solely limited to individuals or organizations. There are also structural and systemic factors that can act as gatekeepers, such as a lack of access to education or resources, or biases and discrimination within the industry.</p>
<p>To address these issues, it may be necessary to take a holistic approach that addresses both individual and systemic barriers to inclusion and opportunity. This could include initiatives such as education and training programs to increase access to tech skills, diversity and inclusion efforts to promote fairness and equity within the industry, and efforts to create a more inclusive and supportive culture within the tech ecosystem.</p>
<p>Ultimately, the goal should be to create a tech ecosystem that is open, diverse, and inclusive, and where all individuals and organizations have the opportunity to contribute and succeed. This will require ongoing efforts and commitment from all stakeholders in the tech industry, including startups, investors, and larger companies.</p>
<p>In addition to addressing individual and systemic barriers to inclusion, it is also important for the tech ecosystem to recognize the value of diverse perspectives and experiences. Research has shown that diverse teams and organizations tend to be more innovative and successful than homogenous ones. By embracing diversity and inclusivity, the tech industry can tap into the full range of talent and ideas available, leading to a more vibrant and innovative ecosystem.</p>
<p>One way to promote diversity and inclusivity within the tech ecosystem is through targeted initiatives and programs that support underrepresented groups. This could include things like mentorship programs, networking events, and partnerships with organizations that support diversity in tech.</p>
<p>It's also important for tech companies and organizations to adopt policies and practices that promote diversity and inclusivity, such as fair and inclusive hiring and promotion practices, and policies that support work-life balance and family-friendly environments.</p>
<p>Creating a more diverse and inclusive tech ecosystem will require a collective effort from all stakeholders, including startups, investors, and larger companies.</p>
<p>Another important aspect of creating a more diverse and inclusive tech ecosystem is ensuring that all individuals and organizations have equal access to resources and opportunities. This includes things like access to funding and investment, access to education and training, and access to networks and connections within the industry.</p>
<p>To promote greater access and equity, it may be necessary to take targeted actions such as creating accelerator programs or incubators specifically focused on supporting underrepresented groups, or providing grants and other forms of financial support to help these groups access the resources they need to succeed.</p>
<p>It's also important to recognize that access to resources and opportunities is not just a matter of individual effort or merit, but is also influenced by broader systemic and structural factors such as economic and social inequality. To address these issues, it may be necessary to take a more comprehensive approach that addresses the root causes of inequality and works to create a more level playing field for all.</p>
<p>Overall, promoting greater access and equity within the tech ecosystem requires a multifaceted approach that addresses both individual and systemic barriers to inclusion and opportunity. By working together and committing to creating a more inclusive and supportive environment, we can build a stronger and more vibrant tech ecosystem that benefits everyone.</p>
]]></content:encoded></item><item><title><![CDATA[Techpoint Build 2022 Attendee - Favour Chukwuedo]]></title><description><![CDATA[It was great to see the amazing Tech solutions young people are building at the just concluded Techpoint Build 2022. 
The event was an opportunity to engage with partners, academia, governments and developers – driving impact in sectors important to ...]]></description><link>https://favourchukwuedo.com/techpoint-build-2022-attendee-favour-chukwuedo</link><guid isPermaLink="true">https://favourchukwuedo.com/techpoint-build-2022-attendee-favour-chukwuedo</guid><category><![CDATA[events]]></category><category><![CDATA[technology]]></category><category><![CDATA[DevLife]]></category><category><![CDATA[community]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Sun, 23 Jan 2022 21:32:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1642973255247/sDLJ2GLVY.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It was great to see the amazing Tech solutions young people are building at the just concluded Techpoint Build 2022. </p>
<p>The event was an opportunity to engage with partners, academia, governments and developers – driving impact in sectors important to the continent across #EdTech, #HealthTech, #PropTech, #FinTech, #AgriTech and OffGrid energy. #TechTwitter</p>
<p>While there’s still so much work to be done in building our talent pipeline, it’ll be great to see more partnerships with local universities to create a modern intelligent digital literacy curriculum, totally unique to Africa.</p>
<p>You can check my <a target="_blank" href="https://twitter.com/SenseiFavour/status/1485196463386804226?s=20"><strong>Tweet</strong></a> for the original content</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642972472785/2MVkbENdY.jpeg" alt="FJx6S9TXIAEeXXc.jpeg" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1642972477239/Rs5zgjdqD.jpeg" alt="FJx6S_1XMAQFMBj.jpeg" /></p>
]]></content:encoded></item><item><title><![CDATA[Stateless And Stateful Widgets Just Like The States And Capital]]></title><description><![CDATA[Some context: This Article is written to appeal to the African tech Ecosystem.
I remember reciting the Nigerian States and its capital when I was much younger in primary school around Grade 4. The weird thing about that experience was that it was a c...]]></description><link>https://favourchukwuedo.com/stateless-and-stateful-widgets-just-like-the-states-and-capital</link><guid isPermaLink="true">https://favourchukwuedo.com/stateless-and-stateful-widgets-just-like-the-states-and-capital</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Widgets]]></category><category><![CDATA[Android]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Mon, 06 Sep 2021 19:00:00 GMT</pubDate><content:encoded><![CDATA[<p><mark>Some context: This Article is written to appeal to the African tech Ecosystem.</mark></p>
<p>I remember reciting the Nigerian States and its capital when I was much younger in primary school around Grade 4. The weird thing about that experience was that it was a criterion to <em>go for a break</em> - (have lunch and play with your friends before coming back to the class).</p>
<p>Not to brag too much, but I still have my A-game on and ready to run through 5 out of the 36 states under 5 seconds. You heard me right!</p>
<p>That said, how do we link this to stateless and stateful widgets in Flutter?</p>
<p>No vex! (<em>don’t be annoyed</em>). There's no way to link the states and capital to stateless and stateful widgets in Flutter.</p>
<p>However, if you followed through up to this point it means you have a great attention span to finish up to the end of this piece and also have heard of Flutter and how efficient it is in building cross-platform applications.</p>
<p>I have included in this article, two $1 tips each and hope you find it useful. So let’s dive in!</p>
<p>All the UI components in Flutter are known as widgets. A widget that contains all the code for a single screen of an application is either stateful or stateless. But how are they different?</p>
<h2 id="heading-stateful-widgets">Stateful Widgets</h2>
<p>If a widget can change for example when a user interacts with it, it’s stateful. It’s that simple but if you <em>get a coconut head like</em> me and love to learn the hard way, here’s a narrative: Stateful widgets have a mutable state, i.e., they are mutable and can be drawn multiple times within the application is in action- during its lifetime.</p>
<p>These are widgets that can change their state multiple times and can be redrawn on to the screen any number of times while the application is in action.</p>
<p>Here’s a typical structure of a stateful widget I believe you must have seen before</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1610459881358/_K6FiN2Gh.png" alt="carbon (2).png" /></p>
<p>The name of the widget in the structure above is “FavoriteWidget”, but now it overrides the “createState” method, instead of the “build” method, which returns the instance of the class “_FavoriteWidgetState”.</p>
<p>The class “_FavoriteWidgetState” extends from State&lt;&gt; which takes “FavoriteWidget” as a template input.</p>
<p>Now, this “_FavoriteWidgetState” overrides the “build” method and returns a widget. This is where you can define the UI of the app, which is Stateful. With it being a Stateful widget, you can call the build method any number of times, which will redraw the widgets on the screen.</p>
<h3 id="heading-1-tip">$1 TIP</h3>
<p>Stateful Widgets can be quickly built-in VS Code or Android Studio by using the “stf” shortcut.</p>
<h3 id="heading-examples-of-stateful-widgets">Examples of Stateful Widgets</h3>
<p>Checkbox, Radio, Slider, InkWell, Form, and TextField are examples of stateful widgets.</p>
<h2 id="heading-stateless-widgets">Stateless Widgets</h2>
<p>As opposed to stateful widgets, a stateless widget never changes. Meaning that they do not require a mutable state, i.e., it is immutable. Stateless widgets unlike stateful widgets cannot change their state, particularly during the application runtime. This implies that the widgets cannot be redrawn while the application is in action.</p>
<p>Here’s the basic structure of a Stateless Widget:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1610459894113/YlPL6zJP_.png" alt="carbon (3).png" /></p>
<p>The name of this Stateless Widget from the code snippet is “FavoriteStatelessWidget”, inside which we have to override the “build” method. The build in the method takes in a “BuildContext” as the parameter and returns a widget. That’s why the return type of the build method is a widget. And this is where the UI of this app screen can be designed, which is Stateless.</p>
<p>Just a heads up right here, In a Stateless widget, the “build” method can only be called ONCE while the app is in action, which is responsible for drawing the widgets onto the device screen.</p>
<h3 id="heading-1-tip-1">$1 TIP</h3>
<p>Stateless Widgets can be quickly built in VS Code or Android Studio by using the “stless” shortcut.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Stateful and Stateless widgets both have their use cases. However, a Stateless widget comes in handy when the part of the user interface being described does not depend on anything other than the configuration information and the BuildContext whereas a Stateful widget is useful when the part of the user interface changes dynamically. This concludes this article, and I hope you all have now understood the basic idea of Stateful and Stateless widgets. These concepts would be clearer if you do some projects on your own and get the feel of how the application handles the state.</p>
<p>If you are looking to get started learning Flutter, you can check out the course by Angela Yu. Also, my motivation for this article comes from my #2Weeks1Article challenge with the whole idea centered on starting small and staying consistent.</p>
<h2 id="heading-references">References</h2>
<p>https://flutter.dev/docs/development/ui/interactive</p>
<p>https://malshikay.medium.com/stateless-and-stateful-widgets-in-flutter-1b64617c25e2</p>
<p>https://stackoverflow.com/questions/56222962/how-to-change-from-stateless-widget-to-stateful-widget</p>
<p>https://medium.com/flutter-community/flutter-stateful-vs-stateless-db325309deae#:~:text=Stateful%20widgets%20have%20a%20mutable,the%20app%20is%20in%20action.</p>
<p>https://medium.com/flutter-community/flutter-stateful-vs-stateless-db325309deae</p>
<p>https://medium.com/@arpitgupta1250/stateless-and-stateful-widget-in-flutter-f082092f4179</p>
]]></content:encoded></item><item><title><![CDATA[How to Setup and Use Postman to Test APIs]]></title><description><![CDATA[Postman is arguably one of the best tools that developers use to test APIs that integrates seamlessly into their CI/CD pipeline. It began as a side project by Abhinav Asthana in 2012, with the goal of simplifying API workflow in testing and developme...]]></description><link>https://favourchukwuedo.com/how-to-setup-and-use-postman-to-test-apis</link><guid isPermaLink="true">https://favourchukwuedo.com/how-to-setup-and-use-postman-to-test-apis</guid><category><![CDATA[Postman]]></category><category><![CDATA[APIs]]></category><category><![CDATA[newbie]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Thu, 07 Jan 2021 00:08:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1641081979339/AED5OjgFO.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Postman is arguably one of the best tools that developers use to test APIs that integrates seamlessly into their CI/CD pipeline. It began as a side project by Abhinav Asthana in 2012, with the goal of simplifying API workflow in testing and development. API (Application Programming Interface) calls allow software applications to communicate with one another.</p>
<p>This technical article will cover:</p>
<ol>
<li>Why you should choose Postman and</li>
<li>How to Download and Install Postman</li>
</ol>
<p><strong>Why Postman</strong>?</p>
<p>When trying to decipher RESTful APIs created by others or test ones you've created yourself, Postman is a fantastic tool. It provides a simple user interface for making HTML requests, eliminating the need to write a lot of code just to test an API's functionality.</p>
<p>It has become a popular tool for the following reasons I call the <strong>3AC:</strong></p>
<p><strong>1. Adoption</strong></p>
<p>Postman has grown to over 13 million users. Today, Postman has at least one user in over 840,000 organizations around the world, including 98 per cent of the Fortune 500. </p>
<p>  <a target="_blank" href="https://www.businesswire.com/news/home/20210128005321/en/Postman%E2%80%99s-Vision-for-the-Next-Generation-of-APIs-Draws-4-Million-New-Users-in-2020#:~:text=Scaled%20to%20more%20than%2013,98%25%20of%20the%20Fortune%20500">Source</a> </p>
<p><strong>2. Accessibility</strong></p>
<p>To use the Postman tool, all one has to do is log in to their own accounts, making it simple to access files at any time and from any location as long as the Postman application is installed on the computer.</p>
<p><strong>3. Automation Testing</strong></p>
<p>Tests can be run in multiple iterations using the Collection Runner or Newman, saving time for repetitive tests.</p>
<p><strong>4. Creation of Test</strong></p>
<p>Test checkpoints can be added to each Postman API call to ensure test coverage, such as checking for a successful HTTP response status.</p>
<p><strong>5. Continuous Integration</strong></p>
<p>Development practices are maintained thanks to Postman’s ability to support continuous integration.</p>
<p>## </p>
<h2 id="heading-how-to-download-and-install-postman">How to Download and Install Postman</h2>
<p>Postman is a free and open-source tool that can be downloaded quickly. The installation procedure is as follows:</p>
<p><strong>1. Download Postman</strong></p>
<p>Go to <strong><a target="_blank" href="https://www.postman.com/downloads/">https://www.postman.com/downloads/</a></strong> and select Mac, Windows, or Linux based on your OS platform. Click on the Download button.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1641079943712/vvp1KpJ4M.png" alt="Screenshot 2022-01-02 at 12.32.16 AM.png" /></p>
<p>If you prefer a browser experience, you can try the new web version of Postman.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1641079987670/pXekbOSz1.png" alt="Screenshot 2022-01-02 at 12.32.59 AM.png" /></p>
<p><strong>2. Signup for a Postman Account</strong></p>
<p>When the installation is complete you will be required to create a Postman account. While postman allows you to use the tool without an account, signing up for a Postman account gives you the opportunity to organise your API development within postman workspaces and also synchronize your postman’s data across devices.</p>
<p><strong>3. Set up your workspace with the right tools and save your preferences</strong></p>
<p>In this step, you'll be required to select the task that you would want to accomplish with  Postman. Tick the option that applies to you and save your preferences.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1641080032275/zV5_yTuu7.png" alt="Screenshot 2022-01-02 at 12.33.46 AM.png" /></p>
<p><strong>4. Congratulations, your setup is complete!</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1641080065626/8PYRxA7Zr.png" alt="Screenshot 2022-01-02 at 12.20.30 AM.png" /></p>
<p>This is going to be the end of the first part of this technical article. In the next part, I will be talking about how to perform API calls - basically, the GET and POST requests using Postman and also other things you never thought you could do with Postman so keep an eye out and ears to the ground.  </p>
]]></content:encoded></item><item><title><![CDATA[Your Heroku App Will Stay Alive If You Do This]]></title><description><![CDATA[What Is Heroku?
Heroku is a cloud platform that lets people and companies build, deliver, monitor and scale apps seamlessly.
All time use of Heroku is absolutely easy and smooth with auto-deployment and anyone with basic knowledge of software develop...]]></description><link>https://favourchukwuedo.com/your-heroku-app-will-stay-alive-if-you-do-this</link><guid isPermaLink="true">https://favourchukwuedo.com/your-heroku-app-will-stay-alive-if-you-do-this</guid><category><![CDATA[Heroku]]></category><category><![CDATA[webapp]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Favour Chukwuedo]]></dc:creator><pubDate>Thu, 20 Aug 2020 15:49:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1641082995798/0NNuRPBAl.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-what-is-heroku">What Is Heroku?</h2>
<p>Heroku is a cloud platform that lets people and companies build, deliver, monitor and scale apps seamlessly.
All time use of Heroku is absolutely easy and smooth with auto-deployment and anyone with basic knowledge of software development can get started easily. Now this content is not only a value proposition to tell you to use Heroku. Of course <strong><em>"Why haven't you deployed your first app on Heroku by the way?"</em></strong> </p>
<p>If you want to know more about Heroku, check out their <a target="_blank" href="https://heroku.com">official website</a>.</p>
<h2 id="heading-but-why-did-i-choose-heroku">But Why Did I Choose Heroku?</h2>
<p>Heroku has their own pricing schemes and for beginners out there, their free tier is quite sufficient. But one downside of using the free tier is that your app is automatically put to sleep after 30 minutes of inactivity. </p>
<blockquote>
<p><strong>You need to calm down, I'm not done. 
</strong></p>
</blockquote>
<p>This does not mean your app will be dead after 30 minutes—it just means your app will take some time (within 5–10 seconds) to wake up. Thankfully, there are many ways out there to avoid that if your app cannot tolerate that. They walkaround is mostly based on <strong>pinging </strong>your app on interval(s).</p>
<h2 id="heading-how-did-i-keep-my-heroku-app-alive">How Did I Keep My Heroku App Alive?</h2>
<p>You can choose to keep you application alive by choosing any of the two options listed below. So walk with me.</p>
<ul>
<li>You can install the free <a target="_blank" href="http://addons.heroku.com/newrelic">New Relic add-on</a>. The New Relic add-on has an availability monitor feature. The availability monitor feature will ping your site two times in one minute, thus preventing the dyno from idling.</li>
</ul>
<blockquote>
<p><strong>P.S</strong> before you say this doesn't work, the important part of using the New Relic Addon is the "availability monitor". Just installing the addon won't do the job; you would have to also setup the availability monitoring using the URL of your Heroku app. </p>
</blockquote>
<ul>
<li>You can also handle pinging your own app manually or automate the process. Writing a function within your app to ping itself and still keeping to this restriction can be quite tricky. It is not impossible; you just have to spend some time writing a proper function to handle that. 
You may choose to do it manually but there is a catch- the Heroku free tier requires applications to sleep a minimum of seven hours every day. Unverified accounts get 550 of free dyno hours per month, which is equal to almost seven hours of sleep time for a month of 31 days. To be on the safe side, we’ll go with seven hours of sleep and I have chosen to automate the process but how was this possible?</li>
</ul>
<blockquote>
<p> <a target="_blank" href="https://cron-job.org/en/">cron-job[dot]org</a> to the rescue!</p>
</blockquote>
<h3 id="heading-follow-these-steps">Follow These Steps</h3>
<ul>
<li>Signup on https://cron-job.org/en/</li>
<li>Once the signup is completed, verify your email.</li>
<li>Once you log in successfully, click on the Cronjobs tab. And click on “Create cronjob”.</li>
<li>Now you can fill in the details. Make sure you enter URL accordingly.</li>
<li>When you reach the Schedule section, click on the option User-defined. Now make sure you select all the values in the columns Days of Month Days of Week, and Months. </li>
</ul>
<blockquote>
<p>Notice: You can select multiple entries by pressing and holding the Ctrl key while clicking the desired entries. Alternatively, drag over the desired entries while clicking and holding the left mouse button.
In the Hours column, you have to select all values except 0,1,2,3,4,5,6. Selecting all values except for 0,1,2,3,4,5,6, means my app will be asleep from 12 a.m. to 7 a.m. (no job at 6 a.m. means the app will be asleep at 6 a.m.). This step is essential as it satisfies the restriction for the free tier.</p>
</blockquote>
<ul>
<li>In the Minutes column, you will have to select values 0 and 30 only because your app will sleep every 30 minutes.</li>
</ul>
<p>Check the image reference below:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1597936381742/FYu7C_9V6.gif" alt="1_BsQjOBRAKgS-z9D91AuEjg.gif" /></p>
<p>This image is how your schedule settings will look in the end. Once everything looks fine, you are good-to-go. You can go ahead to create your cron job. </p>
<p>Never Stop Creating!</p>
]]></content:encoded></item></channel></rss>