Añadiendo Plugin WordPress de Polly

Como algunos de ustedes ya saben soy un seguidor de AWS e intento seguir el lanzamiento de nuevos servicios o las mejoras que hacen de sus servicios. De hecho este blog está hospedado por lightsail, el dominio esta gestionado por route53 y no descarto en el futuro añadir su CDN (cloudfront), es decir, no diré que soy un evangelizador (o quizás uno de los buenos) pero si un admirador de toda esta infraestructura.

En la entrada de hoy lo que quiero compartir con ustedes es un nuevo plugin de wordpress de un servicio de AWS llamado Polly, el anuncio ocurrió hace solo par de semanas y aquí les dejo el enlace. Polly para quien no lo sabe es un servicio que convierte texto en habla, y el habla lo realiza en distintos idiomas. La primera vez que supe de este servicio fue al estudiar para la certificación AWS Solution Arquitect ya que el curso de acloud.guru contaba con un episodio para estudiar haciendo uso de Alexa y Polly creando un conjunto de preguntas y respuestas.

No quiero alargarme mucho pero quiero compartirles el porqué me interesó hacer este post y el añadir el plugin a este blog. Al inicio de mi carrera profesional por allá por 2005 tuve la oportunidad de trabajar en un plan de capacitación de IBM donde la audiencia (el alumnado) era diversa, no solo en cuanto a conocimientos en informática, sino también en cuanto a instrucción, pero más importante aun es que este proyecto incluía personas de toda indole incluso con dispacidades y perdonen si sueno burdo, tonto o lo que sea pero quiero expresarles con toda sinceridad que esa experiencia para mí fue importante ya que conocí personas con discapacidades visuales tremendas, pero eso no fue impedimento para que aprendieran a programar en C, C++, Java, que aprendieran SQL, UML, entre otras tantas tecnologías y para mi fue una cachetada de realidad porque conocí gente con mucho potencial y con una dificultad añadida en su vida diaria pero que no les impidió alcanzar sus objetivos. Este plugin desde mi humilde punto de vista acerca un poco más la difusión de opiniones, tecnologías, información a personas que a veces lo tienen mas complicado, pero no quiero limitarme a eso ya que supongo que existen otras tecnologías que acercan la Web a usuarios con discapacidades, sino a que me imagino un futuro cercano donde podemos ir conduciendo el coche camino al trabajo y decir “Siri léeme mis feeds” (o sea, todas los blogs o noticias que sigo), o ni siquiera tenemos que estar al volante a lo mejor solo caminando haciendo ejercicio y decir “Alexa léeme el post XYZ” y esto por sencillo que parezca me emociona.

Con respecto al plugin de Polly para wordpress  en pocas palabras lo que hace es que una vez instalado (y configurado) al crear una entrada nueva al blog, este crea una nueva entrada en el servicio de AWS Polly y automáticamente añade al post un componente Web para la reproducción del contenido como un audio, audio que es todo el texto del post.

La instalación es muy sencilla solo basta con ir a Plugins->Añadir nuevo y allí escribir Polly y aparecerá el plugin

Amazon Polly for WordPress

Amazon Polly for WordPress

Es requisito indispensable para activarlo contar con php 5.6 como podrán ver el la página del plugin. La configuración es muy sencilla si estamos utilizando instancias EC2 solo basta con asignar un rol a la instancia con los permisos necesarios para escribir y leer de AWS Polly y en caso contrario pues una opción sería la creación de un usuario IAM al cual le otorguemos permisos necesarios para escribir y leer de AWS Polly (únicamente) utilizaríamos entonces para la configuración el access key y secret key de dicho usuario. Hecho esto ya solo queda configurar el idioma y la voz y ya estaríamos listos para utilizarlo.

Polly for wordpress setup

Polly for wordpress setup

Importante sobre el costo, los primeros 12 meses a partir de la primera solicitud de habla, entran dentro de la capa gratuita de 5 millones de caracteres al mes, ya luego pasa a 4$ por 1 millón de caracteres de solicitud. Aquí les dejo el enlace con mas detalle sobre la facturación -> https://aws.amazon.com/es/polly/pricing/

Por último invitarles a probar todos estos nuevos productos y servicios de AWS y de antemano pedir disculpas si no me he dirigido correctamente y si he dicho o expresado algo de la manera incorrecta, por favor no dudar en corregirme que tan pronto como pueda editaría esta entrada.

