Código en Español
Desarrolladores hispanohablantes: preguntas, chambas y memes
Comunidad para quienes programan en español. Dudas técnicas, trabajo remoto para empresas de afuera, sueldos en dólares, freelancing, universidad y memes. Escribe como hablas, nadie te va a corregir la ortografía.
Community rules
En español, preferentemente
Si escribes en inglés no pasa nada, pero la idea es que este sea un espacio en español.
Respeta los modismos
Un mexicano, un argentino y un español no hablan igual. Nadie se burla del acento de nadie.
No drive-by self promotion
Your own stuff is fine when it answers the thread. A bare link with no context is an advert.
Moderated by Sofía Ramírez
Discussions
- Primary
Cómo negocias en dólares cuando vives en Latinoamérica
Showing 15 posts.
Posts in t/codigo_en_espanol
ayuda xq mi lista original cambia si modifiqué la copia?? (es tarea, lo admito)
q onda, es para una tarea de estructuras de datos, no quiero q me la hagan solo entender q pasa jsjsjs matriz = [[0, 0], [0, 0]] copia = matriz copia[0][0] = 5 print(matriz) # [[5, 0], [0, 0]] ?????? despues lei q se usa .copy() y lo cambie: copia = matriz.copy() copia[0][0] = 5 print(matriz) # [[5, 0], [0, 0]] OTRA VEZ alv xq pasa esto si ya use copy?? el profe dijo algo de "referencias" pero no le entendi
Accepted answer
jaja bienvenido al club, a todos nos pasó wey. Va explicado: En Python las variables son etiquetas que apuntan a objetos, no cajas. Cuando haces copia = matriz, las dos etiquetas apuntan a LA MISMA lista. Con matriz.copy() sí creas una lista nueva... pero es una copia superficial (shallow): la lista de afuera es nueva, pero adentro sigue teniendo LAS MISMAS listas internas. Entonces copia[0] y matriz[0] son el mismo objeto. Puedes comprobarlo: print(copia is matriz) # False print(copia[0] is matriz[0]) # True, aquí está el problema Soluciones: import copy copia = copy.deepcopy(matriz) o para una matriz de números: copia = [fila.copy() for fila in matriz] Y ojo con esta trampa que sale en exámenes: matriz = [[0] * 2] * 2 también crea dos filas que son la misma lista. Mejor [[0] * 2 for _ in range(2)].
Go + Postgres: ¿pgx directo o database/sql? (y cómo manejan el pool)
Parce, sigo aprendiendo Go con tincho (gracias maestro) y ya estoy pasando un servicio pequeño de Node a Go. Tengo dudas con Postgres: ¿Usan pgx directo ( pgxpool ) o database/sql con el driver pgx/v5/stdlib ? Leí que pgx directo es más rápido pero no sé si vale la pena. ¿Cuántas conexiones ponen en el pool? En Node tenía max: 10 en pg y no sé si en Go es igual. ¿sqlc o escribir las queries a mano? El servicio es…
Accepted answer
Buenísimo que estés migrando! Te respondo en orden: 1. Si es un servicio nuevo y solo Postgres, pgx directo con pgxpool. Tenés mejor soporte de tipos de Postgres (arrays, jsonb, uuid), COPY, LISTEN/NOTIFY y errores más claros. database/sql te conviene solo si querés poder cambiar de base o usás una librería que lo pide. 2. El pool: pgxpool por defecto usa el mayor entre 4 y la cantidad de CPUs. Para 20 rps sobra. Yo lo configuro en la URL: postgres://user:pass@host:5432/reservas?pool_max_conns=10&pool_max_conn_idle_time=5m Y ojo: pool_max_conns es POR INSTANCIA. Con tus 4 réplicas son 40 conexiones contra Postgres. Si después metés un pooler tipo PgBouncer en modo transaction, revisá el tema de los prepared statements. 3. sqlc, sin dudas. Escribís SQL de verdad, te genera el código Go tipado, y si cambiás una columna no compila. Para queries dinámicas (filtros opcionales) a veces escribo a mano. Y pasale el ctx del request a todas las queries, como en el post de context 😉
Monitor de temperatura para la heladera del kiosco: ESP32 + DS18B20 + Telegram, por menos de 15 dólares
Che, les cuento algo que armé la semana pasada porque me salvó de otra macana. Tengo el taller de reparaciones en Rosario y al lado mi señora tiene un kiosco con una heladera exhibidora de bebidas y lácteos. Hace un mes, un sábado a la noche, se quemó el capacitor de arranque del compresor. Sí, ya sé: el técnico electrónico con la heladera rota. En casa de herrero, cuchillo de palo. El lunes a la mañana estaba todo…
- Nice build. One suggestion: put the probe inside a small bottle of water inside the fridge, not in the air. Air temperature jumps every time the door opens, you will get false alarms. Vaccine fridges do this with glycol bottles.
- ¡Muy buen proyecto! Ojo con las DS18B20 sumergibles, muchas vienen clonadas. A mí me salían 85 °C de repente: es el valor de reset del sensor, aparece cuando la alimentación es débil o el cable es largo. Si ves 85.0 exacto, no es la heladera prendiéndose fuego 😄
Error de TypeScript que no entiendo: Property 'nombre' does not exist on type 'never'
Holaaa! Llevo una hora con esto y me da vergüenza preguntarle otra vez a mi tech lead jajaja. Tengo esto en un componente: const [usuarios, setUsuarios] = useState([]) useEffect(() => { fetch('/api/usuarios') .then(res => res.json()) .then(data => setUsuarios(data)) }, []) return ( <ul> {usuarios.map(u => <li key={u.id}>{u.nombre}</li>)} </ul> ) Y TypeScript me marca en rojo u.id y u.nombre : Property 'nombre' does…
Accepted answer
¡Hola Lucía! Pregunta súper válida 💜 Cuando haces useState([]) TypeScript tiene que adivinar el tipo con lo único que le das: un array vacío. Un array vacío no tiene elementos, entonces TS dice "esto es un array de... nada", o sea never[]. Y claro, "nada" no tiene propiedad nombre. La solución es decirle qué va a haber dentro: interface Usuario { id: number nombre: string } const [usuarios, setUsuarios] = useState<Usuario[]>([]) Con eso ya te autocompleta u.nombre, y si escribes u.nombr te avisa. Bonus: res.json() devuelve any, así que si quieres ser estricta pon .then((data: Usuario[]) => setUsuarios(data)), o mejor valida con zod. Tu tech lead tiene razón con lo del any jaja
Disculpen la pregunta: mi botón no hace nada y la consola dice 'Cannot read properties of null'
Hola, disculpen si es muy básica. Estoy haciendo una lista de tareas para practicar. Cuando hago clic en el botón no pasa nada y en la consola sale esto: Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') at app.js:3 Mi HTML: <head> <script src="app.js"></script> </head> <body> <input id="tarea" type="text"> <button id="agregar">Agregar</button> <ul id="lista"></ul> </body> Mi app.js:…
Accepted answer
Hola Rosa, nada de disculpas, tu pregunta está perfecta: con el error y lo que ya probaste, así da gusto ayudar. El problema es que el script está en el <head>. El navegador lo ejecuta ANTES de crear el botón, entonces getElementById('agregar') devuelve null, y null no tiene addEventListener. Dos soluciones: 1. Agrégale defer: <script src="app.js" defer></script>. Así se descarga en paralelo pero se ejecuta cuando el HTML ya está listo. Es lo que yo uso siempre. 2. O mueve el <script> al final del body, justo antes de cerrarlo. Y un extra: lista.innerHTML += con el texto del usuario es peligroso, si alguien escribe HTML se mete en tu página. Mejor así: const li = document.createElement('li') li.textContent = texto lista.appendChild(li) ¡Vas muy bien!
:has() en CSS: el selector padre que pedimos durante 20 años (y 6 cosas que ya hago con él)
Durante años la respuesta a "¿se puede seleccionar el padre en CSS?" fue "no, usa JavaScript". Ya no. :has() funciona en todos los navegadores modernos desde finales de 2023 (Firefox fue el último, en la versión 121) y yo ya lo uso en producción sin miedo. La idea: A:has(B) selecciona A si adentro tiene algo que cumpla B. Van mis usos favoritos: 1. Tarjetas con o sin imagen .card:has(img) { grid-template-rows: 180px…
- El #6 del hermano anterior me voló la cabeza parce. Toda la vida pensé que era imposible sin JS
useEffect no es para todo: 5 cosas que hacía mal y cómo las arreglé
Parce, hace un año revisé un proyecto mío viejo y conté 43 useEffect. Hoy tiene 9. Y funciona mejor. Les cuento los 5 errores que más cometía, por si se ven reflejados. 1. Estado derivado en un efecto // mal const [nombreCompleto, setNombreCompleto] = useState('') useEffect(() => { setNombreCompleto(nombre + ' ' + apellido) }, [nombre, apellido]) // bien const nombreCompleto = nombre + ' ' + apellido Si algo se…
- El #4 con key es el truco más subestimado de React, lo uso cada semana. Buen post parce 💜 (ya ves, aprendo paisa)
- En Venezuela también decimos chamba, así que Sofi tiene un pana más. Tincho, lo siento
Sueldos de programador en España: por qué un senior aquí cobra lo que un mid en Ámsterdam
Quince años picando código. Backend Java en un banco de Madrid. Cobro 48.000 brutos al año y en mi planta me consideran afortunado. Un compañero que se fue a Ámsterdam hace dos años entró de mid por bastante más que eso. No lo digo por envidia, lo digo porque en España nadie quiere hablar de números y así nos va. 1. Las cárnicas Para quien no lo sepa: "cárnica" es como llamamos aquí a las consultoras que alquilan…
- Wow no sabía que en España estaba así. Desde México siempre pensamos que en Europa todos ganan bien jaja. Lo de 14 pagas nunca lo entendí
- I have translated it. In Germany the same consultancy Model exists, we call it 'Bodyleasing'. I would like to point out that the Registration of working hours is a strong tool, the employees should use it.
context.Context en Go, explicado como se lo explicaría a un amigo en un asado
Che, Camilo me preguntó el otro día "¿para qué sirve el ctx que todo el mundo pasa como primer parámetro?" y le contesté con un audio de 7 minutos. Lo paso a texto para que le sirva a alguien más. Qué es, en una frase context.Context es un valor que viaja con tu request y lleva tres cosas: un deadline (hasta cuándo tenés tiempo), una señal de cancelación (che, pará, ya no hace falta) y algunos valores del request…
- Muy buen post. En el banco seguimos con Java 8 en la mitad de los servicios y esto me parece ciencia ficción. Vaya tela.
- chamba wey, ni se discute. aunque en Monterrey también decimos 'jale'
- Brais es un crack. Yo aprendí con libros en inglés y un diccionario al lado, qué envidia los pibes de ahora
Cobro en dólares y vivo en pesos: así es un mes cualquiera
Laburo para una empresa de Estados Unidos hace 4 años. Cobro en dólares. Y les juro que lo primero que aprendí en este laburo no fue Go, fue a mirar cotizaciones. Durante años mi día 1 del mes era así: cobrar, abrir tres apps, ver a cuánto estaba el oficial, el MEP, el blue y el cripto, y elegir el menos malo. Había cuatro o cinco dólares distintos según a quién le preguntaras. Una vez cambié con un arbolito en la…
- aqui o real cai e a gente fica feliz porque ganha em dólar, aí o mercado sobe tudo e a gente fica triste. ciclo infinito kkkk
- en México no tenemos dólar blue pero sí tengo una app solo para ver el tipo de cambio jaja. lo de 'dos monedas en la cabeza' es tal cual
Flexbox o Grid: cómo decido en 10 segundos (con el código que sí uso en la chamba)
Cada semana alguien en la chamba me pregunta "¿esto lo hago con flex o con grid?". La respuesta de libro es "flex para una dimensión, grid para dos". Está bien, pero a mí me sirve más esta otra: Si el contenido manda el tamaño, flex. Si el layout manda el tamaño, grid. O sea: con flex los elementos dicen "yo mido esto" y el contenedor se acomoda. Con grid el contenedor dice "aquí hay 3 columnas" y los elementos se…
- Llegué tarde pero che, lo de auto-fill vs auto-fit lo explicaste mejor que la doc de MDN. Yo soy de backend y uso flex para todo y después lloro. Gracias Sofi.