Skip to content

Blog Posts

No Queue Until It Is Needed: A YOLO Vision Platform That Grew by Evidence

By Marco A. Parra on Oct. 27, 2026 · 4 min read

An internal platform for YOLO training and inference started with an uncomfortable decision: the web layer waited with the connection open while the GPU worked, with no task queue. This post explains why, how every limit was written down together with the signal that would make it unacceptable, and what was built, and what was not, when those signals arrived.

architecturecomputer-visiondjangofastapimlopsyolo

Read More →

Gates Block, Never Warn: Putting an AI Agent to Work on My Job Search

By Marco A. Parra on Oct. 27, 2026 · 5 min read

Since August an AI agent has read job postings, analyzed them and composed my CVs. It is fast, and it can also invent a fact, forget a rule or attach the wrong file. This post is about the controls that made it safe to use: an approval bound to the exact text, checks that block instead of warning, one file per fact, and measuring the agent against my own decisions.

ai-agentsclaude-codehuman-in-the-loopllmpython

Read More →

The spreadsheet that became a system

By Marco A. Parra on Aug. 21, 2026 · 6 min read

Between 2017 and 2019 an Excel workbook with macros became the specification of a dimensional-control system for small sawmills: Bluetooth caliper, mobile app and statistical analysis in the cloud. This article covers the method — four control points, nominal versus target, deviation charts — and the design decision that determines whether such a tool ever reaches a small company. No code, no plant data.

data-acquisitionoperationsspcwood-industry

Read More →

What 68 sawmills told us about their data

By Marco A. Parra on Aug. 21, 2026 · 7 min read

In 2019 I was first author of INFOR Technical Report No. 223: a survey of 68 small and mid-sized Chilean sawmills about their machinery and, above all, how they capture and use their data. This article walks through what we found — 79 % tracked lumber dimensions on paper forms — and why that diagnosis ended up as a software specification.

data-acquisitionindustry-4-0operationswood-industry

Read More →

Bridging a COBOL Production System Without Touching It

By Marco A. Parra on Aug. 20, 2026 · 5 min read

A COBOL plant system exported fragmented flat files every night and nobody could report on them. This post walks through the integration platform that turned those exports into a normalized relational model — idempotent ingestion, transactional boundaries, and a scheduling module built on top — and what it taught me about modernizing without a rewrite.

backenddjangoetllegacy-systemspostgresql

Read More →

Hybrid Metaheuristics for Job-Shop Tardiness: What Worked and What Did Not

By Marco A. Parra on Aug. 20, 2026 · 4 min read

Minimizing total tardiness in a job shop is NP-hard, and real plants add precedence constraints that classical benchmarks ignore. This post explains how GRASP, VNS and ILS were combined into a hybrid engine, how the results were validated statistically, and — just as important — what the study does not claim.

metaheuristicsoperations-researchoptimizationpythonscheduling

Read More →

Show Code


views.py Code

def index(request):
    return _listing(request, published_posts(), index)


def published_posts():
    return Post.objects.filter(published_at__lte=timezone.now())


def _listing(request, queryset, view, tag=None):
    """Listado paginado: una entrada por artículo en el idioma activo.

    `view` es la vista que llama (index o tag_index): su "Show Code" enseña esa
    vista, la consulta de publicados y este listado, que es donde está el trabajo.
    """
    posts = pick_language(
        queryset.select_related("author").prefetch_related("tags"), translation.get_language()
    )
    page_obj = Paginator(posts, POSTS_PER_PAGE).get_page(request.GET.get("page"))
    logger.debug("Got %d posts (page %s)", len(posts), page_obj.number)
    return render(request, "blog/index.html", {
        "posts": page_obj.object_list, "page_obj": page_obj, "tag": tag,
        **show_code([view, published_posts, _listing], "blog/index.html"),
    })

Template

