MoreRSS

site iconThe Practical DeveloperModify

A constructive and inclusive social network for software developers.
Please copy the RSS to your reader, or quickly subscribe to:

Inoreader Feedly Follow Feedbin Local Reader

Rss preview of Blog of The Practical Developer

Cercle: WhoMadeWho, Tripolism - Flying Away With You (andhim Remix)

2026-02-06 00:07:02

German electronic wizards andhim just unleashed their fresh take on "Flying Away With You" by WhoMadeWho and Tripolism, giving the track a slick, deeper club vibe. Time to get those speakers pumping!

These guys, known for their unique "Super House" sound, have been grooving since 2010, touring globally, and even dropping a documentary. They're clearly not messing around when it comes to electronic beats!

Watch on YouTube

When Patterns Stop Being About Patterns: My Battle With the Spiral (Snail) Matrix

2026-02-06 00:06:12

This is my breakthrough journey, how I finally cracked one of the most head breaking pattern problems I’ve ever faced.

1 2 3
8 9 4
7 6 5

This thing looks innocent.
It is not.

I struggled with this for more than a day. Literally stuck.
Out of an assignment of 85 pattern questions, this was the last one, it felt intentionally designed to break us so we couldn’t complete the set.

Where My Brain Got Stuck

After solving 80+ pattern problems using loops in JavaScript, my brain had been trained (or ruined) to see everything as:

  • math based
  • loop based
  • i and j manipulation
  • stars, numbers, symmetry

Triangles.
Inverted triangles.
Pyramids.
Hourglasses.
Butterflies.
Hollow patterns.
If it had a name, I probably printed it.

So when this came up, my brain automatically tried to force a mathematical formula out of it.

I kept asking questions like:

  • How do I manipulate i and j?
  • Can I tweak loop conditions?
  • Is there some magic equation behind this?

And that was the mistake.

I wasn’t looking at it as rows and columns.
I wasn’t seeing it as a matrix.
I was trying to treat it like a normal pattern problem and it just refused to cooperate.

The Mental Shift That Changed Everything

The breakthrough didn’t come from more loops.
It came from changing how I looked at the problem.

This was not a pattern problem.
This was a matrix traversal problem disguised as a pattern.

Once I started treating the output as a 2D grid, things slowly started making sense.

Even then, I won’t lie... the brainstorming continued.
I still couldn’t see the full solution immediately.
But at least now, I had a direction.

And that was something I didn’t even have before.

Thinking in Boundaries, Not Formulas

Instead of trying to calculate positions, the idea was simple:

Fill the matrix layer by layer

Move in four directions

  1. left → right
  2. top → bottom
  3. right → left
  4. bottom → top

Shrink the boundaries after each pass

This is where top, bottom, left, and right come in.

The Code That Finally Worked

let n = 3;

let matrix = Array.from({ length: n }, () => Array(n).fill(0));

//let matrix = [
//    [1, 2, 3],
//    [4, 5, 6],
//    [7, 8, 9]
//];

let num = 1;

// Boundaries
let top = 0, bottom = n - 1;
let left = 0, right = n - 1;

while (num <= n * n) {

    // left → right
    for (let i = left; i <= right; i++) {
        matrix[top][i] = num++;
    }
    top++;

    // top → bottom
    for (let i = top; i <= bottom; i++) {
        matrix[i][right] = num++;
    }
    right--;

    // right → left
    for (let i = right; i >= left; i--) {
        matrix[bottom][i] = num++;
    }
    bottom--;

    // bottom → top
    for (let i = bottom; i >= top; i--) {
        matrix[i][left] = num++;
    }
    left++;
}

// Print result
for (let row of matrix) {
    console.log(row.join(' '));
}

What’s Actually Happening Here (Plain English)

num keeps increasing from 1 to n * n

top, bottom, left, right define the current layer

Each loop fills one side of the spiral

After finishing a side, we move the boundary inward

The while loop ensures we stop exactly when the matrix is full

No formulas.
No pattern tricks.
Just controlled movement.

About That Array.from() Thing

At first, I directly wrote the matrix values manually.

Later, I switched to something like this:

let matrix = Array.from({ length: n }, () => Array(n).fill(0));

No BS,
I was using it without fully understanding it at first and I still don't.

But here’s what it does:

Creates an array with n rows

Each row is a new array of size n

Fills everything with 0

Prevents reference issues (which is important)

This allows the same logic to work for any size, not just 3 × 3.

The Real Lesson (Not the Code)

This problem taught me something bigger than spiral matrices:

Sometimes the problem isn’t hard
your mental model is wrong.

I wasn’t failing because I didn’t know loops.
I was failing because I was trying to force the problem into a shape it wasn’t.

Once I stopped treating it as a pattern and started treating it as a matrix traversal, everything clicked.

And yeah I needed guidance.
But more importantly, I needed a shift in perspective.

That’s the shell I finally cracked

Ending this before I over explain
I’m still new to this.

This question didn’t make me feel smart it made me feel stuck, then relieved.

If you’re struggling with this pattern, you’re not alone. It’s confusing until it isn’t.

Building a Python Hardware info tool with GitHub Copilot

2026-02-06 00:03:07

This project is a python-based CLI tool that display system hardware
information such as CPU, memory, and disk usage.

The goal was to explore how GitHub Copilot CLI can assist in building
a practical command-line utility from start to finish.

https://github.com/JonathanBrahmi/python-hardware-monitor.git

Cruel AI Marketing: Why the Latest HX 370 is Still No Match for a 5-Year-Old 2060 Super

2026-02-06 00:03:05

I demand "honest workhorses" from GPU manufacturers-machines with unrefined but wide fuel pipes, a rugged chassis, and an engine that turns slowly but with immense torque.

Abstract

