1 puntos por GN⁺ 4 일 전 | 1 comentarios | Compartir por WhatsApp
  • Un proyecto personal que llevaba mucho tiempo pendiente estaba más enfocado en terminar la implementación que en aprender algo nuevo, así que era ideal para probar una herramienta de asistencia para programar
  • Reimplementó un shim que expone YouTube Music mediante la API de OpenSubsonic, para que distintos clientes de Subsonic pudieran conectarse de la misma forma
  • Primero fijó una estructura mínima y convenciones de implementación, y luego trabajó en ciclos cortos de iteración, ejecutando tanto la generación de stubs basada en el spec de OpenAPI como pruebas de conexión con clientes reales
  • La implementación inicial, que solo seguía el spec, se rompió de inmediato al conectarla en la práctica, y fue mejorando hasta permitir búsqueda y reproducción repitiendo revisión de logs de requests y agregando pruebas unitarias
  • Si no es un proyecto stretch para aprender, sino simplemente un proyecto que te gustaría que existiera, las herramientas de asistencia para programar pueden ayudar mucho a convertir trabajo postergado en un servicio que realmente uses

Contexto del proyecto y enfoque

  • Un proyecto personal que había tocado hace mucho tiempo y nunca terminó resultó ideal para probar herramientas de asistencia para programar con IA
    • Lo que revivió fue un shim que conecta YouTube Music con la API de OpenSubsonic
    • OpenSubsonic se usaba como un contrato de API para separar cliente y servidor en streaming de música
    • Como servidor usó Navidrome, como cliente de escritorio Feishin y en Android Symfonium
  • El shim expone YouTube Music de forma compatible con la API de OpenSubsonic, para que cualquier cliente pueda conectarse
    • Para consultar metadatos usó ytmusicapi, y para streaming invocó yt-dlp de forma programática
    • El streaming básico se conectó relativamente fácil, pero quedaba una larga cola de trabajo para implementar todos los endpoints conforme al estándar
  • Este proyecto encajaba bien con herramientas de asistencia para programar porque se centraba más en implementar un spec claro que en resolver un problema nuevo u original
    • Lo llevó como un experimento reimplementando desde cero con Claude Code y Opus 4.6

Configuración inicial

  • El punto de partida fue un proyecto mínimo con estructura restringida desde el inicio
    • Creó un proyecto con uv y agregó como dependencias fastapi, pydantic, ytmusicapi y yt-dlp
    • Reemplazó main.py por el archivo principal de ejemplo de FastAPI y puso el spec OpenAPI de OpenSubsonic dentro de una carpeta
    • En el README dejó una nota breve sobre el rol del servidor, las librerías usadas, la URL de la documentación y la ubicación de openapi.json
    • Agregó un archivo TODO vacío y generó CLAUDE.md con /init
  • En CLAUDE.md dejó por separado las convenciones de implementación para reducir instrucciones repetitivas
    • Exigió type annotations y docstrings en argumentos y valores de retorno de los métodos
    • El modelado de datos se ajustó a las convenciones de Pydantic V2
    • Los docstrings debían usar secciones args y returns en estilo Google
    • Las pruebas se alinearon con un estilo moderno de pytest, usando funciones de nivel superior, assert y fixtures
  • Este punto de arranque quedó agrupado en un repositorio de git

Flujo de implementación del MVP

  • La forma de trabajo giró en torno a un modo de planificación y ciclos cortos de iteración
    • Lanzaba la siguiente tarea como prompt y revisaba qué faltaba o qué problemas había en el plan inicial
    • Si algo se desviaba, añadía links a recursos relevantes o, si había varias opciones, hacía que la herramienta buscara el enfoque más idiomático con una herramienta de búsqueda
    • Después de cada tarea usaba "Accept and clear context" para vaciar el contexto y repetir
  • La primera implementación se enfocó en crear stubs solo para los nuevos endpoints JSON a partir del spec OpenAPI
    • Había endpoints XML antiguos y endpoints JSON nuevos, pero redujo el alcance para manejar únicamente los nuevos
    • Tras implementar, añadió una etapa de validación para revisar de nuevo si todos los métodos coincidían
    • Incluso con el spec, en el primer intento hubo errores, y la segunda revisión detectó la mayoría
  • Después de cambios grandes volvía a ejecutar /init para actualizar CLAUDE.md según el nuevo estado
  • El siguiente paso fue definir e integrar la funcionalidad mínima para búsqueda y streaming
    • El objetivo era permitir que un cliente Subsonic pudiera buscar canciones y reproducirlas
    • Para búsqueda usó ytmusicapi y para streaming yt-dlp