{% extends "base.html" %}
{% load blog_extras i18n static %}
{% block title %}{% trans "Blog" %} | Marco A. Parra F.{% endblock %}
{% block meta_description %}{% trans "Engineering notes on computer vision, backend architecture and industrial operations, each tied to a real project." %}{% endblock %}
{% block og_title %}{% trans "Blog" %} — Marco A. Parra F.{% endblock %}
{% block og_description %}{% trans "Engineering notes on computer vision, backend architecture and industrial operations, each tied to a real project." %}{% endblock %}
{% block extrahead %}
    {% get_current_language as FEED_LANGUAGE %}
    <link rel="alternate" type="application/atom+xml" href="{% url 'blog_feed' FEED_LANGUAGE %}" title="Atom">
{% endblock %}
{% block content %}
{% get_current_language as CURRENT_LANGUAGE %}
<div class="container blog-list py-4">
    {% if tag %}
        <h1 class="text-center mb-2">{% blocktrans %}Articles tagged “{{ tag }}”{% endblocktrans %}</h1>
        <p class="text-center text-muted mb-4"><a href="{% url 'blog_index' %}">← {% trans "All articles" %}</a></p>
    {% else %}
        <h1 class="text-center mb-4">{% trans "Blog Posts" %}</h1>
    {% endif %}
    {% for post in posts %}
        <article class="blog-entry py-4 border-bottom">
            <div class="d-flex gap-3 align-items-start">
                {% if post.hero_image %}
                    <a href="{% url 'blog-post-detail' post.slug %}" class="flex-shrink-0 d-none d-sm-block" tabindex="-1" aria-hidden="true">
                        <img src="{{ post.hero_image.thumbnail.100x100.url }}" alt="" class="rounded blog-thumb">
                    </a>
                {% elif post.hero_static %}
                    <a href="{% url 'blog-post-detail' post.slug %}" class="flex-shrink-0 d-none d-sm-block" tabindex="-1" aria-hidden="true">
                        <img src="{% static post.hero_static %}" alt="" class="rounded blog-thumb">
                    </a>
                {% endif %}
                <div class="flex-grow-1">
                    <h2 class="h3 mb-1">
                        <a href="{% url 'blog-post-detail' post.slug %}" class="text-reset text-decoration-none">{{ post.title }}</a>
                        {% if post.language != CURRENT_LANGUAGE %}
                            <span class="badge bg-secondary align-middle fs-6"
                                  title="{% trans "This article is only available in this language" %}">{{ post.language|upper }}</span>
                        {% endif %}
                    </h2>
                    <p class="blog-meta text-muted small mb-2">
                        {% include "blog/post-byline.html" %}
                        · {% blocktrans count n=post.content|reading_time %}{{ n }} min read{% plural %}{{ n }} min read{% endblocktrans %}
                    </p>
                    <p class="blog-summary mb-2">{{ post.summary }}</p>
                    {% include "blog/post-tags.html" %}
                    <a href="{% url 'blog-post-detail' post.slug %}" class="btn btn-sm btn-outline-dark">{% trans "Read More" %} →</a>
                </div>
            </div>
        </article>
    {% empty %}
        <p class="text-muted">{% trans "No articles yet." %}</p>
    {% endfor %}
    {% if page_obj.paginator.num_pages > 1 %}
    <nav class="d-flex justify-content-between align-items-center pt-4" aria-label="{% trans "Pagination" %}">
        {% if page_obj.has_previous %}
            <a class="btn btn-sm btn-outline-dark" href="?page={{ page_obj.previous_page_number }}">← {% trans "Newer" %}</a>
        {% else %}<span aria-hidden="true">&nbsp;</span>{% endif %}
        <span class="text-muted small">{% blocktrans with n=page_obj.number m=page_obj.paginator.num_pages %}Page {{ n }} of {{ m }}{% endblocktrans %}</span>
        {% if page_obj.has_next %}
            <a class="btn btn-sm btn-outline-dark" href="?page={{ page_obj.next_page_number }}">{% trans "Older" %} →</a>
        {% else %}<span aria-hidden="true">&nbsp;</span>{% endif %}
    </nav>
    {% endif %}
</div>

{% include 'partials/_show_code.html' %}
{% endblock %}