Category: Programacion

Pyenv para tener distintas versiones de Python

Python Cuando programas en Python es común que hagas uso de muchas librerías y en algún momento necesites una versión muy específica de Python para tu desarrollo. Muchos de estos problemas se pueden solucionar con Docker, sin embargo, no siempre podemos encontrar exactamente lo que buscamos o resulta complicado construirlo si no tenemos una buena base sobre lo que es contenedores.

En algunas distribuciones de Linux es común que tengas instaladas 2 versiones de Python, una de la rama 2.x que por cierto ya va quedando obsoleta y otra versión de la rama 3.x, para descubrir que versión de Python tenemos ejecutamos:

python --version

o

python3 --version

En mi caso estoy corriendo Centos8 y tengo la versión 3.6.8

Pyenv es un programa que nos permite poder instalar distintas versiones de Python y decidir qué versión específica queremos usar en cualquier momento, asi que el primer paso es instalar pyenv, el proceso es bastante sencillo:

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Con eso se instalará pyenv en tu home directory, ahora tendrás que añadir unas líneas a tu archivo .bashrc que sirven para aumentar una ruta a tu path y activar pyenv cada vez que inicies una nueva sesión.

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

Con estos pasos tendremos pyenv funcionando, puedes verificar la versión instalada ejecutando

pyenv version

Para ver todas las versiones de Python y programas accesorios (anaconda, stackless, miniconda, etc etc) que puedes instalar ejecutas

pyenv install --list | more

Para nuestro ejemplo vamos a instalar una versióm de Python2 y una de Python3, antes de empezar con la instalación hay un paso muy importante que es asegurarse de que tu distribución tiene instalado todo lo necesario para compilar desde fuentes, hablamos de tener gcc, make, etc etc.

Si usas Ubuntu, Debian o derivados ejecuta:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl

Si usas RedHat/Centos/Fedora o derivados ejecuta:

sudo yum groupinstall "Development Tools"
sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite \
sqlite-devel openssl-devel xz xz-devel libffi-devel

Con esto debería ser suficiente para instalar cualquier versión de python, empezaremos con la versión 2.7.9

pyenv install 2.7.9

Una vez que se descargue el código fuente de nuestra versión se compilará en nuestra PC, esto puede tardar un poco dependiendo de la potencia que tengas. Cuando termine puedes verificar que se instalo con el comando

pyenv versions

Eso te mostrará todas las versiones de python instaladas, otra forma de verificar es observando el contenido de nuestro directorio versions en nuestro home directory

ls  ~/.pyenv/versions/

Eso significa que para desinstalar alguna versión bastaría con remover el directorio que le corresponde con un rm, pero prefiero usar pyenv para ese propósito

pyenv uninstall 2.7.9

Ahora voy a instalar la última versión de Python disponible, al momento de escribir este post era la versión 3.8.3

pyenv install 3.8.3

Si todo sale bien debes tener como mínimo 2 versiones de Python, en mi caso

$ pyenv versions
* system
2.7.9
3.8.3

El asterisco señala la versión activa de python, en mi caso es la 3.6.8 que viene por defecto en el sistema, para cambiar la versión activa sólo debes ejecutar:

$pyenv global 3.8.3
system
2.7.9
* 3.8.3

Si quieres probar el shell interactivo de alguna versión de python que tengas instalada debes ejecutar:

pyenv shell 2.7.9

Virtual Enviroments
Una vez resuelto el tema de manejar las distintas versiones de Python ahora viene otra parte importante que es manejar los virtual enviroments, hay varias formas de hacerlas, yo recomiendo instalar un plugin de pyenv que sirve especificamente para este propósito: pyenv-virtualenv

git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

De forma opcional pero recomendada, ejecutamos el siguiente comando que lo que hace es agregar una línea a tu archivo .bash_profile que hará que tengas el plugin disponible en todo momento.

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

Para crear un entorno virtual que se llame “proyecto1” con la versión 3.8.3 de python ejecutamos

pyenv virtualenv 3.8.3 proyecto1

Si no especificas la versión de Python se creará el entorno con la versión por defecto

pyenv virtualenv proyecto2

Para ver la lista de entornos virtuales ejecutas:

pyenv virtualenvs

Para activar un entorno virtual

pyenv activate proyecto1

Para desactivar un entorno virtual

pyenv deactivate

Para borrar un entorno virtual

pyenv virtualenv-delete proyecto2

¿Bastante fácil verdad?

He cubierto sólo lo básico para empezar, puedes hacer muchas cosas más, espero que te haya sido de utilidad! Happy hacking 🙂

