Patrones de Diseño (I): Definición y Clasificación


Estoy seguro que has escuchado más de una vez el término Patrón de Diseño (Design Pattern).  De lo que no estoy tan seguro es de que todos sepamos bien a qué se refiere ese término.  Así que aclaremos...


¿Qué es un Patrón de Diseño?

En resumen, un Patrón de Diseño es una solución típica para un problema común.  Dicho así, no suena tan impactante, ¿cierto?

Cada Patrón es como una guía, una plantilla, una herramienta reutilizable a aplicar ante un problema de un cierto tipo.  Así como siempre usamos un martillo para clavar un clavo, o unas tijeras para cortar tela, de forma similar podemos identificar fácilmente qué herramienta general usar para los problemas más comúnes de tecnología, y a partir de ahí, personalizar la herramienta hasta obtener un resultado óptimo.

Nota que un Patrón no es un trozo de código específico, o un algoritmo, sino un concepto general, por lo que no puedes simplemente copiar y pegar el Patrón en tu código.  Pero sí puedes usar esa guía para apoyarte en la creación de tu código.


Beneficios de los Patrones de Diseño

Puedes pasar toda tu vida profesional sin haber leído, aprendido, o aplicado, algún Patrón, de la misma forma que puedes pasarla sin usar un martillo ni una sola vez.  Pero sufrirás clavando cualquier clavo que te consigas.  Y ¿por qué querríamos que eso pasara?

Los Patrones de Diseño son soluciones probadas y aprobadas que te ayudarán a estar seguro de la validez de lo que estás implementando.  Te ahorrarán tiempo y esfuerzo, dado que podrás recorrer una senda ya abierta por otros pies, en lugar de estar sufriendo abriéndote paso por terreno agreste.  ¿Por qué reinventar el agua tibia?

Además, hablar en lenguaje de Patrones te permitirá comunicarte de forma más eficiente.  Cuando digas "usaré un Adapter" o "lo mejor es usar un Singleton", todo el equipo te entenderá... ¡o debería hacerlo!


Clasificación de los Patrones de Diseño

En la actualidad hay 23 Patrones de Diseño, divididos en tres categorías: 

  • Patrones creacionales (5 Patrones), que proveen mecanismos de creación de objetos que aumentan la flexibilidad y la reutilización del código existente.
  • Patrones estructurales (7 Patrones), que explican cómo componer clases y objetos en estructuras más grandes, mientras se mantienen eficientes y flexibles.
  • Patrones de comportamiento (11 Patrones), que se encargan de la comunicación entre objetos, así como asignación de responsabilidades.


Continuará...

Hoy pararemos este artículo aquí.  Pronto publicaré un artículo para cada tipo de Patrón, y con esa trilogía (¿de la que este artículo es la precuela? XD) cubriremos los Patrones existentes.

¡Escríbanme sus comentarios y prometo responder!

-- Gorka Siverio


Tomando capturas de pantalla en Windows

 

Una de las acciones que más a menudo realizo, tanto a nivel personal como en el trabajo, es la de capturar pantallas.  Es muy normal que requiera una imagen exacta de lo que veo en el monitor, y ¿qué mejor forma de hacerlo que esta?

(¡no hagan como mi suegra, que toma una foto a la pantalla con su celular! XD)

La gran mayoría de nosotros capturan las pantallas de una sola forma (¡la que colocaré de primera!), pero la verdad es que hay más de una forma de hacerlo.  ¡No se confíen, y sigan leyendo!


Capturar la pantalla completa

Combinación de teclas: [PrtScr]

Nota: Para activar la función de imprimir pantalla, quizás sea necesario en algunos teclados presionar una combinación particular, como por ejemplo [Shift] [PrtScr] o [Fn] [PrtScr].

Como ya dije, esta es la forma más común y usada por todos nosotros para tomar una captura de pantalla: esta combinación captura la pantalla completa y la copia al Portapapeles de Windows, dejándola disponible para usar en alguna otra aplicación (como pegarla en un documento Word o agregarla a algún editor de imágenes).


Capturar la pantalla completa y guardarla en un archivo

Combinación de teclas: [Win] [PrtScr]

Esta combinación también captura la pantalla completa, como la combinación anterior, pero además de ello copia de una vez la imagen a un archivo.  Por defecto la coloca en el directorio de Capturas de pantalla (Screenshots), pero otras aplicaciones como Dropbox pueden modificar este comportamiento (en mi caso, por ejemplo, esta combinación agrega la imagen directamente a Dropbox en la sub-carpeta Screenshots).