Problemas detectados en la conexión real y correcciones

  • Aunque por fuera parecía una implementación convincente y rápida, al conectarla de verdad con Feishin se vino abajo de inmediato
    • Fue corrigiendo de forma iterativa probando el cliente directamente y pasando a Claude Code los logs de requests del servidor
    • También aparecieron diferencias de detalle que el spec no revelaba; por ejemplo, había que quitar el sufijo .view de los endpoints
  • Cada vez que aparecía un error, añadía una nueva prueba unitaria para evitar regresiones
  • Sin necesitar muchas iteraciones, Feishin terminó reproduciendo audio de verdad
    • El problema principal era que los endpoints stub no devolvían nada
    • La mayoría de los endpoints tuvieron que cambiarse para devolver respuestas con la estructura correcta, aunque estuvieran vacías
  • Aun así, ese MVP no era muy distinto del POC anterior, y la usabilidad real dependía de la larga cola de trabajo posterior

La larga cola de trabajo y la ampliación funcional completa

  • Según la documentación de OpenSubsonic, la API tenía alrededor de 80 endpoints repartidos en 15 categorías
  • El alcance necesario para el MVP era relativamente pequeño
    • getLicense, getUser, getGenres y getMusicDirectories devuelven colecciones vacías pero válidas
    • getSong se resolvió como un pass-through que devuelve tal cual el ID del query parameter y completa valores por defecto
    • search3 se implementó con una llamada simple a ytmusicapi
    • stream extrae una URL en formato "bestaudio" con una llamada a yt-dlp envuelta en asyncio.to_thread
    • getCoverArt obtiene la URL de la imagen de portada con yt-dlp
  • Para soportar la funcionalidad completa de clientes Subsonic hacía falta trabajo adicional
    • A las llamadas de ytmusicapi les añadió una caché simple en memoria para evitar límites de uso
    • Para almacenar metadatos musicales usó sqlite e implementó todos los endpoints de la categoría de browsing
    • También resolvió getTopSongs consultando la lista de top songs
  • Durante el streaming guardaba las canciones en disco para evitar volver a descargarlas
    • Si el cliente cortaba la conexión al endpoint de stream antes de que terminara la descarga, hacía falta una lógica extra para limpiar archivos incompletos
  • Todo esto eran tareas que en teoría también podía haber hecho manualmente, pero que nunca terminó haciendo; y como no había plan de despliegue, siguió saltándose partes más difíciles como la autenticación
  • Al final, en unas cuantas noches cortas, logró construir un servicio funcional al que los clientes Subsonic podían conectarse, y le puso por nombre Sub-standard

Dónde sí tiene sentido usarlo

  • Más que empujar herramientas de asistencia para programar a toda costa, también mantenía presente la preocupación por una posible pérdida de capacidades por dependencia
  • Sus proyectos personales se dividían en dos grandes grupos
    • Proyectos stretch para aprender y crecer
    • Proyectos que simplemente le gustaría que existieran
  • Este proyecto pertenecía al segundo grupo, y las herramientas de asistencia para programar encajaron bien para convertir en algo tangible un deseo que nunca había logrado terminar
    • Terminó teniendo un proyecto que de otro modo ni habría tocado, más parecido a reducir una pila de libros sin leer que a otra cosa
  • El criterio importante no era si hacer o no proyectos del segundo tipo, sino si al mismo tiempo seguía manteniendo también los proyectos de aprendizaje del primer tipo