This report evaluates local AI multi-modal inference using Python 3.14.2, Ollama (v0.15.4), and the gemma3:4b model. I conducted a comparative analysis between the latest Ryzen AI 9 HX 370 (890M) and the veteran RTX 2060 Super (2060S).
For the 890M, three scenarios were tested: CPU-only, Auto-Shared VRAM, and Dedicated 16GB VRAM. The task involved processing 20 images to calculate confidence scores for keywords (mountain, ocean, cat) and outputting a structured JSON report.
The results are striking: the 5-year-old 2060S finished in under a minute. The 890M (iGPU) was 14x slower, and in CPU mode, 31x slower. Despite all setups meeting the VRAM requirements (4-6GB), the physical limitation was clear: the 2060S’s 256-bit bus (448 GB/s) provides a "fuel pipe" that the 890M’s 128-bit bus (120 GB/s) simply cannot compete with.

Results: Performance Comparison

Device VRAM Config Inference Time (sec) vs. 2060S (Baseline)
RTX 2060S Dedicated 8G 58.81 100%
HX370 (iGPU) Dedicated 16G 809.83 1377%
HX370 (iGPU) Auto-Shared (0.5G+) 821.18 1396%
HX370 (CPU) N/A (System RAM) 1795.95 3054%

Key Observations

  • The 128-bit Bottleneck: Even with modern architecture and high TOPS claims, the 890M is physically throttled by its memory bandwidth. It lacks the "fuel supply" to keep the engine running at full speed.

  • Stability First: While the time difference between "Auto" and "Dedicated 16G" is small, Dedicated VRAM allocation was estimated the suitable way to ensure stability.

  • iGPU > CPU: The 890M is far superior to the CPU for inference, but whether it truly reaches its advertised performance potential remains questionable under current memory bus constraints.

Materials and Methods

  • Inference Pipeline: Python-based automation calling the Ollama API.

  • Core Parameters:

    • model: gemma3:4b
    • num_gpu: 99 (or 0 for CPU test)
    • keep_alive: 5m (To ensure model persistence and avoid re-loading overhead)
    • temperature: 0 (Ensures deterministic JSON output)
  • Hardware Settings:

    • 890M: UMA Frame Buffer set to 16GB in BIOS.
    • 2060S: 8GB dedicated GDDR6.
    • OS: Windows 11 (24H2)

Summary: Lessons for the AI PC Era

Before moving to the Appendix, let’s summarize the takeaways from this confrontation between a modern APU and a legacy dGPU:

VRAM Capacity vs. Bandwidth: APUs have a unique advantage in their ability to allocate massive amounts of system RAM (e.g., 16GB) to the GPU. However, capacity alone isn't a silver bullet. Choosing a model that fits the narrow "fuel pipe" (memory bandwidth) is essential for practical performance.

The Longevity of Legacy GPUs: Even a 5-year-old GPU can remain a formidable player in the local AI field, provided it has a robust memory architecture (like the 256-bit bus of the 2060S). Raw age is less important than the physical specifications surrounding the core.

Next Action: Finding the "Sweet Spot" for APUs: My next step is to explore more lightweight, optimized workflows tailored for APUs—seeking a balance where the high VRAM capacity can be utilized without being crippled by the bandwidth bottleneck.

Appendix

  • Inference Targets:
No. Name Format Resolution Size (KB)
1 AI0001 PNG 1024 x 1024 1,180
2 AI0002 PNG 1024 x 1024 1,777
3 AI0003 PNG 1024 x 1024 3,079
4 P0001 JPG 5776 x 4336 12,228
5 P0002 JPG 5776 x 4336 11,124
6 P0003 JPG 2944 x 2208 2,970
7 P0004 JPG 5776 x 4336 13,811
8 P0005 JPG 5776 x 4336 12,065
9 P0006 JPG 5776 x 4336 11,104
10 P0007 JPG 2272 x 1704 2,715
11 P0008 JPG 2272 x 1704 2,841
12 P0009 JPG 3232 x 2424 4,803
13 P0010 JPG 4336 x 5776 8,567
14 P0011 JPG 5776 x 4336 13,384
15 P0012 JPG 4592 x 3448 6,517
16 P0013 JPG 5776 x 4336 10,917
17 P0014 JPG 5776 x 4336 9,210
18 P0015 JPG 2112 x 2816 2,696
19 P0016 JPG 2816 x 2112 2,821
20 P0017 JPG 5776 x 4336 10,066
  • Image Data: You can view the complete thumbnails of inference targets here.

  • Keywords: mountain, ocean, cat.

  • System Monitoring: See screenshots for Task Manager load graphs and Python program' Ollama logs during inference.

2060S Task Manager
2060S Ollama logs

HX370 (iGPU)-Dedicated 16G Task Maneger
HX370 (iGPU)-Dedicated 16G Ollama logs

HX370 (iGPU)-Auto-Shared (0.5G+) Task Maneger
HX370 (iGPU)-Auto-Shared (0.5G+) Ollama logs

HX370 (CPU)-N/A (System RAM) Task Maneger_CPU
HX370 (CPU)-N/A (System RAM) Task Maneger_RAM
HX370 (CPU)-N/A (System RAM) Task Maneger_GPU
HX370 (CPU)-N/A (System RAM) Ollama logs

  • JSON Schema: Example of the structured output format used for the report.

2060S’JSON

