<?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[ValueCurve: Code Play]]></title><description><![CDATA[Learn concepts, prototyping and hands-on projects ]]></description><link>https://on.valuecurve.ai/s/scaleable</link><image><url>https://substackcdn.com/image/fetch/$s_!3AgI!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbcb3fea-b543-4848-9539-ab6ba8c51766_500x500.png</url><title>ValueCurve: Code Play</title><link>https://on.valuecurve.ai/s/scaleable</link></image><generator>Substack</generator><lastBuildDate>Sun, 12 Apr 2026 06:21:27 GMT</lastBuildDate><atom:link href="https://on.valuecurve.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sarfaraz Mulla]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[valuecurve@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[valuecurve@substack.com]]></itunes:email><itunes:name><![CDATA[Sarfaraz Mulla]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sarfaraz Mulla]]></itunes:author><googleplay:owner><![CDATA[valuecurve@substack.com]]></googleplay:owner><googleplay:email><![CDATA[valuecurve@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sarfaraz Mulla]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Forgejo: Self-Hosted Git Infrastructure]]></title><description><![CDATA[Forgejo is a community-driven fork of Gitea, which itself descended from Gogs. It became a hard fork under Codeberg e.V., achieving full independence from its upstream.]]></description><link>https://on.valuecurve.ai/p/forgejo-self-hosted-git-infrastructure</link><guid isPermaLink="false">https://on.valuecurve.ai/p/forgejo-self-hosted-git-infrastructure</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 04 Jan 2026 03:31:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4f97c97b-c4f6-4064-a832-1eebf48b1193_3999x2666.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>GitHub and GitLab run on centralized infrastructure. Your repositories live on their servers, subject to their pricing, policies, and availability. Forgejo is a self-hosted alternative&#8212;you run the Git server on your own hardware.</p><p>This isn&#8217;t inherently better or worse. It&#8217;s a different set of tradeoffs: swap SaaS convenience for control, predictability, and (usually) lower costs as you scale.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!isKy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!isKy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png 424w, https://substackcdn.com/image/fetch/$s_!isKy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png 848w, https://substackcdn.com/image/fetch/$s_!isKy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png 1272w, https://substackcdn.com/image/fetch/$s_!isKy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!isKy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png" width="728" height="276.2985074626866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:938,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:112826,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.ai/i/182708370?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.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_!isKy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png 424w, https://substackcdn.com/image/fetch/$s_!isKy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png 848w, https://substackcdn.com/image/fetch/$s_!isKy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.png 1272w, https://substackcdn.com/image/fetch/$s_!isKy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad694385-9a84-45c8-ad12-32c2bc13cf9e_938x356.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></figure></div><div><hr></div><h4>What Forgejo Provides</h4><p><a href="https://forgejo.org">Forgejo</a> started as a soft fork of Gitea in 2022 over governance concerns. In February 2024, it became a hard fork under Codeberg e.V., achieving full independence from its upstream. The latest stable release is v13.0 (October 2025), bringing WebAuthn support and 15% memory optimizations.</p><p>Core functionality:</p><ul><li><p>Git repository hosting</p></li><li><p>Pull request and code review workflow</p></li><li><p>Issue tracking with labels and milestones</p></li><li><p>Built-in CI/CD (Forgejo Actions)</p></li><li><p>Package registry (Docker, npm, Maven, PyPI)</p></li><li><p>Git LFS support</p></li><li><p>OAuth/LDAP/SAML authentication</p></li><li><p>Federation for multi-instance collaboration</p></li><li><p>AI code suggestions (opt-in plugins)</p></li></ul><p>The interface resembles GitHub. Teams familiar with GitHub&#8217;s workflow navigate Forgejo without training.</p><h4>Cost Structure</h4><p>GitHub Teams: $5/user/month ($60/year per user) GitLab Premium: $32/user/month ($384/year per user)</p><p>For 10 users:</p><ul><li><p>GitHub: $600/year</p></li><li><p>GitLab: $3,840/year</p></li></ul><p>Forgejo on a VPS:</p><ul><li><p>Hetzner CX21: &#8364;4.85/month (~$52/year)</p></li><li><p>Digital Ocean Droplet (2GB): $12/month ($144/year)</p></li></ul><p>These VPS prices work for 10 users or 100 users. No per-seat scaling.</p><p>Hidden costs:</p><ul><li><p>Setup time: 4-6 hours</p></li><li><p>Ongoing maintenance: 2-4 hours/month</p></li><li><p>Backup storage: $1-5/month</p></li></ul><h2>Technical Requirements</h2><p>Minimum specs:</p><ul><li><p>1GB RAM (tight, but usable)</p></li><li><p>2 CPU cores</p></li><li><p>20GB storage + repository sizes</p></li><li><p>Linux server (Ubuntu, Debian)</p></li></ul><p>Recommended for production:</p><ul><li><p>2GB RAM</p></li><li><p>2-4 CPU cores</p></li><li><p>Storage: 50GB base + 1.3x repository sizes</p></li><li><p>SSD strongly recommended</p></li></ul><p>Database options:</p><ul><li><p><strong>SQLite</strong>: Simple, single file. Works until concurrent operations slow down (10-20 active users).</p></li><li><p><strong>PostgreSQL</strong>: Better concurrency. Migrate when SQLite bottlenecks.</p></li></ul><h4>Installation</h4><p>Docker Compose setup with health checks:</p><pre><code><code>services:
  forgejo:
    image: codeberg.org/forgejo/forgejo:9-rootless
    container_name: forgejo
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - FORGEJO__database__DB_TYPE=postgres
      - FORGEJO__database__HOST=db:5432
      - FORGEJO__database__NAME=forgejo
      - FORGEJO__database__USER=forgejo
      - FORGEJO__database__PASSWD=your_password_here
      - FORGEJO__server__ROOT_URL=https://git.yourdomain.com
      - FORGEJO__server__SSH_PORT=222
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 30s
      timeout: 10s
      retries: 3
    restart: unless-stopped

  db:
    image: postgres:17-alpine
    environment:
      - POSTGRES_USER=forgejo
      - POSTGRES_PASSWORD=your_password_here
      - POSTGRES_DB=forgejo
    volumes:
      - ./postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U forgejo"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped
