Extraer Texto desde una Imagen utilizando Python

Estándar

En este artículo les voy a explicar cómo extraer texto desde una imagen utilizando Python, aprovechando que recientemente programé una pequeña herramienta para engañar captchas sencillos extraer el texto de imágenes generadas al azar. Se deberá tomar en cuenta que el ejemplo aquí mostrado, no ahonda en las fascinantes profundidades del Reconocimiento Óptico de Caracteres (OCR) para imágenes demasiado complejas, es simplemente una solución muy tosca para un problema sencillo. Queda en ustedes estudiar los principios del OCR, continuar y mejorar las técnicas de detección tuneando el uso de las librerías y también mejorar el post proceso de las imágenes. Les dejo el ejercicio a continuación para fines didácticos.

¿Qué vamos a necesitar?

1) Tesseract – Es un motor OCR (optical character recognition) que tiene más de 30 años en la industria, el cual permite extraer texto desde imágenes. Recomiendo la instalación en MacOS utilizando Homebrew.

Si estás utilizando Linux -por ejemplo Ubuntu- lo más sencillo es utilizar apt-get.

* Si estás utilizando Windows, te recomiendo visitar el sitio del equipo de Tesseract y seguir las instrucciones para ese sistema operativo.

2) La librería PyTesseract, que es en realidad un wrapper en Python para el motor Tesseract, la instalaremos más adelante luego de crear nuestro entorno virtual.

3) También necesitarán un editor de texto, en este caso yo utilizo vscode.

Crear el Entorno Virtual

Las aplicaciones en Python utilizan paquetes y módulos que no forman parte de la librería estándar: a veces requieren una versión específica de una librería, ya sea porque se necesita que haya un bug solucionado en esa versión, o porque quizá la aplicación en cuestión tiene alguna otra dependencia. Eso significa que sería muy difícil de tener una instalación de Python en nuestro sistema que cumpla con todos los requerimientos de todas las aplicaciones. Es por ello que se propuso una solución a éste problema creando un entorno virtual para cada aplicación, que es en realidad un directorio que contiene una instalación de una versión específica de Python, junto con los paquetes adicionales necesarios para ejecutarla. Es así, como logramos que diferentes aplicaciones en un mismo sistema pueden usar cada una su entorno virtual propio (y diferente a los demás).

Para crear nuestro entorno virtual, primero elegimos en que carpeta queremos crearlo y ejecutamos el siguiente comando, que ejecuta el módulo venv:

Este comando creará el directorio ocr-test (si no existiera) y creará algunos directorios dentro que contienen una copia del interprete de Python junto con varios otros archivos necesarios para ejecutar la aplicación.

Luego debemos activar nuestro entorno virtual, utilizando el script activate. En MacOS o Linux y teniendo bash como consola el comando es:

Al activar el entorno virtual, podremos ver que nuestro prompt de la línea de comandos cambia y nos muestra el entorno virtual que estamos usando, por tanto podríamos decir que ese entorno está modificado para que al ejecutar Python utilice la versión definida junto con toda la instalación específica dentro de ese directorio.

Instalar los demás paquetes con pip

Dentro de nuestro entorno virtual (ocr-test), podemos utilizar el programa pip para instalar actualizar y eliminar paquetes.

Instalamos PyTesseract:

Para manejo de imágenes instalamos Pillow:

– JIC – pueden listar todos los paquetes instalados en el entorno virtual utilizando pip list, por ejemplo:

Trabajar con las imágenes

Tenemos la siguiente imagen para realizar nuestro ejemplo:

Es una imagen sencilla con el texto alineado horizontalmente y que no requiere de ningún proceso adicional.

La estructura de nuestro entorno virtual sería la siguiente:

El archivo main.py es el que contiene nuestro código y la imagen a procesar es imagen1.png. Los demás archivos y directorios los crea python al ejecutar el módulo venv y crear nuestro entorno virtual.

Nuestro código sería el siguiente:

Luego al ejecutar nuestro código Python desde línea de comandos, tenemos el siguiente output:

Como pueden apreciar el texto que imprimimos como resultado del proceso de la imagen coincide con el contenido de la misma. Se debe tomar en cuenta que no siempre se detectará correctamente el texto, también puede detectar espacios en blanco por demás o detectar erróneamente algunos caracteres o quizá confundir algunos caracteres con otros; entre ellos es muy común que confunda el número 8 con el número 3. También podemos especificar el idioma en el que se desea extraer el texto, mejorando así su extracción, por ejemplo usando el argumento lang=’por’ para el portugués:

Pueden acceder al listado completo de idiomas en el siguiente enlace.

Espero les sirva.

Saludos.

Solucionar el error «Permission Denied (publickey)» al intentar hacer push a un repositorio GIT

Estándar

Este artículo les ayudará en caso de que estén recibiendo el error «Permission Denied (publickey)» al intentar hacer push a un repositorio GIT