[
  {
    "description": "A bento box with various Japanese dishes.",
    "labels": {
      "salmon": "80%",
      "rice": "95%",
      "seaweed": "70%",
      "egg": "60%",
      "pickled vegetables": "75%",
      "shrimp": "30%",
      "tomato": "65%"
    },
    "confidence_score": 90,
    "filename": "AI0001.png",
    "inference_time_sec": 4.63,
    "processed_at": "2026-02-03T23:56:15.534428"
  },
  {
    "description": "A scenic view of a mountain range with pine trees, bathed in the warm light of sunrise.",
    "labels": {
      "mountain": "95",
      "forest": "85",
      "trees": "90",
      "sky": "70",
      "sunrise": "60"
    },
    "confidence_score": 95,
    "filename": "AI0002.png",
    "inference_time_sec": 2.46,
    "processed_at": "2026-02-03T23:56:18.003672"
  },
  {
    "description": "The image shows a floral pattern with purple and white flowers.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "AI0003.png",
    "inference_time_sec": 2.1,
    "processed_at": "2026-02-03T23:56:20.130660"
  },
  {
    "description": "A wide shot of a blue ocean with a distant coastline and ships.",
    "labels": {
      "ocean": "95%",
      "sea": "85%",
      "coastline": "60%",
      "ships": "40%"
    },
    "confidence_score": 90,
    "filename": "P0001.JPG",
    "inference_time_sec": 3.33,
    "processed_at": "2026-02-03T23:56:23.561895"
  },
  {
    "description": "Close-up of a weathered tree trunk with gnarled branches.",
    "labels": {
      "tree": "100%"
    },
    "confidence_score": 95,
    "filename": "P0002.JPG",
    "inference_time_sec": 2.9,
    "processed_at": "2026-02-03T23:56:26.554385"
  },
  {
    "description": "A cluster of red mulberries growing on a green leafy plant.",
    "labels": {
      "mulberries": "95",
      "leaves": "90",
      "plant": "85"
    },
    "confidence_score": 95,
    "filename": "P0003.JPG",
    "inference_time_sec": 2.29,
    "processed_at": "2026-02-03T23:56:28.877545"
  },
  {
    "description": "A grassy field with tall grass.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0004.JPG",
    "inference_time_sec": 3.11,
    "processed_at": "2026-02-03T23:56:32.094998"
  },
  {
    "description": "A palm tree with fronds against a cloudy sky.",
    "labels": {
      "palm_tree": "95%",
      "sky": "90%",
      "clouds": "80%"
    },
    "confidence_score": 95,
    "filename": "P0005.JPG",
    "inference_time_sec": 3.15,
    "processed_at": "2026-02-03T23:56:35.345674"
  },
  {
    "description": "A sunny beach scene with a mountain in the background and ocean waves.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "beach": "99",
      "sun": "90"
    },
    "confidence_score": 95,
    "filename": "P0006.JPG",
    "inference_time_sec": 3.25,
    "processed_at": "2026-02-03T23:56:38.686781"
  },
  {
    "description": "A lion is resting on a log.",
    "labels": {
      "lion": "95",
      "tree": "80",
      "log": "90"
    },
    "confidence_score": 95,
    "filename": "P0007.JPG",
    "inference_time_sec": 2.14,
    "processed_at": "2026-02-03T23:56:40.846414"
  },
  {
    "description": "A rocky landscape with moss and a gravel path.",
    "labels": {
      "rocks": "95%",
      "moss": "20%",
      "gravel": "15%"
    },
    "confidence_score": 90,
    "filename": "P0008.JPG",
    "inference_time_sec": 2.19,
    "processed_at": "2026-02-03T23:56:43.066534"
  },
  {
    "description": "A close-up image of a tree branch with white flowers and green foliage, set against a blurred background of trees and possibly moss.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 8,
    "filename": "P0009.JPG",
    "inference_time_sec": 2.53,
    "processed_at": "2026-02-03T23:56:45.629255"
  },
  {
    "description": "A white Japanese castle tower is prominently featured in the image, with people visible in the foreground.",
    "labels": {
      "castle": "95",
      "people": "30",
      "sky": "70"
    },
    "confidence_score": 90,
    "filename": "P0010.JPG",
    "inference_time_sec": 3.07,
    "processed_at": "2026-02-03T23:56:48.773374"
  },
  {
    "description": "The image shows a field of cosmos flowers, including white and pink varieties, with some green foliage.",
    "labels": {
      "cosmos": "95%",
      "flower": "90%",
      "green foliage": "80%",
      "cosmos flower": "98%"
    },
    "confidence_score": 95,
    "filename": "P0011.JPG",
    "inference_time_sec": 3.44,
    "processed_at": "2026-02-03T23:56:52.320560"
  },
  {
    "description": "A rhinoceros is prominently featured in the image, set against a blurred background of a road and greenery.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0012.JPG",
    "inference_time_sec": 2.72,
    "processed_at": "2026-02-03T23:56:55.096852"
  },
  {
    "description": "A sunny beach scene with ocean waves and mountains in the background.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "beach": "85"
    },
    "confidence_score": 95,
    "filename": "P0013.JPG",
    "inference_time_sec": 3.12,
    "processed_at": "2026-02-03T23:56:58.305412"
  },
  {
    "description": "A low-angle shot of a metal bridge structure against a cloudy sky.",
    "labels": {
      "bridge": "95",
      "sky": "80",
      "metal": "70",
      "urban": "30"
    },
    "confidence_score": 90,
    "filename": "P0014.JPG",
    "inference_time_sec": 3.17,
    "processed_at": "2026-02-03T23:57:01.554779"
  },
  {
    "description": "A close-up image of a crab with prominent claws.",
    "labels": {
      "crab": "95",
      "ocean": "5",
      "mountain": "0",
      "cat": "0"
    },
    "confidence_score": 90,
    "filename": "P0015.JPG",
    "inference_time_sec": 2.38,
    "processed_at": "2026-02-03T23:57:03.957423"
  },
  {
    "description": "A cat with a tortoiseshell pattern is sitting on a stone pavement.",
    "labels": {
      "cat": "95",
      "stone": "80",
      "pavement": "70"
    },
    "confidence_score": 90,
    "filename": "P0016.JPG",
    "inference_time_sec": 2.32,
    "processed_at": "2026-02-03T23:57:06.307102"
  },
  {
    "description": "A silhouette of a mountain is visible against a dusky sky above an ocean. Tall grasses frame the foreground.",
    "labels": {
      "mountain": "95",
      "ocean": "90",
      "grasses": "85"
    },
    "confidence_score": 95,
    "filename": "P0017.JPG",
    "inference_time_sec": 3.31,
    "processed_at": "2026-02-03T23:57:09.695170"
  }
]

HX370 (iGPU)-Dedicated 16G

