@iamemhn

EM Hernández-Novich

Ask @iamemhn

Sort by:

LatestTop

Previous

¿Has implementado arquitectura orientada a microservicios? ¿Qué opinas de la separación en servicios con bases de datos distintas y perder la consistencia que proveen las llaves foráneas? ¿Vale la pena la complejidad de crear servicios eventualmente consistente?

No. Ugh. No.

Es imposible entender monads?

No creo. Hay muchísima gente que las comprende perfectamente, las aprovecha, y las diseña cuando hacen falta. Como todas las cosas, para algunas personas es mucho más fácil porque no están apuradas y quieren comprender por el simple placer de comprender y dominar un concepto.
Además, no son más que monoides en la categoría de los endofunctores o «punto y coma programable», según te convenga.
Nada que valga la pena se consigue rápidamente. Si te parecen complicadas, pero interesantes, encontrarás la manera de comprenderlas y hacerlas parte de tu acervo cultural.

¿ Piensa que aprender Scheme "hoy en día" es una pérdida de tiempo? ¿Recomienda algún proyecto para practicarlo? ¿Qué opina de gnurobots?

Ningun aprendizaje es pérdida de tiempo.
Excepto para los apurados sin destino: para ellos todo es pérdida de tiempo.
Si bien puedes aprender Scheme, puedes aprender Racket.

Related users

Qué textos me recomienda para tener mejores conocimientos en el área de las matemáticas? Con orientación hacia la criptografia.

Algún texto sobre Teoría de Números y técnicamente cualquiera sirve. El Capítulo 4 de «Concrete Mathematics» de Graham/Knuth/Patashnik es lo que uso, pero cualquier libro de Matemática Discreta de pregrado que incluya Teoría de Números basta.
Para estudiar criptografía, «Applied Cryptography» de Schneier es canónico. No requiere otros libros porque cuando necesita algún concepto matemático especial, lo define al paso.
Liked by: Walter Vargas

¿Chocolate con leche o chocolate negro?

Chocolate negro. 87% cacao o más. Si es posible infusionado con pimienta blanca o verde.

¿Ha tenido dificultades para trabajar en equipo? ¿Qué le recomienda a las personas que les cuesta hacerlo?

Montones.
Soy afortunado por haber encontrado las personas adecuadas con las cuales comunicarme efectivamente en la faceta técnica, de modo que muy pocas palabras dejan claro lo que hay que hacer -- sólo trabajo con ellos.
Tuve la fortuna de haber encontrado alguien que identificó esa dificultad en mi manera de trabajar, y se encargó de que me dejaran hacer lo mio, mientras el se encargaba de lidiar con el «red tape». Seguro me lee desde Chile y sabe el aprecio que le tengo. Eso me convenció de que yo no puedo supervisar gente, y no me voy a obligar a hacerlo.
A la mayoría de la gente se le hace muy difícil trabajar conmigo porque: todo lo quiero por escrito y se toma al pie de la letra (si no está escrito, no existe); opiniones sin números son prejuicios (y tengo el prejuicio de ignorarlos); el lenguaje corporal nunca miente (y lo hago confesar); no doy propina por el trabajo esperado, pero pongo multas por la incompetencia o desidia disimuladas; y me tomo la argumentación muy en serio.
No estoy trabajando para hacer amigos.
Con el paso del tiempo, me ha servido para escoger con cuidado. Es por eso que aquellos estudiantes que han sido pasantes o completado trabajo de grado bajo mi tutela, son de las mejores personas que conozco y les agradezco todo lo que me han hecho aprender.. Me han tenido paciencia, han sabido escuchar, han sabido responder, y no se han dejado amilanar por esos falsos rumores de que soy un troll, asaz completamente ciertos..
Imagina la cala^H^Hidad de personas que llamo colegas :-)
Hay personas que son mucho mejores que yo trabajando en equipo, así que no me siento competente para opinar al respecto. Si acaso, te diría que desarrolles la empatía, pero manteniendo la asertividad. En este mundo moderno, la asertividad está subvalorada y el «laissez faire» para evitar conflictos u «ofensas», sobrevalorado. Busca ese balance y no cedas a tus principios sin razonamientos sólidos.

View more

Algún consejo para ser bueno con la matemática?

Practicar. Identificar patrones. Aprenderla como un idioma y no como recetas para alcanzar resultados.

¿Has leído sobre este proyecto http://freedomboxfoundation.org/ ?

