<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Data Akkadian]]></title><description><![CDATA[Simplifies complex tech and data concepts through engaging, easy-to-understand stories. Perfect for anyone curious about how technology shapes our world. Join for fun, relatable insights!]]></description><link>https://zaidalissaalmaliki.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!bH9u!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7d47e3-3a6e-4318-a3ab-92395ba7a5fe_1024x1024.png</url><title>Data Akkadian</title><link>https://zaidalissaalmaliki.substack.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 09 Jun 2026 03:19:25 GMT</lastBuildDate><atom:link href="https://zaidalissaalmaliki.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Zaid Alissa Almaliki]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[zaidalissaalmaliki@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[zaidalissaalmaliki@substack.com]]></itunes:email><itunes:name><![CDATA[Zaid Alissa Almaliki]]></itunes:name></itunes:owner><itunes:author><![CDATA[Zaid Alissa Almaliki]]></itunes:author><googleplay:owner><![CDATA[zaidalissaalmaliki@substack.com]]></googleplay:owner><googleplay:email><![CDATA[zaidalissaalmaliki@substack.com]]></googleplay:email><googleplay:author><![CDATA[Zaid Alissa Almaliki]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Unit 4 Done: What GAIA Reveals About the Distance Between Acting and Achieving]]></title><description><![CDATA[AI Engineering Series]]></description><link>https://zaidalissaalmaliki.substack.com/p/unit-4-done-what-gaia-reveals-about</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/unit-4-done-what-gaia-reveals-about</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Mon, 20 Apr 2026 09:29:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rdnl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I completed Unit 4 of the Hugging Face AI Agents Course. The unit asks a question that sounds straightforward but is not: can an agent, given access to tools and a language model, answer real-world questions reliably enough to be useful? Not useful in a demo. Useful against a benchmark specifically designed to be easy for humans and punishing for AI systems.</p><p>The answer, for the agent I built, was yes about half the time. I scored 50% on the GAIA Level 1 evaluation set. The pass threshold for the certificate is 30%. That gap between 30% and 50% is not random. It is a direct product of architectural choices. This article explains what those choices were, what the code does, and what you need to understand if you want to replicate or improve on that result.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rdnl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rdnl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rdnl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rdnl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rdnl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rdnl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Unit 4 thumbnail&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Unit 4 thumbnail" title="Unit 4 thumbnail" srcset="https://substackcdn.com/image/fetch/$s_!rdnl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rdnl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rdnl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rdnl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58aae4b0-477a-4995-9024-f1cf447e7856_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>What GAIA Actually Tests</h3><p>Before discussing the agent, it is worth being precise about what GAIA is and why it is a credible benchmark.</p><p>GAIA is a benchmark designed to evaluate AI assistants on real-world tasks that require a combination of core capabilities, including reasoning, multimodal understanding, web browsing, and proficient tool use. It features 466 carefully curated questions that are conceptually simple for humans yet remarkably challenging for current AI systems. Humans achieve roughly 92% success. GPT-4 with plugins managed around 15%. OpenAI&#8217;s Deep Research reached 67.36% on the validation set.</p><p>That spread is informative. The difficulty is not linguistic. The questions are not ambiguous or poorly formed. The difficulty is structural. Answering correctly requires an agent to plan across multiple steps, call the right tools in the right order, handle file attachments, parse web content, and return an exact string match. There is no partial credit. Either the answer matches the ground truth precisely or it does not.</p><p>GAIA is organised into three levels. Level 1 requires fewer than five steps and minimal tool use. Level 2 involves more complex reasoning and coordination between multiple tools across five to ten steps. Level 3 demands long-term planning and advanced tool integration.</p><p>The course evaluation uses 20 questions drawn from Level 1. That is the correct starting point. Level 1 is tractable. It is also honest about where the field currently sits.</p><div><hr></div><h3>The Architecture: Three Files, One Deployed Space</h3><p>The agent I submitted lives in a public Hugging Face Space, not a GitHub repository. This matters because the course API requires a public code link ending in <code>/tree/main</code> pointing to your Space. The Space is the product. It is what gets evaluated.</p><p>The implementation consists of three files: <code>app.py</code>, <code>requirements.txt</code>, and <code>README.md</code>. That is it. There is no fourth file hiding complexity. The simplicity is intentional.</p><div><hr></div><h3>app.py: Where the Reasoning Happens</h3><p>The core of the system is a <code>smolagents.CodeAgent</code> backed by Claude Sonnet 3.5, accessed through LiteLLM. The decision to use LiteLLM as the model interface rather than calling the Anthropic API directly gives you flexibility: the same code works with any OpenAI-compatible endpoint by changing a single string. Claude Sonnet was chosen over smaller open-source models for a direct reason. GAIA Level 1 questions require multi-step reasoning in a single pass. Smaller models accumulate errors across steps. The quality of the underlying model is not a peripheral consideration. It is the primary determinant of ceiling performance.</p><p>The agent receives two tools. The first is DuckDuckGo web search, a standard component in most <code>smolagents</code> setups. When a question references a fact that changes over time, or one that a language model could not plausibly have memorised, the agent searches for it rather than confabulating. The second tool is a custom file reader. GAIA tasks frequently include attached files: spreadsheets, PDFs, text documents. Without the ability to read those files, a significant fraction of questions are unanswerable regardless of how well the agent reasons.</p><p>Here is what <code>app.py</code> does at a structural level. It authenticates with Hugging Face using the Gradio OAuth flow, fetches the list of evaluation questions from the course API, downloads any associated files for each question, runs the agent against each question, collects the answers, and posts them to the submission endpoint. The scoring is exact match. The prompt instructs the agent to return only the answer, with no preamble, no explanation, and no trailing text. That instruction is critical. The evaluation system does not strip formatting. If your agent writes &#8220;The answer is 1492&#8221; instead of &#8220;1492&#8221;, the answer is marked wrong.</p><p>The <code>CodeAgent</code> architecture generates Python code at each reasoning step rather than issuing JSON tool calls. This means the agent can write small programs to manipulate retrieved data. If a question asks for a sorted list derived from a spreadsheet, the agent can write a sort and return the result. This is more powerful than a tool-calling architecture for questions that require data transformation, not just data retrieval.</p><div><hr></div><h3>requirements.txt and README.md: The Operational Layer</h3><p><code>requirements.txt</code> specifies the exact package versions needed for the Space to build reliably. The key dependencies are <code>smolagents</code>, <code>litellm</code>, <code>anthropic</code>, <code>duckduckgo-search</code>, and <code>gradio</code>. Version pinning matters in production. HuggingFace Spaces rebuild from scratch when you push changes. An unpinned dependency that updates overnight can break your submission pipeline.</p><p><code>README.md</code> includes the Spaces metadata header, which must set <code>sdk: gradio</code> and <code>hf_oauth: true</code>. The OAuth flag is what enables the Gradio login button, which in turn provides your HuggingFace username to the submission API. Without it, the API cannot record who submitted the answers.</p><p>The <code>ANTHROPIC_API_KEY</code> is stored as a Space secret, not in the code. It is injected as an environment variable at runtime. You set this once in the Space settings. It is never visible in the public repository. This is not just good practice. It is mandatory. A key committed to a public Space is a key that will be rotated by Anthropic&#8217;s automated systems within hours.</p><div><hr></div><h3>The 50% Score: What Made the Difference</h3><p>The pass threshold is 30%, which corresponds to six correct answers out of twenty. I scored 50%, which is ten correct. The difference between a mediocre setup and a solid one on GAIA Level 1 is not primarily about the framework. It is about three specific decisions.</p><p>The first is model selection. Claude Sonnet reasons reliably across five or more sequential steps without losing track of the original goal. Many students attempting this unit with smaller open-source models report scores in the 20 to 35 percent range not because their tool setup was wrong, but because the model failed midway through a reasoning chain and either looped or gave up.</p><p>The second is the file reader tool. Roughly a third of GAIA Level 1 questions include an attached file. An agent without file-reading capability is effectively forfeiting those questions. Adding a tool that reads text, CSV, or basic document formats and returns the content as a string is a low-effort, high-return improvement.</p><p>The third is the system prompt. The exact-match scoring penalises agents that are verbose. Every agent needs an explicit instruction to answer with the bare minimum: no &#8220;Based on my research...&#8221;, no &#8220;The answer is...&#8221;, just the answer. This is not obvious if you have been building agents for conversational use cases. In a conversational context, verbosity reads as helpfulness. In a benchmarked evaluation, it reads as a wrong answer.</p><div><hr></div><h3>Where the 50% Did Not Come From</h3><p>Intellectual honesty requires addressing what the agent got wrong. Multi-hop retrieval failures account for a significant portion of the missed questions. GAIA Level 1, while simpler than Levels 2 and 3, still includes questions that require finding fact A, using fact A to look up fact B, and then performing a transformation on fact B. If the web search at step one returns a page that partially answers the question, the agent sometimes treats that partial answer as complete and moves to the submission step too early. This is not a tool failure. It is a planning failure. The agent does not have a strong enough internal check for whether it has actually resolved the original question.</p><p>Multimodal questions were also a consistent failure point. Some GAIA tasks include images that must be analysed as part of the answer. The current setup does not pass image content to the model. Those questions were effectively unresolvable with this architecture.</p><p>Students aiming for scores above 50% on this evaluation should focus on those two failure modes. Better replanning logic, periodic self-checks against the original question, and vision-capable model integration are the most direct paths to improvement. This is speculation based on observed failure patterns, not a guaranteed prescription.</p><div><hr></div><h3>Deploying on a HuggingFace Space</h3><p>The deployment process is deliberate. You create a new Space, set the SDK to Gradio in the Space creation form, and add <code>hf_oauth: true</code> to the README metadata. You upload the three files. You add the Anthropic API key as a secret in the Space settings. The Space builds automatically.</p><p>Once the Space is live, you open it in a browser, log in with your HuggingFace account, and click the evaluation button. The app runs the agent against all twenty questions, collects the answers, and submits them. The course API scores the submission and updates the student leaderboard. Your Space code link is attached to your leaderboard entry. The leaderboard requires the Space to remain public. If you make it private, the submission is effectively unverifiable and may be removed.</p><p>The entire flow, from a blank Space to a scored submission, takes under an hour if the Space builds cleanly. If you hit dependency conflicts, check your Python version assumption. HuggingFace Spaces default to a recent Python version. If <code>smolagents</code> or LiteLLM has a minimum version requirement, pin explicitly.</p><div><hr></div><h3>What Unit 4 Actually Teaches</h3><p>The GAIA benchmark is valuable not because it is hard to game, though it is, but because it measures something real. Correct answers demand full task execution, making brute-forcing ineffective. Answers are concise, factual, and unambiguous, which is ideal for benchmarking.</p><p>What it measures is the gap between a language model that can discuss a topic and an agent that can resolve a task. That gap is larger than most practitioners expect. The course sequence up to this point has built each piece: action representation in Unit 2, retrieval in Unit 3. Unit 4 places those pieces under adversarial conditions. The questions do not cooperate. The files are real. The web search returns noise alongside signal.</p><p>The result is an honest accounting of where agent technology sits today. Capable, narrow, and dependent on strong underlying models and precise tool design. The 50% ceiling is not a failure of the framework. It reflects the genuine difficulty of reliable multi-step reasoning under uncertainty.</p><p>If you are working through the course and want to see where you stand, the student leaderboard is public and updated in real time at <a href="https://huggingface.co/spaces/agents-course/Students_leaderboard">Student Board</a>. My certificate submission, along with those of other students who cleared the threshold, is visible in the course discussion at <a href="https://huggingface.co/spaces/agents-course/Unit4-Final-Certificate/discussions/173">Certificate</a>. Both links are worth checking before you submit. The leaderboard shows what scores are actually achievable with different setups, and the discussion thread contains honest accounts from students who cleared 30%, 50%, and above. That is more useful than any tutorial.</p><p>The code is hosted publicly at my <a href="https://huggingface.co/spaces/zaidalissa/Final_Assignment_Agent_Course/tree/main">HuggingFace Space</a>. It is three files. Read them before you write your own.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2></h2>]]></content:encoded></item><item><title><![CDATA[Unit 3 Done: What Agentic RAG Reveals About the Gap Between Knowing and Finding]]></title><description><![CDATA[AI Engineering Series]]></description><link>https://zaidalissaalmaliki.substack.com/p/unit-3-done-what-agentic-rag-reveals</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/unit-3-done-what-agentic-rag-reveals</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Mon, 20 Apr 2026 07:45:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nN59!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I completed Unit 3 of the Hugging Face AI Agents course. The module addresses a problem that is deceptively simple to state and surprisingly difficult to solve correctly: how do you give an agent access to information it was never trained on, and how do you ensure it actually uses that information rather than confabulating a plausible substitute?</p><p>Units 2.1 through 2.3 examined how agents act, how they represent action as code or structured calls, and how execution flow can be controlled by the developer rather than delegated entirely to the model. Unit 3 changes the question. It stops asking how agents act and starts asking what agents know. The answer it builds toward is not optimistic. Agents, by default, know only what was in their training data. That data has a cutoff date. It contains no record of your guests, your private documents, or your organisation&#8217;s internal state. Retrieval Augmented Generation exists precisely to address this structural limitation.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What follows is not a walkthrough of the documentation. It is an account of what the code we built reveals about the architecture of memory, retrieval, and tool composition in agent systems, explained as plainly as possible.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nN59!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nN59!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nN59!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nN59!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nN59!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nN59!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Agentic RAG banner&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Agentic RAG banner" title="Agentic RAG banner" srcset="https://substackcdn.com/image/fetch/$s_!nN59!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nN59!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nN59!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nN59!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc464f129-31fb-4088-b675-7db7739e1455_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The Problem the Course Sets Up</h3><p>The course frames the unit around a gala. Alfred, the agent, is hosting a party and needs to answer questions about guests, weather conditions, and the professional work of AI researchers attending the event. None of this information lives inside a language model. Guest names, email addresses, and personal anecdotes are bespoke data. The model cannot recall what it was never shown.</p><p>This is not a hypothetical limitation. It is a mathematical one. A language model is a function trained on a fixed corpus. Its parameters encode statistical relationships across tokens in that corpus. Information that never appeared in the corpus does not influence any parameter. Asking the model to recall it produces not silence but confident fabrication, because the model has no mechanism to distinguish between knowing something and generating something plausible.</p><p>RAG solves this by separating storage from reasoning. You keep the information in a retrieval system. When a question arrives, you fetch the relevant records first, then pass them to the model as context. The model reasons over retrieved content rather than over its own compressed memory. The agent variant, Agentic RAG, goes one step further. Rather than forcing retrieval to happen on every query, the agent decides when retrieval is necessary. It treats the retrieval system as one tool among several, calling it only when the question warrants it.</p><p>That is the architecture this unit builds. The five files we wrote during the session implement it from the ground up.</p><div><hr></div><h3>guest_data: The Filing Cabinet</h3><p>Think of <code>guest_data</code> as building a filing cabinet. You start with a raw table of information: each guest has a name, a relation to the host, a description, and an email address. That table, pulled from the Hugging Face dataset <code>agents-course/unit3-invitees</code>, is structured for storage but not for search.</p><p>The code converts each row into a <code>Document</code> object. A <code>Document</code> is nothing more than a text string plus a small dictionary of metadata. The text string concatenates all the guest fields into a single readable block. The metadata stores the guest&#8217;s name separately so it can be used for filtering later.</p><p>This step is not technically sophisticated, but it is architecturally important. You are making a decision about how information will be represented before retrieval. Every decision made here affects what the retriever can find. If you omit a field from the text block, the retriever cannot match against it. If you format the fields inconsistently, keyword matching degrades. The quality of what the agent can retrieve is bounded by the quality of what you put into the filing cabinet.</p><p>In Feynman terms: imagine writing index cards for every guest. On each card you write their name, how you know them, a short story about them, and their contact details. The next step is building a system to find the right card when someone asks a question.</p><div><hr></div><h3>retriever: The Librarian</h3><p>The <code>retriever</code> file builds the search mechanism on top of the filing cabinet. The specific algorithm used is BM25, which stands for Best Match 25. You do not need to memorise the name. What matters is what it does.</p><p>BM25 is a keyword scoring function. Given a query and a collection of documents, it scores each document by how well its words match the query words, with corrections applied for document length and word frequency. A document that contains the query term ten times is not ten times as relevant as one that contains it once. BM25 applies a diminishing return to term frequency and a normalisation factor for length, so short documents with one precise match can outscore long documents with many incidental mentions.</p><p>The practical implication is that BM25 requires no machine learning model to run. There are no embeddings, no vector database, no GPU. It is a deterministic function over word counts. This makes it fast, cheap, and reproducible. The tradeoff is that it matches words, not meanings. A query for &#8220;mathematician&#8221; will not match a document that says &#8220;logician&#8221; unless those two words appear together somewhere in the corpus.</p><p>The <code>GuestInfoRetrieverTool</code> wraps BM25 in the <code>smolagents</code> Tool interface. This wrapper is what makes the retriever visible to the agent. The <code>name</code> and <code>description</code> fields are not documentation for human readers. They are the signal the agent uses to decide whether to call this tool at all. If the description is vague, the agent may call the wrong tool or skip retrieval entirely. Precise descriptions are not a nicety. They are load-bearing.</p><p>The <code>forward</code> method takes a query string, runs it through the BM25 retriever, and returns the top three matching documents as a single formatted string. The agent receives this string as the result of a tool call and incorporates it into its next reasoning step.</p><p>In Feynman terms: the retriever is a very fast librarian who cannot read, but can match words. You hand her a note that says &#8220;Ada Lovelace&#8221; and she finds every index card with those words on it, sorted by how prominently those words appear. She hands back the top three cards. She never interprets. She only matches.</p><div><hr></div><h3>tools: The Specialist Staff</h3><p>The <code>tools</code> file adds three capabilities that have nothing to do with the guest list. This is where the architecture reveals something important about how agentic systems differ from simple retrieval pipelines.</p><p>A plain RAG system has one retrieval path. A query arrives, retrieval runs, the model answers. The retriever and the query are tightly coupled. If the question is not about the documents, the system fails gracefully or produces a hallucination because it has nothing else to offer.</p><p>An agentic RAG system has multiple retrieval paths. The agent chooses which one to invoke. The <code>tools</code> file equips Alfred with three additional tools: a web search tool using DuckDuckGo for current events, a weather tool that calls an external API for location-specific forecasts, and a Hub stats tool that queries the Hugging Face Hub for model download statistics.</p><p>Each of these tools is a separate class that inherits from the <code>Tool</code> base class in <code>smolagents</code>. Each defines its <code>name</code>, <code>description</code>, <code>inputs</code>, and a <code>forward</code> method. The pattern is identical for every tool. This is intentional. The framework enforces a consistent interface so the agent can treat all tools symmetrically. From the agent&#8217;s perspective, calling the weather tool and calling the guest retriever are the same operation: provide a string input, receive a string output, reason over the result.</p><p>The weather tool in this unit uses dummy data. It returns a randomly selected condition from a hardcoded list. This is an honest simplification. The course signals clearly that a production implementation would call the OpenWeatherMap API or equivalent. The structure of the tool does not change when you swap the data source. Only the <code>forward</code> method changes.</p><p>The Hub stats tool calls a real API. Given an author name, it queries the Hugging Face Hub for that author&#8217;s most downloaded model and returns the model name and download count. This is a live call against production infrastructure. The tool demonstrates that agents can interact with external services in real time, not just retrieve from static documents.</p><p>In Feynman terms: imagine Alfred has three specialist consultants on speed dial. One searches the internet. One calls a weather station. One queries a database of AI model statistics. Alfred decides who to call based on the question. The guest list lives in a separate system. These consultants handle everything outside it.</p><div><hr></div><h3>app: Assembling Alfred</h3><p>The <code>app</code> file is where the components come together. It initialises the model, instantiates each tool, and creates the agent by passing all four tools into a <code>CodeAgent</code>.</p><p>The <code>CodeAgent</code> class in <code>smolagents</code> uses a model to generate and execute Python code at each reasoning step. This is the same architecture examined in Unit 2.1. The agent does not produce JSON function calls. It writes Python code that calls the tools it needs, executes that code, observes the output, and decides what to do next. The code is ephemeral. Each step produces new code based on the current state of the reasoning trace.</p><p>The <code>planning_interval=3</code> parameter instructs the agent to produce an explicit plan every three steps. This is a concession to the context window. Without periodic replanning, the agent&#8217;s reasoning trace can drift as the number of steps grows. Forcing a planning step introduces a checkpoint where the agent re-evaluates its progress against the original goal. This reduces the probability of the agent pursuing a locally coherent but globally irrelevant sequence of tool calls.</p><p>The <code>add_base_tools=True</code> parameter adds the framework&#8217;s built-in tools to Alfred&#8217;s toolkit alongside the custom ones. These include a Python code executor and a basic file reader. They are supplemental. The four custom tools carry the actual functional weight.</p><p>In Feynman terms: <code>app.py</code> is the moment Alfred walks into the room fully dressed. Before this file, you had a wardrobe full of separate items: a filing system, a librarian, three specialist consultants, and a reasoning engine. This file puts them all together and says: Alfred, here is everything you need, now answer questions.</p><div><hr></div><h3>app_with_memory: The Follow-Up Conversation</h3><p>The <code>app_with_memory</code> component addresses a structural limitation in the base agent. By default, every time you call <code>alfred.run()</code>, the agent begins with a blank slate. It has no knowledge of what it found in the previous call. If you ask &#8220;Tell me about Ada Lovelace&#8221; and then follow up with &#8220;What projects is she currently working on?&#8221;, the second call does not know who &#8220;she&#8221; refers to.</p><p>The fix in <code>smolagents</code> is a single parameter: <code>reset=False</code>. Passing this to <code>alfred.run()</code> on subsequent calls instructs the agent to retain its message history from previous calls rather than clearing it. The conversation accumulates. The agent can refer back to what it found, what tools it called, and what conclusions it reached.</p><p>This is not the same as persistent memory. The history lives in the process. If you restart the server, it disappears. For a gala use case, this is sufficient. Alfred needs to remember what he discussed with you five minutes ago, not what he discussed at last year&#8217;s gala. For production systems requiring true persistence, the message history must be serialised and stored externally between sessions.</p><p>The course notes, correctly, that memory in agentic frameworks is not a default. smolagents requires the explicit <code>reset=False</code> flag. LlamaIndex requires a context object to be passed. LangGraph offers a <code>MemorySaver</code> component that checkpoints state to a store. All three frameworks treat memory as opt-in because stateless execution is easier to reason about, debug, and test. The choice to add memory is a deliberate architectural decision, not a configuration option to tick by default.</p><p>In Feynman terms: without memory, each time you speak to Alfred he has just woken up from dreamless sleep. He is polite and capable but has no idea who you spoke about a moment ago. With <code>reset=False</code>, Alfred remembers the thread. He can refer to Ada by name in the next sentence because he recalls mentioning her in the last one.</p><div><hr></div><h3>What the Unit Reveals About the Architecture of Agent Knowledge</h3><p>The five files in this unit implement a clear separation of concerns. Guest data is stored as documents. The retriever indexes those documents and exposes search as a callable tool. The additional tools expose external services through the same interface. The agent receives all tools with equal standing and decides which to use based on the question. Memory, when enabled, allows multi-turn reasoning over a persistent context.</p><p>This separation is not ornamental. It reflects a genuine architectural truth. An agent&#8217;s knowledge has two components: parametric knowledge, which is whatever the model absorbed during training and cannot be changed without retraining, and contextual knowledge, which is whatever you inject at inference time through retrieval, tool calls, and conversation history. Agentic RAG is a framework for maximising the quality and relevance of contextual knowledge.</p><p>The limitation the course does not fully address is precision. BM25 retrieves by keyword match. If the guest&#8217;s description uses different vocabulary to the query, retrieval can fail silently. The agent receives an empty result, and the model, faced with nothing concrete, may fall back on parametric knowledge, which is where fabrication begins. For higher-stakes applications, embedding-based retrieval or hybrid approaches that combine keyword and semantic search are more robust. The course acknowledges this and points toward sentence-transformers as a natural next step.</p><p>That is an honest position. BM25 is a sound baseline. It is not the ceiling.</p><p>All corrected notebooks with documented observations are available in our <a href="https://github.com/Nawter/HuggingFace-AI-Agents-Course">GitHub</a> repository. Each correction includes a comment explaining the root cause and the reasoning behind the fix.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Unit 2.3 Done: What LangGraph Reveals About the Case for Controlled Agent Orchestration]]></title><description><![CDATA[AI Engineering Series]]></description><link>https://zaidalissaalmaliki.substack.com/p/unit-23-done-what-langgraph-reveals</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/unit-23-done-what-langgraph-reveals</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Fri, 17 Apr 2026 17:13:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DbDo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I completed Unit 2.3 of the Hugging Face AI Agents course. The module covers LangGraph, a framework developed by LangChain for building applications where the developer, not the model, controls the execution flow. Where Unit 2.1 examined action representation through code versus JSON, and Unit 2.2 addressed how agents retrieve information they were never trained on, this unit confronts a third foundational problem: how to impose deterministic structure on workflows that contain non-deterministic components.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What follows is not a summary of the documentation. It is an account of what the material reveals about orchestration philosophy, state management, and the control-versus-freedom tradeoff in agent architecture when read with an engineering perspective.</p><p>One practical note before the substance: we ran the notebooks in this unit end to end, as we did in the previous two. We encountered one error that is not addressed in the course material, which I document in the errors section below.</p><div><hr></div><h3>The Architectural Position LangGraph Occupies</h3><p>Every agent framework must answer the same question: who decides what happens next, the developer or the model?</p><p>smolagents answers clearly. The model decides. It writes Python code, calls tools in whatever order it determines, and the framework executes what it produces. The developer defines tools and sets constraints, but the model controls the sequence. LlamaIndex occupies a middle position. Its workflow system lets the developer define steps and event types, but agents within those steps retain autonomy over tool selection and reasoning.</p><p>LangGraph sits at the opposite end of this spectrum. The developer designs a directed graph of nodes and edges. The graph defines every possible path the execution can take. The model operates within individual nodes, but the transitions between nodes are specified in code. This is not a subtle difference. It is a fundamentally different philosophy about where intelligence should reside in an agentic system.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DbDo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DbDo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!DbDo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!DbDo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!DbDo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DbDo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Unit 2.3 Thumbnail&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Unit 2.3 Thumbnail" title="Unit 2.3 Thumbnail" srcset="https://substackcdn.com/image/fetch/$s_!DbDo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!DbDo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!DbDo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!DbDo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7465b5d-8afa-451b-a5c9-e383c42fd237_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The course frames this as a tradeoff between &#8220;control&#8221; and &#8220;freedom.&#8221; That framing is correct, but it understates the engineering implications. Freedom means the model can adapt to unforeseen situations. Control means the developer can guarantee that certain states are always reached, that certain checks always occur, and that the system behaves predictably under audit. For production systems that handle sensitive data, interact with customers, or make decisions with legal consequences, control is not a preference. It is a requirement.</p><div><hr></div><h3>The Three Primitives: State, Nodes, Edges</h3><p>LangGraph&#8217;s entire abstraction rests on three concepts. Understanding them is sufficient to build any application the framework supports.</p><p><strong>State</strong> is a user-defined <code>TypedDict</code> that carries all information through the graph. Every node receives the current state and returns updates to it. This is the most consequential design decision in the framework, because the state definition determines what the graph can reason about. If a piece of information is not in the state, no node can access it. If a field is poorly typed or ambiguously named, every node that touches it inherits that ambiguity.</p><p>The course demonstrates this with an <code>EmailState</code> that tracks the email being processed, its classification, spam reasoning, a draft response, and the full message history with the LLM. This is a well-structured example precisely because every field serves a clear purpose in at least one node. In practice, state design is where most LangGraph applications succeed or fail. A bloated state that tracks irrelevant information slows every node. A lean state that omits a critical field forces you to restructure the entire graph when you discover the omission.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kscl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kscl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Kscl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Kscl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Kscl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kscl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg" width="200" height="303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:303,&quot;width&quot;:200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Graph Visualization&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Graph Visualization" title="Graph Visualization" srcset="https://substackcdn.com/image/fetch/$s_!Kscl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Kscl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Kscl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Kscl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a12ada6-81b5-45e5-a617-d56a18fe8d71_200x303.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One detail worth noting: LangGraph supports annotated state fields with custom operators. The <code>add_messages</code> operator, demonstrated in the document analysis example, appends new messages to the list rather than overwriting it. This is a meaningful feature for any application where multiple nodes contribute to a conversation history. Without it, every node would need to manually concatenate its messages with the existing list, which is error-prone and verbose.</p><p><strong>Nodes</strong> are Python functions. Each receives the state, performs some operation, and returns a dictionary of state updates. The framework merges these updates into the current state before passing it to the next node. Nodes can contain LLM calls, tool invocations, deterministic logic, or side effects like printing or logging.</p><p>The simplicity of this interface is LangGraph&#8217;s most under-appreciated advantage. A node is just a function. It can be unit-tested independently of the graph. It can be replaced without modifying adjacent nodes. It can be reused across different graphs. This composability is not theoretical. It is the direct consequence of a clean functional interface that takes state in and returns state updates out.</p><p><strong>Edges</strong> define transitions between nodes. There are two types. Regular edges connect one node unconditionally to another. Conditional edges invoke a routing function that inspects the current state and returns a string indicating which node to visit next. The routing function&#8217;s return value must match one of the keys in a mapping provided to <code>add_conditional_edges</code>.</p><p>This is where the control philosophy manifests concretely. In smolagents, the model decides the next action at every step. In LangGraph, the developer writes a routing function that makes that decision based on state. The routing function can be as simple as checking a boolean field, or as complex as evaluating multiple conditions across several state fields. The point is that the logic is explicit, inspectable, and testable. It does not depend on the model&#8217;s judgement at transition time.</p><div><hr></div><h3>The Email Classification Graph: Structured Workflow Without Agency</h3><p>The first practical example in the course builds an email processing system. It reads an email, classifies it as spam or legitimate using an LLM, then either discards it or drafts a response. The course is explicit that this is not an agent. No tool calling is involved. The purpose is to demonstrate LangGraph&#8217;s orchestration primitives in isolation from agentic complexity.</p><p>This is a sound pedagogical choice. The graph has five nodes: <code>read_email</code>, <code>classify_email</code>, <code>handle_spam</code>, <code>draft_response</code>, and <code>notify_mr_hugg</code>. It has one conditional edge after classification that routes to either the spam handler or the response drafter based on the <code>is_spam</code> field in the state.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!53xb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!53xb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 424w, https://substackcdn.com/image/fetch/$s_!53xb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 848w, https://substackcdn.com/image/fetch/$s_!53xb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 1272w, https://substackcdn.com/image/fetch/$s_!53xb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!53xb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png" width="352" height="570" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:570,&quot;width&quot;:352,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Mail LangGraph&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Mail LangGraph" title="Mail LangGraph" srcset="https://substackcdn.com/image/fetch/$s_!53xb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 424w, https://substackcdn.com/image/fetch/$s_!53xb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 848w, https://substackcdn.com/image/fetch/$s_!53xb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 1272w, https://substackcdn.com/image/fetch/$s_!53xb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc44481d1-067b-41bd-ab49-cf8d5d1d182c_352x570.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The classification node is worth examining closely. It constructs a prompt, calls the LLM, and parses the response with string matching to determine whether the email is spam. The parsing logic checks whether &#8220;spam&#8221; appears in the response and &#8220;not spam&#8221; does not. This is fragile. A response containing &#8220;this is not spam&#8221; would be correctly handled, but a response containing &#8220;I considered whether this might be spam, but it is legitimate&#8221; would be misclassified. In production, you would replace this with structured output parsing or a dedicated classification call with constrained output format.</p><p>The graph construction follows a consistent pattern: instantiate <code>StateGraph</code> with the state type, add nodes, add edges from <code>START</code> to the first node, add regular and conditional edges between nodes, and terminate paths with <code>END</code>. The <code>compile()</code> call produces an executable graph. This pattern is identical for every LangGraph application regardless of complexity. Once you internalise it, you can read any LangGraph codebase without additional explanation.</p><p>The course also introduces Langfuse for observability. The integration is a single callback handler passed to <code>compiled_graph.invoke()</code>. This is operationally important because LangGraph applications with multiple conditional paths are difficult to debug from logs alone. A tracing tool that shows which nodes executed, in what order, and what state transformations occurred at each step is not optional for production deployments. It is necessary infrastructure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!czmj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!czmj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 424w, https://substackcdn.com/image/fetch/$s_!czmj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 848w, https://substackcdn.com/image/fetch/$s_!czmj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!czmj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!czmj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png" width="1456" height="1011" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1011,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!czmj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 424w, https://substackcdn.com/image/fetch/$s_!czmj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 848w, https://substackcdn.com/image/fetch/$s_!czmj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 1272w, https://substackcdn.com/image/fetch/$s_!czmj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9c838a-e0f8-4369-8394-95f42c7561f3_1480x1028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>The Document Analysis Agent: ReAct Within a Graph</h3><p>The second example introduces genuine agency. It builds a document analysis system where the model can call tools: a vision model for text extraction from images, and a division function for calculations. The architecture follows the ReAct pattern, where the model reasons about what tool to call, calls it, observes the result, and decides whether to continue.</p><p><strong>[INSERT IMAGE: Alfred&#8217;s Document Analysis Workflow]</strong> </p><p>The critical difference from the email classifier is the loop. After the <code>assistant</code> node produces a tool call, the graph routes to a <code>tools</code> node that executes the call, then routes back to the <code>assistant</code> node. This cycle continues until the model produces a response that is not a tool call, at which point <code>tools_condition</code> routes to <code>END</code>.</p><p>This is where LangGraph&#8217;s graph structure earns its value. The loop is not implicit. It is an explicit edge from <code>tools</code> back to <code>assistant</code>. The termination condition is not hidden inside the model&#8217;s reasoning. It is a named function, <code>tools_condition</code>, that the developer can inspect, test, and replace. If you wanted to add a maximum iteration limit, you would modify the routing function to check a counter in the state. If you wanted to add a human approval step before certain tool calls, you would add a node between <code>assistant</code> and <code>tools</code> with a conditional edge.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TiKw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TiKw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 424w, https://substackcdn.com/image/fetch/$s_!TiKw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 848w, https://substackcdn.com/image/fetch/$s_!TiKw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 1272w, https://substackcdn.com/image/fetch/$s_!TiKw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TiKw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png" width="228" height="251" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/72747827-999e-472c-b182-a931cf75f443_228x251.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:251,&quot;width&quot;:228,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TiKw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 424w, https://substackcdn.com/image/fetch/$s_!TiKw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 848w, https://substackcdn.com/image/fetch/$s_!TiKw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 1272w, https://substackcdn.com/image/fetch/$s_!TiKw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F72747827-999e-472c-b182-a931cf75f443_228x251.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The <code>ToolNode</code> class from LangGraph&#8217;s prebuilt module handles tool execution. You pass it a list of tools, and it automatically dispatches calls based on the model&#8217;s output. The <code>tools_condition</code> function inspects the model&#8217;s last message and returns either <code>"tools"</code> if a tool call is present or routes to <code>END</code> if not. These are convenience abstractions, but they encode a specific pattern: the ReAct loop as a two-node cycle with a conditional exit.</p><p>The state in this example uses <code>Annotated[list[AnyMessage], add_messages]</code>, which means the message list accumulates across all nodes rather than being overwritten. This is essential for the ReAct pattern because the model needs to see the full history of its reasoning, tool calls, and tool results to make informed decisions about what to do next.</p><div><hr></div><h3>Where We Found Errors in the Notebooks</h3><p>We found one error when running the notebooks locally that the course does not address. It does not appear in every environment, but when it does, it produces alarming output that obscures the actual results.</p><p><strong>Asyncio task destruction warning in Jupyter when invoking the LangGraph agent.</strong> When running the document analysis agent notebook locally in a Jupyter environment, the cell that calls <code>react_graph.invoke()</code> completes its execution and returns the correct result, but immediately afterwards the kernel emits a cascade of warnings:</p><pre><code><code>Task was destroyed but it is pending!
task: &lt;Task pending name='Task-190' coro=&lt;_async_in_context.&lt;locals&gt;.run_in_context() done,
defined at .../ipykernel/utils.py:57&gt; wait_for=&lt;Task pending name='Task-191'
coro=&lt;Kernel.shell_main() running at .../ipykernel/kernelbase.py:597&gt;
cb=[Task.task_wakeup()]&gt; cb=[ZMQStream._run_callback.&lt;locals&gt;._log_error() ...]&gt;