[
  {
    "description": "A bento box with various Japanese dishes.",
    "labels": {
      "salmon": "80%",
      "rice": "95%",
      "seaweed": "70%",
      "egg": "60%",
      "pickled vegetables": "75%",
      "shrimp": "30%",
      "tomato": "65%",
      "pink yam": "40%"
    },
    "confidence_score": 95,
    "filename": "AI0001.png",
    "inference_time_sec": 47.74,
    "processed_at": "2026-02-03T00:26:52.995062"
  },
  {
    "description": "A scenic view of a mountain range with pine trees, bathed in the warm light of sunrise.",
    "labels": {
      "mountain": "95",
      "forest": "85",
      "trees": "90",
      "sky": "70",
      "sun": "60"
    },
    "confidence_score": 95,
    "filename": "AI0002.png",
    "inference_time_sec": 40.53,
    "processed_at": "2026-02-03T00:27:33.562963"
  },
  {
    "description": "The image shows a floral pattern with purple and white flowers.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "AI0003.png",
    "inference_time_sec": 38.48,
    "processed_at": "2026-02-03T00:28:12.103974"
  },
  {
    "description": "A wide shot of a blue ocean with a distant coastline and ships.",
    "labels": {
      "ocean": "95%",
      "sea": "85%",
      "coastline": "60%",
      "ships": "40%"
    },
    "confidence_score": 90,
    "filename": "P0001.JPG",
    "inference_time_sec": 40.14,
    "processed_at": "2026-02-03T00:28:52.361310"
  },
  {
    "description": "Close-up of a weathered tree trunk with gnarled branches.",
    "labels": {
      "tree": "100%"
    },
    "confidence_score": 95,
    "filename": "P0002.JPG",
    "inference_time_sec": 39.63,
    "processed_at": "2026-02-03T00:29:32.112435"
  },
  {
    "description": "A cluster of ripe red blackberries growing on a green leafy plant.",
    "labels": {
      "blackberry": "100%",
      "leaf": "95%",
      "plant": "90%"
    },
    "confidence_score": 95,
    "filename": "P0003.JPG",
    "inference_time_sec": 39.36,
    "processed_at": "2026-02-03T00:30:11.523099"
  },
  {
    "description": "A grassy field with tall grass.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0004.JPG",
    "inference_time_sec": 39.48,
    "processed_at": "2026-02-03T00:30:51.239255"
  },
  {
    "description": "A palm tree with fronds against a cloudy sky.",
    "labels": {
      "palm_tree": "95%",
      "sky": "90%",
      "clouds": "80%"
    },
    "confidence_score": 95,
    "filename": "P0005.JPG",
    "inference_time_sec": 42.27,
    "processed_at": "2026-02-03T00:31:33.718650"
  },
  {
    "description": "A sunny beach scene with a mountain in the background and ocean waves.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "beach": "99",
      "sun": "90"
    },
    "confidence_score": 95,
    "filename": "P0006.JPG",
    "inference_time_sec": 41.64,
    "processed_at": "2026-02-03T00:32:15.555245"
  },
  {
    "description": "A lion is resting on a log.",
    "labels": {
      "lion": "95",
      "tree": "80",
      "log": "90"
    },
    "confidence_score": 95,
    "filename": "P0007.JPG",
    "inference_time_sec": 39.22,
    "processed_at": "2026-02-03T00:32:54.874638"
  },
  {
    "description": "A rocky landscape with moss and gravel.",
    "labels": {
      "mountain": "90",
      "ocean": "0",
      "cat": "0"
    },
    "confidence_score": 95,
    "filename": "P0008.JPG",
    "inference_time_sec": 38.69,
    "processed_at": "2026-02-03T00:33:33.636534"
  },
  {
    "description": "A close-up image of a tree branch with white flowers and green foliage, set against a blurred background of trees and possibly moss.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 8,
    "filename": "P0009.JPG",
    "inference_time_sec": 39.57,
    "processed_at": "2026-02-03T00:34:13.336160"
  },
  {
    "description": "A white Japanese castle tower is prominently featured in a vertical shot. People are visible in the foreground.",
    "labels": {
      "castle": "95",
      "tower": "90",
      "people": "60",
      "sky": "85"
    },
    "confidence_score": 90,
    "filename": "P0010.JPG",
    "inference_time_sec": 40.87,
    "processed_at": "2026-02-03T00:34:54.416964"
  },
  {
    "description": "The image shows a field of cosmos flowers, including white and pink varieties, with some green foliage and small red flowers in the background.",
    "labels": {
      "cosmos": "95%",
      "flowers": "80%",
      "green foliage": "70%",
      "red flowers": "30%"
    },
    "confidence_score": 95,
    "filename": "P0011.JPG",
    "inference_time_sec": 42.47,
    "processed_at": "2026-02-03T00:35:37.052653"
  },
  {
    "description": "A rhinoceros is standing in a grassy area with a road in the background.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0012.JPG",
    "inference_time_sec": 39.28,
    "processed_at": "2026-02-03T00:36:16.498329"
  },
  {
    "description": "A sunny beach scene with ocean waves and mountains in the background.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "wave": "85"
    },
    "confidence_score": 95,
    "filename": "P0013.JPG",
    "inference_time_sec": 39.67,
    "processed_at": "2026-02-03T00:36:56.404612"
  },
  {
    "description": "A low-angle shot of a metal bridge structure with a cloudy sky in the background.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0014.JPG",
    "inference_time_sec": 39.78,
    "processed_at": "2026-02-03T00:37:36.303435"
  },
  {
    "description": "The image shows a crab with prominent claws and a textured body. The background is dark, likely underwater.",
    "labels": {
      "crab": "95",
      "ocean": "70",
      "dark": "90"
    },
    "confidence_score": 95,
    "filename": "P0015.JPG",
    "inference_time_sec": 39.35,
    "processed_at": "2026-02-03T00:38:15.758938"
  },
  {
    "description": "A cat with a tortoiseshell pattern is sitting on a stone pavement.",
    "labels": {
      "cat": "95",
      "stone": "85",
      "pavement": "70"
    },
    "confidence_score": 90,
    "filename": "P0016.JPG",
    "inference_time_sec": 38.96,
    "processed_at": "2026-02-03T00:38:54.829966"
  },
  {
    "description": "A silhouette of a mountain is visible against a dusky sky over an ocean. Tall grasses frame the foreground.",
    "labels": {
      "mountain": "95",
      "ocean": "90",
      "grasses": "98"
    },
    "confidence_score": 95,
    "filename": "P0017.JPG",
    "inference_time_sec": 40.08,
    "processed_at": "2026-02-03T00:39:35.045785"
  }
]

