Volviendo a los origenes

Recientemente leía un artículo en meneame en el que se trataba la poca calidad del código que escribían alumnos de últimos cursos y en cierta manera abogaban por volver a trabajar en entornos donde la memoria y el tiempo de proceso eran mucho más caros que hoy.

Reconozco que el artículo me tiró un poco para atrás al principio, pero luego recordé dos o tres experiencias en mi vida que me hicieron estar bastante de acuerdo.

El jodido VAX de la Salle

Cuanto cursaba el primer curso de Telecos en la Salle Bonanova hacíamos las prácticas de programación en C, en un supermaquinón host que llamaban el VAX (ahora se que aquello no era más que un juguete grande, aunque muy caro https://es.wikipedia.org/wiki/VAX).  El tema es que teníamos que usar el editor vi por narices, no había otro. Además, estaba mal configurado el terminal y no había manera de usar las flechas de teclado. Y lo más divertido, teníamos 60 compilaciones por práctica. A partir de ese número, el sistema te penalizaba con 60 segundos, más 10 segundos extra por cada compilación que pasase de 60.

Había prácticas donde fumabas un cigarro en cada compilación. Sobra decir que te mirabas muy bien el código antes de mandar a compilar.

Al año siguiente, cuando dejé Telecos y pasé a estudiar Informática Superior en la UAB, las prácticas de programación me parecían un juego de niños.

Un ejemplo de overkilling, o como matar moscas a cañonazos

La segunda experiencia relacionada es un proceso batch que metía datos en un mysql. Un compañero (y supuesto technical lead del equipo) se empeñó en programarlo con un comando de symfony usando doctrine. Doctrine no es especialmente bueno en ese tipo de tareas, ya que, salvo que lo ajustes adecuadamente, intenta guardar en memoria todas las entidades que ha creado.

Aquel proceso duraba casi una hora y solía romperse a la mitad por falta de memoria.

Siempre pensé, en realidad estoy convencido de que era así, que aquel tech lead no usó doctrine por que creyese que era lo más óptimo, sino porque no sabía trabajar bien a nivel de SQL. Le daba tanto terror (opinión mía) que prefería implementar un mostruo en lugar de bajar de nivel y hacer las cosas fáciles, sencillas y óptimas.

El cerebro acorchado

De eso no hablaba el artículo, es una reflexión personal. Muchas veces he tenido la sensación de que llega un día en que el cerebro empieza a acorcharse. Se acomoda y no admite nuevos conocimientos. empezamos a creer que solo existe una manera de hacer las cosas y somo impermeables a nuevas ideas.

Es por eso que siempre intento estar un poco fuera de mi zona de confort. Con 25 años de carrera por delante, es muy importante aprovecharse de la experiencia adquirida, pero mucho más aún seguir con el motor en marcha y mejorar.

Para probarme y ver si ya estoy en fase de acartonamiento, me he puesto a programar lo que sería una práctica de la universidad, una implementación de árboles binarios en Golang.  Y ¿Cómo no? La he programado en Go, que es mi juguete actual y por el que estoy apostando fuerte en mi carrera profesional.

Y he de decir que he sufrido. Creo recordar que en mi época de estudiante era más rápido implementando este tipo de cosas. O quizás era menos exigente y sólo aspiraba al aprobado justito.

En próximos articulos me meteré más en explicaros este proyecto y algunos patrones que he aplicado que me parecen muy interesantes por la manera en que se usan en Golang.

 

 

Probando Docker en Windows 10

Hoy quería ponerme con un pequeño proyecto para mejorar una de mis webs. He decidido montarlo como un microservicio separado, ya que se trata de una funcionalidad fácilmente separable y me ha aparecido un pequeño problema logístico. Tengo Windows 10 instalado en casa. Generalmente virtualizo máquinas con vmware player para estas cosas, pero como en Waynabox llevamos un tiempo usando Docker  y le he cogido el gustillo, he pensado que podría probar la nueva implementación de Docker para Windows 10.

Y aquí tenéis mis primeras experiencias en lo que sería una guía para novatos, escrita por un novato.

Lo primero, la documentación oficial

Por algún lado hay que empezar, y lo mejor es leerse la página oficial de Docker al respecto, Getting Started with Docker for Windows.

Aquí encontramos algunas advertencias sobre la versión de Windows necesaria y la necesidad de activar Microsoft Hyper-V. De momento voy a ignorar estos avisos, (mi windows está a la última), espero que no explote en la cara dentro de unos minutos.

Paso 1: Instalando Docker

Lo típico, Descargar docker del enlace oficial, botón siguiente, siguiente, etc… Docker instalado y un aviso de que de Hyper-V no está instalado en mi ordenador y la pregunta de si quiero que Docker lo active por mi… Hasta ahora muy limpio todo, si señor.

hyper-v-not-installed-by-docker

Reinicio el ordenador y vuelvo en un minutos…. ¡Fantástico! Docker está instalado y tengo un icono en la bandeja del sistema que me dice que está corriendo.

De momento el invento funciona muy bien.

Paso 2: Probando Docker en Windows

Seguimos con la guía de instalación, abro una consola de sistema (Recordatorio: He de probar bash para Windows,…) y ejecuto docker run hello-word.

¡Genial! Parece que todo funciona. Ha sido tan fácil que incluso me da vergüenza estar escribiendo este tutorial.

Probaremos algo más ambicioso, descargar un ubuntu y ejecutar bash en modo interactivo dentro de ese ubuntu.

Docker se descargará una imagen de ubuntu en pocos segundos y ejecutará bash dentro de el. Hacemos un ls y en efecto, funciona, exactamente igual que en linux. Estoy corriendo en un windows un container docker que tiene un bash corriendo en ubuntu perfectamente funcional. Para cerrarlo, simplemente ejecutamos exit, lo que cerrará el bash. Al estar en modo interactivo ( parámetro -it), el contenedor de docker se cerrará. Si volvemos a lanzarlo veremos que arranca infinitamente más rápido, ya que ahora no necesita descargar la imagen de ubuntu.

¡Docker mola mucho!

Paso 3: Montando contenedores docker

Bueno.. a partir de ahora habría que seguir por lo obvio, exactamente igual que en linux, crear un archivo de configuración con los contenedores que nos interesen, compartir una unidad de disco entre el contenedor y el host si queremos tocar código de manera fácil, o exportar los logs, mapear los puertos internos y externos, etc..

De todo eso se trata en la propia guía de docker Get Started with Docker y se escapa un poco de lo que pretendía ser este artículo.

Por lo que a mi respecta, me voy a buscar una buena imagen para correr apache con php7 y posiblemente otra para un mongodb o un redis (aún no tengo claro) y crearé un docker compose que me lance las 2 y las configure adecuadamente.

Patentes de Software. Tuve la misma idea que Google.

Andaba yo como casi cada tarde sábado elucubrando alguna idea para hacerme rico y dejar de trabajar. De repente me encuentro con que mi nueva idea está patentada, y nada menos que por Google.

La idea es sencilla, nada de ciencia para cohetes. Simplemente, montar un agregador de información que recorra la web con un spider y detecte cualquier publicación geolocalizada. El interfaz de usuario (la web) mostraría un mapa donde el usuario podría consultar información relativa a una zona.

Buscando algo de información al respecto, me encuentro con esta patente de Google, que  explica el proyecto prácticamente con las mismas palabras que yo habría usado.

Y la verdad. Me cabrea. Y mucho. Yo entiendo que si un señor inventa un motor para enviar cohetes a la luna, o una medicina para tratar una enfermedad, o un proceso químico para generar un nuevo compuesto, o lo que sea, tenga derecho a proteger su idea y su inversión.

Pero, ¿Una idea? ¿Pueden patentarse las ideas? Es que les ha costado más tiempo escribir todo el texto de la patente que pensarlo. Una idea que cualquiera ha podido pensar mientras evacuaba plácidamente.

¿Que pensáis? ¿Es moral patentar ideas? ¿Tiene derecho google a parar un proyecto sólo porque tienen tiempo y dinero para pagar abogados que escriban bonitas patentes?

¿Se aplican las patentes de ideas fuera de USA? Tengo entendido que no se admiten esas patentes en Europa, y yo soy europeo. Pero claro, ¿Quien se arriesga a perder el tráfico orgánico de Google?

Fin de la pataleta.