@iamemhn

EM Hernández-Novich

Estoy creando una BD en PostgreSQL y tengo la duda si vale la penan poner comentarios en los DDL de las tablas y las filas para generar documentación. No he visto que eso se use en la vida real. Quería saber si usted lo recomienda. Gracias

Se pierde muy poco tiempo haciendo
COMMENT ON TABLE foo IS 'whatever foo is';
COMMENT ON COLUMN foo.field IS 'whatever this field holds';
COMMENT ON INDEX foo_idx IS 'makes things fast';
COMMENT ON VIEW v_foo IS 'mirame a foo, ¿ah?';
COMMENT ON FUNCTION f_foo() IS 'foonciona';
y luego poder consultarla con `psql` (\d+, \df+, etc.) o `pgadmin`. Más aún, `postgresql-autodoc` es capaz de generar documentación HTML y diagramas en base a la información que está en la base de datos.
Esta es la flojera que funciona en la vida real. La otra, la de no escribir comentarios, es la que hace perder tiempo tratando de averiguar qué es cada cosa, y no te deja tener vida real.
Cuando las cosas no son obvias, tienes que documentarlas. Cuando crees que las cosas son obvias, usualmente estás equivocado, incluso cuando es obvio que sabes lo que estás haciendo. Definitivamente prefiero gente que es capaz de documentar por convicción y no por compromiso.

Latest answers from EM Hernández-Novich

Por que no debería copiar códigos de internet?

Voy a suponer que necesitas un pedazo de código que «resuelva el problema X», usas tu buscador de confianza, y descargas el fragmento más «popular» que encontraste. Dá lo mismo si el pedazo de código es para un lenguaje de programación que crees dominar a fondo, o de un lenguaje nuevo para ti.
Si no se te ocurrió cómo escribir la solución al problema por ti mismo, lo más probable es que todavía no tengas comprensión completa del problema, y por eso no lo puedes atacar. Por extensión, cualquier pedazo de código que encuentres que es popular porque presuntamente resuelve el problema, para ti seguirá siendo inescrutable prima facie.
Si no entiendes cómo hace lo que hace, es posible que haga más cosas de las que necesitas, o que haga mal lo que necesitas en determinadas condiciones (que, por Murphy, son las tuyas). Mientras más complejo es el fragmento de códico que copias, aún mayor el riesgo.
Entonces, está bien que busques ejemplos de código que te permitan comprender mejor el problema que estás tratando de resolver. Sin embargo, es un riesgo usarlo sin comprenderlo. Mucha gente lo hace porque quiere «resolver» y no presta mayor cuidado a las consecuencias para con su propio equipo de trabajo, ni para con sus usuarios. Es una cuestión de ética.
Es preferible que estudies el fragmento hasta entenderlo, y luego lo expreses usando tu propio estilo de programación. Eso es evidencia que entendiste lo suficiente del problema, como para expresar esa solución. No hay nada de malo en imitar una solución ajena después de comprenderla; después de todo, eso es lo que uno hace cuando lee, imagina, y manifiesta su propia creatividad.
En relación a copiar librerías o aplicaciones posiblemente consolidadas, y con una historia evidente de integridad y éxito, asegúrate que sean Software Libre, copia, usa, aprende, y redistribuye.

View more

Como aprendo a programar BIEN? no me importa el tiempo que tome solo quiero programar bien sin ir a la universidad.

Programar es ser capaz de expresar la solución a un problema, de manera que se aproveche efectivamente el lenguaje de programación empleado y, quizás mucho más importante, otra persona pueda entender lo que estás tratando de hacer. Esa persona muchas veces eres tú en el futuro.
Para eso, tienes que tener dominio del idioma en el cual recibes la definición de los problemas. Sea español, inglés, o cualquier otro idioma. Porque si no eres capaz de comprender la especificación, y hacer las preguntas adecuadas, tu programa no será una solucion completa. Para dominar un idioma, tienes que leer y escribir, con buen vocabulario, mejor gramática, y efectivamente. Nuestra inteligencia está limitada por los conceptos abstractos que podemos imaginar, y la capacidad de convertirlos en una historia. Lee y escribe, de todo. Escuchar historias acompañadas de imágenes explícitas no es lo mismo que leer una historia y construir imágenes mentales. Saber contar una historia es la destreza fundamental que demuestra la inteligencia.
La única forma de saber que se domina un tema, es ser capaz de explicárselo a cualquier persona, con cualquier nivel de preparación, y lograr que haya aprendizaje proporcional. Escoge el tema que te interesa, estúdialo, y trata de explicarlo a otra persona: repite hasta que la otra persona entienda. Haces eso con los temas que te interesen, y te irá bien.
Si bien vas a comenzar por aprender algún lenguaje de programación, probablemente el «popular» en tu entorno o sugerido por otros, o «el futuro del desarrollo» (ja ja ja) es importante que aprendas varios lenguajes de programación. Con diferentes estilos de programación: imperativo, declarativo lógico, declarativo funcional, reactivo. Eso mejora tu manera de enfrentar los problemas, de la misma forma que tener mejor vocabulario te permite expresar ideas complejas de forma sucinta.
Para que tus programas sean mejores, tienes que estudiar la técnica. Eso se logra estudiando y practicando estructuras de datos, algoritmos, y cualesquiera conceptos en el área de interés, por ejemplo, programación paralela y concurrente. Muchas veces, la mejor solución para un problema no es obvia, pero alguien ya la encontró y está en un libro. Es más importante saber cuál libro, que improvisar.
Así, programar es escribir un discurso en algún lenguaje de programación. Con el paso del tiempo, encontrarás formas que son subjetivamente mejores que otras, según tus capacidades, y métodos que son objetivamente mejores que otros, según su base técnica. La manera de abandonar lo subjetivo por lo objetivo es tener experiencia, y eso sólo se logra invirtiendo tiempo: leer mucho, equivocarse mucho, aprender cosas difíciles porque terminan siendo mucho mejores que las fáciles, y no teniendo miedo a huir de la comodidad de las chuletas.
Si estás buscando una receta corta para programar bien, me temo que después de casi 40 años programando, no la conozco. Escribe programas, lee e insiste -- es divertido.