La causa de este error no es nada del otro mundo, simplemente significa que no se han creado llaves SSH en la máquina local. Así lo solucionamos:

  1. En Windows abrir la consola git (bash) (se puede hacer utilizando el buscador de Windows y escribiendo «git bash») o si estamos en una Mac abrimos la Terminal. (Consejo: Se puede usar cualquier terminal de tipo *nix  (menos la «línea de comandos» por defecto de Windows)
  2. Escribir  Esto nos llevará al directorio raíz de Git (Por lo general es C:\Usuarios\[TU-USUARIO]\.ssh\ en Windows)
  3. Dentro de esa carpeta .ssh , deben haber estos dos archivos:   y  Estos son los archivos que permitirán a tu computador comunicarse con GitHub, BitBucket, o cualquier otro servicio basado en Git.
  4. Escribir para ver el listado del directorio. Si esos archivos no aparecen, continúa al siguiente paso.
    NOTA: Tus llaves SSH deben llamarse: id_rsa e id_rsa.pub para que Git, GitHub y BitBucket las reconozcan por defecto.
  5. Para crear nuevas llaves SSH, escribe:  Esto creará ambos archivos id_rsa y id_rsa.pub.
  6. Luego, abrir el archivo   en tu editor de texto favorito, esto se puede realizar en Windows Explorer o en el Finder de OSX, escribiendo:  (y abrirá la carpeta).
  7. Luego copia todo el contenido –exactamente como está en el archivo id_rsa.pub, sin líneas ni espacios extras– y pegara todo ese texto en GitHub y/o BitBucket dentro de las configuraciones de cuenta (Account Settings) > SSH Keys.
    NOTA: Es preferible darle un nombre descriptivo a la llave SSH, usualmente con el nombre de la estación de trabajo o computadora desde la cual se están realizando los push.
  8. Ahora que ha añadido su llave pública a Github u/o BitBucket, intentar nuevamente el comando push.
    Por ejemplo:  y verificar que funciona.

Saludos!

Conectarse desde Mac y Linux a través de SSH con una llave privada

Estándar

En este artículo voy a detallar como utilizar una llave privada para ingresar a un servidor Raspberry Pi (que tiene instalado Raspbian – basado en Debian) a través de una sesión de terminal en MacOS Catalina (que como saben está basado a su vez en BSD). Así que pueden utilizar el mismo proceso desde cualquier programa de Terminal en Linux.

¿Qué vamos a necesitar?

Un programa cliente de SSH instalado en tu Linux o como en mi caso MacOS Catalina, en la mayoría de los casos se utiliza ssh. También necesitarán un editor de texto, en este caso yo utilizo vim.

Para ingresar con una llave privada

Utilizando el editor de texto, creamos un archivo donde almacenaremos la llave privada. En este ejemplo crearemos el archivo dummykey.txt. Debemos tener ya previamente copiado (usando ctrl+c o command+c) el contenido de nuestro certificado emitido por el servidor al que estamos queriendo ingresar. Luego en el caso de que decidamos utilizar el editor vim (hagan click aquí para una excelente cheat sheet), el comando sería el siguiente:

Luego de ejecutar el comando y por tanto tener abierto el editor, presionamos la tecla i para entrar en modo de inserción. Luego pegamos el contenido de nuestro certificado que copiamos previamente al portapapeles (usando ctrl+v o command+v). Es muy importante que incluyamos las líneas BEGIN y END del certificado. Luego presionamos la tecla escape (esc) para dejar el modo inserción con el texto ya pegado dentro del archivo en el editor. Luego presionamos la tecla dos puntos : para ingresar al modo de entrada de comandos y escribimos wq para guardar el archivo y volver a la terminal (aclaro que el comando wq que enviamos a vim es la combinación de dos comandos w de write y q de quit o sea, escribir/guardar y -luego- salir).

Importante!

Luego tenemos que configurar los permisos al archivo del certificado que acabamos de crear, debemos aplicarle el modo 600 (también pueden aplicarle el 400). Tomen en cuenta que si omitimos este paso, lo demás de aquí en adelante fallará. El comando es:

Luego utilizamos la llave como parámetro del comando para ingresar utilizando SSH, en este caso utilizaremos el usuario user y el IP de nuestro Raspberry Pi es 192.168.0.33:

Cuando nos aparezca el diálogo solicitando la confirmación de la conexión, debemos aceptarlo tecleando la palabra yes y luego presionamos la tecla Enter.

En el caso de que la llave exija una contraseña, cuando aparezca el diálogo solicitándola, se deberá escribir y luego presionar la tecla Enter para completar la conexión correctamente.

Saludos.

Mi experiencia con los cursos de PLURALSIGHT durante el mes #FreeApril (post largo)

Estándar

Durante el mes de abril, la empresa PLURALSIGHT ofreció todos los cursos y videos GRATIS.

Como todos sabemos, en respuesta al creciente número de casos de COVID-19 durante la pandemia de este año 2020, muchos países -al igual que el mío- declaran estado de alarma, adoptando como principal medida, la imposición de una cuarentena nacional.

Varias empresas y plataformas (de todo tipo), se solidarizaron con la comunidad mundial, ofreciendo sus servicios gratis para quienes no tienen una suscripción activa, o mejorando los planes a clientes activos, en algunos casos solo para ciertas zonas geográficas y otros -más generosos- lo hicieron para con todos, sin excepción.

En mi anterior post, daba las indicaciones para aprovechar PLURALSIGHT Gratuito durante todo el mes de Abril; mi emoción se debió, principalmente, a que en lo personal considero que esta plataforma se diferencia de otras (hay muy buenas por cierto) por la calidad excepcional de sus cursos, los cuales son dictados por una variedad de autores que van desde Senior Developers hasta Software Advocates y Entrepreneurs, todos ellos excelentes profesionales.

Es así que lejos de considerar el confinamiento un problema (somos programadores, estamos acostumbrados a pasar mucho tiempo frente a la compu) me propuse aprovechar la cuarentena y sacar el máximo provecho a lo que considero el momento de hacer todo aquello para lo que no he tenido tiempo últimamente, debido a los diversos proyectos y demás actividades.

Estas son mis impresiones de los cursos que completé, luego de utilizar el #FreeApril de Pluralsight: hago notar que habiendo una cantidad increíble de cursos, me enfoqué específicamente en ciertos temas en los que quería profundizar, tener una actualización tecnológica y en otros casos por simple caduquera (chochera) de aprenderme hasta los shortcuts de teclado que (ahora si) me pueden facilitar la realización de tareas durante mi día a día desarrollando software; pero antes de seguir me gustaría hacer un paréntesis para más o menos resumir la interfaz de la plataforma:

Interfaz de Pluralsight

La interfaz es más o menos similar a la de otras plataformas como Udemy o edX, sobre la cual me gustaría hacer notar los siguientes recursos:

Learning Paths

Se tienen los Learning Paths -senderos, trayectorias, rutas o caminos de aprendizaje- que son colecciones de cursos cuidadosamente «curados» por expertos y autores de Pluralsight, es decir que proveen una ruta de aprendizaje para los diversos temas que nos pueden interesar, mismos que están divididos por el nivel de complejidad de los cursos (Principiante, Intermedio y Avanzado), mostrándonos de manera visual nuestro avance general en el dashboard del path escogido. Esto me parece sumamente útil para aprender y enfocarme en un conjunto particular de habilidades, además, teniendo todo clasificado y agregado nos da la sensación de que al completarlo ya se tiene lo que uno necesita para empezar a aplicar esas nuevas técnicas en el trabajo.

Skill IQ Assessments

Por aquí debí comenzar, pero sentí que primero tenía que comentar acerca de los Learning Paths, ya que esto aplica para ellos: los Skill IQ Assessments son exámenes de 20 preguntas que le permitirá a la plataforma saber en qué nivel de habilidad nos encontramos; si respecto a una ruta de aprendizaje estamos más cerca de ser novatos que expertos. ¿Para qué? Para que así nos brinde recomendaciones de contenidos personalizados y adecuados a nuestro nivel. Las preguntas son cronometradas de acuerdo a la complejidad de las mismas y lo bueno es que si creemos que pudimos hacerlo mejor, nos da la posibilidad de reintentarlos una vez para mejorar nuestro puntaje, en tal caso la plataforma siempre se quedará con nuestro score más alto.

Guías

Las guías –guides– son artículos de texto que nos pueden ayudar a resolver con mayor rapidez algunos problemas técnicos o blockers mediante recursos como fragmentos de código y ejemplos de implementaciones en el mundo real. Aparte de estar muy bien redactadas y esquematizadas, me gusta mucho el buscador, sumamente útil.

Bookmarks

Los bookmarks o marcapáginas, se utilizan para destacar contenido que nos interesa, se pueden añadir (y posteriormente filtrar) estos marcadores a los Cursos, Módulos y Videos. Para acceder a ellos tenemos un enlace en la barra superior al lado de nuestra imagen miniatura de perfil, muy conveniente cuando queremos volver a repasar un tema que vimos en una lección o por ejemplo volver a revisar quizá una serie de comandos o un fragmento de código que necesitamos recordar.

Canales

Los canales son listas personalizadas de cursos, las cuales podemos nombrar como deseemos, ya que en este el caso los curadores de la selección somos nosotros, útil para agrupar cursos por distintas temáticas o asuntos de nuestro interés: Testing, CI/CD, Mobile, etc.

Descargar los cursos

Mas que descargar los cursos, lo que ofrecen es la posibilidad de poder aprender en modo offline, para lo cual se debe descargar la app de Pluralsight disponible para MacOS, Windows, iPhone, iPad, Smart TVs (Apple TV, Amazon Fire TV & Roku) y dispositivos Android. Algo que me pareció curioso: ofrecen una extensión/plugin para Visual Studio Code que nos permite obtener recomendaciones de contenido y respuestas a preguntas, éstas respuestas pueden ser videos, cursos, guías que la plataforma ofrece. Yo no la he probado aún, si le echo una mirada les hago saber.

Transcripciones

Adicional a la tabla de contenidos y descripción que cada curso tiene, se cuenta con la transcripción completa de todos los videos, la mayoría son transcripciones realizadas por los mismos autores y en algunos casos son autogeneradas, el 99% de muy buena calidad, salvo en alguno que otro video que no se le entendía con claridad alguna palabra al disertante me la tradujo con «________» (tampoco digamos que tengo un «listening» espectacular). Sólo pude encontrar contenidos en inglés, pero se tienen los subtítulos autogenerados creo que para casi todos los idiomas.

Archivos prácticos o de ejercicios

Cada curso provee un archivo comprimido para descargar –Exercise Files-, que incluye las diapositivas presentadas en cada módulo y el código fuente que lo respalda cuando corresponde (esto depende del curso). En aquellos que vienen con código fuente, adicional a la descarga del archivo de ejercicios provisto por la plataforma, también es importante acceder al enlace que nos lleva al repositorio -la mayoría de las veces en GitHub- provisto por el autor al comienzo del contenido, para así trabajar los ejercicios con la versión más actualizada del proyecto.

Área de discusión

Cada curso cuenta con un foro de discusión donde el autor interactúa con los alumnos contestando dudas, complementando el contenido y a veces también aclarando algunas correcciones o fixes que se han realizado para que los ejercicios funcionen.

Cuestionario práctico

Se tienen cuestionarios prácticos con preguntas referentes al curso, éstas preguntas tienen mas o menos los lineamientos de las preguntas que hay en los exámenes de certificación, se pueden realizar varios intentos de éstos tests, la plataforma nos va almacenando un listado histórico de todos los cuestionarios que vamos pasando y la puntuación de los mismos.

Cursos Relacionados

Es un listado de cursos afines al que estamos realizando, ayuda bastante si por ejemplo estamos haciendo un curso de Unit Testing en JUnit 5, entonces nos recomienda otros acerca de TDD, Mockito, etc. Útil si no hemos buscado últimamente novedades en tecnología de desarrollo de software.

TL;DR

Resumen de cursos

Bueno, al fin, éstos son los cursos que completé (en total fueron 14) y ofrezco mi opinión personalísima de los mismos, por favor tomar en cuenta que no gano dinero por esto y hago este artículo como un agradecimiento con Pluralsight por el gesto de regalar todo un mes de delicioso aprendizaje, el cual he apreciado mucho, de todas maneras el enlace que proveo al sitio de la plataforma tiene mi código de afiliado 🙂 en caso deseen conocer la plataforma, al lado del título de cada curso está el nombre del autor y el enlace correspondiente a su perfil.

Tema: Infraestructura & Cloud

La mayoría de estos cursos son parte de la ruta de aprendizaje AWS Certified Developer – Associate (DVA-C01) de Amazon Web Services. Con los ejercicios provistos se llega a comprender los servicios principales y se debería ya tener la capacidad de desarrollar y desplegar una aplicación totalmente funcional en AWS, los contenidos más avanzados nos enseñan acerca de aplicaciones distribuidas y Serverless, así como también a monitorearlas y manejarlas correctamente.

  • AWS Developer: The Big Picture 
  • AWS Developer: Getting Started
  • AWS Developer: Designing and Developing
  • Demystifying the AWS Certified Developer: Associate Exam
  • Docker and Kubernetes: The Big Picture

AWS Developer: The Big PictureRyan Lewis

Éste curso no es práctico, pero nos da una introducción a la vasta variedad de servicios esenciales de AWS (Amazon Web Services), que hasta el momento es el mayor proveedor de servicios de computación en la nube y lo utilizamos empresas de todo tamaño. Este corto curso es necesario si queremos saber más de cloud computing y cómo se lo puede usar.

AWS Developer: Getting StartedRyan Lewis

Aquí ya se aprende la manera de desarrollar, desplegar e integrar aplicaciones web en AWS, viene con el código fuente de una fábrica de pizzas en Node.js, muy didáctico y entretenido, en este curso se configuran alarmas, se manejan instancias EC2Elastic Cloud Computing– se delimitan recursos con VPCVirtual Private Clouds-, se aprende a implementar de manera fácil los muy versátiles buckets en S3 –Simple Storage Service– y se da una ligera implementación a 2 servicios de base de datos: RDSRelational Database Service– y DynamoDB (que es una base de datos NoSQL), así también damos una mirada a Cloudfront para desplegar contenido de forma global.

AWS Developer: Designing and DevelopingRyan Lewis

Por si queremos avanzar un poco más en la ruta de AWS, aquí ya aprendemos a utilizar el SDK –Software Development Kit– de AWS, se implementa de manera mas avanzada el escalado de EC2 y el manejo de imágenes de disco AMI para despliegue bajo demanda con grupos de auto escalado y balanceo de carga elástico: ELBElastic Load Balancers-. Se profundiza en aspectos de seguridad y se aprende de almacenamiento elástico de bloques o EBSElastic Block Store-. Muy importante: se implementa el servicio de Route53 (DNS en la nube de Amazon) para crear un gateway para nuestra API (el código fuente del proyecto es de hámsters) y también se profundiza un poco en Cloudfront, Cloudwatch y Kinesis & SQS para la comunicación y alarmas. En este curso se programa un poco más que en el anterior.

Demystifying the AWS Certified Developer: Associate ExamRyan Lewis

Interesante para darnos una idea de cómo es el examen de certificación AWS Certified Developer – Associate exam. Se aprenden tips interesantes, aparte de los genéricos que pueden aplicarse a cualquier examen de certificación en general; me gustó cómo nos da una idea de ponderar las áreas en las que debemos mejorar nuestras habilidades.

Docker and Kubernetes: The Big PictureNigel Poulton

Éste curso forma parte de la ruta Managing Containers with Docker. Los contenedores son una forma de virtualizar que para algunos escenarios se adecúa mejor que los tradicionales Hypervisors, me gustaría hacer toda esta ruta de aprendizaje en un futuro para conocer más a fondo todo lo que Docker tiene para ofrecer. Éste contenido es el ideal para introducirnos en los contenedores y Kubernetes, para desplegar nuestras aplicaciones modernas y también las heredadas.

Tema: Java & Spring

Éstos cursos forman parte de la ruta Core Spring Path, que si bien ya conozco y vengo implementando Spring desde hace un par de años, son contenidos que quería específicamente revisar, ya que es un framework que ha crecido con el tiempo y ahora también soporta Groovy y Kotlin como lenguajes alternativos para la JVM; en resumen fueron para darle una mirada rápida. Ambos cursos de contenido súper corto pero a la vez muy sólido, hago hincapié en que la autora de los mismos es una programadora que ha ganado algunos premios; personalmente me gusta mucho que las mujeres tengan un papel activo en el desarrollo de software y que sienten presencia en esta industria.

  • Spring Boot Fundamentals
  • Building Microservices REST APIs Using Spring Data REST

Spring Boot FundamentalsKesha Williams

Cuando alguien habla de Spring, por lo general se refiere a toda la familia, pero en este curso se aborda la extensión Spring Boot, que ayuda a desarrollar aplicaciones de manera muy rápida y con menos código. Enseña de una manera muy didáctica temas como: anotaciones, propiedades, perfiles para entornos, acceso a datos con JPA, el patrón MVC y cómo se empaquetan los archivos para desplegar.

Me gustaron las lecciones que abordan la implementación de Aplicaciones Web RESTful, para quien desea aprender a construir productos basados en API; así también otra lección notable es la que enseña como implementar GraphQL: ese lenguaje Open Source de manipulación y consulta de datos para API; nos hace implementar sus esquemas, operaciones y mutaciones para que mediante el runtime realicemos consultas y operaciones con los datos existentes en nuestra base de datos, así también podriamos acceder a esos mismos datos que hemos expuesto utilizando middlewares y por supuesto backends. No quiero dejar de mencionar la implementación de los Actuators para obtener métricas y otros indicadores de salud de nuestra aplicación ya desplegada.

Por último, da un breve pantallazo a cómo realizar tests unitarios y de integración, muy ilustrativo.

Building Microservices REST APIs Using Spring Data RESTKesha Williams

Este curso aborda la creación de API REST para microservicios utilizando Spring Data REST, y sólo en cuestión de minutos ya convertimos un repositorio a microservicio RESTful, el cual está originalmente en Spring Data; luego progresivamente se lo va enriqueciendo con Paging (paginación), Sorting (ordenación) y Searching (búsqueda).

Importante la lección de Swagger, para quien quiere aprender acerca de esta herramienta de autodocumentación de APIs, que tiene una poderosa interfaz web y también nos ayuda a generar código, documentación y casos de prueba para nuestras API.

Por mi parte realicé un ejercicio desplegando la aplicación final en mis EC2 de AWS, con escalado de instancias de acuerdo a reglas establecidas en mi balanceador de carga.

Tema: Angular

Hace un par de años que no me dejo conquistar por alternativas como React, así que continúo trabajando con Angular: porque es un Framework completo para JavaScript, sigo convencido de que las aplicaciones dinámicas e interactivas que nos permite desarrollar, ya sean estas SPA Single Page Application, MPA Multi Page Application, Client Side o Server Side Rendering, son robustas, fáciles de depurar y testear a cambio de una curva de aprendizaje moderada.

  • Angular CLI
  • Angular Forms
  • Angular Architecture and Best Practices
  • Unit Testing in Angular

Angular CLIJohn Papa

Este curso nos enseña como crear, generar, depurar, testear, compilar y en general construir aplicaciones que sigan los Lineamientos de Estilo de Angular o Angular Style Guide. Pareciera una exageración hacer un curso de algo que pareciera trivial como el CLI, que bien se puede aprender con la misma documentación técnica (así lo aprendí yo); pero saqué algo bueno de esto: como este curso es desde cero e incluye instalar Node.js, npm y configurar los entornos, descubrí que tenía una chipazón (todo un enredo) mis versiones locales, ya que mi sistema operativo es MacOS Catalina actualizado desde El Capitán y utilizo nvm para versionar Node por proyecto, gracias a este curso dejé saneado mi entorno tanto de Node como de Angular y Typescript, con las dependencias correctas por cada versión y para cada proyecto.

Plus: Casi al final hay un módulo jugoso de Unit Tests & End to End Tests que nos enseña a configurar, ejecutar y testear nuestras aplicaciones, así también nos da pautas importantes para verificar la Cobertura de Código (Code Coverage) de nuestro desarrollo.

Angular FormsMark Zamoyta

No aprendí mucho en este porque el contenido del mismo ya lo hice en otro curso, pero para quien está comenzando con Angular le ayudará con lo fundamental para trabajar con formularios basados en plantilla o Template Based, desde crear, agregarles estilo y utilizar validación y data binding. Este curso no aborda formularios reactivos.

Angular Architecture and Best PracticesDan Wahlin

Curso interesante y útil para aprender cómo desarrollar aplicaciones en Angular con una arquitectura sólida que sea fácil de refactorizar y mantener. Es necesario adoptar las propuestas de cómo organizar nuestro código, componentes, módulos y la comunicación entre sí, también el uso de la librería RxJS, el manejo de estado y en general muchas buenas prácticas, todas siguiendo la ya mencionada Angular Style Guide.

Las lecciones son la versión avanzada del curso Angular CLI, ya que se profundiza en aprender a organizar los módulos y librerías, luego unificarlas, aplicar estilos, implementar algunos patrones como Inmutable (muy importante), la comunicación utilizando el servicio Event Bus Service (si no conocen los Observables, es el momento), y manejo de estado usando NgRx entre otros temas de interés, como las consideraciones de seguridad. Recomiendo este curso para cualquiera que desee trabajar con Angular, o que ya esté trabajando con el framework y desee ampliar sus conocimientos, el contenido es un poco pesado, pero definitivamente necesario.

Unit Testing in AngularJoe Eames

Este curso está centrado en Unit Testing para proyectos en Angular, comprende desde tests «Aislados» y menos complejos para Pipes, Servicios y Componentes, hasta tests de integración superficiales y profundos (Shallow & Deep) utilizando los objetos nativos y de depuración para realizar pruebas a componentes con o sin hijos (childs). Así también nos enseñan a realizar pruebas en los componentes de ruteo, cómo lidiar con el código asíncrono y verificar la Cobertura de Código (Code Coverage) de nuestro proyecto.

Tema: Tools & Design

Aquí de todo un poco -caduqueras en realidad- como el cursito de VS Code, el de Gradle (para construcción de proyectos y manejo de ciclo de vida usando Groovy y Kotlin), y uno de diseño de interacción para aplicaciones.

  • Gradle Build Tool Fundamentals
  • Interaction Design Fundamentals
  • Visual Studio Code

Gradle Build Tool FundamentalsKevin Jones

Curso bien básico de Gradle, que es una herramienta para construir proyectos en Java, permitiendo definir los archivos de configuración tanto en Groovy como en Kotlin, ambos son lenguajes de programación orientada a objetos implementados sobre la plataforma Java. Ésta herramienta reemplaza a Maven y también nos permite compilar, testear nuestro código, crear jars y wars para desplegar nuestras aplicaciones y generar Javadocs, entre muchos otros usos; todo esto utilizando plugins, definiendo tareas y adicionando dependencias. Brinda ejercicios tanto en Groovy como en Kotlin.

Contenido necesario para quien desea aprender a configurar builds multi proyecto; también se hace una breve introducción al Testing con JUnit (4 y 5) y nuevamente saqué algo bueno de él: mi Gradle Wrapper estaba sucio (mal configurado), así que fue una buena oportunidad para sanearlo.

Interaction Design FundamentalsAnthony Alampi

Éste es un curso súper corto, quedé con sabor a poco, no pude encontrar otro curso más avanzado del mismo autor que continúe con lo que se aprende con éste contenido. En resumen nos ayuda a los desarrolladores a comprender el concepto de diseño de interacciones, nos enseña un par de principios fundamentales (patrones y anti-patrones), algunos tips de navegación, define las micro-interacciones y en general cómo todos estos conceptos pueden ser utilizados para generar experiencias de usuario significativas. Punto a favor acerca de como crear interfaces de usuario Accesibles.

Visual Studio CodeJohn Papa

Mi nuevo consentido, ese súper-liviano, ultra-rápido y multi-plataforma entorno de programación llamado Visual Studio Code; desde que lo conocí dejé todos los demás. Nos permite programar aplicaciones web y de escritorio; tenemos integración con el control de versiones y prácticamente soporte para todos los lenguajes y librerías que podamos necesitar: si aún no hubiera, entonces podemos programarlo nosotros y compartirlo con la comunidad de felices usuarios 🙂 -y es que no tiene nada que envidiarle a otros entornos con licencia paga-. Bueno, al grano: en este curso se aprende a configurar proyectos, a depurar, refactorizar, realizar busquedas inteligentes dentro del código, multi selección (un espectáculo), intellisense y auto-completar. Viene con unos ejemplos de código en Node.js ideales para el propósito del curso; una de las características más útiles es aprender a desarrollar tus propios Snippets (fragmentos de código) y personalizar la paleta de comandos. Plus: se aprende a integrar nuestro código fuente con herramientas externas a través de tareas, se lo realiza de manera muy didáctica con un ejercicio de transpilación de Typescript utilizando Babel.

Espero que disfruten de este post tanto como yo disfruté redactarlo, sé que se alargó un poco, pero mi intención es que se animen y quizá no solo hagan alguno de los cursos que detallé, sino también busquen más información acerca de esos temas en tantos otros sitios gratuitos o de documentación técnica oficial que existen y si quieren los conversamos. Les confieso que aprendí mucho más haciendo esta compilación.

Recuerden que el conocimiento que no se comparte pierde por completo su valor.

Saludos.

PLURALSIGHT Gratuito durante todo el mes de Abril

Estándar

Sin tarjetas de crédito y sin límite de vistas. La empresa ha ofrecido todos los cursos y videos (7000+) GRATIS por todo el mes de abril.

Gratamente sorprendido el día de hoy con la noticia de que Pluralsight (PS en NASDAQ), la empresa estadounidense de educación en línea que ofrece una gran variedad de cursos de capacitación para Desarrolladores de Software, Creativos y Personal de TI en general ha ofrecido todos los cursos y videos GRATIS durante todo el mes de abril.

Cuentan con más de 7000 cursos liderados por expertos en diversos temas tecnológicos de actualidad, afirman que «La manera en que vivimos y trabajamos ha cambiado mucho en estas últimas semanas, pero estamos juntos en esto.» y aconsejan también «A pesar de que las cosas están raras en este momento, puedes sacar el máximo provecho invirtiendo en ti y en mejorar tus habilidades.» – sencillamente extraordinario.

Pueden ingresar al sitio web de Pluralsight en: https://www.pluralsight.com/offer/2020/free-april-month/

Llenan sus datos, seleccionan «Activar Beneficio» y luego recibirán un correo electrónico indicando que ya se tiene el beneficio activo, tengan paciencia si el correo tarda en llegar, a mi me llegó despues de 2 horas, supongo que es debido a que han recibido una cantidad enorme de peticiones. ¡Espero les sea de utilidad!

Saludos.

Atlassian quitará el soporte a Mercurial de su servicio Bitbucket Cloud y de su API

Estándar

Las características y repositorios serán oficialmente removidas de Bitbucket y su API el 1ro de junio de 2020

Atlassian, la empresa proveedora de muchas soluciones como Bitbucket, JIRA, Confluence, Trello y otras, comunicó hoy que retirará el soporte a Mercurial de sus servicios Bitbucket Cloud y tambien de su API, han decidido enfocarse en Git, por tanto se recomienda verificar los proyectos que tengan en esa plataforma y planificar la migración a Git cuanto antes.

El comunicado indica:

After much consideration, we’ve decided to remove Mercurial support from Bitbucket Cloud and the API. Mercurial features and repositories will be officially removed from Bitbucket and its API on June 1, 2020.
What used to be a very fragmented version control software market has rapidly matured. Mercurial usage on Bitbucket is steadily declining, and the percentage of new Bitbucket users choosing Mercurial has fallen to less than 1%. At the same time, Git has become the standard. According to a Stack Overflow Developer Survey, almost 90% of developers use Git, while Mercurial is the least popular version control system with only about 3% developer adoption.
Given that Git has emerged as the version control system of choice for the industry, we have decided to focus our priorities and roadmap on building the best possible experience for the market and our users.
Read on to learn more about what led to this decision, timeline, and migration resource support.

Mensaje emergente dentro de Bitbucket indicando que se retira el soporte a Mercurial.

Pueden leer el articulo completo en https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket

Saludos.

Instalar las Herramientas de Línea de Comando (Command Line Tools) en macOS Mojave (sin todo el paquete de Xcode)

Estándar

La ventaja de este proceso es que no es necesario instalar todo el paquete de Xcode y lo mejor de todo: no requiere tener una cuenta pagada de desarrollador Apple.

Si estas utilizando macOS Mojave, o tal vez alguna de las siguientes versiones anteriores: High Sierra, Sierra, El Capitan, Yosemite o Mavericks y necesitas las Herramientas de Línea de Comando, conocidas como Command Line Tools –pero no quieres todo el paquete Xcode-, solo necesitas ejecutar el siguiente comando desde una nueva terminal (dentro de Aplicaciones⁩/⁨Utilidades):

Una ventana emergente se abrirá con un mensaje indicando: «The xcode-select command requires the command line developer tools. Would you like to install the tools now?» Debemos hacer click en «Install» y luego aceptar los Términos de Servicio. Esperamos que la descarga e instalación terminen, son aproximadamente unos 150 MB.

Podemos comprobar que se instaló correctamente ejecutando por ejemplo el siguiente comando:

El cual nos deberá responder (en mi caso particular):

 

Este paquete se instala en la ruta /Library/Developer/CommandLineTools/ (tomar nota que es la carpeta /Library de la raíz de macOS, no la correspondiente al usuario ~/Library) y provee a los usuarios muchas herramientas, compiladores y comandos útiles que son comunes en instalaciones unix/linux, aqui les paso la lista de lo que incluye la subcarpeta /usr/bin/:

  • DeRez
  • ctf_insert
  • install_name_tool
  • otool-classic
  • svnserve
  • GetFileInfo
  • dsymutil
  • ld
  • pagestuff
  • svnsync
  • ResMerger
  • dwarfdump
  • lex
  • projectInfo
  • svnversion
  • Rez
  • dwarfdump-classic
  • libtool
  • ranlib
  • swift
  • SetFile
  • dyldinfo
  • lipo
  • rebase
  • swift-autolink-extract
  • SplitForks
  • flex
  • lldb
  • redo_prebinding
  • swift-build
  • ar
  • flex++
  • llvm-cov
  • resolveLinks
  • swift-build-tool
  • as
  • g++
  • llvm-dwarfdump
  • rpcgen
  • swift-demangle
  • asa
  • gatherheaderdoc
  • llvm-nm
  • segedit
  • swift-format
  • bison
  • gcc
  • llvm-objdump
  • size
  • swift-package
  • bitcode_strip
  • gcov
  • llvm-otool
  • size-classic
  • swift-run
  • c++
  • git
  • llvm-profdata
  • stapler
  • swift-stdlib-tool
  • c89
  • git-receive-pack
  • llvm-size
  • strings
  • swift-test
  • c99
  • git-shell
  • lorder
  • strip
  • swiftc
  • cc
  • git-upload-archive
  • m4
  • svn
  • tapi
  • clang
  • git-upload-pack
  • make
  • svnadmin
  • unifdef
  • clang++
  • gm4
  • mig
  • svnbench
  • unifdefall
  • cmpdylib
  • gnumake
  • nm
  • svndumpfilter
  • unwinddump
  • codesign_allocate
  • gperf
  • nm-classic
  • svnfsfs
  • xml2man
  • codesign_allocate-p
  • hdxml2manxml
  • nmedit
  • svnlook
  • yacc
  • cpp
  • headerdoc2html
  • objdump
  • svnmucc
  • ctags
  • indent
  • otool
  • svnrdump

Si ya tienes instalado el Xcode no es necesario ejecutar el comando precedente, ya que las Command Line Tools son incluídas durante la instalación general de Xcode, en otras palabras, esto es para aquellos usuarios avanzados de Mac que son familiares con el entorno unix/linux y con los compiladores y herramientas de desarrollo mencionados con anterioridad, o quizás también para aquellos usuarios que prefieren herramientas más tradicionales. Es bueno notar que es totalmente seguro desinstalar Xcode (eliminando al app desde /Aplicaciones) e instalar manualmente por separado las Command Line Tools.

Si ya tienes una cuenta de desarrollador Apple (no es necesario que sea pagada), las herramientas también se pueden descargar desde el siguiente enlace: More Downloads for Apple Developers ahí simplemente hacen una búsqueda del termino «command line» y escogen el archivo mas reciente.

Saludos.

1000 Desarrolladores recibirán capacitación gratuita en criptomoneda Ethereum gracias a un programa educativo

Estándar

El proceso de selección comienza este 31 de enero y finaliza el 28 de febrero próximo

B9lab (plataforma educativa enfocada tecnología de criptoactivos) junto con el DoD (Departamento de Descentralización, antes llamado ETHBerlin) Han anunciado el inicio del período de selección para un programa gratuito de capacitación y certificación a 1000 estudiantes que aspiren a convertirse en desarrolladores de Ethereum.

El proceso de selección de participantes para el programa se llama Community Blockstars, comienza este 31 de enero y finaliza el 28 de febrero próximo.

Pueden leer el articulo completo en: https://www.criptonoticias.com/educacion/programa-educativo-gratuito-capacitara-desarrolladores-ethereum/

El articulo original publicado en Medium: https://medium.com/ethberlin/building-blocks-dod-and-b9lab-for-blockchain-education-729b41320fc1

El enlace a la Academia de B9lab: https://academy.b9lab.com/

Saludos.

Problemas con los certificados para SSL expedidos por Legacy Symantec PKI

Estándar

Con la actualización 70 de Chrome desplegada en el «Canal Estable», algunos sitios con SSL que aun utilizan certificados expedidos por Legacy Symantec PKI están mostrando mensajes de advertencia, en unas semanas el 100% de los sitios que cumplan esta condición tendrán la advertencia.

Mas información en Google Blog:
Distrust of the Symantec PKI: Immediate action needed by site operators

Información importante para volver a regenerar los certificados:

Reemplazar los Certificados SSL/TLS de Symantec

Desde RapidSSL, nos indico que dominios tenian el problema y nos ofreció la regeneración de los mismos (caso puntual que vimos de un cliente):

Paso adicional, notar lo que está encuadrado en rojo, si hubo compromiso de seguridad en el servidor o llaves.

Luego al reimportar el certificado en el servidor web, el cambio fue transparente.

Saludos.

Curso de Kotlin para Desarrolladores JAVA en Coursera

Estándar

Hoy empieza en Coursera, el curso de Kotlin para Desarrolladores JAVA!

Kotlin es un lenguaje enfocado en la interoperabilidad con JAVA, se puede utilizar prácticamente en todos los sitios donde actualmente se esta utilizando JAVA, ya que es 100% compatible con todos los frameworks existentes y provee buenas herramientas de soporte. Es un lenguaje que puede ser adoptado rápidamente por desarrolladores y puede ser compilado para la Virtual Machine, para JavaScript y código nativo, aunque este curso está solamente centrado en Kotlin/JVM)