Si. Es muy práctico para gente que quiere «usar» eso y que no lo puede «construir».
Como dice la página del proyecto, todas esas herramientas existen hace mucho tiempo, pero integrarlas no es fácil para la gran mayoría de la gente. De hecho, es complicado explicarle a mucha gente «que sabe de sistemas» lo que hace una caja como esa. Y la criptografía es algo que suena muy bonito hasta que tratas que gente «normal» la use de manera correcta y efectiva. Así que, es una de esas ideas para satisfacer un nicho de usuarios de manera relativamente fácil.
Al menos es mejor que confiar en un teléfono Apple o Android con «stock firmware».
Por otro lado, como es un derivado sincero de Debian, ambos avanzan simultáneamente, y eso es bueno.
Liked by: Marcos Mora

Según tus habilidades y experiencia ¿Cuál crees que la mejor forma de aprender un lenguaje de programación y las buenas prácticas inherentes al mismo?

Franklin Lugo
Leer la definición del lenguaje. Si no tiene, duda de la seriedad del lenguaje. Entender el lenguaje sin escribir ningún programa todavía.
Luego, escoge algo medianamente complicado, pero que sepas hacer muy bien con otros lenguajes [1], y lo escribes usando el nuevo lenguaje. Desde cero. Sin hacer trampa copiando código de otros tomado de ninguna parte. Escríbelo con prácticas de diseño que son buenas independientemente del lenguaje (modularización, abstracción de datos y funcional, documentación). Como es algo que *sabes hacer muy bien*, sólo te preocupan los detalles de implantación y la manera de expresarlo en el lenguaje -- eso te obliga a explorar lo que el lenguaje puede ofrecerte.
Encontrar las mejores prácticas es un poco más complicado. Para eso, tienes que conocer bien el estilo de programación del lenguaje. Enfasis en «bien». Si es la primera vez que usas un lenguaje funcional real, diseñar y escribir no es imitar lo que haces en imperativo o en OOP. Si es la primera vez que usas un lenguaje con un sistema de tipos estrictos, te va a arder un poquito no poder usar String para cualquier cosa y los mensajes de error que en efecto son insultos a tu inconsistencia expresiva (que con String se disimula) [2]. Entonces, una manera de encontrar las mejores prácticas es estudiar cómo funcionan «todos» los estilos, por lectura de libros o por práctica; y después aplicarlos. Otra manera es que la comunidad del lenguaje tenga alguna documentación recopilada por expertos (por ejemplo, «Modern Perl» o «Perl Best Practices») y seguirla. [3]
En términos de mejores prácticas, una arista es, necesariamente, cómo aprovechar las características del lenguaje. Pero otras aristas que debes investigar de entrada son: ¿cómo se usa el debugger? ¿cómo se usa el profiler? ¿cómo se escribe un arnés de pruebas? ¿cómo se declara el proceso de construcción? ¿cómo funcionan las herramientas de «crítica» de estilo? [4] Un lenguaje que no provea esas herramientas o te obligue a hacer «trabajo manual» para esas cosas, es un lenguaje incompleto. De paso, esas son preguntas que corresponden a buenas prácticas de ingeniería y desarrollo, así que tienen que surgir tan pronto comienzas a escribir tu ejercicio.
Con el tiempo, y el estudio, adquieres práctica. Llegado ese punto, cuando te presentan el novedoso lenguaje YaVaEsCris, sólo vas a tener que probar cosas muy específicas antes de saber, en general, lo que puedes esperar del lenguaje.
No hay camino corto para dominar ningún lenguaje.
[1] En mi caso, suelo hacer un frontend de compilador o un trazador de rayos con texturas. Programitas «de juguete» no cuentan porque no ejercitas todo.
[2] Siempre lo puedes hacer, pero no te estarías «obligando» a aprender a hacer las cosas bien.
[3] La existencia de documentos como ese hablan de la calidad de la comunidad del lenguaje que te interesa.
[4] Cosas como lint para C, hlint para Haskell, Perl::Critic.

View more

Liked by: David Prieto

¿Después de Scratch, crees que Ruby es una buena opción para niños de 8 a 12 años que siguen interesados en aprender a programar?

Después de Scratch, si el niño sigue interesado, no les «escondería la realidad» y lo haría moverse en dos etapas hacia programación no visual. Esto es, que escriba sus programas sin ayuda de ratón ni «conectores». En ese sentido::
1. «Problem Solving with Logo» (Buskirk)
2. Smalltalk -- para que aprecie como la sintaxis similar a Logo puede usarse para expresar un comportamiento completamente diferente.
Si usa Ruby, después probablemente piense «¿por qué hicieron este desastre si Smalltalk es tan hermoso?» y comenzará el camino de la crítica a la reinvención de la rueda. Si va directo a Ruby, en mi opinión es más el daño que el beneficio.
No se puede aprovechar el futuro si no se ha revisado la historia, en particular las cosas muy buenas que han sido maltratadas por los improvisadores o «endógeno es mejor».

