martes, 10 de septiembre de 2019

Hooks en React (I), Utilizar el estado en componentes Stateless.

¿Qué son los Hooks?

Los hooks son una nueva característica agregada a React (16.8), la cual consiste en un conjunto de funciones que nos permiten crear, acceder y modificar el estado en un componente stateless, dicha habilidad nos abre la puerta a un nuevo paradigma de programación en React totalmente distinto a como lo conocíamos, este artículo es la primera parte de varias que estaré preparando.

¿Por qué se agregan los Hooks?

React se va moviendo a que los componentes sean escritos totalmente como funciones en lugar de clases, de hecho desde el sitio de React te recomiendan que no reescribas todos tus componentes pero que los nuevos que empieces de cero los hagas como Hooks. Esto debido a varias ventajas tales como:

  • Código mas fácil de testear y mantener (componentes como funciones separadas).
  • Código mas legible.
  • Programación funcional que se adapta mejor al paradigma de React, dado que en lugar de ser clases, son simplemente funciones que reciben y retornan valores.
  • Ciclo de vida de componentes delegado en lugar de un sólo método para toda la lógica (componentDidMount).
  • Aplicaciones mas ligeras, dado que la minificación de funciones es mucho más optima que la de clases en el resultado.

¿Cómo se utilizan?

Dado la siguiente clase componente:

import React, { Component } from 'react'

export default class Example extends Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    }
    this.increaseCount = this.increaseCount.bind(this);
  }

  increaseCount() {
    this.setState({count: this.state.count + 1});
  }

  render() {
    return (
      <div>
      <p>You clicked {this.state.count} times</p>
      <button onClick={this.increaseCount}>
        Click me
      </button>
    </div>
    )
  }
}

Podemos notar que utiliza el estado para realizar un conteo de clicks, para ello se auxilia del método increaseCount que  accede al estado para aumentar el contador.

Dicho componente realizado con Hooks quedaría de la siguiente forma:

import React, { useState } from 'react';