/Users/.../.pyenv/versions/3.12.4/lib/python3.12/typing.py:407: RuntimeWarning:
coroutine 'Kernel.shell_main' was never awaited

RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Task was destroyed but it is pending!
task: &lt;Task pending name='Task-191' coro=&lt;Kernel.shell_main() running at
.../ipykernel/kernelbase.py:597&gt; cb=[Task.task_wakeup()]&gt;
</code></code></pre><p>This error looks severe but is not. The root cause is a conflict between LangGraph&#8217;s internal async execution and Jupyter&#8217;s own event loop. LangGraph uses asyncio internally even when you call the synchronous <code>.invoke()</code> method. It creates a new event loop, runs the graph, and tears the loop down. When this happens inside Jupyter, which already has its own running event loop managed by <code>ipykernel</code>, the teardown of LangGraph&#8217;s temporary loop can orphan pending tasks that belong to the Jupyter kernel itself. The kernel continues to function, but the Python runtime emits warnings about tasks that were destroyed before completion.</p><p>The fix requires one of two approaches. The first and simplest is to use <code>nest_asyncio</code>, which patches Python&#8217;s event loop to allow nested execution:</p><pre><code><code>import nest_asyncio
nest_asyncio.apply()

# Then invoke normally
result = react_graph.invoke({"messages": messages, "input_file": None})
</code></code></pre><p>The second approach, more appropriate for production code, is to use the async interface directly:</p><pre><code><code>result = await react_graph.ainvoke({"messages": messages, "input_file": None})
</code></code></pre><p>This works because <code>ainvoke</code> cooperates with the existing Jupyter event loop rather than creating a competing one. The course uses <code>.invoke()</code> throughout, which is the correct default for scripts but can produce these warnings in notebook environments. The warnings are cosmetic in the sense that the computation completes correctly, but they are operationally concerning because they make it difficult to distinguish genuine errors from async lifecycle noise in the notebook output.</p><p>We installed <code>nest_asyncio</code> and added the two-line patch at the top of the notebook. The warnings disappeared and all subsequent cells executed cleanly.</p><div><hr></div><h3>What the Course Gets Right</h3><p>The progression from a non-agentic workflow to an agentic one within the same framework is the strongest aspect of this unit. It demonstrates that LangGraph is not exclusively an agent framework. It is a workflow orchestration framework that can accommodate agents when the application requires them. This distinction matters because many production applications need both: deterministic preprocessing and postprocessing stages surrounding a core agentic loop.</p><p>The graph visualisation capability, available through <code>get_graph().draw_mermaid_png()</code>, is more valuable than the course suggests. When a graph has more than five or six nodes with multiple conditional edges, the ability to render it visually and confirm that all paths lead to <code>END</code> is a debugging tool of genuine practical importance.</p><p>The course also correctly positions LangGraph as compatible with but independent from LangChain. The LangChain classes (<code>ChatOpenAI</code>, <code>HumanMessage</code>) are used for convenience, but the graph structure itself has no dependency on them. You could replace every LangChain component with raw API calls and the graph would function identically. This separation is important for teams that want LangGraph&#8217;s orchestration without committing to LangChain&#8217;s abstraction layer for model interaction.</p><div><hr></div><h3>Where LangGraph Sits in the Framework Landscape</h3><p>Smolagents provides the most freedom. The model writes and executes Python code, choosing its own tools and execution order. This makes it powerful for exploratory tasks where the optimal sequence of actions is unknown at design time. The cost is unpredictability. You cannot guarantee what path the agent will take, and the context window fills with intermediate reasoning that the developer cannot control.</p><p>LlamaIndex provides the most complete retrieval infrastructure. Its five-stage pipeline, tool system, and workflow abstraction make it the strongest choice when the core challenge is finding and reasoning over information the model was not trained on. Its workflow system offers structured orchestration, but the framework&#8217;s centre of gravity is retrieval, not control flow.</p><p>LangGraph provides the most control. Every transition is developer-defined. Every state mutation is explicit. Every conditional branch is a testable function. This makes it the strongest choice when the application has a known structure that must be followed reliably, with LLM reasoning scoped to individual nodes rather than governing the overall flow.</p><p>The lesson across all three units is consistent with what we observed in Units 2.1 and 2.2. The binding constraints in agentic systems remain the context window and the boundary between parametric and retrieved knowledge. LangGraph adds a third constraint to the picture: the boundary between deterministic control flow and non-deterministic model reasoning. Its contribution is providing tools to draw that boundary precisely.</p><p>No framework is unconditionally superior. The correct choice depends on which constraint dominates your application. If the constraint is compositional computation and dynamic tool selection, smolagents is appropriate. If the constraint is retrieval over private or heterogeneous data, LlamaIndex is appropriate. If the constraint is predictable execution with auditable state transitions, LangGraph is appropriate. In practice, production systems often face all three constraints simultaneously, which is why these frameworks can be composed rather than chosen in isolation.</p><p>All corrected notebooks with documented observations are available in our <a href="https://github.com/Nawter/HuggingFace-AI-Agents-Course">GitHub</a> repository. Each correction includes a comment explaining the root cause and the reasoning behind the fix.</p><h2></h2><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Unit 2.2 Done: What LlamaIndex Actually Teaches You About Retrieval-First Agent Architecture]]></title><description><![CDATA[AI Engineering Series]]></description><link>https://zaidalissaalmaliki.substack.com/p/unit-22-done-what-llamaindex-actually</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/unit-22-done-what-llamaindex-actually</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Wed, 15 Apr 2026 12:28:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eLba!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I completed Unit 2.2 of the Hugging Face AI Agents course. The module covers LlamaIndex, a framework for building LLM-powered agents over indexed data. Where Unit 2.1 was about action representation and execution, about the choice between code and JSON as the language agents use to act, this unit is about a different foundational problem: how an agent finds and reasons over information it was never trained on.</p><p>What follows is not a walkthrough of the documentation. It is an account of what the material reveals about retrieval architecture, tool interfaces, and orchestration when you read it with an engineering eye rather than a learning one.</p><p>One practical note before the substance: we ran the notebooks in this unit end to end. We found errors, as we did in Unit 2.1. Where relevant, I will point to the specific sections where friction appears and what we did to resolve it.]</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>The Problem LlamaIndex Is Designed to Solve</h3><p>It is worth stating the core problem clearly before describing the solution, because the design of LlamaIndex only makes sense against it.</p><p>A language model trained on a static corpus knows what it was shown during training and nothing else. It has no access to your internal documentation, your product database, or any document that postdates its training cutoff. When you ask it about those things, it either refuses or create false information. Neither outcome is useful in production.</p><p>Retrieval-Augmented Generation, universally abbreviated to RAG, addresses this by separating knowledge storage from inference. Rather than expecting the model to recall information from its parameters, you retrieve relevant content at inference time and inject it into the model&#8217;s context. The model reasons over live, scoped, verifiable data rather than parametric memory.</p><p>LlamaIndex is built entirely around this idea. It is not a general-purpose agent framework with retrieval bolted on. Retrieval is the first-class concern, and every other capability in the framework, agents, tools, workflows, is designed to be composed with it.</p><div><hr></div><h3>LlamaHub: The Integration Registry</h3><p>Before any pipeline can be assembled, components need to be installed. LlamaIndex manages this through LlamaHub, a registry of hundreds of integrations covering LLMs, embedding models, vector stores, data loaders, toolspecs, and agents.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eLba!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eLba!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!eLba!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!eLba!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!eLba!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eLba!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;LlamaHub&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="LlamaHub" title="LlamaHub" srcset="https://substackcdn.com/image/fetch/$s_!eLba!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!eLba!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!eLba!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!eLba!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e91ef04-6855-486b-a54f-233b7212f533_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The installation convention is consistent across all integrations:</p><pre><code><code>pip install llama-index-{component-type}-{framework-name}
</code></code></pre><p>This means the import path mirrors the install command, which reduces the cognitive overhead of locating the correct class for a given integration. The registry is broad enough that most data source integrations you will need already exist in a tested form. This is a genuine operational advantage over frameworks that require custom adapter code for every external service.</p><div><hr></div><h3>The Five-Stage Pipeline as Engineering Discipline</h3><p>Most frameworks expose retrieval as a single class with a <code>retrieve()</code> method. LlamaIndex exposes it as five discrete, independently configurable stages: loading, indexing, storing, querying, and evaluation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EoB6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EoB6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!EoB6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!EoB6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!EoB6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EoB6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;RAG pipeline&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="RAG pipeline" title="RAG pipeline" srcset="https://substackcdn.com/image/fetch/$s_!EoB6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!EoB6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!EoB6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!EoB6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b5b7d61-099b-44a5-aed1-d26bc58a1b1c_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This decomposition is the framework&#8217;s most important design decision, and it is the right one. When a RAG system produces a wrong answer, there are only a finite number of places the failure could have occurred. The document was not loaded correctly. The chunk boundaries cut across relevant context. The embedding model failed to capture semantic similarity. The query strategy returned irrelevant results. The response synthesiser hallucinated beyond what the context supported. Treating these as a single black box makes each failure mode harder to isolate. Treating them as separate stages, with separate abstractions and separate observability, makes each diagnosable.</p><p><strong>Loading</strong> converts heterogeneous data into uniform <code>Document</code> objects. The entry point for local files is <code>SimpleDirectoryReader</code>, which handles common file types without configuration. For PDFs with complex layouts, LlamaParse provides a managed parsing API, though it is a paid service and that cost is worth noting for teams evaluating it against open alternatives. LlamaHub provides community-built loaders for external sources, databases, and APIs.</p><p><strong>Indexing</strong> encodes semantic meaning. The <code>IngestionPipeline</code> coordinates two transformations in sequence. First, <code>SentenceSplitter</code> breaks documents into <code>Node</code> objects at natural sentence boundaries. Chunking at fixed character counts is simpler to implement but severs semantic units, and the retrieval quality difference is measurable. Second, each chunk is embedded using a model such as <code>BAAI/bge-small-en-v1.5</code> through <code>HuggingFaceEmbedding</code>. The embedding converts each chunk into a vector in a shared semantic space where similarity is computable.</p><p>One detail that is easy to overlook: the embedding model used during ingestion must be the same model used to embed queries at retrieval time. Using mismatched models produces a retrieval system that works in the sense that it returns results, but the results are not ranked by semantic relevance to the query. It is among the most common sources of degraded retrieval quality in production RAG deployments, and nothing in the framework prevents it unless you enforce the constraint in code.</p><p><strong>Storing</strong> solves the operational problem of repeated embedding. ChromaDB, integrated through <code>ChromaVectorStore</code>, persists embeddings to disk and makes them reloadable across sessions. The <code>VectorStoreIndex</code> wraps the store and handles all retrieval logic. Once the index is built and persisted, subsequent runs skip the ingestion pipeline entirely.</p><p><strong>Querying</strong> exposes three interfaces with meaningfully different behaviours. <code>as_retriever</code> returns raw nodes with similarity scores, which is appropriate when you want to inspect what the retrieval layer is actually returning before passing it to a model. <code>as_query_engine</code> produces a synthesised natural language response, which is the appropriate interface for agent tool usage. <code>as_chat_engine</code> maintains conversation history across multiple turns.</p><p>The query engine&#8217;s internal response strategy is worth understanding because it affects both answer quality and cost. The <code>compact</code> strategy, the default, concatenates retrieved chunks before synthesis and makes a single LLM call. The <code>refine</code> strategy processes each chunk sequentially, updating the answer incrementally, at the cost of one LLM call per chunk. The <code>tree_summarize</code> strategy builds a hierarchical summary and is appropriate when retrieved content is long and heterogeneous. Choosing <code>refine</code> on a corpus that returns ten chunks multiplies your LLM calls by ten. Choosing <code>compact</code> when retrieved chunks are long and varied may cause the model to miss content that falls below its attention in a densely packed context.</p><p><strong>Evaluation</strong> is where the course earns its credibility. LlamaIndex ships three built-in evaluators: <code>FaithfulnessEvaluator</code> checks whether the response is supported by the retrieved context, <code>AnswerRelevancyEvaluator</code> checks whether the response addresses the original question, and <code>CorrectnessEvaluator</code> checks factual accuracy. All three use an LLM as the judge, which means they inherit the same failure modes as the model being evaluated. They are not ground truth oracles. They are signal, and imperfect signal is more useful than no signal when you are iterating on chunking strategy, embedding models, or prompts.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/unit-22-done-what-llamaindex-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/unit-22-done-what-llamaindex-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/unit-22-done-what-llamaindex-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><h3>Tool Design: The QueryEngine as a Structured Interface</h3><p>Once you have a functioning query engine, the framework provides a clean path to exposing it as an agent tool through <code>QueryEngineTool</code>. You wrap the engine, provide a name and a description, and the agent can call it as part of its reasoning loop.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sY24!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sY24!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!sY24!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!sY24!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!sY24!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sY24!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;LlamaIndex tools&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="LlamaIndex tools" title="LlamaIndex tools" srcset="https://substackcdn.com/image/fetch/$s_!sY24!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!sY24!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!sY24!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!sY24!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe15022bc-6afe-4e12-a9b0-e56e28b47c2c_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>LlamaIndex provides four tool types in total. <code>FunctionTool</code> wraps any Python function and makes it callable by the agent. The function&#8217;s name, type annotations, and docstring are parsed to construct the tool schema. <code>QueryEngineTool</code> wraps a retrieval pipeline as described above. <code>ToolSpecs</code> are curated collections of related tools covering specific external services: the <code>GmailToolSpec</code>, for instance, exposes a coherent set of Gmail operations without requiring you to build the integration yourself. LlamaHub hosts community-maintained toolspecs that cover a growing range of external services.</p><p>The description field in every tool type is the operative part. This is the same observation we made about <code>smolagents</code> in the previous unit, and it applies with equal force here. The model selects tools and constructs their arguments based on the descriptions it is given. A vague description produces inconsistent selection. A precise description produces reliable behaviour. Docstrings and descriptions in agentic systems are not documentation for human readers. They are functional specifications that the model executes against.</p><p>The framework also integrates with the Model Context Protocol through a <code>McpToolSpec</code> class. You point it at a running MCP server and it exposes that server&#8217;s capabilities as tools the agent can use. For teams already building MCP-compatible tooling, this reduces the friction of connecting to external capabilities without writing custom adapters.</p><p>Utility tools address a specific operational problem that appears frequently in practice. When a data loader returns a large volume of content, passing all of it to an LLM in a single context is either impossible due to context window limits or expensive due to token volume. The <code>OnDemandToolLoader</code> automatically indexes the content and makes it queryable within a single tool call. The <code>LoadAndSearchToolSpec</code> splits this into two separate tools, one for loading and one for querying, giving the agent more explicit control over the retrieval process.</p><div><hr></div><h3>Agents: Agentic RAG as a Qualitative Change</h3><p>LlamaIndex supports three agent types. <code>Function Calling Agents</code> use the native tool-calling API of the underlying model. <code>ReAct Agents</code> implement the Reasoning and Acting loop and work with any model that supports text generation. Advanced custom agents are available for complex, domain-specific orchestration.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0o62!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0o62!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!0o62!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!0o62!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!0o62!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0o62!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;LlamaIndex agents&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="LlamaIndex agents" title="LlamaIndex agents" srcset="https://substackcdn.com/image/fetch/$s_!0o62!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!0o62!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!0o62!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!0o62!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe8c8c4-043d-4f6c-8ab1-630a19a4aeba_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The practical difference between the first two is worth stating clearly. Function calling agents produce structured tool invocations without requiring the agent to format its reasoning in a specific way. ReAct agents expose their reasoning chain explicitly, showing each thought, action, and observation. For debugging, that visibility is valuable. For token efficiency, it is expensive. The right choice depends on how much you need to understand what the agent is doing at each step versus how much you need to minimise token consumption.</p><p>Agents in LlamaIndex are stateless by default. Each run is independent and carries no memory of previous interactions. This is the correct default. Stateless agents are straightforward to reason about, simple to scale, and produce deterministic behaviour given the same inputs. When persistence across interactions is required, a <code>Context</code> object provides it explicitly. The pattern is identical to what smolagents does with its memory management: statelessness as the default, stateful behaviour as an intentional opt-in.</p><p>The most substantive capability in this section is agentic RAG. Standard retrieval-augmented generation is a fixed pipeline. A query arrives, a retriever fetches relevant chunks, those chunks are injected into the prompt, and the model generates a response. The model has no influence over how retrieval is performed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_gGA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_gGA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!_gGA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!_gGA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!_gGA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_gGA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Agentic RAG&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Agentic RAG" title="Agentic RAG" srcset="https://substackcdn.com/image/fetch/$s_!_gGA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!_gGA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!_gGA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!_gGA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F485f16ae-ce8b-41e4-bce9-9a4681fa8b67_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Agentic RAG restructures this by placing retrieval inside the tool loop. The model can formulate its own search queries rather than having the raw user input forwarded to the retriever. It can evaluate what it retrieved and decide whether to search again with a different query. It can route between a local knowledge base and live web search depending on what the question requires. These are not incremental improvements on the standard pipeline. They represent a qualitative change in how information is accessed, and the correct routing depends on the content and intent of individual queries at inference time, not at design time.</p><p>Multi-agent systems are composed through the <code>AgentWorkflow</code> class. Each agent receives a name and description. The system maintains a single active speaker at any time, with agents handing off to one another when the task scope falls outside their declared capability. Shared state, such as a counter tracking the total number of function calls across all agents, is propagated through the workflow context and injected into each agent&#8217;s prompt through a <code>state_prompt</code> template.</p><div><hr></div><h3>Workflows: Explicit Orchestration Without Implicit Control</h3><p>The workflow system is the component of LlamaIndex that most clearly distinguishes it architecturally from frameworks that delegate all orchestration to the model.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oQFf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oQFf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!oQFf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!oQFf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!oQFf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oQFf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Workflow schematic&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Workflow schematic" title="Workflow schematic" srcset="https://substackcdn.com/image/fetch/$s_!oQFf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!oQFf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!oQFf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!oQFf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afe3aff-827c-44a7-b37e-773a79ed4df2_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A workflow in LlamaIndex is a directed graph of steps. Each step is an async function that consumes one or more typed events and emits one or more typed events. The type annotations are the routing mechanism. There is no central dispatcher reading a config file. The framework infers the graph from the type signatures.</p><p>This has three practical consequences. First, the workflow graph is statically inspectable. The <code>draw_all_possible_flows</code> utility renders it as an HTML file, which is useful when you are debugging orchestration logic in a system with more than a handful of steps.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VRdN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VRdN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 424w, https://substackcdn.com/image/fetch/$s_!VRdN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 848w, https://substackcdn.com/image/fetch/$s_!VRdN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 1272w, https://substackcdn.com/image/fetch/$s_!VRdN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VRdN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png" width="1192" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:1192,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Workflow drawing&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Workflow drawing" title="Workflow drawing" srcset="https://substackcdn.com/image/fetch/$s_!VRdN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 424w, https://substackcdn.com/image/fetch/$s_!VRdN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 848w, https://substackcdn.com/image/fetch/$s_!VRdN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 1272w, https://substackcdn.com/image/fetch/$s_!VRdN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f76b629-0d8a-4a0c-80a7-7b1fc0610ea0_1192x660.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Second, data passing between steps is typed. If a step expects a <code>ProcessingEvent</code> and receives a <code>StopEvent</code>, the system catches that mismatch at run time rather than silently producing wrong output. Third, loops and branches are expressed as type unions. A step that can either retry or proceed emits either a <code>LoopEvent</code> or a <code>ProcessingEvent</code>. The control flow is visible in the function signature rather than buried in imperative logic.</p><p>The comparison with smolagents is instructive here. <code>smolagents</code> gives the model significant latitude to determine its own execution path. The model decides which tools to call, in what order, and when to stop. The workflow system in LlamaIndex constrains that latitude. The developer defines which steps exist, what events connect them, and what data flows between them. The model reasons within individual steps, but the orchestration is explicit code rather than emergent model behaviour.</p><p>Neither approach is unconditionally superior. The smolagents approach is more flexible and requires fewer design decisions upfront. The LlamaIndex workflow approach is more predictable and easier to reason about at the system level. Tasks with well-defined stages and known decision points are a good fit for workflows. Tasks where the agent needs to discover the structure of the problem during execution are a better fit for unconstrained agentic loops.</p><p>Looking at your three screenshots, I can identify all four errors precisely. Let me rewrite the errors section to reflect exactly what you found and documented.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h3><strong>Where we found errors in the notebooks in components and tools</strong></h3><p>We found five errors across two notebooks in this unit. None of them produce error messages that point clearly to their cause.</p><p><strong>First error: package version conflict during installation.</strong> The components notebook installs several dependencies in sequence. During this process, the <code>typer</code> package produces a version conflict: the environment already has <code>typer 0.24.1</code> installed, and the notebook&#8217;s requirements force a downgrade to <code>typer 0.11.1</code>. The uninstall and reinstall succeeds technically, but it silently breaks other tools in the environment that depend on the newer version. The fix is to pin a compatible version explicitly before running the rest of the dependency cell, rather than letting the resolver downgrade blindly.</p><p><strong>Second error: </strong><code>tracer_provider</code><strong> not defined at force_flush.</strong> Later in the same components notebook, a cell attempts to call <code>tracer_provider.force_flush()</code> to flush buffered spans. This produces a clean <code>NameError: name 'tracer_provider' is not defined</code>. The cell assumes that <code>tracer_provider</code> was defined in a previous cell, but the observability setup cell and the query cell are not coupled in the way the notebook implies. If you run the cells out of order, or if the setup cell raises silently, the name never enters scope. The fix is to move the <code>force_flush()</code> call inside the same cell that defines <code>tracer_provider</code>, or to add an explicit guard.</p><p><strong>Third error: Arize observability integration does not work as written.</strong> The notebook&#8217;s observability section uses LlamaTrace with Arize Phoenix through <code>llama-index-callbacks-arize-phoenix</code>. This integration has changed. The correct approach, which we verified, uses the <code>arize.otel</code> register function directly alongside <code>LlamaIndexInstrumentor</code> from <code>openinference-instrumentation-llama-index</code>:</p><pre><code><code>import os
from arize.otel import register
from openinference.instrumentation.llama_index import LlamaIndexInstrumentor
from dotenv import load_dotenv