tput para mejorar tus scripts en bash

bash
Cuando escribes scripts en bash acostumbras a hacerlo todo simple, sin embargo hay ocasiones en las cuales quieres tener un mayor control de la salida del programa. Una de las herramientas que sirve para este propósito es tput que viene por defecto instalado con ncurses, en muchas distribuciones ncurses viene instalado por defecto, asi que no debería ser problema.

La idea de usar tput es poder controlar de una forma sencilla distintos aspectos de tu terminal y hacer algunas cosas divertidas como dar formato y poner texto en negritas o de colores por citar un ejemplo, a continuación daré una lista de usos para tput que para mí resultaron especialmente útiles.

Limpiar pantalla
# tput clear
ejemplo:

echo "Este mensaje no lo veras"; tput clear; echo "Este mensaje si lo veras"

Para saber el número total de líneas que tiene tu consola actual
# tput lines

Para sabe el número total de columnas
# tput cols

Mover el cursor a una posición específica
# tput cup 15 20

Para poner un mensaje en negrita
# tput bold
ejemplo:

tput bold; echo "mensaje en negrita"

Para saber cuántos colores soporta tu consola usamos
# tput colors

Usar colores para el texto y el fondo, este me gusta bastante porque te evita tener que usar secuencias de escape ANSI.
Para poner texto de color rojo usamos
# tput setaf 1

Para poner background de color verde usamos
# tput setab 2

Les dejo 2 scripts para que vean la lista de colores básicos 🙂

for i in `seq 1 7`; do tput setaf $i; echo "Este es el color $i"; done
for i in `seq 1 7`; do tput setab $i; echo "Este es el color $i"; done

Si quieres usar más colores entonces vas a tener que especificarlo ejecutando

export TERM=xterm-256color ; reset

Si vuelves a ejecutar tput verás que ahora ya tienes soporte para 256 colores
# tput colors

Hint: cambia el script que puse arriba y en vez de 7 ponle 255 para que tengas toda la lista de colores

Si quieren ocultar el cursor pueden ejecutar
# tput civis

Para volver el cursor a su estado normal
# tput cnorm

AHora veremos unas funciones de formato, si por algún motivo quieren quitar el formato
# tput sgr0

Un reseteo general de toda la consola se hace con reset
# tput reset

Para subrayar texto
# tput smul

Para quitar subrayado
# tput rmul
ejemplo

tput smul; echo "texto subrayado"; tput rmul

Para hacer que el texto tintilee (blink)
# tput blink
ejemplo

tput blink; echo "blink blink blink"

No se olviden de # tput sgr0 para quitar el blink

Finalmente les dejo el enlace con algunos scripts de ejemplo hechos en bash

https://github.com/cvillegas/bash

Espero que les sea de utilidad 🙂

Aprendiendo online: Mi experiencia con PLATZI

En mi anterior post mencioné mi experiencia aprendiendo online con Udemy, ahora les quiero contar mi experiencia con otra plataforma en la que he invertido una buena cantidad de horas, me refiero a Platzi.

Conozco a Platzi desde sus inicios como Mejorando.la, es un emprendimiento hecho por 2 jóvenes latinoamericanos: Christian Van Der Henst y Freddy Vega, a ambos los conozco hace años porque este no es su primer proyecto, a Christian lo conozco desde que creó Maestros del Web porque participé activamente en Foros del Web especialmente en la sección de Linux, pero esa es otra historia, vamos a lo importante, analizar Platzi!!


Platzi es una plataforma de educación online, hasta donde sé es la más grande de habla hispana o por lo menos la más popular, tiene más de 700 mil estudiantes y al ser de habla hispana sin duda el grueso de los estudiantes son latinoamericanos y españoles.

Hace un año decidí pagar por la subscripción de 1 año, como dije antes, sabía de la existencia de Platzi desde sus inicios y sé que tuvieron algunos problemas al principio, pero poco a poco fueron mejorando y miraba como la oferta de cursos crecía y se diversificaba, asi que decidí probarla.

Costos
Platzi funciona con un modelo basado en subscripción, a diferencia de Udemy que por ejemplo te cobra por cada curso, aquí te suscribes y tienes acceso a todos los cursos, te ofrecen la opción de una subscripción anual en la que haces un solo pago, o tienes la opción de pagar mensualmente. Hay ciertas diferencias entre un modelo y otro.

El costo anual es de casi 300 dólares ( 1000 Soles aproximadamente)
El pago mensual es de 39 dólares (131 soles aproximadamente)
Tienen una opción de comprar un solo curso por 99 dólares pero no lo recomiendo.

