<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kairus Noah Tecson</title>
    <description>The latest articles on DEV Community by Kairus Noah Tecson (@schadenkai).</description>
    <link>https://dev.to/schadenkai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F936003%2F93531b40-e93d-4236-96f2-aaa24e14a1c3.jpg</url>
      <title>DEV Community: Kairus Noah Tecson</title>
      <link>https://dev.to/schadenkai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/schadenkai"/>
    <language>en</language>
    <item>
      <title>Vector Search Metrics 🎯: Why Your "Distance" Might Be Wrong</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Fri, 06 Feb 2026 03:02:19 +0000</pubDate>
      <link>https://dev.to/schadenkai/vector-search-metrics-why-your-distance-might-be-wrong-3opn</link>
      <guid>https://dev.to/schadenkai/vector-search-metrics-why-your-distance-might-be-wrong-3opn</guid>
      <description>&lt;p&gt;I initially thought integrating vector databases would be as simple as learning any other Python library, assuming I could skip complex configurations until later. I was wrong. Tools like Milvus required an immediate deep dive into specific settings, such as metric types, before I could even successfully interact with the database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Metric Type.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't just a random math preference that you can just choose for the sake of it; it’s the definition of "similarity" between each data that you have in your vector database. Mathematically speaking, it defines how we can measure the distance between two chunks in a vector space. It can be through the straight line distance between each other, it can be based on the angle of difference, or it can also be using both measurements.&lt;/p&gt;

&lt;p&gt;Definition of the metric type is first based on one thing: the type of data you are working with. Second one is based on the embedding model you are using which must be based also on the type of data you are working with, whether it is an image, text, or audio (that is why this must be second thing to consider).&lt;/p&gt;

&lt;p&gt;It is defined during the index setup, and if you get it wrong, you’re essentially speaking a different language than your embedding model. Two vectors might look "close" in a straight line in the vector space, but semantically, they could be unrelated.&lt;/p&gt;

&lt;p&gt;Here is the breakdown of the three main metric types and when to actually use them.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Cosine Similarity (The NLP Standard)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it measures:&lt;/strong&gt; The angle between two vectors.&lt;br&gt;
&lt;strong&gt;What it ignores:&lt;/strong&gt; Magnitude (length).&lt;/p&gt;

&lt;p&gt;For text and NLP, this is usually your default. Modern dense embedding models encode semantic meaning in the &lt;strong&gt;direction&lt;/strong&gt; of the vector, not the length.&lt;/p&gt;

&lt;p&gt;Think of it this way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vector A:&lt;/strong&gt; The sentence "I love cats."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector B:&lt;/strong&gt; A 500-word essay about how much the author loves cats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you plot these, they will point in roughly the same direction (high cosine similarity) because the topic is identical. However, Vector B will likely have a much larger magnitude because it has more words/features. If you used a distance metric that cared about length, these two documents would seem far apart. Cosine ignores the length and focuses purely on the &lt;em&gt;vibe&lt;/em&gt; (direction).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note on Sparse vs. Dense:&lt;/strong&gt; In older sparse vector models (like TF-IDF), magnitude represented word frequency or importance. In modern dense embeddings (like OpenAI’s &lt;code&gt;text-embedding-3&lt;/code&gt;), magnitude is often normalized or irrelevant to meaning.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. L2 / Euclidean Distance (The Physical Distance)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it measures:&lt;/strong&gt; The straight-line distance between points in space.&lt;br&gt;
&lt;strong&gt;What it cares about:&lt;/strong&gt; Both direction and magnitude.&lt;/p&gt;

&lt;p&gt;Euclidean distance is what we typically think of when we say "distance" in the real world—measuring with a ruler from point A to point B.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use it:&lt;/strong&gt;&lt;br&gt;
This is heavily used in &lt;strong&gt;Computer Vision (images)&lt;/strong&gt; and &lt;strong&gt;Audio&lt;/strong&gt; processing.&lt;/p&gt;

&lt;p&gt;In image data, the "magnitude" often carries valid information, such as pixel intensity, color depth, or the sheer number of features present. If you have a dark image and a bright image of the same object, the pixel values are different, creating a distance in the vector space that L2 captures effectively.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Inner Product (IP) (The Speed Demon)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What it measures:&lt;/strong&gt; The projection of one vector onto another.&lt;br&gt;
&lt;strong&gt;What it cares about:&lt;/strong&gt; Direction and magnitude.&lt;/p&gt;

&lt;p&gt;This is the standard for &lt;strong&gt;Recommendation Systems&lt;/strong&gt;. In these use cases, magnitude often correlates with the "strength" of a user's preference or the popularity of an item. You want to capture both &lt;em&gt;what&lt;/em&gt; they like (direction) and &lt;em&gt;how much&lt;/em&gt; they like it (magnitude).&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Free" Performance Hack
&lt;/h3&gt;

&lt;p&gt;Here is a trick that is worth knowing if you are optimizing for scale.&lt;/p&gt;

&lt;p&gt;If your embedding model outputs &lt;strong&gt;normalized vectors&lt;/strong&gt; (vectors with a length of 1), Inner Product (IP) and Cosine Similarity become mathematically equivalent in terms of ranking order.&lt;/p&gt;

&lt;p&gt;Why does this matter?&lt;br&gt;
&lt;strong&gt;IP is computationally cheaper to calculate than Cosine.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cosine requires a division operation to normalize the vectors during the calculation. If you know your vectors are &lt;em&gt;already&lt;/em&gt; normalized (which many modern models do by default), you can set your metric type to &lt;strong&gt;IP&lt;/strong&gt; to get the same accuracy as Cosine, but with faster search performance.&lt;/p&gt;




