Dev.to
Cómo hacer una buena revisión de código
Revisar código es una de las actividades más subestimadas del desarrollo de software. La mayoría de los equipos la tratan como un trámite, algo que hay que aprobar antes de mergear. El resultado es que los PRs se aprueban con un “LGTM” después de dos minutos de scroll, y los problemas reales pasan de largo. Una revisión bien hecha no es leer línea por línea buscando typos. Es entender qué intenta hacer ese código, si lo hace de la manera correcta, y si introduce riesgos que no existían antes. Eso requiere un proceso, no un instinto. Este artículo cubre cómo estructurar ese proceso: qué revisar, en qué orden, qué preguntas hacer, y cómo detectar problemas de seguridad sin ser un experto en ciberseguridad. Empieza por el contexto, no por el código El error más común en code review es abrir el diff y empezar a leer desde la primera línea modificada. Antes de ver una sola línea, necesitas entender qué problema resuelve este cambio. Lee la descripción del PR. Si no hay descripción, o si dice “fixes bug”, ya encontraste el primer problema. Un PR sin contexto obliga al reviewer a reconstruir el razonamiento del autor desde cero, y eso aumenta la probabilidad de aprobar algo que no debería aprobarse. Lo que un buen PR debe explicar: Qué cambia no cómo, sino qué problema resuelve Por qué este approach si hay alternativas que se descartaron, decirlo Cómo probarlo, pasos para verificar que funciona Qué no cubre, scope explícito evita confusiones Si tienes esa información antes de ver el diff, tu revisión va a ser significativamente más efectiva. Qué revisar y en qué orden No toda línea de código merece el mismo nivel de atención. Un buen reviewer distribuye su energía de forma inteligente. Primero: arquitectura y flujo de datos. ¿El cambio tiene sentido a nivel de diseño? ¿Agrega una dependencia innecesaria? ¿Rompe alguna abstracción existente? Esto es lo más difícil de cambiar después. Segundo: lógica de negocio. ¿El código hace lo que dice que hace? ¿Los edge cases están cub
Fernando Gallardo
2026-06-18 11:08
👁 7
查看原文 →
Dev.to
Rejected by Google, Welcomed by Microsoft: A Journey Through Low-Level Grinding
There was a phase when Google was the only goal I could see. I pushed myself through endless DSA...
𝓣𝓱𝓮𝓛𝓪𝔃𝔂 𝓰𝓲𝓻𝓵 ◕‿◕
2026-06-18 10:48
👁 6
查看原文 →
Product Hunt
Paradigm
Turn any goal into a personalized, adaptive learning path. Discussion | Link
Justin Jincaid
2026-06-18 10:09
👁 2
查看原文 →
HackerNews
Midjourney Medical
https://www.midjourney.com/medical Video: https://x.com/midjourney/status/2067422898407837797
ricochet11
2026-06-18 09:59
👁 8
查看原文 →
Dev.to
OrqueIO: Fully Independent Platform
Introduction Enterprise orchestration is evolving. As systems grow more distributed and...
Ghofrane WECHCRIA
2026-06-18 09:14
👁 9
查看原文 →
Dev.to
PostgreSQL 22036 Error: Causes and Solutions Complete Guide
PostgreSQL Error 22036: non numeric sql json item PostgreSQL error code 22036 ( non numeric sql json item ) occurs when a SQL/JSON path expression attempts to perform a numeric operation on a JSON item that is not a number — such as a string, boolean, array, or object. This error was introduced alongside the SQL/JSON Path feature in PostgreSQL 12 and typically surfaces in queries using jsonb_path_query , jsonb_path_exists , or the @@ and @? operators. Top 3 Causes 1. Numeric Values Stored as Strings The most common cause is JSON data where numbers are stored as quoted strings (e.g., "price": "100" instead of "price": 100 ). This frequently happens with data from external APIs or legacy systems that don't enforce type consistency. -- Triggers 22036: "price" is a string, not a number SELECT jsonb_path_query ( '{"price": "100"}' , '$.price + 50' ); -- ERROR: non numeric SQL/JSON item -- Fix: Use the .double() conversion method in JSON Path SELECT jsonb_path_query ( '{"price": "100"}' , '$.price.double() + 50' ); -- Result: 150 -- Alternative fix: Cast at the SQL level SELECT ( data ->> 'price' ):: numeric + 50 FROM ( SELECT '{"price": "100"}' :: jsonb AS data ) t ; -- Result: 150 2. Arithmetic Applied Directly to Arrays or Objects Developers sometimes write JSON Path expressions that target an entire array or object instead of individual elements, then attempt arithmetic on the result. -- Triggers 22036: $.scores returns an array, not a number SELECT jsonb_path_query ( '{"scores": [80, 90, 70]}' , '$.scores + 10' ); -- ERROR: non numeric SQL/JSON item -- Fix: Target a specific array index SELECT jsonb_path_query ( '{"scores": [80, 90, 70]}' , '$.scores[0] + 10' ); -- Result: 90 -- Fix: Use wildcard to apply operation to each element SELECT jsonb_path_query ( '{"scores": [80, 90, 70]}' , '$.scores[*] + 10' ); -- Results: 90, 100, 80 -- Fix: Use unnest for aggregation use cases SELECT elem :: numeric + 10 FROM jsonb_array_elements ( '{"scores": [80, 90, 70]}' :: jsonb ->
umzzil nng
2026-06-18 08:02
👁 12
查看原文 →
Dev.to
Limn Engine — Complete API Reference
📚 Limn Engine — Complete API Reference Quick Navigation Class Purpose Level Display Canvas, game loop, input, camera, scenes 🟢 L1 Component Every visible game object 🟢 L1 Camera Viewport control (follow, shake, zoom) 🟡 L2 move Movement, physics, particles, helpers 🟢 L1 state Read-only query helpers 🟢 L1 TileMap Grid-based levels 🟡 L2 Tctxt Rich text with backgrounds 🟢 L1 Sound Single audio file 🟢 L1 SoundManager Multiple sounds, volume control 🔴 L4 ParticleSystem Emit, burst, continuous emitters 🟠 L3 Sprite Spritesheet animation 🟡 L2 Display The heart of every Limn Engine game. Creates the canvas, runs the game loop, captures input, manages the camera, and controls scenes. Constructor const display = new Display (); Properties Property Type Description .canvas HTMLCanvasElement The game canvas .context CanvasRenderingContext2D 2D drawing context .keys Array Boolean array indexed by keyCode .scene Number Current active scene (default 0) .camera Camera Attached camera instance .deltaTime Number Time since last frame (seconds) .fps Number Current frames per second .frameNo Number Total frames elapsed .x / .y Number false Methods Method Parameters Description .start(w, h, node) width, height, parentNode Initialise canvas and start game loop .perform() — Activate dual-canvas pipeline (call before .start() ) .add(comp, scene) Component, scene number Register a Component for rendering .stop() — Pause the game loop .scale(w, h) width, height Resize canvas after start .backgroundColor(color) CSS color Set background colour .lgradient(dir, c1, c2) direction, color, color Linear gradient background .rgradient(c1, c2) color, color Radial gradient background .fullScreen() — Enter fullscreen .exitScreen() — Exit fullscreen .tileMap() — Build TileMap from display.map and display.tile Usage const display = new Display (); display . perform (); display . start ( 800 , 600 ); display . backgroundColor ( " #0a0a2a " ); const player = new Component ( 40 , 40 , " blue " , 100 , 100 ); d
Kehinde Owolabi
2026-06-18 07:49
👁 6
查看原文 →
Dev.to
Building a World Cup Bracket Picker with AWS Blocks
AWS just launched AWS Blocks, an open-source TypeScript framework that gives you backend capabilities...
Salih Guler
2026-06-18 07:28
👁 8
查看原文 →
Reddit r/programming
Is it the end of REST, gRPC, Thrift, SignalR and GraalVM?
Guys! What’s the best way to gather early adopters to evaluate new dev tool that literally just killed REST, gRPC, Thrift, SignalR, DAPR and GraalVM in one shot? The concept is to shift away from writing code to expose any business logic in any specific integration strategy like create REST controllers or provide proto interfaces or expose via subscription to queue events as well as avoid implementing the integration-specific client code to call that rest or gRPC endpoint. Instead of that the question comes when I call “zip” module from Nuget in .net I just use its public methods and handle exceptions. Why if I want to use it remotely I should expose the same method via REST, map it to routes, strange parameters, http codes and next call that on other end? Wy I cannot just say it will be on this remote node so whenever I ca that method to “unzip” my intention just travel over network and execute there? The potential solution is to bridge runtimes on native level. Think of it like intercepting developer intention at abstract syntax tree so when you perform operation in code before it gets executed and just send it to the remote runtime fulfill job there and return result. Wouldn’t be beautiful if you could just call methods of any module regardless if it’s same tech or different and regardless of its in memory or remotely? Just by calling methods? I know I know there are isolation interfaces etc… but if you apply those concepts design facade properly, decide what should be public, and allow to attach to those calls any headers (to still support JWT, NTLM, api Keys etc) and will add support that if method is static it goes stateless if it’s instance it goes stateful with sticky session and give the DevOps ability to change channel between WebSocket, http/2, tcp/ip or any message bus without touching code as it will be just pure method code. It could really work. Think of it. How clean your codebase would be, how much more design would fit your original uml, how much l
/u/pladynski
2026-06-18 05:56
👁 6
查看原文 →