<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Surya Sekhar Datta on Medium]]></title>
        <description><![CDATA[Stories by Surya Sekhar Datta on Medium]]></description>
        <link>https://medium.com/@suryasekhar?source=rss-c960736ed347------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*JW2AdceZuAqmiSRQ-oHY7g.jpeg</url>
            <title>Stories by Surya Sekhar Datta on Medium</title>
            <link>https://medium.com/@suryasekhar?source=rss-c960736ed347------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 19 May 2026 04:00:45 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@suryasekhar/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Scaling AWS RDS PostgreSQL with a PgBouncer Connection Pooler Proxy on EC2]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/scaling-aws-rds-postgresql-with-a-pgbouncer-connection-pooler-proxy-on-ec2-4bb8f53d5e8b?source=rss-c960736ed347------2"><img src="https://cdn-images-1.medium.com/max/1408/1*KuXTMDeTWnQxvCblHa_xhQ.png" width="1408"></a></p><p class="medium-feed-snippet">A step-by-step guide to setting up production-grade connection pooling for your PostgreSQL database on AWS &#x2014; without paying for managed&#x2026;</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/scaling-aws-rds-postgresql-with-a-pgbouncer-connection-pooler-proxy-on-ec2-4bb8f53d5e8b?source=rss-c960736ed347------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/scaling-aws-rds-postgresql-with-a-pgbouncer-connection-pooler-proxy-on-ec2-4bb8f53d5e8b?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/4bb8f53d5e8b</guid>
            <category><![CDATA[vercel]]></category>
            <category><![CDATA[database]]></category>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[aws-rds]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Thu, 09 Apr 2026 07:16:44 GMT</pubDate>
            <atom:updated>2026-04-09T07:23:35.479Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Self-Hosting n8n on AWS with EKS and Postgres]]></title>
            <link>https://medium.com/renben-technologies/self-hosting-n8n-on-aws-with-eks-and-postgres-3c174167e790?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/3c174167e790</guid>
            <category><![CDATA[automation]]></category>
            <category><![CDATA[n8n]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Sat, 17 Jan 2026 05:39:39 GMT</pubDate>
            <atom:updated>2026-01-17T05:39:39.901Z</atom:updated>
            <content:encoded><![CDATA[<p>Self-hosting <strong>n8n</strong> on Amazon Web Services gives you full control over your automation infrastructure, scalability, and data. While AWS offers multiple hosting options, this guide focuses on running n8n on <strong>Amazon EKS (Elastic Kubernetes Service)</strong> with <strong>PostgreSQL</strong> as a persistent database backend.</p><p>This approach introduces more operational complexity than a single VM setup, but it is the most robust option if you expect growth, higher execution volume, or need production-grade reliability.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7D-ULseF88rAdhLuSoXTTA.png" /><figcaption>Thumbnail Image (AI Generated)</figcaption></figure><h3>Why EKS + Postgres?</h3><p>Before diving into setup, it’s important to understand the architectural choices.</p><h3>Why Kubernetes (EKS)?</h3><ul><li>Horizontal scalability as the workload grows</li><li>Declarative infrastructure with versioned manifests</li><li>Better fault tolerance and restart guarantees</li><li>Easier future expansion (workers, queues, HA setups)</li></ul><h3>Why Postgres instead of SQLite?</h3><p>SQLite works for small, single-node setups, but breaks down quickly in real deployments.</p><p>Postgres gives you:</p><ul><li>Concurrent access safety</li><li>Better performance under load</li><li>Durability across pod restarts</li><li>A clear path to scaling n8n horizontally</li></ul><p>Persistent storage becomes <strong>non-negotiable</strong> once you move beyond experimentation.</p><h3>Prerequisites</h3><p>You’ll need the following tools installed and configured:</p><ul><li>AWS account with sufficient permissions</li><li>AWS CLI (configured with credentials)</li><li>eksctl</li><li>kubectl</li><li>Git</li></ul><p>You should already be comfortable with:</p><ul><li>Kubernetes concepts (pods, services, volumes)</li><li>Containerized applications</li><li>Basic AWS networking</li></ul><h3>Creating the EKS Cluster</h3><p>Use eksctl to provision a Kubernetes cluster:</p><pre>eksctl create cluster --name n8n --region &lt;your-aws-region&gt;</pre><p>Cluster creation takes several minutes. Once complete, kubectl will automatically be configured to use this cluster context.</p><h3>Cloning the n8n Kubernetes Manifests</h3><p>n8n provides a reference repository containing Kubernetes manifests for production setups.</p><pre>git clone https://github.com/n8n-io/n8n-hosting.git<br>cd n8n-hosting/kubernetes</pre><p>This directory contains manifests for:</p><ul><li>Namespace creation</li><li>Postgres deployment and service</li><li>n8n deployment and service</li><li>Persistent volume claims</li><li>Secrets</li></ul><h3>Configuring Postgres with Persistent Storage</h3><h4>Why Persistent Volumes Matter</h4><p>Kubernetes pods are ephemeral by design. Without persistent volumes:</p><ul><li>A Postgres pod restart wipes your database</li><li>n8n loses workflows, credentials, and execution history</li></ul><p>To prevent this, Postgres must be backed by an AWS EBS volume.</p><h4>Storage Class</h4><p>The default AWS gp3 Storage class is a solid choice for Postgres workloads.</p><p>In postgres-claim0-persistentvolumeclaim.yaml:</p><pre>spec:<br>  storageClassName: gp3<br>  accessModes:<br>    - ReadWriteOnce</pre><p>This ensures:</p><ul><li>Data survives pod restarts</li><li>Storage is attached to exactly one node at a time (required by EBS)</li></ul><h3>Postgres Environment Variables</h3><p>Postgres requires credentials and database configuration passed as environment variables.</p><p>The postgres-secret.yaml file contains placeholders. You <strong>must</strong> replace these with your hosted Postgres credentials:</p><ul><li>POSTGRES_USER – root/admin user</li><li>POSTGRES_PASSWORD</li><li>POSTGRES_DB</li><li>POSTGRES_NON_ROOT_USER</li><li>POSTGRES_NON_ROOT_PASSWORD</li></ul><h4>Why Two Users?</h4><ul><li>The <strong>root user</strong> is used for initialization and administration</li><li>The <strong>non-root user</strong> is what n8n uses at runtime</li></ul><p>This follows best practices:</p><ul><li>Reduced blast radius if credentials leak</li><li>Lower risk of accidental schema or system damage</li></ul><p>The postgres-deployment.yaml manifest injects these values into the container securely.</p><h3>Configuring n8n Persistent Storage</h3><h3>File Storage Volume</h3><p>While n8n can technically run without persistent storage, doing so is risky.</p><p>Persistent storage is required to:</p><ul><li>Preserve uploaded files</li><li>Store the encryption key file generated on startup</li><li>Avoid credential invalidation after restarts</li></ul><p>The n8n-claim0-persistentvolumeclaim.yaml creates this volume, which is mounted in n8n-deployment.yaml:</p><pre>volumes:<br>  - name: n8n-claim0<br>    persistentVolumeClaim:<br>      claimName: n8n-claim0</pre><p>This ensures n8n behaves like a stateful application rather than a disposable container.</p><h3>Resource Configuration</h3><p>Kubernetes allows you to define resource <strong>requests</strong> and <strong>limits</strong> per pod.</p><p>From n8n-deployment.yaml:</p><pre>resources:<br>  requests:<br>    memory: &quot;250Mi&quot;<br>  limits:<br>    memory: &quot;500Mi&quot;</pre><p>This configuration:</p><ul><li>Guarantees a minimum memory allocation</li><li>Prevents runaway memory usage</li><li>Leaves CPU scheduling to Kubernetes</li></ul><h3>Reference: n8n Cloud Resource Profiles</h3><ul><li>Start: ~320MB RAM</li><li>Pro (10k executions): ~640MB RAM</li><li>Pro (50k executions): ~1280MB RAM</li></ul><p>Adjust these values based on your workload and node size.</p><h3>Environment Variables for n8n</h3><p>n8n behavior is largely controlled through environment variables.</p><p>Create an n8n-secret.yaml file and define:</p><ul><li>Database connection details</li><li>Encryption key</li><li>Base URL</li><li>Execution mode</li><li>Security-related flags</li></ul><p>Refer to the official n8n environment variable documentation for a full list.</p><h3>Deploying to the Cluster</h3><p>Apply all manifests:</p><pre>kubectl apply -f .</pre><p>If you see a namespace error, apply it explicitly:</p><pre>kubectl apply -f namespace.yaml<br>kubectl apply -f .</pre><p>This creates:</p><ul><li>The n8n namespace</li><li>Postgres deployment + service</li><li>n8n deployment + service</li><li>Persistent volumes and secrets</li></ul><h3>Exposing n8n via Load Balancer</h3><p>The n8n-service.yaml exposes n8n on port 5678 using a Kubernetes LoadBalancer.</p><p>To find the public endpoint:</p><ol><li>Open the EKS cluster in the AWS console</li><li>Go to <strong>Resources → Services</strong></li><li>Select the n8n service</li><li>Copy the <strong>Load balancer URL</strong></li></ol><p>Point your DNS subdomain to this address.</p><h3>Important: HTTP vs HTTPS</h3><p>The example manifests expose <strong>HTTP only</strong>.</p><p>AWS may show an HTTPS URL for the load balancer, but this will fail unless TLS is explicitly configured.</p><p>For now:</p><ul><li>Access n8n using <a href="http://your-subdomain:5678">http://your-subdomain:5678</a></li><li>Add TLS later using an Ingress + cert-manager if needed</li></ul><h3>Cleaning Up</h3><p>To delete all Kubernetes resources created by this setup:</p><pre>kubectl delete -f .</pre><p>To fully remove the cluster:</p><pre>eksctl delete cluster --name n8n</pre><h3>Final Thoughts</h3><p>Running n8n on EKS with Postgres is not the simplest way to get started, but it is the <strong>most future-proof</strong>.</p><p>You gain:</p><ul><li>Durable workflow storage</li><li>Safe restarts and upgrades</li><li>Horizontal scalability</li><li>Clear separation between application and data</li></ul><p>If you’re serious about running n8n in production, persistent Postgres storage is not optional — it’s foundational.</p><p>At <a href="https://renben.tech/"><strong>Renben Technologies</strong></a>, we help businesses design and deploy <strong>AI-first workflows</strong> that go beyond simple automation. By combining tools like n8n with scalable cloud architectures and custom AI integrations, we turn fragmented processes into reliable, production-ready systems that deliver real business impact.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3c174167e790" width="1" height="1" alt=""><hr><p><a href="https://medium.com/renben-technologies/self-hosting-n8n-on-aws-with-eks-and-postgres-3c174167e790">Self-Hosting n8n on AWS with EKS and Postgres</a> was originally published in <a href="https://medium.com/renben-technologies">Renben Technologies</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using IndexedDB with React/Next.js (How to Use Dexie.js)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/using-indexeddb-with-react-next-js-how-to-use-dexie-js-a256934ffef7?source=rss-c960736ed347------2"><img src="https://cdn-images-1.medium.com/max/1376/1*PPbbcmDKnwNt9Txs2UcZGA.jpeg" width="1376"></a></p><p class="medium-feed-snippet">Building reliable offline-first workflows using IndexedDB and Dexie.js in React and Next.js.</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/using-indexeddb-with-react-next-js-how-to-use-dexie-js-a256934ffef7?source=rss-c960736ed347------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/using-indexeddb-with-react-next-js-how-to-use-dexie-js-a256934ffef7?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/a256934ffef7</guid>
            <category><![CDATA[data-synchronization]]></category>
            <category><![CDATA[nextjs]]></category>
            <category><![CDATA[indexeddb]]></category>
            <category><![CDATA[offline-first]]></category>
            <category><![CDATA[react]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Thu, 04 Dec 2025 06:31:38 GMT</pubDate>
            <atom:updated>2025-12-04T06:31:38.904Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Building an Optimistic UI in Next.js with SWR]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/building-an-optimistic-ui-in-next-js-with-swr-ca02f4d26f3f?source=rss-c960736ed347------2"><img src="https://cdn-images-1.medium.com/max/647/1*zrPfc2C5KN0gxFFxsHPDHg.png" width="647"></a></p><p class="medium-feed-snippet">User experience is everything. If your app feels sluggish after a button click, users will bounce. That&#x2019;s where optimistic UI comes in &#x2014;&#x2026;</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/building-an-optimistic-ui-in-next-js-with-swr-ca02f4d26f3f?source=rss-c960736ed347------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/building-an-optimistic-ui-in-next-js-with-swr-ca02f4d26f3f?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/ca02f4d26f3f</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[vercel]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[nextjs]]></category>
            <category><![CDATA[front-end-development]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Sun, 14 Sep 2025 17:11:58 GMT</pubDate>
            <atom:updated>2025-09-15T08:10:37.089Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Running OpenAI’s New GPT-OSS Models Locally with Ollama]]></title>
            <link>https://medium.com/@suryasekhar/running-openais-new-gpt-oss-models-locally-with-ollama-a03fc4e2671e?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/a03fc4e2671e</guid>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[openai]]></category>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[ollama]]></category>
            <category><![CDATA[gpt-oss]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Thu, 07 Aug 2025 11:52:22 GMT</pubDate>
            <atom:updated>2025-08-07T11:52:22.106Z</atom:updated>
            <content:encoded><![CDATA[<p>OpenAI just did something unexpected. After years of keeping things behind API gates, they’ve released not one, but two open-weight models under an Apache 2.0 license. And the best part? You can run one of them completely offline, right on your laptop.</p><p>I’ll walk you through how to get the smaller of the two models, <strong>GPT-OSS 20B</strong>, up and running using <strong>Ollama</strong>, one of the easiest tools out there for local LLM inference.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/268/1*zWrdwptkfw_bakkcXlyWMw.png" /><figcaption>Ollama</figcaption></figure><h3>What Is GPT-OSS?</h3><p>OpenAI’s newly released models are:</p><ul><li><strong>GPT-OSS 20B</strong>: A 20 billion parameter model built for reasoning and designed to run on everyday hardware</li><li><strong>GPT-OSS 120B</strong>: A larger, much more powerful version that requires serious GPU power to run locally</li></ul><p>For most people, GPT-OSS 20B is the sweet spot. It’s fast, surprisingly capable, and works on devices with just 16 GB of RAM.</p><h3>Why Use Ollama?</h3><p>If you’re new to local models, Ollama is the tool that makes everything feel seamless. It takes care of the annoying stuff like model downloads, tokenization, GPU optimization, and serving the model. You can be chatting with a 20B parameter model in under 10 minutes.</p><p><a href="https://ollama.com">Ollama </a>works on macOS, Windows, and Linux. It supports both command-line interaction and integrations with apps like LM Studio. No Python environments. No Docker. Just a clean, native setup experience.</p><h3>System Requirements</h3><p>To run GPT-OSS 20B with Ollama, here’s what you’ll need:</p><ul><li>A machine with at least <strong>16 GB of RAM</strong></li><li>Around <strong>13 GB of free disk space</strong></li><li>macOS (M1/M2/M3), Windows, or a modern Linux distro</li></ul><p>You don’t need a GPU, though it’ll help with speed. You also don’t need a cloud account or any API keys. It’s all local.</p><p>Note: The larger GPT-OSS 120B model is not practical for most users to run locally unless you have access to an 80 GB GPU.</p><h3>Installing Ollama</h3><p>To get started, install Ollama. On macOS or Linux, you can run this in the terminal:</p><pre>curl -fsSL https://ollama.com/install.sh | sh</pre><p>Or,<a href="https://medium.com/@suryasekhar/how-to-run-ollama-on-macos-040d731ca3d3"> if you’re on a Mac and prefer Homebrew</a>:</p><pre>brew install ollama</pre><p>Windows users can download the installer from <a href="https://ollama.com/download">ollama.com/download.</a></p><p>Once installed, check everything’s working by running:</p><pre>ollama --version</pre><p>Learn more about r<a href="https://medium.com/@suryasekhar/how-to-run-ollama-on-windows-10-using-wsl-262355cd809c">unning Ollama on Windows </a>or <a href="https://medium.com/@suryasekhar/how-to-run-ollama-on-macos-040d731ca3d3">Mac</a>.</p><h3>Running GPT-OSS 20B</h3><p>Let’s pull and run the model.</p><p>Start by downloading it:</p><pre>ollama pull gpt-oss:20b</pre><p>This will grab the 12.8 GB model and set everything up behind the scenes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/541/1*cfmu9-JK-2pHIyrGECKs8g.png" /><figcaption>ollama pull gpt-oss:20b</figcaption></figure><p>Once it’s done, you can start chatting</p><pre>ollama run gpt-oss:20b</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/701/1*FEebiDqriOPT-857wRqYAg.png" /><figcaption>ollama run gpt-oss:20b</figcaption></figure><p>That’s it. You’re now running an OpenAI reasoning model on your own machine.</p><h3>Final Thoughts</h3><p>Running a 20B model locally opens up so many possibilities. You don’t need an API key or a cloud subscription. You don’t need to worry about rate limits or privacy. And you don’t have to rely on someone else’s infrastructure.</p><p>This is a huge step for:</p><ul><li>Developers who want to prototype fast</li><li>Researchers testing model behavior</li><li>Anyone who wants full control over their AI workflows</li><li>People working in sensitive or air-gapped environments</li></ul><p>It’s also just really fun to play with.</p><p>Like the article? A ‘clap’ goes a long way!</p><p>Happy exploring with Ollama!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a03fc4e2671e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Vercel Edge Config with Python: A Complete Guide]]></title>
            <link>https://medium.com/@suryasekhar/vercel-edge-config-with-python-a-complete-guide-df437f98c014?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/df437f98c014</guid>
            <category><![CDATA[edge-config]]></category>
            <category><![CDATA[edge]]></category>
            <category><![CDATA[vercel]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[pip]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Tue, 01 Jul 2025 18:31:42 GMT</pubDate>
            <atom:updated>2025-07-01T18:31:42.375Z</atom:updated>
            <content:encoded><![CDATA[<p>Vercel Edge Config is a global data store designed for fast access to configuration values. It stores your data at the edge, providing millisecond-fast access from anywhere in the world.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Kma5gtffiQVhDXaP7of7_g.png" /><figcaption>Python + Vercel Edge Config</figcaption></figure><h3>Key Benefits:</h3><ul><li>Ultra-Fast Access: Sub-10ms response times globally</li><li>Global Distribution: Automatic replication across Vercel’s edge network</li><li>Secure by Default: Built-in authentication</li><li>Real-time Updates: Changes propagate within seconds</li></ul><h3>Common Use Cases:</h3><ul><li>Feature Flags</li><li>API Keys &amp; Secrets</li><li>Application Settings</li><li>Content Management</li><li>A/B Testing</li><li>Routing Rules</li></ul><h3>Getting Started</h3><ol><li>Installation</li></ol><pre>pip install vercelpy</pre><p>2. Setup</p><p>Get your Edge Config connection string from the Vercel Dashboard and set it in your environment:</p><pre>EDGE_CONFIG=https://edge-config.vercel.com/edcg_id?token=your_token</pre><p>3. Getting Started with vercelpy</p><p>The vercelpy library makes working with Edge Config incredibly straightforward. Here’s one simple example for each core function:</p><pre>import vercelpy.edge_config as edge<br><br># Get a single value<br>api_key = edge.get(&quot;stripe_api_key&quot;)<br><br># Check if a key exists<br>has_feature = edge.has(&quot;new_feature&quot;)<br><br># Get multiple values at once<br>config = edge.get_all([&quot;app_name&quot;, &quot;timeout&quot;, &quot;debug_mode&quot;])<br><br># Get configuration digest (for caching)<br>digest = edge.digest()<br><br># Create a custom client (optional)<br>client = edge.create_client(&quot;https://edge-config.vercel.com/edcg_id?token=your_token&quot;)</pre><p>4. Error Handling</p><pre>from vercelpy.edge_config.errors import EdgeConfigError<br><br>try:<br>  value = edge.get(&quot;api_key&quot;)<br>except Exception as e:<br>  if str(e) == EdgeConfigError.UNAUTHORIZED:<br>    print(&quot;Authentication failed&quot;)<br>  elif str(e) == EdgeConfigError.EDGE_CONFIG_NOT_FOUND:<br>    print(&quot;Edge Config not found&quot;)<br>  else:<br>    print(f&quot;Unexpected error: {e}&quot;)</pre><p>Best Practices:</p><p>1. Use consistent key naming:</p><pre>feature_new_ui = edge.get(&quot;feature_new_ui&quot;)<br>api_stripe_key = edge.get(&quot;api_stripe_key&quot;)<br>setting_timeout = edge.get(&quot;setting_timeout&quot;)</pre><p>2. Batch your requests:</p><pre># ✅ Good: Single batch request<br>config = edge.get_all([&quot;api_key&quot;, &quot;timeout&quot;, &quot;retry_count&quot;])<br><br># ❌ Bad: Multiple individual requests<br>api_key = edge.get(&quot;api_key&quot;)<br>timeout = edge.get(&quot;timeout&quot;)<br>retry_count = edge.get(&quot;retry_count&quot;)</pre><p>3. Implement fallbacks:</p><pre>def get_safe_config(key: str, default=None):<br>  try:<br>    return edge.get(key)<br>  except Exception:<br>    return default<br><br>max_retries = get_safe_config(&quot;max_retries&quot;, 3)</pre><p>Ready to get started? Install vercelpy today and experience the power of edge-based configuration management!</p><pre>pip install vercelpy</pre><h3>🔗 Like this guide?</h3><ul><li>Clap for this story!</li><li>Find me on <a href="https://medium.com/@suryasekhar">Medium</a>, <a href="https://github.com/SuryaSekhar14">GitHub</a>, or <a href="https://www.linkedin.com/in/surya-sekhar-datta/">LinkedIn</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=df437f98c014" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Multipart Uploads on Vercel Blob using Python]]></title>
            <link>https://medium.com/@suryasekhar/multipart-uploads-on-vercel-blob-using-python-b8224dd64b46?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/b8224dd64b46</guid>
            <category><![CDATA[blob-storage]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[vercel]]></category>
            <category><![CDATA[open-source]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Sun, 18 May 2025 20:02:24 GMT</pubDate>
            <atom:updated>2025-05-18T20:03:20.940Z</atom:updated>
            <content:encoded><![CDATA[<h4>vercel_blob v0.4.0 Onwards supports multipart uploads.</h4><p>Uploading large files efficiently is crucial in modern web applications. Vercel Blob Storage supports multipart uploads, allowing you to handle files up to 5 TB by splitting them into smaller parts. This article demonstrates how to implement multipart uploads to Vercel Blob Storage using Python.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*HfhH6dQtT6QI0szK.png" /><figcaption>Python + Vercel Blob Storage</figcaption></figure><h3>❓What Are Multipart Uploads?</h3><p>Multipart uploads divide a large file into smaller parts, uploading each part separately. This approach offers several advantages:</p><ul><li><strong>Resilience</strong>: If a part fails to upload, only that part needs to be retried, not the entire file.</li><li><strong>Efficiency</strong>: Parallel uploads of parts can speed up the overall upload process.</li><li><strong>Scalability</strong>: Supports uploading huge files without overwhelming memory resources.</li></ul><p>Vercel’s Blob Storage API supports multipart uploads by setting multipart: True the upload process.</p><h3>Prerequisites</h3><p>Before implementing multipart uploads, ensure you have the following:</p><ul><li><strong>Python 3.10 or higher</strong>: Required for compatibility with the vercel_blob library.</li><li><strong>Vercel Blob Storage Token</strong>: Obtain your BLOB_READ_WRITE_TOKEN from your Vercel project dashboard.</li><li><strong>vercel_blob Library</strong>: A Python wrapper for the Vercel Blob Storage API. Install it using pip:</li></ul><pre>pip3 install vercel_blob</pre><h3>Implementing Multipart Uploads in Python</h3><p>The vercel_blob library simplifies interactions with Vercel Blob Storage. Here&#39;s how to perform a multipart upload:</p><pre>import vercel_blob<br>import os<br><br># Set your Vercel Blob Storage token<br>os.environ[&#39;BLOB_READ_WRITE_TOKEN&#39;] = &#39;your_token_here&#39;<br><br># Define the file to upload<br>file_path = &#39;large_file.mp4&#39;<br>file_name = os.path.basename(file_path)<br><br># Open the file in binary mode<br>with open(file_path, &#39;rb&#39;) as f:<br>    # Upload the file with multipart enabled<br>    response = vercel_blob.put(<br>        file_name,<br>        f.read(),<br>        multipart=True,<br><br>    )<br><br>print(&quot;Upload successful!&quot;)<br>print(f&quot;Blob URL: {response[&#39;url&#39;]}&quot;)</pre><p><strong>Explanation of Parameters</strong>:</p><ul><li>file_name: The name of the file to be stored in Vercel Blob Storage.</li><li>f.read(): Reads the entire file content into memory.</li><li>multipart=True: Enables multipart upload</li></ul><p>This script reads the file in binary mode and uploads it to Vercel Blob Storage using multipart upload. The response contains the URL of the uploaded blob.</p><h3>📚 Additional Resources</h3><ul><li><strong>vercel_blob GitHub Repository</strong>: <a href="https://github.com/SuryaSekhar14/vercel_blob">SuryaSekhar14/vercel_blob</a></li><li><strong>Medium Article on Using Vercel Blob with Python</strong>: <a href="https://medium.com/@suryasekhar/how-to-use-vercel-blob-storage-with-python-94785d3ea0b3">How to use Vercel Blob Storage with Python</a></li></ul><p>By leveraging multipart uploads, you can efficiently handle large file uploads to Vercel Blob Storage in your Python applications. Ensure proper error handling and consider memory management strategies for optimal performance.</p><p>Feel free to contribute to ‘vercel_blob’, and if there are any issues, please open an Issue on <a href="https://github.com/SuryaSekhar14/vercel_blob">GitHub</a>. Also maybe, <a href="https://buymeacoffee.com/suryasekhar">Buy me a Coffee</a>?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b8224dd64b46" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Which AI Model Should You Use for Your Projects? A No-BS Breakdown]]></title>
            <link>https://medium.com/@suryasekhar/which-ai-model-should-you-use-for-your-projects-a-no-bs-breakdown-a059bf81eb00?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/a059bf81eb00</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[ai-programming]]></category>
            <category><![CDATA[github-copilot]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[developer-tools]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Mon, 21 Apr 2025 02:38:53 GMT</pubDate>
            <atom:updated>2025-04-21T02:38:53.072Z</atom:updated>
            <content:encoded><![CDATA[<p>If you’re working on code and using AI tools like GitHub Copilot, you’re probably wondering:</p><blockquote><strong>“Which AI model should I <em>actually</em> be using?”</strong></blockquote><blockquote><strong>“Which AI model is best for Coding?”</strong></blockquote><p>You’re not alone — and you’re right to ask. Between OpenAI, Anthropic, Google, Meta, and Mistral all launching model after model, it’s starting to feel like you’re drafting code with a swarm of co-pilots, not one. Each one claims to be <em>fast</em>, <em>smart</em>, or <em>cheap</em> — but only some are <em>helpful for your project</em>.</p><p>This post is your no-fluff breakdown of how to pick the best AI model for the job — whether you’re prototyping fast, refactoring a legacy mess, or debugging with one hand and crying with the other.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SHCnJCOU1Veq_CA7U4ADjQ.png" /><figcaption>Which AI model is best for Coding?</figcaption></figure><h3>Developer Personas</h3><p>Let’s match AI models to <em>who you are</em> and <em>what kind of work</em> you do.</p><h3>🛠️ The Prototyper</h3><p><strong>You’re building fast, breaking things faster.</strong></p><ul><li>Prioritize speed and cost</li><li>Okay with rough edges if it runs</li></ul><p><strong>Models to try:</strong></p><ul><li><strong>o3-mini: </strong>Super fast</li><li><strong>LLaMA 3 8B</strong>: Local and competent</li><li><strong>DeepSeek Coder 6.7B</strong>: Fast and clean</li></ul><h3>🧠 The Debugger</h3><p><strong>You’re hunting logic bugs and deciphering stack traces.</strong></p><p><strong>Models to try:</strong></p><ul><li><strong>GPT 4.5: </strong>Top-tier reasoning</li><li><strong>Claude 3.7</strong>: Long-context window, great Chain-of-Thought, explains well</li><li><strong>DeepSeek Code V2</strong>: Solid logic clarity</li></ul><h3>📚 The Documentarian</h3><p><strong>Explaining code is your jam.</strong></p><p><strong>Models to try:</strong></p><ul><li><strong>Claude 3.5</strong>: Structured &amp; Clear</li><li><strong>Mistral Medium</strong>: Straightforward, no-fluff output</li><li><strong>DeepSeek Chat</strong>: Simplifies well</li></ul><h3>🏡 The Architect</h3><p><strong>You plan systems, not just functions.</strong></p><p><strong>Models to try:</strong></p><ul><li><strong>Claude 3.7</strong>: Handles the ‘big picture’ well</li><li><strong>GPT-4.5</strong>: From function to framework, it knows it all</li><li><strong>LLaMA3 70B</strong>: Open Source, Smart, Fast, Precise</li></ul><h3>🎨 The Designer-Dev</h3><p><strong>Visual inputs, layout debugging, front-end meets logic.</strong></p><p><strong>Models to try:</strong></p><ul><li><strong>GPT-4o</strong>: Elite multimodal performance</li><li><strong>Gemini Flash</strong>: Elite multi-modal performance</li><li><strong>Command R+</strong>: Good with data + UI</li></ul><h3>🔄 Model Matchmaking: Compute vs Capability</h3><p>Here’s how top models compare when you weigh speed, reasoning depth, and cost:</p><ul><li><strong>o3-mini<br></strong>💨 Blazing fast<br> 🧠 Basic reasoning<br>💵 Ultra cheap<br>🔧 Great for fast code sketches</li><li><strong>DeepSeek Coder 6.7B</strong><br>⚡ Fast and sharp<br>🧠 Solid reasoning<br>💵 Budget-friendly<br>🔧 Ideal for lightweight coding tasks</li><li><strong>Claude 3.5 Sonnet<br></strong>⚡ Fast enough<br>🧠 Balanced reasoning<br>💸 Mid-tier cost<br>📄 Excellent for documentation and mid-complexity tasks</li><li><strong>GPT-4o</strong><br>⚡ Very fast<br>🧠 Deep, multimodal understanding<br>💸 Moderate cost<br>💡 Best all-rounder</li><li><strong>Claude 3.7 Sonnet</strong><br>🐢 Slower<br>🧠🧠🧠🧠 Reasoning powerhouse<br>💸💸💸 Premium<br>🧠 Suited for large, complex codebases</li><li><strong>GPT-4.5</strong><br>⚡ Decent speed<br>🧠🧠🧠🧠🧠 Top-tier logic<br>💰 High cost<br>🔍 For deep logic, planning, and architecture</li><li><strong>LLaMA 3 70B</strong><br>⚡ Fast (local)<br>🧠🧠🧠🧠 Strong reasoning<br>💸 Reasonable cost<br>🛠️ Ideal for self-hosting and power users</li><li><strong>DeepSeek Coder V2</strong><br>⚡ Fast<br>🧠🧠🧠🧠 Great depth<br>💵 Affordable<br>🧠 Great GPT-4 alternative for heavy lifting</li><li><strong>Gemini 1.5 Flash<br></strong>⚡ Fast<br>🧠 Moderate reasoning<br>💸 Budget tier<br>🎨 Great for visual tasks and frontend work</li><li><strong>Command R+</strong><br> 🐢 Medium speed<br>🧠 Good with data and UI<br>💸 Reasonable<br>📊 Perfect for UI and data-heavy workflows</li></ul><h3>🧹 The Decision Matrix (Cheat Sheet)</h3><p>Here’s your cheat sheet, plain and fast:</p><ul><li><strong>Need speed?</strong><br> Use o3-mini, DeepSeek 6.7B, or Mistral 7B.</li><li><strong>On a tight budget?</strong><br> Go with LLaMA 3 8B, DeepSeek, or Mistral.</li><li><strong>Writing lots of code?</strong><br> Reach for GPT-4.5, Claude 3.7, or DeepSeek V2.</li><li><strong>Working with visuals or front-end?</strong><br> Choose GPT-4o, Gemini Flash, or Command R+.</li><li><strong>Multi-file or big projects?</strong><br> Use Claude 3.7, GPT-4.5, or LLaMA 70B.</li><li><strong>Writing documentation?</strong><br> Pick Claude 3.5, DeepSeek Chat, or Mistral.</li><li><strong>Working offline / local? </strong><br> Try LLaMA 3, DeepSeek, or Mistral.</li></ul><h3>🏁 Final Notes</h3><ul><li><strong>Switch models based on your task.</strong> Don’t just default to GPT.</li><li><strong>DeepSeek is underrated.</strong> Try it. You might stop paying for other models.</li><li><strong>Claude = clean code.</strong> Especially if you like readable output.</li><li><strong>LLaMA 3 is the open-source MVP.</strong> Great for local or private setups.</li></ul><p>You’re not picking one forever. You’re picking the right blade in the toolbox.</p><blockquote><em>🧠 Smart devs use the right tool at the right time.</em></blockquote><h3>🔗 Like this guide?</h3><ul><li>Clap for this story!</li><li>Find me on <a href="https://medium.com/@suryasekhar">Medium</a>, <a href="https://github.com/SuryaSekhar14">GitHub</a>, or <a href="https://www.linkedin.com/in/surya-sekhar-datta/">LinkedIn</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a059bf81eb00" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Generalists Beat Specialists: The Case for Being a Jack of All Trades]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/why-generalists-beat-specialists-the-case-for-being-a-jack-of-all-trades-741a61f4ee26?source=rss-c960736ed347------2"><img src="https://cdn-images-1.medium.com/max/1536/1*GbLpce6xe9ppnXqyz-h8PQ.png" width="1536"></a></p><p class="medium-feed-snippet">&#x201C;A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance&#x2026;</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/why-generalists-beat-specialists-the-case-for-being-a-jack-of-all-trades-741a61f4ee26?source=rss-c960736ed347------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/why-generalists-beat-specialists-the-case-for-being-a-jack-of-all-trades-741a61f4ee26?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/741a61f4ee26</guid>
            <category><![CDATA[specialist]]></category>
            <category><![CDATA[generalist-vs-specialist]]></category>
            <category><![CDATA[t-shaped-generalist]]></category>
            <category><![CDATA[jack-of-all-trades]]></category>
            <category><![CDATA[generalists]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Mon, 14 Apr 2025 14:47:49 GMT</pubDate>
            <atom:updated>2025-04-17T10:41:15.290Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[The Ultimate Guide to Python Error Handling]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/pythoneers/the-ultimate-guide-to-python-error-handling-4f78d4d138c4?source=rss-c960736ed347------2"><img src="https://cdn-images-1.medium.com/max/768/0*1GnOUf8YbRZRHeJb.jpg" width="768"></a></p><p class="medium-feed-snippet">Error handling is an essential part of software development. No matter how well-written your code is, unexpected issues can arise&#x200A;&#x2014;&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/pythoneers/the-ultimate-guide-to-python-error-handling-4f78d4d138c4?source=rss-c960736ed347------2">Continue reading on The Pythoneers »</a></p></div>]]></description>
            <link>https://medium.com/pythoneers/the-ultimate-guide-to-python-error-handling-4f78d4d138c4?source=rss-c960736ed347------2</link>
            <guid isPermaLink="false">https://medium.com/p/4f78d4d138c4</guid>
            <category><![CDATA[gui̇de]]></category>
            <category><![CDATA[exceptions-handling]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[exception-handling-python]]></category>
            <category><![CDATA[error-handling]]></category>
            <dc:creator><![CDATA[Surya Sekhar Datta]]></dc:creator>
            <pubDate>Tue, 25 Feb 2025 07:03:46 GMT</pubDate>
            <atom:updated>2025-02-25T07:03:46.446Z</atom:updated>
        </item>
    </channel>
</rss>