&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;p&gt;Don't just leave the metric type on default.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Text/RAG?&lt;/strong&gt; Check your model documentation. It's usually &lt;strong&gt;Cosine&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images/Audio?&lt;/strong&gt; Likely &lt;strong&gt;L2 (Euclidean)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalized Embeddings?&lt;/strong&gt; Use &lt;strong&gt;IP&lt;/strong&gt; for a free speed boost.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>vectordatabase</category>
      <category>rag</category>
      <category>ai</category>
      <category>performance</category>
    </item>
    <item>
      <title>🥽 Deep Dive: Understanding Contextual Recall 🎯 in RAG Systems</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Wed, 04 Feb 2026 09:30:30 +0000</pubDate>
      <link>https://dev.to/schadenkai/deep-dive-understanding-contextual-recall-in-rag-systems-4oo1</link>
      <guid>https://dev.to/schadenkai/deep-dive-understanding-contextual-recall-in-rag-systems-4oo1</guid>
      <description>&lt;h3&gt;
  
  
  Definition &amp;amp; Calculation
&lt;/h3&gt;

&lt;p&gt;Contextual Recall measures the semantic completeness of your retrieval system. It is calculated by first generating a list of claims or statements from the &lt;strong&gt;Expected Output&lt;/strong&gt; (Ground Truth) of the RAG system.&lt;/p&gt;

&lt;p&gt;Using an LLM (typically the same model used to generate the claims), this list is mapped against the &lt;strong&gt;Actual Retrieved Chunks&lt;/strong&gt;. The goal is to determine if the statements generated from the expected output can be semantically satisfied or concluded from the retrieved chunks.&lt;/p&gt;

&lt;p&gt;The metric is calculated as:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwplpce39on1pna8hyhqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwplpce39on1pna8hyhqu.png" alt="Contextual recall formula" width="462" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A perfect score implies that all statements in the expected output are supported by the retrieved context, regardless of whether a single chunk satisfies multiple statements or multiple chunks satisfy a single statement.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem with Typical Recall (Recall@K)
&lt;/h3&gt;

&lt;p&gt;Contextual Recall solves the limitations of typical recall metrics (like Recall@K), which rely on comparing a static list of &lt;strong&gt;Expected Document IDs&lt;/strong&gt; against the &lt;strong&gt;Actual Retrieved IDs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In typical recall, if a specific chunk ID from the expected list is missing from the retrieval results, the system is penalized—even if the actual retrieved chunks contain the exact same information semantically.&lt;/p&gt;

&lt;p&gt;This rigidity is critical because of &lt;strong&gt;Vector Space Volatility&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Scenario:&lt;/strong&gt; Consider two semantically similar queries, &lt;strong&gt;User Query A&lt;/strong&gt; and &lt;strong&gt;User Query B&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Vector Space:&lt;/strong&gt; When mapped into the vector database, their positions will differ slightly. This slight difference is significant and can greatly affect the &lt;strong&gt;ANN (Approximate Nearest Neighbor)&lt;/strong&gt; results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felbapl9rck6iqaa8d0y9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felbapl9rck6iqaa8d0y9.png" alt="Illustration of varying embedding position for similar query" width="800" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Outcome:&lt;/strong&gt; Query A might retrieve chunks {A, B, C}, while Query B might retrieve only {A, B} because its position shifted just enough to place Chunk C outside its reach scope.
In a typical recall metric, if Chunk C was "expected," Query B would be penalized. However, in &lt;strong&gt;Contextual Recall&lt;/strong&gt;, if Chunks A and B provide sufficient information to answer the prompt (or if a different Chunk D provides the same info as Chunk C), the system is &lt;strong&gt;not penalized&lt;/strong&gt;, resulting in a more accurate reflection of system performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmub4zo2n0hzqe6npr531.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmub4zo2n0hzqe6npr531.png" alt="ANN chunks retrieved for query A and query B" width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What It Measures: Diagnosis &amp;amp; Root Causes
&lt;/h3&gt;

&lt;p&gt;Low Contextual Recall evaluates the alignment between your &lt;strong&gt;Indexing Strategy&lt;/strong&gt; (Chunking + Embedding) and your &lt;strong&gt;Retrieval Strategy&lt;/strong&gt; (Query Embedding). A low score typically implies one of the following system failures:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Poor Embedding Model Performance
&lt;/h4&gt;

&lt;p&gt;The embedding model may perform poorly due to its training methodology or dimensionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Training Bias:&lt;/strong&gt; If the model was trained poorly, it may overly index or focus on specific terms in a chunk, skewing its numeric representation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low Dimensionality:&lt;/strong&gt; If the embedding dimensions are too low for the complexity of the data, the model lacks the granularity to represent the chunk's meaning accurately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Domain Mismatch (Non-Specialized Models)
&lt;/h4&gt;

&lt;p&gt;This occurs when a general-purpose embedding model is used for specialized domains (e.g., medical or legal) containing heavy jargon.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example:&lt;/strong&gt; If a user searches for "ADHD," the query implies related concepts like "hyperactivity," "impulsiveness," and "inattention."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Failure:&lt;/strong&gt; A general-purpose model might not understand that a chunk describing "inattentive behavior" is semantically equivalent to "ADHD." Consequently, it fails to capture the relationship, ignores the relevant chunk, and degrades retrieval performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs2c6ybc63bw4r845ano.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs2c6ybc63bw4r845ano.png" alt=" " width="800" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Chunking Strategy Failures
&lt;/h4&gt;