Migrar Blog WordPress a AWS Lightsail Pt. I

Como algunos de ustedes ya saben he migrado este blog desde una plataforma tradicional a la nube de Amazon, específicamente a un servicio llamado Lightsail y es lo que vengo a contarles.

¿Qué es Lightsail?

Es un servicio de AWS que nos permite crear un VPS (Virtual Private Server) con solo unos pocos clics, haciendo un poco más fácil la gestión y hospedaje de un sitio Web y a bajo coste ya que a partir de 5$/mes podemos tener hospedado un sitio.

Lightsail es un servicio que hace más amigable la administración de un sitio pero aún permitiéndonos acceder a la instancia via ssh. Con Lightsail podemos crear una instancia no solo para hospedar un sitio con WordPress, sino también con Magento, Joomla, Drupal o una instancia con un stack LAMP, MEAN, Node.js y otros más. Solo basta clicar el botón “crear instancia” y a continuación:

  • Seleccionar la región y zona donde estará ubicada la instancia.
Ubicación de la instancia

Ubicación de la instancia

  • Seleccionar la plataforma (Linux/Unix o Windows).
  • Seleccionar únicamente el sistema sistema operativo o el sistema operativo junto a las aplicaciones a instalar.
Seleccionar un plan

Seleccionar un plan

  • Seleccionar el plan de la instancia: 5$, 10$, 20$, 40$ u 80$.
Seleccionar el plan de almacenamiento de la instancia

Seleccionar el plan de almacenamiento de la instancia

  • Darle un nombre a la instancia.
Crear instancia

Crear instancia

  • Pulsar el botón crear.

Antes de seguir debo hacer mención a par de articulos que utilicé como referencia mientras llevaba a cabo la migración:

https://www.elpuas.com/como-instalar-wordpress-en-amazon-lightsail/

http://www.adrianmilne.com/migrating-wordpress-blog-amazon-aws-lightsail/

Una vez creada la instancia esta tendrá todo el entorno de WordPress montado incluso con su usuario administrador y podremos visitar el site sencillamente viendo el detalle de la instancia recién creada específicamente su IP pública.

Luego así como lo indica el blog de Adrian Milne me descargué la clave privada para acceder desde mi ordenador por ssh (no fuera tan importante para la administración del sitio sino fuese porque via ssh es que podremos obtener la contraseña de administración de WordPress). Luego utilicé el plugin de WordPress UpdraftPlus y lo instalé en el WordPress recién creado y en el que deseaba migrar y realicé un primer backup y ese mismo lo utilicé para llevar a cabo la restauración en la instancia recién creada.

Una vez comprobada que la restauración se había llevado a cabo, ya me faltaba solo un paso, probar llegando desde una URL y no usando la IP pública, para esto utilicé un dominio que me había comprado hacía cerca de un año mientras me preparaba para la certificación de solution architect de amazon estudiando el servicio Route 53.

Lightsail dentro de sus funciones también incluye alguna de Route 53 como es la gestión de DNS, lo que en Route 53 sería la gestión de zonas hospedadas, en Lightsail sería crear zona DNS, entonces continuando con la migración los siguientes pasos fueron:

  • En la página de inicio de Lightsail, ir a redes y luego clicar el botón “Crear una IP estática”. Aquí se asociará la instancia a una IP estática pública.
  • En el mismo apartado de redes, clicar el botón “Crear zona DNS”. Allí indicaremos nuestro dominio (sin importar que este no haya sido registrado en Route 53) y pulsaremos el botón “Crear zona DNS” como aparece en la imagen.
crear zona DNS

crear zona DNS

  • Añadimos los registros de DNS como aparece en la imagen pero usando vuestro dominio y para cada subdominio en el campo “IP DE DESTINO” seleccionamos nuestra instancia (que de antemano ya la asociamos a una dirección IP estática).
crear zona DNS

crear zona DNS

  • Finalmente deberemos esperar unos pocos minutos y ya podremos visitar nuestro sitio usando el dominio.

Esto es todo chicos, en la próxima entrega les indicaré como migrar un dominio registrado con otro registrador, que fue un paso adicional que realicé ya que mi dominio josedeveloper.com lo había registrado con godaddy.com

Pronósticos para el 2018