View more

¿Cuál es tu regla n.º 1 en la vida?

Como dije alguna vez, tengo una regla de aluminio. Ya no está sola, porque la junté con una regla de acero y se llevan muy bien.

¿Líneas de 79 caracteres o más?

:set textwidth=72
Como 72 = 2³3², es muy fácil dividir a partes iguales entre dos, tres, cuatro, seis, ocho e incluso doce. Como 79 es primo, no.
Una línea de más de 79 columnas sin retorno del carro es incivilizada. Cualquier editor decente tiene algún mecanismo para hacer el salto de línea apropiado de forma automática.
Liked by: Walter Vargas

Estaba considerando aprender a programar desde cero en javascript, leí que dices que es una perdida de tiempo. ¿Cuál lenguaje me recomiendas para empezar?

Nunca dejes que alguien te diga lo que debes o no debes aprender. Nunca dejes que la opinión de alguien establezca tu manera de pensar. Eso te convierte en militante. No seas militante, sé inteligente. Explora, descubre, compara, construye, y cuestiona.
Racket, siguiendo HTDP [1] y SICP [2].
Después puedes aprender JavaScript y darte cuenta que es una burla de mal gusto al compararla con Racket, el lenguaje dinámico que todos quieren imitar, pero lo hacen mal.
[1] http://www.htdp.org/2003-09-26/Book/curriculum.html
[2] https://mitpress.mit.edu/books/structure-and-interpretation-computer-programs

Que opinión tiene sobre las drogas ilegales? alguna con la que haya experimentado?

Cada uno decide lo que hace con el cuerpo que construye, y debe asumir las consecuencias de esas decisiones. Hay muchas drogas legales que deberían ser ilegales, y en todo caso no me interesan los efectos ni las consecuencias de usarlas, porque no encuentro entretenido perder control neurológico ni psicológico, acelerando la destrucción del cuerpo en el proceso. Me basta con las endorfinas.
Liked by: Marcos Mora

Volvera a dar lenguajes 1 en trimestre que viene? o deberimos meterla en verano?

Todo indica que estaré en CI3641 en septiembre. No sabía que se ofrecía en verano. En todo caso, deben hacer lo que les parezca conveniente a Uds.

Hola, deseo aprender a programar tengo 22 años y ningun conocimiento previo sobre el tema, crees que echandole bola sea posible? Y... Necesito saber matematicas avanzadas? (Porque realmente no soy muy buena en ello)

Todo el mundo debería aprender a programar, y tener interés en hacerlo es un punto a favor. Si estás comenzando desde la motivación personal, tienes paciencia, constancia, y curiosidad, seguramente podrás aprender a programar, o cualquier otra cosa que se te antoje aprender en la vida. Después de todo, estamos para aprender.
No necesitas matemática avanzada para aprender a programar. El conocimiento de matemática discreta avanzada es indispensable para programar bien y no reinventar la rueda sin necesidad; pero esas son cosas que no han de preocuparte al principio.

¿Qué opinas de las bases de datos columnares?

No las uso. Mi opinión se basa en la argumentación de estructura y uso, aplicada a los problemas que me interesa resolver.
Prometen ser más rápidas sólo para hacer agregados. Pero sólo para eso. Una calculadora que sólo sabe hacer raíz cuadrada es mucho más rápida haciendo *eso*, que una calculadra que sólo tiene las cuatro operaciones básicas [1]. Otra cosa que prometen es reducir el espacio porque se prestan mejor para la compresión por razones obvias de ordenamiento de los valores [2]
La única aplicación razonable para mi que requiere esas dos cosas simultáneamente es un DSS («Data Marts» o «Data Warehouses»). Han pasado veinte años desde que comenzó esa fiebre, y ya pasamos por las (fracasadas) bases de datos multidimensionales; supongo que será otra etapa.
Los modelos estrella y copo de nieve sigue siendo mis preferidos, sobre un ORDBMS, por razones de alto y bajo nivel que no voy a discutir aquí.
[1] Mi analogía presume que el lector conoce el método Newton-Raphson
[2] Run Length Encoding o cualquier mecanismo de compresión sin pérdida aplica.