</code></code></pre><p>Notes:</p><ul><li><p>Rootless image for simpler permissions</p></li><li><p>SSH on port 222 avoids host conflicts</p></li><li><p>Health checks ensure service readiness</p></li><li><p>PostgreSQL 17 for latest performance improvements</p></li></ul><p>Start: <code>docker-compose up -d</code></p><p>First run launches web installer at </p><p>http://your-server:3000</p><p>. Configure admin credentials, server URL, and email settings.</p><h4>Reverse Proxy and SSL</h4><p>Forgejo serves HTTP on port 3000. Production needs HTTPS.</p><p><strong>Caddy</strong> (automatic SSL):</p><pre><code><code>git.yourdomain.com {
    reverse_proxy forgejo:3000
}
</code></code></pre><p><strong>Nginx</strong>:</p><pre><code><code>server {
    listen 443 ssl http2;
    server_name git.yourdomain.com;
    
    ssl_certificate /etc/letsencrypt/live/git.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.yourdomain.com/privkey.pem;
    
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
</code></code></pre><p>Get certificates: <code>certbot --nginx -d git.yourdomain.com</code></p><h4>Basic Usage</h4><p><strong>Repositories:</strong></p><p>Organizations group repositories and manage team permissions. Create organizations for team projects, user accounts for personal repos.</p><p>Clone with custom SSH port:</p><pre><code><code>git clone ssh://git@git.yourdomain.com:222/org/repo.git
</code></code></pre><p><strong>Pull Requests:</strong></p><p>Standard GitHub workflow:</p><ol><li><p>Branch or fork</p></li><li><p>Push changes</p></li><li><p>Open pull request</p></li><li><p>Inline code review</p></li><li><p>Merge when approved</p></li></ol><p><strong>Issues:</strong></p><p>Support Markdown, labels, milestones, assignees, attachments. Reference commits: <code>fixes #123</code> creates automatic links.</p><p><strong>Webhooks:</strong></p><p>POST JSON to external endpoints on push, PR, issue, or release events. Configure in repository settings for CI/CD triggers.</p><p><strong>Federation:</strong></p><p>Connect multiple Forgejo instances for cross-instance collaboration. Users on one instance can interact with repositories on another. Enable in admin settings.</p><h4>CI/CD: Forgejo Actions</h4><p>GitHub Actions-compatible. Run your own runners.</p><p><strong>Runner Setup:</strong></p><pre><code><code>services:
  runner:
    image: code.forgejo.org/forgejo/runner:3.3.0
    environment:
      - FORGEJO_INSTANCE_URL=https://git.yourdomain.com
      - FORGEJO_RUNNER_REGISTRATION_TOKEN=your_token
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped
</code></code></pre><p>Token from: Site Administration &#8594; Actions &#8594; Runners</p><p><strong>Workflow Example:</strong></p><p><code>.forgejo/workflows/test.yml</code>:</p><pre><code><code>name: Test
on: [push, pull_request]

jobs:
  test:
    runs-on: docker
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - run: pip install -r requirements.txt
      - run: pytest
</code></code></pre><p>Most GitHub Actions work without modification.</p><h4>AI Code Suggestions</h4><p>V13 introduces opt-in AI plugins for code completion and suggestions. Configure via admin panel. Integrates with OpenAI API or self-hosted models. Privacy-focused: code never leaves your infrastructure if using local models.</p><p>Enable in: Site Administration &#8594; AI Settings</p><h4>Backup Strategy</h4><p>Critical data:</p><ol><li><p>Repositories (<code>./data</code> volume)</p></li><li><p>PostgreSQL database</p></li><li><p>Configuration (<code>app.ini</code>)</p></li></ol><p><strong>Daily Backup:</strong></p><pre><code><code>#!/bin/bash
BACKUP_DIR="/backups/forgejo"
DATE=$(date +%Y%m%d_%H%M%S)

# Database backup (no downtime)
docker-compose exec -T db pg_dump -U forgejo forgejo | gzip &gt; $BACKUP_DIR/db_$DATE.sql.gz

# Repository backup
tar -czf $BACKUP_DIR/data_$DATE.tar.gz ./data

# Retention: 7 days
find $BACKUP_DIR -mtime +7 -delete
</code></code></pre><p><strong>Off-site:</strong></p><pre><code><code>rclone sync /backups/forgejo s3:bucket-name/forgejo
</code></code></pre><p>Test restores regularly.</p><h2>Updates</h2><p>Updates every 4-8 weeks.</p><pre><code><code>docker-compose pull
docker-compose up -d
docker-compose logs -f forgejo
</code></code></pre><p>Downtime: 30-60 seconds.</p><p><strong>Security:</strong></p><ul><li><p>Enable 2FA for admins</p></li><li><p>SSH key-based auth only</p></li><li><p>Strong database passwords</p></li><li><p>Keep host OS updated</p></li></ul><h2>When to Self-Host</h2><p><strong>Good fit:</strong></p><ul><li><p>You manage servers already</p></li><li><p>Stable team size</p></li><li><p>Data sovereignty requirements</p></li><li><p>Infrastructure control preference</p></li></ul><p><strong>Poor fit:</strong></p><ul><li><p>No operational expertise</p></li><li><p>Rapid unpredictable growth</p></li><li><p>Critical uptime without HA capability</p></li><li><p>Small teams focused on product</p></li></ul><h4>Getting Started</h4><p>Evaluation:</p><ol><li><p>Deploy local instance</p></li><li><p>Create test repository</p></li><li><p>Try workflows (clone, commit, PR)</p></li><li><p>Test Actions</p></li><li><p>Practice backup/restore</p></li></ol><p>Resources:</p><ul><li><p>Docs: forgejo.org/docs</p></li><li><p>Forum: codeberg.org/forgejo/discussions</p></li><li><p>Matrix: #forgejo:matrix.org</p></li><li><p>Video: <strong>Forgejo Tutoria</strong>l by <a href="https://youtu.be/FPVpKCvFQr8?si=jKiajd5mCnHj8YTb">Awesome Open Source</a></p></li></ul><h4>Bottom Line</h4><p>Forgejo trades SaaS convenience for infrastructure control. You eliminate per-seat costs and external dependencies at the cost of operational responsibility.</p><p>The software is stable. Choose based on whether managing it aligns with your team&#8217;s capabilities, not ideology.</p><div><hr></div>]]></content:encoded></item><item><title><![CDATA[vLLM enables 100-request concurrency on a single RTX A5000 for 7B LLMs (benchmark)
]]></title><description><![CDATA[Benchmarking against HuggingFace Transformers, a meaningful baseline that practitioners universally understand]]></description><link>https://on.valuecurve.ai/p/vllm-enables-100-request-concurrency</link><guid isPermaLink="false">https://on.valuecurve.ai/p/vllm-enables-100-request-concurrency</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 14 Dec 2025 03:31:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/72e6a66c-9326-4a32-8caa-a7de12f11dd0_1344x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>This benchmarking test evaluated the performance of vLLM against HuggingFace Transformers for serving the Discovery-Qwen2.5-7B model&#8212;a fine-tuned multilingual model designed for local business discovery. The tests were conducted on an NVIDIA RTX A5000 GPU with 24GB VRAM, measuring throughput, latency, memory efficiency, and scalability under various conditions. The results demonstrate that vLLM delivers transformative performance improvements that make the difference between a research prototype and a production-ready deployment.</em></p><div><hr></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;baa1357b-7ed9-45ae-acda-b5345f380c09&quot;,&quot;duration&quot;:null}"></div><div><hr></div><h3>Why Compare vLLM with HuggingFace Transformers?</h3><p>HuggingFace Transformers is the de facto standard library for working with large language models. It provides an accessible, well-documented interface that most ML practitioners use for training, fine-tuning, and inference. The library has facilitated access to state-of-the-art models and serves as the foundation for countless AI applications. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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 ValueCurve! Subscribe for free to receive new posts and apply support.</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>However, HuggingFace was designed primarily as a research and development tool, not as a production inference engine optimized for serving real users at scale. When deploying LLMs in production&#8212;especially for applications serving multiple concurrent users&#8212;HuggingFace&#8217;s straightforward approach becomes a significant bottleneck. </p><ul><li><p>Each request is processed sequentially </p></li><li><p>GPU memory is allocated statically regardless of actual usage</p></li><li><p>There&#8217;s no optimization for common patterns like shared system prompts. </p></li></ul><p>These limitations compound quickly: a system that feels responsive during development becomes frustratingly slow under real-world load. This is precisely where vLLM enters the picture.  vLLM is purpose-built for high-throughput LLM serving in production environments. It introduces several architectural innovations that fundamentally change how inference is performed: </p><ul><li><p><strong>PagedAttention</strong> for efficient memory management,</p></li><li><p><strong>Continuous batching </strong>for handling concurrent requests dynamically, and </p></li><li><p><strong>Prefix caching</strong> for scenarios with repeated prompt patterns. </p></li></ul><p>The benchmark validates whether these claimed improvements translate to real-world performance gains using a fine-tuned Qwen 2.5 7B model. The following 5 tests were conducted : </p><h3>[1] Throughput Comparison (Sequential vs Batched vs vLLM)</h3><p>This is the fundamental comparison that answers the core question: how much faster is vLLM? We measured how many tokens per second each approach can generate when processing 20 identical prompts. Throughput directly translates to cost and user experience. Higher throughput means serving more users with the same hardware, reducing infrastructure costs, and delivering faster responses. In a production environment, throughput determines how many concurrent users your system can handle before response times become unacceptable. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OkPN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OkPN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 424w, https://substackcdn.com/image/fetch/$s_!OkPN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 848w, https://substackcdn.com/image/fetch/$s_!OkPN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 1272w, https://substackcdn.com/image/fetch/$s_!OkPN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OkPN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png" width="1900" height="397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:1900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64268,&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://www.valuecurve.ai/i/181052284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70c4e3dc-391e-41fb-93bf-1479d2fb9ab2_1900x438.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_!OkPN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 424w, https://substackcdn.com/image/fetch/$s_!OkPN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 848w, https://substackcdn.com/image/fetch/$s_!OkPN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 1272w, https://substackcdn.com/image/fetch/$s_!OkPN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea583b2-2703-4406-a9e6-1d9fed21d500_1900x397.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The results are striking and validate vLLM&#8217;s core value proposition. HuggingFace sequential processing&#8212;the default approach most developers use when following tutorials and documentation&#8212;achieved only 40.9 tokens per second. vLLM delivered 868.5 tokens per second, a 21.2x improvement. Even compared to HuggingFace&#8217;s batched inference (which requires additional code complexity and careful tuning), vLLM was 1.46x faster while being simpler to deploy and configure.</p><h3>[2]  Maximum Concurrent Sequences (KV Cache Efficiency)</h3><p>This test pushed the system to handle increasing numbers of simultaneous requests (1, 10, 25, 50, 100, 150, 200) to identify the breaking point and understand scaling behaviour. Real-world applications don&#8217;t serve one user at a time. A local business assistant might hundreds of users querying simultaneously during peak hours. The ability to handle concurrent requests without crashing, running out of memory, or degrading severely determines whether the system is genuinely production-ready or merely a demo. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!az7F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!az7F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 424w, https://substackcdn.com/image/fetch/$s_!az7F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 848w, https://substackcdn.com/image/fetch/$s_!az7F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 1272w, https://substackcdn.com/image/fetch/$s_!az7F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!az7F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png" width="1900" height="464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:1900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63126,&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://www.valuecurve.ai/i/181052284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd72b8650-cabc-4458-a8dd-73b7047b11ec_1900x527.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_!az7F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 424w, https://substackcdn.com/image/fetch/$s_!az7F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 848w, https://substackcdn.com/image/fetch/$s_!az7F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 1272w, https://substackcdn.com/image/fetch/$s_!az7F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f3e8bf-74c1-4a62-9d94-4fba574b2bf4_1900x464.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>vLLM successfully handled all <strong>200 concurrent sequences</strong> without failure. More importantly, throughput increased with concurrency&#8212;a counterintuitive result that demonstrates vLLM&#8217;s efficient batching strategy. The system achieved peak throughput of 3,184 tokens per second at maximum concurrency, nearly 70x faster than single-request HuggingFace performance. This remarkable scaling is possible because of <strong>PagedAttention</strong>, vLLM&#8217;s innovative memory management system. Traditional transformers allocate fixed memory blocks for each sequence&#8217;s key-value cache, leading to fragmentation and waste when sequences vary in length. PagedAttention allocates memory in small pages on-demand, similar to how operating systems manage virtual memory. This eliminates waste and allows significantly more sequences to run concurrently within the same GPU memory budget.</p><h3>[3] Prefix Caching Impact</h3><p>This test compared performance with and without prefix caching enabled, using <strong>100 queries</strong> that shared a common system prompt&#8212;a scenario typical for chatbot and assistant applications. Production LLM applications typically use system prompts&#8212;detailed instructions that define the assistant&#8217;s behavior, personality, and constraints. For the fine-tuned model, every single query includes context about being a &#8220;helpful AI assistant for local business discovery &#8221; that understands Hindi, English, Marathi, and Hinglish. Processing this identical prefix repeatedly for every user query wastes substantial computation. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ctNF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ctNF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 424w, https://substackcdn.com/image/fetch/$s_!ctNF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 848w, https://substackcdn.com/image/fetch/$s_!ctNF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 1272w, https://substackcdn.com/image/fetch/$s_!ctNF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ctNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png" width="1900" height="322" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:322,&quot;width&quot;:1900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51996,&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://www.valuecurve.ai/i/181052284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73d6fb60-8478-48e4-9732-67fcd1b91f73_1900x353.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_!ctNF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 424w, https://substackcdn.com/image/fetch/$s_!ctNF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 848w, https://substackcdn.com/image/fetch/$s_!ctNF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 1272w, https://substackcdn.com/image/fetch/$s_!ctNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7895472c-4dd4-46be-be76-959204c6bd2f_1900x322.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Enabling prefix caching delivered a <strong>32% speedup</strong> with zero code changes required. For the Discovery model&#8217;s specific use case&#8212;where every query shares the same system prompt defining its locality-focused, multilingual behavior&#8212;this optimization directly reduces latency and operational cost. Over thousands of daily queries, this improvement compounds into significant infrastructure savings and noticeably snappier user experiences.</p><h3>[4] Concurrency Scaling</h3><p>This test systematically measured how throughput and latency change as concurrent requests increase from <strong>1 to 100</strong>. Understanding the scaling curve helps with capacity planning and setting realistic expectations. Does performance degrade gracefully under load, or does it collapse catastrophically? At what point do you need additional hardware? </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9j6D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9j6D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png 424w, https://substackcdn.com/image/fetch/$s_!9j6D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png 848w, https://substackcdn.com/image/fetch/$s_!9j6D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png 1272w, https://substackcdn.com/image/fetch/$s_!9j6D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9j6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png" width="1900" height="555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:555,&quot;width&quot;:1900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78366,&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://www.valuecurve.ai/i/181052284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee64a14a-39f0-4319-a73b-44c579c6d68f_1900x614.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_!9j6D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png 424w, https://substackcdn.com/image/fetch/$s_!9j6D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png 848w, https://substackcdn.com/image/fetch/$s_!9j6D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.png 1272w, https://substackcdn.com/image/fetch/$s_!9j6D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8afad452-5afb-42bf-a84e-418f93b9b62e_1900x555.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 results demonstrate <strong>excellent scaling characteristics</strong><em> </em>that defy naive expectations. <strong>Throughput increased nearly linearly with concurrency </strong>up to about 50 users, then continued improving at a diminishing but still positive rate. Remarkably, per-request latency dropped from 2.8 seconds (single request) to an <strong>effective 42ms per request</strong> when processing 100 concurrent requests in 4.2 seconds total. </p><p>This counterintuitive behavior demonstrates <strong>continuous batching working exactly as designed</strong>: the GPU stays fully utilized processing multiple requests simultaneously, and individual requests benefit from efficient batched matrix operations.</p><h3>[5] Chunked Prefill</h3><p>This test evaluated chunked prefill performance with long-context prompts containing approximately <strong>1,128 tokens</strong> each. Long prompts can cause latency spikes as the system must process the entire input before generating any output tokens. Chunked prefill addresses this by breaking prefill computation into smaller pieces, reducing time-to-first-token and improving perceived responsiveness. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BZPG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BZPG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 424w, https://substackcdn.com/image/fetch/$s_!BZPG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 848w, https://substackcdn.com/image/fetch/$s_!BZPG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 1272w, https://substackcdn.com/image/fetch/$s_!BZPG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BZPG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png" width="1900" height="316" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:316,&quot;width&quot;:1900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42637,&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://www.valuecurve.ai/i/181052284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe173327f-fb6f-4868-aafa-fb3b4289b9c7_1900x353.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_!BZPG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 424w, https://substackcdn.com/image/fetch/$s_!BZPG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 848w, https://substackcdn.com/image/fetch/$s_!BZPG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 1272w, https://substackcdn.com/image/fetch/$s_!BZPG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cb3b4db-08ef-4ab6-9486-6d17749b4dc3_1900x316.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>For this moderate context length, chunked prefill showed <strong>minimal difference (~1%). </strong>This optimization becomes substantially more important with very long contexts exceeding <strong>4,000 tokens</strong>. For typical Discovery model queries, which involve relatively short user questions, this feature is less critical but remains available when processing longer documents or conversation histories.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DVTi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DVTi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png 424w, https://substackcdn.com/image/fetch/$s_!DVTi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png 848w, https://substackcdn.com/image/fetch/$s_!DVTi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png 1272w, https://substackcdn.com/image/fetch/$s_!DVTi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DVTi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png" width="1503" height="511" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:511,&quot;width&quot;:1503,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88018,&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://www.valuecurve.ai/i/181052284?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c3e4cb5-ac78-46b1-a2e6-79b27874a8c3_1589x592.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_!DVTi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png 424w, https://substackcdn.com/image/fetch/$s_!DVTi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png 848w, https://substackcdn.com/image/fetch/$s_!DVTi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.png 1272w, https://substackcdn.com/image/fetch/$s_!DVTi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13a7739c-6985-445d-8257-8cc1be05fa8b_1503x511.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><h3><strong>Conclusion</strong></h3><p>The benchmark comprehensively validates vLLM&#8217;s performance claim against HuggingFace Transformers. </p><p><em>For the fine-tuned Qwen2.5-7B  model specifically, these results demonstrate that a single A5000 GPU can serve a substantial user base effectively. The prefix caching optimization aligns perfectly with the model&#8217;s architectural use case, where every query shares the same system prompt defining its local business assistant persona. </em></p><p><em>The choice to benchmark against HuggingFace Transformers provides a meaningful baseline that practitioners universally understand. vLLM isn&#8217;t incrementally better&#8212;it&#8217;s an order of magnitude faster, representing the difference between a functional prototype and a genuinely production-ready system capable of serving real users reliably.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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 ValueCurve! Subscribe for free to receive new posts and apply support.</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[Exploratory Data Analysis: Unveiling Hidden Insights Through Data Visualization]]></title><description><![CDATA[EDA transforms numbers into narratives, revealing patterns and relationships that would otherwise remain hidden in spreadsheets.]]></description><link>https://on.valuecurve.ai/p/exploratory-data-analysis-unveiling</link><guid isPermaLink="false">https://on.valuecurve.ai/p/exploratory-data-analysis-unveiling</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Wed, 19 Nov 2025 03:31:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8fc70078-ff76-4f0f-bf29-3fbb23a41f71_3000x2001.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>In the age of big data, the ability to extract meaningful insights from raw information has become invaluable. Exploratory Data Analysis (EDA) serves as the critical first step in any data science project, allowing analysts to understand, clean, and visualize data before diving into complex modeling. When combined with effective data visualization techniques, EDA transforms numbers into narratives, revealing patterns and relationships that would otherwise remain hidden in spreadsheets.</em></p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;88fe3e0d-794d-4fb0-aa4a-8b063c009e54&quot;,&quot;duration&quot;:null}"></div><div><hr></div><h3>What is Exploratory Data Analysis?</h3><p>Exploratory Data Analysis is an approach for examining datasets and to summarize their main characteristics, often using visual methods. Pioneered by statistician John Tukey in the 1970s, EDA emphasizes the importance of looking at data before making assumptions or building models. Unlike confirmatory analysis, which tests specific hypotheses, EDA is an open-ended process of discovery.</p><p>The primary objectives of EDA include:</p><ul><li><p>Understanding the structure and distribution of data</p></li><li><p>Detecting outliers and anomalies</p></li><li><p>Identifying patterns, trends, and relationships between variables</p></li><li><p>Testing underlying assumptions</p></li><li><p>Selecting appropriate models for further analysis</p></li></ul><p>EDA is not a rigid set of procedures but rather a state of mind that encourages curiosity and thorough investigation. It asks questions like: What does the data tell us? What doesn&#8217;t it tell us? What patterns emerge? What surprises exist?</p><h3>The Power of Data Visualization in EDA</h3><p>Data visualization transforms abstract numbers into concrete visual representations, making complex data accessible and understandable. Our brains process visual information  a lot faster than the text, making visualization an indispensable tool for EDA. Well-designed visualizations can reveal trends, outliers, and relationships that might take hours to discover through statistical analysis alone.</p><p><strong>Key visualization techniques in EDA include:</strong></p><p> <strong>Histograms and Distribution Plots</strong>: Reveal the shape and spread of data</p><p><strong> Scatter Plots: </strong>Uncover relationships between variables</p><p><strong> Box Plots:</strong> Identify outliers and compare distributions across groups</p><p> <strong>Correlation Heatmaps: </strong>Display relationships between multiple variables</p><p><strong> Time Series Plots</strong>: Track changes over time</p><p> <strong>Animated Visualizations:</strong> Show evolution of patterns across dimensions</p><div><hr></div><h3>Understanding the Gapminder Dataset</h3><p>The <a href="https://www.gapminder.org">Gapminder</a> dataset, curated by the <strong>Gapminder Foundation,</strong> provides a fascinating lens through which to explore global development trends. It contains data for 142 countries from 1952 to 2007, tracking three critical metrics:</p><p><strong>Life Expectancy</strong></p><p>This metric measures the average number of years a person is expected to live at birth. In our dataset, life expectancy ranges from a sobering 23.6 years (Rwanda, 1992, during the genocide) to an impressive 82.6 years (Japan, 2007). This dramatic range immediately tells a story about global health disparities and the impact of conflict on human welfare.</p><p><strong>Population</strong></p><p>Population figures range from 60,011 (Sao Tome and Principe) to over 1.3 billion (China, 2007). This metric helps us understand demographic pressures, economic potential, and resource allocation challenges facing different nations.</p><p><strong>GDP per Capita</strong></p><p>Measured in international dollars, GDP per capita ranges from $241.17 to $113,523.13 (Kuwait during an oil boom). This economic indicator reveals the vast wealth inequality between nations and provides context for understanding quality of life differences.</p><h3>Key Statistical Metrics in EDA</h3><p><strong>Measures of Central Tendency</strong></p><ul><li><p><strong>Mean : </strong>The average provides a quick snapshot but can be skewed by outliers</p></li><li><p><strong>Median : </strong>The middle value is more robust to extreme values</p></li><li><p><strong>Mode :</strong> The most frequent value, particularly useful for categorical data</p></li></ul><p>For the Gapminder dataset, comparing mean and median GDP per capita reveals positive skewness&#8212;a few wealthy nations pull the average higher than the median, indicating wealth concentration.</p><p><strong>Measures of Dispersion</strong></p><ul><li><p><strong>Standard Deviation : </strong>Quantifies variation around the mean</p></li><li><p><strong>Range : </strong>The difference between maximum and minimum values</p></li><li><p><strong>Interquartile Range (IQR) :</strong> The spread of the middle 50% of data, robust to outliers</p></li><li><p><strong>Coefficient of Variation (CV) : </strong> Enables comparison of variability across different scales</p></li></ul><p>The CV is particularly valuable when comparing metrics with different units. For instance, while population has enormous absolute variation, its CV reveals whether this variation is proportionally larger than life expectancy&#8217;s variation.</p><p><strong>Percentiles and Quartiles</strong></p><p>Percentiles divide data into 100 equal parts, providing detailed distribution information. The 25th, 50th (median), and 75th percentiles are especially important, forming the basis of box plots and revealing data symmetry or skewness.</p><p><strong>Correlation Analysis</strong></p><p>Correlation coefficients (ranging from -1 to +1) measure the strength and direction of linear relationships between variables. In the Gapminder data, life expectancy and GDP per capita show strong positive correlation (typically &gt; 0.7), suggesting that wealthier nations tend to have longer-lived populations. However, it&#8217;s crucial to remember that correlation does not imply causation.</p><div><hr></div><h3>Advantages of Systematic EDA</h3><p><strong>Early Problem Detection</strong></p><p>EDA reveals data quality issues before they corrupt analysis results. Missing values, incorrect data types, duplicate records, and inconsistent formatting become apparent through summary statistics and visualizations.</p><p><strong>Insight Generation</strong></p><p>Unexpected patterns often emerge during EDA. For example, examining the Gapminder data might reveal that some countries experienced dramatic life expectancy drops during specific years, prompting investigation into historical events like wars or epidemics.</p><p><strong>Communication Enhancement</strong></p><p>Visualizations transcend language barriers and technical expertise levels. A well-designed animated scatter plot showing the evolution of life expectancy versus GDP over time can convey decades of development history in seconds, making data accessible to stakeholders at all levels.</p><p><strong>Model Selection Guidance</strong></p><p>Understanding data distributions, relationships, and outliers helps select appropriate analytical methods. For instance, discovering non-linear relationships between variables suggests the need for polynomial regression rather than simple linear models.</p><h3>Common Pitfalls in Data Analysis</h3><p><strong>Confirmation Bias</strong></p><p>Analysts sometimes unconsciously seek patterns that confirm pre-existing beliefs while ignoring contradictory evidence. EDA should be approached with an open mind, allowing data to speak rather than forcing it into predetermined narratives.</p><p><strong>Over-reliance on Means</strong></p><p>The mean can be misleading when data is skewed or contains outliers. Always examine medians and full distributions. For GDP data, the mean might suggest average prosperity while hiding extreme inequality.</p><p><strong>Ignoring Context</strong></p><p>Statistical patterns without domain knowledge can lead to absurd conclusions. A correlation between ice cream sales and drowning deaths doesn&#8217;t mean ice cream causes drowning&#8212;both increase during summer.</p><p><strong>Misleading Visualizations</strong></p><p>Poor chart choices, manipulated axes, cherry-picked data ranges, and inappropriate color schemes can distort reality. Always ensure visualizations accurately represent data without exaggeration or omission.</p><p><strong>Correlation-Causation Confusion</strong></p><p>Perhaps the most dangerous pitfall is inferring causation from correlation. While Gapminder shows strong correlation between GDP and life expectancy, this doesn&#8217;t prove that increasing GDP directly causes longer lives. Confounding variables like education, healthcare access, and sanitation play crucial roles.</p><p><strong>Neglecting Outliers</strong></p><p>While outliers can distort analyses, they often contain valuable information. Rwanda&#8217;s drastically low life expectancy in 1992 isn&#8217;t noise to be removed&#8212;it&#8217;s a crucial data point reflecting historical tragedy that demands acknowledgment and investigation.</p><p><strong>Analysis Paralysis</strong></p><p>EDA is meant to be iterative and exploratory, but endless exploration without moving toward conclusions wastes resources. Setting clear objectives and timelines prevents perpetual analysis without action.</p><h3>Conclusion</h3><p><em>Exploratory Data Analysis, powered by thoughtful visualization, transforms raw data into actionable insights. The Gapminder dataset exemplifies how systematic exploration of metrics like life expectancy, population, and GDP per capita can reveal global development patterns, inequalities, and trends. By understanding key statistical measures&#8212;from means and medians to correlations and percentiles&#8212;and avoiding common analytical pitfalls, data analysts can extract genuine value from information.</em></p><p><em>In our data-driven world, EDA skills are not merely technical competencies but essential literacies for making informed decisions. Whether examining global health trends, business performance, or scientific phenomena, the principles remain constant: approach data with curiosity, visualize thoughtfully, measure carefully, and always question assumptions. Through disciplined EDA, we transform data from mere numbers into knowledge that drives understanding and progress.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Fast Prototyping with Streamlit & Gen AI Tools]]></title><description><![CDATA[Streamlit, an open-source Python library, makes this possible]]></description><link>https://on.valuecurve.ai/p/fast-prototyping-with-streamlit-and</link><guid isPermaLink="false">https://on.valuecurve.ai/p/fast-prototyping-with-streamlit-and</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 19 Oct 2025 03:31:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NVI5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Prototyping is the bridge between an idea and a working product. In the world of generative AI, where tools and expectations evolve quickly, the ability to move from concept to demo in hours&#8212;not weeks&#8212;is a real advantage. Streamlit, an open-source Python library, makes this possible. It allows you to turn a few lines of code into interactive, shareable web apps without needing front-end expertise.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>This post draws from the <strong><a href="https://www.google.com/search?client=safari&amp;sca_esv=29fb23f7ce376d27&amp;rls=en&amp;sxsrf=AE3TifM3VSasBnpMoxh6kB3RR3_DCkm4Yg:1759489165873&amp;q=Fast+Prototyping+with+Streamlit&amp;source=lnms&amp;fbs=AIIjpHwdlVWI4oi2g38E8_BbusNm3pTf6ItdW8-u0JVVBgXow2SS4XfWu_GDEb99WFnlrQTRreI6irPtfZJtDa4EEIgg37xdYGx3qn9unJJAquZz8WtKP8Kf0TFOreY3xEqie4ng9v3Jjl55fYppyAVSeNqtNMX-hP0YsEVR8UT5CEKA3fw2492143UKUQH5rm3X3UVJ1uDgTGmNMINiAyslUFltr3ZPMazhRYK-JCElXLa4gCd7tZ4&amp;sa=X&amp;ved=2ahUKEwiD_N7174eQAxX7yDgGHfJoEKkQ0pQJegQICRAB&amp;biw=1421&amp;bih=758&amp;dpr=2">Fast Prototyping of GenAI Apps with Streamlit</a></strong> course by <strong><a href="https://www.deeplearning.ai">DeepLearning.AI</a></strong> and <a href="https://www.snowflake.com/en/">Snowflake</a> . This course is taught by <strong><a href="https://www.linkedin.com/in/chanin-nantasenamat/">Chanin Nantasenamat</a></strong> , Sr Developer Advocate also known as the Data Professor. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NVI5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NVI5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png 424w, https://substackcdn.com/image/fetch/$s_!NVI5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png 848w, https://substackcdn.com/image/fetch/$s_!NVI5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png 1272w, https://substackcdn.com/image/fetch/$s_!NVI5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NVI5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png" width="1080" height="638" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:638,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Fast Prototyping of GenAI Apps with Streamlit - DeepLearning.AI&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="Fast Prototyping of GenAI Apps with Streamlit - DeepLearning.AI" title="Fast Prototyping of GenAI Apps with Streamlit - DeepLearning.AI" srcset="https://substackcdn.com/image/fetch/$s_!NVI5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png 424w, https://substackcdn.com/image/fetch/$s_!NVI5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png 848w, https://substackcdn.com/image/fetch/$s_!NVI5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.png 1272w, https://substackcdn.com/image/fetch/$s_!NVI5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63379fce-54d3-4dd8-b4a6-5a6e5f4570ec_1080x638.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></figure></div><h4>Why Fast Prototyping Matters</h4><p>Ideas often lose momentum when they stay in documents or slide decks. In AI, where experimentation is key, the faster you can test and share, the better. Rapid prototyping helps you:</p><ul><li><p><strong>Validate assumptions</strong>: Instead of debating whether an idea works, you can show it.</p></li><li><p><strong>Gather feedback early</strong>: A working demo sparks more useful conversations than abstract descriptions.</p></li><li><p><strong>Iterate quickly</strong>: You can refine based on real interactions, not speculation.</p></li><li><p><strong>Influence decisions</strong>: Stakeholders respond to tangible prototypes more than theoretical plans.</p></li></ul><p>Generative AI adds another layer: with large language models (LLMs), you can build functional prototypes with minimal code. Streamlit provides the interface to make those prototypes usable and shareable.</p><div><hr></div><h4>What is Streamlit?</h4><p>Streamlit is a Python library that transforms scripts into interactive web apps. Its appeal lies in simplicity:</p><ul><li><p><strong>Minimal code</strong>: A few lines can create buttons, sliders, text inputs, or file uploaders.</p></li><li><p><strong>No front-end skills required</strong>: You don&#8217;t need to know HTML, CSS, or JavaScript.</p></li><li><p><strong>Instant sharing</strong>: Apps can be deployed on Streamlit Community Cloud or integrated into platforms like Snowflake.</p></li></ul><p>For data scientists, researchers, and AI developers, this means you can focus on logic and models while still delivering polished, interactive demos.</p><div><hr></div><h4>The Prototyping Workflow</h4><p>The course outlines a practical workflow for building GenAI apps with Streamlit. Here&#8217;s a simplified version:</p><ol><li><p><strong>Start Small</strong><br>Begin with a minimal app&#8212;often a chatbot powered by an LLM. The goal is to get something working quickly, not to perfect it.</p></li><li><p><strong>Layer in Prompt Engineering</strong><br>Improve the quality of responses by refining prompts. Streamlit makes it easy to expose prompt variations through text boxes or dropdowns, so you can experiment interactively.</p></li><li><p><strong>Add Retrieval-Augmented Generation (RAG)</strong><br>Connect your app to external data sources. For example, you might let the chatbot answer questions based on a company&#8217;s knowledge base or a dataset stored in Snowflake.</p></li><li><p><strong>Deploy for Feedback</strong><br>Push the prototype to Streamlit Community Cloud or Snowflake. Share the link with colleagues or users and gather feedback.</p></li><li><p><strong>Iterate</strong><br>Use the feedback to refine prompts, improve data connections, or adjust the interface. Because Streamlit apps are lightweight, iteration cycles are fast.</p></li></ol><div><hr></div><h4>Example: A Simple Chatbot</h4><p>Here&#8217;s a minimal Streamlit app that connects to an LLM (using OpenAI as an example):</p><pre><code><code>import streamlit as st
import openai