View more

Para aprender sobre programación sobre el kernel de linux que libros y documentación recomedaría?

Hace muchos años que no hago nada de eso.
Cuando lo hice, leí «Understanding the Linux Kernel» y «Linux Kernel Programming», ambos publicados por O'Reilly. Al menos el segundo libro lo mantienen al día, así que si lo encuentras reciente, tendrá la información sobre el kernel LTS conveniente.

Digamos que tengo una función add_comment en PostgreSQL que recibe 2 parámetros: articleId y comment, es necesario o prudente, hacer una consulta de articleId en articles_table dentro de la función para asegurar que la fila con el articleId exista? Gracias

Pareciera que tienes una tabla para comentarios que tiene una clave foránea para artículos. Es una relación maestro-detalle típica. No parece necesario, ni prudente.
Si la tabla comentarios tiene un CONSTRAINT FOREIGN KEY haciendo referencia a la clave primaria en tabla artículos, el INSERT sólo va a tener éxito si el artículo ya existe en la tabla. Más aún, si intentas asociar un comentario a un artículo que no existe, vas a recibir una excepción indicando el identificador de artículo inexistente.
Si no es así, agrégalo. Los CONSTRAINTS existen para que no tengas que hacerte éstas preguntas.

¿instalar un firmware -distinto al original- en un router es una necesidad o solo un plus? ¿bajo qué criterios? ¿usas varios distinto acorde a requerimientos?

Para mi es una necesidad, considerando el tipo de control que quiero tener sobre la red. La mayoría de los firmwares «de caja» suelen tener limitaciones impuestas por las regulaciones de la FCC en USA, sin contar deficiencias de seguridad o desempeño que no habían sido detectadas cuando se ensambló el equipo.
En el caso de las regulaciones, lo habitual es que la potencia de transmisión este limitada artificialmente. Con un firmware abierto, puedo subir la potencia de transmisión al máximo, con lo que la señal llega bastante más lejos.
En el caso de las deficiencias, los vendedores de AP apuntan al usuario que sabe poco y nada de redes, y sólo quiere «WiFi y compartir internet». Por ejemplo, no tienen caching DNS (desperdicio de tráfico), no tienen (buenos) mecanismos para QoS, o tienen mecanismos precarios para VPN o S/D-NAT.
Cuando compro, o recomiendo comprar, un AP, lo primero que verifico es si puede correr OpenWRT. Si no puede, no lo compro. Si puede, lo primero que hago es instalar OpenWRT porque incluye las capacidades adicionales para VPN, caching-DNS, mejor manejo de filtrado y control de tráfico. usar el USB para ser servidor de archivos/medios...

View more

Es correcto decir dispositivos "empotrados" o "embebidos"?

La traducción directa al español neutro del inglés «embedded» sería «integrado» o «incorporado»; son las que prefiero. Las traducciones «empotrado» y «embebido», también son correctas. Es cuestión de decidir cuán sofisticado quieres presentarte ante la audiencia.
También serían correctas «incrustado» y «encastrado», que he utilizado Porque Puedo®, cuando el interlocutor es de aquellos que usan «colocar» cuando es suficiente «poner».

¿Es posible montar tu propio mail server corporativo (es decir, para que los empleados tengan email con el dominio de la empresa) en un VPS con linux (por ejemplo: con Digital Ocean)?, ¿o es necesario contratar ese servicio aparte?. ¿Que buenas prácticas recomiendas para montar tal cosa?

Es posible, tanto en un CoLo, como en virtuales de DigitalOcean o AWS, según el gusto y presupuesto. También puedes entregarle todos tus mensajes de correo e información a Google o Microsoft para que lo administre en sus plataformas. Las herramientas de gestión son muy bonitas y si no sabes, ni te interesa, como funciona el flujo de correo, es una linda experiencia a cambio de la privacidad de tus mensajes.
Tienes que configurar toda la maquinaria de transporte de correo, certificación de origen, certificación de contenido, control de contenido, buzones, y posiblemente un webmail. sin olvidar completa y correcta configuración de DNS, con DNSSEC para maximizar la credibilidad en el envío. Además, tienes interactuar con el proveedor de hospedaje para que autorizen el flujo de correo: generalmente los proveedores de hospedaje bloquean SMTP para evitar spammers, y querrán asegurarse que tu despliegue va a ser usado con responsabilidad.
La mejor práctica que puedo recomendarte es contratarme el servicio.

View more

Language: English