HX370 (iGPU)-Auto-Shared (0.5G+)

[
  {
    "description": "A bento box with various Japanese dishes.",
    "labels": {
      "salmon": "80%",
      "rice": "95%",
      "seaweed": "70%",
      "egg": "60%",
      "pickled vegetables": "75%",
      "shrimp": "30%",
      "tomato": "65%",
      "pink yam": "40%"
    },
    "confidence_score": 95,
    "filename": "AI0001.png",
    "inference_time_sec": 47.26,
    "processed_at": "2026-02-03T01:00:04.214298"
  },
  {
    "description": "A scenic view of a mountain range with pine trees, bathed in the warm light of sunrise.",
    "labels": {
      "mountain": "95",
      "forest": "85",
      "trees": "90",
      "sky": "70",
      "sun": "60"
    },
    "confidence_score": 95,
    "filename": "AI0002.png",
    "inference_time_sec": 41.05,
    "processed_at": "2026-02-03T01:00:45.315789"
  },
  {
    "description": "The image shows a floral pattern with purple and white flowers.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "AI0003.png",
    "inference_time_sec": 39.04,
    "processed_at": "2026-02-03T01:01:24.403618"
  },
  {
    "description": "A wide shot of a blue ocean with a distant coastline and ships.",
    "labels": {
      "ocean": "95%",
      "sea": "85%",
      "coastline": "60%",
      "ships": "40%"
    },
    "confidence_score": 90,
    "filename": "P0001.JPG",
    "inference_time_sec": 42.02,
    "processed_at": "2026-02-03T01:02:06.561950"
  },
  {
    "description": "Close-up of a weathered tree trunk with gnarled branches.",
    "labels": {
      "tree": "100%"
    },
    "confidence_score": 95,
    "filename": "P0002.JPG",
    "inference_time_sec": 39.26,
    "processed_at": "2026-02-03T01:02:45.932671"
  },
  {
    "description": "A cluster of ripe red blackberries growing on a green leafy plant.",
    "labels": {
      "blackberry": "100%",
      "leaf": "95%",
      "plant": "90%"
    },
    "confidence_score": 95,
    "filename": "P0003.JPG",
    "inference_time_sec": 40.57,
    "processed_at": "2026-02-03T01:03:26.567321"
  },
  {
    "description": "A grassy field with tall grass.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0004.JPG",
    "inference_time_sec": 40.64,
    "processed_at": "2026-02-03T01:04:07.416457"
  },
  {
    "description": "A palm tree with fronds against a cloudy sky.",
    "labels": {
      "palm_tree": "95%",
      "sky": "90%",
      "clouds": "80%"
    },
    "confidence_score": 95,
    "filename": "P0005.JPG",
    "inference_time_sec": 40.18,
    "processed_at": "2026-02-03T01:04:47.733387"
  },
  {
    "description": "A sunny beach scene with a mountain in the background and ocean waves.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "beach": "99",
      "sun": "90"
    },
    "confidence_score": 95,
    "filename": "P0006.JPG",
    "inference_time_sec": 40.44,
    "processed_at": "2026-02-03T01:05:28.296240"
  },
  {
    "description": "A lion is resting on a log.",
    "labels": {
      "lion": "95",
      "tree": "80",
      "log": "90"
    },
    "confidence_score": 95,
    "filename": "P0007.JPG",
    "inference_time_sec": 38.82,
    "processed_at": "2026-02-03T01:06:07.174141"
  },
  {
    "description": "A rocky landscape with moss and gravel.",
    "labels": {
      "mountain": "90",
      "ocean": "0",
      "cat": "0"
    },
    "confidence_score": 95,
    "filename": "P0008.JPG",
    "inference_time_sec": 38.87,
    "processed_at": "2026-02-03T01:06:46.093255"
  },
  {
    "description": "A close-up image of a tree branch with white flowers and green foliage, set against a blurred background of trees and possibly moss.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 8,
    "filename": "P0009.JPG",
    "inference_time_sec": 42.16,
    "processed_at": "2026-02-03T01:07:28.316913"
  },
  {
    "description": "A white Japanese castle tower is prominently featured in a vertical shot. People are visible in the foreground.",
    "labels": {
      "castle": "95",
      "tower": "90",
      "people": "60",
      "sky": "85"
    },
    "confidence_score": 90,
    "filename": "P0010.JPG",
    "inference_time_sec": 40.92,
    "processed_at": "2026-02-03T01:08:09.334838"
  },
  {
    "description": "The image shows a field of cosmos flowers, including white and pink varieties, with some green foliage and small red flowers in the background.",
    "labels": {
      "cosmos": "95%",
      "flowers": "80%",
      "green foliage": "70%",
      "red flowers": "30%"
    },
    "confidence_score": 95,
    "filename": "P0011.JPG",
    "inference_time_sec": 41.48,
    "processed_at": "2026-02-03T01:08:50.950920"
  },
  {
    "description": "A rhinoceros is standing in a grassy area with a road in the background.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0012.JPG",
    "inference_time_sec": 39.61,
    "processed_at": "2026-02-03T01:09:30.660097"
  },
  {
    "description": "A sunny beach scene with ocean waves and mountains in the background.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "wave": "85"
    },
    "confidence_score": 95,
    "filename": "P0013.JPG",
    "inference_time_sec": 40.69,
    "processed_at": "2026-02-03T01:10:11.490831"
  },
  {
    "description": "A low-angle shot of a metal bridge structure with a cloudy sky in the background.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0014.JPG",
    "inference_time_sec": 40.97,
    "processed_at": "2026-02-03T01:10:52.563640"
  },
  {
    "description": "The image shows a crab with prominent claws and a textured body. The background is dark, likely underwater.",
    "labels": {
      "crab": "95",
      "ocean": "70",
      "dark": "90"
    },
    "confidence_score": 95,
    "filename": "P0015.JPG",
    "inference_time_sec": 41.28,
    "processed_at": "2026-02-03T01:11:33.918442"
  },
  {
    "description": "A cat with a tortoiseshell pattern is sitting on a stone pavement.",
    "labels": {
      "cat": "95",
      "stone": "85",
      "pavement": "70"
    },
    "confidence_score": 90,
    "filename": "P0016.JPG",
    "inference_time_sec": 41.27,
    "processed_at": "2026-02-03T01:12:15.241105"
  },
  {
    "description": "A silhouette of a mountain is visible against a dusky sky over an ocean. Tall grasses frame the foreground.",
    "labels": {
      "mountain": "95",
      "ocean": "90",
      "grasses": "98"
    },
    "confidence_score": 95,
    "filename": "P0017.JPG",
    "inference_time_sec": 42.71,
    "processed_at": "2026-02-03T01:12:58.084220"
  }
]