# Set your OpenAI API key
openai.api_key = st.secrets[&#8221;OPENAI_API_KEY&#8221;]

st.title(&#8221;Quick Chatbot Prototype&#8221;)

# Initialize chat history
if &#8220;messages&#8221; not in st.session_state:
    st.session_state.messages = []

user_input = st.text_input(&#8221;Ask me anything:&#8221;)

if user_input:
    # Append user message to chat history
    st.session_state.messages.append({&#8221;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: user_input})

    # Call OpenAI ChatCompletion with the full conversation history to maintain context
    response = openai.ChatCompletion.create(
        model=&#8221;gpt-3.5-turbo&#8221;,
        messages=st.session_state.messages
    )
    
    answer = response[&#8221;choices&#8221;][0][&#8221;message&#8221;][&#8221;content&#8221;]
    
    # Append assistant&#8217;s response to chat history
    st.session_state.messages.append({&#8221;role&#8221;: &#8220;assistant&#8221;, &#8220;content&#8221;: answer})
    
    # Display the assistant&#8217;s response
    st.write(answer)</code></code></pre><p>This script:</p><ul><li><p>Creates a text input box.</p></li><li><p>Sends the input to an LLM.</p></li><li><p>Displays the response.</p></li></ul><p>It&#8217;s only a few lines of code, but it produces a working chatbot you can share.</p><div><hr></div><h4>Adding Prompt Engineering</h4><p>Prompt engineering is about shaping the model&#8217;s behavior. With Streamlit, you can expose prompt templates as editable fields:</p><pre><code><code>import streamlit as st
import openai

# Set OpenAI API key securely
openai.api_key = st.secrets[&#8221;OPENAI_API_KEY&#8221;]

prompt_template = st.text_area(
    &#8220;Prompt template:&#8221;,
    &#8220;You are a helpful assistant. Answer clearly and concisely.\n\nUser: {question}\nAssistant:&#8221;
)

user_input = st.text_input(&#8221;Ask me anything:&#8221;)

if user_input:
    prompt = prompt_template.format(question=user_input)
    response = openai.Completion.create(
        model=&#8221;text-davinci-003&#8221;,
        prompt=prompt,
        max_tokens=200
    )
    st.write(response[&#8221;choices&#8221;][0][&#8221;text&#8221;])</code></code></pre><p>Now you can experiment with different instructions without changing the code.</p><div><hr></div><h4>Adding RAG (Retrieval-Augmented Generation)</h4><p>RAG combines LLMs with external data. For example, you might let the chatbot answer based on a set of documents. A simplified version looks like this:</p><pre><code><code>import streamlit as st
import openai

openai.api_key = st.secrets[&#8221;OPENAI_API_KEY&#8221;]

prompt_template = st.text_area(
    &#8220;Prompt template:&#8221;,
    &#8220;You are a helpful assistant. Answer clearly and concisely.\n\nUser: {question}\nAssistant:&#8221;
)

user_input = st.text_input(&#8221;Ask me anything:&#8221;)

if user_input:
    prompt = prompt_template.format(question=user_input)
    response = openai.Completion.create(
        model=&#8221;text-davinci-003&#8221;,
        prompt=prompt,
        max_tokens=200
    )
    st.write(response[&#8221;choices&#8221;][0][&#8221;text&#8221;])</code></code></pre><p>This setup allows the chatbot to ground its answers in your own dataset, making it more useful for specific domains.</p><div><hr></div><h4>Deployment</h4><p>When building a prototype, keep things simple and focus on the main interaction&#8212;don&#8217;t add unnecessary features. Make it easy for users to adjust prompts, settings, or data inputs. Share your work early and improve it quickly through feedback. If your prototype handles sensitive data, make sure it runs in a secure environment.</p><p>Once your prototype works locally, you can deploy it:</p><ul><li><p><strong>Streamlit Community Cloud</strong>: Free and simple for sharing demos.</p></li><li><p><strong>Snowflake + Streamlit</strong>: For secure, production-ready environments with enterprise data.</p></li></ul><p>Deployment is as simple as pushing your code to GitHub and linking it to Streamlit Cloud.</p><div><hr></div><h4>Wrapping Up</h4><p><em>Streamlit <strong>doesn&#8217;t</strong> replace production systems, but it gives you a powerful way to explore, test, and communicate ideas. In the fast-moving world of generative AI, that speed of exploration is often the difference between leading and lagging.</em></p><p><em>Rapid prototyping with Streamlit is less about building polished products and more about accelerating learning. By lowering the barrier to creating interactive GenAI apps, it allows individuals and teams to validate ideas quickly, gather feedback, and refine direction.</em></p><p><em>In practice, this means fewer stalled discussions and more tangible progress. Whether you&#8217;re experimenting with a chatbot, a summarizer, or a data assistant, the workflow is the same: start small, iterate fast, and share early.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Understanding Machine Learning Pipeline]]></title><description><![CDATA[A machine learning pipeline transforms raw inputs into reliable, production-ready models through distinct and clear stages]]></description><link>https://on.valuecurve.ai/p/understanding-the-machine-learning</link><guid isPermaLink="false">https://on.valuecurve.ai/p/understanding-the-machine-learning</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 12 Oct 2025 03:31:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VEC8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>A machine learning pipeline transforms raw inputs into reliable, production-ready models through distinct and clear stages. Each phase adds structure and checks, from gathering data to keeping a live model healthy. This guide walks you through Data Collection, Feature Engineering, Model Training, Evaluation, Deployment, Monitoring, and Maintenance in straightforward terms. </em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>The purpose of this post is to provide readers with a <em><strong>mental map</strong></em> for any ML project. Let&#8217;s dive in.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VEC8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VEC8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png 424w, https://substackcdn.com/image/fetch/$s_!VEC8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png 848w, https://substackcdn.com/image/fetch/$s_!VEC8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!VEC8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VEC8!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png" width="974" height="487" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:974,&quot;bytes&quot;:197445,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.co/i/175117038?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VEC8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png 424w, https://substackcdn.com/image/fetch/$s_!VEC8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png 848w, https://substackcdn.com/image/fetch/$s_!VEC8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.png 1272w, https://substackcdn.com/image/fetch/$s_!VEC8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5273654-4381-40a9-83c2-1dc2eb56bf5a_2641x1320.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></figure></div><h4><strong>1. Data Collection</strong></h4><p>The process begins with gathering relevant data from various sources. These might include databases, logs, CSV files, APIs, and sensor feeds. It&#8217;s crucial to define what is needed before pulling in every field. Objectives and data schema should be sketched out early to save time in later stages. Privacy rules and security policies must be respected during record ingestion. Each dataset should be tagged with metadata that captures when, where, and how it arrived. This context supports traceability and reproducibility in analysis and modeling. A solid foundation of clean, well-understood inputs reduces surprises down the road.</p><p><strong>2. Feature Engineering</strong></p><p>Raw attributes rarely arrive in the shape and scale a model requires. Feature engineering transforms these inputs into meaningful variables. Numeric fields might be normalized, categorical ones encoded, or parts of timestamps extracted. Domain expertise helps craft interaction terms or rolling averages for time-series data. For text tasks, tokenization or embeddings convert words into numbers. Techniques like PCA or feature selection help manage high dimensionality. Each crafted feature should carry a clear rationale about its role in prediction. Well-engineered features often boost performance more than complex algorithms.</p><div><hr></div><p><strong>3. Model Training</strong></p><p>With features in place, a model is trained to learn underlying patterns. The process starts by selecting an algorithm family&#8212;linear models, decision trees, or neural networks&#8212;based on the problem. Data is split into training and validation sets to catch overfitting before it sneaks in. Hyperparameter tuning is automated with grid search, random search, or Bayesian methods. Training metrics like loss curves and convergence behavior are monitored. Each experiment&#8217;s configuration and results are tracked with an experiment management tool. Automating repeatable training pipelines prevents manual errors and ensures reproducibility. A robust training loop lays the groundwork for reliable predictions.</p><p><strong>4. Evaluation</strong></p><p>Evaluation measures how well a model performs on unseen data. Metrics should align with real-world goals&#8212;accuracy, precision/recall, RMSE, AUC, or custom business KPIs. A hold-out test set that never touched training or tuning is reserved to avoid leakage. Performance is visualized with confusion matrices or ROC curves to spot strengths and weaknesses. Error cases are drilled into to understand model blind spots. Bias is checked by comparing results across different subgroups. Findings are documented clearly to guide stakeholders on strengths and limitations. Thorough validation builds confidence before production rollout.</p><div><hr></div><p><strong>5. Deployment</strong></p><p>Deployment turns a validated model into a usable service or batch task. The model is containerized with Docker or packaged for serverless platforms. Inference logic is wrapped in a simple API or integrated into an existing data pipeline. Model artifacts and API definitions are version-controlled to track changes over time. Deployment pipelines are automated to eliminate manual hand-offs and reduce errors. Endpoints are load-tested to verify they meet latency and throughput requirements. Fallback logic or circuit breakers are included to handle unexpected failures gracefully. Smooth, repeatable deployment processes make going live painless and predictable.</p><p><strong>6. Monitoring</strong></p><p>Once in production, a model enters a dynamic environment that can drift over time. Input feature distributions are monitored to catch covariate drift early. Performance metrics are tracked against expected baselines or business KPIs continuously. Logs are instrumented for latency, error rates, and resource usage. Alerts are set to trigger when metrics deviate beyond safe thresholds. Diagnostic dashboards are used to spot anomalies at a glance. Regular health checks ensure the service remains stable under varying loads.</p><div><hr></div><p><strong>7. Maintenance</strong></p><p>Maintenance keeps a model effective as data and requirements evolve. Over time, input distributions shift, feature relevance changes, and new business rules emerge. A proactive maintenance plan ensures the pipeline doesn&#8217;t silently degrade.</p><p>A retraining cadence is established based on data volume and observed drift. Every model artifact&#8212;training code, feature transformations, and weights&#8212;is versioned to allow rollback or comparison of historic performance.</p><p>Tests are automated to validate feature pipelines and inference logic after updates. New data sources or labels are incorporated when business needs shift, then their impact is validated through the evaluation suite. Obsolete features are rotated out and their effect on performance monitored to prevent bloat.</p><p><strong>Wrapping Up</strong></p><p><em>A robust machine learning pipeline weaves together data collection, feature engineering, model training, evaluation, deployment, monitoring, and maintenance. Each stage builds on the last to create a transparent, reproducible path from raw inputs to reliable predictions. Skipping any phase invites hidden bias, untraceable errors, and brittle systems.</em></p><p><em>When this end-to-end flow is followed; the right data is captured with clear ownership. That data is distilled into features that carry meaningful signals. Models are trained under controlled conditions and validated on truly unseen cases. Deployment is handled with repeatable pipelines, version control, and safety nets. Monitoring is continuous, adapting to real-world drift rather than hoping nothing breaks. </em></p><p><em>With this structure in place, Engineers can iterate on features or algorithms the team can focus on building next-generation capabilities. More importantly, Stakeholders can see clear metrics that connect model outputs to business impact.</em></p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Matplotlib for Data Visualization ]]></title><description><![CDATA[Python Library for Data Analysis & Visualization]]></description><link>https://on.valuecurve.ai/p/matplotlib-for-data-visualisation</link><guid isPermaLink="false">https://on.valuecurve.ai/p/matplotlib-for-data-visualisation</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Fri, 10 Oct 2025 13:35:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TEc7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Matplotlib is a versatile Python library for generating both simple and complex visualizations. It mimics MATLAB&#8217;s plotting interface through </em><code>pyplot</code><em> and integrates seamlessly with NumPy and Pandas. Whether you need quick exploratory plots or publication&#8209;ready figures, Matplotlib offers fine&#8209;grained control over every element of your chart.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></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_!TEc7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TEc7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png 424w, https://substackcdn.com/image/fetch/$s_!TEc7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png 848w, https://substackcdn.com/image/fetch/$s_!TEc7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png 1272w, https://substackcdn.com/image/fetch/$s_!TEc7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TEc7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png" width="983" height="545" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:545,&quot;width&quot;:983,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94443,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.co/i/175012708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.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_!TEc7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png 424w, https://substackcdn.com/image/fetch/$s_!TEc7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png 848w, https://substackcdn.com/image/fetch/$s_!TEc7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.png 1272w, https://substackcdn.com/image/fetch/$s_!TEc7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d79ef1c-5ae1-48ee-b311-98f9ee730c03_983x545.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></figure></div><h4>Core Plotting and Customization </h4><p><a href="https://www.linkedin.com/in/keithgalli/">Keith Galli</a>,  a MIT graduate has published over 100 videos on Computer Science, Programming &amp; Data Analysis. Keith created Python plotting <a href="https://www.youtube.com/watch?v=0P7QnIQDBJY">crash course</a> using matplotlib for beginners, few years ago. This course begins with the fundamentals of plotting before moving into customization.</p><ul><li><p><strong>Setup</strong>: Import the libraries: <code>matplotlib.pyplot as plt</code>, <code>numpy as np</code>, and <code>pandas as pd</code>.</p></li><li><p><strong>Basic Line Graph</strong>: Create a simple line graph with <code>plt.plot(x, y)</code> and display it using <code>plt.show()</code>.</p></li><li><p><strong>Labels and Titles</strong>: Add context with <code>plt.title()</code>, <code>plt.xlabel()</code>, and <code>plt.ylabel()</code>.</p></li><li><p><strong>Tick Marks</strong>: Adjust axis tick values with <code>plt.xticks()</code> and <code>plt.yticks()</code> for readability.</p></li><li><p><strong>Legends</strong>: Use <code>plt.legend()</code> to label multiple datasets; it will auto-place the legend.</p></li><li><p><strong>Line Styling</strong>: Control appearance with parameters such as <code>color</code>, <code>linewidth</code>, <code>marker</code>, <code>markersize</code>, and <code>linestyle</code>.</p></li><li><p><strong>Shorthand Notation</strong>: Combine style settings quickly, e.g. <code>&#8216;b.-&#8217;</code> for a blue line with dots.</p></li><li><p><strong>Font Customization</strong>: Pass a <code>fontdict</code> to titles or labels to change size, family, and weight.</p></li><li><p><strong>Figure Size and Resolution</strong>: Define figure dimensions with <code>plt.figure(figsize=(w, h), dpi=300)</code>.</p></li><li><p><strong>Saving a Plot</strong>: Export graphics with <code>plt.savefig(&#8217;plot.png&#8217;, dpi=300)</code>.</p></li></ul><div><hr></div><h4>Variety of Plot Types</h4><p>The course covers multiple visualization methods beyond line graphs:</p><ul><li><p><strong>Line Graphs</strong> &#8212; e.g., gas price trends.</p></li><li><p><strong>Bar Charts</strong> &#8212; <code>plt.bar()</code>, with bar patterns via <code>set_hatch()</code>.</p></li><li><p><strong>Histograms</strong> &#8212; <code>plt.hist()</code> to show data distributions, with adjustable bins.</p></li><li><p><strong>Pie Charts</strong> &#8212; <code>plt.pie()</code>, including labels, percentages (<code>autopct</code>), custom colors, and slice separation (<code>explode</code>).</p></li><li><p><strong>Box and Whiskers Plots</strong> &#8212; <code>plt.boxplot()</code> for comparing distributions, with options to style boxes.</p></li></ul><div><hr></div><h4>Real-World Application with Pandas</h4><p>Integration with Pandas is a key feature:</p><ul><li><p><strong>Loading Data</strong>: Read CSVs with <code>pd.read_csv()</code>.</p></li><li><p><strong>Example Datasets</strong>:</p><ul><li><p>Gas Prices &#8212; country-level prices over time.</p></li><li><p>FIFA Player Stats &#8212; player attributes from the FIFA game.</p></li></ul></li><li><p><strong>Data Selection</strong>: Extract subsets before plotting, such as <code>gas[&#8217;USA&#8217;]</code> or filtering with <code>FIFA.loc[FIFA[&#8217;Club&#8217;] == &#8216;FC Barcelona&#8217;]</code>.</p></li></ul><div><hr></div><h4>Teaching Approach &amp; Takeaway</h4><p>The course keeps a practical focus:</p><ul><li><p><strong>Documentation First</strong>: Suggests to use the official Matplotlib docs for functions and parameters.</p></li><li><p><strong>Problem Solving</strong>: Search Google or Stack Overflow for specific issues, as is common in real development. This can now be augmented with AI tools. </p></li></ul><p>This course covers the essentials of Matplotlib: how to create plots, customize them, work with multiple chart types, and apply them to real datasets through Pandas. It&#8217;s a practical introduction for anyone learning data visualization in Python. The datasets required to complete the matplotlib course can be downloaded from <a href="https://github.com/KeithGalli/matplotlib_tutorial">github</a> . Additionally, you can also download <a href="https://matplotlib.org/cheatsheets/cheatsheets.pdf">cheatsheets</a> for reference from the official site. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Object-Oriented Concepts in Python ]]></title><description><![CDATA[Representing real-world entities using classes and objects]]></description><link>https://on.valuecurve.ai/p/object-oriented-concepts-in-python</link><guid isPermaLink="false">https://on.valuecurve.ai/p/object-oriented-concepts-in-python</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Tue, 07 Oct 2025 12:29:22 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Object-Oriented Programming (OOP) in Python provides a structured way to represent real-world entities by combining <strong>data (attributes)</strong> and <strong>behavior (methods)</strong> in reusable components called classes. By designing and instantiating classes, you create objects that encapsulate both state and functionality, making code more modular and expressive.</em></p><div><hr></div><h4>Classes and Objects</h4><ul><li><p><strong>Object</strong>: Everything in Python is an object, and every object has a type that defines its data and behaviors.</p></li><li><p><strong>Class</strong>: A class acts as a blueprint for creating objects.</p></li><li><p><strong>Instance (Object)</strong>: A specific creation based on that class blueprint.</p></li></ul><p><strong>Defining a Class</strong></p><p>You define a class using the <code>class</code> keyword, followed by the class name. In Python 3, it&#8217;s common to write <code>class Coordinate:</code> instead of <code>class Coordinate(object):</code> because all classes inherit from <code>object</code> by default.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&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-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="9000" height="4320" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&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;:4320,&quot;width&quot;:9000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a neon circle with a snake on it&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="a neon circle with a snake on it" title="a neon circle with a snake on it" srcset="https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1690683790356-c1edb75e3df7?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxweXRob24lMjBwcm9ncmFtbWluZ3xlbnwwfHx8fDE3NTk0MDgyOTh8MA&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></figure></div><p><strong>Attributes</strong></p><ul><li><p><strong>Data attributes</strong> (instance variables): Values stored per object, typically defined in <code>__init__</code>.</p></li><li><p><strong>Methods</strong>: Functions defined inside a class that operate on its instance data.</p></li></ul><p><code>__init__</code><strong> Method and </strong><code>self</code></p><ul><li><p><strong>Constructor (</strong><code>__init__</code><strong>)</strong>: Called automatically when a new instance is created; initializes the object&#8217;s attributes.</p></li><li><p><code>self</code><strong> parameter</strong>: Refers to the instance on which a method is called. It is passed implicitly; <code>self</code> is the convention, not a Python keyword.</p></li></ul><p><strong>Data Attributes</strong></p><p>Defined inside <code>__init__</code> with <code>self</code> (e.g., <code>self.x = xval</code>). These persist for the object&#8217;s lifetime.</p><p><strong>Dunder Methods and Operator Overloading</strong></p><ul><li><p><strong>Special Methods (Dunder Methods)</strong>: Begin and end with double underscores, such as <code>__init__</code>, <code>__str__</code>, <code>__add__</code>.</p></li><li><p><code>__str__</code>: Defines a human-readable string (used in <code>print()</code> calls). Falls back to <code>__repr__</code> if not defined.</p></li><li><p><strong>Operator Overloading</strong>: By defining methods like <code>__add__</code>, <code>__eq__</code>, and <code>__mul__</code>, you control how operators work on your custom objects.</p></li></ul><p><strong>Inheritance</strong></p><ul><li><p><strong>Concept</strong>: A child (subclass) can inherit attributes and methods from a parent (superclass), e.g., <code>class Cat(Animal):</code>.</p></li><li><p><strong>Overriding</strong>: A child can replace a parent&#8217;s method with its own definition.</p></li><li><p><strong>Extending</strong>: A child can add new attributes/methods.</p></li><li><p><strong>Method Resolution Order (MRO)</strong>: Python looks for attributes in the current class, then parent(s), following a consistent MRO for multiple inheritance.</p></li></ul><p><strong>Class Variables</strong></p><ul><li><p>Variables defined inside the class but outside methods are shared by all instances.</p></li><li><p>Be careful: assigning to <code>self.var</code> in an instance will create/override an <strong>instance attribute</strong>, shadowing the class variable.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/p/object-oriented-concepts-in-python?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 ValueCurve! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/p/object-oriented-concepts-in-python?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://on.valuecurve.ai/p/object-oriented-concepts-in-python?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div></li></ul><div><hr></div><h4><strong>Python Code Example: Defining a Coordinate Class</strong></h4><p>This code block demonstrates how to define a class, create a constructor (<code>__init__</code>), define data attributes, and implement a procedural method (<code>distance</code>). It also shows the power of the <code>__str__</code> method.</p><pre><code>import math

class Coordinate:
    # Class Variables (shared by all instances)
    dimension = 2
    instance_count = 0

    def __init__(self, x_val, y_val):
        # Instance Variables
        self.x = x_val
        self.y = y_val
        Coordinate.instance_count += 1

    def distance(self, other_coord):
        &#8220;&#8221;&#8220;Calculates the Euclidean distance to another Coordinate.&#8221;&#8220;&#8221;
        x_diff = self.x - other_coord.x
        y_diff = self.y - other_coord.y
        return math.sqrt(x_diff**2 + y_diff**2)

    def __str__(self):
        &#8220;&#8221;&#8220;Defines a human-readable string representation.&#8221;&#8220;&#8221;
        return f&#8221;&lt;{self.x}, {self.y}&gt;&#8221;

    def __add__(self, other_coord):
        &#8220;&#8221;&#8220;Overloads &#8216;+&#8217; operator to add coordinates (vector addition).&#8221;&#8220;&#8221;
        new_x = self.x + other_coord.x
        new_y = self.y + other_coord.y
        return Coordinate(new_x, new_y)

# --- Creating Objects ---
point1 = Coordinate(3, 4)
point2 = Coordinate(0, 0)
point3 = Coordinate(10, 5)

# --- Accessing Attributes and Methods ---
print(f&#8221;Point 1 X-attribute: {point1.x}&#8221;)
print(f&#8221;Distance between {point1} and {point2}: {point1.distance(point2):.2f}&#8221;)
print(f&#8221;Point 3 representation: {point3}&#8221;)

# --- Operator Overloading ---
point_sum = point1 + point3
print(f&#8221;Point Sum (point1 + point3): {point_sum}&#8221;)

# --- Class Variables ---
print(f&#8221;Total Coordinate objects created: {Coordinate.instance_count}&#8221;)
print(f&#8221;Dimension (class variable): {point1.dimension}&#8221;)</code></pre><div class="directMessage button" data-attrs="{&quot;userId&quot;:4255616,&quot;userName&quot;:&quot;Sarfaraz Mulla&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div><hr></div><h4>Summary and Best Practices</h4><p>OOP provides the tools to manage large, dynamic projects by modeling complexity with clarity, structure, and consistency. Mastering these fundamentals is the key to advancing beyond basic scripting into professional software development.</p><p>The central mechanisms are:</p><ul><li><p><strong>Instantiation</strong>: The <code>__init__</code> method and the <code>self</code> parameter construct new objects and bind instance-specific data.</p></li><li><p><strong>Specialization</strong>: Inheritance allows creation of new classes that extend or override the behavior of their parents, promoting code reuse and clarifying relationships.</p></li><li><p><strong>Integration</strong>: Dunder methods like <code>__str__</code> and <code>__add__</code> let custom objects integrate naturally with Python&#8217;s built-in functions and operators, producing more readable and &#8220;Pythonic&#8221; code.</p></li></ul><p><strong>Best practices include:</strong></p><ul><li><p>Designing classes around a clear, single responsibility to keep them maintainable and understandable.</p></li><li><p>Using <code>__str__</code> for human-readable output and <code>__repr__</code> for accurate, developer-facing representations.</p></li><li><p>Managing class variables carefully, recognizing when values should be shared at the class level versus kept per instance.</p></li><li><p>Favoring <strong>composition</strong> (building complex objects from simpler ones) when it improves clarity, rather than relying heavily on inheritance hierarchies.</p></li><li><p>Applying operator overloading selectively, only when it genuinely improves code clarity and aligns with intuitive object behavior.</p></li></ul><p>OOP is powerful in Python but should be used thoughtfully, alongside procedural and functional styles, to build flexible, scalable, and maintainable systems.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Lists in Python are indispensable ]]></title><description><![CDATA[Python Basics : Data Structure]]></description><link>https://on.valuecurve.ai/p/lists-in-python</link><guid isPermaLink="false">https://on.valuecurve.ai/p/lists-in-python</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Mon, 06 Oct 2025 12:15:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SQmT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Python lists are a compound data type, similar to tuples, that can be populated with objects of any type, including integers, strings, other lists, or a mix of different types. Lists are created using square brackets </em><code>[]</code><em>.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SQmT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SQmT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SQmT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SQmT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SQmT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SQmT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg" width="688" height="647.2296296296296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1016,&quot;width&quot;:1080,&quot;resizeWidth&quot;:688,&quot;bytes&quot;:297973,&quot;alt&quot;:&quot;table&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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="table" title="table" srcset="https://substackcdn.com/image/fetch/$s_!SQmT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SQmT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SQmT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SQmT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3dd560b-740d-4f15-b439-0ef8e91d4bca_1080x1016.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">Photo by <a href="https://unsplash.com/@jontyson">Jon Tyson</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><div><hr></div><h4>Key Characteristics and Operations</h4><p><strong>Mutability</strong>: The most significant feature of a list is its mutability. Unlike immutable objects such as strings and tuples, lists can be changed in memory after they are created. This means you can alter a list object itself without creating a new copy. This is a key difference from tuples, where reassigning a variable to a new tuple creates a new object in memory, leaving the original unchanged. Because of their mutable nature, lists are highly efficient for managing dynamic data, like a list of employees or students, as changes don&#8217;t require creating entirely new copies of large data structures.</p><p><strong>Modifying Elements</strong>: You can change an element at a specific index using assignment syntax, such as <code>L[index] = 5</code>.</p><p><strong>Adding Elements</strong>:</p><ul><li><p><code>append()</code>: Adds a single item to the end of a list, mutating the original list. Returns <code>None</code>.</p></li><li><p><code>extend()</code>: Adds all elements from another list to the end of the original.</p></li></ul><p><strong>Removing Elements</strong>:</p><ul><li><p><code>remove(element)</code>: Removes the first occurrence of a specified value.</p></li><li><p><code>del L[index]</code>: Deletes the element at a specific index.</p></li><li><p><code>pop()</code>: Removes and returns the last element.</p></li><li><p><code>clear()</code>: Removes all elements, keeping the same list object in memory.</p></li></ul><p><strong>Sorting and Reversing</strong>:</p><ul><li><p><code>L.sort()</code>: Sorts the list in place, returning <code>None</code>.</p></li><li><p><code>L.reverse()</code>: Reverses the list in place.</p></li><li><p><code>sorted(L)</code>: Returns a new, sorted copy without altering the original.</p></li></ul><p><strong>Iteration</strong>:</p><ul><li><p>Iterate directly with <code>for e in L:</code> (more Pythonic).</p></li><li><p>Use <code>for i in range(len(L)):</code> if you need to mutate elements by index.</p></li><li><p>Mutating a list while iterating directly can cause skipped elements; safer: iterate over a copy.</p></li></ul><p><strong>Copying (Cloning)</strong>:</p><ul><li><p>Shallow copy: <code>L_copy = L[:]</code> (top-level only).</p></li><li><p>For independent nested structures, use <code>copy.deepcopy(L)</code>.</p></li></ul><p><strong>List Comprehension</strong>:</p><ul><li><p>Pattern: <code>[expression for item in sequence if condition]</code>.</p></li><li><p>A concise way to replace explicit loop + append structures.</p></li></ul><div><hr></div><h4>Summary and Best Practices</h4><p>In summary, the Python list is a versatile and indispensable collection. To use it effectively and avoid common pitfalls, keep these core principles in mind:</p><ul><li><p><strong>Embrace Mutability</strong>: Use in-place methods like <code>append()</code>, <code>extend()</code>, and <code>sort()</code> for efficient data alteration, but be mindful that these methods always mutate the original list.</p></li><li><p><strong>Beware of Aliasing</strong>: Use shallow copy techniques such as <code>L[:]</code>, <code>list(L)</code>, or <code>L.copy()</code> when you need an independent copy of a list&#8217;s top-level structure. This prevents unintentional modifications to the original list. If the list contains nested mutable structures (e.g., lists of lists), use <code>copy.deepcopy(L)</code> when you need a fully independent copy of both top-level and nested objects.</p></li><li><p><strong>Use List Comprehensions</strong>: Adopt the <code>[expression for item in sequence if condition]</code>pattern to write cleaner, faster, and more readable code when generating new lists.</p></li><li><p><strong>Prefer Safe Mutations During Iteration</strong>: Mutating a list while iterating can cause skipped elements. Iterate by index or over a copy for safety.</p></li><li><p><strong>Understand Sorting Options</strong>: Use <code>list.sort()</code> when you want to sort in place for performance. Use <code>sorted(list)</code> when you need a new sorted copy without affecting the original.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share ValueCurve</span></a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Python Dictionaries are a Compound Data Type ]]></title><description><![CDATA[Mapping related data in a key value pair]]></description><link>https://on.valuecurve.ai/p/python-dictionaries-are-a-compound</link><guid isPermaLink="false">https://on.valuecurve.ai/p/python-dictionaries-are-a-compound</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Fri, 03 Oct 2025 11:36:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gIBP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Python dictionaries are a compound data type designed to store and manage related data by mapping a custom index, called a <strong>key</strong>, to a corresponding <strong>value</strong>. This structure is analogous to a book dictionary that maps a word to its definition.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>The need for dictionaries arises from the limitations of using lists for complex data storage. Let&#8217;s consider this with a student grades example:</p><ul><li><p>Using parallel lists (one for names, one for grades) is cumbersome. To find a student&#8217;s grade, you first have to find their index in the <code>names</code> list and then use that same index to access the <code>grades</code> list. This process becomes increasingly messy as more data (like quiz or problem set scores) is added, requiring more parallel lists that must be kept in sync.</p></li><li><p>Using a &#8220;master list&#8221; of nested lists also proves to be complex and hard to read, requiring nested loops to search for specific information.</p></li></ul><p>Dictionaries solve this by providing a direct mapping from a key (e.g., a student&#8217;s name) to a value (e.g., their grade or a more complex data structure containing all their information). An entry in a dictionary is a <strong>key-value pair</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gIBP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gIBP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 424w, https://substackcdn.com/image/fetch/$s_!gIBP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 848w, https://substackcdn.com/image/fetch/$s_!gIBP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 1272w, https://substackcdn.com/image/fetch/$s_!gIBP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gIBP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic" width="1456" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1078580,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.co/i/175029068?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gIBP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 424w, https://substackcdn.com/image/fetch/$s_!gIBP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 848w, https://substackcdn.com/image/fetch/$s_!gIBP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 1272w, https://substackcdn.com/image/fetch/$s_!gIBP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb31031e8-e0bd-4d64-8dcc-2bdd7fbbd8c7_4300x2614.heic 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><h4>Creating, Accessing, and Modifying Dictionaries</h4><p><strong>Creation</strong></p><ul><li><p>Dictionaries are created using <strong>curly braces </strong><code>{}</code>. An empty dictionary is created with <code>d = {}</code>.</p></li><li><p>Entries are defined as <code>key: value</code>, and multiple entries are separated by commas. For example, a dictionary mapping names to grades could be created like this: <code>grades = {&#8217;Ana&#8217;: &#8216;B&#8217;, &#8216;Matt&#8217;: &#8216;A&#8217;, &#8216;John&#8217;: &#8216;B&#8217;}</code>.</p></li></ul><p><strong>Accessing and Mutability</strong></p><ul><li><p><strong>Dictionaries are mutable objects</strong>, meaning they can be changed after they are created.</p></li><li><p>To look up a value, you use the key as an index in <strong>square brackets</strong>, similar to list indexing (e.g., <code>grades[&#8217;John&#8217;]</code> would return <code>&#8216;B&#8217;</code>).</p></li><li><p>If you try to access a key that does not exist in the dictionary, Python will raise a <code>KeyError</code> exception.</p></li><li><p>You cannot look up a key by its value directly, as values can be duplicated. You would need to write a loop to perform this reverse lookup.</p></li></ul><p><strong>Operations</strong></p><ul><li><p><strong>Adding or Modifying Entries</strong>: The same syntax is used for both adding a new entry and changing an existing one. If the key does not exist, a new entry is created. If it does exist, its value is overwritten. For example, <code>grades[&#8217;Grace&#8217;] = &#8216;A&#8217;</code> adds Grace, and <code>grades[&#8217;Grace&#8217;] = &#8216;C&#8217;</code> later changes her grade.</p></li><li><p><strong>Deleting Entries</strong>: The <code>del</code> keyword is used to remove an entry, such as <code>del grades[&#8217;Ana&#8217;]</code>. This mutates the original dictionary.</p></li><li><p><strong>Checking for a Key</strong>: The <code>in</code> operator checks for the existence of a <strong>key</strong> in a dictionary (e.g., <code>&#8216;John&#8217; in grades</code>returns <code>True</code>). It is important to note that the <code>in</code> operator <strong>only checks keys, not values</strong>.</p></li><li><p><strong>Copying</strong>: Since dictionaries are mutable, simple assignment (<code>d2 = d1</code>) creates an alias (another name for the same object). To create a shallow copy, you must use the <code>.copy()</code> method (<code>d2 = d1.copy()</code>).</p><div><hr></div></li></ul><h4>Iteration</h4><p>While recent versions of Python guarantee insertion order for dictionaries, it is best practice to write code assuming they are <strong>unordered sequences</strong> for robustness and compatibility with older versions. There are three main ways to iterate over a dictionary:</p><ul><li><p><code>.keys()</code>: Returns an iterable sequence of all the keys in the dictionary.</p></li><li><p><code>.values()</code>: Returns an iterable sequence of all the values.</p></li><li><p><code>.items()</code>: This is often the most effective method, as it returns an iterable of key-value pairs as tuples. This allows you to access both the key and value simultaneously in a loop, for example: <code>for k, v in my_dict.items():</code>.</p></li></ul><p><strong>Restrictions on Keys and Values</strong></p><ul><li><p><strong>Dictionary values</strong> can be of <strong>any type</strong>, including other mutable objects like lists or other dictionaries. Values can also be duplicated.</p></li><li><p><strong>Dictionary keys</strong> have two main restrictions:</p><ol><li><p>They must be <strong>unique</strong>. You cannot have two entries with the same key.</p></li><li><p>They must be <strong>immutable</strong> (technically, &#8220;hashable&#8221;). This means keys can be types like integers, floats, strings, tuples, and booleans, but <strong>cannot be lists or other dictionaries</strong>.</p></li></ol></li></ul><h4>Performance and Implementation: Hashing</h4><p>Following is a detailed explanation of why dictionaries offer superior performance for lookups compared to lists and why keys must be immutable :</p><ul><li><p><strong>Average-Case constant time lookup</strong>: Dictionaries are implemented using a <strong>hash table</strong>. A <strong>hash function</strong> is run on a key, which converts it into an integer. This integer is then used as a direct index to find the location of the corresponding value in the hash table (which is structured like a list in memory). Because this lookup is based on a direct calculation rather than a sequential search, accessing an item in a dictionary takes <strong>constant time (&#920;</strong><code>(1)</code><strong>) on average</strong>. This provides a massive performance advantage over searching a list, which takes linear time (<strong>&#920;</strong><code>(n)</code>).</p></li><li><p><strong>Collisions and worst-case performance</strong>: A &#8220;collision&#8221; occurs when two different keys produce the same hash value, mapping them to the same location or &#8220;bucket&#8221; in the hash table. These collisions are handled by storing the colliding entries together, often in a list-like structure within that bucket. A good hash function distributes keys uniformly, minimizing collisions. However, in the <strong>worst-case scenario</strong>, if all keys collide into the same bucket, looking up an item degrades to a linear search through that bucket, resulting in <strong>linear time (</strong><code>theta(n)</code><strong>) performance</strong>.</p></li><li><p><strong>Why keys must be immutable</strong>: The hashing mechanism requires that a key always produces the same hash value. If a key were a mutable object like a list, its contents could change after it was stored in the dictionary. This change would alter its hash value, making it impossible for the dictionary to find the original location where the value was stored.</p></li></ul><h4>Use Cases </h4><ol><li><p><strong>Storing Structured Data</strong>: Dictionaries are excellent for representing complex, structured data. The student information example was revisited to show how a nested dictionary (<code>grades[&#8217;Ana&#8217;][&#8217;ps&#8217;]</code>) provides a much cleaner and more efficient way to store and retrieve data compared to nested lists.</p></li><li><p><strong>Counting Frequencies</strong>: A common pattern is to create a &#8220;frequency dictionary&#8221; to count occurrences of items. An example shows how to build a dictionary that maps each word in a song&#8217;s lyrics to the number of times it appears.</p></li><li><p><strong>Memoization</strong>: Dictionaries are crucial for an optimization technique called memoization, which is used to speed up expensive computations, particularly in recursive functions. The Fibonacci example demonstrates this by storing previously calculated <code>fib(n)</code> values in a dictionary. Before computing a value, the function checks if the result is already in the dictionary, avoiding redundant calculations. This improved the efficiency of the Fibonacci function from exponential time to a much faster one, reducing millions of function calls to just a few dozen.</p></li></ol><div><hr></div><p><strong>Summary and Best Practices </strong></p><p>Python dictionaries are the core tool for managing unordered, dynamic data that requires fast, key-based lookup. They fundamentally map unique, hashable <strong>keys</strong> to corresponding <strong>values</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tHDP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tHDP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png 424w, https://substackcdn.com/image/fetch/$s_!tHDP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png 848w, https://substackcdn.com/image/fetch/$s_!tHDP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png 1272w, https://substackcdn.com/image/fetch/$s_!tHDP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tHDP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png" width="1192" height="1008" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1008,&quot;width&quot;:1192,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260619,&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://www.valuecurve.co/i/175029068?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.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_!tHDP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png 424w, https://substackcdn.com/image/fetch/$s_!tHDP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png 848w, https://substackcdn.com/image/fetch/$s_!tHDP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.png 1272w, https://substackcdn.com/image/fetch/$s_!tHDP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4eb4ea6-b1eb-4d68-99da-837746255e3f_1192x1008.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 dictionary&#8217;s defining characteristic is its reliance on <strong>hash tables</strong>, which allows for item retrieval in <strong>average-case constant time (&#920;(1))</strong>, offering a massive performance advantage over sequential list searching.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Fundamental Programming Concepts in Python]]></title><description><![CDATA[Python is an imperative, object-oriented language where everything is an object]]></description><link>https://on.valuecurve.ai/p/fundamental-programming-concepts</link><guid isPermaLink="false">https://on.valuecurve.ai/p/fundamental-programming-concepts</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Thu, 02 Oct 2025 14:55:59 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Programming in Python involves providing the computer with a set of instructions, much like a recipe, to perform a task. This is known as imperative programming. The computer itself is not intelligent; it only follows the instructions you provide. These sequences of steps are called algorithms, which have a defined flow of control and a stopping condition.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&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-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="14467" height="9744" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&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;:9744,&quot;width&quot;:14467,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a white cube with a yellow and blue logo on it&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="a white cube with a yellow and blue logo on it" title="a white cube with a yellow and blue logo on it" srcset="https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1649180556628-9ba704115795?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxweXRob258ZW58MHx8fHwxNzU5NDA4MjU3fDA&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/@rubaitulazad">Rubaitul Azad</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Learning to program is a skill that requires consistent practice. It is not just about understanding concepts but also about developing problem-solving ability&#8212;the process of translating a problem described in English into a computational solution. Following concepts should serve as  a <em><strong>memory aid</strong></em> for the beginners in Python. </p><h4>Objects, Types, and Variables</h4><ul><li><p><strong>Objects and Types</strong>: In Python, everything is an object, from numbers to functions. Each object has a <em>type</em> that defines what operations can be performed on it. You can use <code>type()</code>to check an object&#8217;s type.</p></li><li><p><strong>Scalar Data Types</strong>:</p><ul><li><p><code>int</code>: Whole numbers like <code>5</code>, <code>0</code>, <code>-100</code>.</p></li><li><p><code>float</code>: Real numbers with a decimal point, such as <code>3.27</code> or <code>2.0</code>. Because of binary representation, floating-point operations may introduce tiny rounding errors.</p></li><li><p><code>bool</code>: Truth values&#8212;<code>True</code> or <code>False</code> (case-sensitive).</p></li><li><p><code>NoneType</code>: Has only one value, <code>None</code>, used to represent the absence of a value.</p></li></ul></li><li><p><strong>Variables and Expressions</strong>:</p><ul><li><p>Variables are names bound to objects. The assignment operator <code>=</code> binds the name on the left to the evaluated value on the right.</p></li><li><p>Example: <code>area = pi * radius**2</code> first evaluates the expression and then assigns it to <code>area</code>.</p></li><li><p>Variables can be rebound to new values. For instance, <code>x = x + 1</code> calculates <code>x + 1</code> and rebinds <code>x</code> to this result.</p></li></ul></li><li><p><strong>Operators</strong>:</p><ul><li><p>Arithmetic: <code>+</code>, <code>-</code>, <code>*</code>, <code>**</code>, <code>/</code> (float division), <code>//</code> (integer division), <code>%</code> (modulo).</p></li><li><p>Comparison: <code>==</code>, <code>!=</code>, <code>&gt;</code>, <code>&lt;</code> evaluate to <code>True</code> or <code>False</code>.</p></li><li><p>Logical: <code>and</code>, <code>or</code>, <code>not</code>.</p></li></ul></li></ul><div><hr></div><h4>Input, Output, and Control Flow</h4><ul><li><p><strong>Input and Output</strong>:</p><ul><li><p><code>print()</code> displays output.</p></li><li><p><code>input()</code> reads user input as a string. Casting is often required, e.g., <code>age = int(input(&#8221;Enter age: &#8220;))</code>.</p></li><li><p><em>f-strings</em> provide formatted string interpolation: <code>print(f&#8221;Area = {area}&#8221;)</code>.</p></li></ul></li><li><p><strong>Control Flow</strong>:</p><ul><li><p><strong>Branching</strong>: <code>if</code>, <code>elif</code>, <code>else</code> allow decision-making. Indentation defines code blocks.</p></li><li><p><strong>Loops</strong>:</p><ul><li><p><code>while</code>: Repeats while a condition is <code>True</code>. Be careful to avoid infinite loops.</p></li><li><p><code>for</code>: Iterates over sequences. Example: <code>for i in range(5):</code>.</p></li></ul></li></ul></li></ul><h4>Functions</h4><ul><li><p><strong>Defining and Calling</strong>: Declared with <code>def</code> and executed when called.</p></li><li><p><strong>Parameters and Return Values</strong>: Accept inputs and return results with <code>return</code>. Functions without a return default to <code>None</code>.</p></li><li><p><strong>First-Class Objects</strong>: Functions can be assigned to variables, passed as arguments, or returned from other functions.</p></li><li><p><strong>Scope</strong>: Each function has its own local scope.</p><ul><li><p>Local variables are destroyed after the function finishes.</p></li><li><p>Functions can read variables from outer scopes but cannot modify them unless declared with <code>global</code> or <code>nonlocal</code>.</p></li></ul></li><li><p><strong>Loop Control</strong>:</p><ul><li><p><code>break</code>: Exit the loop early.</p></li><li><p><code>continue</code>: Skip to the next iteration.</p></li><li><p><code>pass</code>: Placeholder that does nothing (useful for code stubs).</p></li></ul></li></ul><div><hr></div><h4>Common Data Structures</h4><ul><li><p><strong>Strings (</strong><code>str</code><strong>)</strong>: Immutable, ordered sequence of characters.</p><ul><li><p>Created with quotes: <code>&#8220;hello&#8221;</code>.</p></li><li><p>Operations: concatenation (<code>+</code>), repetition (<code>*</code>), length (<code>len()</code>), indexing, slicing (<code>s[1:3]</code>).</p></li></ul></li><li><p><strong>Tuples (</strong><code>tuple</code><strong>)</strong>: Immutable, ordered collection of objects.</p><ul><li><p>Example: <code>(2, &#8216;MIT&#8217;, 3)</code>.</p></li><li><p>Support indexing, slicing, and unpacking (<code>x, y = y, x</code>).</p></li><li><p>Often used to return multiple values from a function.</p></li></ul></li><li><p><strong>Lists (</strong><code>list</code><strong>)</strong>: Mutable, ordered collection.</p><ul><li><p>Example: <code>[2, &#8216;a&#8217;, 4]</code>.</p></li><li><p>Elements can be modified: <code>L[0] = 5</code>.</p></li><li><p>Common methods:</p><ul><li><p><code>L.append(item)</code> &#8211; add item at end</p></li><li><p><code>L.extend(other)</code> &#8211; append all items from another list</p></li><li><p><code>L.sort()</code> &#8211; sort list in place</p></li><li><p><code>L.reverse()</code> &#8211; reverse in place</p></li><li><p><code>L.remove(item)</code> &#8211; remove first matching element</p></li></ul></li><li><p>Assigning <code>newList = oldList</code> creates an alias, not a copy. For a copy: <code>newList = oldList[:]</code>.</p></li></ul></li><li><p><strong>Dictionaries (</strong><code>dict</code><strong>)</strong>: Mutable collection of key-value pairs.</p><ul><li><p>Example: <code>grades = {&#8217;Ana&#8217;: &#8216;B&#8217;, &#8216;John&#8217;: &#8216;A&#8217;}</code>.</p></li><li><p>Keys must be immutable types (str, int, tuple).</p></li><li><p>Access: <code>grades[&#8217;Ana&#8217;]</code>.</p></li><li><p>Add or modify: <code>grades[&#8217;Grace&#8217;] = &#8216;A&#8217;</code>.</p></li><li><p>Iteration: <code>.keys()</code>, <code>.values()</code>, <code>.items()</code>.</p></li><li><p>Safe access: <code>grades.get(&#8217;Ana&#8217;, &#8216;Not Found&#8217;)</code>.</p></li></ul></li></ul><p><strong>Exception and Error Handling </strong></p><p>Python provides robust mechanisms to handle errors using <code>try</code>, <code>except</code>, and <code>finally</code> blocks. While not essential at the very beginning, learning exceptions is important once you start writing programs that deal with unpredictable input, files, or external data.</p><div><hr></div><h4>Summary &amp; Best Practices </h4><p>Python is an imperative, object-oriented language in which every entity is treated as an object. Its core components include variables, operators, control flow mechanisms, data structures, and functions.Mutability plays a key role: lists and dictionaries are mutable, while strings and tuples are immutable. Functions support abstraction, modularity, and reuse, with built-in features like default and keyword arguments.</p><p>Clean Python code is easier to read and maintain when variable names clearly reflect their purpose.  <code>For</code> loops are typically more readable than <code>while</code> loops, unless the loop depends on a specific condition and f-strings simplify string formatting by embedding expressions directly. Mutable objects like lists and dictionaries can lead to unintended side effects when shared across functions or scopes, so they require careful handling. </p><p>Deeply nested logic can obscure intent; breaking it into smaller functions improves clarity and reuse. User input should be converted and validated to prevent errors. Comments are useful when necessary, but well-structured code and meaningful names often make them redundant. By combining a solid grasp of the language&#8217;s core constructs with disciplined coding practices, developers can build systems that are both elegant and resilient.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Tuples are Immutable]]></title><description><![CDATA[Python Basics : Data Structures]]></description><link>https://on.valuecurve.ai/p/tuples-are-immutable</link><guid isPermaLink="false">https://on.valuecurve.ai/p/tuples-are-immutable</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Mon, 29 Sep 2025 11:26:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nzu2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>In Python, one of the foundational building blocks of data management is the <strong>tuple</strong>. While lists often get more attention for their flexibility, tuples play an equally important&#8212;sometimes even more efficient&#8212;role in everyday programming. The key feature that makes tuples unique is immutability. Once created, a tuple cannot be changed, offering reliability and consistency when working with data.</em></p><div><hr></div><h4><strong>Tuples as Data Structures</strong></h4><p>Tuples are a fundamental Python data structure&#8212;a way of organizing data with a focus on immutability and reliability. Unlike lists, tuples guarantee their contents won&#8217;t change, which makes them suitable in contexts such as dictionary keys, fixed records, or multiple return values</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nzu2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nzu2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 424w, https://substackcdn.com/image/fetch/$s_!nzu2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 848w, https://substackcdn.com/image/fetch/$s_!nzu2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 1272w, https://substackcdn.com/image/fetch/$s_!nzu2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nzu2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic" width="941" height="705" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:705,&quot;width&quot;:941,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35523,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.co/i/174821330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nzu2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 424w, https://substackcdn.com/image/fetch/$s_!nzu2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 848w, https://substackcdn.com/image/fetch/$s_!nzu2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 1272w, https://substackcdn.com/image/fetch/$s_!nzu2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fca2c180b-5832-41ae-a62c-b4ac686d5426_941x705.heic 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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/p/tuples-are-immutable?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://on.valuecurve.ai/p/tuples-are-immutable?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h4>Tuples: Immutable Sequences</h4><p>A <em>tuple</em> is an ordered collection of values, typically enclosed in parentheses `()`. Unlike lists, tuples cannot be modified once defined.</p><pre><code>coordinates = (10, 20)
# Trying to change an element raises an error:
# coordinates[0] = 99   # TypeError: &#8216;tuple&#8217; object does not support item assignment</code></pre><p>This immutability makes tuples ideal for storing fixed collections of related data where consistency matters.</p><p><strong>Packing: Collecting Values into a Tuple</strong></p><p>Packing is a feature where multiple values are grouped together into a tuple automatically.</p><pre><code>point = 5, 7
print(point)   # Output: (5, 7)</code></pre><p>This allows for easy grouping of values without explicit tuple syntax.</p><p><strong>Unpacking: Assigning Tuple Elements</strong></p><p>Unpacking takes a tuple and assigns its elements to individual variables in one step.</p><pre><code>x, y = point
print(x, y)   # Output: 5 7</code></pre><p>Unpacking is useful when functions return multiple values or when processing tuple-based data.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><p><strong>`zip`: Combining Iterables</strong></p><p>The `zip()` function pairs elements from multiple iterables into tuples, providing a combined view of the data.</p><pre><code>names = [&#8221;Alice&#8221;, &#8220;Bob&#8221;, &#8220;Charlie&#8221;]
scores = [85, 90, 95]

zipped = zip(names, scores)
print(list(zipped))  
# Output: [(&#8217;Alice&#8217;, 85), (&#8217;Bob&#8217;, 90), (&#8217;Charlie&#8217;, 95)]</code></pre><p>This is helpful for parallel iteration over multiple sequences.</p><p><strong>`enumerate`: Indexed Iteration</strong></p><p>When you want both the index and the value from a sequence, `enumerate()` produces tuples of `(index, value)` pairs.</p><pre><code>fruits = [&#8221;apple&#8221;, &#8220;banana&#8221;, &#8220;cherry&#8221;]

for index, fruit in enumerate(fruits, start=1):
    print(index, fruit)

# Output:
# 1 apple
# 2 banana
# 3 cherry</code></pre><p><strong>Sorting with a Key</strong></p><p>Tuples can represent structured data, such as `(name, score)` pairs. When sorting collections of tuples, a sort key can determine the criterion.</p><pre><code>students = [(&#8221;Alice&#8221;, 85), (&#8221;Bob&#8221;, 90), (&#8221;Charlie&#8221;, 78)]

sorted_students = sorted(students, key=lambda student: student[1])
print(sorted_students)
# Output: [(&#8217;Charlie&#8217;, 78), (&#8217;Alice&#8217;, 85), (&#8217;Bob&#8217;, 90)]</code></pre><p>This sorts the list based on the score (the second tuple element).</p><p> Combined with Python&#8217;s powerful features like packing, unpacking, `zip`, and `enumerate`, tuples provide a simple but robust way to handle fixed collections of data efficiently and safely.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/subscribe?utm_source=menu&amp;simple=true&amp;next=https%3A%2F%2Fwww.valuecurve.co%2Fp%2Ftuples-are-immutable&quot;,&quot;text&quot;:&quot;Stay Connected&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/subscribe?utm_source=menu&amp;simple=true&amp;next=https%3A%2F%2Fwww.valuecurve.co%2Fp%2Ftuples-are-immutable"><span>Stay Connected</span></a></p>]]></content:encoded></item><item><title><![CDATA[Solving Anagrams beyond Wordplay]]></title><description><![CDATA[Practice assignment for competitive programming]]></description><link>https://on.valuecurve.ai/p/solving-anagrams-beyond-wordplay</link><guid isPermaLink="false">https://on.valuecurve.ai/p/solving-anagrams-beyond-wordplay</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 14 Sep 2025 02:31:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!p_O7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>An anagram is a word or phrase formed by rearranging the letters of another, using every letter exactly once</strong>. For example, cinema can be rearranged to iceman&#8212;both contain the same letters in identical amounts, just ordered differently. Anagrams are more than clever wordplay; they&#8217;re foundational in puzzles, word games, and practical computing problems. Recognizing anagrams is useful in fields like text analysis, cryptography, and natural language processing, where lexical structure and variation matter.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p_O7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p_O7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 424w, https://substackcdn.com/image/fetch/$s_!p_O7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 848w, https://substackcdn.com/image/fetch/$s_!p_O7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 1272w, https://substackcdn.com/image/fetch/$s_!p_O7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p_O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1182193,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.co/i/173099879?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic&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_O7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 424w, https://substackcdn.com/image/fetch/$s_!p_O7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 848w, https://substackcdn.com/image/fetch/$s_!p_O7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 1272w, https://substackcdn.com/image/fetch/$s_!p_O7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3e7647a-1a9a-46e3-b8a9-3a30800b8175_4608x3456.heic 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><h4><strong>The Challenge</strong></h4><p>The task is to write a program that, given two lowercase phrases (with spaces and punctuation removed), determines whether they are anagrams. For instance, <em>listen</em> and <em>silent</em> are anagrams, while <em>hello</em> and <em>world</em> are not. Though often used as a beginner coding exercise, this challenge has real-world relevance in systems that require fast, reliable string comparison&#8212;such as search engines, data deduplication, and secure identifier matching.</p><p><strong>Counting Characters</strong></p><p>Two strings are anagrams if and only if they contain the same characters with the same frequency. For example, both <em>listen</em> and <em>silent</em> contain one <em>l</em>, one <em>i</em>, one <em>s</em>, one <em>t</em>, one <em>e</em>, and one <em>n</em>. If the character counts match for all letters, the strings are anagrams. This principle forms the basis of the program&#8217;s logic: rather than comparing order, it compares composition.</p><p><strong>Algorithm in Three Steps</strong></p><ol><li><p><strong>Length Check</strong>: Return false immediately if the lengths differ, as they cannot be anagrams.</p></li><li><p><strong>Frequency Counting</strong>: Iterate over both strings, counting characters using dictionaries.</p></li><li><p><strong>Comparison</strong>: Compare the two dictionaries; if they match, print "true", else "false".</p></li></ol><p>This approach ensures efficiency and clarity, especially when scaled to multiple test cases.</p><div><hr></div><h4><strong>Python Code</strong></h4><pre><code>def solve_anagrams():
    try:
        print("Anagram Verifier")
        print("----------------")
        print("Enter a number between 1 and 20 for anagram pairs to check")
        t = int(input())  # Number of anagram pairs to check 
        if not (1 &lt;= t &lt;= 20):
            return

        for _ in range(t):
            line = input().split()
            s1, s2 = line[0], line[1]

            # Step 1: Length check
            if len(s1) != len(s2):
                print("false")
                continue

            # Step 2: Build character frequency dictionaries
            count1, count2 = {}, {}
            for char in s1:
                count1[char] = count1.get(char, 0) + 1
            for char in s2:
                count2[char] = count2.get(char, 0) + 1

            # Step 3: Compare dictionaries
            print("true" if count1 == count2 else "false")
    except (IOError, ValueError):
        return

solve_anagrams()
</code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8qGP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8qGP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 424w, https://substackcdn.com/image/fetch/$s_!8qGP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 848w, https://substackcdn.com/image/fetch/$s_!8qGP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 1272w, https://substackcdn.com/image/fetch/$s_!8qGP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8qGP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png" width="1456" height="355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:355,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48089,&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://www.valuecurve.co/i/173099879?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.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_!8qGP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 424w, https://substackcdn.com/image/fetch/$s_!8qGP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 848w, https://substackcdn.com/image/fetch/$s_!8qGP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 1272w, https://substackcdn.com/image/fetch/$s_!8qGP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F900ab1df-4902-4c66-b3a2-1ea5cd1ae638_1460x356.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h4><strong>Practical Applications</strong></h4><p>This kind of string comparison has a wide range of uses. In security, anagram logic can help obscure data while preserving its verifiability. In games and puzzles, it&#8217;s a core mechanic for word challenges. In natural language processing, it helps in analyzing lexical variation and stylistic patterns. And in systems design, scrambling identifiers using anagram principles can enhance privacy without losing uniqueness.</p><p>While sorting both strings is also a valid method for checking anagrams, its performance degrades as input size grows. Sorting requires approximately <em>n &#215; log n</em> steps (<em>O(n log n) </em>for those familiar with the Big O notation<em> </em>), where <em>n</em> is the length of the string. Doubling the string length results in more than double the processing time. In contrast, counting character frequencies and comparing them takes only <em>O(n)</em> time, since it involves a single pass through each string. This linear-time approach is significantly faster and more scalable, making it the preferred method for high-performance applications.</p><p>To make the program more robust, it could be extended to handle cases such as Unicode or accented characters, which are common in multilingual datasets. From a performance standpoint, counting characters is generally more efficient than sorting, especially when dealing with long strings or large volumes of comparisons. For a cleaner implementation, Python&#8217;s <em>collections.counter </em>class offers a concise and powerful way to perform frequency-based comparisons with minimal code.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Setting Up Your AI Dev Environment]]></title><description><![CDATA[Visual Studio, Python, Claude CLI & GitHub]]></description><link>https://on.valuecurve.ai/p/setting-up-your-dev-environment</link><guid isPermaLink="false">https://on.valuecurve.ai/p/setting-up-your-dev-environment</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 07 Sep 2025 05:31:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!REm7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Getting started with AI development requires the right tools. This guide walks you through setting up a complete development environment on Mac, perfect for beginners looking to improve their AI fluency.</p><h4>1. Installing Visual Studio Code</h4><p>Visual Studio Code (VSCode) is a powerful, free code editor that's essential for development.</p><p><strong>Download and Install:</strong></p><ol><li><p>Visit <a href="https://code.visualstudio.com/">code.visualstudio.com</a></p></li><li><p>Click "Download for Mac"</p></li><li><p>Open the downloaded <code>.zip</code> file</p></li><li><p>Drag the Visual Studio Code app to your Applications folder</p></li><li><p>Launch VSCode from Applications or Spotlight</p></li></ol><p><strong>First Launch Setup:</strong></p><ul><li><p>VSCode may ask for permissions to access folders - click "Allow"</p></li><li><p>Install the Python extension by Microsoft from the Extensions panel (Cmd+Shift+X)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!REm7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!REm7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!REm7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!REm7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!REm7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!REm7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1681167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.co/i/172565957?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.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_!REm7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!REm7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!REm7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!REm7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F771270c2-71eb-4d4b-a563-eb69779bc139_1536x1024.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></figure></div></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><h4>2. Installing and Configuring Python</h4><p>Python is the most popular language for AI development, offering extensive libraries and frameworks.</p><p><strong>Install Python using Homebrew:</strong></p><ol><li><p>Open Terminal (press <code>Cmd+Space</code>, type "Terminal", press Enter)</p></li><li><p>First, install Homebrew (if not already installed):</p></li></ol><pre><code><code>/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</code></code></pre><ol start="3"><li><p>Install Python:</p></li></ol><pre><code><code>brew install python</code></code></pre><ol start="4"><li><p>Verify installation:</p></li></ol><pre><code><code>python3 --version
pip3 --version</code></code></pre><p><strong>Configure Python Environment:</strong></p><ol><li><p>In Terminal, create a virtual environment for your projects:</p></li></ol><pre><code><code>python3 -m venv ~/ai-projects</code></code></pre><ol start="2"><li><p>Activate the environment:</p></li></ol><pre><code><code>source ~/ai-projects/bin/activate</code></code></pre><ol start="3"><li><p>Install essential packages:</p></li></ol><pre><code><code>pip install jupyter pandas numpy matplotlib requests</code></code></pre><p><strong>VSCode Python Setup:</strong></p><ol><li><p>Open VSCode and press <code>Cmd+Shift+P</code></p></li><li><p>Type "Python: Select Interpreter"</p></li><li><p>Choose the interpreter from your virtual environment (<code>~/ai-projects/bin/python</code>)</p></li></ol><p><strong>Configure Shell Profile:</strong> In Terminal, add the virtual environment path to your shell profile for easy activation:</p><pre><code><code>echo 'alias activate-ai="source ~/ai-projects/bin/activate"' &gt;&gt; ~/.zshrc
source ~/.zshrc</code></code></pre><p>Now you can simply type <code>activate-ai</code> to activate your environment.</p><h4>3. Installing and Configuring Claude CLI</h4><p>Claude CLI enables direct interaction with Claude AI from your terminal, streamlining AI-assisted development.</p><p><strong>Installation:</strong></p><ol><li><p>In Terminal, install Node.js (required for Claude CLI):</p></li></ol><pre><code><code>brew install node</code></code></pre><ol start="2"><li><p>Install Claude CLI globally:</p></li></ol><pre><code><code>npm install -g @anthropic-ai/claude-cli</code></code></pre><p><strong>Configuration:</strong></p><ol><li><p>Get your API key from <a href="https://console.anthropic.com/">console.anthropic.com</a></p></li><li><p>In Terminal, configure Claude CLI:</p></li></ol><pre><code><code>claude configure</code></code></pre><ol start="3"><li><p>Enter your API key when prompted</p></li><li><p>Test the installation:</p></li></ol><pre><code><code>claude --version</code></code></pre><p><strong>Basic Usage:</strong></p><ul><li><p>Start a conversation: <code>claude chat</code></p></li><li><p>Get help with code: <code>claude "explain this Python function" &lt; myfile.py</code></p></li><li><p>Generate code: <code>claude "create a Python script to read CSV files"</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/p/setting-up-your-dev-environment?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://on.valuecurve.ai/p/setting-up-your-dev-environment?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></li></ul><h4>4. Configuring VSCode with GitHub</h4><p>GitHub integration enables version control and collaboration, essential skills for any developer.</p><p><strong>Install Git:</strong> In Terminal, run:</p><pre><code><code>brew install git</code></code></pre><p><strong>Configure Git:</strong> Still in Terminal:</p><pre><code><code>git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"</code></code></pre><p><strong>GitHub Authentication:</strong></p><ol><li><p>In Terminal, install GitHub CLI:</p></li></ol><pre><code><code>brew install gh</code></code></pre><ol start="2"><li><p>Authenticate with GitHub:</p></li></ol><pre><code><code>gh auth login</code></code></pre><ol start="3"><li><p>Follow the prompts to authenticate via browser</p></li></ol><p><strong>VSCode GitHub Setup:</strong></p><ol><li><p>Install the "GitHub Pull Requests and Issues" extension</p></li><li><p>Sign in to GitHub when prompted in VSCode</p></li><li><p>Open the Source Control panel (Cmd+Shift+G)</p></li></ol><p><strong>Creating Your First Repository:</strong></p><ol><li><p>Create a new folder for your project</p></li><li><p>Open it in VSCode: <code>File &gt; Open Folder</code></p></li><li><p>Initialize Git using VSCode's integrated terminal (`Ctrl+``):</p></li></ol><pre><code><code>git init</code></code></pre><ol start="4"><li><p>Create a proper <code>.gitignore</code> file in the VSCode terminal:</p></li></ol><pre><code><code># Create .gitignore with common exclusionscat &gt; .gitignore &lt;&lt; EOF# Virtual environmentsvenv/env/.env# Python__pycache__/*.pyc*.pyo.Python# IDEs.vscode/settings.json.DS_Store# API keys and secrets.env.localconfig/secrets.json# Jupyter Notebooks.ipynb_checkpoints/EOF</code></code></pre><ol start="5"><li><p>Create a README file and make your first commit</p></li><li><p>Push to GitHub using the Source Control panel</p></li></ol><p><strong>Environment Variables Setup:</strong> For secure API key management, create a <code>.env</code> file in the VSCode terminal (already in .gitignore):</p><pre><code><code># Create .env file for secrets
echo "ANTHROPIC_API_KEY=your_api_key_here" &gt; .env
</code></code></pre><p><strong>Next Steps</strong></p><p>This environment is optimized for AI development. The combination of VSCode's editing capabilities, Python's AI libraries, Claude CLI's assistance, and GitHub's collaboration tools provides everything needed to begin your AI fluency journey.</p><p>Remember to activate your Python virtual environment (<code>activate-ai</code> or <code>source ~/ai-projects/bin/activate</code>) each time you start a new terminal session for development work. Always keep sensitive information like API keys in <code>.env</code> files that are excluded from version control.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/p/setting-up-your-dev-environment/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://on.valuecurve.ai/p/setting-up-your-dev-environment/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[Build your AI Fluency using 4Ds Framework]]></title><description><![CDATA[AI Fluency: Framework & Foundations course by Anthropic]]></description><link>https://on.valuecurve.ai/p/build-your-ai-fluency-using-4ds-framework</link><guid isPermaLink="false">https://on.valuecurve.ai/p/build-your-ai-fluency-using-4ds-framework</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Wed, 03 Sep 2025 12:45:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!d0Cj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Anthropic has published a 4Ds Framework to enhance AI Fluency. Anthropic defines AI Fluency as the ability to work with AI systems in ways that are effective, efficient, ethical, and safe. In essence, AI Fluency is the model for human-AI interaction, and the 4Ds are the competencies required to build AI fluency. As AI tools become more powerful and pervasive, this simple framework aims to establish a baseline for how to think about and interact with AI responsibly.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>As AI solutions are being increasingly used to communicate, create, learn, and solve problems, the 4Ds framework is designed to help users engage with AI responsibly across all contexts and applications.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zso3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zso3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png 424w, https://substackcdn.com/image/fetch/$s_!zso3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png 848w, https://substackcdn.com/image/fetch/$s_!zso3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png 1272w, https://substackcdn.com/image/fetch/$s_!zso3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zso3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png" width="1456" height="767" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:767,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:393207,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.valuecurve.co/i/172457489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zso3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png 424w, https://substackcdn.com/image/fetch/$s_!zso3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png 848w, https://substackcdn.com/image/fetch/$s_!zso3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.png 1272w, https://substackcdn.com/image/fetch/$s_!zso3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e8d1d38-7f66-47ff-b22f-affaac409f3f_1698x895.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></figure></div><h4>Understanding AI Engagement Modes</h4><p>To understand how this framework applies across different use cases, it's helpful to examine how people currently engage with AI systems. Anthropic classifies existing AI solutions into three categories based on engagement patterns:</p><p><strong>Automation Mode</strong>: The AI completes specific tasks based on user instructions and works in automation mode.</p><p><strong>Augmentation Mode</strong>: AI is used as a brainstorming partner. User and AI collaborate as creative thinking and task execution partners.</p><p><strong>Agency Mode</strong>: Users configure AI to work independently on their behalf as an agent, establishing its knowledge and behavior patterns rather than just giving it specific tasks.</p><h4><strong>The 4Ds Framework</strong></h4><p>Regardless of which mode of AI engagement you choose, the 4Ds Framework provides essential competencies for responsible and effective collaboration. Each competency builds upon the others to create comprehensive AI fluency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d0Cj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d0Cj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png 424w, https://substackcdn.com/image/fetch/$s_!d0Cj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png 848w, https://substackcdn.com/image/fetch/$s_!d0Cj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!d0Cj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d0Cj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png" width="703" height="424.4072802197802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:879,&quot;width&quot;:1456,&quot;resizeWidth&quot;:703,&quot;bytes&quot;:346617,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://valuecurve.substack.com/i/172457489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!d0Cj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png 424w, https://substackcdn.com/image/fetch/$s_!d0Cj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png 848w, https://substackcdn.com/image/fetch/$s_!d0Cj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.png 1272w, https://substackcdn.com/image/fetch/$s_!d0Cj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0109e94-07cb-41aa-bbc7-1460eb1ba06e_1886x1138.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><strong>1. Delegation</strong></p><p>Delegation involves making thoughtful decisions about what work to do independently, what to do collaboratively with AI, and what to let AI handle autonomously, along with determining how to distribute these tasks effectively. This process begins with <strong>problem awareness</strong>, which means clearly understanding goals and the nature of the work before involving AI systems. <strong>Platform awareness</strong> involves understanding the capabilities and limitations of different AI systems to make informed choices about which tools to employ.<strong> Task delegation</strong> represents the strategic process of thoughtfully distributing work between humans and AI to leverage the unique strengths of each participant. Effective delegation requires both domain expertise and a comprehensive understanding of AI capabilities to create optimal partnerships. The ultimate goal is not to automate everything, but rather to create the most effective human-AI partnership for any given task or objective, ensuring that each participant contributes what they do best to achieve superior outcomes.</p><p><strong>2. Description</strong></p><p>Effective AI communication centers on creating a productive collaborative environment through three key types of description. <strong>Product description </strong>involves clearly defining desired outputs, format, target audience, and style preferences. <strong>Process description</strong> guides how the AI should approach requests, which can be as crucial as specifying the end goal itself. <strong>Performance description</strong> defines behavioral expectations, such as whether responses should be concise or detailed, challenging or supportive. Rather than treating AI systems as databases or vending machines, successful interaction recognizes them as interactive partners. Clear, upfront communication not only saves time but consistently leads to superior results.</p><p><strong>3. Discernment</strong></p><p>Discernment represents the ability to thoughtfully evaluate what AI produces, how it produces it, and how it behaves within collaborative interactions. This critical skill encompasses three distinct dimensions: <strong>Product discernment</strong> focuses on evaluating the quality of actual outputs, assessing factors such as accuracy, appropriateness, coherence, and relevance.<strong> Process discernment</strong> involves examining how the AI arrived at its output, identifying potential logical errors, attention gaps, or inappropriate reasoning patterns.<strong> Performance discernment</strong> evaluates how the AI behaves within the collaboration process itself, considering whether its communication style, terminology usage, and responsiveness effectively serve the user's needs<em>. Discernment operates in a continuous feedback loop with Description, creating an iterative process of communication and evaluation</em>. Even the most advanced AI systems benefit significantly from human judgment and oversight, making discernment an essential competency for effective human-AI collaboration. Users can develop this skill by practicing evaluation across all three dimensions, providing specific feedback to AI systems, and leveraging their domain expertise to identify strengths and weaknesses in AI-generated content.</p><p><strong>4. Diligence</strong></p><p>Diligence encompasses taking responsibility for AI collaborations across three critical dimensions.<strong> Creation diligence</strong> involves being thoughtful about which AI systems to use and how to engage with them appropriately. <strong>Transparency diligence </strong>means being honest about AI's role in work with everyone who needs to know, ensuring appropriate disclosure based on context. <strong>Deployment diligence</strong> requires taking responsibility for verifying and vouching for the outputs that are used or shared with others. Different contexts&#8212;whether personal, academic, or professional&#8212;may have varying expectations for disclosure and verification standards. Thoughtful application of diligence helps ensure that AI collaborations are not only effective and efficient, but also ethical and safe, creating a foundation for responsible AI use that considers both immediate outcomes and broader implications for stakeholders and society.</p><p><strong>Integrated Application</strong></p><p>The 4Ds work synergistically to create comprehensive AI fluency. Effective Delegation sets the foundation for appropriate task distribution, while clear Description ensures productive communication. Discernment provides the critical evaluation skills necessary for quality assurance, and Diligence ensures that all AI collaborations remain ethical, transparent, and responsible. Together, these competencies enable users to harness AI's capabilities while maintaining human judgment, oversight, and accountability.</p><div><hr></div><p><em>This course is developed by Rick Dakan and Joseph Feller, along with the Anthropic team. It's published on Anthropic's LMS Skilljar. You may access the course: <strong>AI Fluency: Framework &amp; Foundations</strong> <a href="https://anthropic.skilljar.com/ai-fluency-framework-foundations">here</a>. Additionally you may also read ValueCurve <a href="https://www.valuecurve.co/p/industry-frameworks">article </a>on the need for frameworks. </em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Understanding the Nature of Data Around Us # 2 ]]></title><description><![CDATA[Schema, Statistical Analysis & Pattern Recognition]]></description><link>https://on.valuecurve.ai/p/understanding-data-fundamentals-part</link><guid isPermaLink="false">https://on.valuecurve.ai/p/understanding-data-fundamentals-part</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 31 Aug 2025 14:15:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OHKx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>In <a href="https://valuecurve.substack.com/p/understanding-the-nature-of-data">Part 1</a>, we established that data is the new oil requiring systematic exploration, and we discovered the three fundamental structures  of information. Now let's understand how to organize this raw material and extract its intelligence through systematic analysis.The patterns we seek don't emerge by accident&#8212;they require deliberate frameworks and scientific approaches to surface and validate.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OHKx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OHKx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png 424w, https://substackcdn.com/image/fetch/$s_!OHKx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png 848w, https://substackcdn.com/image/fetch/$s_!OHKx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png 1272w, https://substackcdn.com/image/fetch/$s_!OHKx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OHKx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png" width="576" height="517.054945054945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1307,&quot;width&quot;:1456,&quot;resizeWidth&quot;:576,&quot;bytes&quot;:226030,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://valuecurve.substack.com/i/171856814?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.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_!OHKx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png 424w, https://substackcdn.com/image/fetch/$s_!OHKx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png 848w, https://substackcdn.com/image/fetch/$s_!OHKx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.png 1272w, https://substackcdn.com/image/fetch/$s_!OHKx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b239b6-71b6-441e-b455-3e9ef3c9d7f1_1632x1465.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></figure></div><h4>The Blueprint for Pattern Recognition</h4><p>Schema functions as an architectural blueprint that creates structured frameworks for data analysis. It provides a controlled framework necessary for consistent pattern recognition and replication. It's the difference between random observation and systematic discovery.</p><p><strong>The Conceptual Foundation</strong></p><p>Schema is the scientific method applied to data organization. It creates systematic classification frameworks that reveal underlying patterns in a data system.</p><p><strong>Core Principles:</strong></p><ul><li><p><strong>Standardization</strong>: Ensure consistent measurement and categorization</p></li><li><p><strong>Validation</strong>: Provide quality control for pattern reliability</p></li><li><p><strong>Relationships</strong>: Define how different data elements connect and influence each other</p></li><li><p><strong>Evolution</strong>: Allow systematic growth and refinement over time </p></li></ul><h4>The Pattern Framework Components</h4><p>To illustrate these principles in practice, consider a simple experiment tracking schema:</p><pre><code><code>CREATE TABLE ExperimentResults (
    experiment_id INT PRIMARY KEY,           -- Unique pattern identifier
    hypothesis VARCHAR(500) NOT NULL,       -- Pattern prediction
    measurement_value DECIMAL(10,4),        -- Quantified observation
    confidence_level DECIMAL(3,2),          -- Pattern certainty (0.00-1.00)
    observation_date TIMESTAMP              -- Temporal pattern marker
);
</code></code></pre><p>Schema validation operates through systematic constraint rules that ensure pattern reliability and scientific rigor. Measurement values must fall within established scientific ranges, while confidence levels represent statistical significance thresholds. Temporal markers enable time-series pattern analysis, while researcher notes preserve observational context.</p><p>Beyond individual data integrity, schema defines relationship patterns between different elements, creating interconnected networks that mirror complex interdependencies found in natural systems. Well-designed schemas capture the web of connections that exist in real-world phenomena, enabling analysts to discover systematic relationships that drive meaningful insights.</p><p><strong>Advanced Schema Architectures</strong></p><p>Modern data analysis requires hierarchical pattern recognition that operates simultaneously across multiple levels of abstraction. This multi-layered approach enables organizations to understand both granular individual behaviors and macro-level market dynamics within a single analytical framework.</p><p>The power of this approach lies in its ability to identify cross-level relationships. Individual preference evolution patterns can aggregate to reveal market-wide trend shifts, while competitive positioning data can help explain individual customer lifecycle transitions.</p><p><strong>How schema Enables AI/ML Development</strong></p><p>Effective schema design forms the foundation upon which modern AI and machine learning systems build their pattern recognition capabilities:</p><ol><li><p><strong>Consistent Pattern Input</strong>: Algorithms require predictable data formats to identify reliable patterns at scale.</p></li><li><p><strong>Validation Framework</strong>: Like peer review in scientific research, schema validation prevents unreliable data from corrupting pattern recognition processes.</p></li><li><p><strong>Scalable Processing</strong>: Well-designed schemas allow AI systems to process millions of data points while maintaining pattern recognition accuracy.</p></li><li><p><strong>Integration Capability</strong>: Schema standardization enables AI ecosystems where different systems can build upon each other's discoveries.</p></li><li><p><strong>Evolution Tracking</strong>: Documents how patterns change over time, enabling AI systems to adapt and improve their recognition capabilities.</p></li></ol><h4>Traditional Data Analysis</h4><p>Traditional data analysis represents the scientific method applied to pattern recognition&#8212;the systematic approach to extracting meaningful insights from structured observations. Rather than being obsolete in the age of AI, traditional analysis provides the foundational methods upon which modern AI/ML systems build.</p><p><strong>The Scientific Pattern Recognition Process</strong></p><p><strong>Hypothesis Formation</strong></p><p>Traditional data analysis starts with specific questions about patterns: "Do customers purchase more during certain seasons?" or "Can we predict equipment failure based on performance metrics?" This hypothesis-driven approach ensures analysis remains focused on meaningful patterns rather than random correlations.</p><p><strong>Systematic Observation</strong></p><p>Traditional analysis applies rigorous observation methods borrowed directly from experimental science: controlled data collection procedures, standardized measurement techniques, consistent categorization systems, and temporal pattern tracking.</p><p><strong>Pattern Quantification</strong></p><p>Mathematical methods quantify observed patterns with precision through descriptive statistics, correlation analysis, regression modelling, and time series analysis.</p><h4>Pattern Recognition Methods</h4><p><strong>Descriptive Analysis</strong></p><p>Descriptive analysis represents the archaeological phase of data exploration&#8212;understanding what patterns exist in current data before attempting to predict future outcomes. These descriptive patterns become the foundation for predictive modeling, revealing the data formations most likely to contain valuable predictive patterns.</p><p><strong>Comparative Analysis</strong></p><p>Comparative analysis identifies differences between groups or time periods to understand pattern variations and their underlying causes. This analysis reveals not just what patterns exist, but why they exist&#8212;enabling more sophisticated AI models that can account for causal relationships.</p><p><strong>Predictive Analysis</strong></p><p>Predictive analysis uses historical patterns to forecast future occurrences with quantified confidence levels, forming the bridge between traditional analysis and automated AI systems.</p><p>For example, a customer churn model might identify that usage decline greater than 40% indicates 75% churn probability within 90 days, while combined factor models can achieve 92% prediction accuracy. </p><p>These predictive models form the conceptual foundation that AI/ML algorithms later automate and scale. The traditional analysis establishes the logical framework, while AI systems provide the computational power to apply these frameworks across vast datasets in real-time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Understanding the Nature of Data Around Us]]></title><description><![CDATA[Structured, Unstructured and Semi-Structured Data]]></description><link>https://on.valuecurve.ai/p/understanding-the-nature-of-data</link><guid isPermaLink="false">https://on.valuecurve.ai/p/understanding-the-nature-of-data</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 24 Aug 2025 13:50:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dFNQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the current paradigm, data is the new oil and it requires mining &amp; exploration to make it valuable. Collecting data through observation &amp; experimentation is the crucible that defines scientific thinking. Data points of occurrences, characteristics or experiences form the basis of how machines learn using algorithms today.</p><p>The key aspect of collecting data is identifying patterns, hence similar to math or rules of grammar. Patterns, once known can be replicated for similar future results. Hence pattern recognition from existing data helps in predicting future occurrences.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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 ValueCurve! Subscribe for free to receive new posts .</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 class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dFNQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dFNQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png 424w, https://substackcdn.com/image/fetch/$s_!dFNQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png 848w, https://substackcdn.com/image/fetch/$s_!dFNQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png 1272w, https://substackcdn.com/image/fetch/$s_!dFNQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dFNQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png" width="626" height="452.73214285714283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1053,&quot;width&quot;:1456,&quot;resizeWidth&quot;:626,&quot;bytes&quot;:188504,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://valuecurve.substack.com/i/171663198?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dFNQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png 424w, https://substackcdn.com/image/fetch/$s_!dFNQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png 848w, https://substackcdn.com/image/fetch/$s_!dFNQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.png 1272w, https://substackcdn.com/image/fetch/$s_!dFNQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0a0a2df-a10a-439e-9ecb-15650cbeec7b_1884x1362.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></figure></div><h4>What is Data?</h4><p>To harness this digital oil effectively, we must first understand its fundamental nature. Data refers to facts, figures, or information collected for analysis. It represents observations or measurements that can be processed to extract insights, make decisions, or build models. Data can exist in various forms like numbers, text, images, or sounds.</p><p>Understanding data as a scientific tool is the skill that's fundamental to learning AI/ML development models, thereby its systems. Just as oil exists in different geological formations requiring different extraction methods, data comes in various forms and shapes, each demanding unique analytical approaches.</p><p><strong>Examples of data as pattern repositories:</strong></p><ul><li><p>Stock market fluctuations revealing economic cycles</p></li><li><p>Weather measurements showing seasonal patterns</p></li><li><p>Customer behavior data indicating purchasing trends</p></li><li><p>Medical records exposing disease progression patterns</p></li><li><p>Social media interactions demonstrating communication patterns</p></li></ul><p><strong>Three Data Types</strong></p><p>Data manifests in three fundamental architectures, each requiring different extraction and refinement techniques.</p><h4>1. Structured Data</h4><p>Structured data represents the most refined form of information organization, following strict organizational principles with precise, predictable rules.</p><p>Predictable format enables algorithmic pattern detection, allowing systems to automatically identify recurring structures and anomalies within the data. Consistent schema allows for mathematical operations to be performed reliably across datasets, ensuring that calculations and transformations maintain their integrity. Tabular organization facilitates statistical analysis by providing a structured framework where variables can be easily compared and measured. Additionally, relationships between data points are explicitly defined, making it possible to trace connections and dependencies throughout the entire dataset.</p><p><strong>Real-world Example:</strong></p><p>Consider how structured data reveals patterns in customer behavior through organized transaction records:</p><pre><code><code>Customer Transaction Patterns:
Customer_ID | Purchase_Date | Amount  | Product_Category | Season
    001     | 2024-01-15   | $150.00 | Electronics     | Winter
    001     | 2024-03-20   | $85.50  | Clothing        | Spring
    001     | 2024-07-10   | $220.00 | Sports          | Summer
</code></code></pre><p>This structure  reveals purchasing seasonality patterns - a machine learning algorithm can identify that Customer 001 increases spending in summer months, enabling predictive models for inventory and marketing.</p><h4>2. Unstructured Data</h4><p>Unstructured data represents information in its most natural, human-generated form. Like studying animal behavior in the wild rather than in controlled laboratory conditions, unstructured data captures the complexity and richness of real-world phenomena. This natural complexity presents unique analytical challenges that mirror the unpredictable nature of organic information flow.</p><p>Patterns exist in unstructured data but are embedded within intricate contexts, making them difficult to isolate and analyze without considering the surrounding environmental factors. Multiple pattern types can coexist in single data points, creating layered complexity where different analytical approaches may be needed to uncover each distinct pattern.</p><p>This multifaceted nature requires sophisticated algorithms to extract meaningful information, as traditional simple pattern matching techniques often prove inadequate for such elaborate data structures. Furthermore, the data contains both explicit and implicit information patterns, where some relationships are clearly visible while others remain hidden beneath the surface, requiring deeper analytical techniques to reveal their significance.</p><p>Mining unstructured data is like an exploration - valuable insights are buried beneath layers of complexity. Each document, image, or conversation contains multiple pattern layers that sophisticated AI systems can now excavate and analyze.</p><p><strong>Examples of Hidden Patterns:</strong></p><p>The complexity of unstructured data becomes evident when analyzing customer feedback:</p><pre><code><code>Customer Review Analysis:
"This smartphone camera is incredible! Battery life could be better though. 
After 6 months of heavy usage, still works great. Would recommend for photography 
enthusiasts but maybe not for heavy gamers due to heating issues."</code></code></pre><p><strong>Extractable Patterns:</strong></p><ul><li><p>Sentiment: Mixed (positive camera, negative battery)</p></li><li><p>Product lifecycle: 6-month durability confirmed</p></li><li><p>Product issues: Battery life and heating concerns</p></li><li><p>Recommendation pattern: Conditional endorsement</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/p/understanding-the-nature-of-data?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://on.valuecurve.ai/p/understanding-the-nature-of-data?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></li></ul><h4>3. Semi-Structured Data</h4><p>Semi-structured data represents a bridge between organized systems and natural complexity. Semi-structured data combines organizational elements with content variability such as an email or a log file entry below : </p><pre><code><code>Server logs often follow patterns like: 
[2024-08-24 14:30:15] ERROR user_id:12345 action:login_attempt ip:192.168.1.100 message:"Invalid password - 3rd attempt" 

structured timestamp and fields, but flexible message content.</code></code></pre><p>This hybrid approach offers significant pattern recognition advantages. Structural tags provide navigation markers that help both systems and users locate specific information within the data, creating a roadmap through otherwise complex content. Content remains flexible for natural expression, allowing information to maintain its original context and meaning while still being organized in a systematic way.</p><p>This approach achieves machine-readable organization with human-readable content, striking an optimal balance where automated systems can process the data efficiently while humans can still interpret and understand it intuitively. This dual accessibility enables both automated and manual pattern analysis, giving researchers and analysts the flexibility to choose the most appropriate analytical approach based on their specific needs and objectives.</p><p><strong>Key Insights</strong></p><ul><li><p>Data is pattern-rich information waiting to be discovered through systematic exploration</p></li><li><p>Different data types require different extraction techniques but serve the same pattern recognition purpose</p></li><li><p>Structured data provides immediate accessibility to pattern recognition algorithms</p></li><li><p>Unstructured data contains deeper insights but requires more sophisticated exploration methods</p></li><li><p>Semi-structured data offers balanced accessibility with rich contextual information.</p></li></ul><div><hr></div><p><em>Stay tuned for Part 2, where we'll uncover how proper organization and systematic analysis turn these data forms into the foundation of artificial intelligence.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Cybersecurity Framework 2.0]]></title><description><![CDATA[Cybersecurity Series]]></description><link>https://on.valuecurve.ai/p/cybersecurity-framework-20</link><guid isPermaLink="false">https://on.valuecurve.ai/p/cybersecurity-framework-20</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 17 Aug 2025 05:35:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!v6rk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>The NIST Cybersecurity Framework (CSF) 2.0, developed by the National Institute of Standards and Technology, represents an evolution in cybersecurity practices, aiming to provide a more comprehensive approach to cybersecurity risk management across all sectors, not limited to critical infrastructure.</em> </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>Here's a detailed explanation based on the general understanding and updates associated with CSF 2.0:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v6rk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v6rk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v6rk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v6rk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v6rk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v6rk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg" width="422" height="398.9720812182741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:745,&quot;width&quot;:788,&quot;resizeWidth&quot;:422,&quot;bytes&quot;:83623,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!v6rk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v6rk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v6rk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v6rk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0ff9110-b32b-4189-8456-fa31f79baeb0_788x745.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><p><strong>Core Functions of NIST CSF 2.0:</strong></p><ul><li><p><strong>Identify</strong>: This function involves understanding and managing cybersecurity risks in the context of the organization's mission, assets, data, and capabilities. It includes developing an organizational understanding, risk management strategy, and conducting a risk assessment.</p></li><li><p><strong>Protect</strong>: Focuses on developing and implementing appropriate safeguards to ensure delivery of critical infrastructure services. This includes identity management, access control, awareness and training, data security, information protection processes, and maintenance.</p></li><li><p><strong>Detect</strong>: Enhancements in CSF 2.0 might include more detailed practices for continuous security monitoring, which involves identifying the occurrence of a cybersecurity event. This function ensures timely detection of anomalies or incidents.</p></li><li><p><strong>Respond</strong>: This function outlines the activities an organization engages in when a cybersecurity incident is detected. CSF 2.0 could emphasize more on incident response planning, communication, analysis, and mitigation activities.</p></li><li><p><strong>Recover</strong>: It aims at restoring any capabilities or services that were impaired due to a cybersecurity incident. This involves recovery planning, improvements, and communications.</p></li></ul><p><strong>New Elements or Enhancements in CSF 2.0:</strong></p><ul><li><p><strong>Govern</strong>: While not explicitly mentioned in previous versions as a core function, discussions around CSF 2.0 have highlighted the importance of governance. This could include cybersecurity policies, processes, and procedures, which guide the organization's approach to managing cybersecurity risks.</p></li><li><p><strong>Implementation Guidance</strong>: There's a noted enhancement in providing more detailed implementation examples, which separates from the core framework, allowing for regular updates without revising the entire document.</p></li><li><p><strong>Profiles</strong>: Organizations create "Current" and "Target" Profiles to assess their cybersecurity maturity and alignment with business requirements. CSF 2.0 offers more nuanced guidance on creating these Profiles, emphasizing how they can be used to drive cybersecurity improvements.</p></li><li><p><strong>Tiers</strong>: These help in understanding the organization's cybersecurity risk management practices' sophistication. CSF 2.0 refines how these Tiers are evaluated, possibly integrating more real-world scenarios or industry-specific nuances.</p></li><li><p><strong>Risk-Based Approach with Emphasis on Outcomes</strong>: While maintaining its core risk-based approach, CSF 2.0 focuses more on outcomes rather than prescriptive methods, allowing organizations to innovate within their cybersecurity strategies.</p></li></ul><p><strong>Community and Organizational Profiles:</strong></p><ul><li><p>CSF 2.0 introduces or elaborates on the concept of Organizational and Community Profiles. Organizational Profiles help in aligning cybersecurity activities with organizational goals, while Community Profiles assist in sharing cybersecurity practices across similar sectors or communities, fostering a collective approach to cybersecurity.</p></li></ul><p><strong>Key Considerations:</strong></p><ul><li><p><strong>Scalability</strong>: One of the strengths of CSF 2.0 is its scalability, applicable from small businesses to large enterprises across different sectors, which are reflected in tailored guidance or examples within the framework.</p></li><li><p><strong>Flexibility</strong>: The framework continues to be voluntary, encouraging adaptation rather than strict compliance, which is crucial for its global acceptance and implementation.</p></li><li><p><strong>Continuous Improvement</strong>: There's an implicit push in CSF 2.0 towards viewing cybersecurity as a continuous process, not a one-time setup, which aligns with the evolving nature of cyber threats.</p></li></ul><p>The NIST CSF 2.0, through these enhancements, aims to provide a more adaptable, scalable, and actionable framework for managing cybersecurity risks, reflecting the dynamic nature of cyber threats and technological advancements. This version likely encourages organizations not only to secure their environments but also to engage in governance that promotes a culture of cybersecurity awareness and proactive risk management.</p><p>For more details visit : <a href="https://www.nist.gov/cyberframework/quick-start-guides">NIST</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Machine Learning is an Iterative Process]]></title><description><![CDATA[Make your ML Systems SMART]]></description><link>https://on.valuecurve.ai/p/machine-learning-is-an-iterative</link><guid isPermaLink="false">https://on.valuecurve.ai/p/machine-learning-is-an-iterative</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Tue, 05 Aug 2025 17:02:36 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e3d574ab-be72-4097-9d98-32f8e35e838e_796x661.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em><strong>Machine Learning (ML) Systems</strong> in the real world, ought to be mapped to the business outcomes. Successful projects have clearly defined business objective(s) &amp; these business objectives can often be conflicting. Businesses often face the challenge that improving one metric directly worsens the other - there's no technical solution that can simultaneously maximise both objectives perfectly.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>Banks have to find the optimal balance point based on their risk tolerance, customer base, and competitive position. The other case in point is the display of recommendation engines that drive user engagement &amp; display ad revenue. Engagement-optimized models tend to promote p<strong>olarizing, sensationalist, or addictive content</strong>, even if it's borderline misinformation or emotionally manipulative.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37a272e5-3741-43a8-975e-88ead6621e30_2947x2121.jpeg&quot;},{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4a50f55-301d-4a71-a89d-34ecdabafbe8_796x661.png&quot;}],&quot;caption&quot;:&quot;Business Goals &amp; ML Iterative Process&quot;,&quot;alt&quot;:&quot;&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/png&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5340161-67af-43ec-b7b3-f126efe9ab4e_1456x720.png&quot;}},&quot;isEditorNode&quot;:true}"></div><h4>Smart Systems</h4><p>Nevertheless, it's expected of any production ML system to display following characteristics :</p><p><strong>Scalability : </strong>ML Models can grow complex fairly quickly. It can be because the number of parameters used to make predictions has increased from 100 million to a Billion. The data volumes have increased due to increased user traffic or there's the addition of more features. ML Systems should be able to Scale up as well as scale down in terms of resource requirements such as CPU, GPU, Memory and network bandwidth, they should also be able to handle growth in the number of ML models or algorithms designed to meet various business objectives that scale out .</p><p><strong>Maintainability :</strong> As the system &amp; the underlying infrastructure grows and increases in complexity, these should be maintained with the help of documentation, code review processes, data cleansing and versioning of artefacts. As the standards, teams and operations grow, regularly carrying out maintenance activities, training of team members and refactoring of the code should be conducted.</p><p><strong>Adaptability :</strong> Systems should have the capacity to discover performance management and updates without service interruption. Cloud-based platforms like AWS SageMaker, Google Cloud AI, and Azure ML implement blue-green deployments and rolling updates that maintain service continuity during model transitions. These systems actively monitor model performance metrics and can detect degradation through automated alerts, though they typically require human intervention for complex decision-making. Production systems at companies like Netflix and Uber showcase gradual traffic shifting between model versions, allowing new models to be tested on small user segments before full rollout.</p><p><strong>Reliability :</strong> System reliability is paramount in production ML environments, requiring robust design that maintains functionality despite various failure modes.</p><p>The system must gracefully handle hardware failures through redundancy and failover mechanisms, ensuring continuous operation when servers crash or network connections drop. Software faults, including bugs in code updates or dependency conflicts, should be contained through proper error handling and rollback capabilities. Human errors, such as incorrect configuration changes or accidental data deletions, need safeguards like automated backups, configuration validation, and staged deployment processes.</p><p>By implementing comprehensive fault tolerance, monitoring systems, and recovery procedures, ML systems can maintain their desired performance levels and continue delivering accurate predictions even when facing unexpected adversities, ensuring business continuity and user trust.</p><h4>Iterative Process</h4><p>Deploying an ML system marks the beginning, not the end, of its lifecycle. Unlike traditional software that remains relatively stable post-deployment, ML systems require continuous iteration due to their dynamic nature. Real-world data constantly evolves, causing model performance to degrade over time through data drift and concept shifts. Production deployment reveals new edge cases, user behaviours, and system bottlenecks that weren't apparent during development.</p><p>Teams must establish robust monitoring frameworks to track model accuracy, latency, and business metrics in real-time. Regular retraining with fresh data, feature engineering improvements, and architecture optimizations become essential maintenance tasks. This iterative approach ensures the system adapts to changing conditions, maintains reliability, and continues delivering business value throughout its operational lifetime.</p><p>For additional reading, refer : <strong>Designing Machine Learning Systems</strong> by <strong><a href="https://huyenchip.com">Chip Huyen</a></strong> .</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.valuecurve.co/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[Explainer : Basics of Cryptography]]></title><description><![CDATA[Cryptography 101 - What is Cryptography ?]]></description><link>https://on.valuecurve.ai/p/explainer-basics-of-cryptography</link><guid isPermaLink="false">https://on.valuecurve.ai/p/explainer-basics-of-cryptography</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Sun, 27 Jul 2025 05:38:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pxU8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>As a Technology Management professional - I must confess I&#8217;ve been a little bit behind the curve when it comes to understanding Cryptocurrencies. To a certain extent that&#8217;s deliberate, given the hype &amp; marketing cliches that surround any new technology , it takes a while to ascertain if the <strong>new</strong> is another gimmick or a mind bending disruption on the horizon . While the jury is still out on the efficacy of cryptocurrencies - especially the question, do they provide any value in the real world - I think it is pertinent though to understand the basics that make Blockchain, as a technology &amp; Token Economy possible.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>I realize, I&#8217;ve already mentioned some of the terms that sound geek ( or Greek &amp; Latin if you prefer that ). In this article I discuss the basics of Cryptography &amp; my source is the book <a href="https://www.amazon.in/Basics-Bitcoins-Blockchains-Antony-Lewis/dp/1642503436/ref=sr_1_3?keywords=the+basics+of+bitcoins+and+blockchains&amp;qid=1660372358&amp;sprefix=The+Basics+of+b%2Caps%2C415&amp;sr=8-3">The Basics of Bitcoin &amp; Blockchains by Antony Lewis.</a></p><p>Let&#8217;s begin by understanding what&#8217;s <em><strong>Cryptography</strong></em> ?</p><p>Cryptography is all about sending <em><strong>secret messages</strong></em> that can be read only by the <em><strong>intended recipient. </strong></em>Now, when the messages are shared over the internet its&#8217; not very difficult for eavesdroppers to snoop on the messages. More so if the information has financial implications, such as, if Alif is transferring electronic money to Behrouz - he wouldn&#8217;t want Sasha, Saha or Sahira to know the amount of money that has been transferred or may be even the information that he has transferred anything at all for that matter.</p><p>How does one achieve this over the internet or any network of computers that are interconnected?</p><p>To achieves this, a message is <em><strong>encrypted </strong></em>mathematically using software programs by the <em><strong>originator</strong></em> . Once these messages are received by the <em><strong>recipient</strong></em> these are <em><strong>decrypted</strong></em> .</p><p>In a nutshell :</p><blockquote><p><em><strong>Encryption</strong></em> is the process of turning a <em><strong>plaintext</strong> </em>(i.e., readable ) human message into <em><strong>cyphertext</strong>, </em>so that if the encrypted message is intercepted a snooper can&#8217;t understand it.</p><p><em><strong>Decryption</strong></em> is the process of turning the <em><strong>cyphertext</strong></em> back into <em><strong>readable </strong></em>plaintext.</p></blockquote><p>This process of <em><strong>encryption</strong></em> &amp; <em><strong>decryption </strong></em>is <em><strong>Cryptography</strong></em> .</p><h4><strong>There are 3 main components in Cryptography:</strong></h4><ol><li><p>Key Pair</p></li><li><p>Hashing</p></li><li><p>Digital Signature</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pxU8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pxU8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png 424w, https://substackcdn.com/image/fetch/$s_!pxU8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png 848w, https://substackcdn.com/image/fetch/$s_!pxU8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png 1272w, https://substackcdn.com/image/fetch/$s_!pxU8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pxU8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png" width="606" height="373.3392857142857" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:897,&quot;width&quot;:1456,&quot;resizeWidth&quot;:606,&quot;bytes&quot;:113710,&quot;alt&quot;:&quot;&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!pxU8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png 424w, https://substackcdn.com/image/fetch/$s_!pxU8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png 848w, https://substackcdn.com/image/fetch/$s_!pxU8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.png 1272w, https://substackcdn.com/image/fetch/$s_!pxU8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F238309ee-f9f5-44b5-a94c-5b84066da832_1946x1199.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><em>                                              <a href="https://jwcn-eurasipjournals.springeropen.com/articles/10.1186/s13638-020-01665-w">(image source : SpringerOpen)</a></em></p><p>Let&#8217;s look at each of these components in detail :</p><h4><strong>Key Pair</strong></h4><p>A key pair consists of two mathematically linked keys : a <em><strong>public</strong></em> <em><strong>key</strong></em> &amp; a <em><strong>private</strong></em> <em><strong>key</strong></em> . Public key can be shared with the world &amp; anyone can use it to encrypt messages for you. The private key is known only to you to decrypt those messages .</p><p><em><strong>PGP</strong></em> ( Pretty Good Privacy ) is a scheme developed in the 1990&#8217;s for encrypting, decrypting and digitally signing email messages.</p><p>Bitcoin uses a different scheme called <em><strong>ECDSA</strong></em> - Elliptic Curve Digital Signature Algorithm .</p><h4><strong>Hashing</strong></h4><p>A hash function is a series of mathematical steps or algorithms that you an perform on some input data, resulting in a <em><strong>fingerprint</strong></em>, or <em><strong>digest</strong></em>, or simply, a <em><strong>hash</strong></em> .</p><p>A cryptographic hash function is special &amp; has some characteristics that makes it useful in cryptography &amp; for cryptocurrencies - such as ;</p><ul><li><p>It is deterministic - so the same message always results in the same hash .</p></li><li><p>It&#8217;s quick to compute.</p></li><li><p>It&#8217;s not feasible to generate a message from its hash .</p></li><li><p>A small change to a message should change the hash value extensively so that the new hash value appears uncorrelated with the old hash value .</p></li></ul><h4><strong>Digital Signatures</strong></h4><p>A digital signature is created by taking the message you want to sign and applying a mathematical formula with your private key . Anyone who knows your public key can mathematically verify the that this signature was indeed created by the holder of the associated private key ( but without the knowing the private key ) .</p><p>So, anyone can independently validate that this piece of data was signed by the private key holder of this public key .</p><blockquote><h5><strong>Message ( Digest Function/ Hash ) + Private Key &#8594; Digital Signature</strong></h5><h5><strong>Message + Digital Signature + Public Key &#8594; Valid/ Invalid</strong></h5></blockquote><p>Digital Signatures are a subset of e-signatures &amp; are used in blockchain transactions because they prove account ownership, and the validity of a digital signature can be proven mathematically and offline, without asking any other party.</p><p>There is more to discuss on the topic of cryptocurrencies, that we shall in near future. If you have more book or research articles references to share, please post them in comments.</p><p>P.S : Antony Lewis recommends reading <a href="https://www.amazon.in/Crypto-Government-Saving-Privacy-Digital-Penguin/dp/0140244328/ref=sr_1_1?crid=3MHSEJ2QIBXM8&amp;keywords=crypto+by+steven+levy&amp;qid=1660374776&amp;s=books&amp;sprefix=crypto+by+steve+levy%2Cstripbooks%2C243&amp;sr=1-1">Steven Levy&#8217;s book Crypto</a> to learn the in-depth story of PGP.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share ValueCurve&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://on.valuecurve.ai/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share ValueCurve</span></a></p>]]></content:encoded></item><item><title><![CDATA[CodeRabbit : Automating the Code Review ]]></title><description><![CDATA[AI tool for Code Review]]></description><link>https://on.valuecurve.ai/p/coderabbit-automating-the-code-review</link><guid isPermaLink="false">https://on.valuecurve.ai/p/coderabbit-automating-the-code-review</guid><dc:creator><![CDATA[Sarfaraz Mulla]]></dc:creator><pubDate>Thu, 24 Jul 2025 10:57:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7G7Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h4><strong>Code Reviewer</strong></h4><p>In the evolving landscape of developer tooling, <a href="https://www.coderabbit.ai">CodeRabbit.ai</a> automates the manual, tedious process&#8212;<strong>code review</strong>. Founded in 2023 and headquartered in Walnut Creek, California, the company has gained traction among open-source communities and enterprise teams looking to streamline their Git workflows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7G7Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7G7Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png 424w, https://substackcdn.com/image/fetch/$s_!7G7Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png 848w, https://substackcdn.com/image/fetch/$s_!7G7Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!7G7Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7G7Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Introduction | CodeRabbit&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="Introduction | CodeRabbit" title="Introduction | CodeRabbit" srcset="https://substackcdn.com/image/fetch/$s_!7G7Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png 424w, https://substackcdn.com/image/fetch/$s_!7G7Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png 848w, https://substackcdn.com/image/fetch/$s_!7G7Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!7G7Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4870b166-d966-4313-a097-c6aa19efe0ca_2400x1260.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></figure></div><p>CodeRabbit is an <a href="https://docs.coderabbit.ai/changelog/">agentic code review platform</a> designed to understand context, syntax, and intent across pull requests. With features like <strong>line-by-line review</strong>, s<strong>emantic summaries,</strong> <strong>bug detection</strong>, and <strong>one-click fixes</strong>, CodeRabbit integrates seamlessly into platforms such as GitHub, GitLab, Azure DevOps, and Bitbucket.</p><p>It has earned adoption across projects like <a href="https://github.com/coderabbitai/awesome-coderabbit">NextUI</a>, <a href="https://github.com/coderabbitai/awesome-coderabbit">Novu</a>, Appsmith, and Pipedream, while boasting over 600 paying organizations and 300K+ PRs reviewed. The platform recently raised $16M Series A round (led by CRV and <a href="https://resources.coderabbit.ai/newsroom/series-a-funding-by-crv">Flex Capital</a>) pushing its total funding to $19.6 million, that marks a significant milestone for a company barely two years old.</p><p>Unlike code editors such as <a href="https://cursor.com/agents">Cursor AI</a>, which focus on the developmental side of coding through autocomplete and natural language prompts, CodeRabbit is focused on <strong>quality assurance, performance, and editorial coherence</strong>. While Cursor AI enhances coding experience as an IDE built on <strong>VS Code</strong>, CodeRabbit acts like a  reviewer&#8212;offering <strong>security insights</strong> via <strong>Semgrep</strong>, <strong>sprint summaries</strong>, and c<strong>hangelog generation</strong> that tie directly into branching architecture.</p><h4><strong>Workflow</strong></h4><p>At the heart of CodeRabbit&#8217;s workflow lies the <strong>pull request (PR)</strong>&#8212;a formal mechanism for proposing changes to codebases hosted on Git platforms. PRs allow developers to merge branches after peer review, often triggering automated CI/CD tests, security scans, and performance evaluations. CodeRabbit enhances this process by integrating AI-driven feedback that mimics senior developer insight&#8212;making suggestions, highlighting inconsistencies, and even learning team preferences over time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3kO6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3kO6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 424w, https://substackcdn.com/image/fetch/$s_!3kO6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 848w, https://substackcdn.com/image/fetch/$s_!3kO6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 1272w, https://substackcdn.com/image/fetch/$s_!3kO6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3kO6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png" width="1456" height="735" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7224f628-679b-459c-b704-ab26025cac35_1640x828.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:735,&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;: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_!3kO6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 424w, https://substackcdn.com/image/fetch/$s_!3kO6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 848w, https://substackcdn.com/image/fetch/$s_!3kO6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 1272w, https://substackcdn.com/image/fetch/$s_!3kO6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7224f628-679b-459c-b704-ab26025cac35_1640x828.png 1456w" sizes="100vw"></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 process:</p><ol><li><p>Create a feature branch.</p></li><li><p>Commit changes.</p></li><li><p>Push to a remote repository.</p></li><li><p>Open a pull request.</p></li><li><p>Discuss, review, iterate.</p></li><li><p>Merge once approved.</p></li></ol><p>By streamlining this cycle, CodeRabbit helps developers catch bugs earlier, adhere to style guidelines, and reduce the review burden that slows down deployment velocity.</p><h4><strong>Smart Fit</strong></h4><p>As development teams grow, staying on top of code quality, consistency, and collaboration becomes a real challenge. That&#8217;s where CodeRabbit steps in&#8212;automating the repetitive parts of code review adding human-like insight across Git workflows.</p><p>CodeRabbit makes it easier to:</p><ul><li><p><strong>Speed up code reviews</strong> without sacrificing quality</p></li><li><p><strong>Catch bugs early</strong> with AI-powered scanning</p></li><li><p><strong>Generate release notes</strong> and team summaries directly from pull requests</p></li><li><p><strong>Enforce consistent standards</strong> across different branches and collaborators</p></li><li><p><strong>Learn team preferences over time</strong>, so feedback gets more relevant</p></li></ul><p>It's especially helpful while using platforms like GitHub, GitLab, or Azure DevOps, and developers want a tool that works <em>with</em> their existing branching strategies and CI/CD pipelines. CodeRabbit helps remove the review bottleneck and ship the code faster. </p><p>If you&#8217;ve worked with CodeRabbit&#8212;or any similar platform focused on code review automation&#8212;feel free to share your experience in the comments. Whether you&#8217;ve found particular features useful or encountered limitations, your feedback can help others explore how these tools fit into different team structures and development workflows.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://on.valuecurve.ai/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://on.valuecurve.ai/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>