load_dotenv(dotenv_path="../.env", override=True)

tracer_provider = register(
    space_id=os.getenv("ARIZE_SPACE_ID"),
    api_key=os.getenv("ARIZE_API_KEY"),
    project_name="my-llamaindex-app",
    batch=False,
    log_to_console=True
)

LlamaIndexInstrumentor().instrument(
    tracer_provider=tracer_provider,
    skip_dep_check=True
)
</code></code></pre><p>The notebook contains no indication that the LlamaTrace callback path it documents is outdated. The failure is silent in some configurations and produces a generic connection error in others. Nothing in the error output tells you that the integration interface itself has changed.</p><p><strong>Fourth error: </strong><code>get_agent</code><strong> not defined in the tools notebook.</strong> The MCP toolspec example in the tools notebook calls a function named <code>get_agent</code> that is never defined in the notebook itself. The cell assumes a locally running MCP server at <code>http://127.0.0.1:8000/sse</code> and a helper function that would connect to it, neither of which exists. The course presents MCP integration as a code snippet without providing the server or the helper. The correct approach is to replace <code>get_agent</code> with an <code>AgentWorkflow</code> constructed directly from the tool list:</p><pre><code><code>from llama_index.core.agent import AgentWorkflow
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec

mcp_client = BasicMCPClient("http://127.0.0.1:8000/sse")
mcp_tool = McpToolSpec(client=mcp_client)
tools = await mcp_tool.to_tool_list_async()

agent = AgentWorkflow.from_tools_or_functions(tools, llm=llm)
</code></code></pre><p>You also need a locally running MCP server before any of this executes. The notebook provides neither the server setup nor a substitute for local testing. We documented a minimal server configuration and published it alongside the corrected notebook in our GitHub repository.</p><p><strong>Fifth error: agents not rebuilt after context-aware tools are defined in the workflow notebook.</strong></p><p>The multi-agent state tracking example in the workflows notebook fails silently. The course shows the <code>add</code> and <code>multiply</code> functions being redefined with a <code>Context</code> parameter, then immediately constructs the <code>AgentWorkflow</code> using <code>multiply_agent</code> and <code>addition_agent</code> that were created earlier in the notebook, before the context-aware versions of those functions existed. The agents are still pointing at the original stateless tool definitions. The <code>ctx.store</code> counter never increments because the tools the agents are actually calling never touch the context.</p><p>The course presents the state tracking result as if it works out of the box. It does not. The fix requires three explicit steps that the notebook collapses into one:</p><pre><code><code>from llama_index.core.workflow import Context

# Step 1 &#8212; redefine tools with ctx
async def add(ctx: Context, a: int, b: int) -&gt; int:
    """Add two numbers."""
    cur_state = await ctx.store.get("state")
    cur_state["num_fn_calls"] += 1
    await ctx.store.set("state", cur_state)
    return a + b

async def multiply(ctx: Context, a: int, b: int) -&gt; int:
    """Multiply two numbers."""
    cur_state = await ctx.store.get("state")
    cur_state["num_fn_calls"] += 1
    await ctx.store.set("state", cur_state)
    return a * b

# Step 2 &#8212; recreate agents with the new tool definitions
multiply_agent = ReActAgent(
    name="multiply_agent",
    description="Is able to multiply two integers",
    system_prompt="A helpful assistant that can use a tool to multiply numbers.",
    tools=[multiply],
    llm=llm,
)

addition_agent = ReActAgent(
    name="add_agent",
    description="Is able to add two integers",
    system_prompt="A helpful assistant that can use a tool to add numbers.",
    tools=[add],
    llm=llm,
)

# Step 3 &#8212; build workflow and run
workflow = AgentWorkflow(
    agents=[multiply_agent, addition_agent],
    root_agent="multiply_agent",
    initial_state={"num_fn_calls": 0},
    state_prompt="Current state: {state}. User message: {msg}",
)

ctx = Context(workflow)
response = await workflow.run(user_msg="Can you add 5 and 3?", ctx=ctx)
state = await ctx.store.get("state")
print(state)  # {'num_fn_calls': 1}
</code></code></pre><p>The root cause is a sequencing assumption the notebook never makes explicit: agent objects must be instantiated after the tools they will use are defined in their final form. In Python, passing a function to a constructor copies the reference at that moment. Redefining the function later does not update the reference inside an already-constructed agent. The notebook redefines the tools but never rebuilds the agents, so the workflow runs with stale bindings throughout.</p><p>This is a subtle error precisely because it produces no exception. The workflow runs, the response comes back, and <code>state["num_fn_calls"]</code> returns zero. Nothing tells you that the counter failed to increment. You have to know to look for it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/unit-22-done-what-llamaindex-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/unit-22-done-what-llamaindex-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h3>What LlamaIndex Gets Right and Where It Stops</h3><p>The five-stage pipeline decomposition is the framework&#8217;s most durable engineering contribution. Separating loading, indexing, storing, querying, and evaluation into distinct abstractions makes each independently testable, observable, and improvable. When retrieval quality degrades after a data update, you can isolate whether the problem is in ingestion, in chunking, in embedding, or in query strategy without tracing through a monolithic pipeline.</p><p>The workflow system provides a clean middle ground between fully unconstrained agentic loops and fully deterministic pipelines. For applications where the orchestration structure is known at design time but the reasoning within each step is not, it is the right abstraction level.</p><p>What the framework does not provide: the code-first action representation that gives smolagents its compositional advantage for multi-step computation, built-in import sandboxing for safe code execution, and the minimal surface area that makes smolagents straightforward to debug. LlamaIndex is more opinionated and more verbose. For applications centred on retrieval over structured data, that verbosity buys you precision. For applications centred on dynamic computation and tool composition, it may be overhead.</p><div><hr></div><h3>The Conclusion Worth Taking Away</h3><p>The lesson from Unit 2.1 was that the binding architectural constraint in agentic systems is the context window. Every design pattern in smolagents, multi-agent decomposition, concise sub-agent outputs, bounded memory scoping, exists to manage a fixed token budget across a dynamic reasoning process.</p><p>Unit 2.2 adds a second constraint: the boundary between what a model knows parametrically and what it needs to retrieve at inference time. LlamaIndex is designed specifically to manage that boundary. Its architecture treats the retrieval pipeline as a first-class engineering problem, not an add-on, and provides the tooling to build, inspect, evaluate, and improve each stage independently.</p><p>Taken together, the two units present a picture of agentic architecture that is less about which framework you choose and more about which constraints your application is primarily fighting. If the constraint is context window management and compositional computation, smolagents offers a leaner approach. If the constraint is reliable retrieval over private, dynamic, or heterogeneous data, LlamaIndex provides the more complete toolkit.</p><p>Both frameworks are responses to the same underlying problem: language models are powerful reasoners but unreliable knowledge stores. The architecture you choose should be determined by which half of that problem dominates your use case.</p><p>All corrected notebooks with documented fixes are available in our <a href="https://github.com/Nawter/HuggingFace-AI-Agents-Course">GitHub</a> repository. Each correction includes a comment explaining the root cause and the reasoning behind the fix.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Unit 2.1 Done: The Real Engineering Lessons Inside smolagents]]></title><description><![CDATA[AI Engineering Series]]></description><link>https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Tue, 07 Apr 2026 14:15:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KOdw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I completed Unit 2.1 of the Hugging Face AI Agents course. The module covers <code>smolagents</code>, a lightweight Python framework for building AI agents. What follows is not a summary of the documentation. It is an account of what the material reveals about agent architecture when you read it as an engineer rather than as a student, and what we found when we actually ran the notebooks.</p><p>One practical note before getting into the substance: we ran every Jupyter notebook in this unit end to end. We found multiple errors, ranging from broken import paths to missing dependencies to provider configuration issues that produce misleading failure messages. We fixed all of them, documented the root cause of each fix, and published the corrected versions to our GitHub repository. I will point to the specific sections where these errors appear so you know where to expect friction.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>The Architectural Decision That Defines the Framework</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KOdw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KOdw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 424w, https://substackcdn.com/image/fetch/$s_!KOdw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 848w, https://substackcdn.com/image/fetch/$s_!KOdw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 1272w, https://substackcdn.com/image/fetch/$s_!KOdw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KOdw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png" width="1456" height="619" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:619,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Code vs JSON Actions&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Code vs JSON Actions" title="Code vs JSON Actions" srcset="https://substackcdn.com/image/fetch/$s_!KOdw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 424w, https://substackcdn.com/image/fetch/$s_!KOdw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 848w, https://substackcdn.com/image/fetch/$s_!KOdw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 1272w, https://substackcdn.com/image/fetch/$s_!KOdw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25ff11b4-7a3b-4b4e-afa6-331d2e09e516_2716x1154.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/code_vs_json_actions.png">JSON vs Code</a></figcaption></figure></div><p>Every agent framework makes one foundational choice: how does the model express what it intends to do? The majority of frameworks, including the tool-calling interfaces from OpenAI and Anthropic, represent actions as JSON. The model outputs a structured object specifying a function name and a set of arguments. A runtime layer parses that object and dispatches the corresponding function call.</p><p><code>smolagents</code> takes a different position. Its primary agent type, <code>CodeAgent</code>, instructs the model to write executable Python directly. The output is not a description of a computation. It is the computation itself, which the framework runs inside a sandboxed interpreter.</p><p>This distinction is not cosmetic. When a model writes a JSON tool call, each action is atomic. The model can invoke one function at a time and must chain calls across successive turns, carrying intermediate results through the context. When a model writes Python, it can loop over a list of queries in a single step, store intermediate values in variables, compose functions, and branch conditionally. The reduction in required steps for equivalent tasks is measurable, not theoretical.</p><p>The empirical case for this approach comes from the paper &#8220;Executable Code Actions Elicit Better LLM Agents,&#8221; which the course cites directly. The mechanism behind the performance advantage is straightforward: large language models are trained on vastly more Python than they are on agentic JSON schemas. Code is a natural representation for these models in a way that structured action schemas are not.</p><p>The cost is an expanded attack surface. Code execution is categorically more dangerous than JSON parsing. <code>smolagents</code> addresses this through an import allowlist. Any module not explicitly declared in <code>additional_authorized_imports</code> is blocked at runtime. This is a necessary constraint and not an optional configuration. Anyone building production systems with this framework needs to treat the allowlist as a security boundary, not a convenience setting.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><h2>The Mechanics of the Agent Loop</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!okBD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!okBD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 424w, https://substackcdn.com/image/fetch/$s_!okBD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 848w, https://substackcdn.com/image/fetch/$s_!okBD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 1272w, https://substackcdn.com/image/fetch/$s_!okBD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!okBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png" width="960" height="540" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:540,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CodeAgent workflow&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="CodeAgent workflow" title="CodeAgent workflow" srcset="https://substackcdn.com/image/fetch/$s_!okBD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 424w, https://substackcdn.com/image/fetch/$s_!okBD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 848w, https://substackcdn.com/image/fetch/$s_!okBD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 1272w, https://substackcdn.com/image/fetch/$s_!okBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1087328-3cd1-4201-9edc-f3aafc2ea790_960x540.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/smolagents/codeagent_docs.png">CodeAgent Loop</a></figcaption></figure></div><p>The <code>CodeAgent</code> is built on a base class called <code>MultiStepAgent</code>, which implements a structured variant of the ReAct framework. Each iteration of the loop performs four operations: it serializes the agent&#8217;s accumulated memory into a list of chat messages, sends those messages to the model, parses the model&#8217;s response for an executable code block, and runs that block. The result is logged back into memory as an <code>ActionStep</code> object.</p><p>The memory structure is explicit. The system prompt occupies a <code>SystemPromptStep</code>. The user&#8217;s original task is stored in a <code>TaskStep</code>. Every action and its result lives in an <code>ActionStep</code>. This separation makes the agent&#8217;s reasoning history inspectable without parsing a monolithic context string.</p><p>The constraint that the loop makes visible immediately is token consumption. Every step adds to the context. Tool outputs, especially from web retrieval, can be verbose. A multi-step agent working on a complex research task will accumulate thousands of tokens of intermediate results before producing a final answer. The performance degradation as context fills is not gradual. It tends to be abrupt once the context window is substantially occupied, because the model begins losing access to early instructions and prior reasoning. This is the central engineering constraint of the framework, and of agentic systems generally.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Data Akkadian&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Data Akkadian</span></a></p><div><hr></div><h2>Tool Design: Where Docstrings Become Bearing</h2><p>Tools in <code>smolagents</code> are defined either through the <code>@tool</code> decorator or by subclassing the <code>Tool</code> base class. Both approaches produce the same interface: a name, a natural language description, typed and described inputs, and a declared output type.</p><pre><code><code>@tool
def catering_service_tool(query: str) -&gt; str:
    """
    This tool returns the highest-rated catering service in Gotham City.
    Args:
        query: A search term for finding catering services.
    """