View more

¿Por qué las bases de datos NoSQL como Cassandra o Mongo utilizan escalabilidad como punto fuerte de marketing sobre sistemas como postgres? ¿Es tan difícil escalar postgres a partir de cierto punto?

En primer lugar, «escalabilidad» es un término abusado, fundamentalmente porque «la gente» cree que el mundo es una «regla de tres». Para contestar, tengo que aclarar lo que quiere decir «escalabilidad» y mi respuesta sólo se puede interpretar a su luz.
En el contexto de cualquier sistema de información o cómputo, la escalabilidad NUNCA ha sido, NO es y JAMÁS sera lineal. Llega un punto en el cual agregar recursos no genera mejoras en el desempeño, y llega otro punto en el cual agregar recursos empeora cada vez más la situación. La Ley de Amdahl para el caso multiprocesamiento y la Ley Universal (o de Gunther) para el caso de sistemas distribuidos, lo demuestran matemáticamente.
De manera que hay que partir por comprender y asumir que TODO sistema tiene un tope de escalabilidad. Cuando se alcanza ese tope lo único que se puede hacer es rediseñar el sistema para cambiar la curva y ganar un poco más, pero es imposible resolver el problema con hierro.
Ahora, regresando a tu pregunta original. El problema para el cual las bases de datos NoSQL presuntamente son más efectivas, es para el manejo de datos clave-valor, con valores no estructurados. Simular ese escenario en una RDBMs cualquiera, conduce a una curva de escalabilidad particular, que está afectada por el principio ACID. Las bases de datos NoSQL no son, ni van a ser ACID, por lo que su curva de escalabilidad para ese problema es mejor a priori. Si no te importa la consistencia ni durabilidad de tus datos, probablemente sientas que una base de datos NoSQL es «más rápida» que usar un RDBMs tradicional.
Ahora bien, PostgreSQL es un ORDBMs. Además de siempre haber sido ACID, garantizando integridad, consistencia y durabilidad, tiene capacidades para el manejo de objetos libres (parejas clave-valor). Cuando se usan las habilidades para almacenar JSON en PostgreSQL, tienes exactamente las mismas facilidades de alto nivel que en las NoSQL, con condiciones de integridad/consistencia/durabilidad permanentes, y con un mecanismo de almacenamiento suficientemente eficiente.
Es díficil hacer cualquier cosa que no se comprende. Nunca es la flecha, siempre es el indio. Personalmente no he tenido problemas para hacer escalar PostgreSQL hasta los límites de la aplicación que sostiene, porque todas las aplicaciones han sido *simuladas* antes de ponerlas en producción, conociendo cuál es la curva de desempeño.
He visto fracasos rotundos de mega-super clusters de NoSQL que fueron considerados a priori mejores que PostgreSQL. Se les deja estrellarse y morir, para luego mostrarles cómo PostgreSQL maneja el problema con simplicidad. «Wow, no sabíamos que PostgreSQL podía hacer eso» suele ser lo que atinan a decir — yo solía decirles «es increíble lo que uno aprende leyendo los manuales y estudiando matemática», pero he visto que al chiquitaje le afecta más cuando no se les dice «te lo dije».
De paso, PostgreSQL, en mayúscula, porque se lo ha ganado independientemente del mercadeo malintencionado y los trolls

View more

Que navegador web utiliza? Y por qué?

Arnaldo Quintero
Firefox y Chrome sobre Debian GNU/Linux para las aplicaciones de trabajo y navegación convencional. Necesito tener dos navegadores diferentes abiertos al mismo tiempo por «razones».
W3M en modo texto, para interactuar con algunas herramientas de monitoreo y aplicaciones que en modo texto son mucho más rápidas que con toda la grasa JavaScript moderna.
Escribo programas que simulan comportarse como navegadores, usando la librería WWW::Mechanize para Perl porque, ¿por qué visitar la página y hacer clicks, si un programa puede hacerlo por mí?
Liked by: Marcos Mora

¿Cómo valorarías tus dotes culinarias?

Cuando uso cantidades socialmente aceptables de especias y capsaicina, la gente no muere por comer lo que preparo.

Hallo, Ernesto. ¿Qué ha sido de l-linux? Tengo una serie de dudas, que me hubiera gustado consultar allí. Gracias y un saludo desde Paraguay.

El servidor falló de manera catastrófica y no lo han podido reparar. Entregué la administración de la máquina hace mucho tiempo. Quizás @NelsonFX o @granalberto sepan el estado de las cosas.

Next

Language: English