Ahora mismo tienen una promoción por Navidad que podrías aprovechar para pagar menos 😉

A simple vista puede parecer caro, pero si lo comparas con lo que te costaría pagar por un curso presencial en tu país seguramente te darás cuenta que en realidad es una opción bastante económica y que permite estudiar una cantidad de cursos que no podrías pagar si lo tuvieras que hacer presencialmente. Obviamente hay cursos gratis en internet, pero tener una plataforma especializada tiene sus ventajas.

Platzi te da la opción de pagar en tu moneda local y tiene muchas opciones de pago que hacen que el proceso de subscripción sea sencillo.

Entorno de Aprendizaje
La interfaz de usuario es fantástica, visualmente atractiva y permite llevar con facilidad cualquier curso

En la imagen pueden ver el video embebido con los controles básicos, a la derecha tienen una barra lateral que es de mucha utilidad porque allí es donde la comunidad puede hacer sus aportes, preguntas, colocar marcadores y encontrar todo el material y enlaces sugeridos por el instructor. Hay unos cursos más populares que otros y puedes encontrar una gran cantidad de aportes bastante valiosos, gente que ha resuelto problemas de modo distinto, consejos y experiencias.

La parte de las preguntas también es sumamente útil porque recuerda que las clases no son en vivo, asi si te quedaste con alguna duda o necesitas ayuda lo puedes hacer en esa sección, lógicamente los cursos más populares es donde se encuentran las respuestas más rápidas porque el profesor no contesta todas las preguntas, la comunidad también lo hace. Si haces una pregunta te pueden responder en poco tiempo o si el curso es impopular lamentablemente tendrás que esperar mucho más.

En la parte izquierda hay una columna delgada de color azul que despliega todas los capítulos del curso para que te resulte fácil saltar de uno a otro, bastante útil la verdad.

Ruta de aprendizaje
Una característica fantástica es la opción de seleccionar una ruta de aprendizaje, de esta forma puedes enfocarte en un tema en particular y no marearte estudiando cursos no relacionados.

Otra característica importante es que cuando terminas un curso tienes la opción de dar un examen y si lo apruebas te ofrecen un certificado digital que te puede servir como prueba del conocimiento adquirido.

Variedad y cantidad de cursos
Al momento de escribir este review Platzi ofrece más de 400 cursos, parecen pocos si lo comparas con Udemy pero deben tener en cuenta que en Udemy se ofrecen cursos de cualquier tema en cambio Platzi esta concentrado en Tecnología.

Los cursos estan divididos en varios rubros como:
– Desarrollo e Ingeniería
– Crecimiento Profesional
– Negocios y emprendimiento
– Producción Audiovisual
– Diseño y UX
– Marketing

Sin duda la mayor cantidad de cursos estan en Desarrollo e Ingeniería pero me parece genial que ofrezcan cursos de otras áreas porque eso te permite crecer profesionalmente y aprender cosas que quizás desconocías totalmente.

Cada mes van añadiendo nuevos cursos, actualizando cursos que van quedando obsoletos, en general diría que la variedad es buena y atiende las necesidades de la gente de acuerdo a la demanda actual. En mi caso particular yo tengo un perfil de Sysadmin orientado a DevOps y hay muchos cursos que alguien que se quiera dedicar a ser SysAdmin o implementar DevOps va a necesitar y en Platzi no los va a encontrar.

Idioma
Todos los cursos de Platzi estan en español, hay profesores de distintas nacionalidades y a pesar de tener distintos acentos se les puede entender sin ningún problema, quizás solo tengas problemas cuando usan jerga, este es un detalle que me imagino iran puliendo con el tiempo, pero les diría que el 99% del tiempo se entiende todo lo que dicen los profesores.

Platzi también ofrece cursos en portugués e inglés, pero entiendo que no hay la misma cantidad de cursos que en español.

Pros y Contras
Pros:
– Plataforma sólida y con una buena interfaz para aprender online.
– Tienen app para el teléfono celular, puede estudiar allí e incluso descargar los cursos.
– Tienen un formato establecido para todos los cursos, hay uniformidad en ese aspecto y eso hace fácil acostumbrarse a estudiar en Platzi.
– Muy buena atención al cliente por correo, chat e incluso redes sociales.
– La comunidad es un plus importante, los aportes y la interacción entre estudiantes es muy valiosa.
– Realizan conferencias online y presenciales para los estudiantes, también comparten contenido relacionado en sus redes sociales.