</code></code></pre><p>The description field is the operative part. The model selects tools and constructs arguments based on the descriptions it receives. A vague description produces inconsistent tool selection. A precise, accurate description produces reliable behaviour. This is not a stylistic preference. It is a functional requirement. In conventional software, docstrings are documentation for human readers. In an agentic system, they are specifications that the model executes against. The quality of your descriptions determines the quality of your agent&#8217;s behavior as directly as any other design decision.</p><p>The framework&#8217;s integration surface is broad. Tools can be loaded from the Hugging Face Hub, from Gradio Spaces using <code>Tool.from_space()</code>, from LangChain via <code>Tool.from_langchain()</code>, and from any MCP server through <code>ToolCollection.from_mcp()</code>. The MCP ecosystem in particular is worth attention. It is growing rapidly and the ability to compose smolagents workflows with external MCP servers without writing custom adapters reduces integration friction significantly.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Agentic RAG: What Actually Changes</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7m7B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7m7B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 424w, https://substackcdn.com/image/fetch/$s_!7m7B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 848w, https://substackcdn.com/image/fetch/$s_!7m7B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 1272w, https://substackcdn.com/image/fetch/$s_!7m7B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7m7B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png" width="1198" height="897" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:897,&quot;width&quot;:1198,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:272539,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/190551628?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7m7B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 424w, https://substackcdn.com/image/fetch/$s_!7m7B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 848w, https://substackcdn.com/image/fetch/$s_!7m7B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 1272w, https://substackcdn.com/image/fetch/$s_!7m7B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93aa6b65-8406-4062-9244-342e39e7d6d1_1198x897.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://cas-bridge.xethub.hf.co/xet-bridge-us/621ffdd236468d709f1835cf/00598243d02aefce27b6f2a315b745b55556b191fd8f472a95d3c0f2695ed84d?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&amp;X-Amz-Credential=cas%2F20260407%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-Date=20260407T115640Z&amp;X-Amz-Expires=3600&amp;X-Amz-Signature=7058da4b739c56eb6460814f2da13cae85bb62f2e9a726cd080a01aeb97cb607&amp;X-Amz-SignedHeaders=host&amp;X-Xet-Cas-Uid=69ac4b204854a881af41648b&amp;response-content-disposition=inline%3B+filename*%3DUTF-8%27%27Agent_ManimCE.gif%3B+filename%3D%22Agent_ManimCE.gif%22%3B&amp;response-content-type=image%2Fgif&amp;x-amz-checksum-mode=ENABLED&amp;x-id=GetObject&amp;Expires=1775566600&amp;Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTc3NTU2NjYwMH19LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2FzLWJyaWRnZS54ZXRodWIuaGYuY28veGV0LWJyaWRnZS11cy82MjFmZmRkMjM2NDY4ZDcwOWYxODM1Y2YvMDA1OTgyNDNkMDJhZWZjZTI3YjZmMmEzMTViNzQ1YjU1NTU2YjE5MWZkOGY0NzJhOTVkM2MwZjI2OTVlZDg0ZCoifV19&amp;Signature=dlT%7E59XiKWQy7G2yJHi9SVDStQW0nuHq6fSWDohSd6vo4UpKo-PLEVpTUyMT%7EQ3xzf6j4%7EzV3WCgIXz0IbpxoL3tK4OMd3%7E0w2A3rRAQdcZAO9tVz8S1mriGCzsxBP4GnGrNr3%7Ek1AoJL-l46OcOftiJRYevI7hcsTmUyV7-5f0cPHPwGEP%7EkwqFil5gQB31I2ZskFlIgq-HlxyCQxXnSBm-LQhEUMaXKaEG9dCN2JBOe5Jo1Ia2YWVY0jQchGHFZ9m64EPXpdpsMM0te7tTHsmRQhB72iIa15FiCZwO3SXbr2lfBTRwDNwioX9cTy0jbfAIoNQQCR6AozPwpDnL8Q__&amp;Key-Pair-Id=K2L8F4GPSG1IFC">Animated Agentic RAG</a></figcaption></figure></div><p>Standard retrieval-augmented generation is a fixed pipeline. A query arrives, a retriever fetches relevant chunks, those chunks are injected into the prompt, and the model generates a response. The model has no influence over how retrieval is performed. It receives whatever the pipeline returns.</p><p>Agentic RAG restructures this by placing retrieval inside the tool loop. The model can formulate its own search queries rather than having the raw user input forwarded to the retriever. It can evaluate what it retrieved and decide whether to search again with a different query. It can route between a local knowledge base and live web search depending on what the question requires. These are not incremental improvements on the standard pipeline. They represent a qualitative change in how information is accessed.</p><p>The practical relevance is clearest when information sources are heterogeneous. A system that needs to pull from internal documentation, live web data, and structured databases cannot use a fixed retrieval pipeline without making routing decisions at design time. Those decisions are often wrong because the correct routing depends on the content and intent of individual queries, which vary at inference time. An agentic retriever can make those decisions dynamically. The cost is additional latency and token consumption per query. That cost is worth paying in proportion to how much query routing complexity your application actually has.</p><p>The course uses a BM25 retriever over an in-memory corpus. BM25 is a keyword-based ranking function with no embedding dependencies, which makes it operationally simpler and faster than dense retrieval methods. For many practical knowledge bases, especially those where queries use domain-specific terminology that appears explicitly in documents, it performs comparably to embedding-based retrieval. The choice of retriever matters less than the course examples might suggest. The agentic loop, providing the ability to reformulate and retry, compensates for retriever limitations more effectively than upgrading the retriever itself.</p><p><strong>Where we found errors in the notebooks:</strong> The RAG notebook has two errors that will stop execution. The <code>RecursiveCharacterTextSplitter</code> import path changed in a recent release of <code>langchain-text-splitters</code> and the notebook uses the old path, producing a <code>ModuleNotFoundError</code>. Separately, <code>BM25Retriever</code> requires the <code>rank_bm25</code> package, which is not listed in the notebook&#8217;s dependency cell. Neither error message points clearly to its fix. We corrected the import path, added the missing dependency, and published the corrected version to our GitHub.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/unit-21-done-the-real-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><h2>Multi-Agent Systems: Context Windows as Architecture</h2><p>The multi-agent section is the most technically substantive part of the unit.</p><p>A single agent working on a complex, multi-step task will fill its context window. When context fills, performance degrades and inference cost increases. The structural solution is decomposition: break the task across multiple agents, each maintaining its own bounded memory.</p><p>The course implements a manager-worker pattern. A manager agent receives the overall task, delegates subtasks to a specialized web search agent through the <code>managed_agents</code> interface, and aggregates results to produce the final output. The web agent does not carry the manager&#8217;s planning context. The manager does not carry the full content of every webpage the web agent fetched. Memory is scoped by role.</p><pre><code><code>CodeAgent | deepseek-ai/DeepSeek-R1
&#9500;&#9472;&#9472; Tools: [calculate_cargo_travel_time, final_answer]
&#9492;&#9472;&#9472; Managed agents:
    &#9492;&#9472;&#9472; web_agent | CodeAgent | Qwen2.5-Coder-32B-Instruct
        &#9492;&#9472;&#9472; Tools: [web_search, visit_webpage, calculate_cargo_travel_time]
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1Lsl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Lsl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 424w, https://substackcdn.com/image/fetch/$s_!1Lsl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 848w, https://substackcdn.com/image/fetch/$s_!1Lsl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 1272w, https://substackcdn.com/image/fetch/$s_!1Lsl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Lsl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png" width="1456" height="787" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54982ffe-adab-4468-af19-4014ab833efe_1728x934.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:787,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Multi-agent output map&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Multi-agent output map" title="Multi-agent output map" srcset="https://substackcdn.com/image/fetch/$s_!1Lsl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 424w, https://substackcdn.com/image/fetch/$s_!1Lsl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 848w, https://substackcdn.com/image/fetch/$s_!1Lsl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 1272w, https://substackcdn.com/image/fetch/$s_!1Lsl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54982ffe-adab-4468-af19-4014ab833efe_1728x934.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/unit2/smolagents/output_map.png">Multi-Agent Systems</a></figcaption></figure></div><p>This decomposition does not eliminate the context problem. It redistributes it across agents with smaller, bounded contexts. The manager still aggregates results, and verbose sub-agent outputs will fill the manager&#8217;s context in turn. The operational discipline required is to prompt sub-agents to return concise, structured outputs. This is a design constraint that has to be enforced through prompting, not through the framework itself.</p><p>The course also introduces <code>planning_interval</code>, which causes the manager agent to pause every N steps and reason explicitly about its progress before continuing. This costs tokens. On complex tasks where errors compound across steps, it recovers more value than it costs. On simple tasks it is unnecessary overhead. The decision is empirical and depends on the specific task structure.</p><p><strong>Where we found errors in the notebooks:</strong> The multi-agent notebook specifies model identifiers that are no longer available on Together AI&#8217;s serverless API, which is the provider the course routes inference through via the <code>provider="together"</code> argument in <code>InferenceClientModel</code>. The course was written against a point in time when the models it references were actively served through Together AI&#8217;s inference endpoints. None of them are available there today. The notebook contains no warning that model availability on third-party serverless providers changes over time, so when the call fails, nothing in the error message tells you that the models have been pulled from the provider&#8217;s catalog. It reads as a generic inference failure, which makes it easy to spend time debugging authentication and network configuration when the actual problem is that the endpoint no longer exists. We checked Together AI&#8217;s current list of supported models, identified available replacements that match the capability profile the course relies on for each agent role, updated the notebook accordingly, and ran the full multi-agent pipeline through to completion to verify the fixes hold. The corrected notebook with current model identifiers is in our GitHub repository.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Vision Agents: Capability Bounded by Cost</h2><p>The vision section covers two capabilities. The first is providing images at initialization: images are passed alongside the task prompt and processed throughout the agent loop by a vision-language model. The second is dynamic image capture during browser automation: the agent drives a browser through Selenium and Helium, captures screenshots at each step, and stores them in <code>ActionStep.observations_images</code> so the model can reason about the current state of a page.</p><p>The first capability is straightforward and broadly applicable. Document understanding, visual data extraction, and identity verification from reference images are all real production use cases that this approach handles well.</p><p>The second capability is more operationally complex and more expensive. A multi-step browser agent that captures a screenshot at every step is consuming vision tokens at each iteration of the loop. Vision-language models with reliable visual reasoning capabilities are substantially more expensive per token than text-only models. The course is transparent about requiring a model like GPT-4o for reliable results. That transparency is appropriate. Anyone who attempts to run these examples with a smaller or cheaper VLM will find the results degrade significantly, and the degradation is not always obvious from the outputs alone.</p><div><hr></div><h2>What the Framework Gets Right and Where It Stops</h2><p><code>smolagents</code> is genuinely minimal. Approximately 1,000 lines of code constitute the core. When something fails, the stack trace is short and the failure is usually locatable. This is an underrated property in a framework. Debugging agent behavior is already difficult because agents are stochastic. A framework with shallow abstractions reduces one source of opacity.</p><p>The code-first action representation is well-supported by the evidence cited in the course. For tasks requiring composition, iteration, and variable handling across steps, <code>CodeAgent</code> outperforms <code>ToolCallingAgent</code> in a way that matters for production reliability.</p><p>The observability integration with OpenTelemetry and Langfuse provides structured traces, step-level logs, and run replay. This is necessary for any deployment that needs to be maintained and improved over time.</p><p>What the framework does not provide: persistent memory across sessions, workflow state management for long-running processes, and tool-level access control within a single agent. These are infrastructure problems. They do not belong in a framework of this scope, and the framework is right not to attempt them. The extension points are clean enough that teams can build what they need on top.</p><div><hr></div><h2>The Conclusion Worth Taking Away</h2><p>Agent frameworks share the same set of primitives: a model, a tool interface, a memory structure, and an execution loop. <code>smolagents</code> implements these with less abstraction overhead than most alternatives. That is its primary virtue and the source of its educational value.</p><p>The deeper lesson from this unit is that the binding constraint in agentic systems is not the model, not the tools, and not the framework. It is the context window. Every architectural pattern the course introduces, multi-agent decomposition, planning intervals, concise subagent outputs, bounded memory scoping, is a response to a single hard constraint. The model has a fixed context window and every token spent on intermediate state is a token unavailable for the next step.</p><p>That constraint is not going away. Context windows are growing, but so is the complexity of the tasks practitioners want agents to tackle. Understanding the constraint and designing around it is more durable knowledge than familiarity with any specific framework.</p><p>All corrected notebooks with documented fixes are available in our <a href="https://github.com/Nawter/HuggingFace-AI-Agents-Course">GitHub</a> repository. Each correction includes a comment explaining the original issue and the reasoning behind the fix, so the repository serves as a secondary reference alongside the course material itself.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Akkadian is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Muslim Investor’s Dilemma: Why Most Crypto Screeners Are Getting It Wrong]]></title><description><![CDATA[And why methodology, not a list, is what actually protects your wealth and your deen]]></description><link>https://zaidalissaalmaliki.substack.com/p/the-muslim-investors-dilemma-why</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/the-muslim-investors-dilemma-why</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Thu, 02 Apr 2026 21:14:47 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="2667" height="4000" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:4000,&quot;width&quot;:2667,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;silver and gold round coins&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="silver and gold round coins" title="silver and gold round coins" srcset="https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1621504450181-5d356f61d307?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxjcnlwdG98ZW58MHx8fHwxNzc1MTY0Mzk4fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@artrachen">Art Rachen</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>There are approximately 1.8 billion Muslims on earth. A growing and significant number of them are investing. And a growing number of those investors have turned their attention to cryptocurrency, one of the most consequential and contentious asset classes of the past decade. The question of whether crypto is halal is no longer abstract. It is a live financial and theological conversation happening across kitchen tables in Karachi, investment forums in London, and WhatsApp groups in Jakarta.</p><p>The problem is not that Muslim investors lack enthusiasm. The problem is that the tools they are using to make these decisions are, in most cases, not built on a coherent methodological foundation. They are built on convenience.</p><p>This is not a trivial distinction. The difference between a tool that produces a halal verdict because it has a checklist and a tool that produces one because it has a methodology grounded in fiqh al muamalat and financial analysis is the difference between performing wudu and actually being in a state of tahara. The outcome might look the same from the outside. The substance is entirely different.</p><div><hr></div><h2>The Scriptural Imperative Behind Every Financial Decision</h2><p>Before we discuss screening technology, we need to understand why Muslims screen at all. This is not optional religious behavior layered on top of otherwise secular finance. It is a direct obligation derived from the Quran.</p><p>Allah says in Surah Al-Baqarah (2:275):</p><p><strong>&#1575;&#1604;&#1614;&#1617;&#1584;&#1616;&#1610;&#1606;&#1614; &#1610;&#1614;&#1571;&#1618;&#1603;&#1615;&#1604;&#1615;&#1608;&#1606;&#1614; &#1575;&#1604;&#1585;&#1616;&#1617;&#1576;&#1614;&#1575; &#1604;&#1614;&#1575; &#1610;&#1614;&#1602;&#1615;&#1608;&#1605;&#1615;&#1608;&#1606;&#1614; &#1573;&#1616;&#1604;&#1614;&#1617;&#1575; &#1603;&#1614;&#1605;&#1614;&#1575; &#1610;&#1614;&#1602;&#1615;&#1608;&#1605;&#1615; &#1575;&#1604;&#1614;&#1617;&#1584;&#1616;&#1610; &#1610;&#1614;&#1578;&#1614;&#1582;&#1614;&#1576;&#1614;&#1617;&#1591;&#1615;&#1607;&#1615; &#1575;&#1604;&#1588;&#1614;&#1617;&#1610;&#1618;&#1591;&#1614;&#1575;&#1606;&#1615; &#1605;&#1616;&#1606;&#1614; &#1575;&#1604;&#1618;&#1605;&#1614;&#1587;&#1616;&#1617;</strong></p><p><em>&#8220;Those who consume riba cannot stand except as one stands who is being beaten by Satan into insanity.&#8221;</em></p><p>And in the same surah (2:278-279), the command is direct and clear:</p><p><strong>&#1610;&#1614;&#1575; &#1571;&#1614;&#1610;&#1615;&#1617;&#1607;&#1614;&#1575; &#1575;&#1604;&#1614;&#1617;&#1584;&#1616;&#1610;&#1606;&#1614; &#1570;&#1605;&#1614;&#1606;&#1615;&#1608;&#1575; &#1575;&#1578;&#1614;&#1617;&#1602;&#1615;&#1608;&#1575; &#1575;&#1604;&#1604;&#1614;&#1617;&#1607;&#1614; &#1608;&#1614;&#1584;&#1614;&#1585;&#1615;&#1608;&#1575; &#1605;&#1614;&#1575; &#1576;&#1614;&#1602;&#1616;&#1610;&#1614; &#1605;&#1616;&#1606;&#1614; &#1575;&#1604;&#1585;&#1616;&#1617;&#1576;&#1614;&#1575; &#1573;&#1616;&#1606; &#1603;&#1615;&#1606;&#1578;&#1615;&#1605; &#1605;&#1615;&#1617;&#1572;&#1618;&#1605;&#1616;&#1606;&#1616;&#1610;&#1606;&#1614;</strong></p><p><em>&#8220;O you who have believed, fear Allah and give up what remains of riba, if you should be believers.&#8221;</em></p><p>The prohibition is not merely against receiving interest. The scholars of fiqh al muamalat, from Ibn Qudama in the Hanbali tradition to Ibn Abidin in the Hanafi school, have consistently held that knowingly placing one&#8217;s wealth in a structure that generates riba makes one complicit in that riba. This is the financial and spiritual foundation on which every credible Islamic screening methodology must stand.</p><p>In crypto, this extends beyond obvious interest. It encompasses yield-generating protocols built on debt, governance tokens whose value derives primarily from speculative liquidity provision, stablecoins backed by interest-bearing instruments, and the broader ecosystem of DeFi structures that dress up ribawi mechanics in unfamiliar technical language.</p><div><hr></div><h2>The Problem With Most Halal Crypto Screeners in the Market</h2><p>Let us be precise about what the existing landscape looks like, because Muslim investors deserve honesty here rather than comfortable vagueness. Platforms like CryptoUmmah have performed a service by publishing lists of screened coins covering hundreds of assets and applying criteria across legitimacy, project compliance, token structure, and staking mechanics. The effort is genuine and the documentation is more thorough than most. However, the platform itself acknowledges a critical limitation: with the lack of general scholarly consensus on crypto, their opinions may develop over time. That is intellectually honest, but it also means the Muslim investor is making decisions based on a living, shifting verdict without always knowing when the assessment changed or why.</p><p>The Islamic Finance Guru at islamicfinanceguru.com has done some of the most rigorous public-facing analysis of individual cryptocurrencies, applying genuine fiqh reasoning to coins like Bitcoin, AAVE, Uniswap, and MakerDAO. Their analysis of AAVE, for example, correctly identifies that borrowing cryptocurrency and returning more of the same cryptocurrency is straightforwardly riba, irrespective of how the protocol frames the mechanic. This is the kind of reasoning that separates analysis from a list. The limitation is coverage and scalability: a detailed scholarly article about one coin every few months is not a screener.</p><p>Zoya is arguably the most polished product in the halal investing space, applying the AAOIFI screening methodology with daily data refreshes across tens of thousands of stocks. But Zoya is fundamentally a stock screener. The AAOIFI financial ratios framework, which was designed for equity analysis of corporations with balance sheets, income statements, and debt structures, does not translate cleanly to a decentralized protocol or a utility token. Zoya does not solve the crypto problem.</p><p>Hudood takes an interesting approach by running assets through three independent screening criteria and presenting the majority verdict. This multi-standard approach acknowledges the genuine scholarly disagreement that exists. The limitation is that aggregating multiple methodologies without a unifying fiqhi framework risks producing a verdict that satisfies the average of different standards rather than the substance of any one of them.</p><p>HalalCryptoGuide and SarafScreening both provide useful starting points for investors, but both explicitly state that their classifications have not been verified by Islamic scholars or muftis, and that accuracy cannot be guaranteed. This is a responsible disclosure. It is also a significant caveat for anyone using these platforms to make real financial decisions.</p><div><hr></div><h2>What the HalalFinanx Crypto Screener Does Differently</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H_DU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H_DU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 424w, https://substackcdn.com/image/fetch/$s_!H_DU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 848w, https://substackcdn.com/image/fetch/$s_!H_DU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 1272w, https://substackcdn.com/image/fetch/$s_!H_DU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H_DU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:210619,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H_DU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 424w, https://substackcdn.com/image/fetch/$s_!H_DU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 848w, https://substackcdn.com/image/fetch/$s_!H_DU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 1272w, https://substackcdn.com/image/fetch/$s_!H_DU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F513060d0-10ac-4101-bc18-1e60303ea367_1608x879.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The<a href="https://halalfinanx.com/stock-screener"> HalalFinanx crypto screener</a>, available at halalfinanx.com, approaches the problem from a fundamentally different angle. Rather than attempting to be the single source of truth for every coin verdict, it functions as a curated and vetted directory that sits at the intersection of methodology, accessibility, and transparency.</p><p>The distinction matters enormously. When a platform tells you a coin is halal, the more important question is always: halal according to what? On what basis? Reviewed by whom? How recently? A directory that is transparent about the frameworks it applies and the scholars or methodologies it references is giving you something more valuable than a verdict. It is giving you the reasoning infrastructure to ask the right questions yourself.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-faL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-faL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 424w, https://substackcdn.com/image/fetch/$s_!-faL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 848w, https://substackcdn.com/image/fetch/$s_!-faL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 1272w, https://substackcdn.com/image/fetch/$s_!-faL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-faL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184578,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-faL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 424w, https://substackcdn.com/image/fetch/$s_!-faL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 848w, https://substackcdn.com/image/fetch/$s_!-faL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 1272w, https://substackcdn.com/image/fetch/$s_!-faL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b2c88a4-c1b6-4e28-b8d8-5c6639538f9a_1608x879.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The screener applies what can be understood as a multi-layered framework rooted in classical Islamic finance principles adapted for the specific nature of digital assets. This means the evaluation is not simply whether a project avoids obvious haram industries. It goes deeper, into the actual tokenomics, the revenue model of the underlying protocol, the nature of any yield-generating mechanisms, and critically, the distinction between different types of tokens: utility tokens, governance tokens, equity tokens, and stablecoins each raise distinct fiqhi questions that a single binary halal or haram verdict cannot adequately capture.</p><p>This is not a cosmetic difference. Consider stablecoins as an example. USDT is backed largely by US Treasury bills, which are interest-bearing government debt instruments. A screener that simply asks whether Tether is used for gambling misses the underlying problem entirely. A methodology that examines the backing assets and asks whether holding USDT constitutes indirect ownership of interest-bearing instruments is asking the fiqhally correct question. The Islamic Finance Guru has noted that while USDT is backed by interest-bearing instruments, the question of whether the holder is technically considered an owner of a portion of that debt is genuinely contested. <a href="https://halalfinanx.com/stock-screener">HalalFinanx&#8217;s approach</a> of surfacing this complexity rather than flattening it into a verdict is precisely what a serious Muslim investor needs.</p><div><hr></div><h2>The Fiqhi Framework Behind Serious Crypto Screening</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1KdF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1KdF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 424w, https://substackcdn.com/image/fetch/$s_!1KdF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 848w, https://substackcdn.com/image/fetch/$s_!1KdF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 1272w, https://substackcdn.com/image/fetch/$s_!1KdF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1KdF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png" width="1456" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146373,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1KdF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 424w, https://substackcdn.com/image/fetch/$s_!1KdF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 848w, https://substackcdn.com/image/fetch/$s_!1KdF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 1272w, https://substackcdn.com/image/fetch/$s_!1KdF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd93486e2-cbb7-40f6-b390-fdb9c044e083_1656x684.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Any credible methodology must navigate three foundational prohibitions from the classical tradition. First, riba, which in the context of crypto manifests most clearly in lending protocols, yield farming structures that operate like interest accounts, and any mechanism where the return is predetermined and guaranteed regardless of underlying economic activity.</p><p>Second, gharar, which refers to excessive uncertainty or ambiguity in a contract. The Quran&#8217;s broader instruction toward transparency in financial dealings, reflected in Surah Al-Baqarah (2:282) regarding the documentation of debts and contracts, establishes a principle that financial structures must be clear. Many DeFi protocols deliberately obscure their mechanics behind layers of smart contract complexity. This opacity itself constitutes a form of gharar that should concern any Sharia-conscious investor, regardless of whether the underlying economics are otherwise acceptable.</p><p>Third, maysir, gambling or speculation without underlying economic utility. The question of whether cryptocurrency investment in general constitutes maysir is one of the most debated issues in contemporary Islamic finance. The stronger scholarly position, held by institutions like the Accounting and Auditing Organization for Islamic Financial Institutions and scholars like Mufti Taqi Usmani, is that speculation is not inherently haram. What is prohibited is speculation that resembles gambling in structure: zero-sum outcomes, no underlying value creation, and participation driven purely by chance rather than analysis. Leverage trading in crypto, futures and derivatives markets, and meme coin speculation clearly fall on the haram side of this line. Spot ownership of a utility token with a genuine economic function does not clearly violate this principle, though uncertainty remains.</p><p>A screener that applies all three of these lenses systematically, and that distinguishes between them rather than collapsing them into a single verdict, is doing the work that the Muslim investor actually needs.</p><div><hr></div><h2>Practical Implications for the Muslim Crypto Investor</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p_08!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p_08!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 424w, https://substackcdn.com/image/fetch/$s_!p_08!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 848w, https://substackcdn.com/image/fetch/$s_!p_08!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 1272w, https://substackcdn.com/image/fetch/$s_!p_08!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p_08!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png" width="1292" height="684" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1292,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120199,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p_08!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 424w, https://substackcdn.com/image/fetch/$s_!p_08!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 848w, https://substackcdn.com/image/fetch/$s_!p_08!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 1272w, https://substackcdn.com/image/fetch/$s_!p_08!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e6450d4-f244-4411-a57a-de7a021c1175_1292x684.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Understanding the methodology is not merely academic. It has direct practical implications for how you construct a portfolio and evaluate individual assets. Bitcoin, which the majority of credible scholars now treat as a permissible digital asset given its finite supply, transparent blockchain, and absence of an interest-generating structure in its base layer, is a reasonable starting point. But holding Bitcoin through a platform that automatically earns yield on your idle BTC through a lending mechanism transforms a halal holding into a potentially impermissible one. The asset itself does not change. The structure of your exposure does.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S__b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S__b!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 424w, https://substackcdn.com/image/fetch/$s_!S__b!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 848w, https://substackcdn.com/image/fetch/$s_!S__b!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 1272w, https://substackcdn.com/image/fetch/$s_!S__b!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S__b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png" width="728" height="385.4117647058824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1292,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:136646,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S__b!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 424w, https://substackcdn.com/image/fetch/$s_!S__b!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 848w, https://substackcdn.com/image/fetch/$s_!S__b!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 1272w, https://substackcdn.com/image/fetch/$s_!S__b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9b562b3-342b-4f89-9e40-6dad1fa6ee3c_1292x684.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ethereum presents more complexity. The transition to proof of stake introduced a staking mechanism whose Sharia compliance depends entirely on how you participate. Direct staking, where you are a validator contributing computational work to network security and receiving transaction fees as compensation for a genuine service, is structured differently from depositing ETH into a liquid staking protocol that operates more like a managed interest-generating account. A screener that tells you ETH is halal without distinguishing between these participation structures is not giving you the information you need.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BvSI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BvSI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 424w, https://substackcdn.com/image/fetch/$s_!BvSI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 848w, https://substackcdn.com/image/fetch/$s_!BvSI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 1272w, https://substackcdn.com/image/fetch/$s_!BvSI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BvSI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png" width="1268" height="336" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:336,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66299,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BvSI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 424w, https://substackcdn.com/image/fetch/$s_!BvSI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 848w, https://substackcdn.com/image/fetch/$s_!BvSI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 1272w, https://substackcdn.com/image/fetch/$s_!BvSI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0664ef7-fe74-40f9-87a6-9fb7c32e5d66_1268x336.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Protocols like AAVE, Compound, and similar lending platforms are, in the view of most careful analysts applying classical fiqh reasoning, not permissible to use for yield generation. The mechanics are ribawi at their core, regardless of the technical novelty of the smart contract framework. This is not a close call.</p><p>For governance tokens whose value is inextricably linked to a protocol&#8217;s fee revenues, the analysis requires examining whether those revenues come from halal activity. Uniswap&#8217;s UNI token derives value from transaction fees on a decentralized exchange, which is a permissible activity if the exchanges being facilitated are themselves permissible spot transactions. This is different from MKR, whose value is tied to the MakerDAO lending mechanism, which operates on interest-based principles.</p><div><hr></div><h2>Why Methodology, Not Lists, Is the Standard You Should Hold Screeners To</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q7f0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q7f0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 424w, https://substackcdn.com/image/fetch/$s_!Q7f0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 848w, https://substackcdn.com/image/fetch/$s_!Q7f0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7f0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q7f0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png" width="1268" height="487" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:487,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86744,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q7f0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 424w, https://substackcdn.com/image/fetch/$s_!Q7f0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 848w, https://substackcdn.com/image/fetch/$s_!Q7f0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 1272w, https://substackcdn.com/image/fetch/$s_!Q7f0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba6bbbc6-2360-4be5-b1ec-5344fa820a50_1268x487.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The broader point this analysis leads to is one that Muslim investors should internalize as a matter of both financial and spiritual discipline. A halal screener that cannot explain its methodology is not a tool. It is an opinion dressed up as analysis.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9O1t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9O1t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 424w, https://substackcdn.com/image/fetch/$s_!9O1t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 848w, https://substackcdn.com/image/fetch/$s_!9O1t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 1272w, https://substackcdn.com/image/fetch/$s_!9O1t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9O1t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png" width="1268" height="225" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:225,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34939,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9O1t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 424w, https://substackcdn.com/image/fetch/$s_!9O1t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 848w, https://substackcdn.com/image/fetch/$s_!9O1t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 1272w, https://substackcdn.com/image/fetch/$s_!9O1t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F043aefef-93d0-493a-985d-92322e0d0fad_1268x225.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The<a href="https://halalfinanx.com/stock-screener"> HalalFinanx crypto screener&#8217;s</a> value proposition rests on transparency about how it evaluates assets, not simply on the volume of assets it covers or the accessibility of its interface. In a space where the same coin can appear as halal on one platform and haram on another, the investor who understands the reasoning behind each verdict is in a fundamentally stronger position than one who is simply choosing between verdicts.</p><p>Allah reminds us in Surah Al-Hashr (59:18):</p><p><strong>&#1610;&#1614;&#1575; &#1571;&#1614;&#1610;&#1615;&#1617;&#1607;&#1614;&#1575; &#1575;&#1604;&#1614;&#1617;&#1584;&#1616;&#1610;&#1606;&#1614; &#1570;&#1605;&#1614;&#1606;&#1615;&#1608;&#1575; &#1575;&#1578;&#1614;&#1617;&#1602;&#1615;&#1608;&#1575; &#1575;&#1604;&#1604;&#1614;&#1617;&#1607;&#1614; &#1608;&#1614;&#1604;&#1618;&#1578;&#1614;&#1606;&#1592;&#1615;&#1585;&#1618; &#1606;&#1614;&#1601;&#1618;&#1587;&#1612; &#1605;&#1614;&#1617;&#1575; &#1602;&#1614;&#1583;&#1614;&#1617;&#1605;&#1614;&#1578;&#1618; &#1604;&#1616;&#1594;&#1614;&#1583;&#1613;</strong></p><p><em>&#8220;O you who have believed, fear Allah. And let every soul look to what it has put forth for tomorrow.&#8221;</em></p><p>The instruction to look at what we put forth is not passive. It is an active command to examine, to know, and to take responsibility for our choices. Using a screening tool without understanding its methodology is, from this perspective, a form of delegating that responsibility without actually fulfilling it.</p><div><hr></div><h2>Conclusion: The Intelligent Muslim Investor&#8217;s Approach</h2><p>The cryptocurrency market is not going away, and Muslim investors who categorically avoid it on grounds of uncertainty alone are not making a religiously required decision. Uncertainty, in Islamic jurisprudence, triggers ijtihad, the scholarly exercise of informed judgment, not blanket prohibition.</p><p>What is required is that your investments be made through a process that is honest about what it knows, transparent about what it does not know, and grounded in the fiqhi principles that have governed Islamic commercial law for fourteen centuries.</p><p><a href="https://halalfinanx.com/stock-screener">HalalFinanx&#8217;s crypto screener</a> is, in this sense, a tool built for the serious investor rather than the convenience-seeker. It does not simply tell you what is halal. It gives you the framework to understand why, and in doing so, it respects both your intelligence and your faith.</p><p>That is the standard every Muslim investor should demand. Not a list. A methodology.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l3Wp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l3Wp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 424w, https://substackcdn.com/image/fetch/$s_!l3Wp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 848w, https://substackcdn.com/image/fetch/$s_!l3Wp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 1272w, https://substackcdn.com/image/fetch/$s_!l3Wp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l3Wp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png" width="1268" height="850" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:850,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:186103,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://zaidalissaalmaliki.substack.com/i/193003656?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l3Wp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 424w, https://substackcdn.com/image/fetch/$s_!l3Wp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 848w, https://substackcdn.com/image/fetch/$s_!l3Wp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 1272w, https://substackcdn.com/image/fetch/$s_!l3Wp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7867bc24-a63f-4852-ade3-f65e264d620c_1268x850.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p><em>This article is written for educational purposes. It does not constitute a fatwa or formal Sharia ruling, and Muslim investors are encouraged to consult qualified Islamic finance scholars before making investment decisions. All financial markets carry risk.</em></p><p></p>]]></content:encoded></item><item><title><![CDATA[Don't Apply Without Reading This: Essential SQL & Database Interview Tactics for Data Engineers]]></title><description><![CDATA[Building the Relationship Between Books and Readers for a Library Warehouse]]></description><link>https://zaidalissaalmaliki.substack.com/p/dont-apply-without-reading-this-essential</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/dont-apply-without-reading-this-essential</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Sat, 22 Feb 2025 06:40:53 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 424w, https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 848w, https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1272w, https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" width="1200" height="800.8" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:2002,&quot;width&quot;:3000,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;books on brown wooden shelf&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="books on brown wooden shelf" title="books on brown wooden shelf" srcset="https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 424w, https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 848w, https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1272w, https://images.unsplash.com/photo-1524995997946-a1c2e315a42f?fm=jpg&amp;q=60&amp;w=3000&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Table of Contents</p><p><a href="https://zaidalissaalmaliki.substack.com/i/157399606/library-database-overview">1. Library Database Overview  </a></p><p>  <a href="https://zaidalissaalmaliki.substack.com/i/157399606/database-tables"> 1.1. Database Tables </a> </p><p>&#8195;&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/books-table">1.1.1. Books Table  </a></p><p>&#8195;&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/readers-table">1.1.2. Readers Table  </a></p><p>&#8195;&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/borrow-table">1.1.3. Borrow Table  </a></p><p>&#8195;&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/authors-table">1.1.4. Authors Table  </a></p><p>&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/bookauthors-table">&#8195;1.1.5. BookAuthors Table  </a></p><p>&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/categories-table">&#8195;1.1.6. Categories Table  </a></p><p>&#8195;&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/bookcategories-table">1.1.7. BookCategories Table</a></p><p><a href="https://zaidalissaalmaliki.substack.com/i/157399606/sql-code">2. SQL Code</a></p><p><a href="https://zaidalissaalmaliki.substack.com/i/157399606/sample-data-insertion">3. Sample Data Insertion</a></p><p><a href="https://zaidalissaalmaliki.substack.com/i/157399606/explanation-of-relationships">4. Explanation of Relationships</a></p><p><a href="https://zaidalissaalmaliki.substack.com/i/157399606/interview-questions">5. Interview Questions  </a></p><p>&#8195;&#8195;<a href="https://zaidalissaalmaliki.substack.com/i/157399606/beginner-queries">5.1. Beginner &#8230;</a></p>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/dont-apply-without-reading-this-essential">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Cracking the Data Interview: How This Data Engineering Interview Redefines SQL & Databases]]></title><description><![CDATA[Revealing Insider Techniques and Breakthrough Strategies That Will Revolutionize Your Data Engineering Approach]]></description><link>https://zaidalissaalmaliki.substack.com/p/cracking-the-data-interview-how-this</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/cracking-the-data-interview-how-this</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Fri, 21 Feb 2025 07:58:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oAt7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a5ba6d2-d73e-46f4-bb65-b967576b78dc_700x353.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In databases, efficient SQL queries are important for optimal performance. Poorly written queries can lead to slow response times and strain system resources. In this article, we&#8217;ll explore several best practices for writing efficient SQL queries, complete with examples to illustrate each point. Whether you&#8217;re an expert in database administration or just starting, these answers will help improve your life and be the best version of yourself, my apologies is improving your queries.</p>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/cracking-the-data-interview-how-this">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Data Engineering Interview Questions: SQL and Databases I]]></title><description><![CDATA[Starting a career in data engineering is both exciting and challenging.]]></description><link>https://zaidalissaalmaliki.substack.com/p/data-engineering-interview-questions</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/data-engineering-interview-questions</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Wed, 19 Feb 2025 06:09:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GVfr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a7f5a33-2a6b-46e0-88d2-2bfc7cfb62ad_700x551.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Starting a career in data engineering is both exciting and challenging. As data continues to be the core of decision-makers in organizations, the role of a data engineer becomes increasingly important. It&#8217;s not about moving data from point A to point B. It&#8217;s about writing efficient SQL queries, building scalable databases, and understanding the inner workings of database engines to optimize performance. In the competitive world of data engineering interviews, you need more than just a little knowledge. You must demonstrate proficiency in writing optimized SQL, designing data warehouses that can scale with growing data demands, and show an understanding of at least one database engine&#8217;s internals. This depth of knowledge not only sets you apart but also prepares you to face real-world challenges effectively.</p>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/data-engineering-interview-questions">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[An Executive Summary Of Market Wizards]]></title><description><![CDATA[This is my summary and notes about this great book called Market Wizards, if you want to become a trader, this is a must in your life.Thanks for reading Data Akkadian!]]></description><link>https://zaidalissaalmaliki.substack.com/p/an-executive-summary-of-market-wizards</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/an-executive-summary-of-market-wizards</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Sun, 10 Nov 2024 17:19:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_bgi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_bgi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_bgi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_bgi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_bgi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_bgi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_bgi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg" width="800" height="456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:456,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_bgi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_bgi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_bgi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_bgi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa937c9-e66c-4fc7-970f-1992f78ae00c_800x456.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://www.deviantart.com/ai-postcards/art/Wizards-Witches-09-1041925818">market wizards</a></figcaption></figure></div><p>This is my summary and notes about this great book called Market Wizards, if you want to become a trader, this is a must in your life.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h4>Who is the&nbsp;author?</h4><p>The author is Mr. Schwager a recognized industry expert in futures and hedge funds and the author of a number of widely acclaimed financial books. Previously, Mr. Schwager was a partner in the Fortune Group (2001&#8211;2010), a London-based hedge fund advisory firm. His prior experience also includes 22 years as Director of Futures research for some of Wall Street&#8217;s leading firms, most recently Prudential Securities.</p><h4>Michael Marcus</h4><ol><li><p>The mental health of the trader is key for his success and, therefore catching huge profitable winning trades is essential. He emphasises that letting winners ride is as important as eliminating losses early. In his own words, &#8220;If you don&#8217;t stay with your winners, you are not going to be able to pay for the losers.&#8221;</p></li><li><p>In addition to not overtrading, he points out the need to set an exit point on every trade. He believes that protective stops are very necessary because they force this commitment on the trader. He also suggested closing positions to achieve mental peace when one is losing money.</p></li><li><p>Following the advice of other experienced traders almost results in disaster because it combines the worst qualities of both traders. because of this, he suggested following your intuition when you are trading.</p></li><li><p>Last but not least, despite being an aggressive trader, he firmly believes in being careful in choosing your trades. He recommends waiting for trades where all key elements align in one direction. By doing this you have more probability of success on each trade. He suggests that making numerous trades when conditions are only slightly favourable is more to do with entertainment than trading success.</p></li></ol><h4>Bruce Kovner</h4><ol><li><p>Let&#8217;s look at a real example. One recent Friday afternoon, the bonds saw a quick drop after a long stable period. From what I could see, this change was unexpected. I was confident in selling the bonds, thinking that if my decision was correct, the market wouldn&#8217;t go back to a certain level of previous stability. That was my limit. I was at ease with this decision because I knew I would exit the trade if that occurred.</p></li><li><p>The first piece of advice is every trader needs to understand risk management. second always under-trade. No matter what the size of your position is, cut it at least in half. My experience with novice traders is that they trade three to five times too big. They are taking 5 to 10 per cent risks on a trade when they should be taking 1 to 2 per cent risks.</p></li><li><p>The market is impersonal, doesn&#8217;t care if you make money or not. Every time a trader says &#8220;I wish,&#8221; or &#8220;I hope,&#8221; he is engaging in a destructive way of thinking because it takes attention away from the diagnostic process.</p></li><li><p>Kovner lists risk management as the key to successful trading; he always decides on an exit point before he puts on a trade. He also stresses the need for evaluating risk on a portfolio basis rather than viewing the risk of each trade independently. This is critical when one holds highly correlated positions since the overall portfolio risk is likely to be much greater than the trader realizes.</p></li><li><p>For him, risk management is the key to successful trading. He also believes in risk management at a portfolio level. This is important if one holds highly correlated positions, as this can lead to disaster because the portfolio&#8217;s risk is larger than the trader understands.</p></li></ol><h4>Richard Dennis</h4><ol><li><p><strong>So you&#8217;re waiting for signs that the market is recovering before joining?</strong> It&#8217;s more likely that I&#8217;ll align myself with a trend and decide to sell off quicker than a trend-following system would, due to intuition.</p></li><li><p><strong>Have you ever thought about starting a new trade against the current trend?</strong> I&#8217;ve done it before&#8202;&#8212;&#8202;meaning, I&#8217;ve started trades against the trend. But as a general guideline, I don&#8217;t think it&#8217;s a good idea.</p></li><li><p><strong>How do you know when you&#8217;ve made a mistake in a major role? What signals you should step down?</strong> If you&#8217;re making a loss on a deal after a week or two, that&#8217;s a sign you&#8217;re wrong. Even if you&#8217;re just breaking even, but a lot of time has passed, it likely means you&#8217;re wrong as well.</p></li><li><p>If a market goes up when it should go up, I might buy earlier. If it goes down when it should go up, I&#8217;ll wait until the trend is better defined.</p></li><li><p>Trade small because that&#8217;s when you are as bad as you are ever going to be. Learn from your mistakes. Don&#8217;t be misled by the day-to-day fluctuations in your equity. Focus on whether what you are doing is right, not on the random nature of any single trade&#8217;s outcome.</p></li><li><p>Dennis believes that one of the worst mistakes a trader can make is to miss a major profit opportunity. According to his estimate, 95 per cent of his profits have come from only 5 per cent of his trades.</p></li><li><p>One particularly useful piece of advice offered by Dennis is that the times when you least want to think about trading&#8202;&#8212;&#8202;the losing periods&#8202;&#8212;&#8202;are precisely the times when you need to focus most on trading.</p></li></ol><h4>Paul Tudor&nbsp;Jones</h4><ol><li><p>He launched the Tudor Futures Fund in September 1984 with $1.5 million under management. At the end of October 1988, each $1,000 invested in this fund was worth $17,482, while the total amount of money he managed had grown to $330 million.</p></li><li><p>When you are trading big size, you have to get out when the market lets you out, not when you want to get out.</p></li><li><p>As a floor trader, I learned that if the old high was at 56.80, many buy stops might be at 56.85. If the market is trading 70 bids at 75 offered, everyone in the trading ring wants to buy the market, trigger those stops, and sell into the stops&#8202;&#8212;&#8202;a common practice. With Eli&#8217;s teachings, as an upstairs trader, I managed this situation by selling half of my position at 75. This way, I don&#8217;t need to worry about selling all at once when the stops are hit. I always sell half of my position before new highs or lows and the rest after that.</p></li><li><p>I learned that even though markets look their very best when they are setting new highs, that is often the best time to sell. He instilled in me the idea that, to some extent, to be a good trader, you have to be a contrarian.</p></li><li><p>I want to make sure that I never have a double-digit loss in any month.</p></li><li><p>Don&#8217;t ever average losers. Decrease your trading volume when you are trading poorly; increase your volume when you are trading well. Never trade in situations where you don&#8217;t have control. For example, I don&#8217;t risk significant amounts of money in front of key reports, since that is gambling, not trading.</p></li><li><p>Don&#8217;t be a hero. Don&#8217;t have an ego. Always question yourself and your ability. Don&#8217;t ever feel that you are very good. The second you do, you are dead.</p></li><li><p>The other part is that I have always been a swing trader, meaning that I believe the very best money is to be made at the market turns. Everyone says you get killed trying to pick tops and bottoms and you make all the money by catching the trends in the middle. Well, for twelve years, I have often been missing the meat in the middle, but I have caught a lot of bottoms and tops.</p></li><li><p>Trading gives you an incredibly intense feeling of what life is all about. Emotionally, you live on the extremes.</p></li><li><p>Don&#8217;t focus on making money; focus on protecting what you have.</p></li></ol><h4>Gary Bielfeldt</h4><ol><li><p>If you can just learn discipline by using a trend-following system, even temporarily, it will increase your odds of being successful as a trader.</p></li><li><p><strong>What are the key factors you focus on in fundamentally evaluating the T-bond market?</strong> The economy is the single most important factor. Four other important elements are inflation expectations, the dollar, the trade balance, and the budget deficit.</p></li><li><p>The most important is discipline. I am sure everyone tells you that. Second, you have to have patience; if you have a good trade, you have to be able to stay with it. Third, you need courage to go into the market, and courage comes from adequate capitalization. Fourth, you must have a willingness to lose; that is also related to adequate capitalization. Fifth, you need a strong desire to win.</p></li><li><p>You don&#8217;t just play every hand and stay through every card, because if you do, you will have a much higher probability of losing. You should play the good hands, and drop out of the poor hands, forfeiting the ante. When more of the cards are on the table and you have a very strong hand&#8202;&#8212;&#8202;in other words, when you feel the percentages are skewed in your favour&#8202;&#8212;&#8202;you raise and play that hand to the hilt. If you apply the same principles of poker strategy to trading, it increases your odds of winning significantly. I have always tried to keep the concept of patience in mind by waiting for the right trade, just like you wait for the percentage hand in poker. If a trade doesn&#8217;t look right, you get out and take a small loss; it&#8217;s precisely equivalent to forfeiting the ante by dropping out of a poor hand in poker. On the other hand, when the percentages seem to be strongly in your favour, you should be aggressive and try to leverage the trade similar to the way you raise good hands in poker.</p></li></ol><h4>Ed Seykota</h4><ol><li><p>Yes, the winning traders have usually been winning at whatever field they are in for years.</p></li><li><p>One of the best ways to increase profits is to do goal setting and visualizations to align the conscious and subconscious with making profits. I have worked with several traders to examine their priorities and align their goals. I use a combination of hypnosis, breathing, pacing, visualization, gestalt, massage, and so forth.</p></li><li><p>The traders usually either: Get much more successful Or realize they didn&#8217;t want to be traders in the first place.</p></li></ol><h4>Larry Hite</h4><ol><li><p>From the inception of trading in April 1981 through mid-1988, Mint Investment Company registered an average annual compounded return of over 30 per cent. But it is their consistency that is most impressive: their annual returns have ranged from a worst of plus 13 per cent to a best of plus 60 per cent. Their largest loss in any six months was only 15 per cent and under 1 per cent in any twelve months (not just calendar years).</p></li><li><p>There is a very important message here: People don&#8217;t change. That is why this whole game works. In 1637, tulips in Holland traded for 5,500 florins and then crashed to 50, a 99 per cent loss. Well, you might say, &#8220;Trading was relatively new then; these people were primitive; capitalism was still in its infancy. Today we are much more sophisticated.&#8221; In 1929 a stock like Air Reduction which traded at a high of $233 and after the crash fell to $31, a decline of 87 percent. OK, you might say, &#8220;The Roaring &#8217;20s were crazy times, but now things are surely different.&#8221; Move ahead to 1961 and you find a stock called Texas Instruments trading at $207. It eventually dropped to $49, a decline of 77 per cent. In the 1980s, all you have to do is look at silver prices, which in 1980 reached a peak of $50 and subsequently fell to $5, a 90 per cent decline. The point is that people are the same, and never change.</p></li><li><p>Larry, how can you trade the way you do; isn&#8217;t it boring?&#8221; I told him, &#8220;I don&#8217;t trade for excitement; I trade to win.&#8221; It may be very dull, but it is also very lucrative. When I get together with other traders and they start exchanging war stories about different trades, I have nothing to say. To me, all our trades are the same.</p></li><li><p>The truth is that, while you can&#8217;t quantify reward, you can quantify risk so the very first rule we live by at Mint is: Never risk more than 1 per cent of total equity on any trade.</p></li><li><p>There are four kinds of trades or bets: good bets, bad bets, winning bets, and losing bets. Most people think that a losing trade is a bad bet. That is wrong. You can lose money even on a good bet. If the odds on a bet are 50/50 and the payoff is $2 versus a $1 risk, that is a good bet even if you lose. The important point is that if you do enough of those trades or bets, eventually you have to come out ahead.</p></li><li><p>We diversify in two ways. First, we probably trade more markets worldwide than any other money manager. Second, we don&#8217;t just use a single best system. To provide balance, we use lots of different systems ranging from short-term to long-term. Some of these systems may not be that good by themselves, but we don&#8217;t care; that is not what they are there for.</p></li><li><p>Managing risk is tracking volatility. When the volatility of a market becomes so great that it adversely skews the expected return/risk ratio, we will stop trading that market.</p></li><li><p>Essentially, our approach has three lights in determining the acceptance of trading signals. When the light is green, we take all signals. When the light is yellow, we will liquidate an existing position on a signal, but we will not put on a new position. Finally, when the light is red, we liquidate existing positions automatically, and we do not take any new positions.</p></li><li><p>If the market makes a new high, we get back in. For example, if a long position is stopped out on a money management rule without a sell signal being generated, the system will still be in a long mode and no buy signal will be generated, no matter how high prices go. If, however, a sell signal were generated, the system would begin monitoring for a buy signal.</p></li><li><p><em>Larry, when you are on a motorcycle, never argue with a car. You will lose.</em> The same lesson applies to trading: If you argue with the market, you will lose.</p></li><li><p>If you don&#8217;t bet, you can&#8217;t win. If you lose all your chips, you can&#8217;t bet.</p></li><li><p>Mint trades in an extraordinarily wide spectrum of markets (nearly sixty in all), encompassing exchanges in the U.S. and five foreign countries and diverse market groups including stock indexes, interest rates, currencies, raw industrial goods, and agricultural commodities.</p></li><li><p>Volatility is continually tracked in each market to generate signals to liquidate or temporarily suspend trading in those markets where the risk/reward ratio exceeds well-defined limits.</p></li></ol><h4>Michael Steinhardt</h4><ol><li><p>If you have made a mistake, deal with the mistake; don&#8217;t compound it.</p></li><li><p>Always ask yourself: Why does he want to sell? What does he know that I don&#8217;t? Finally, you have to be intellectually honest with yourself and others. In my judgment, all great traders are seekers of truth.</p></li><li><p>One trait I have noticed among several great traders is their willingness and ability to take on a particularly large position when they perceive a major trading opportunity.</p></li></ol><h4>William O&#8217;Neil</h4><ol><li><p>The &#8220;C&#8221; stands for current earnings per share. The best-performing stocks showed a 70 per cent average increase in earnings for the current quarter over the same quarter in the prior year before they began their major advance. I am continually amazed by how many individual investors, and even pension fund managers, buy common stocks with unchanged or lower current quarter earnings. There is no reason for a stock to go up if the current earnings are poor. If, as our research demonstrated, the best stocks had large profit increases before they advanced rapidly in price, why should anybody settle for mediocre earnings? So, our first basic rule in stock selection is that quarterly earnings per share should be up by at least 20 to 50 percent year to year.</p></li><li><p>The &#8220;A&#8221; in our formula stands for annual earnings per share. In our studies, the prior five-year average annual compounded earnings growth rate of outstanding performing stocks at their early emerging stage was 24 per cent. Ideally, each year&#8217;s earnings per share should show an increase over the prior year&#8217;s earnings.</p></li><li><p>The &#8220;N&#8221; in our formula stands for something new. The &#8220;new&#8221; can be a new product or service, a change in the industry, or new management.</p></li><li><p>The &#8220;S&#8221; in the formula stands for shares outstanding. Ninety-five per cent of the stocks that performed best in our studies had less than twenty-five million shares of capitalization during the period when they had their best performance.</p></li><li><p>The &#8220;L&#8221; in our formula stands for leader or laggard. The 500 best-performing stocks during the 1953&#8211;1985 period had an average <em>relative strength</em> of 87 before their major price increase began.</p></li><li><p>The &#8220;I&#8221; in the formula stands for institutional sponsorship. Institutional buyers are by far the largest source of demand for stocks. Leading stocks usually have institutional backing. However, although some institutional sponsorship is desired, excessive sponsorship is not, because it would be a source of large selling if anything went wrong with the company or the market in general. This is why the most widely owned institutional stocks can be poor performers. By the time a company&#8217;s performance is so obvious that almost all institutions own a stock, it is probably too late to buy.</p></li><li><p>The &#8220;M&#8221; in our formula stands for the market. Three out of four stocks will go in the same direction as a significant move in the market averages.</p></li><li><p>It is naive to hold stocks that are going down because they pay dividends. If you are getting a 4 per cent dividend and the stock goes down 25 per cent, your net yield is a 21 per cent loss.</p></li><li><p>A worse habit is to average down in your buying, rather than up. If you buy a stock at $40 and then buy more at $30 and average out your cost at $35, you are following up your losers and mistakes by putting good money after bad. This amateur strategy can produce serious losses and weigh you down with a few big losers.</p></li><li><p>In other words, they are willing to risk their hard-earned money on what someone else says, rather than knowing for sure what they are doing themselves.</p></li><li><p>The majority of unskilled investors stubbornly hold onto their losses when the losses are small and reasonable.</p></li><li><p>Individual investors worry too much about taxes and commissions. Your key objective should be first to make a net profit. Excessive worrying about taxes usually leads to unsound investments in the hope of achieving a tax shelter.</p></li><li><p>Some investors have trouble making decisions to buy or sell. In other words, they vacillate and can&#8217;t make up their minds.</p></li></ol><h4>David Ryan</h4><ol><li><p>Stocks selection: I look at the five-year earnings growth record and the last two-quarters of earnings relative to the previous year&#8217;s levels. The quarterly comparisons show you if there is any deceleration in the earnings growth rate. For example, a 30 per cent growth rate over the last five years may look very impressive, but if the last two-quarters earnings were only up 10 per cent and 15 per cent, it warns you that the strong growth period may be over. Of course, those factors&#8202;&#8212;&#8202;the five-year earnings growth record and the earnings during the past two quarters&#8202;&#8212;&#8202;are combined in our <em>earnings per share</em> (EPS) rank.</p></li><li><p>The single most important advice I can give anybody is: Learn from your mistakes. That is the only way to become a successful trader.</p></li><li><p>The maximum he will risk on any trade is a seven per cent price decline.</p></li><li><p>Maintaining a trader&#8217;s diary is an essential element of Ryan&#8217;s approach. Every time he buys a stock, Ryan annotates the chart with his reasons for buying the stock.</p></li></ol><h4><strong>M</strong>arty Schwartz</h4><ol><li><p>I always check my charts and the moving averages prior to taking a position. Is the price above or below the moving average? That works better than any tool I have. I try not to go against the moving averages; it is self-destructive.</p></li><li><p>Before putting on a position always ask, &#8220;Do I really want to have this position?&#8221; After a successful period, take a day off as a reward. I&#8217;ve found it difficult to sustain excellent trading for more than two weeks at a time. I&#8217;ve had periods where I can be profitable for twelve days in a row, but eventually, I just get battle fatigue.</p></li><li><p>The most important thing is money management, money management, money management. Anybody who is successful will tell you the same thing.</p></li><li><p>Why do most traders lose money? Because they would rather lose money than admit they&#8217;re wrong. What is the ultimate rationalization of a trader in a losing position? &#8220;I&#8217;ll get out when I&#8217;m even.&#8221; Why is getting out even so important? Because it protects the ego. I became a winning trader when I was able to say, &#8220;To hell with my ego, making money is more important.&#8221;</p></li><li><p>Also, don&#8217;t increase your position size until you have doubled or tripled your capital. Most people make the mistake of increasing their bets as soon as they start making money. That is a quick way to get wiped out.</p></li><li><p>The key lesson is that each trader must find his or her own best approach.</p></li><li><p>The second element behind Schwartz&#8217;s transition to success was a change in attitude. As he describes it, he became successful when his desire to win took precedence over his desire to be right.</p></li><li><p>Risk control is an essential element of Schwartz&#8217;s trading style, as attested to by his incredibly low drawdowns. He achieves this risk control by always knowing his &#8220;uncle's point&#8221; on any trade. No doubt, his approach of sharply reducing position size after large losses, as well as extended winning streaks, contributes heavily to his success. The rationale for reducing position size after a destabilizing loss is apparent.</p></li></ol><h4>James Rogers</h4><ol><li><p>That is why I don&#8217;t think of myself as a trader. I think of myself as someone who waits for something to come along. I wait for a situation that is like the proverbial &#8220;shooting fish in a barrel.&#8221;</p></li><li><p>I was short stocks and short calls. I don&#8217;t buy options. Buying options is another fast way to the poorhouse. Someone did a study for the SEC and discovered that 90 per cent of all options expire as losses. Well, I figured out that if 90 per cent of all long option positions lose money, that meant that 90 per cent of all short option positions make money. If I want to use options to be bearish, I sell calls.</p></li><li><p>But 95 per cent of the time when you go against that kind of hysteria, you are going to make money.</p></li><li><p>I remember why I became even more bearish on the weekend before October 19. The week before, [Federal Reserve Chairman] Alan Greenspan announced that the balance of trade was getting much better and things were under control. Two days later, the balance of trade figures came out, and they were the worst in the history of the world. Right away I said, &#8220;This guy is either a fool or a liar. He doesn&#8217;t have any idea what is going on.&#8221; Then on the weekend before October 19, you had [Treasury Secretary] Baker telling the world we were going to stick it to the Germans by letting the dollar go because the Germans weren&#8217;t loosening monetary and fiscal policy as Baker had demanded. It looked like the trade wars of the 1930s all over again. **was in a panic mode and I was already short! I called Singapore that Sunday night to add to my shorts. [Singapore opens earlier than we do.] So all those guys who came in on Monday to sell had very, very good reasons to sell, and there were no buyers around. There were no buyers because there was no reason for people to buy. Even the buyers were scared and bearish that Monday.</p></li><li><p>Greenspan, Baker, the fact that money was tight, the steady worsening of the balance of trade, and you had a market that had spiked up to 2,700 six weeks earlier. If you check, you will see that, during 1987, while the S&amp;P and the Dow were going up, the rest of the market was quietly eroding. In December 1986, I shorted the financial stocks, and throughout 1987,1 didn&#8217;t lose any money, even though the Dow and the S&amp;P were going through the roof.</p></li></ol><h4>Mark Weinstein</h4><ol><li><p>Because I was inexperienced. I don&#8217;t believe anyone ever gets wiped out in the market because of bad luck; there is always some other reason for it. Either you were off when you did the trade, or you didn&#8217;t have the experience. There is always a mistake involved.</p></li><li><p>Weinstein employs his own custom-designed state-of-the-art computer systems to constantly monitor technical indicators designed to measure changes in market momentum. Rather than use the standard values for these indicators, Weinstein uses his values, which he frequently adjusts for changing market conditions.</p></li><li><p>It helps to understand that Weinstein usually plays for quick profits and covers his trades within hours or even minutes. Even on position trades, Weinstein will usually take some profits quickly to assure a net profitable outcome. He also trades markets in rotation, quickly shifting his profits from market to market, always seeking the profit potential with the lowest perceived risk. Finally, Weinstein enjoys the support of a floor network that often puts him on the right side of the bid-asked spread.</p></li><li><p>When I trade at home, I often watch the sparrows in my garden. When I feed them bread, they take just a little piece at a time and fly away. They keep on flying back and forth, taking small bits of bread. They may have to make a hundred stabs at a piece of bread to get what a pigeon gets at one time, but that is why a pigeon is a pigeon. You will never be able to shoot a sparrow, it is just too fast. That is the way I day trade. For example, there are times during the day when I am sure that the S&amp;P is going up, but I don&#8217;t try to pick the bottom, and I am out before it tops. I just take the mid-range where the momentum is greatest. That, to me, is trading like a sparrow eats.</p></li><li><p>Always do your homework.</p></li><li><p>Don&#8217;t be arrogant. When you get arrogant, you forsake risk control. The best traders are the most humble.</p></li><li><p>Understand your limitations. Everyone has limitations&#8202;&#8212;&#8202;even the best traders.</p></li><li><p>Be your person. Think against the herd, as they must lose in time. Don&#8217;t trade until an opportunity presents itself. Knowing when to stay out of the markets is as important as knowing when to be in them.</p></li><li><p>Your strategy has to be flexible enough to change when the environment changes. The mistake most people make is they keep the same strategy all the time. They say, &#8220;Damn, the market didn&#8217;t behave the way I thought it would.&#8221; Why should it? Life and the markets just don&#8217;t work that way.</p></li><li><p>Weinstein&#8217;s most traumatic trading experience occurred when he let a material goal interfere with his trading. This is a common theme that has surfaced in other interviews. It invariably seems to be a mistake to translate the potential profit or loss of trade into material terms.</p></li></ol><h4>Brian Gelber</h4><ol><li><p>I instinctively trade smaller and sometimes I just take a break. It is a good habit to wipe the slate clean and start fresh.</p></li></ol><h4>Tom Baldwin</h4><ol><li><p>He turned a profit from the beginning. He was a millionaire before his first year was up and has never looked back. Although he declines to discuss the extent of his winnings, $30 million appears to be a conservative estimate.</p></li><li><p>They trade too much. They don&#8217;t pick their spots selectively enough. When they see the market moving, they want to be in on the action. So, they end up forcing the trade rather than waiting patiently. Patience is an important trait many people don&#8217;t have.</p></li><li><p>The best traders have no ego. To be a great trader, you have to have a big enough ego only in the sense that you have confidence in yourself. You cannot let your ego get in the way of a trade that is a loser; you have to swallow your pride and get out.</p></li><li><p>To him, money is only a means of keeping score. By contrast, most traders tend to think of gains and losses in terms of their monetary implications&#8202;&#8212;&#8202;a frame of mind that only gets in the way of making trading decisions. For example, assume you originally planned to risk up to $5,000 on a trade, and quickly find yourself down by $2,000. If, at this point, you start to think of the trade in terms of money (for example, &#8220;the extra $3,000 can pay for my vacation&#8221;), you might well liquidate the position, even though you still believed in the trade. It is one thing to get out because you no longer like the position, but it is quite another matter to liquidate on impulse simply because you have translated the risk into tangible terms.</p></li><li><p>Baldwin&#8217;s point is that by bearing the pain just a little longer, you may be able to find a more favourable circumstance for liquidating. Of course, this philosophy should be applied only by disciplined traders: those with the ability to maintain a risk control strategy.</p></li></ol><h4>Tony Saliba</h4><ol><li><p>I consider myself a matrix trader. I trade everything on the screen as it interrelates with everything else. My basic strategy, however, was buying <em>butterflies</em> [a long or short position at one strike price balanced by an opposite position in higher and lower strike options&#8202;&#8212;&#8202;for example, long one IBM 135 call, short two IBM 140 calls, and long one IBM 145 call] and offsetting that with an explosion position.</p></li><li><p><strong>By buying butterflies, do you mean you were long the middle or the wings [that is, the higher and lower strike price options]?</strong> Long the wings. Your risk is limited, and if the market does not move widely, time decay works in your favour. [Barring a favourable price move or an increase in volatility, the value of an option erodes steadily over time. In a relatively flat market, the premium erosion in options with a strike price near the market price&#8202;&#8212;&#8202;&#8220;middle&#8221; in a butterfly spread&#8202;&#8212;&#8202;will be greater than that of options further removed from the strike price&#8202;&#8212;&#8202;&#8220;wings&#8221; in the spread.] Of course, I tried to buy the butterflies as cheaply as I could. If I chained enough of them together, my profit zone would be fairly wide. Then I would do an explosion position in a more distant month.</p></li><li><p><strong>What do you mean by the term &#8220;explosion position&#8221;?</strong> That&#8217;s my term. An explosion position is an option position that has limited risk and open-ended potential, which will profit from a large price move or an increase in volatility. For example, a position consisting of long out-of-the-money calls and long out-of-the-money puts would be an explosion position.</p></li><li><p><strong>In other words, the explosion position is your money bet in case</strong> of a big move, while your scalping is paying the bills, that is, the time decay cost of the explosion position. Exactly.</p></li></ol><h4>Dr. Van K.&nbsp;Tharp</h4><ol><li><p>The simple truth is that most people are <em>risk-aversive</em> in the realm of profits&#8202;&#8212;&#8202;they prefer a sure, smaller gain to a wise gamble for a larger gain&#8202;&#8212;&#8202;and <em>risk-seeking</em> in the realm of losses&#8202;&#8212;&#8202;they prefer an unwise gamble to a sure loss. As a result, most people tend to do the opposite of what is required for success. They cut their profits short and let their losses run. If you think of trading as a game and that a mistake is not following the rules of the game, then it becomes much easier to follow these two rules. You should review your rules at the beginning of the day and review your trading at the end of the day. If you followed your rules, even if you lost money, pat yourself on the back. If you didn&#8217;t follow your rules, then mentally rehearse what you did and give yourself more appropriate choices in the future.</p></li><li><p>The second major problem people have is dealing with stress. Stress takes two forms: worry and the biological fight/flight response. Our brains have a limited capacity for processing information. If your mind is preoccupied with worry, that worry takes up most of the decision space, and you don&#8217;t have enough capacity left to perform effectively.</p></li><li><p>The solution for dealing with stress is to work on the causes and to develop stress protectors. I would recommend that people with this problem go into a stress management program. Also, it is important to understand that many stressful events are such because of the way you perceive them. Change those perceptions and you will change the event itself. For example, winners typically differ from losers in their attitude about losses. Most people become anxious about losses, yet successful speculators have learned that an essential ingredient to winning is to make it OK to lose. Since most people in our culture are taught that only winning is acceptable, most investors must change their beliefs about losses to become successful.</p></li><li><p>Another major problem is that many people allow their emotions to control their trading. I worked with a floor trader whose father was fairly successful. His father was not a good model for him, however, in that he was an alcoholic. As a result, he developed a part to protect himself from being like his father. He could make about $75,000 per year trading, but if he made any more than that, this part kicked in to make sure that he would not become too successful. He was the one who made $650,000 in about two months after we had completed the parts negotiation.</p></li><li><p>Finally, the last major problem is making decisions. Although there are many facets to decision-making problems, what most people do is bring their normal method of making decisions to trading the markets. For example, think about what you go through to buy a new car. You have to think about the model, deal, service, cost, accessories, etc. And it probably takes you a week or more to evaluate those factors and make a decision. Most people bring that same method of making decisions to trading and it just doesn&#8217;t work.</p></li><li><p>The best method that I&#8217;ve found for dealing with long, ineffective decision-making problems is to short-circuit them through a process called anchoring. That process is a little too involved to explain here.</p></li><li><p>There are three primary factors involved in duplicating success&#8202;&#8212;&#8202;beliefs, mental states, and mental strategies. If you duplicate the way the best traders use those three factors for every aspect of the trading task, then you can duplicate their results.</p></li><li><p>Generally, I find that top traders believe: Money is NOT important. It is OK to lose in the markets. Trading is a game. Mental rehearsal is important for success. They&#8217;ve won the game before they start.</p></li><li><p>If you are committed, then not only are you certain that you are doing the right thing, but somehow events just seem to occur to help you. If you are committed to being a trader, then you probably have an understanding at some level of what I&#8217;m talking about. You probably even understand that those events that help you might be big losses.</p></li><li><p>Problems they don&#8217;t own consist of blaming the markets, blaming floor traders or locals, blaming insider trading, blaming their broker, or blaming their system for what goes wrong.</p></li><li><p>When people own their problems, they discover that their results usually stem from some sort of mental state. Common examples are:I&#8217;m too <em>impatient</em> with the markets. I get <em>angry</em> at the markets. I&#8217;m <em>afraid</em> at the wrong time. I&#8217;m too <em>optimistic</em> about what will happen.</p></li><li><p>The realization that you are responsible for the results you get is the key to successful investing. Winners know they are responsible for their results; losers think they are not.</p></li><li><p>Well, mental state manipulation is what most people call discipline. I teach people a very simple procedure that they can use right away. For example, suppose you are at your desk and you become aware that you are in a mental state that you would like to change. Get up out of the chair. Walk away about four feet and then look at how you looked in that chair. Notice your posture, your breathing, and your facial expressions. Then imagine how you would look if you had the sort of mental state you would like. When you can see that clearly, sit down in the chair again and assume the position that you just imagined. That exercise works for almost any situation as it involves several important principles&#8202;&#8212;&#8202;changing your body posture, seeing yourself from a more objective viewpoint, and imagining a more resourceful state.</p></li></ol><h4>The Trader-A</h4><ol><li><p>I came to realize that one of my great errors had been failing to exploit major price moves that I had correctly anticipated</p></li><li><p>You say you don&#8217;t have enough time each day to do your work on the markets. You are too busy with your new job and writing your book. Here, let me show you something.&#8221; He started citing assumptions regarding the sales of my book, royalties per copy sold, and the total hours I had spent writing the book. He then scribbled various calculations on a yellow pad. He arrived at a final figure of $18.50 per hour. &#8220;Here,&#8221; he said, &#8220;this is what you are making on your book.&#8221; The tone of his voice implied that I was crazy to jeopardize tens of thousands of dollars in my trading for such a paltry sum. (, the $18.50 estimate is probably wildly overinflated, but remember this was a dream.)</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/an-executive-summary-of-market-wizards?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/an-executive-summary-of-market-wizards?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/an-executive-summary-of-market-wizards?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p></li></ol><blockquote><p>I wanted to take a moment to express my gratitude to each and every one of you for taking the time to read my article. Your support and engagement mean too much for me, and I am truly grateful for the opportunity to share my thoughts and insights with such an amazing audience. Following me inspires me to keep pushing myself to create valuable and meaningful content. Whether you&#8217;re a long-time subscriber or a new reader, please know that your presence makes a difference, and I am deeply thankful for your support. I am committed to delivering high-quality articles that inform, inspire, and resonate with you. Your feedback and comments fuel my passion for writing and motivate me to constantly improve. Thank you for being part of this auidence. I am honored to have you as part of my community, and I look forward to sharing many more articles and ideas with you in the&nbsp;future.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Who Needs the GIL If you Have AsyncIO, Multiprocessing and Threading in Python.]]></title><description><![CDATA[Concurrency indicates that two tasks progress simultaneously.]]></description><link>https://zaidalissaalmaliki.substack.com/p/who-needs-the-gil-if-you-have-asyncio</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/who-needs-the-gil-if-you-have-asyncio</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Tue, 05 Nov 2024 17:42:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ym_m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ym_m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ym_m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ym_m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ym_m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ym_m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ym_m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg" width="1456" height="1386" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1386,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ym_m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ym_m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ym_m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ym_m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb613c1c6-1efe-434e-92d9-b0151664355e_2110x2008.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://images.unsplash.com/photo-1598533463912-68adac0b8231?q=80&amp;w=2110&amp;auto=format&amp;fit=crop&amp;ixlib=rb-4.0.3&amp;ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D">Parallelism</a></figcaption></figure></div><p>Concurrency indicates that two tasks progress simultaneously. For example, we need to order a pizza, and you have to write a story in Medium.</p><p><strong>The synchronous</strong> way is you call the pizza shop and wait on hold until the pizza guy answers your call. Then once answered, you give him your order choice and your address and wait for confirmation. And a&#8230;</p>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/who-needs-the-gil-if-you-have-asyncio">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Demystifying Linear Regression: A Comprehensive Guide for Beginners.]]></title><description><![CDATA[Demystifying Linear Regression: A Comprehensive Guide for Beginners.]]></description><link>https://zaidalissaalmaliki.substack.com/p/demystifying-linear-regression-a</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/demystifying-linear-regression-a</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Mon, 04 Nov 2024 18:12:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RBgD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>Demystifying Linear Regression: A Comprehensive Guide for Beginners.</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RBgD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RBgD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RBgD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RBgD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RBgD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RBgD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg" width="800" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RBgD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RBgD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RBgD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RBgD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9de17e30-a2b6-420c-b879-5b9c7d0e2c09_800x450.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://i.ytimg.com/vi/owI7zxCqNY0/maxresdefault.jpg">Linear Regression</a></figcaption></figure></div><h3></h3><p>Linear regression is a statistical method to model the relationship between a dependent variable and one or more independent variables. Its goal is to determine the best linear equation that predicts the dependent variable's value based on the independent variables. This technique is frequently employed in economics, finance, and the social sciences.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3>Understanding the Basics: What is Linear Regression and How Does It&nbsp;Work?</h3><p>Linear regression is a fundamental concept in statistics and machine learning that is used to understand the relationship between two variables. In simple terms, it helps us predict one variable based on the values of another variable.</p><p>The basic idea behind linear regression is to find the best-fitting line that represents the relationship between the independent variable (X) and the dependent variable (Y). This line is represented by the equation Y = mX + b, where m is the slope of the line and b is the y-intercept.</p><p>To find this fitting line, linear regression uses a technique called least squares estimation. This method calculates the sum of squared differences between the actual values of Y and the predicted values based on X. The goal is to minimise this sum of squared differences to obtain a line that covers these data points.</p><p>Linear regression can be used for various purposes, such as predicting sales based on spending on ads, estimating house prices based on square meters, or analysing trends in hotels. It provides valuable insights into relationships between variables and helps make informed decisions based on data analysis.</p><p>In conclusion, this effective method helps us establish relationships between variables and predict future trends using historical data. Upon understanding its fundamental principles, this useful instrument can be utilised across various sectors, encompassing business analytics, finance, healthcare, and more.</p><h3>Key Concepts Explained</h3><p>Let&#8217;s break down some key concepts that might sound difficult for you but they are crucial for understanding this powerful tool.</p><p>The equation for this linear regression model can be represented as:</p><p>y= &#946;0 + &#946;1x + &#949;</p><p>Where:</p><ul><li><p>&#946;0 is the intercept,</p></li><li><p>&#946;1&#8203; is the coefficient of the predictor variable <em>x</em>,</p></li><li><p>&#949; is the residual (the difference between the predicted value and the actual value of y).</p></li></ul><p>So, the equation explicitly shows the intercept (&#946;0&#8203;), the coefficient (&#946;1&#8203;), and the residuals (<em>&#949;</em>).</p><p>For example, if we have:</p><ul><li><p>Intercept (&#946;0&#8203;) = 7</p></li><li><p>Coefficient (&#946;1&#8203;) = 12</p></li><li><p>Residual (&#949;) = 1</p></li></ul><p>Our linear regression equation would be:</p><p>y = 7+ 12x + 1</p><p>Sure, let&#8217;s simplify the explanations:</p><p>1. Coefficients: Coefficients are like the helpers in a math problem. In linear regression, they&#8217;re just numbers that you multiply with your predictor variables to make predictions about the outcome. They&#8217;re like sidekicks helping your main hero (the outcome) along.</p><p>2. Intercept: Think of the intercept as the starting point on a journey. In linear regression, it&#8217;s the point where your prediction line crosses the y-axis when all your predictors are zero. It&#8217;s like the starting point on a treasure map, giving you a clue about where your predictions begin.</p><p>3. Residuals: Residuals are the leftovers from your predictions that don&#8217;t quite fit perfectly. They&#8217;re the difference between what happened and what your model predicted. Picture them as those last few pieces in a puzzle that just don&#8217;t fit, no matter how hard you try.</p><h3>Evaluating Model Performance</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!thh-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!thh-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!thh-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!thh-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!thh-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!thh-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg" width="800" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!thh-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!thh-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!thh-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!thh-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbc83ef-36df-4cfc-a765-e8843ffb961d_800x450.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://suboptimal.wiki/images/mse_5.jpg">MSE</a></figcaption></figure></div><p>Mean squared error (MSE) defines how big is the error in regression models. Its definition is the average squared difference between the observed and predicted. When MSE equals zero means model has no error. When there is error, its value increases.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hX0j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hX0j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hX0j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hX0j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hX0j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hX0j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg" width="656" height="415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:415,&quot;width&quot;:656,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hX0j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hX0j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hX0j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hX0j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddab567a-6255-4954-a035-b39090bb79fd_656x415.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://docs.oracle.com/en/cloud/saas/planning-budgeting-cloud/pfusu/img/insights_rmse_formula.jpg">RMSE</a></figcaption></figure></div><p>Root mean square error or root mean square deviation is one of the most commonly used measures for evaluating the quality of predictions in regression models. It measures the distance between predictions and true values using Euclidean distance.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dnky!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dnky!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 424w, https://substackcdn.com/image/fetch/$s_!Dnky!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 848w, https://substackcdn.com/image/fetch/$s_!Dnky!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 1272w, https://substackcdn.com/image/fetch/$s_!Dnky!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dnky!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png" width="800" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dnky!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 424w, https://substackcdn.com/image/fetch/$s_!Dnky!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 848w, https://substackcdn.com/image/fetch/$s_!Dnky!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 1272w, https://substackcdn.com/image/fetch/$s_!Dnky!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3708aa7b-3be5-4603-9c22-844cedfc3e6a_800x472.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://media.graphassets.com/HePGKyTHRRGVmaI8SEk2">MAE</a></figcaption></figure></div><p>Mean absolute error (MAE) is a popular metric. The MAE score is measured as the average of the absolute error values. It is the difference between the measured value and true value. For example, if a scale states 97 kilos but you know your true weight is 93 pounds, then the scale has an absolute error of 97 kg&#8202;&#8212;&#8202;93 kg= 4 kg.</p><p>Which one is the best to use as error measurement, this depends on your use case and for robustness to outliers, MAE is less sensitive to outliers compared to MSE and RMSE. In MSE and RMSE, errors are squared before they are averaged, which gives a disproportionately large weight to large errors (outliers). This can skew the overall error metric if your data has many outliers or is highly variable.</p><h3>Practical Application: How to Implement Linear Regression Using Python or R Programming Language</h3><pre><code>import numpy as np

