martes, 18 de julio de 2017

VirtualEnvs en Python


Una de las mejores cosas que tiene python, especialmente respecto a otros lenguajes, es la gestión de dependencias externas de un proyecto o paquete con pip.

Pero todo desarrollador sabe que, antes o después, hay que enfrentarse a la realidad de lidiar con versiones distintas de una misma dependencia en distintos proyectos. Así, podríamos estar trabajando en un proyecto nuevo, donde usásemos por ejemplo la versión 1.10 de Django y a la vez manteniendo un proyecto más antiguo con la versión 1.8 del framework.

Ya que las dependencias se instalan a nivel global en el intérprete de python, no podemos tener ambas versiones de una misma biblioteca instaladas a la vez en nuestro sistema. De modo que, ¿cómo solucionamos esto? La respuesta es sencilla: Entornos virtuales o VirtualEnvs.

domingo, 7 de mayo de 2017

Introducción a GPG - Cifrado Asimétrico


Continuando con el artículo que comencé sobre cifrado simétrico con GPG y cuya lectura recomiendo encarecidamente antes de leer éste (lo dejo en las referencias al final) ya que haré asunciones sobre determinados conceptos, voy a centrarme ahora en el cifrado asimétrico o de clave pública, mucho más complejo e interesante.

Como rápido recordatorio, la diferencia entre el cifrado simétrico y el asimétrico es que en el primero se utiliza la misma clave para cifrar y descifrar un mensaje (entendiéndose por mensaje cualquier tipo de archivo), mientras que en el segundo se utilizan dos claves distintas. A la clave que usamos para cifrar la llamamos clave pública, y a la que usamos para descifrar, clave privada.

martes, 22 de noviembre de 2016

Introducción a GPG - Cifrado Simétrico


Hace poco me he visto en la necesidad de cifrar algunos de mis archivos, concretamente los que suelo llevar en pendrives y que son de naturaleza delicada (documentos personales, del trabajo, etc.). En principio mi objetivo consistía únicamente en buscar una manera cómoda y rápida de cifrarlos y descifrarlos con una simple contraseña utilizando algún programa multiplataforma, para no estar anclado únicamente a Linux en caso de verme en un ordenador ajeno al mío.

Antes que nada, quiero aclarar que no me voy a parar a explicar la diferencia entre cifrado simétrico y asimétrico, ni los sistemas de clave pública en general. Ya existe información más que suficiente por internet que explica muy bien el objetivo y el contexto en el que se aplica cada uno.

Así que, tras realizar una búsqueda intensiva y recordar algunas asignaturas de la carrera, me he decidido a escribir una serie de artículos sobre criptografía. La razón de escribir varios y no uno solo es porque, si lo hiciese de esta forma, resultaría demasiado extenso y tardaría semanas en redactarlo.

De modo que, con el fin de poder ir ofreciendo contenido sin tanta demora entre artículos (probablemente soy el redactor de blog más lento del mundo), voy a centrarme aquí en los sistemas de cifrado simétrico. ¡Vamos allá!

domingo, 18 de septiembre de 2016

Clausuras y Decoradores en Python


Uno de los conceptos de programación más difíciles de comprender y manejar correctamente para quien los ve por primera vez, o sencillamente para quien lleva mucho tiempo sin tocarlo, es el de las clausuras o "closures" en inglés. De hecho, si uno pretende de verdad dominar un lenguaje como Javascript, tan sumamente extendido y de moda hoy día, especialmente gracias al auge de la nube y los frameworks para crear aplicaciones móviles multiplataforma como PhoneGap, está obligado a saber manejarse mínimamente con las clausuras.

En este artículo, el cual es una traducción que he realizado (junto con algunos toques personales) del original escrito por Simeon Franklin que dejo en las referencias al final de esta página, trataré de explicar con ejemplos y lo más claramente posible no solo las clausuras, sino una de sus aplicaciones más habituales: los decoradores. Todo esto lo realizaré en Python 3, un lenguaje sencillísimo que cualquiera que sepa programar en otros lenguajes no debería tardar mucho en dominar si se lo propone.

A pesar de las concreciones en Python que voy a hacer, todos los conceptos aquí expuestos son exportables a otros lenguajes de programación (en Java los decoradores se pueden implementar como anotaciones), así que no perdáis detalle y vamos allá.

lunes, 3 de noviembre de 2014

Servidores en Linux


Recientemente he estado montando un cluster de servidores virtuales con el objetivo de poder probar y trabajar con distintos programas y técnicas orientados a la escalabilidad de aplicaciones web. De hecho espero no tardar mucho en publicar algo sobre el cada vez más popular servidor Nginx.

Una pregunta que mucha gente se hace a la hora de instalar un servidor en Linux es qué distribución debería utilizar para ello. Hay tantísimas opciones que resulta extremadamente fácil perderse entre ArchLinux, CentOSDebianFedoraRed Hat, Ubuntu Server...

martes, 28 de octubre de 2014

CSS Sticky Footer compatible con Bootstrap


Uno de los problemas a los que todo desarrollador web se enfrenta antes o después es al llamado "sticky footer" o, si preferís una versión castellanizada, "pie de página pegadizo".

Si aún alguien no sabe de lo que hablo, la necesidad de usar el sticky footer surge cuando queremos que nuestro <footer> se quede pegado al final de la página a pesar de haber espacio por encima en blanco (si no hacemos nada, el footer rellenará el espacio superior en blanco y se quedará ahí "flotando").

En esta entrada explicaré de una manera tremendamente sencilla cómo solucionar este problema utilizando exclusivamente CSS (nada de hacks en javascript) y además sin romper ni generar ningún tipo de incompatibilidad con Bootstrap para aquellos que lo utilicen.

miércoles, 22 de octubre de 2014

Configurando PHP5 en PhpStorm


Uno de mis lenguajes de programación favoritos desde siempre ha sido PHP. Si tuviera que definir este lenguaje web con una sola palabra sería, sin duda, popular.

Con una gigantesca comunidad mundial, podemos encontrar una amplia documentación sobre este lenguaje no solo en inglés sino también en español, además de su infinidad de bibliotecas para realizar prácticamente cualquier cosa que se nos antoje. Teniendo en cuenta además que el combo ApachePHP + MySQL sigue siendo el más extendido a día de hoy en desarrollos pequeños y medianos de proyectos y, con diferencia, el más barato en cuanto a ofertas de hosting se refiere, opino que se antoja muy necesario a la par que básico conocer al menos superficialmente este lenguaje ya que siempre es un recurso más que tendremos disponible.

Partiendo de ésto, todo buen lenguaje necesita un buen entorno de desarrollo (IDE), y hoy voy a explicar cómo configurar correctamente de inicio uno de los más populares y extendidos: PhpStorm.