Capturar la ventana activa

Combinación de teclas: [Alt] [PrtScr]

Esta combinación no captura la pantalla completa, sino solamente la ventana que en ese momento esté activa, ignorando todo el resto.  Es ideal cuando queremos mostrar solamente aquello en lo que nos estamos enfocando en ese momento.


Capturar una selección de la pantalla

Combinación de teclas: [Win] [Shift] [S]

Esta combinación abrirá la herramienta Snip & Sketch, que nos permite ciertas opciones muy cómodas para capturar solamente una sección de la pantalla.  El camino más sencillo consiste simplemente en mantener el botón del mouse oprimido, y moverlo para dibujar un rectángulo, que será copiado inmediatamente al Portapapeles.

El menú superior que aparece al momento de realizar esta combinación nos ofrecerá más opciones, como por ejemplo poder utilizar una forma libre, capturar solo una ventana o capturar la pantalla completa (igual a las opciones que comenté antes).


Game Bar

Combinación de teclas: [Win] [G]

El Game Bar (barra de juego) es un overlay que está disponible en la gran mayoría de juegos y aplicaciones en Windows 10 y superiores, que nos permite capturar pantallas como una imagen o un video.  Una vez presionada la combinación, aparecerá el overlay sobre la pantalla actual, ofreciendo varias opciones en ventanas: la de captura aparece por defecto en la esquina superior izquierda del overlay.

Si deseas cambiar la combinación de teclas para este atajo, puedes ir a Settings > Gaming > Game bar.


Glosario de teclas

  • [Alt] = Tecla de funcionalidad Alternativa.  Normalmente se identifica con Alt.
  • [Fn] = Tecla de Función.  Normalmente se identifica con Fn.
  • [G] = Tecla g.
  • [PrtScr] = Print Screen, o Imprimir Pantalla.  Normalmente se identifica con PrtScr o ImpPnt.
  • [S] = Tecla s.
  • [Shift] = Tecla de Mayúsculas.  Normalmente se identifica con Shift o Mayús.
  • [Win] = Tecla de Windows.  Normalmente se identifica con el logo de Windows.


Aparte de las combinaciones que nombré arriba, hay otras opciones de terceros, tanto pagas como gratuitas, que te darán mayores comodidades, pero la verdad es que con las opciones por defecto de Windows, a mí al menos, me basta y me sobra. 

Prueben todas las opciones, y disfruten.  ¡Nos vemos!

-- Gorka Siverio


Agregando certificados a Java

 

Cuando comenzamos a preocuparnos de la seguridad en nuestros desarrollos, sin duda alguna, una de las primeras cosas con las que nos tropezaremos serán las conexiones seguras, y los certificados que necesitamos para las mismas.

Comencemos desde el principio: 


¿Qué es HTTP?

HTTP (por las siglas de Hypertext Transfer Protocol) es un protocolo de comunicación que permite transmitir mensajes y documentos.  Fue pensado para la comunicación entre servidores web y navegadores web, pero puede ser usado también para otros propósitos.  En otras palabras, es la forma estándar en la que tu navegador se comunica con otras máquinas cada vez que buscas algo (como este artículo!).


¿Qué es HTTPS?

HTTPS (por las siglas de HTTP Secure) es el hermano responsable de HTTP.  Mientras que HTTP solo se encarga de definir la forma en la que el mensaje se envía desde el origen y se recibe en el destino, HTTPS se encarga además de garantizar que en dicha comunicación participen solamente dichos origen y destino, evitando que la comunicación sea interceptada y las identidades suplantadas.

Básicamente, este protocolo permite que el mensaje sea encriptado usando SSL (Secure Sockets Layer), su hijo más actualizado TLS (Transport Layer Security), o el protocolo de encriptación que sea el apropiado.  De esta forma, solamente los participantes adecuados, el origen y el destino, pueden participar en una conversación dada.


¿Qué es un Certificado?

Un certificado no es otra cosa, ni más ni menos, que un documento que prueba que uno de los participantes de una conversación es quien dice ser.  Podemos tener certificados tanto suministrados por el servidor para el cliente, como por el cliente para el servidor, pero lo más común siempre es el primer caso.

Para compartirles un ejemplo resumido, si yo tengo un servidor que publica cierta información, y quiero que uno de ustedes tenga acceso seguro (usando HTTPS/TLS), sería mi responsabilidad compartirles mi certificado (normalmente un archivo .cer), y responsabilidad de ustedes instalarlo para que su navegador pueda usarlo.  De esa forma, cuando mi servidor les mandara información, ustedes podrían saber si en efecto la estoy enviando yo.