class LinearRegression:
    def __init__(self, learning_rate=0.01, n_iterations=1000):
        self.learning_rate = learning_rate
        self.n_iterations = n_iterations
        self.weights = None
        self.bias = None

    def fit(self, X, y):
        n_samples, n_features = X.shape

        self.weights = np.zeros(n_features)
        self.bias = 0

        for _ in range(self.n_iterations):
            # Predicted values
            y_pred = np.dot(X, self.weights) + self.bias

            # Compute gradients
            dw = (1/n_samples) * np.dot(X.T, (y_pred - y))
            db = (1/n_samples) * np.sum(y_pred - y)

            # Update weights and bias
            self.weights -= self.learning_rate * dw
            self.bias -= self.learning_rate * db

    def predict(self, X):
        return np.dot(X, self.weights) + self.bias

def mean_squared_error(y_true, y_pred):
    return np.mean((y_true - y_pred) ** 2)

def root_mean_squared_error(y_true, y_pred):
    return np.sqrt(mean_squared_error(y_true, y_pred))

def mean_absolute_error(y_true, y_pred):
    return np.mean(np.abs(y_true - y_pred))

if __name__ == "__main__":
    np.random.seed(0)
    X = 2 * np.random.rand(100, 1)  
    y = 3 * X + 4 + np.random.randn(100, 1)
    
    # Create and train the model
    model = LinearRegression()
    model.fit(X, y)

    # Predictions
    X_test = np.array([[0.5], [1.5]])
    predictions = model.predict(X_test)
    print("Predictions:", predictions)
    
    # Evaluation
    mse = mean_squared_error(y, model.predict(X))
    rmse = root_mean_squared_error(y, model.predict(X))
    mae = mean_absolute_error(y, model.predict(X))
    print("Mean Squared Error:", mse)
    print("Root Mean Squared Error:", rmse)
    print("Mean Absolute Error:", mae)