&lt;p&gt;Improper chunking leads to improper positioning in the vector space, meaning the chunk's semantic value is misrepresented.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Under-Segmentation (Chunk Size Too Large):&lt;/strong&gt;
When a chunk is too large, it often includes multiple distinct claims or topics. The embedding model attempts to create a single vector that "balances" all these statements.

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;The Consequence:&lt;/em&gt; The resulting vector might sit on the borderline between Topic A and Topic B. Even if the chunk contains significant information about Topic A, it is treated poorly during retrieval because its position is diluted by Topic B. This "averaging effect" lowers the confidence score for specific queries.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpjv2qwqwn9edlysx54b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpjv2qwqwn9edlysx54b.png" alt="Demonstration of positioning of under segmented chunks placed in the borderline of two claim clusters" width="800" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Over-Segmentation (Chunk Size Too Small):&lt;/strong&gt;
When a chunk is too small, it lacks sufficient context for the model to draw meaningful conclusions.

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;The Consequence:&lt;/em&gt; The embedding model cannot accurately represent the information because the fragment is semantically incomplete, leading to a vector that effectively represents noise.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;References:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.ragas.io/en/latest/concepts/metrics/available_metrics/context_recall/" rel="noopener noreferrer"&gt;https://docs.ragas.io/en/latest/concepts/metrics/available_metrics/context_recall/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://deepeval.com/docs/metrics-contextual-recall" rel="noopener noreferrer"&gt;https://deepeval.com/docs/metrics-contextual-recall&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>machinelearning</category>
      <category>rag</category>
    </item>
    <item>
      <title>💼 This Portfolio Rearranges Itself Based on Your Job Description</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Fri, 30 Jan 2026 22:39:31 +0000</pubDate>
      <link>https://dev.to/schadenkai/this-portfolio-rearranges-itself-based-on-your-job-description-3p0f</link>
      <guid>https://dev.to/schadenkai/this-portfolio-rearranges-itself-based-on-your-job-description-3p0f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;Hey there! 👋 I'm &lt;strong&gt;Kairus Noah Tecson&lt;/strong&gt;, a Head of Engineering based in the Philippines with a passion for building AI-powered platforms and agentic workflows.&lt;/p&gt;

&lt;p&gt;Here's the problem I wanted to solve: &lt;strong&gt;Recruiters spend seconds scanning portfolios.&lt;/strong&gt; They're looking for specific keywords, relevant projects, matching experience—and they don't have time to dig through your entire work history to find it.&lt;/p&gt;

&lt;p&gt;So I asked myself: &lt;em&gt;What if my portfolio could do the digging for them?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The result is a portfolio that &lt;strong&gt;reads your job description&lt;/strong&gt; and &lt;strong&gt;reorganizes itself&lt;/strong&gt; to show the most relevant content first. Paste a JD, and watch the sections reorder and highlight in real-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;


&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://new-year-new-you-portfolio-761580697973.us-central1.run.app"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;URL: &lt;a href="https://www.schadenkai.space/" rel="noopener noreferrer"&gt;https://www.schadenkai.space/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🛠️ Tech Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js 14 (App Router), TypeScript, Tailwind CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Engine&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gemini 2.5 Flash via Vertex AI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zustand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Animations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Framer Motion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Docker + Google Cloud Run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DNS / CDN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloudflare (Free Tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🧠 How the Rearranging Works
&lt;/h3&gt;

&lt;p&gt;The portfolio has two layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Chat Interface (Hero)&lt;/strong&gt;: Paste a job description or ask a question like &lt;em&gt;"Do you have experience with RAG systems?"&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Portfolio (Content)&lt;/strong&gt;: Sections dynamically &lt;strong&gt;reorder&lt;/strong&gt; (e.g., Projects slides above Experience) and specific items get &lt;strong&gt;highlighted&lt;/strong&gt; based on relevance.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🤖 The AI Behind It
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Gemini 2.5 Flash&lt;/strong&gt; analyzes your input and returns a structured JSON configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"layout_order"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"projects"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"experience"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"highlight_ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"project-0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skill-2"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"I've prioritized your AI/ML projects and Python skills..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This JSON updates a &lt;strong&gt;Zustand store&lt;/strong&gt;, which triggers &lt;strong&gt;Framer Motion animations&lt;/strong&gt; for smooth section transitions. The whole flow takes under 2 seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎨 Design: Neo-Brutalism
&lt;/h3&gt;

&lt;p&gt;Bold borders. Hard shadows. Vibrant accents (purple, yellow, pink). The aesthetic is inspired by a "creative workshop" vibe—the chat interface feels like a command center that &lt;em&gt;controls&lt;/em&gt; the portfolio below.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔄 The Live Rearranging
&lt;/h3&gt;

&lt;p&gt;Watching "Projects" smoothly slide above "Experience" because the AI decided it's more relevant to a Frontend role.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Smart Highlighting
&lt;/h3&gt;

&lt;p&gt;Relevant skills and projects get a visual boost (border glow, background tint) so recruiters can scan faster. The AI picks which items to highlight based on keyword matching from the job description.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎮 Hidden Easter Eggs
&lt;/h3&gt;

&lt;p&gt;Stay around the hero section and you might find animated sprites — a running knight, bouncing slimes, spinning coins. Because portfolios should have &lt;em&gt;personality&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 $0.00/month Infrastructure
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Monthly Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vertex AI (Gemini 2.5 Flash)&lt;/td&gt;
&lt;td&gt;$0.00 (free tier)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Cloud Run&lt;/td&gt;
&lt;td&gt;$0.00 (2M requests free)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare DNS&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.00&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rate limiting (5 req/min, 20 req/day per user) keeps costs at zero while preventing abuse.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it yourself!&lt;/strong&gt; Paste a job description into the chat and watch the portfolio adapt. I'd love to hear what you think. 🙏&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐙 &lt;a href="https://github.com/SchadenKai" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💼 &lt;a href="https://www.linkedin.com/in/kairus-tecson/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Load Testing using FastAPI and Postman: A Comprehensive Guide</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Fri, 13 Dec 2024 00:30:54 +0000</pubDate>
      <link>https://dev.to/schadenkai/comprehensive-guide-load-testing-fastapi-and-postman-1oip</link>
      <guid>https://dev.to/schadenkai/comprehensive-guide-load-testing-fastapi-and-postman-1oip</guid>
      <description>&lt;p&gt;Imagine this scenario wherein your startup app starts to have traction. Users count suddenly goes up! And now continuously grows from 10 to 100 users. All those users constantly do things in your app, clicking some buttons, using some features, making request from your backend server...&lt;/p&gt;

