Monohilo: implicaciones en diseño y seguridad
Clase 4 de 31 • Curso de Fundamentos de Node.js
Contenido del curso
Clase 4 de 31 • Curso de Fundamentos de Node.js
Contenido del curso
Buzu B
Juan Jose Vega
Yeiner Andres
Jesús Miguel Quinto Teran
Juan Jose Vega
KEVIN Cordon
Alejandro Giraldo Londoño
ANTHONY JEAMPIER RANGEL RODRIGUEZ
Matías Wasiak
Roberto Shirásago Domínguez
María Jimena Rodríguez Contreras
Mauricio Gonzalez Falcon
Alejandro Luján
Omar Gabriel Aguilar Moscoso
Jorge Trad
Daniel Lombardero Calzón
Carlos Rivas
Edwin Cáceres Silva
Santiago Lopera Naranjo
Leonel Moyano
Joseph Manuel Salen Pantoja
Andres Roberto Coello Goyes
Andres Roberto Coello Goyes
Edison Manrique
Omar García Betanzos
Roberto Shirásago Domínguez
Jorge Arribas Castañeyra
Nestor Julian Murphy
Diego Alejandro Moreno Pedroza
Karl Behrens Gil
Jessie Buckland Pérez
Gabriel De Andrade
Carlos Hernández
Andrés Castellanos
Alex hernandez mitre
Emmi Raffo
Me encanta cuando les salen errores a los profesores. Refleja muy bien el flujo de trabajo real. Y aun que hay quienes critican a los profesores por esto, yo creo que es genial que no editen esas partes de la clase. Creo que a la gente que apenas inicia le va a servir mucho darse cuenta que el flujo de trabajo es de esa manera y les ayudará a evitar sentirse frustrados y con sindreome de impostor. Ademas, sin querer aprendes como puedes resolver esos problemitas, como en ete caso con el
console.log('forzamos error');
para asegurarse de que el bloque del if se ejecuta.
Muy cierto.
Eso es cierto.
Importante: Cuando ocurre un error dentro de alguno de los hilos y no se controla apropiadamente (catch); Node detiene todos los hilos ejecución. Esto puede ser muy peligroso, debido a que es dificil determinar fue el origen del problema y en que punto de ejecución se encontraba cada hilo cuando fue detenido.
La importancia de manejar bien el try y catch.
en este caso siempre es necesario hacer manejo de errores con mensajes luego de la ejecucion
RESUMEN :
El hecho de que sea monohilo lo hace delicado en el sentido de que puede ejecutarse algo que corte el código y detenga el programa, como la ausencia de sintaxis o una variable pendiente por definir.
Aquí se pueden ver los problemas de seguridad y los Updates en este tema. Muy interesante leerlo para entender cómo atacan y saltan el código y cómo lo resolvieron.
A continuación dejo el código escrito con algunos comentarios de utilidad:
console.log('Hola mundo'); // SetInterval me permtie ejecutar una función cada n cantidad de tiempo, por lo que quiere que recibe como argumentos: Función a ejecutarse, intervalo de tiempo. //A tener en cuenta esta función no se detiene y continúa su ejecución ad infinitum. // Detener ejecución con ctrl+ alt + m en Run Code, o con Ctrl +c en la terminal. setInterval(function(){console.log('Voy a contar hasta infinito, detén mi ejecución o consumo tu memoria'),1000}); // Esta instrucción es asíncrona, por lo que se ejecuta en n momento. let i = 0; setInterval(function() { console.log(i); i++; // Al ser monohilo el peligro recae en que si el código se ejectua y no tenemos cuidado el no asignar una variable de manera correcta me puede arrojar un error. //Hay que escuchar los errores, es muy imporante de todo lo que pase en el código. Comprobar funciones y revisar lo que posiblmente puede fallar. //Es clave estar pendiente de todos los errores que pueda cortar la ejecución, lo que se corta corta todo. // Todo lo que sea asíncono y lo pueda llevar a ello, pues llevarlo, y todo lo que no, revisar que no corte el programa. // if (i === 5) { // console.log('forzamos error'); // var a = 3 + z; // } }, 1000); console.log('Segunda instrucción');
gracias por el aporte
Muy buen aporte!
MONOHILO
PROCESO DE NODE 1.- Va a abrirse un proceso, ese proceso es un proceso de node 2.- Interpreta todo el archivo 3.- Convertirlo a código maquina 4.- Prepara todo lo que necesita para ejecutarse 5.- Se ejecuta 6.- Se cierra el proceso, y termina DESVENTAJAS MONOHILO - Si no se manejan bien los errores y uno truena, ya no continua con los procesos posteriores - Debes estar pendiente de todo el código
gracias
Buen aporte!
Segunda clase del curso, y aparte de los dos cursos que ya tome con Freedy, este maestro es el que siento yo, mejor explica y mejor da a entender las cosas :D
aun no llevas con Jonathan alvarez seguro
Les dejo mis notas hechas con Notion de la clase ^^
Si, y si pones un timeout de 0 seguiría ejecutándose primero la "segundo instrucción", porque hasta que no acabe el hilo principal no empiezan a ejecutarse las instrucciones que has enviado al event loop. Pero si explicara esto ya tendria que meterse a explicar otras cosas como las pilas de eventos etc
Es fundamental que él tenga que explicar eso para evitar confuciones, ya que las pilas de evento siguen siendo parte de Node.
Por eso recomiendan aprender asincronismo en Js para empezar con Node. Supongo que lo tocará más adelante.
Es algo interesante cuando los profesores cometen errores, dan a entender que no estan copiando y pegando codigo de otra parte, si no que enseñan con sus propias lineas :D
Si quieren evitar que un error les corte el programa pueden usar TRY CATCH de la siguiente manera:
let i = 0; setInterval(function () { console.log(i++); try { if (i === 5) { var a = 3 + z; } } catch (error) { console.error(error) } }, 1000)
Como aporte, quisiera aclarar que el setInterval no se ejecuta de último porque dure 1000ms, podemos ponerlo en 0 y va a seguirse empezando a imprimir de último. La razón de que esto suceda es que el Event Loop no deja que nada asíncrono empiece siquiera a ejecutarse hasta que el CallStack, en donde están todos los procesos síncronos y “normales”, no se quede vacío. Por eso, aunque le pongamos 0ms, el resultado va a ser el mismo si hay funciones o procesos síncronos a la espera. Desde una funcion super compleja hasta un simple console.log()
A todos nos ha pasado más de una vez que se nos olvida guardar y pensamos que fallo algo, para mí funciono el hecho de cambiar el shortcut de Save a teclas que fueran más cómodas. Para acceder a la lista de shotcuts donde pueden editar Ctrl + K + S.
excelente consejo, a mi me caía mal porque no me dejaba borrar lineas como normalmente las borraba en el IDE (Ctrl + D) ya lo edite y volví a lo tradicional
Y a mi por qué me nombran? :P
Porque al parecer, tienes una ley jaja
En Node la ejecución de eventos es asíncrona, por lo que retornara los resultados apenas pueda hacerlo en cada evento. Es muy importante saber que si uno de estos eventos fallan, todo va a detenerse, por lo que hay que comprobar rigurosamente nuestro código ante los fallos que puedan suceder.
"Ahhhh... es que no había guardado , muy bien Carlos" , la de veces que me ha pasado eso :D, lo conseguí solucionar activando el AUTOSAVE en VSCODE, ¿es esto una mala práctica? ¿puede afectar al flujo de trabajo con git, github, gitlab?
No te preocupes, el autosave no debería afectar tu flujo de trabajo, si es la manera más cómoda que tienes para hacer código sigue así, con el tiempo verás que tanto afecta tu flujo de trabajo :D
Yo suelo trabajar con Sublime, y tengo el auto-save activado cada vez que la ventana pierde el foco. Lo peor que te puede pasar es esto que me pasa a mi 🙈
El monohilo es como una cinta de producción en un fábrica de cajas, cada proceso es una caja bien hecha pero un error es una caja enorme... mal hecha. Cuando la caja va a salir para su venta atasca el mecanismo ya que es muy grande. Por lo que las cajas que vienen detrás nunca llegan a "salir" (procesarse en el caso del código).
excelente analogía.
con la cara que dice que este pendiente de mis programas !!! se nota que lo dice desde la experiencia. Gracias!