function Example() {
  const [countsetCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

Este componente funcional realiza las mismas operaciones, para ello utiliza el Hook useState que permitirá a nuestro componente funcional utilizar un estado.

Este componente funcional declara en el estado una propiedad llamada count que va a tener su función seter llamada setCount, para ello hace uso de useState(0), dónde el 0 es el valor inicial de dicha propiedad. Finalmente hace uso de la función set dentro del render del componente.

El Hook useState

Como vemos uno de los Hooks principales, es useState, la cual nos devuelve un valor con estado y una función para actualizarlo, tomando como valor inicial el primer argumento de ésta. Podemos declarar la cantidad de ellas que deseemos utilizando dicha función. 

Tomemos como ejemplo el siguiente componente:

import React, { useState } from 'react';

function Example() {
  // Declara una nueva variable de estado, la cual llamaremos “count”
  const [messagesetMessage] = useState('');
  const [namesetName] = useState('Visitor');

  return (
    <div>
      <div>Write your name</div>
      <input type="text" onBlur={(e=> setName(e.target.value)} />
      <button onClick={() => setMessage(`Welcome to Hooks ${name}.`)}>
        Click me
      </button>
      <div>{message}</div>
    </div>
  );
}

En el estamos declarado 2 propiedades en el estado, message y name, en las cuáles se asigna su valor utilizando las funciones setName y setMessage.

Y ¿Qué hay del ciclo de vida?

Para el siguiente artículo veremos como trabajar con el Hook useEffect para realizar operaciones con efectos secundarios.

miércoles, 12 de diciembre de 2018

Conviertete en Hacker

Hace unos días encontré este sitio que la verdad está muy bien hecho, es un juego, te permite "simular" un escritorio Hacker con diversas herramientas tales como, cámaras de video vigilancia, una terminal remota, código de programación, etc. Seguro no te ayudará a Hackear la contraseña de Facebook de tus conocidos, pero es ideal para dejar con el ojo cuadrado a tus compañeros.





lunes, 10 de diciembre de 2018

Frameworks Clásicos CSS

Esta ocasión me gustaría compartir los siguientes frameworks CSS, con ellos podrás darle a tu sitio web una apariencia más retro ó simplemente por si quieres jugar con ellos como fue mi caso, dado que me llamó mucho la atención lo bien logrados que están.

El primero de ellos es NES.css, el cuál al importarlo a tu sitio, hará que todos los controles luzcan como en la siguiente imágen:



El siguiente framework es un poco mas retro aún, BOOTSTRA.386, el cuál también se encuentra en GitHub y hará que tu sitio tenga una apariencia como en la siguiente imágen:


Inyección SQL rápida utilizando SQLMap en Kali Linux

¡Hola de nuevo! posteo éste video que hice hace algún tiempo para utilizar la herramienta SQLMap integrada en Kali Linux, dicha herramienta es bastante potente y permite realizar ataques de inyección SQL en cuestión de minutos.


Inyección SQL

Hace algún tiempo que tengo en linea algunos videos de seguridad informática para los cursos que llegué a impartir de dicho tema, así que provecho éstos videos para postearlos en esta nueva etapa del blog y  que sean útiles, dado que son temas bastante interesantes. Del mismo modo, pronto generaré nuevo contenido y lo iré subiendo.

Én el siguiente video se explica como realizar un ataque de inyección SQL a un sitio web que utiliza PHP y que no tienes las variables sanitizadas correctamente, en la descripción del vídeo se utiliza un codificador de ASCII a Hex, la liga ya no sirve, dado que el que estaba adjunto era hecho por mí y en algún momento se perdió, pero se puede utilizar cualquier codificador como este o cualquiera que devuelva Google.


¡De regreso!

Después de muchísimo años, acá andamos de regreso, ha pasado mucho tiempo y del mismo modo he aprendido cosas nuevas que espero poder compartir por acá.

No creo que éste blog tome un nuevo rumbo, solamente me dedicaré a compartir cosas que crea que valgan la pena tanto en temas de Programación, Seguridad Informática, Video Juegos, Redes, Inteligencia Artificial, etc. Del mismo modo, será una parte donde compartiré cosas que tengo en diferentes lugares, por ejemplo mi canal de youtube o códigos de GitHub, al parecer los tiempos han cambiado mucho desde mi última entrada y veamos que sucede.

Del mismo modo, depuré muchas entradas que ya no funcionaban o que los enlaces estaban rotos, espero que las cosas que ya están obsoletas pronto se vayan quedando atrás con contenido nuevo.

martes, 26 de junio de 2012

Curiosidades BruteForce

Hace unos días andaba algo interezado en criptografia y computo de alto rendimiento, me dio la curiosidad de realizar un BruteForce para MD5 y verificar los tiempos que tarda en romper palabras muy simples en diferentes plataformas, arquitecturas y modelos de ejecución, el algoritmo es muy simple(lo adjunto), pero hubo algo que me dio una gran sorpresa...

Inicialmente empezé con el algoritmo utilizando C#, debido a que es uno de mis lenguajes favoritos aunque solo pensaba utilizarlo para probar el algoritmo, posteriormente me percate de que funcionaba muy bien, tenia un rango de comprobación de palabras con buenos tiempos aun para ser un lenguaje precompilado y me propuse a portar el algoritmo a ANSI C++ y compilarlo para la plataforma Windows nativa a 64 bits con lo cual debería darme mejores resultados teniendo mi creencia que los lenguajes precompilados e interpretados son considerablemente mas lentos que los nativos, mi sorpresa fue la siguiente:

C++
C#

Podemos observar que el mismo algoritmo implementado sobre C# realiza la tarea de fuerza bruta considerablemente mas rapido que en C++ utilizando el mismo hash de entrada ademas de que el tiempo requerido para la tarea, es exponencial, si pongo como palabra de entrada "zzzzzz" el tiempo que tarda C++ 64 bits en realizarlo es 15 veces mas de lo que C# requiere.

esto habla muy bien de la optimización de C#, aunque pretendo realizar el algoritmo con soporte multicore utilizando la GPU(NVIDIA CUDA), utilizando Cores del procesador, asi como migrar este algoritmo a JAVA y a Linux para realizar una comparación sobre mas plataformas, ademas de añadir mas algoritmos de encriptación y una interfaz grafica una vez que determine sobre que plataforma, arquitectura y modelo de ejecución son los mas convenientes.

Hooks en React (I), Utilizar el estado en componentes Stateless.

¿Qué son los Hooks? Los hooks son una nueva característica agregada a React (16.8), la cual consiste en un conjunto de funciones que nos p...