HX370 (CPU)-N/A (System RAM)

[
  {
    "description": "A bento box with various Japanese dishes.",
    "labels": {
      "salmon": "80%",
      "rice": "95%",
      "seaweed": "70%",
      "egg": "60%",
      "pickled vegetables": "75%",
      "shrimp": "30%",
      "tomato": "65%",
      "pink yam": "40%"
    },
    "confidence_score": 95,
    "filename": "AI0001.png",
    "inference_time_sec": 92.64,
    "processed_at": "2026-02-03T07:11:46.421477"
  },
  {
    "description": "A scenic view of a mountain range with pine trees, bathed in the warm light of sunrise.",
    "labels": {
      "mountain": "95",
      "forest": "90",
      "trees": "98",
      "sky": "85",
      "sun": "70"
    },
    "confidence_score": 95,
    "filename": "AI0002.png",
    "inference_time_sec": 89.75,
    "processed_at": "2026-02-03T07:13:16.194836"
  },
  {
    "description": "The image shows a floral pattern with purple and white flowers.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "AI0003.png",
    "inference_time_sec": 88.6,
    "processed_at": "2026-02-03T07:14:44.840787"
  },
  {
    "description": "A wide shot of a blue ocean with a distant coastline and ships.",
    "labels": {
      "ocean": "95%",
      "sea": "85%",
      "coastline": "60%",
      "ships": "40%"
    },
    "confidence_score": 90,
    "filename": "P0001.JPG",
    "inference_time_sec": 96.83,
    "processed_at": "2026-02-03T07:16:21.794485"
  },
  {
    "description": "Close-up of a weathered, gnarled tree trunk with intricate bark patterns.",
    "labels": {
      "tree": "100%",
      "wood": "95%",
      "branch": "80%",
      "bark": "75%"
    },
    "confidence_score": 95,
    "filename": "P0002.JPG",
    "inference_time_sec": 89.84,
    "processed_at": "2026-02-03T07:17:51.747483"
  },
  {
    "description": "A cluster of red mulberries growing on a green leafy plant.",
    "labels": {
      "mulberries": "95%",
      "leaves": "90%",
      "plant": "85%"
    },
    "confidence_score": 95,
    "filename": "P0003.JPG",
    "inference_time_sec": 89.23,
    "processed_at": "2026-02-03T07:19:21.015931"
  },
  {
    "description": "A grassy field with tall grass, likely in a rural or natural setting. There is dense foliage in the background.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0004.JPG",
    "inference_time_sec": 89.28,
    "processed_at": "2026-02-03T07:20:50.437305"
  },
  {
    "description": "A palm tree with a large, textured trunk and numerous fronds. The background is a bright blue sky with scattered white clouds.",
    "labels": {
      "palm_tree": "95",
      "sky": "85",
      "clouds": "70",
      "tree": "90"
    },
    "confidence_score": 95,
    "filename": "P0005.JPG",
    "inference_time_sec": 89.2,
    "processed_at": "2026-02-03T07:22:19.788677"
  },
  {
    "description": "A sunny beach scene with a mountain in the background and ocean waves.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "beach": "99",
      "sun": "90"
    },
    "confidence_score": 95,
    "filename": "P0006.JPG",
    "inference_time_sec": 88.34,
    "processed_at": "2026-02-03T07:23:48.282783"
  },
  {
    "description": "A lion is resting on a log.",
    "labels": {
      "lion": "95",
      "log": "85",
      "tree": "70"
    },
    "confidence_score": 98,
    "filename": "P0007.JPG",
    "inference_time_sec": 89.51,
    "processed_at": "2026-02-03T07:25:17.872628"
  },
  {
    "description": "A rocky landscape with moss and gravel.",
    "labels": {
      "rocks": "95%",
      "moss": "15%",
      "gravel": "10%"
    },
    "confidence_score": 90,
    "filename": "P0008.JPG",
    "inference_time_sec": 88.61,
    "processed_at": "2026-02-03T07:26:46.549271"
  },
  {
    "description": "A close-up image of a flowering tree with white blossoms, surrounded by branches and foliage.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0009.JPG",
    "inference_time_sec": 90.2,
    "processed_at": "2026-02-03T07:28:16.846609"
  },
  {
    "description": "A white Japanese castle tower is prominently featured in the image, with people visible in the foreground.",
    "labels": {
      "castle": "95",
      "people": "30",
      "sky": "70"
    },
    "confidence_score": 90,
    "filename": "P0010.JPG",
    "inference_time_sec": 88.06,
    "processed_at": "2026-02-03T07:29:45.025558"
  },
  {
    "description": "The image shows a field of cosmos flowers, including white and pink varieties, with some green foliage.",
    "labels": {
      "cosmos": "95%",
      "flower": "90%",
      "green foliage": "70%",
      "cosmos flower": "85%"
    },
    "confidence_score": 95,
    "filename": "P0011.JPG",
    "inference_time_sec": 91.62,
    "processed_at": "2026-02-03T07:31:16.821674"
  },
  {
    "description": "A rhinoceros is standing in a grassy area with a road in the background.",
    "labels": {
      "mountain": "0%",
      "ocean": "0%",
      "cat": "0%"
    },
    "confidence_score": 95,
    "filename": "P0012.JPG",
    "inference_time_sec": 87.82,
    "processed_at": "2026-02-03T07:32:44.747398"
  },
  {
    "description": "A sunny beach scene with ocean waves and mountains in the background.",
    "labels": {
      "mountain": "95",
      "ocean": "98",
      "wave": "85"
    },
    "confidence_score": 95,
    "filename": "P0013.JPG",
    "inference_time_sec": 89.66,
    "processed_at": "2026-02-03T07:34:14.542667"
  },
  {
    "description": "A low-angle shot of a metal bridge structure against a cloudy sky.",
    "labels": {
      "bridge": "95",
      "sky": "85",
      "metal": "75",
      "urban": "20"
    },
    "confidence_score": 90,
    "filename": "P0014.JPG",
    "inference_time_sec": 91.31,
    "processed_at": "2026-02-03T07:35:46.004381"
  },
  {
    "description": "The image shows a crab with prominent claws and a textured shell. The background is dark.",
    "labels": {
      "crab": "95",
      "ocean": "5",
      "mountain": "0",
      "cat": "0"
    },
    "confidence_score": 90,
    "filename": "P0015.JPG",
    "inference_time_sec": 87.94,
    "processed_at": "2026-02-03T07:37:14.023321"
  },
  {
    "description": "A cat with a tortoiseshell pattern is sitting on a stone pavement.",
    "labels": {
      "cat": "95",
      "stone": "85",
      "pavement": "70"
    },
    "confidence_score": 90,
    "filename": "P0016.JPG",
    "inference_time_sec": 86.47,
    "processed_at": "2026-02-03T07:38:40.566594"
  },
  {
    "description": "A silhouette of a mountain is visible against a dusky sky over an ocean. Tall grasses frame the foreground.",
    "labels": {
      "mountain": "95",
      "ocean": "90",
      "grasses": "98"
    },
    "confidence_score": 95,
    "filename": "P0017.JPG",
    "inference_time_sec": 89.01,
    "processed_at": "2026-02-03T07:40:09.714373"
  }
]