Normalmente, para empresas "públicas" (Google, Amazon, y casi cualquier otro site que consigas en Internet) a las que accedemos usando nuestros navegadores, el intercambio de certificados es bastante transparente para nosotros como usuarios: existen entidades responsables de validar los certificados (las CAs o Certificate Authorities), de tal forma que nuestro navegador tenga contra qué comparar que ese certificado de Google que le está llegando es realmente de Google.  Sin embargo, para las comunicaciones "privadas" que normalmente manejamos como desarrolladores, esa responsabilidad recae en nosotros.

Noten que un certificado puede tener fecha de caducidad, según lo que decida su dueño, por lo que puede ser necesario reimportarlo de cuando en cuando.


¿Qué es un Java KeyStore?

Un Java KeyStore (JKS, o simplemente KeyStore) es un repositorio de certificados, sean públicos o privados, y de cualquier clave privada que sea necesaria para su uso.  Básicamente, es el lugar donde debemos, como desarrolladores, importar el certificado de la otra máquina con la que queremos ser capaces de comunicarnos vía comunicación segura.

Si nuestro programa o herramienta usa la comunicación TLS o similar, debemos añadir un certificado al almacén de claves JKS en cada una de las máquinas (servidores, estaciones de trabajo, etc) con las que queramos comunicarnos.  Así de sencillo.


Y al fin, ¿cómo importo un certificado .cer a mi KeyStore Java?

Pues simplemente usaremos el comando keytool de Java para importar el certificado al almacén de claves.  Podemos ejecutarlo vía línea de comandos, o vía algún programa o interfaz con la que contemos.  Si usamos la línea de comandos, tendríamos algo como esto:

keytool -importcert -file <certificate.cer> -keystore <keystore.jks>

Donde:

  • <certificate.cer> es la ubicación y nombre del certificado que nos ha compartido el servidor.
  • <keystore.jks> es la ubicación y nombre del KeyStore dentro de la instalación Java del servidor o cliente que estamos usando.

Además de estos parámetros podemos usar muchos otros (para asignarle una clave a un KeyStore y que no cualquiera pueda revisarlo, por ejemplo, o asignarle un alias a un certificado importado).  Pueden ver el detalle del comando aquí.

Noten que el mismo comando puede ser usado no solo para la importación de un certificado (que es lo que hemos cubierto en este artículo), sino para todo lo que tenga que ver con un KeyStore, incluyendo su creación! No teman en pasear por la documentación.


Como siempre, ¡Quedo a la orden ante cualquier duda!

-- Gorka Siverio


Instalando Python


Como parte de mi proceso de aprendizaje tomé la decisión de refrescar un poco lo poco que sé de Python.  Y dado que no lo tenía ni instalado, y dado que hace poco hice un artículo similar sobre Java, tomé la decisión de dejar por escrito los pasos para preparar el entorno: ¿Qué necesito tener para poder usar Python?  ¿Cómo lo instalo?  ¿De dónde lo descargo?

Vamos a dar un breve paseo por el proceso de instalación que requerimos para poder usar dicho lenguaje.  Estas instrucciones están enfocadas en Windows, pues es el sistema operativo que hoy estoy usando: en general la base del proceso es la misma para otros sistemas operativos, pero los pasos particulares pueden variar.  Trataré de agregar los comentarios pertinentes en cada caso.


¿Qué necesito?

Para poder programar en Python, similar a lo que ocurre con otros lenguajes de programación, solo necesitas dos cosas:

  • El lenguaje de programación, que es el set de reglas que usarás para codificar.
  • El entorno de programación, que es la herramienta que usarás para codificar.

(Discúlpenme si copio y pego algunos textos de artículos previos, pero es que las explicaciones me quedaron muy chulas).

Si quieres entender un poco mejor qué es cada cosa, digamos que el lenguaje de programación es el idioma que hablarás con la computadora para que te entienda (castellano, inglés, élfico, etc), mientras que el entorno de programación es la herramienta que usarás para llevar a cabo la conversación con ella (teléfono, e-mail, señales de humo, etc).

El lenguaje, pues, define un set de reglas para que nos podamos entender, mientras que el entorno es lo que hace posible que apliquemos dichas reglas.  Ahora, vayamos un poco más en detalle sobre ambos elementos.


El lenguaje de programación: Instalación y configuración de Python