&lt;p&gt;What you would not want in this kind of situation is unpreparedness. You want to ensure that your application is &lt;strong&gt;Reliable&lt;/strong&gt; and &lt;strong&gt;Available&lt;/strong&gt; to the users. This is where Testing comes into place and what we would be talking about here is a specific type of testing that is suitable for testing this kind of scenarios, &lt;strong&gt;Load testing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll focus on using FastAPI and its automated OpenAPI specification generation to streamline the process of generating Postman collections for load testing. By the end, you’ll know how to utilize FastAPI’s OpenAPI specification and Postman to test your application at scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 Why Use FastAPI and Postman for Load Testing?
&lt;/h2&gt;

&lt;p&gt;FastAPI comes with built-in OpenAPI support, making it easy to document and test your APIs. By combining FastAPI with Postman, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatically generate Postman collections&lt;/strong&gt; from your FastAPI API’s OpenAPI documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplify request setup&lt;/strong&gt; by importing the collection directly into Postman.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage Postman’s powerful testing and scripting features&lt;/strong&gt; for dynamic data generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale tests programmatically&lt;/strong&gt; with Newman, Postman’s CLI tool, for CI/CD integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This synergy between FastAPI and Postman allows developers to quickly simulate real-world traffic scenarios and identify bottlenecks in their applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Step 1: Setting Up FastAPI and Swagger
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 Start Your FastAPI Application
&lt;/h3&gt;

&lt;p&gt;Ensure your FastAPI application is running locally or on a server. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastapi&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastAPI&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastAPI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nd"&gt;@app.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/items/{item_id}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;read_item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;item_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;item_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;q&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;uvicorn&lt;/span&gt;
    &lt;span class="n"&gt;uvicorn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the server starts, OpenAPI JSON endpoint will be available at &lt;code&gt;http://127.0.0.1:8000/openapi.json&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Verify OpenAPI JSON
&lt;/h3&gt;

&lt;p&gt;Open your browser and navigate to &lt;code&gt;http://127.0.0.1:8000/openapi.json&lt;/code&gt; to ensure the OpenAPI JSON is accessible.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚌 Step 2: Exporting the OpenAPI JSON to Postman
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Copy the OpenAPI endpoint
&lt;/h3&gt;

&lt;p&gt;You can either save the OpenAPI JSON file locally by using your browser or by &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o&lt;/span&gt; openapi.json http://127.0.0.1:8000/openapi.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or just by copying the OpenAPI endpoint URL, &lt;code&gt;http://127.0.0.1:8000/openapi.json&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Import OpenAPI JSON into Postman
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open Postman and click &lt;strong&gt;Import&lt;/strong&gt; in the top-left corner.&lt;/li&gt;
&lt;li&gt;Select the downloaded &lt;code&gt;openapi.json&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Postman will automatically generate a collection with all the endpoints defined in the OpenAPI specification.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you just copied the endpoint URL, you can just paste the URL at the input bar at the top of the modal that appears when you click the &lt;strong&gt;Import&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd4taa59t5g55exc4iet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd4taa59t5g55exc4iet.png" alt="Import modal when you clicked on Import" width="714" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Organize and Test Your Collection
&lt;/h3&gt;

&lt;p&gt;Review the imported collection to ensure all endpoints are correctly configured. You can also add environment variables or scripts as needed for authentication or data management.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Step 3: Preparing for Load Testing in Postman
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Add Dynamic Data to Your Requests
&lt;/h3&gt;

&lt;p&gt;To simulate real-world scenarios, modify your requests to include dynamic data. For example, use Postman’s built-in variables or pre-request scripts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Pre-request Script:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;variables&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;random_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example Payload:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"item_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{random_id}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"q"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sample_query"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also just make use of built-in scripts like &lt;code&gt;$randomInt&lt;/code&gt; to generate random values.&lt;br&gt;
&lt;strong&gt;Example use case of using built-in scripts:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "email": "user_{{$randomInt}}@gmail.com",
  "password": "DevPassword123",
  "full_name": "Testing 1_{{$randomInt}}",
  "company_name": "Testing Company"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This built-in script will return random values between 0-1000 in every request made.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Configure Variables in you Collection
&lt;/h3&gt;

&lt;p&gt;Use collection variables in Postman to manage API base URLs, authentication tokens, or dynamic parameters without your Collection. This simplifies updates and testing across your Collection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsvlz5ra8o34t1z1yhia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsvlz5ra8o34t1z1yhia.png" alt="Collection variable page in Postman" width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Step 4: Running Performance Tests with Postman's Collection Runner
&lt;/h2&gt;

&lt;p&gt;Postman now includes built-in performance testing capabilities that allow you to simulate user traffic and assess your API's performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Launch the Collection Runner
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Click on the Runner button (beaker icon) in Postman.&lt;/li&gt;
&lt;li&gt;Select the collection imported from your FastAPI OpenAPI JSON.4.2 Set Test Parameters&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4.2 Configure Performance Test Settings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Virtual Users&lt;/strong&gt;: Specify the number of virtual users to simulate concurrent load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Duration&lt;/strong&gt;: Set the duration for which the test should run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Load Profile&lt;/strong&gt;: Choose between fixed, ramp-up, spike, or peak load profiles to simulate different traffic patterns.4.3 Execute the Load Test&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3 Execute the Performance Test
&lt;/h3&gt;

