Alex Martelli, patterns in Python.

Alex Martelli es Senior Staff Engineer (anteriormente Über Tech Lead) en Google, es uno de los pythonistas de largo recorrido de la PSF, inventor del término duck-typing, y frecuente orador en conferencias de Python donde ha dado multitud de charlas muy instructivas.

Recientemente he estado viendo unas cuantas de sus charlas, en concreto las que tratan sobre patrones de diseño de software (Software Design Patterns) para el lenguaje de programación Python.

Aún me acuerdo cuando en H4ckademy un compañero, que se estaba leyendo el libro Head First Design Patterns, me pidió ayuda para implementar una factoría en Python, ya que él apenas conocía el lenguaje. Estaba tratando de hacer la implementación ‘de libro’ (Java) del patrón: con una clase factoría que hay que instanciar y donde después has de invocar a un método de esa instancia para obtener el nuevo objeto. Cuando ví el código le dije: “¿Por que no usas una simple función?”.

Y es que la implementación de diversos patrones de diseño de software en Python, por las características del lenguaje, difiere bastante de la implementación de la presente en los textos clásicos sobre patrones como el Gang of 4, que están originalmente escritos para lenguajes de tipado estático como C++ o Java. Como bien dice Alex Martelli en una de sus charlas, muchos de los patrones presentes en esos textos clásicos sirven principalmente para evitar las limitaciones impuestas por un sistema de tipado estático, y en muchos otros casos son patrones que ya se encuentran integrados dentro del propio lenguaje, por lo que su aplicación en Python es relativa. Aún así hay muchos patrones cuya vigencia se mantiene, especialmente cuando usamos orientación a objetos. Sigue leyendo “Alex Martelli, patterns in Python.”

Instalar Git LFS

Git Large File Storage (LFS) es una aplicación que nos permite guardar ficheros binarios de gran tamaño junto un repositorio git.

La forma que tiene git para almacenar las diferencias entre archivos funciona muy bien con ficheros de texto plano o código, pero para ficheros binarios como vídeos, audios, pdfs, ficheros comprimidos, etc. el calcular las diferencias a bajo nivel entre diferentes versiones de dichos ficheros no tiene mucho sentido. Además de que como normalmente son ficheros de tamaño considerable supone una gran penalización de rendimiento para el uso normal de git.

Para ello git-lfs lo que hace es que guarda en un fichero de texto dentro del repositorio git un puntero que apunta al fichero binario almacenado en fuera del repositorio git (en la carpeta .git en local). La ubicación de los archivos reales es transparente para el usuario. Supuestamente tanto Github, como Bitbucket, como GitLab (lo que he probado yo) lo soportan. Sigue leyendo “Instalar Git LFS”

Lexer-Parser en Java para traducir informes que deberían ser excel pero en realidad son HTML.

Este es el primer artículo de programación que escribo en el blog, y tal y como transcurren las cosas imagino que le seguirán unos cuantos.

Tal y como indica el título tengo una serie de informes que quiero analizar, el problema es que la aplicación que los genera no funciona bien, se supone que genera un archivo .xls de excel pero tratas de abrirlo con excel te dice que no puede abrir archivos de ese tipo. Al abrirlo con un editor de textos se ve que en realidad son un archivo codificado en HTML. No se si es debido a un fallo de programación de la aplicación que lo genera, dudo que sepan lo que es la integración continua, o si esta hecho así a posta, aprovechando algún comportamiento extraño de versiones antiguas de excel. LibreOffice se lo traga y lo abre, pero elimina los espacios repetidos que para la integridad de la información que tiene el informe son importantes.

Al principio lo intenté con Python. Primero con HTMLParser, pero se comía los espacios con lo que estaba en las mismas. También trate de hacerlo con DOM y SAX pero no había manera por no estar el documento ‘bien formado’, además, al final se habrían comido los espacios igualmente y no me hubieran valido.

Al final me decidí a hacerlo desde cero, aprovechando un ejercicio de un examen de un curso de Java que estoy haciendo, donde había separar el texto de una cadena HTML según etiquetas.En el examen lo realicé todo en un mismo archivo con una simple máquina de estados, pero para resolver este problema decidí currármelo un poco más, separar el lexer del parser y crear una interfaz gráfica. El objetivo es aprender.

Sigue leyendo “Lexer-Parser en Java para traducir informes que deberían ser excel pero en realidad son HTML.”

Por que no le veo sentido al FTTB en España.

En el reciente artículo de Toni Martínez ¿FTTH o FTTB?, ésa es la cuestión en Telequismo nos explica las ventajas de las redes FTTH vs. FTTB. Como ya he comentado en twitter creo que en España no tiene sentido, en general, una estructura tipo FTTB y voy a aprovechar este artículo para argumentar mi opinión en más de 140 caracteres.

Una estructura de red tipo FTTB (Fiber to The Building), o fibra hasta el edificio, consiste en conectar el edificio con la central mediante fibra óptica y una vez en el edificio distribuir la señal a los clientes mediante otra tecnología como puede ser una red de cobre existente o cableado ethernet (LAN). Para más acrónimos y definiciones ver Wikipedia: FTTx.

Sigue leyendo “Por que no le veo sentido al FTTB en España.”