Una búsqueda rápida nos dirigirá a la página de Python, y dentro de ella a las notas para iniciarse en ese mundo.  En la sección de instalación tendremos acceso al link de descargas, donde conseguiremos los sites para Windows y otros sistemas operativos: basta con descargarse la última versión (la del número más grande).  En mi caso, como usuario Windows 10, sería el archivo "Windows installer (64-bit)" (y ya saben los pasos: "next, next, next...").

(La verdad, mi proceso fue incluso más sencillo que eso: al abrir un Editor de Línea de Comandos (Command Prompt o cmd) y escribir python, para ver si ya lo tenía instalado (tal y como las instrucciones de descarga sugerían), automáticamente me abrió una pantalla en la Microsoft Store, de la que pude instalar directamente la versión más actual).

El instalador instala todo lo necesario para el uso del lenguaje, ya sea como desarrollador o como consumidor, incluyendo las configuraciones necesarias para su uso.  Si quieres ver si se instaló correctamente, simplemente abre un Command Prompt y escribe "python", que te mostrará información de la versión de Python instalada y te dejará en la línea de comando del lenguaje, por si quieres hacer ahí directamente tu primer programa.  Y para salir, Ctrl-Z y Enter.

C:\Users\gsive>python
Python 3.9.4 (tags/v3.9.4:1f2e308, Apr  4 2021, 13:27:16) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>


El entorno de programación: Definición, elección e instalación del IDE

Como siempre, cualquier editor de texto te sirve para programar, aunque siempre sugeriré alguno que al menos soporte resaltado de sintáxis e identación (o sea, colorcitos bonitos), como Notepad++, o mejor aún, un IDE (ya dijimos antes que son megaeditores que brindan herramientas y otras facilidades para desarrollar en uno o más lenguajes de programación).

Los chicos de Python son tan simpáticos que incluso nos dan una lista de los mejores IDEs para Python, en su opinión.  El más aceptado parece ser Thonny, pero como soy fan enamorada del IntelliJ de JetBrains, me fuí por esa rama y descargué PyCharm, que tiene también una versión gratuita.  En tu caso, siéntete libre de investigar o de experimentar por tu lado.

Como siempre, el proceso de instalación del IDE variará según el que elijas, pero en Windows son similares todos: ve a la página de descarga (los links están en el site de Python), doble click en el archivo .exe y sigue las instrucciones en pantalla ("next, next, next..").  En mi caso el IDE no me solicitó mayor información, ni siquiera dónde estaba instalado Python, por lo que apenas terminó la instalación, creé un proyecto y ¡realicé mi primer programa en Python!

print('Hello, world!')


Otros links de interés


Ojalá este artículo les ayude a iniciarse con Python.  Quedo atento a cualquier duda o comentario.

-- Gorka Siverio


Instalando Java

 

Cada vez que estoy enseñando Java a alguien que no ha tenido contacto previo con dicho lenguaje, siempre me queda la sensación de que lo más complicado no es enseñar el lenguaje en sí (al menos, a nivel básico), sino preparar el entorno de trabajo para poder usarlo.  ¿Qué necesito tener para poder usar Java?  ¿Cómo lo instalo?  ¿De dónde lo descargo?

Vamos a dar un breve paseo por el proceso de instalación que requerimos para poder usar dicho lenguaje.  Estas instrucciones están enfocadas en Windows, pues es el sistema operativo que hoy estoy usando: en general la base del proceso es la misma para otros sistemas operativos, pero los pasos particulares pueden variar.  Trataré de agregar los comentarios pertinentes en cada caso.


¿Qué necesito?

Para poder programar en Java necesitas únicamente dos componentes:

  • El lenguaje de programación, que es el set de reglas que usarás para codificar.
  • El entorno de programación, que es la herramienta que usarás para codificar.

Si quieres entender un poco mejor qué es cada cosa, digamos que el lenguaje de programación es el idioma que hablarás con la computadora para que te entienda (castellano, inglés, élfico, etc), mientras que el entorno de programación es la herramienta que usarás para llevar a cabo la conversación con ella (teléfono, e-mail, señales de humo, etc).

El lenguaje, pues, define un set de reglas para que nos podamos entender, mientras que el entorno es lo que hace posible que apliquemos dichas reglas.  Ahora, vayamos un poco más en detalle sobre ambos elementos.


El lenguaje de programación: Instalación y configuración de Java

Pues aquí comenzamos como con cualquier otra cosa en la vida: googleamos "download Java", y esto nos llevará, como no, a la página de descargas de Java, que tiene la decencia de mostrarte de una vez la versión correcta para tu sistema operativo.  Sin embargo, si nos descargamos lo que nos indican en esa página estaremos bajándonos solo el JRE (que no es lo que queremos), y no el JDK (que sí es lo que queremos).  