1 comentarios

 
GN⁺ 4 일 전
Opiniones de Hacker News
  • El tipo de proyecto que más suelo abandonar eran los videojuegos
    Tenía decenas de carpetas de proyectos interrumpidos, y ahora los estoy retomando como experimentos
    La semana pasada volví a abrir uno de ellos con Claude y encajó realmente bien, además me ayudó a enderezar el rumbo de inmediato
    Como ya le había dicho que era un proyecto abandonado, me empujó a terminar primero el gameplay loop V0 y luego expandir desde ahí una vez que ya fuera divertido, así que no lo dejé tirado
    Si le daba ideas de diseño de juego, me entregaba código funcional; si le pasaba un paper sobre algoritmos procedurales, lo llevaba hasta una implementación; también ayudó con brainstorming de ítems, creó assets gráficos e incluso ayudó a construir el lore
    La combinación de Claude Code + Godot es realmente divertida, y hacía mucho que usar la computadora no me resultaba así de entretenido

    • Es la primera vez que veo que se refieren a un LLM como he en lugar de it
      No lo digo como crítica, pero me pareció bastante interesante y un poco incómodo
    • Yo soy exactamente lo contrario
      Tenía decenas de carpetas de experimentos, y varias de ellas ahora se están convirtiendo en proyectos reales
    • Algo divertido últimamente es retomar proyectos que empecé hace meses o hace un año con agent driven development, que se atoraron y quedaron pausados, y volver a empujarlos con el Claude más reciente o con codex
      Algunos ahora incluso llegan a ejecutarse, y otros siguen siendo demasiado complejos para que un agente los maneje
      Aun así, cada vez es más fácil crear apps personales
      Siento que no falta mucho para llegar al punto en que puedas decir: “Alexa, créame una app para iPhone que tome fotos de la comida del refrigerador, reúna la información nutricional, la sincronice con una app de ejercicio, compare ingredientes con los objetivos de mi app de salud y me mande por email mejores ingredientes según mi presupuesto, mi zona y mis restricciones dietéticas”, y tener la app en 15 minutos
    • Godot no parece ser una herramienta diseñada para llevarse bien con los LLM
      Por ejemplo, me salieron varios archivos tres incorrectos, y dejar que el LLM genere los IDs también se sintió bastante inestable
    • En la parte procedural también estoy experimentando con meter al LLM como parte del loop procedural
      Es una especie de narrativa en vivo montada encima
      Los modelos locales todavía son lentos y limitados, pero aun así fue bastante interesante ver qué resultados salían
  • Está realmente increíble
    Ahora hay una cantidad enorme de software personal
    Ayer hice un editor de texto nativo totalmente integrado con MediaWiki, con autocompletado de enlaces y ayuda para entrada de sintaxis
    Ese tipo de software casi no tiene valor para otras personas, así que no hay razón para que alguien más lo construya, y antes yo tampoco lo hacía porque tomaba demasiado tiempo
    Pero cuando delegas la programación a un agente, el cuello de botella deja de ser la implementación y pasa a ser mi atención, y me funciona muy bien ir metiendo estas tareas personales en los huecos mentales que tengo
    De verdad se siente como una gran época

    • Hace unas semanas por fin terminé un mod de Quake 2 que había empezado en 1998
      Gracias a la IA pude superar el burnout de después del COVID y el montón de proyectos a medio hacer
      Hoy también arreglé una herramienta de RDP relacionada con terminal y estoy retomando un issue que abrí en OpenRA hace 10 años
      El motor ahora es 10 veces más rápido y el pathfinding ya funciona bien en general
    • Es una locura
      Tengo como 120 herramientas personales, y es totalmente cierto que el cuello de botella se movió de la implementación al cambio de contexto
      Así que ahora dejo un archivo markdown en la raíz de cada proyecto y, cada vez que paro, anoto el estado y el siguiente paso
      Así, cuando vuelvo, no pago el costo de pasar 20 minutos reconstruyendo “¿en qué punto me quedé?”
      Como nadie más las va a usar, tampoco tengo la presión de cubrir edge cases ni de documentar; solo resuelvo exactamente mi problema y paso al siguiente
    • Me pregunto cuánto tiempo pasaste sin IA
      Viendo la explosión de productividad que sientes ahora, parece que también hacía falta bastante tiempo para acumular tantas pequeñas necesidades
    • También hice una app para planear un Scavenger Hunt de Pascua
      Da risa pensar lo nicho que es
  • Ya sabía programar, pero no tenía tiempo, y la IA fue un cambio de juego total que me permitió sacar proyectos open source al mundo
    Antes no me motivaba lo suficiente como para hacerlos, pero ahora estoy encantado creando apps GUI locales para Linux

    • Sambervise: https://github.com/edward-murrell/sambervise
      Es una app GUI de Linux para administrar remotamente un Samba 4 Active Directory Domain Controller
    • Krbtray: https://github.com/edward-murrell/krbtray
      Es una app GTK3 de bandeja del sistema para gestionar tickets de Kerberos en Linux Mint / Cinnamon y entornos GTK que usan GtkStatusIcon
    • Esto sí hace que me incline de verdad hacia la programación con IA
      Porque ambas son exactamente el tipo de apps que yo mismo necesitaba y estaba buscando
    • Otro cambio importante es que el costo de los refactors grandes bajó muchísimo
      Gracias a los asistentes de programación, ahora puedo intentar cambios estructurales profundos, incluyendo el diseño modular, en mucho menos tiempo que antes
      Claro que no sale gratis, y algunos modelos suelen producir código que no alcanza el estándar de mantenibilidad
      Haber ahorrado tiempo de escritura no significa que desaparezca el tiempo de correcciones repetidas, limpieza o de reforzar el system prompt y los archivos de instrucciones
  • No estoy muy de acuerdo con la idea de preocuparse por si usar demasiado estas herramientas puede deskillearte
    Soy millennial, y hago muebles con herramientas manuales y ensamblajes de madera tradicionales
    Nadie me enseñó; solo aprendí viendo recursos en línea, y aun así terminé pudiendo aprender lo que quería
    Tampoco me preocupa perder esa habilidad después, porque si la necesito puedo volver a aprenderla
    Los libros, los videos, las herramientas y la madera no van a desaparecer
    Usar IA no te crea un agujero negro en el cerebro solo porque ya no tecleas código a mano tan seguido
    No es como el Alzheimer, donde pierdes la información para siempre; solo hace falta un poco de calentamiento y vuelve rápido
    Incluso quienes pasaron de programar a gestión y luego regresaron años después estaban solo un poco oxidados, pero pudieron retomarlo
    Sobre todo en proyectos personales, ni siquiera hace falta quemar tokens de Opus
    Basta con usar algo barato como MiniMax, correrlo en un contenedor en modo yolo, y darle contexto, prompts, búsqueda web y un sistema de tickets como beads
    Como no es nada urgente, si sigues el orden brainstorm → plan → implementation → testing, y metes medios de prueba reales en vez de solo mocks o unit tests, puedes terminarlo ahorrando tiempo y dinero

  • Hace 12 años quise hacer una app sencilla que mostrara cuánto quedaba de mi día/semana/mes con barras, y también representara el clima con barras para temperatura máxima y mínima, nubosidad, etc.
    Lo resolví más o menos con texto y ASCII, pero no logré crear una interfaz que quisiera usar todos los días, y nunca pude hacer la UI gráfica
    Así que le describí a Claude Code la interfaz gráfica que quería y lo puse a trabajar, y salió exactamente la app que quería, además de que encontró un bug en el parser de fechas que yo no conocía
    Ahora tengo esa app siempre abierta en una esquina de la pantalla
    Lo siguiente que quiero hacer es una app para iPhone que desactive automáticamente la alarma matutina en los días en que mis hijos no tienen escuela
    No sé absolutamente nada de apps para iPhone ni tengo tiempo para aprender, así que antes ni lo intentaba
    Para apps personales, Claude Code es excelente de verdad, y como la calidad del código no es tan importante, alcanza perfectamente con usar el resultado tal cual

    • Claude Code funciona increíblemente bien para apps personales
      El clipboard manager para Mac que usé durante años empezó a comportarse raro después de una actualización del sistema, y las alternativas del App Store no tenían las funciones que yo quería
      Entonces vi el post de Simon Willison sobre vibe coding con SwiftUI y me hice uno con Claude Code
      Hicieron falta varias iteraciones, pero ahora hace todo lo que yo quería y más, desde la barra de menú de Mac
      En especial, me impresionó bastante pedirle a CC ideas de funciones adicionales y que me propusiera un montón de opciones en las que yo no había pensado, para luego implementar tal cual las que elegí
      Hace dos días también se me antojó un editor dedicado de markdown, parecido al nuevo componente de edición markdown de LibreOffice, pero más pequeño y ligero
      Así que armé el esquema con GPT 5.5 y lo implementé con CC, y después de solo dos sesiones de vibe coding ya tenía casi lista una app nativa ligera para Mac que abre y crea archivos, permite edición tipo procesador de texto y guarda en markdown canónico
      Lo único que todavía falta son las tablas markdown, y eso pienso pedírselo hoy
      https://simonwillison.net/2026/Mar/27/vibe-coding-swiftui/
      https://news.ycombinator.com/item?id=47298885
    • Totalmente
      Me gusta hacer cosas, pero a veces simplemente quiero obtener rápido el resultado terminado
      Cuando quiero una herramienta personal para un propósito específico sin regalarle un fin de semana entero, la ayuda de un LLM viene genial, y la calidad del código no importa demasiado
    • Puede que ni siquiera haga falta construir la app
      En iPhone quizá se pueda resolver con la app Shortcuts que ya viene por defecto
      Puedes crear un shortcut que apague todas las alarmas, leer señales como el calendario para encenderlas o apagarlas en fechas u horas específicas, y ejecutarlo con una programación periódica
  • En general creo que un side project tiene poco valor si no tienes ganas de hacerlo
    Si lo principal es el proceso y la experiencia, eso es ocio; si lo principal es el resultado, eso es trabajo
    Si haces muchos side projects solo por el resultado, al final básicamente estás trabajando en tu tiempo libre, y me pregunto si eso realmente es libertad
    La sociedad moderna ya nos exige demasiados resultados, así que al menos los side projects quisiera reservarlos para la salud mental
    Aun así, puede haber excepciones si hay un propósito en el que crees por un bien mayor, y ese tipo de propósito puede enriquecer el proceso mismo

    • Tengo muchos hobbies, y programar es solo uno de ellos
      A veces necesito software que haga más divertidos mis otros hobbies, pero eso no significa que quiera quitarle tiempo al hobby X para construir yo mismo ese software
      Además, ese trabajo a veces ni siquiera es el tipo de programación que yo disfruto por diversión
      Ahí fue donde encontré el sweet spot de programar con ayuda de LLM, y de hecho ya hice varias helper apps para disfrutar más mis otros hobbies
      Sigue siendo tiempo de hobby, pero ese hobby no tiene por qué ser programar
    • Puede ser así si programas por programar
      Pero si tienes una itch que quieres rascar o una ambición que quieres cumplir, y lo que te faltaba era tiempo o motivación, no veo por qué eso habría que llamarlo trabajo en tu tiempo libre
      Antes eran proyectos que se comían fines de semana o vacaciones, y ahora puedes levantar el esqueleto en 15 minutos; eso más bien se siente como lo opuesto al trabajo
    • Simpatizo con esa perspectiva y me parece una actitud bastante sana
      Llevo más de 30 años programando, pero siempre estuve satisfecho con apps de línea de comandos, y solo recientemente aprendí Qt para empezar a ponerles una UI de escritorio de verdad
      La curva de aprendizaje fue muy empinada, pero ya la superé más o menos
      Pero luego publiqué en LinkedIn capturas de la app diciendo que era open source y gratis, y recibí cientos de comentarios de gente estilo LinkedIn que ni siquiera me va a contratar
      Eran reacciones tipo “queremos integrarlo en nuestro workflow” o “esta no es la primera vez que alguien intenta esto”, y para nada me motivaron; más bien sentí que estaba trabajando para el beneficio de otros o recibiendo críticas inútiles
      Me pegó tanto que dejé de tocarlo como un mes, hasta que terminé aceptando que lo que de verdad me gustaba era el proceso mismo de aprender Qt y ver cobrar vida a mis programas viejos
      Así que ahora trato esto como si fuera mi project car
      Lo sigo desarmando y rehaciendo, rehago por completo el modelo de datos para ver ventajas y desventajas de otros diseños, también construyo vistas gráficas a mano y hasta le meto traducciones de idioma
      Funcionalmente ya está terminado, pero tengo como cinco versiones con estructuras internas totalmente distintas, y justo eso es lo divertido
      Lo uso muchísimo durante el trabajo todos los días, y nunca más lo volví a mencionar en LinkedIn
  • En mi repo personal ya tenía tres intentos de app de notas, y todos se habían quedado a medio camino entre la idea y el tiempo libre
    Pero gracias a Claude Code por fin terminé en dos meses la que de verdad quería
    El proceso de construirla fue el mejor hobby que he encontrado hasta ahora, mucho mejor que los juegos o el scroll
    Cuando una idea que llevas años arrastrando por fin sale al mundo, esa app termina llevando una parte mucho más profunda de ti, y creo que habrá muchísimos más solo builders haciendo cosas así

    • Pero quién lo compraría es otro asunto
      No es por menospreciar rehacer proyectos viejos, pero el mercado probablemente se llene de proyectos extremadamente especializados
      Antes las cajas de software traían especificaciones; ahora quizá haga falta algo como un nuevo lenguaje de modelado para explicar el propósito y el alcance de uso
  • Mi experiencia fue casi exactamente la misma
    Tenía un side project de agregación comparativa parado por más de un año en 20% completado, y una vez al mes lo abría, veía la lista de cosas por hacer, me agotaba y cerraba la pestaña
    Pero con Claude y unos cuantos fines de semana juntos logré atravesar esa pared de proyecto a medias
    Lo sorprendente no fue tanto la velocidad pura, sino que desapareció el costo de reentrada de tener que volver a cargarme en la cabeza durante una hora mi propio código viejo antes de poder hacer cualquier cosa
    El hype exagerado me irrita, pero creo que la mayoría de la gente que se burla de estas herramientas nunca ha probado por sí misma lo útiles que son para este tipo de trabajo aburrido

  • Siempre tuve más ideas de las que podía manejar, y varias de ellas eran bastante buenas
    Gracias a las herramientas de IA, ahora puedo implementar muchas más en una forma que más o menos funciona
    Irónicamente, el valor de ese tipo de implementación está cayendo muy rápido
    Hace unas semanas hice una pequeña librería de búsqueda que corre en el navegador y no necesita servidor; soporta la mayor parte del estilo Elasticsearch con term/matching query y aggregations, y también le añadí ANN vector search con WebGPU
    Era casi como decir “agrégale la feature X” y listo, y ya la usé en sitios reales
    No escala, pero para blogs o sitios de documentación es excelente, y el sitio de docs está en https://querylight.tryformation.com/
    Funciona exactamente como la imaginé, y siento que podría añadir sin demasiado esfuerzo las funciones long-tail de Elasticsearch
    En cambio, la reacción en GitHub fue bastante tibia
    Ahora todo el mundo parece demasiado ocupado usando IA para hacer lo suyo como para entusiasmarse mucho con el esfuerzo de otros, y la verdad se entiende
    Si necesitas una librería de búsqueda, puedes generarla tú mismo o dejar que la IA elija una adecuada por ti
    Además, esto tampoco me costó una cantidad monstruosa de trabajo
    El valor económico de proyectos así está cayendo rápido
    Aun así, a mí me gusta construir cosas y también creo que importa aprender la curva de estas herramientas
    Seguirá habiendo muchísimo trabajo por hacer, pero la gente esperará resultados aceptables pagando menos, y para cumplir esa expectativa hará falta dominar las herramientas
    Al final, cuando se amplía el rango de lo posible, también sube el estándar de la ambición, y pensar que, como la IA trabajará por ti, entonces ya no tendrás que esforzarte es un error
    Yo también he trabajado jornadas larguísimas en estos últimos meses

  • Durante años se me ocurrieron varias ideas de producto cada semana, pero todas se quedaban acumuladas en Apple Notes
    Sin embargo, en el último mes convertí tres de ellas en betas realmente utilizables, y ahora uso las tres todos los días