I got tired of writing E2E tests, so I built an AI that runs them for me

2026-02-06 00:00:17

I got tired of writing E2E tests, so I built an AI that runs them for me

QA is unavoidable… but painful

Whether you’re building side projects or working professionally, one thing never goes away:

Quality Assurance.

No matter how great your product is, users won’t trust it if it’s full of bugs.

But here’s the reality:

  • In side projects, we barely have time to build features — QA gets skipped.
  • In companies, QA is mandatory — but it slows everything down.

The cycle becomes:

Fix → QA → Fix → Re-QA → Repeat forever

At some point I started wondering:

Why is ensuring quality still so expensive?

Why is QA still so manual?

The moment everything clicked

While thinking about this problem, I discovered an open-source project called

Browser Use.

It lets AI control a real browser.

That’s when the idea hit me:

What if we could write tests in plain English and let AI do the QA?

So I built it.

Meet Test Pilot

https://test-pilot.dev

Test Pilot is an AI QA tool that runs browser tests for you.

When you run a test, a real browser opens in the cloud (or locally) and the AI performs the QA automatically.

Here’s what it looks like:

Instead of writing test code, you simply describe what you want to verify.

For example:

  • Verify that a user can log in
  • Check that a product can be added to the cart
  • Ensure the purchase completion screen appears

That’s it.

The AI performs the steps and verifies the results.

Why natural language?

Because writing tests is expensive.

Test code requires:

  • Technical knowledge
  • Maintenance
  • Constant updates after UI changes

And eventually…

Tests become the thing teams postpone.

Natural language removes that barrier.

You can write tests the same way you write product specs.

This also makes tests accessible to:

  • PMs
  • Designers
  • Non-engineers

Now the whole team can understand what is being tested.

Record once, turn it into QA

We also built a browser extension that records your actions.

Instead of writing tests, you can:

  1. Open your app
  2. Click through a flow once
  3. Save it as a test

No code. No scripting.

Just record and run.

This dramatically lowers the barrier to starting QA.

Run tests in the cloud or locally

Tests can run in:

  • Cloud (quick and easy)
  • Local Runner (Mac)

Local execution is especially useful when:

  • You need logged-in sessions
  • Your app is behind a firewall
  • You’re testing internal tools

This makes the tool usable from side projects to production teams.

Under the hood

Here’s the high-level stack:

Frontend

  • Next.js

Backend

  • Python / FastAPI

Browser Automation

  • Browser Use (Playwright-based)

Cloud Execution

  • Celery for async test runs

Nothing magical — just technology chosen to reduce the barrier to QA.

The real goal

This started as a tool I wanted for myself.

But it grew into the largest product I’ve ever built.

There’s still a lot to improve, and it’s far from perfect.

But if you’ve ever felt that QA is heavy, slow, or constantly postponed…

I hope this can help.

Try it

If this sounds interesting, I’d love your feedback.

https://test-pilot.dev

Your infrastructure isn’t ready for agentic development at scale

2026-02-05 23:53:22

Read this blog on Signadot.

I have spent the last year watching the AI conversation shift from smart autocomplete to autonomous contribution. When I test tools like Claude Code or GitHub Copilot Workspace, I am no longer just seeing code suggestions. I am watching them solve tickets and refactor entire modules.