Y pues... benditos acrónimos.  ¿Qué es cada cosa, y cuál quiero?

El JRE (por las siglas de "Java Runtime Environment", algo así como "Entorno de Ejecución Java") es una instalación de Java que te permite ejecutar programas hechos en dicho lenguaje.  Para lograr su misión de code once, run anywhere, los programas en Java no se casan con un sistema operativo, sino que corren sobre una capa extra, la Máquina Virtual (JVM, por las siglas de Java Virtual Machine).  Por ende, en general necesitas tener Java en tu máquina para correr programas hechos en Java.

El JDK (por las siglas de "Java Development Kit", que viene siendo algo como "Herramientas de Desarrollo en Java") es una instalación de Java un poco más extensa que el JRE, pues permite no solo ejecutar programas Java, sino que además incluye librerías y herramientas para poder crear dichos programas.  Si eres un desarrollador, este es el que quieres.

En resumen:

  • JRE para ejecutar programas Java.  Dirigido al público en general.
  • JDK para desarrollar y ejecutar programas Java.  Dirigido a desarrolladores.

Por ende, queremos descargar el JDK.  Pues no pasa nada, googleamos "download java jdk" y esto nos llevará a la página de descarga del JDK Java.  Y ahí procedemos a descargar el del sistema operativo que estemos usando (en mi caso, descargué el Windows x64 Installer).  Y siendo Windows lo que es, pues doble click al archivo .exe descargado, algunos "next" dejando las opciones por defecto, y close al finalizar.  ¡Felicidades, ya tienes Java instalado en tu máquina!

Dependiendo del sistema operativo quizás tengas que configurar un par de cosillas más para que tu sistema reconozca el JDK.  Lo más común es tener que indicar en algunas propiedades del sistema las rutas de configuración (las más necesarias tienden a ser JAVA_HOME, PATH y CLASSPATH), pero con la instalación de Windows ya todo eso se configura de forma automática.  Si quieres ver si se instaló correctamente, simplemente abre un Editor de Línea de Comandos (Command Prompt) y escribe "java --version", lo que te mostrará información de la versión de Java instalada.


C:\Users\gsive>java --version
java 15.0.2 2021-01-19
Java(TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)


El entorno de programación: Definición, elección e instalación del IDE

Ahora que ya sabemos hablar Java solo tenemos que ver qué herramienta usar para hablarlo.  En general cualquier editor de texto servirá para ello (incluso el Notepad que Windows trae por defecto), pero si te quieres (aunque sea un poquito) buscarás un editor que reconozca la sintaxis de Java (es decir, que te ponga de colores el código) y te brinde herramientas más avanzadas.



¡I know Kung Fu... digo, Java!


Hay multitud de editores compatibles con Java (mi preferido es Notepad++), pero mi recomendación es que instales alguno de los IDEs disponibles para Java.

Y seguimos con acrónimos... A ver, ¿qué es un IDE?

Un IDE (por las siglas de "Integrated Development Environment", que traduciré como "Entorno de Desarrollo Integrado") son editores de texto más poderosos de lo normal, que brindan herramientas y otras facilidades para desarrollar en uno o más lenguajes de programación (sintaxis, depuradores, compiladores, control de versiones, etc.  Si no sabes qué es todo esto, tranquilo, que más adelante lo sabrás.  Por ahora, confía en que son cosas que quieres mucho :D).

En el mercado hay muchos IDEs, gratuitos o pagos, que cumplen excelentemente su función.  Para Java, seguramente el más usado sea Eclipse, aunque hay muchos otros conocidos, como NetBeans o Visual Studio.  En mi caso, mi preferido es IntelliJ IDEA.  Siéntete libre de probarlos (varios son gratis, o al menos tienen una versión que lo es) y elegir la herramienta que más te guste: todos cumplen la misma función.

El proceso de instalación del IDE variará según el que elijas, pero en Windows son similares todos: googlea y ve a la página de descarga, doble click en el archivo .exe y sigue las instrucciones en pantalla.  Al finalizar la instalación quizás tendrás que indicarle al IDE dónde instalaste Java... y eso sería todo.  Estarás listo ya para poder comenzar a desarrollar en Java.

¿Que cómo desarrollas algún programa?  Bueno, querido lector, eso es tema para otro artículo. :D


Ojalá este artículo les ayude a solventar este primer escollo como desarrolladores.  ¡Quedo a la orden ante cualquier duda!

-- Gorka Siverio