&lt;p&gt;Click Run to start the performance test. Postman will display real-time performance metrics such as average response time, error rate, and throughput.&lt;/p&gt;




&lt;h2&gt;
  
  
  📈 Step 5: Analyzing Test Results
&lt;/h2&gt;

&lt;p&gt;After the test completes, analyze the results to identify performance bottlenecks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Response Times&lt;/strong&gt;: Check if the response times meet your application's performance criteria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Rates&lt;/strong&gt;: Identify any errors that occurred during the test and investigate their causes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Throughput&lt;/strong&gt;: Assess the number of requests handled per second to ensure it aligns with expected load.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Postman provides detailed metrics and allows you to compare multiple test runs to track performance changes over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Best Practices for Load Testing with FastAPI and Postman
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep OpenAPI Documentation Updated&lt;/strong&gt;: Ensure your FastAPI documentation reflects the current state of your API for accurate testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Dynamic Data&lt;/strong&gt;: Incorporate variability in test data to simulate diverse real-world scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor System Resources&lt;/strong&gt;: Use monitoring tools to observe CPU, memory, and network usage during tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate Tests&lt;/strong&gt;: Integrate performance tests into your CI/CD pipeline for continuous assessment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate Based on Findings&lt;/strong&gt;: Regularly update your tests and application based on performance test outcomes.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  📌 Conclusion
&lt;/h2&gt;

&lt;p&gt;By leveraging FastAPI's OpenAPI specification and Postman's performance testing features, you can effectively simulate user traffic and identify potential performance issues. This approach enables you to ensure your FastAPI application remains robust and responsive under varying load conditions.&lt;/p&gt;

&lt;p&gt;Happy testing!&lt;/p&gt;

</description>
      <category>testing</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>Officially graduated: What now?</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Wed, 14 Aug 2024 09:19:33 +0000</pubDate>
      <link>https://dev.to/schadenkai/officially-graduated-what-now-206i</link>
      <guid>https://dev.to/schadenkai/officially-graduated-what-now-206i</guid>
      <description>&lt;p&gt;It has really been long time since I've created a post. I am still 3rd year college that time when I have created my articles here in Dev.to. But times really flies fast. I just graduated in Computer Science here in the Philippines. &lt;/p&gt;

&lt;p&gt;But what now? &lt;/p&gt;

&lt;p&gt;I already have acquired a fulltime job in a startup company in Austria months before my graduation. And it has been the greatest teacher for me ever since, greater than all the professors that I have in the university. Startup teaches you a lot of things and fast. But of course, in exchange of some bite off your insanity. But yeah, as I always tell myself and to others, &lt;em&gt;great pressure comes with great experience&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;But even after having a stable job after the official class ends, I stumbled on a common trap when people reach there long live dream, I become lost. Though I am already aware of this, I just can't avoid feeling lost, down, and depressed. I always thought that if I will be having another long-term goal again, I can be free from the sadness and emptiness, but no. I always have a lot of long-term goals in mind after graduation. That is to become proficient software engineer, build a startup company, etc. &lt;/p&gt;

&lt;p&gt;This has been my state for about 2 weeks after the class officially ends (before graduation day). Right now, I got back my vigor to learn and improve in the field of my passion. What is the solution then? How did I overcome this emptiness? I don't have a scientific and concrete answer if that is what you are finding in this article. What I did is I write. I listed out what is the reason why I started in the first place. Why did I eagerly grind in the past, even sacrificing my social life and attendance count. That is the time when I got back my fire to pursue all my other long-term goals that has been brushed off by my emptiness. After that, I planned everything out again. What will be my goal for the next 1, 3, and 5 years from now. And what will be the things I need to do and incorporate in life to be able to reach those goals. &lt;/p&gt;

&lt;p&gt;Right now, I am still working on the startup company as a tech lead of our small and only development team. I am still learning and surely have a long way to go to become proficient software engineer. I will now be posting on my blog regularly every week about my journey to become a Software Engineer, you can join me in my journey by following me. Thank you. &lt;/p&gt;

</description>
      <category>productivity</category>
      <category>learning</category>
      <category>softwaredevelopment</category>
      <category>career</category>
    </item>
    <item>
      <title>Learn Anything 10x Faster: Outliers Guide – Part 2</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Tue, 29 Aug 2023 04:16:44 +0000</pubDate>
      <link>https://dev.to/schadenkai/learning-anything-10x-faster-27a2</link>
      <guid>https://dev.to/schadenkai/learning-anything-10x-faster-27a2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In our journey through life, learning is a constant companion. It's not an innate talent but a skill that separates the average from the extraordinary. In this blog series, we delve into the secrets of accelerated learning. In this installment, we explore three essential elements to supercharge your learning process.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Meta-learning: Learning How to Learn
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuvp9x0x569muxvw7ba3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuvp9x0x569muxvw7ba3.png" alt="What is meta learning" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Meta-learning, often described as "learning to learn," is the key to efficient learning. It's not just about motivation; it requires careful preparation. In Part 1 of this series, we discussed the first step: Perception. Now, we move on to explore various methods and techniques for efficient learning. However, the key is not to get lost in a sea of information but to pinpoint what works best for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Targeted Search for Efficient Learning
&lt;/h3&gt;

&lt;p&gt;Don't blindly search for generic learning techniques. Instead, focus on addressing your specific weaknesses. Employ the 4Fs framework: Identify your flaws and concentrate on improving those areas. For example, if you struggle with note-taking, search for effective note-taking methods tailored to your needs. This targeted approach ensures efficiency in your learning process.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Finding Your Motivation: The Fuel for Learning
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0dy4c4uptwnwgyncoqbk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0dy4c4uptwnwgyncoqbk.png" alt="Why finding reason related to motivation" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Motivation is the catalyst for action. While discipline is crucial for building habits, motivation is equally essential. It's the ignition needed to start your learning journey. But motivation isn't a mystical force; you can create it by finding purpose in what you do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating Your Motivation Through Purpose
&lt;/h3&gt;