Primer post del año 2018 y es un deber para mí empezarlo deseándoles a todos un 2018 de mucho provecho, salud y éxitos tanto en lo personal como en lo profesional. Dicho esto voy a dar paso a mis pronósticos que más que predicciones son intuiciones personales que sencillamente las haré publicas:

  1. Criptomonedas, es más que obvio que el auge que han tenido las criptomonedas encabezadas por la ya muy conocida BitCoin (BTC), pero esta no es la única, hay otras cuyos proyectos lucen interesantes, sin dejar de lado la popular tecnología que da soporte a la descentralización de estas, el blockchain o cadena de bloques que seguramente en los próximos años de el pelotazo. Siguiendo con las criptomonedas no esta de más decir que son un montón y cada vez sale un proyecto nuevo, tanto es así que el gobierno de Venezuela está preparando la emisión de una moneda llamada petro sustentada en sus reservas internacionales (¿bono de deuda enmascarado?), pero no es de esta moneda que les quiero hablar sino de otras sobre las que sugiero investigar y seguir de cerca: LiteCoin (LTC), IOTA, Ethereum (ETH) y SmartCash, no solo con fines económicos y utilizarlas para la inversión ya que todas han tenido una revalorización espectacular sino también como tecnologías y la hoja de ruta de cada una de estas. Ahora mismo la transacción de LiteCoin es mucho más rápida que la de un BitCoin (BTC), así como también lo es SmartCash que pronto comenzará a trabajar con sus SmartNodes lo cual implica ir un paso más allá en la velocidad de las transacciones que junto a su InstantPay la hará mucho mas atractiva para utilizarla en el comercio electrónico (sin dejar de mencionar su compromiso en proyectos dentro de la comunidad el cual alcanza el 70% de su presupuesto). No debemos olvidar a Ethereum que con sus smartContracts de igual manera abre un mundo nuevo de posibilidades y es una plataforma interesante para conocer la cadena de bloques y por última IOTA con su nuevo modelo de blockchain que desea ser el nuevo “esqueleto” del IoT (Internet of Things) donde entre sus objetivos están las transacciones a coste 0. Claro se habla mucho de las criptomonedas sobre si es una burbuja o el mal uso que le dan algunas personas, pero yo creo que estas han llegado para quedarse y aunque no soy un experto en la materia, creo que es necesario que estas empiecen a ser utilizadas como medios de pago común para que sean tomadas más en serio, pero también porque creo que hay gente que las compra pensando que otro le seguirá y por ende comprará mas caro, es decir, un fin que pareciese algo especulativo y yo soy de los que piensa que está muy bien guardar e invertir dinero pero tarde o temprano darle a este un fin.
  2. La nube, Desde hace 1 año me convertí en un enamorado de la nube, la flexibilidad y rapidez que nos aporta para el desarrollo de nuevos proyectos me parece una maravilla, prueba de esto es que hasta he migrado mi blog desde un hospedaje tradicional a la nube de Amazon. Existen varios proveedores como son AWS, Azure, GCP por solo mencionar algunos, pero lo que a mi parecer luce como una sana competencia está derivando en un muy interesante abanico de servicios y posibilidades para el usuario, para los emprendedores y para las PyMEs y creo que lo seguirán siendo este 2018 sobre todo con las tendencias serverless, microservicios (ojo a kubernetes) y servicios de inteligencia artificial.
  3. Big Data, pienso que seguirá siendo uno de los términos de moda este año, sobre todo porque el aprendizaje automático y los modelos predictivos, se sustentan en este, además creo que ha llegado para quedarse, porque cada día es mayor la cantidad de información que guardamos y pareciera que creciese de forma exponencial con los años, además la sinergia que crea al combinarse con la nube a mi modo de ver es un caballo ganador y en el futuro cuando ya entre en juego el analizar la información de los blockchains entonces si que será un trio que nos dará de que hablar por un buen tiempo.
  4. Por último creo que los lenguajes funcionales aún no han dicho su última palabra, entre estos creo que todavía veremos cosas interesantes. Actualmente hay lenguajes de uso general que han venido pegando fuerte como lo son Go, Python, Scala, pero creo que lenguajes como Haskell, Erlang, Clojure y Rust tendrán mas cabida y podremos ver cosas verdaderamente interesantes sobre todo en cuanto a concurrencia.