Contras:
– Algunos cursos resultan demasiado básicos, lo cual no estaría mal si ofrecieran el mismo curso con un nivel más avanzado.
– Hay profesores que son unos genios en lo que hacen pero su método de transmitir conocimiento no es muy adecuado, avanzan demasiado rápido en algunos temas o asumen muchas cosas.
– Tienen que mejorar el timing cuando presentan cosas en pantalla como la consola, si el profesor escribe un comando largo o hay algo en la pantalla que necesita ser leído deberían mantenerlo por un tiempo prudencial y no mostrar la cara del instructor a los 2 segundos en vez de la pantalla que uno desea leer. Tuve que usar pausa en muchos cursos debido a esto.

¿Platzi vale la pena?
Sin duda, si lo puedes pagar y tienes el tiempo para estudiar te animo a inscribirte, ya dependerá de cada persona, personalmente inicié casi 50 cursos pero solo completé 19 cursos en un año, muchos cursos sólo tome unas cuantas lecciones porque quería saber de que se trataba. Si bien estudiar online es genial porque no estas atado a un horario, no tienes que transportarte, ni todo lo que conlleva estudiar de forma presencial te aseguro que no es sencillo encontrar el tiempo para estudiar online, se requiere disciplina y créeme que un año se pasa volando.

No es un reemplazo para la Universidad ni donde vas a aprender todo, pero es una buena manera de obtener conocimiento especialmente si no sabes nada o muy poco, si eres una persona experimentada o con conocimientos previos quizás no lo vayas a aprovechar tanto porque los cursos te van a resultar muy básicos. Para mi ha sido una experiencia positiva porque he aprendido mucho en temas en los cuales sabía muy poco o nada.

Si te animas a inscribirte a Platzi te dejo este enlace que te permitirá obtener 1 mes gratis:
https://platzi.com/r/cesarvillegas/

¿Cómo arreglar el problema de las tildes y la eñe en WordPress?

Luego de haber retomado el blog me encontré con un problema: Había un monton de caracteres raros en todo lugar donde antes tenía una tilde o una “eñe”, luego de investigar un poco encontré que le habían cambiado el collation a la base de datos de mi blog.

Así el collation que tenía mi blog decía “latin1_swedish_ci” y yo no entendía el motivo, recurriendo a la documentación pude ver el motivo
https://dev.mysql.com/doc/refman/5.6/en/charset-collation-effect.html

Básicamente mi contenido fué creado con un set de caracteres y al tener la base de datos con un collation distinto pues se hizo todo el embrollo, para solucionarlo tenemos que modificar y poner el set correcto, mi recomendación es utilizar UTF-8

Así que vamos paso a paso con la solución que dicho sea de paso también sirve para MariaDB.

Lo primero es que saques un backup completo de tu base de datos antes de empezar a trabajar, mejor prevenir que lamentar 🙂

Abres una consola de MySQL en tu línea de comandos, PHPMyAdmin o el gestor de tu preferencia y ejecutas este query SQL

ALTER DATABASE nombre_de_la_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Eso te asegura que cuando se cree una nueva tabla se haga con la codificación correcta, ahora nos toca trabajar en las tablas

ALTER TABLE nombre_de_la_tabla CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Ahora nos toca arreglar las tablas de forma individual, el truco es hacer un dump y luego restaurarlas con el set correcto.

mysqldump -p –default-character-set=utf8  nombre_de_la_db nombre_de_la_tabla > tabla_corregida.sql

Y luego la restauramos con

mysql -p base_de_datos < tabla_corregida.sql

Y eso es todo!

Solución alternativa
Si te da miedo manipular las tablas entonces puedes intentar reemplazar los caracteres malos usando UPDATE

Por ejemplo si quieres arreglar todas las eñes de tus posts tendrías que ejecutar algo como esto:

UPDATE wp_posts SET post_title = REPLACE(post_title, "ñ", "ñ");
UPDATE wp_posts SET post_content = REPLACE(post_content, "ñ", "ñ");

En este ejemplo estoy cambiando tanto el título como el contenido del post, hay más campos y puede ser un poco más tedioso pero si te da más confianza hacerlo así pues adelante.

Linus Torvalds habla sobre software de control de versiones

El otro dí­a en el Barcamp Lima estuvimos hablando un poco sobre Software de Control de Versiones y lo importante que esto es para cualquier desarrollador especialmente si trabaja en equipo.

Buscando información sobre Git encontré esta charla que dió Linus Torvalds en Google y que habla sobre el software de control de versiones, obviamente se enfoca en los beneficios de Git pero no deja de mencionar los defectos de CVS y Subversión y de lo feos que le parecieron desde el principio y que fué eso lo que lo llevó a usar BitKeeper, una excelente charla, no se la pierdan 😀