&lt;p&gt;When you're faced with a daunting task like studying for a challenging deadline, finding motivation can be tough. Take a moment to reflect on why you're doing it. Consider the benefits and rewards you'll reap from your efforts. By creating purpose, you can reignite your motivation and drive your actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Active Participation: Learning in the Real World
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzslqolyh0dvvcsgn858.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzslqolyh0dvvcsgn858.png" alt="The best learning boost, active participation" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Active participation in events like hackathons and competitions is a powerful way to accelerate your learning. It thrusts you out of your comfort zone and exposes you to real-world pressures.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Power of Active Participation
&lt;/h3&gt;

&lt;p&gt;Participating actively forces you to adapt and learn quickly. When you're under pressure, you absorb knowledge rapidly. It provides a clear objective and path forward. For instance, if you're struggling with learning a specific skill, seek out related events or challenges. Active participation not only broadens your skill set but also sharpens your focus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thank you for joining us in the second part of this series. If you found this blog helpful, please leave a like or reaction. Your feedback is valuable and will aid in improving future content.&lt;/p&gt;

</description>
      <category>growth</category>
      <category>personaldevelopment</category>
      <category>mindset</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Learning Anything 10x Faster</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Mon, 28 Aug 2023 03:42:33 +0000</pubDate>
      <link>https://dev.to/schadenkai/learning-anything-10x-faster-4fcm</link>
      <guid>https://dev.to/schadenkai/learning-anything-10x-faster-4fcm</guid>
      <description>&lt;h2&gt;
  
  
  Purpose
&lt;/h2&gt;

&lt;p&gt;Create a strong foundation in learning which also is the foundation of every success. The purpose of this article is to show you an effective way of learning in a short amount of time or being time effective. This can be applied to every aspects of career, can be software engineering, data sciences, data engineering, etc. since learning is a general aspect to everyone and being efficient in this thing makes you already ahead of the majority. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is mostly based on my personal experience. Being able to learn new field or topic (ex. Marketing or Business) in a short amount of time. I've seen this most effective in hackathons since I have applied all of this techniques and mentality throughout my competitions that made me win some. &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Check out Part 2 of this blog series
&lt;/h2&gt;

&lt;p&gt;This is a series-based article. I will be posting my blogs everyday, featuring 3 effective ways on improving your learning process. Follow me to be updated with my release blogs.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  Preface
&lt;/h2&gt;

&lt;p&gt;I started as not knowing development at or any other thing other than basic syntaxes of programming. It has been almost 1 year ago (September 29) and during that time did I start having a goal to improve in the field of development.&lt;/p&gt;

&lt;p&gt;During an almost a year duration of grinding of learning or ultralearning, I have achieved quite a lot yet unexpected feats. I have been a Champion in a regional programming competition that involves more than 20+ universities offering Computer Science and Information Technology courses. I also participated on other regional programming competitions and hackathons. I recently achieved 2nd runner up in a hackathon which is held by one of the most prestige universities in my country. 2nd runner up might be quite low achievement but I achieved it alone against different teams composed of more than 3. I also obtained skills in fullstack development. ReactJS, ExpressJS, Github Actions, Ionic, Github and Git, other templating languages, etc.&lt;/p&gt;

&lt;p&gt;Let me share this to you on how I achieved such boost of skills in just less than a year and may somehow find this as an essential weapon in your arsenal in the future. &lt;/p&gt;

&lt;h2&gt;
  
  
  Methods
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Perception of Learning
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1np0og0oc3zczycoz8b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe1np0og0oc3zczycoz8b.png" alt="people looking at an elephant in different angles, having their own different perception of what is an elephant" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Perception is a lens. This is how you view the world. This is pertained as the most root of all. If you want to change your character, start with your perception. If your character change, so does your thought. If your thought change, so does your actions. &lt;/p&gt;

&lt;p&gt;Perception is the most fundamental of all. If you want to be the most efficient learner, you must start on how you view learning. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Learning is the acquisition of knowledge or skills through experience, study, or by being taught.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You must view learning as a step for you to reach your goal and not as a step towards social entitlement of being a nerd. Learning is fundamental in every personal growth. You might see someone in your  class excelling that hard in class. It does not came from talent but from learning. Knowledge does not just comes popping out your brain, it is learned. The same goes by with other geniuses in this world, they all started in learning. It only starts to differ on how much time and effort you are giving on learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 4Fs: The framework for learning.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feh1b21ebr2i2t6lny75x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feh1b21ebr2i2t6lny75x.png" alt="four F loop framework: Find flaws, Fix, and Feedback" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
There has this term called "Feedback loop" in businesses and startups where they create this "Build-Test-Learn" loop for their products. This helps them hastily develop their product with quality. They create a MVP or a most viable product and test that out immediately, obtaining essential feedbacks for them to implement to their product, which is where "Learn" comes from. This  is a continuous loop that spiral upwards towards developing the best out of that product without losing time to market.&lt;/p&gt;

&lt;p&gt;The same goes by with personal growth. You yourself is a product for the society, and the same as other product, you must also have a feedback loop. And there is where 4Fs is inspired of. Find Flaws, Fix, and Feedback. &lt;/p&gt;

&lt;p&gt;Flaws must not be viewed as a weakness or a defect but an area of opportunity for improvement. Identifying your flaws is an essential  on identifying your path for learning. The flaws will be your target and goal for your learning journey. You might find it hard to achieve since you will be addressing face to face what you are lacking. The same goes by with all of us. &lt;/p&gt;