</code></pre><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/demystifying-linear-regression-a?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/demystifying-linear-regression-a?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/demystifying-linear-regression-a?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><p><br></p>]]></content:encoded></item><item><title><![CDATA[How Investing In Bitcoin For The Faint of The Heart]]></title><description><![CDATA[I know that all my articles are on the topics of machine learning, software design, scalability, and infrastructure, so why did I change my topics?]]></description><link>https://zaidalissaalmaliki.substack.com/p/how-investing-in-bitcoin-for-the</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/how-investing-in-bitcoin-for-the</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Sat, 02 Nov 2024 17:49:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!llxw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I know that all my articles are on the topics of machine learning, software design, scalability, and infrastructure, so why did I change my topics? what happened did I lose my mind?</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>No, my dear reader, the thing is I like to trade and invest, and I like to do it in normal stocks and cryptocurrency, my idea is to take all these topics machine learning, software design, scalability, infrastructure, trading and investing as progenitor topics which need to interact between each other to build a new idea. Let&#8217;s jump and talk about investing in cryptocurrency, as you know crypto is volatile if you compare it with normal stocks and bonds, it&#8217;s not for the faint of the heart.</p><p>This is because Bitcoin the king of the cryptocurrency world have more or less 48 per cent of volatility per year at the time of writing this post, depending on which exchange you measure the volatility, so what&#8217;s volatility, what&#8217;s hedging and how we can invest in Bitcoin without fear. First, let&#8217;s talk about hedging and we need to mention who&#8217;s the first guy who used this technique and made a profit with it.</p><h3>What is&nbsp;Hedging?</h3><blockquote><p>Suppose you&#8217;re a fan of Real Madrid and you decide to bet 99 Euros on them to win the next UEFA Champions League. The bet pays 999 Euros if you get it right. After couple of months later, Real Madrid made it to the final and is set to play against FC Barcelona. You feel that this game is going to be a difficult one and that the outcome is uncertain historically speaking. You don&#8217;t want to risk losing your entire 99 Euros, so you decide to hedge your bet by placing a new bet against Real Madrid, it&#8217;s feels hard to bet against your team, but you have to protect your money.</p><p>You bet 500 Euros that FC Barcelona will win the game. It pays an even 500 Euros if you get it right. Now, if Real Madrid wins, you end up with 598 Euros (the 1098 Euros minus the 500 Euros you lose on the new bet). If FC Barcelona wins, you end up with 500 Euros (from the new bet). With just the initial bet on Real Madrid, your options were either you make 0 Euros which means you lose everything or 1098 Euros, depending on the outcome of the game. But by using the second approach in which you mitigate your risk, your options are now either 500 Euros or 598 Euros.</p><p>No matter what happens, your expected win is 549 Euros which is 500 plus 598 divided by 2, assuming that the game is a toss-up. By hedging your bet, you&#8217;ve minimized the losses you&#8217;re taking and can better predict the amount of money you will end up with. This is a simple explanation in Feynam&#8217;s terms regarding hedging. After this beautiful explanation of the concept of hedging let&#8217;s move on and talk about the father of hedge funds.</p></blockquote><h4>The Big&nbsp;Daddy</h4><p>Alfred Winslow Jones was described in the New York Magazine of 1968 essay as &#8220;big daddy&#8221;. Jones created two investment ideas that helped frame his portfolio. Jones developed equilibrium by going long in potential shares and short-selling in less promising shares, which means he borrowed and sold them, predicting that their value would decline. By being some stocks long and others short he protected his fund from market fluctuates.</p><p>After hedging out market risk in the way commented before, he felt secure in leveraging his bet with borrowed money. This formula of hedging and leverage had a miracle influence on Jones&#8217;s portfolio of stocks. The same strategy could be put in bonds, futures, options, swaps, and any combination of these financial instruments this was its true magic. We can say Jones built this formula by chance rather than by purpose, He pioneered a platform for complex strategies more than he could contemplate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!llxw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!llxw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 424w, https://substackcdn.com/image/fetch/$s_!llxw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 848w, https://substackcdn.com/image/fetch/$s_!llxw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!llxw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!llxw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg" width="495" height="363" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:363,&quot;width&quot;:495,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!llxw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 424w, https://substackcdn.com/image/fetch/$s_!llxw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 848w, https://substackcdn.com/image/fetch/$s_!llxw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!llxw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faeeb227f-704b-437e-ae4e-8e5004655930_495x363.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Big Daddy of Hedge&nbsp;Funds</figcaption></figure></div><h4>What is&nbsp;Bitcoin?</h4><p>It&#8217;s just a list of names. Not only do their names appear, but so does their bank account amount. Not nearly the technological revolution you anticipated? Let&#8217;s take a moment to consider what makes this list so unique. But first, recognise that our current banking system is nothing more than a list of names and balances. Our society has already made the switch to digital currency. We know how much money we have depending on the balance in our bank account. Your bank does not truly have that exact amount of money in a vault somewhere; it is only a figure in its database.</p><blockquote><p>What distinguishes this Bitcoin list? This list is available to everyone we know. Not only does the bank know how much money everyone has, but everyone who possesses a copy of the list does as well. Strange, isn&#8217;t it? Simply ask for a copy! Because everyone has access, the list is incredibly easy to discover. You&#8217;ll see below that Alice is willing to share her copy. Why is this shared list&nbsp;useful?</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uRM3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uRM3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 424w, https://substackcdn.com/image/fetch/$s_!uRM3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 848w, https://substackcdn.com/image/fetch/$s_!uRM3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 1272w, https://substackcdn.com/image/fetch/$s_!uRM3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uRM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png" width="800" height="457" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:457,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uRM3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 424w, https://substackcdn.com/image/fetch/$s_!uRM3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 848w, https://substackcdn.com/image/fetch/$s_!uRM3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 1272w, https://substackcdn.com/image/fetch/$s_!uRM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d8d8c25-dccf-424d-9f02-f731bb6f4a94_800x457.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Shared List</figcaption></figure></div><p>Let&#8217;s assume Bob and Dave go out to dinner one night, and Bob, as usual, forgets his wallet. Dave pays the bill. But now that we&#8217;re in the twenty-first century. Bob realises he has two options for repaying Dave. Dave owes Bob &#163;19 for supper. Let&#8217;s look at how Bob would pay Dave.</p><p>Using a Bank: I&#8217;m sure you&#8217;ve heard of this approach. You tell your bank who you want to transfer money to and how much you want to send. The bank will rearrange the numbers in its database such that Bob now has &#163;19 less and Dave has &#163;19 more.</p><p>Using Bitcoin: There is no need for a bank while using Bitcoin. Remember, this is only a list, and Bob and Dave both have a copy. So Bob deducts &#163;19 from the balance next to his name and adds &#163;19 to the amount next to Dave&#8217;s name. Money was delivered without the use of an intermediary</p><h4>What is Volatility?</h4><p>Volatility in simple terms, is how fearful something is of going up or down. It&#8217;s a measurement of fear and uncertainty among investors. Sometimes prices of things (bonds, commodities, crypto, stocks) move big and quickly over a short period, and this movement can go down or up. You can measure volatility in both directions up or down.</p><p>The volatility of the crypto market is a measure of how much the entire value of the crypto market changes up and down. Individual cryptocurrencies, such as Bitcoin, might be deemed volatile in addition to the market as a whole. More specifically, volatility may be calculated by examining how much an asset&#8217;s price differs from its average price.</p><p>Standard deviation is a statistical measure of market volatility that measures how far prices diverge from the average price. If prices fluctuate inside a limited trading range, the standard deviation will be low, indicating little volatility. In contrast, if prices change rapidly up and down, the standard deviation returns a high result, indicating extreme volatility. You can see in the image below the higher volatility of Bitcoin in October 2021, with the volatility measured by the yellow line in the second portion of the graphic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q0Y9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 424w, https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 848w, https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png" width="800" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:429,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 424w, https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 848w, https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0Y9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1879a971-032a-4b9b-a1d8-8705588bf50c_800x429.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Bitcoin Volatility</figcaption></figure></div><h4>Hedging Techniques</h4><p>In most cases, hedging tactics entail the use of financial products known as derivatives. Options and futures are two of the most used derivatives. You may use derivatives to create trading strategies in which a loss in one investment is compensated by a gain in another. First, we will talk about the futures contract, its definition, simple explanation, an example, and use cases of futures contracts. Second, we are going to dive into options, options are complex products and you need to read and learn about options as much as you can.</p><h4>Futures</h4><p>A futures contract is an agreement between two parties to buy or sell an asset at a certain time in the future for a certain price. futures contracts are normally traded on an exchange. A simple explanation of the future is the following. Let&#8217;s imagine you have a car, and you want to sell it to your friend, but you can&#8217;t meet your friend right now, because both of you are living in different cities. So, you both agree to make a special agreement. You decide to sell the car to your friend at a fixed price, but the actual exchange will happen later when you meet. That special deal you made is like a futures contract.</p><blockquote><p>For example, say you own an ice cream shop and you want to make sure that you always know how much you&#8217;ll pay for things like milk. You could buy a futures contract of milk from the CME group, which means you&#8217;re saying that no matter how expensive the milk gets, you&#8217;ll pay the price you agreed to in the contract on the agreed-upon date. That way, you know how much you&#8217;ll spend and you can plan accordingly. Is like insurance against the spike in the price of milk so you can protect yourself from this event.</p></blockquote><p>There are two main strategies for the future:</p><p>The first technique is hedging and here you have two scenarios:</p><ol><li><p>When the price of the underlying asset goes up you need to take a short position against loss.</p></li><li><p>When the price of the underlying asset goes down you need to take a long position against loss.</p></li></ol><p>The second technique is speculation and here you have two scenarios:</p><ol><li><p>Long position makes money if the price of the underlying asset goes up, and loses money if the price of the underlying asset goes down</p></li><li><p>Short position makes money if the price of the underlying asset goes down, and loses money if the price of the underlying asset goes up</p></li></ol><p>Forward contracts are the same as Futures Contract but operate in Over Counter (OTC).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nsf7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nsf7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 424w, https://substackcdn.com/image/fetch/$s_!Nsf7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 848w, https://substackcdn.com/image/fetch/$s_!Nsf7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 1272w, https://substackcdn.com/image/fetch/$s_!Nsf7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nsf7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png" width="553" height="324" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:324,&quot;width&quot;:553,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nsf7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 424w, https://substackcdn.com/image/fetch/$s_!Nsf7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 848w, https://substackcdn.com/image/fetch/$s_!Nsf7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 1272w, https://substackcdn.com/image/fetch/$s_!Nsf7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccc5edd-c0f3-447e-a669-a4dd4051940e_553x324.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Forward contracts are same as Futures Contract, but operate in Over The Counter&nbsp;(OTC)</figcaption></figure></div><h4>Options</h4><blockquote><p>Let&#8217;s start by talking about options in simple terms. first, we will introduce the definition, then we move on to the subject-specific vocabulary, use cases and last but not least how they work in the real economy. In this simple explanation, we are buying a car as our example, so an option is a contract that gives you the right but not the obligation to buy or sell a car in six months from the car&#8217;s dealer with the price of 20K British pounds, and you only pay 200 pounds for the contract. Building upon this easy example we introduce the terms to make you understand options.</p></blockquote><p>Exercise price or Strike: This is the price of the underlying asset (the car), the price of buying or selling.</p><p>Premium: This is the cost of the contract, the money that you have to pay in exchange for this contract, is the price of the option.</p><p>Expiration date: This is the date on which you&#8217;ll buy or sell the car from the dealer, in this case, is six months.</p><p>Underlying asset: The car</p><p>Type: you have two types here, it can be Put which is selling the car to the dealer, or it can Call which is buying the car from the dealer.</p><p>There are two main use cases of options:</p><ol><li><p>The first use case is hedging your risk, imagine you have a cryptocurrency like Bitcoin and you want to protect this asset from losing, so you need to use the put option, if the asset decreases in value, the option increases in value.</p></li><li><p>The second use case is speculation, your betting on the market going up or down by trading options.</p></li></ol><p><strong>How do options work?</strong></p><p>There are two types of options, calls and puts, and for each type of option there are two scenarios short and long or (sell and buy):</p><p>Buying(long) a call option, gives you the right but not the obligation to buy the underlying asset (Bitcoin in our case) at the strict price (exercise price).</p><p>Buying(long) a put option gives you the right but not the obligation to sell the underlying asset (Bitcoin in our case) at the strict price (exercise price).</p><p><em>Let&#8217;s see a simple example:</em></p><ul><li><p><em><strong>Calls</strong>: A call is the option to buy 100 shares of a stock at a defined price (called a strike) by the expiration date. A buyer of the call thinks the price of the stock is going to go up, and the seller thinks that it will stay below the strike price.</em></p></li><li><p><em><strong>Buyer of the Call</strong>: Pays a premium to the writer of the call. This premium ranges wildly depending on how volatile the stock is (basically what are the odds that a stock will move up from here). A stock like Coke or Proctor and Gamble have very low premiums because there is very little risk they&#8217;ll run up more than a few dollars a share. The buyer of the call would generally only &#8220;exercise&#8221; (use) the option if the share price of the stock goes above their strike price plus the premium. The goal of someone who is buying a call is that a stock moves up in price (hopefully well past the strike price)</em></p></li><li><p><em><strong>Writer (Seller) of the Call</strong>: Sells the right to the buyer to sell them the stock at the strike price anytime before its expiration and immediately receives the premium in their account. Their goal is to have the stock stay below the strike price. If it does, generally the buyer of the call will not exercise the call. The seller keeps the premium. For many investors, they write what are called &#8220;covered calls,&#8221; meaning they own the stock that they would be obligated to sell. A &#8220;naked call&#8221; is when you do not own the stock, and would have to go out, purchase the stock, and then sell it (likely at a lower price than you purchased it) if the option was exercised.</em></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/how-investing-in-bitcoin-for-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/how-investing-in-bitcoin-for-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/how-investing-in-bitcoin-for-the?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p></li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[Inside the Black Box: The Simple Truth About Quantitative Trading]]></title><description><![CDATA[This my personal review about the book, Inside the Black Box: The Simple Truth About Quantitative Trading by Rishi K.]]></description><link>https://zaidalissaalmaliki.substack.com/p/inside-the-black-box-the-simple-truth</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/inside-the-black-box-the-simple-truth</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Fri, 01 Nov 2024 09:06:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QNFi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QNFi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QNFi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 424w, https://substackcdn.com/image/fetch/$s_!QNFi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 848w, https://substackcdn.com/image/fetch/$s_!QNFi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 1272w, https://substackcdn.com/image/fetch/$s_!QNFi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QNFi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png" width="800" height="711" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9044078e-22f9-479c-b0e3-384527664b73_800x711.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:711,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QNFi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 424w, https://substackcdn.com/image/fetch/$s_!QNFi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 848w, https://substackcdn.com/image/fetch/$s_!QNFi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 1272w, https://substackcdn.com/image/fetch/$s_!QNFi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9044078e-22f9-479c-b0e3-384527664b73_800x711.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Inside the Black Box: The Simple Truth About Quantitative Trading by Rishi K.&nbsp;Narang</em></figcaption></figure></div><p>This my personal review about the book, <em>Inside the Black Box: The Simple Truth About Quantitative Trading by Rishi K. Narang</em>, goes into the field of quantitative trading. In this book, Narang gives readers an understanding of how quantitative trading functions, as well as its advantages and disadvantages. He also talks about the several methods quantitative traders employ to make money on the stock market.</p><p>Making financial judgments using algorithms and mathematical models is known as quantitative trading. Quantitative trading employs data and statistical analysis to find patterns and trends in the markets, compared to traditional trading, which depends on human perception and decision-making.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>Quantitative traders employ software programs to conduct their trades and aim to make money by taking advantage of these patterns and trends.<br>In the first section of<em> Inside the Black Box</em>, Narang explains the fundamentals of quantitative trading, highlighting how it differs from conventional trading and the reasons it has grown in popularity recently. He also debunks a few popular myths and misconceptions regarding quantitative trading, such as the idea that it is a &#8220;black box&#8221; that is difficult to comprehend.</p><p>The significance of data in quantitative trading is one of the book&#8217;s key themes. Data, according to Narang, is the lifeblood of quantitative trading, and proficiency in data collection, cleaning, and analyzing is essential for success. He covers how to find lucrative trading opportunities using the many forms of data that quantitative traders employ, such as market data, news data, and alternative data.</p><p>Several chapters of Narang are devoted to analyzing the various trading approaches that quantitative traders employ. These include statistical arbitrage, mean reversion, trend following, and other techniques. He provides examples and thorough explanations of each tactic&#8217;s advantages and disadvantages.</p><p>He also demonstrates how to combine these tactics to construct more complicated trading systems. One of the most intriguing sections of <em>Inside the Black Box</em> is Narang&#8217;s discussion of risk management in quantitative trading. He emphasizes that while quantitative trading may be extremely rewarding, it also includes substantial dangers. Among these risks are model risk, execution risk, and market risk. Narang offers specific guidance on how to mitigate these risks, such as using stop-loss orders, control of position size, and diversifying using multiple instruments from different assets.</p><p>Overall, <em>Inside the Black Box</em> is a fantastic primer in the realm of quantitative trading. Narang writes in a simple, entertaining way that simplifies even the most complicated subjects. The book is packed with practical tips and examples that will benefit both new and seasoned traders. It&#8217;s also a great resource for investors who want to learn how quantitative trading works and how to utilize it to make money in the financial markets.</p><p>One of the book&#8217;s merits is its emphasis on the practical elements of quantitative trading. Narang isn&#8217;t afraid to talk about the risks and rewards of this form of trading. He is open about the limits of quantitative models and the hazards associated with their use. He also provides practical guidance on how to overcome these obstacles and manage these risks, making this book an invaluable resource for anybody interested in quantitative trading.</p><p>Another quality of the book is its thorough treatment of the subject. From the fundamentals of quantitative trading to the most recent research and breakthroughs in the area, Narang covers it all. He also includes a multitude of resources for further reading, including as research papers, books, and websites, making the book an excellent starting point for anybody interested in delving deeper into the area of quantitative trading.</p><p>The book&#8217;s possible flaw is that it might be quite technical at times. Narang&#8217;s use of mathematical language and vocabulary may be frightening to some readers. He does, however, a good job of describing these principles in layman&#8217;s terms and offering instances to demonstrate their practical uses. Readers who are inexperienced with quantitative methods will also benefit from this article.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/inside-the-black-box-the-simple-truth?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/p/inside-the-black-box-the-simple-truth?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://zaidalissaalmaliki.substack.com/p/inside-the-black-box-the-simple-truth?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[How to Build Kubernets Cluster with Jenkins using Terraform and HELM: Part Two]]></title><description><![CDATA[Practical Concepts]]></description><link>https://zaidalissaalmaliki.substack.com/p/how-to-build-kubernets-cluster-with</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/how-to-build-kubernets-cluster-with</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Thu, 31 Oct 2024 08:26:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!40cU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!40cU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!40cU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 424w, https://substackcdn.com/image/fetch/$s_!40cU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 848w, https://substackcdn.com/image/fetch/$s_!40cU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 1272w, https://substackcdn.com/image/fetch/$s_!40cU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!40cU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png" width="800" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4229321-b827-4137-9722-cf18a31e2d20_800x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!40cU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 424w, https://substackcdn.com/image/fetch/$s_!40cU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 848w, https://substackcdn.com/image/fetch/$s_!40cU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 1272w, https://substackcdn.com/image/fetch/$s_!40cU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4229321-b827-4137-9722-cf18a31e2d20_800x450.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://repository-images.githubusercontent.com/290028276/52451d00-04cd-11eb-9d7a-620fa31f128e">The Source</a></figcaption></figure></div><h3>Practical Concepts</h3><h4>Main</h4><p>This module will contain the configuration of the providers that you need so that terraform can install them. Providers are plugins that terraform uses to connect with cloud providers, remote systems, and other APIs. When you run <em>terraform init</em> terraform providers are downloaded and installed as part of the terraform work&#8230;</p>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/how-to-build-kubernets-cluster-with">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Build a Kubernetes Cluster with Jenkins Using Terraform and Helm: Part One]]></title><link>https://zaidalissaalmaliki.substack.com/p/how-to-build-a-kubernetes-cluster</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/how-to-build-a-kubernetes-cluster</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Tue, 29 Oct 2024 17:22:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XqJ1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38b6b226-d3c4-4661-ad5c-6025a68faa18_800x450.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/how-to-build-a-kubernetes-cluster">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[3 Steps to Creating Any Data Project]]></title><description><![CDATA[Thanks for reading Data Akkadian!]]></description><link>https://zaidalissaalmaliki.substack.com/p/3-steps-to-creating-any-data-project</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/3-steps-to-creating-any-data-project</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Mon, 28 Oct 2024 18:01:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hX8Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hX8Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hX8Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 424w, https://substackcdn.com/image/fetch/$s_!hX8Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 848w, https://substackcdn.com/image/fetch/$s_!hX8Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 1272w, https://substackcdn.com/image/fetch/$s_!hX8Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hX8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png" width="800" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hX8Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 424w, https://substackcdn.com/image/fetch/$s_!hX8Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 848w, https://substackcdn.com/image/fetch/$s_!hX8Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 1272w, https://substackcdn.com/image/fetch/$s_!hX8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f1cc7d5-1ea0-46c0-8a59-8a291b7fe208_800x450.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://149695847.v2.pressablecdn.com/wp-content/uploads/2020/01/top-10-DS-projects.png">Data Project</a></figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3>How to Gather Requirements</h3><p>This is the first step to create and build your data pipeline in any company, relax, believe in this process that I present to you right here, right now, and if you have a huge ego, try to control it, or leave outside your &#8230;</p>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/3-steps-to-creating-any-data-project">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[IndieVoice.app: A Cautionary Tale of Disregarding Feedback and Professionalism]]></title><description><![CDATA[In today&#8217;s digital age, platforms like IndieVoice.app promise to connect creators with the resources and community they need to thrive.]]></description><link>https://zaidalissaalmaliki.substack.com/p/indievoiceapp-a-cautionary-tale-of</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/indievoiceapp-a-cautionary-tale-of</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Mon, 28 Oct 2024 15:37:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bH9u!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad7d47e3-3a6e-4318-a3ab-92395ba7a5fe_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In today&#8217;s digital age, platforms like IndieVoice.app promise to connect creators with the resources and community they need to thrive. However, as a former user who was removed from the platform after providing detailed, honest feedback, my experience has revealed some troubling aspects of the IndieVoice.app that should give potential users pause. This article unpacks the shortcomings of IndieVoice.app, covering everything from poor user experience and questionable business practices to dismissing constructive criticism and lack of openness to improvement.</p><h4>Initial Expectations vs.&nbsp;Reality</h4><p>When I joined IndieVoice.app, I expected a community where creators, critics, and strategists could openly collaborate to build something meaningful. My background in website analysis and SWOT analysis positioned me to provide valuable insights, which I hoped would help IndieVoice.app refine its offerings. However, what began as a constructive relationship took a sour turn when my critical feedback was seemingly unwelcome, resulting in my removal from the platform. IndieVoice.app, which should value user insights, instead demonstrated a disturbing aversion to the truth, kicking out those who dared to voice constructive criticism.</p><h4>User Experience Issues</h4><p>One of the first signs of IndieVoice.app&#8217;s unprofessional approach is the poor user experience (UX) and user interface (UI) that greets users upon joining. The layout feels clunky and unintuitive, with essential features hidden behind layers of menus and options. Navigating through IndieVoice.app is an exercise in patience, with a confusing interface that seems more like a maze than a straightforward platform. This lack of polish indicates a lack of care and attention to detail in the overall user experience.</p><p>For a platform claiming to foster indie voices, having a seamless, user-friendly interface is essential. Instead, users are left to navigate a UI that feels half-baked. A strong platform supports its users by providing a reliable and intuitive experience. Unfortunately, IndieVoice.app seems to prioritize pushing users through its ecosystem rather than creating a comfortable, professional environment for them.</p><h4>Professionalism and the Dismissal of Constructive Feedback</h4><p>In my experience, a defining moment in evaluating the quality of a platform is how it handles feedback. After completing reviews for 11 websites and performing a SWOT analysis, I expected my critiques to be welcomed as a means for IndieVoice.app to improve. A thoughtful, well-intentioned critique can lead to substantial progress. Instead, my feedback was met not with an appreciation or even polite acknowledgement, but with an abrupt removal from the platform.</p><p>IndieVoice.app&#8217;s reaction to my honest feedback raises serious questions about its commitment to growth and improvement. In any professional setting, critical feedback is essential for refining a product. Dismissing someone who invests time and effort in providing constructive criticism suggests an unprofessional mindset, where only praise is valued. If IndieVoice.app cannot handle honest feedback, how can it expect to support and nurture the independent creators it claims to champion?</p><h4>Integrity and Transparency: Values in&nbsp;Question</h4><p>IndieVoice.app&#8217;s apparent unwillingness to accept critical feedback signals a deeper issue: a lack of transparency and commitment to user integrity. Dismissing individuals who bring forth ideas for improvement undermines the authenticity of the platform. For users, especially creators looking to build their brands, this kind of selective feedback system creates a misleading environment where only positive responses are tolerated.</p><p>Platforms dedicated to independent voices should encourage diversity of thought and critical input, not silence it. A platform that cannot engage in open dialogue with its users is unlikely to provide genuine support. Users may find themselves censored or alienated if they don&#8217;t align with IndieVoice.app&#8217;s narrow view of acceptable feedback.</p><h4>The Strengths, Weaknesses, Opportunities, and Threats (SWOT) Analysis Revisited</h4><p>The SWOT analysis I conducted for IndieVoice.app highlighted several areas for improvement, which, if addressed, could enhance the platform&#8217;s usability and relevance. Here&#8217;s a brief overview of what I found in each category:</p><ul><li><p><strong>Strengths</strong>: IndieVoice.app has the potential to fill a niche for independent creators and niche audiences. The idea of giving smaller voices a platform is promising.</p></li><li><p><strong>Weaknesses</strong>: The platform&#8217;s UX and UI flaws hinder accessibility and make navigation frustrating. The aversion to constructive criticism limits the potential for growth, and the lack of transparency raises doubts about the platform&#8217;s professional integrity.</p></li><li><p><strong>Opportunities</strong>: IndieVoice.app could benefit greatly from adopting a more transparent approach and welcoming user feedback. Enhancing the platform&#8217;s design and functionality could also attract more serious users.</p></li><li><p><strong>Threats</strong>: Inflexibility and lack of receptivity to user feedback pose existential risks to the platform&#8217;s reputation. Competing platforms that embrace a more open, user-friendly, and constructive model could easily eclipse IndieVoice.app if it continues down this path.</p></li></ul><p>Each of these points provides a roadmap for improvement, but unfortunately, IndieVoice.app seems resistant to evolving in ways that would better serve its community.</p><h4>Competitive Alternatives</h4><p>For those considering IndieVoice.app, there are numerous alternative platforms that embrace open dialogue and value user contributions. Sites like Patreon, Medium, or even Substack are known for their support of creator-driven content and their willingness to grow based on user feedback. These platforms foster user engagement, providing better UX/UI experiences and actively encouraging feedback to refine their services.</p><p>Creators looking for a platform that values both their voice and their opinions will likely find a more supportive environment elsewhere. Platforms that encourage diversity of thought, accept critical input and are committed to transparency offer a more stable foundation for anyone serious about their work.</p><h4>Conclusion: Why Users Should Think Twice About IndieVoice.app</h4><p>IndieVoice.app has the potential to become a valuable space for independent creators, but its current approach suggests a lack of professionalism and transparency. My experience reveals a platform that cannot handle constructive criticism and lacks respect for those who invest time in offering valuable feedback. Dismissing users for being honest is a troubling indicator that IndieVoice.app is more interested in preserving its image than improving its functionality.</p><p>For anyone considering using IndieVoice.app, it&#8217;s essential to remember that true collaboration is built on a foundation of respect, openness, and a commitment to improvement. A platform that disregards feedback and lacks transparency ultimately disrespects its users. IndieVoice.app&#8217;s potential remains unrealized due to its own reluctance to evolve. For now, creators looking for a genuine, professional environment to share their work would be better served to explore other platforms that value user insights and are committed to transparency and growth.</p>]]></content:encoded></item><item><title><![CDATA[Do you know there are 7 differents ways to scale your web architecture?]]></title><description><![CDATA[Let me tell you a story about scalability.]]></description><link>https://zaidalissaalmaliki.substack.com/p/do-you-know-there-are-7-differents</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/do-you-know-there-are-7-differents</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Fri, 25 Oct 2024 20:20:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rJmc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rJmc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rJmc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rJmc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rJmc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rJmc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rJmc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg" width="1456" height="968" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:968,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rJmc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rJmc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rJmc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rJmc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645ca5af-c62c-4ef5-b1bb-4aeb85117cc3_1600x1064.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><a href="https://unsplash.com/photos/rsWZ-P9FbQ4">Baker Example</a></figcaption></figure></div><p>Let me tell you a story about scalability. Anybody can understand, so prepare your coffee or tea and enjoy the reading.</p><p>Consider a baker. To make the best artisan bread, you have to know exactly the right recipe of the bread and when to put it in the oven just at the right time and temperature. That&#8217;s a unique skill that not just anyone can &#8230;</p>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/do-you-know-there-are-7-differents">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Message Queues]]></title><description><![CDATA[In real life, something as simple as a bakery has a queuing system: orders are queued by waiters and the baker processes them by dequeuing.]]></description><link>https://zaidalissaalmaliki.substack.com/p/message-queues</link><guid isPermaLink="false">https://zaidalissaalmaliki.substack.com/p/message-queues</guid><dc:creator><![CDATA[Zaid Alissa Almaliki]]></dc:creator><pubDate>Wed, 23 Oct 2024 16:44:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ecm9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8efbfbf-b031-4baf-b640-e49e9b7af38c_800x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In real life, something as simple as a bakery has a queuing system: orders are queued by waiters and the baker processes them by dequeuing. Then, when pastries are made, the backer puts them into the queue and waiters dequeue them to the tables.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://zaidalissaalmaliki.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Data Akkadian! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>In Technical Ter&#8230;</h2>
      <p>
          <a href="https://zaidalissaalmaliki.substack.com/p/message-queues">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>