The promise is seductive. I imagine assigning a complex task and returning to merged work. But while these agents generate code in seconds, I have discovered that code verification is the new bottleneck.

For agents to be force multipliers, they cannot rely on humans to validate every step. If I have to debug every intermediate state, my productivity gains evaporate. To achieve 10 times the impact, we must transition to an agent-driven loop where humans provide intent while agents handle implementation and integration.

The code generation feedback loop crisis

Consider a scenario where an agent is tasked with updating a deprecated API endpoint in a user service. The agent parses the codebase, identifies the relevant files, and generates syntactically correct code. It may even generate a unit test that passes within the limited context of that specific repository.

However, problems emerge when code interacts with the broader system. A change might break a contract with a downstream payment gateway or an upstream authentication service. If the agent cannot see this failure, it assumes the task is complete and opens a pull request.

The burden then falls on human developers. They have to pull down the agent’s branch, spin up a local environment, or wait for a slow staging build to finish, only to discover the integration error. The developer pastes the error log back into the chat window and asks the agent to try again. This ping-pong effect destroys velocity.

Boris Cherny, creator of Claude Code, has noted the necessity of closed-loop systems for agents to be effective. An agent is only as capable as its ability to observe the consequences of its actions. Without a feedback loop that includes real runtime data, an agent is building in the dark.

In cloud native development, unit tests and mocks are insufficient for this feedback. In a microservices architecture, correctness is a function of the broader ecosystem.

Code that passes a unit test is merely a suggestion that it might work. True verification requires the code to run against real dependencies, real network latency, and real data schemas. For an agent to iterate autonomously, it needs access to runtime reality.

The requirement: Realistic runtime environments at scale

In a recent blog post, “Effective harnesses for long-running agents,” Anthropic’s engineering team argued that an agent’s performance is strictly limited by the quality of its harness. If the harness provides slow or inaccurate feedback, the agent cannot learn or correct itself.

This presents a massive infrastructure challenge for engineering leadership. In a large organization, you might deploy 100 autonomous agents to tackle backlog tasks simultaneously. To support this, you effectively need 100 distinct staging environments.

The traditional approach to this problem fails at scale. Spinning up full Kubernetes namespaces or ephemeral clusters for every task is cost-prohibitive and slow. Provisioning a full cluster with 50 or more microservices, databases, and message queues can take 15 minutes or more. This latency is fatal for an AI workflow. Large language models (LLMs) operate on a timescale of seconds.

We are left with a fundamental conflict. We need production-like fidelity to ensure reliability, but we cannot afford the production-level overhead for every agentic task. We need a way to verify code that is fast, cheap, and accurate.

The solution: Environment virtualization

The answer lies in decoupling the environment from the underlying infrastructure. This concept is known as environment virtualization.

Environment virtualization allows the creation of lightweight and ephemeral sandboxes within a shared Kubernetes cluster. In this model, a baseline environment runs the stable versions of all services. When an agent proposes a change to a specific service, such as the user service mentioned earlier, it does not clone the entire cluster. Instead, it spins up only the modified workload containing the agent’s new code as a shadow deployment.

The environment then utilizes dynamic traffic routing to create the illusion of a dedicated environment. It employs context propagation headers to route specific requests to the agent’s sandbox. If a request carries a specific routing key associated with the agent’s task, the service mesh or ingress controller directs that request to the shadow deployment. All other downstream calls fall back to the stable baseline services.

This architecture solves the agent-environment fit in three specific ways:

  1. Speed: Because a single container or pod is launching, rather than a full cluster, sandboxes spin up in seconds.

  2. Cost: The infrastructure footprint is minimal. You are not paying for idle databases or duplicate copies of stable services.

  3. Fidelity: Agents test against real dependencies and valid data rather than stubs. The modified service interacts with the actual payment gateways and databases in the baseline.

The seamless verification workflow for AI agents

The mechanics of this verification loop rely on precise context propagation, typically handled through standard tracing headers like OpenTelemetry baggage.

When an agent works on a task, its environment is virtually mapped to the remote Kubernetes cluster. This setup supports conflict-free parallelism. Multiple agents can simultaneously work on the same microservice in different sandboxes without collision because routing is determined by unique headers attached to test traffic.

Here is the autonomous workflow for an agent refactoring a microservice:

  1. Generation: The agent analyzes a ticket and generates a code fix with local static analysis. At this stage, the code is theoretical.

  2. Instantiation: The agent triggers a sandbox via the Model Context Protocol (MCP) server. This deploys only the modified workload alongside the running baseline in seconds.

  3. Verification: The agent runs integration tests against the cluster using a specific routing header. Requests route to the modified service while dependencies fall back to the baseline.

  4. Feedback: If the change breaks a downstream contract, the baseline service returns a real runtime error (e.g., 400 Bad Request). The agent captures this actual exception rather than relying on a mock.

  5. Iteration: The agent analyzes the error, refines the code to fix the integration failure, and updates the sandbox instantly. It runs the test again to confirm the fix works in the real environment.‍

  6. Submission: Once tests pass, the agent submits a verified pull request (PR). The human reviewer receives a sandbox link to interact with the running code immediately, bypassing local setup.

Why engineering’s future is autonomous

As we scale the use of AI agents, the bottleneck moves from the keyboard to the infrastructure. If we treat agents as faster typists but force them to wait for slow legacy CI/CD pipelines, we gain nothing. We simply build a longer queue of unverified pull requests.

To move toward a truly autonomous engineering workforce, we must give agents the ability to see. They need to see how their code performs in the real world rather than just in a text editor. They need to experience the friction of deployment and the reality of network calls. This is Signadot’s approach.

Environment virtualization is shifting from a tool for developer experience to foundational infrastructure. By closing the loop, agents can do the messy and iterative work of integration. This leaves architects and engineers free to focus on system design, high-level intent, and the creative aspects of building software.