&lt;p&gt;Majority of the people are scared to address their own flaws, which is the start of stagnation. Since flaws are not being identified, they don't know that they're already lacking. Being able to identify your flaws is already a great leap since you go beyond the majority. &lt;/p&gt;

&lt;p&gt;After you identify or know your areas of improvement, you address it. This is where "Fix" takes place. You address those identified flaws. This is where your learning journey starts. Start off on learning how you can address this flaws and apply those steps you learned as your methods on eliminating those flaws. &lt;/p&gt;

&lt;p&gt;You might struggle in public speaking, you identify it as one of your flaws. You may be tempted to search ways on how to improve your public speaking immediately, but that must no be your first step. As I discussed in my first method for efficient learning, perception is the most fundamental of everything. Thus, you must fix your perception on that flaw first, public speaking. You learned that your perception on public speaking as something your are not fit in since you are an introvert. You then address this perception first: that public speaking is not only for extrovert but more of a mode of communicating your knowledge or research to your audience. You think beyond yourself and find purpose on creating value for others. You then move forward on other techniques or methods on fixing and improving your flaws. This can be searching on Youtube for public speaking tips.&lt;/p&gt;

&lt;p&gt;Last one is the most important of all, Feedback. After you spent efforts honing your craft, addressing those flaws, test your self. This can be through having practicing your public speaking to your friends or family. Your goal is not for them to praise you but to gather their feedback. Know their insights, then you can identify again your flaws. Praise and recognition is just a plus, what you wanted is identifying flaws that is already beyond your own recognition. Then you can start looping again on identifying your flaws and fixing it.&lt;/p&gt;

&lt;p&gt;This loop is a continuous process of improvement. Just like a ball, without having to take action continuously, you cannot move, you become stagnant. Potential energy cannot move on its own, it must be on your own intervention, your own action can it start to move. Just like your own potential, you own flaws, you cannot fix and improve your craft if you will not take action.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Just do it
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0565lrlh60lzg475yryn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0565lrlh60lzg475yryn.png" alt="Showing the just do it meme. Explaining the inspirational quote beyond the meme. A combination of a reason and a burst of action" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Just like the meme says, Just do it. Beyond the meme, It have been a part of my motivation before I learn to address my perception first. But this phrase still stays relevant. &lt;br&gt;
One of the most hardest, most energy consuming in a rocket launch towards space is the take off. It takes so much energy to resist the pull of gravity just to be able to go out its range of reach.&lt;/p&gt;

&lt;p&gt;Our own life also has its own gravity. Just waking up in the morning, you are already suppressed by your own gravity's force to sleep again or just stay laying on your bed. It takes so much effort just to resist the gravity to start doing things you must do. This is where "Just do it" phrase comes in. Not thinking about anything else, just your motivation and reason to take action at the same time the burst of action itself is what will get you to take off. Once you start taking off, start learning, start building habits, start addressing those flaws, then will it be more easier to go in the flow. &lt;/p&gt;

&lt;h3&gt;
  
  
  End
&lt;/h3&gt;

&lt;p&gt;This is my first time writing about personal development stuffs, blogging in general, and mostly just write in my learning journal. If you've liked this and found this helpful, please send your support through likes and comments. Comment down your own feedback about my content.&lt;/p&gt;

</description>
      <category>growth</category>
      <category>personaldevelopment</category>
      <category>mindset</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Server vs. Serverless Computing: Benefits and Downsides</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Wed, 19 Apr 2023 05:33:24 +0000</pubDate>
      <link>https://dev.to/schadenkai/server-vs-serverless-computing-benefits-and-downsides-2nfn</link>
      <guid>https://dev.to/schadenkai/server-vs-serverless-computing-benefits-and-downsides-2nfn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm56fbdv5snb221y8r27j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm56fbdv5snb221y8r27j.png" alt="list of cloud services that offers serverless computing" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👋 Introduction
&lt;/h2&gt;

&lt;p&gt;In today's fast-paced world, companies of all sizes are searching for ways to optimize their web application's performance and reduce costs. Two of the most popular computing models are server and serverless computing. Both server and serverless computing have benefits and downsides that should be carefully considered before selecting the appropriate option.&lt;/p&gt;

&lt;p&gt;In this article, we will provide an overview of server and serverless computing and discuss their benefits and downsides. We will also answer some frequently asked questions about server and serverless computing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuayqaympqm4po2vkm68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuayqaympqm4po2vkm68.png" alt="diagram explaining server computing" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🖥️ What is Server Computing?
&lt;/h2&gt;

&lt;p&gt;In server computing, a server or a group of servers is responsible for managing the application's requests and resources. The servers are responsible for running the application's code, storing data, and handling security. &lt;/p&gt;

&lt;p&gt;In short, it's the business owners that handles the server of their application. From maintenance up to to running the server in their own built servers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7gw0pvv8l9j1yzh0tqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7gw0pvv8l9j1yzh0tqp.png" alt="diagram explaining serverless computing" width="572" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍💻 What is Serverless Computing?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Despite the name "Serverless", it does not mean it does not have a server&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Serverless computing is a cloud-based model where a third-party provider manages the application's resources. In serverless computing, the provider handles the servers, operating systems, and infrastructure.&lt;/p&gt;

&lt;p&gt;This means that you don't need to run and host your own server in your own built computer. This means that you can continually scale your application without minding about the maintenance and security of it. &lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 What are the Benefits and Downsides of Server and Serverless Computing?
&lt;/h2&gt;

&lt;p&gt;In this section, we will compare the benefits and downsides of both server and serverless computing &lt;/p&gt;