Dentro de 1 año revisaré este post y analizaré cuan acertado o errado estuve pero lo que realmente me llenará es haber podido dedicar este año al estudio de estas tecnologías.

¿Tienes algún pronostico tecnológico para este año? lo compartirías con nosotros

Sabias que Java posee una clase Void

Hacía mas de 2 años que quería hacer este post, porque me parece algo bastante curioso. De hecho fue en el 2012 que me enteré de la existencia de la clase java.lang.Void pero lo verdaderamente interesante es que esta clase existe desde la versión 1.1 del jdk.

De acuerdo a la documentación de la API “La clase Void es un comodín para almacenar una referencia a objetos de clases representando la palabra clave void.”

A continuación un ejemplo que muestran el uso de la clase Void. La primera parte es con Generics (que de hecho fue así como me enteré de su existencia), lo que me resulta curioso es que quizás ahora este sea su uso mas extendido aun cuando Generics apareció en la versión 5 de Java. La segunda parte es con reflection el cual creo que fue el primer caso de uso de esta clase Void.

Tablas en memoria en MySQL

Algunas semanas atrás en el trabajo nos topamos con un problema, realizábamos una consulta que consistía en hacer un join entre una tabla muy grande contra un par de tablas pequeñas que contenían únicamente descripciones. Como ustedes ha de imaginarse teníamos nuestra base de datos normalizada y para exportar los datos con el conjunto de descripciones era necesario realizar este cruce.

Para que la consulta fuese bien (que no arrojase un timeout en el mejor de los casos) habíamos agregado índices a las tablas secundarias (aquellas que contenían las descripciones) y la consulta de lograr ejecutarse llegó a tardar unos 25 segundos. Estas tablas eran de tipo InnoDB y los índices eran de tipo B-Tree (es el único tipo de índice para las tablas de tipo InnoDB). La consulta llegaba a tardar en el mejor de los casos (que no devolviese un timeout) 25 segundos. Es por esta razón que buscando una alternativa abordamos las tablas en memoria.

Las tablas en memoria son almacenadas en la memoria HEAP razón por la cual son tablas temporales ya que una vez se haya reiniciado o apagado la máquina estas perderán los datos, es decir se mantiene la estructura de la tabla mas no su contenido. Las tablas en memoria en MySQL pueden tener 2 tipos de índices B-Tree o Hash.

¿Cuando utilizar cada tipo de índice?

El índice B-Tree puede utilizarse con operadores del tipo =, >, >=, <, <= o BETWEEN, de igual manera puede ser usado con el operador LIKE, mientras que el índice Hash es usado únicamente para comparaciones de igualdad como =, >= o <=. Así que de realizar comparaciones de igualdad es recomendable utilizar el índice Hash ya que es muy rápido mientras que cuando se realicen comparaciones del tipo >, <, LIKE, BETWEEN u optimizar operaciones de ORDER BY la opción es utilizar B-Tree.

En nuestro caso únicamente realizábamos operaciones de igualdad ya que comparábamos en base a un código así que utilizamos índices de tipo Hash, obteniendo excelentes resultados, tanto es así que nunca llegamos a obtener un timeout y el tiempo de respuesta de nuestras consultas se redujeron a 5 segundos.

¿Cómo crear una tabla en memoria?

La creación de una tabla en memoria es muy sencilla, es igual a la creación de cualquier otra tabla del tipo InnoDB, lo único es sencillamente cambiar el tipo de “engine” e indicar “MEMORY”, por ejemplo:

Por último ¿Como hacer para que se carguen los datos de la tabla en memoria al arrancar?

Por muy tonto que parezca para nosotros esto era importante ya que nos asegurábamos de que de reiniciarse el ordenador (era windows :-s ) estando o no nosotros, las tablas en memoria estarían creadas y cualquier consulta que se efectuase no daría error. Para que la tabla en memoria se llene de datos al arrancar el servidor MySQL es bastante sencillo, lo único que debemos hacer es editar el fichero my.ini o my.cnf y debajo de donde dice [mysqld] agregar la siguiente linea

Donde script.sql tendrá las sentencias sql de inserción por ejemplo

Espero que esto les pueda servir para optimizar el consultas en base de datos o sencillamente resolver cualquier inconveniente.

¿Has trabajado antes con tablas en memoria? Compartirías con nosotros tu experiencia.