En este curso no se abordarán temas básicos de programación, se aprenderá: sintaxis, manejo de nulos, programación funcional, Programación Orientada a Objetos, consideraciones de su Librería Estándar e interoperabilidad con JAVA.

Lo mejor de todo… es gratis y pueden acceder a todo el material del curso sin obtener calificaciones ni el titulo que avala el curso, caso contrario tiene un costo de cuarenta y nueve dólares (49 USD).

Kotlin para Desarrolladores JAVA

Saludos.

Technology Radar Vol.19

Estándar

Ya esta disponible el volumen 19 de la revista Technology Radar, con información y artículos sobre tecnología y las tendencias que dan forma al futuro que nos interesa.

Me interesaron los temas:

Sticky Clouds – O cómo luego de escoger un servicio en la nube notamos que esa «relación» se vuelve pegajosa debido a la personalización de características o al ofrecimiento de ofertas tentadoras de pago adelantado por reserva de instancias, por ejemplo.

Lingering Enterprise Antipatterns – No importa cuán rápido evolucione la tecnología, siempre encontramos la manera de reimplementar antipatrones antiguos.

Technology Radar vol.19

De vuelta!

Estándar

Hola a todos!

Gracias por sus mensajes preguntando por mis tutoriales, el plugin Crayon Syntax Highlighter fue el problema, tuve que reinstalarle los lenguajes que reconoce y resalta, me hizo bregar un poco pero ya estan arriba nuevamente los posts que les interesan.