&lt;h3&gt;
  
  
  💪 Benefits of Server Computing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Full Control&lt;/strong&gt;: Companies have full control over the server's hardware, software, and network settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization&lt;/strong&gt;: Companies can customize the server settings based on their requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictable Cost&lt;/strong&gt;: Companies can predict the cost of their servers since they are responsible for managing them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt;: Companies can monitor their servers and fix any issues in real-time.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  👎 Downsides of Server Computing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance&lt;/strong&gt;: Companies must maintain their servers, which can be a time-consuming and costly process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Scalability can be challenging since companies need to add more servers as the application grows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upfront Costs&lt;/strong&gt;: Companies need to invest upfront in server hardware and software.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  💪 Benefits of Serverless Computing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cost-Effectiveness&lt;/strong&gt;: Companies only pay for the resources they use, making serverless computing more cost-effective.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Serverless computing is highly scalable, and companies do not need to worry about adding more resources as the application grows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fast Deployment&lt;/strong&gt;: Deployment times are faster since companies do not need to manage infrastructure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatic Updates&lt;/strong&gt;: Third-party providers handle server maintenance and updates.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  👎 Downsides of Serverless Computing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lack of Control&lt;/strong&gt;: Companies do not have control over the infrastructure, making it difficult to customize the server settings&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>serverless</category>
      <category>cloud</category>
    </item>
    <item>
      <title>The '...' operator and common uses - Ellipsis or the yada yada yada operator</title>
      <dc:creator>Kairus Noah Tecson</dc:creator>
      <pubDate>Mon, 10 Apr 2023 03:51:00 +0000</pubDate>
      <link>https://dev.to/schadenkai/the-operator-and-common-uses-ellipsis-or-the-yada-yada-yada-operator-5a33</link>
      <guid>https://dev.to/schadenkai/the-operator-and-common-uses-ellipsis-or-the-yada-yada-yada-operator-5a33</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j13blg1vaujt40p0ssk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3j13blg1vaujt40p0ssk.png" alt="Yada yada yada meme" width="800" height="679"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You may have encountered this &lt;strong&gt;'…'&lt;/strong&gt; syntax in some code or in a Youtube tutorial and just don't know how this small three dot syntax is important in executing the code properly. &lt;/p&gt;

&lt;p&gt;Missing one dot and there does the red line beneath it… &lt;/p&gt;

&lt;p&gt;That three dot you might be encountering is an &lt;strong&gt;Ellipsis operator&lt;/strong&gt;. Other name for it is the &lt;strong&gt;'triple dot'&lt;/strong&gt; operator or the &lt;strong&gt;'yada yada yada'&lt;/strong&gt; operator. You might see this a lot even in different programming languages. &lt;/p&gt;

&lt;p&gt;You might even question if this is just some naming convention or some placeholder. Might be true, but this operator comes in a lot more different functionalities which might depend on the programming language and the context it has been used.&lt;/p&gt;

&lt;p&gt;But today we will be showing and explain some common uses of this operator for you to use in your coding arsenal. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Rest Parameter
&lt;/h2&gt;

&lt;p&gt;In Javascript, the ellipsis can be used to represent a rest parameter, which allows a function to accept an arbitrary number of arguments as an array. As an example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function myFunction(...args) {
  console.log(args); // Output: [1, 2, 3, 4, 5]
}

myFunction(1, 2, 3, 4, 5);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This take on the argument &lt;code&gt;(1, 2, 3, 4, 5)&lt;/code&gt; and store it inside the &lt;code&gt;args&lt;/code&gt; parameter which is declared as an array. In short, you're stating that the parameter is an array with the use of the ellipsis operator. Even if you passed in an argument of one element, the result will still be inside an array.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Spread Syntax
&lt;/h2&gt;

&lt;p&gt;This is applied again in Javascript but in different context. The ellipsis operator can be used to spread elements of an array/object into a new array/object. For example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const arr = [1,2,3] 
const newObject = [...arr, 2, 4]
console.log(newObject)   
// output = [1, 2, 3, 2, 4]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that you can only store this the result of the ellipsis operator inside another object/array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const arr = [1,2,3]
const string = ...arr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you store this spread array other than object/array, this will result to an error.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const arr = [1,2,3]
const string = [...arr]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the correct way for this which will result as an object type. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;console.log(typeof(string))   -&amp;gt;   object&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Variadic Templates
&lt;/h2&gt;

&lt;p&gt;Let's go outside and Javascript and go for more low level language, C++. The ellipsis in C++ can be used to define a variadic template. This variadic template, which is a feature in C++, allows a function/class to accept a arbitrary number of arguments of different types. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;template&amp;lt;typename... Args&amp;gt;

void print(Args... args) {
    ((cout &amp;lt;&amp;lt; args &amp;lt;&amp;lt; " "), ...);
}
void main() {
    print(1, 2, "hello world", true)
    // return -&amp;gt; 1 2 hello world 1
    // true = 1
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is like in the number 1, Rest Parameters, which is in Javascript but in more complex way because it can take different data types as an argument and can be output one by one using again the ellipsis operator with the syntax of &lt;code&gt;((args), ...);&lt;/code&gt;&lt;br&gt;
This makes C++ a more lot flexible through having dynamic size of memory being allocated.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Placeholder for unused parameters
&lt;/h2&gt;

&lt;p&gt;Lastly in Python, the ellipsis can be used as a placeholder for unused function or method parameters. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def sample(a, b, x):
    print(a + b)
sample(1, 2, ...)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can be placed as an argument for any parameter only if it is not used within the function. This can be useful if you don't have certain value to put for the parameter and you just wanted to execute and test out the function. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There can be a lot more different functionalities of ellipsis mostly in other programming languages. This is just for some most common uses of the operator in commonly used programming languages.  But there you go, you can now use this operator in your arsenal. This is incredibly useful in terms of handling database query responses. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