Instalar psycopg2 en FreeBSD

Me ví­ en la situación de tener que trabajar con Postgres sobre FreeBSD y necesitaba un script para jalar datos de unas bases de datos en formato DBF (si, DBF pueden creerlo?) fue asi que encontre un script llamado dbf2pgsql que fue hecho por Hiroo Imaki.

Luego de descargarlo, lo modifiqué un poco para que se adaptara a mis necesidades y cuando lo ejecuté encontré un problema, me hacia falta la librerí­a psycopg2 que es un magní­fica librerí­a que permite la interacción entre Python y Postgres, el problema es que por lo visto da muchos problemas para poder ser instalado.

El primer requisito para poder instalar psycopg2 es tener instalado Setuptools luego de instalarlo trate de instalar pysopg2

python setup.py build

No lo pude hacer porque tení­a el siguiente error
error: static declaration of ‘round’ follows non-static declaration

Luego de mucho buscar por una solución me encontré con este post de Reed Obrien
http://reedobrien.blogspot.com/2008/02/error-building-psycopg-custom-egg.html

Por lo visto es un error para poder hacer el build en FreeBSD, solucion pasa por editar el archivo config.h y comentar las siguientes lí­neas:

#if defined(__FreeBSD__) || (defined(_WIN32) && !defined(__GNUC__)) || defined(__sun__) || defined(sun)
/* what's this, we have no round function either? */
/*
static double round(double num)
{
  return (num >= 0) ? floor(num + 0.5) : ceil(num - 0.5);
}
*/
#endif

Luego de esto cruce los dedos:

python setup.py build

Bingo! funcionó sin problemas, y ahora el paso final

python setup.py install

Y ahora ya pude correr con éxito el script dbf2pgsql, tardé mucho en dar con la respuesta, asi que espero que esto pueda ser útil.

Que es UTF-8?

La respuesta corta es:

UTF-8 es un formato para codificar caracteres Unicode utilizando secuencias de bytes.

Y qué es Unicode?
Probablemente muchos de ustedes hayan oí­do hablar de los sistemas de codifiación, los que hablamos español estamos muy acostumbrado al famoso ASCII si, ese que nos ayuda a sacar las tildes 😛

Pues asi como el ASCII hay muchí­simos sistemas de codificación que lo usan en otros idiomas e incluso un mismo idioma puede tener varios sistemas de codificación que varí­a por la plataforma en la que se ejecuta. Y como hacemos para arreglar todo este embrollo? como hago para poder ver páginas de anime japonés con sus caracteres reales y no solamente unos cuadrados? como hacen los hebreos para poder leer correctamente algo en francés o ruso? La respuesta a todo es Unicode!

Unicode proporciona un número único para cada carácter, sin importar la plataforma, sin importar el programa, sin importar el idioma.


Creative Commons License photo credit: sillygwailo
Dicho todo esto, volvamos con UTF-8 !

UTF-8 se lo debemos al maestro Ken_Thompson, si uno de los genios detrás de Unix y el creador de Plan 9

UTF-8 usa grupos de bytes para representar el estándar de Unicode para los alfabetos de muchos de los lenguajes del mundo. Es especialmente útil para la transmisión sobre sistemas de correo de 8 bits.

Usa de 1 a 4 bytes por carácter, dependiendo del sí­mbolo de Unicode. Por ejemplo, se necesita un solo byte en UTF-8 para codificar los 128 caracteres US-ASCII en el rango U+0000 a U+007F de Unicode.

Para todos aquellos que tenemos necesidad de programar usar UTF-8 nos ha servido para aliviar muchí­simos dolores de cabeza, especialmente para los que hablamos español y tenemos necesidad de colocar tildes y algunos caracteres especiales, y muchas veces tení­amos que hacerlo con software que no contemplaban esas posibilidades. Ahora casi todo el software que usamos y que tiene que ver con manipulación de documentos soportan este formato.

Para los que son webmasters UTF-8 es especialmente importante porque les ahorrará muchos problemas con los navegadores, webservers y las aplicaciones que escriban.

Si quieres verificar que tú sistema y navegador soportan UTF-8 (lo raro serí­a que no lo soporte) puedes abrir este archivo de texto :
http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

Si ves todos los caracteres no tienes problemas, pero si ves puros cuadrados o caracteres sin ningún tipo de secuencia lógica entonces estas usando un sistema de codificación alterno como ISO-8859-1 busca en tu navegador y lo cambias, aunque mi blog esta codificado para UTF-8 y le avisa al browser que deberí­a de utilizar UTF-8 para interpretar todo.