Saludos.

Respaldar y Restaurar Bases de Datos en PostgreSQL

Estándar

No he podido probar si funciona con la versión 8, yo lo he probado en las versiones 9.x en adelante

Les comparto dos comandos muy utiles para realizar respaldos y posterior restauracion de Bases de Datos en PostgreSQL, para este artículo se supone que tenemos instalado el PostgreSQL 9.6 en la ruta C:\Program Files\PostgreSQL\9.6\ y que se utiliza la ruta C:\respaldos tanto para almacenar como para restaurar los respaldos.

Realizar Respaldo usando pg_dump
Este comando tardara un momento, dependiendo del tamaño actual de la Base de Datos que se esta respaldando, el mismo nos exportara el contenido de la BD llamada midominiodb, accede a la misma utilizando el usuario postgres, por tanto se deben proveer las credenciales al momento de ejecutar el mismo. Al final del proceso, obtenemos el archivo current_backup-midominio.sql en la ruta indicada con anterioridad, el cual contiene los scripts y datos necesarios para una posterior restauracion.

El comando es el siguiente:

Restaurar Base de datos usando psql
Es importante tomar en cuenta que se debe crear una Base de Datos vacía con el mismo nombre midominiodb y asignarla al usuario postgres también al iniciar el proceso las credenciales del usuario asignado serán requeridas. Tomar en cuenta que si la Base de Datos ya existe es muy probable que todo el proceso de restauración FALLE, asi que la recomendación es clara: restaurar sobre una Base de Datos vacía. Los pasos a continuación utilizando pgAdmin versión 4.x:

Primero eliminamos la anterior (no olviden realizar un respaldo utilizando pgdump, por si las dudas), hacemos click derecho en la entrada de la Base de Datos en el servidor que la contiene y seleccionamos Delete/Drop:

Confirmamos

Luego hacemos click derecho sobre la entrada Databases dentro del servidor y seleccionamos Create y luego Database…

Escribimos el nombre en el campo Database, y confirmamos que dentro del campo propietario Owner este configurado nuestro usuario postgres, luego presionamos el boton guardar save

Ahora podemos ejecutar el comando siguiente:

C:\Program Files\PostgreSQL\9.6\bin & psql.exe -U postgres midominiodb < C:\respaldos\current_backup-midominio.sqlEste comando nos restaura la Base de Datos midominiodb a partir del archivo de respaldo current_backup-midominio.sql. Este proceso tarda bastante, especialmente si nuestra base de datos a restaurar tienen información de varios meses de transacciones y operaciones.

Saludos.