Índice

|2024 |2023 |2021 |2019 |2018 |2017 |2016 |2014 |2013 |2012 |2011 |2010 |2009 |2008 |

Algún día fracasarás y está bien

Puede sonar extraño sugerir algo como fracasar y además considerarlo algo positivo. Antes de que te vayas o consideres que esto es una locura, déjame explicarte por qué es importante fracasar y por qué está bien.

Leer más =>>

¿Genio de la Programación o Tornado Táctico?

Leyendo la Bonilista me encontré una distinción entre genios de la programación y la generación de desperdicio que me hizo pensar, ¿no debería ser un genio de la programación lo suficiente bueno para no dejar un desastre a su paso? ¿estamos confundiendo ser un genio con un tornado táctico?

Leer más =>>

Hazlo Hermoso

Haz que funcione, entonces hazlo hermoso, entonces si real, realmente tienes que hacerlo, hazlo rápido. El 90% del tiempo, si lo haces hermoso, será rápido. Así que realmente, ¡tan solo hazlo hermoso! Fue una de las frases que nos dejó Joe Armstrong pero, ¿sabes a qué se refiere?

Leer más =>>

Juegos en el Backend: Leprechaun

El juego Gems of War tiene un modo de caza tesoros bastante adictivo. El problema con este juego es que debes disponer de un recurso limitado para poder jugar. Al final o pagas o solo puedes jugar un par de veces al día con suerte. ¿Qué tal si nos hacemos el juego entre Elixir y JavaScript?

Leer más =>>

Montículos con Elixir

Hace 7 años escribí una entrada mientras estudiaba los montículos para la asignatura de Programación y Estructuras de Datos Avanzadas de la UNED. Al revisar la entrada y ver que aún hay mucha gente consultando he decidido retomarla y actualizarla pero además he creado esta entrada para ver cómo se haría en Elixir, ¿te animas a ver los montículos en Elixir?

Leer más =>>

Programación Orientada a Ferrocarril

La programación orientada a ferrocarril (o Railway oriented Programming, RoP en inglés) es una nueva forma de orientas nuestro software para conseguir mejor legibilidad y entendimiento ante situaciones de error, ¿sabes cómo funciona?

Leer más =>>

Computación Cuántica

La programación cuántica es un concepto de hace bastante tiempo pero aún en gestación. Algunas empresas como IBM o D-Wave Systems han construído sus procesadores cuánticos, han aparecido los primeros lenguajes pero, ¿qué significa todo esto para nosotros? ¿qué ventajas e inconvenientes tiene esta tecnología?

Leer más =>>

Julia: Lenguaje para Alto Rendimiento

Mi especialidad son los lenguajes de alta concurrencia y distribución principalmente, pero a veces me planteo agregar un poco de alto rendimiento también a mis desarrollos y pensando, ¿cómo podría hacerlo sin necesidad cambiar todo de lenguaje o emplear código difícil de leer?

Leer más =>>

Rebar3 (I): Primeros Pasos

La versión de Erlang OTP 19 ya está cada vez más cerca y una de las principales características es la inclusión de rebar3. Esta herramienta ha cambiado mucho desde su versión 2 influenciada por mix. Sus creadores dicen que se trata de una herramienta completamente diferente. ¿Le echamos un vistazo?

Leer más =>>

Introducing Elixir

En la pasada Erlang User Conference (2015) nos regalaron un libro en O'Reilly en formato digital. De entre las opciones disponibles se encontraba Introducing Elixir de Simon St. Laurent y J. David Eisenberg. Lo puse en mi lista de libros por leer y este fin de semana finalmente lo leí. ¿Le echamos un vistazo?

Leer más =>>

Exrm: Liberando Proyectos Phoenix

Hace unos días comencé a realizar un par de páginas web en Phoenix Framework para tomar un poco más de soltura en el sistema. Son las páginas corporativas de altenwald.com y dymmer, no hay mucho código realmente, pero aprovecho el código para dejar el HTML algo más pequeño y poder realizar la i18n más fácilmente. ¿Cómo realizamos la liberación a producción?

Leer más =>>

Phoenix Framework: Un Rails sobre Erlang/OTP

PHP, Rails, Django, Catalyst, ChicagoBoss... Phoenix Framework. Después de muchos framework llegamos a Elixir y encontramos este trabajo impecable de José Valim y Chris McCord, ¿por qué está teniendo tanta fama?

Leer más =>>

Pony: Actores, Objetos y Alto Rendimiento

De vez en cuando me gusta estudiar nuevos lenguajes de programación, ver para qué han sido desarrollados, las tareas que mejor pueden resolverse en esos lenguajes y comparar con otros que tengan una misión similar. En este caso he topado con Pony, un lenguaje basado en Modelo Actor, con Orientación a Objetos y Alto Rendimiento. ¿Qué es realmente el lenguaje Pony?

Leer más =>>

TODO, FIXME, DEPRECATED... ¡Marca tu código!

Si programas con frecuencia y lees código de software libre, sabrás o te habrá llamado la atención el uso de ciertas etiquetas dentro de los comentarios del código que comienzan por TODO, o FIXME, o XXX... estas etiquetas se conocen con el nombre de codetags, ¿sabes para qué sirve cada una?

Leer más =>>

DSL: Lenguaje de Alto Nivel

Las siglas DSL tienen como signficado domain-specific language (lenguaje específico del dominio). La construcción de un lenguaje específico es algo natural en el ser humano, el lenguaje se adapta al entorno en el que vivimos y al uso que de él hacemos. ¿Sabías que esto mismo es extrapolable a los lenguajes de programación?

Leer más =>>

Piensa en el !11

Hace unos días Marga estaba enfrascada en el desarrollo de una solución para web basada en JSON-RPC y surgió la frase, por parte del cliente (Nothmann Research): piensa en el !11. Cuando me lo comentó no lo entendí de primeras. El factorial de 11, ¿por qué?

Leer más =>>

LevelDB en Mnesia

Entrando en la página de Erlang Central en su chat había un mensaje que decía literalmente: mnesia_ext_eleveldb ,how to download? (mnesia_ext_eleveldb, ¿cómo lo descargo?). La alusión de que Mnesia pueda trabajar con LevelDB me resultó curiosa, tanto que he decidido investigarlo y dedicarle una entrada en el blog.

Leer más =>>

Skulpt: Python en el navegador web

Viendo un curso de Introduction to Interactive Programming in Python que está siguiendo Marga en el que está programando algunos videojuegos como el Pong. En la página web de Coursera me ha llamado la atención de que todo el código escrito en Python se ejecuta y lo hace en el navegador web. Viendo la firma de la página, veo que se basan en algo llamado Skulpt, ¿Qué será...?

Leer más =>>

Erlang: Volviendo a la Incrustación

A través de twitter me llega la noticia de que en la Erlang Factory de San Francisco se ha presentado una charla sobre La vuelta al incrustado (embedded) de Erlang. Esta vuelta se ha realizado de la mano de Erlang Solutions y su proyecto Erlang Embedded. La charla corrió a cargo de Omer Kilic. Se puede ver el vídeo en Youtube.

Leer más =>>

Movimiento en Elixir

En estos últimos días ha habido un gran revuelo en el mundo Erlang con respecto a Elixir. Ha habido varios detonantes, pero el que los ha unificado todos y los ha comentado desde su experiencia, tras una semana de hacer pruebas con Elixir ha sido Joe Armstrong, padre de Erlang, en un artículo denominado A week with Elixir.

Leer más =>>

Hacker Cup 2013 en La Ventana, Cadena SER

Ayer recibí una llamada de la cadena SER en la que me proponían entrar en antena sobre las 20:00h para hablar un poco sobre la participación en la Facebook Hacker Cup 2013. La verdad es que mi participación no fue digna de mención ya que me quedé en la segunda ronda de seis, pero me motivó a aprender más y probablemente el año que viene quede en mejor posición.

Leer más =>>

Études para Erlang

Étude es una palabra francesa que se traduce como estudio, pero se relaciona con un estudio específico que tiene como objetivo mejorar las destrezas del estudiante. Así, en música se toma como una pieza musical que permite al que la ejecuta mejorar el dominio de una técnica específica y en programación se puede tomar como un algoritmo o trozo de código que el alumno puede analizar, probar y modificar para mejorar su entendimiento sobre la forma en la que está desarrollado.

Leer más =>>

Programación Funcional, ¿una moda?

Después de 20 años programando en diversas metodologías y lenguajes, me doy cuenta de que muchos de los lenguajes que he aprendido y muchas de las metodologías en las que me he visto sumergido han sido protagonizadas por una moda.

Leer más =>>

Evolución de LAMP

Hace ya más de 10 años que surgió la pila de programación web denominada LAMP en honor de las siglas que formaban los 4 principales elementos que conforman esta tecnología: Linux, Apache, MySQL y PHP. Hay otros que intercambiaron las páginas hechas en PHP por Python o incluso por Perl, pero no fueron tan populares y terminaron por dar paso a frameworks que hacían mejor ese trabajo, como por ejemplo [Django en Python][1] y [Catalyst en Perl][2].

Leer más =>>

Hacker Cup 2013: Cadenas Bellas

¡Que empiecen los juegos! ... bueno, ya hace 72 horas de eso, pero ha sido emocionante. Este es el primer año que me ha dado por participar en la Facebook Hacker Cup y tengo que decir que me ha fascinado. No recuerdo haberme enfrentado a problemas tan complejos desde mi época de programación en la universidad, en las asignaturas de Programación III o más recientemente en Programación y Estructuras de Datos Avanzadas.

Leer más =>>

Tipos de Datos en Erlang (IV): Pilas y Colas

Después de revisar los arrays, diccionarios y los conjuntos llegamos a las pilas y a las colas. Estos tipos de datos son complementarios y tienen una forma muy parecida de trabajar. Sin embargo, los algoritmos internos para su funcionamiento difieren.

Leer más =>>

Tipos de Datos en Erlang (III): Conjuntos

Siguiendo con el repaso de los tipos de datos que se pueden representar en Erlang a través del uso de los módulos que integra su librería estándar (stdlib) llega el turno de los conjuntos. Los conjuntos son una agrupación de elementos con ciertas propiedades, la que más cabe destacar es que en un conjunto no pueden existir dos elementos idénticos, es decir no existe repetición.

Leer más =>>

Tipos de Datos en Erlang (II): Diccionarios

Siguiendo con la edición de tipos de datos en Erlang vamos a repasar en esta entrega los diccionarios. Los diccionarios son conocidos genéricamente como hash. A diferencia de los arrays vistos en la entrega anterior en este caso se permite emplear un texto, número o átomo en lugar de restringirse a un índice numérico.

Leer más =>>

Tipos de Datos en Erlang (I): Arrays

Todos los que llevamos un tiempo con Erlang conocemos los tipos de datos que provee (listas y listas binarias, tuplas, registros, enteros, decimales y átomos). En herencia de los tipos de datos imperativos y como modelos de datos que tienen sus propios algoritmos de acceso y son muy empleados en programación imperativa y sin embargo quedan fuera están los diccionarios, los arrays, los conjuntos, los árboles... estos tipos de datos no están presentes en la base del lenguaje, pero sí que están presentes en la librería estándar de Erlang.

Leer más =>>

Erlang shell con historia

Una de las características de que disponen las consolas de usuarios como bash o zsh es que tiene histórico. Cuando cierras la consola y abres una nueva, puedes recurrir al histórico para ver qué comandos habías ejecutado momentos antes o incluso días antes.

Leer más =>>

eJabberd 3 y MongooseIM: dos puntos de vista

El proyecto ejabberd es de los más grandes y populares de los realizados en Erlang. Muchas empresas, con la salida de la web interactiva, la aparición cada vez más grande de sistemas de chat en la propia web, e incluso a través de dispositivos móviles, se ha propagado gracias al uso que han hecho empresas como Tuenti, Facebook, Whatsapp, Yuilop, etc. de esta herramienta.

Leer más =>>

REPL en Erlang

Leyendo el blog de Verdi, me encuentro con un artículo muy interesante sobre los REPL (Read-Eval-Print... and Loop), vamos la forma de crear consolas de interacción básicas. El hecho de escribir acerca de ello no es solo copiar, sino ampliar un poco más donde Verdi se quedó, agregando el soporte para que esto, dentro de Erlang/OTP, sea un behaviour.

Leer más =>>

Rust: Otro más para Concurrencia

Tras llevar ya la friolera de casi cuatro años con Erlang, y analizar el lenguaje Go, otro que se perfila con lenguaje para desarrollo de sistemas con alto grado de concurrencia es Rust.

Leer más =>>

Websocket y Erlang

Hace un tiempo (ya unos años), escribí algo que había leído del blog de Joe Armstrong acerca de websocket, hoy retomo el tema después de leer un email de la lista de ErlAr, de un mensaje de Mariano Guerra en el que nos da estos datos sobre un banco de pruebas realizado con varias librerías, en varios lenguajes, sobre el uso de websocket:

Leer más =>>

Lenguaje Boo y Mono para videojuegos

Cada vez más, hay una tendencia clara de los fabricantes de engines a fabricar entornos en los que otros desarrolladores, diseñadores y animadores, puedan crear juegos tanto para PC, como videoconsolas, móviles, etc.

Leer más =>>

cowboy: servidor pequeño, rápido y modular

Hace poco que le llevo siguiendo la pista a este framework para desarrollo en Erlang. cowboy se ha convertido, para mi, en una referencia a nivel de sistemas de inversión de control en Erlang, ya que son los únicos que he visto, hasta el momento (aparte de ciertas partes de código dentro de ejabberd) que usan los behaviours para extender funcionalidad.

Leer más =>>

Juggernaut: Invirtiendo el paradigma Cliente/Servidor

Juggernaut, además de ser un personaje del universo Marvel, es un servidor escrito en Node.JS, que permite su integración con Ruby on Rails para realizar el intercambio de mensajes en dirección del servidor hacia el navegador.

Este esquema permite al servidor poder enviar mensajes al navegador en cualquier momento, de modo que se mantiene una actualización mucho más precisa que con refrescos esporádicos del navegador web hacia el servidor.

Leer más =>>

Estructura Líder/Trabajador en Erlang

Erlang es muy bueno para programación distribuida, y paralela, y concurrente, así mismo se hace muy simple la creación de servidores, tal y como he mostrado en entradas anteriores (servidor UDP y servidor TCP), pero nos queda una tipo de comportamiento que es algo complejo llevar a la práctica. Me refiero al paradigma de Maestro-Esclavo.

Leer más =>>

Go: El lenguaje de Google

Hace un par de años que escuché que Google trabajaba en un lenguaje, y hace poco que ya había visto la luz una versión estable, la primera. ¿La has probado ya? ¡Demos un repaso!

Leer más =>>

Erlang: Servidores Concurrentes TCP

Para la programación de elementos que requieran concurrencia, Erlang, es una de las mejores elecciones que se puede tomar. El hecho de construir servidores UDP con los mecanismos que nos ofrece OTP es algo trivial, muy simple de conseguir, tal y como se puede ver en este otro artículo, pero la cosa se complica, cuando lo que queremos obtener es una conexión, o un conjunto de conexiones concurrentes para TCP.

Leer más =>>

Erlang: Servidores UDP

Una de las grandes potencias de Erlang es su capacidad para construir servidores. A través de OTP, esta tarea se convierte en algo tan sencillo, que asombra ver con qué pocas líneas de código se crea un servidor.

Leer más =>>

¿Qué es el Código Ravioli?

Leyendo un documento sobre Erlang, en el que introduce el concepto de módulos parametrizados, encuentro un aviso que dice (traducido): cuidado con el código Ravioli. Por lo que llego a preguntarme... ¿qué es el código Ravioli?

Leer más =>>

V8: Extendiendo PHP

Hace prácticamente un año escribí un artículo denominado Spidermonkey: extendiendo PHP, donde comentaba como emplear Spidermonkey para poder emplearlo como lenguaje de extensión a un núcleo sencillo hecho en PHP.

Leer más =>>

En Busca de la Excelencia del Código

Así se titula el primer libro de Raúl Herranz, uno de los profesores acreditados de Scrum Manager. El documento es libre y gratuito y puede descargarse de la siguiente dirección:

Leer más =>>

Montículos

Pues sí, otra vez de exámenes, otra vez estudiando, y llego a un apartado, en el que lo que decía el libro me sorprende y, al implementarlo, me confirmo. La teoría o lo que viene en los libros no es 100% fiable, en caso de teorías matemáticas, físicas o de computación, hay que comprobar lo que nos indican los libros, porque podemos encontrarnos con una errata.

Leer más =>>

Las gemas de Ruby

Tengo a Ruby un poco abandonado, por lo que me he decidido a escribir un poco acerca de él, al igual que hice con Python, para detallar un poco cómo son los paquetes de código (o librerías) de Ruby: las gemas.

Leer más =>>

Catalyst: Framework web para Perl

Justo cuando colgaba la encuesta sobre: Si tuvieses que hacer un sitio web dinámico, ¿en qué tecnología lo harías?; busqué un framework en los lenguajes más populares de desarrollo web y, topé con Catalyst, un framework en Perl para el desarrollo de aplicaciones web.

Leer más =>>

haXe: metalenguaje para todos

Hace tiempo que vi este lenguaje de pasada y no le presté mucha atención, pero hoy, revisando algunas cosas, he vuelto a él y he visto algo que, antes quizás me habría parecido ridículo, pero ahora, después de ciertos acontecimientos, comienzo a verle mucho sentido.

Leer más =>>

RSS: Leyéndolos desde PHP y Rails

Hace un tiempo hice un lector de sindicación o RSS para poner noticias en una web en Ruby on Rails y me gustó la simpleza con la que se analizan los códigos y se pueden presentar las noticias. Sin mucho esfuerzo. Apenas unas líneas de código. Unos días más tarde me tocó hacerlo también en PHP. Aquí un ejemplo de simpleza de un framework, frente a un lenguaje.

Leer más =>>

Python: La Elegancia

Siempre he dicho que cada lenguaje tiene su potencia, si PHP son sus estructuras de datos (arrays) que permiten formas heterogéneas y de fácil administración y presentación, Perl es la versatilidad y potencia que proporciona su sintaxis escueta y orientada al resultado, Ruby es la reescritura en tiempo de ejecución... Python, sin duda, es la elegancia.

Leer más =>>

PHP: Convirtiendo Fatal Errors en Excepciones

Uno de los problemas que surge cuando se usa PHP, es que muchas veces, se programa pensando en orientación a objetos y, de repente... un Fatal Error, algo tan ligado a la programación estructurada o incluso spaguetti nos ronda en un esquema que intentamos que sea lo más POO (u OOP) posible.

Leer más =>>

South: Migraciones en Django

Cuando escribí el artículo sobre Django, fui bastante positivo con respecto al sistema de llevar los modelos a la base de datos, ya que, según parecía, el sistema propuesto por syncdb era automágico, pero realmente, lo único que se encarga de realizar es la creación de nuevos modelos que estén en el fichero de models.py.

Leer más =>>

CoffeeScript: Haciendo fácil JavaScript

Después de leer la liberación de Rails 3.1, me topé con que trae por defecto este sistema para facilitar la escritura de código JavaScript. Es curioso que lo traiga activo por defecto, ya que hay muchos a los que les gusta el lenguaje JavaScript y pueden haberse tomado mal esta decisión... no obstante yo lo veo bastante acertado, más que nada porque el código de CoffeeScript me resulta muy claro y limpio, en comparación con JavaScript y, lo mejor de todo, es que resulta incluso hasta más fácil de portar entre navegadores.

Leer más =>>

Egg: Huevos de Python

Tal y como Ruby tiene sus gemas, PHP su PEAR y PECL, PERL su CPAN, ... pues Python, tiene huevos... vamos, extensiones a las que llama egg.

Cuando un desarrollador realiza un desarrollo que quiere compartir con el mundo, normalmente, lo empaqueta de alguna forma y lo sube a Internet de alguna forma. A día de hoy, es muy común ver mucho código subido a sitios como PHPClasses, PEAR, RubyGems, Cheese Shop, SourceForge, GitHub, BitBucket, etc.

Leer más =>>

Django: Web muy fácil y muy sencilla

En estos días he estado más volcado en Python y Django. Quizás sea por acercar un poco más y mejor a lo que hace gente como Demonware, o quizás sea por puro vicio. Lo dejo a opinión popular :-P

Leer más =>>

Demonware: Videojuegos y Erlang

Demonware es una división de Activision y Blizzard, encargada de desarrollar la parte de cliente-servidor para que los jugadores online puedan echar sus partidas con los amigos.

Leer más =>>

Celluloid: Concurrencia en Ruby

Profundizando un poco en el Modelo Actor, en el que se basan lenguajes como Scala, Erlang o Reia, pero que también está disponible a través de frameworks para otros muchos lenguajes, como .NET, Java, Ruby, Python, etc.

Leer más =>>

Grafos (I): Fundamentos Básicos

Comenzamos el curso de nuevo. Ya hace unos nueve años que conozco lo que son las estructuras de datos avanzadas para la programación, pero no obstante, qué le vamos a hacer, hay que sacarse los estudios y me toca profundizar un poco en este tipo de datos. He pensado que, para hacer más llevadero el estudio, voy a comenzar a publicar aquí mis apuntes, así, además de tenerlos siempre disponibles, los comparto.

Leer más =>>

Prácticas: Código y Memoria del Tetris

Lo prometido es deuda, por lo que, aquí está la práctica completa, código y memoria, de la asignatura de Programación Orientada a Objetos ofrecida por la UNED. La práctica corresponde al curso 2010/2011, y consta de la creación de un Tetris.

Leer más =>>

Erlang, ¿realmente lo entienden?

Después de leer varios artículos sobre Erlang, algunos defendiéndolo y otros criticándolo, me doy cuenta de que, realmente, no todo el mundo entiende lo que es y significa este lenguaje. En sí, no es el lenguaje, sino la metodología que hay detrás la que está moviendo el hecho de que los lenguajes funcionales sean como son y sirvan, de la forma correcta, a los propósitos para los que fueron creados.

Leer más =>>

FSM: Máquina de Estados en Erlang

FSM o Finite State Machine, lo que podríamos traducir como máquina de estados finitos, es una de las potentes herramientas que nos proporciona OTP para el desarrollo de aplicaciones y soluciones.

Las máquinas de estados finitos se pueden emplear para definir los elementos con los que debe de interactuar una aplicación, y que puede darse el caso de iniciar su existencia (por llamarlo de alguna forma) en un estado definido, y mediante una sucesión ordenada o específica de eventos, ir realizando las transiciones específicas, hasta su finalización.

Leer más =>>

PHP 5.4: ya queda menos

Hoy me ha llegado una noticia sobre la liberación de las alpha de PHP 5.4 y, buscando en Internet y en la propia página de PHP, veo que ya se tiene un plan para lanzar esta nueva versión de PHP.

Como cuando hablé sobre la liberación de PHP 5.3, esta nueva versión de PHP se va acercando un poco más al ideal de Programación Orientada a Objetos que ya se tiene en otros lenguajes como Python, Ruby, Java, C#, etc.

En esta nueva entrega, como en otras, hay cambios o mejoras sobre algunos elementos, cosas que se agregan al lenguaje y a la biblioteca de funciones (y objetos) y cosas que definitivamente se eliminan.

Leer más =>>

Elixir, Reia, Efene, LFE: Lenguajes sobre Erlang/OTP

Llevo un tiempo interesado en los analizadores léxicos y sintácticos para poder crear ficheros de configuración más amigables o sistemas de interfaces de usuario basados en consola que puedan emplear un formato libre de construcción de instrucciones (algo más complejo que el típico comando y argumentos). Eso sumado a mi afición por Erlang dio como resultado el encontrar: leex y yecc; un analizador léxico y sintáctico respectivamente.

Estas búsquedas, igualmente, dieron con una serie de lenguajes nuevos, que han sido desarrollados usando estos analizadores, sobre Erlang, por lo que aprovechan sus ventajas, y salvan algunos de los inconvenientes que tienen algunas personas al ver Erlang por primera vez, con respecto a la sintaxis del lenguaje y la asignación única de variables.

Leer más =>>

Perl::Critic: Un crítico para tu código en Perl

Echando un vistazo por Internet, topé con esta curiosa página, que tiene como misión criticar el código que hayas escrito en Perl, a través de las buenas prácticas escritas en el libro Perl Best Practices, de Damian Conway.

En la web se puede subir cualquier fichero, código en Perl, y el sistema internamente analiza el código conforme a las reglas específicas de un buen programador de Perl. Tiene cinco niveles de gravedad: gentle (gentil), stern (severo), harsh (duro), cruel y brutal.

Leer más =>>

Buenas Prácticas en Perl

Repasando un poco la bibliografía básica para el lenguaje Perl, topé con este libro, que tienen muchos programadores como base para la escritura de código en este lenguaje. El libro tiene una extensión considerable, pero se hace bastante ameno. Insta a escribir el código de una forma ordenada y que se refactorice todo lo que huele para mejorar el mantenimiento del mismo.

Leer más =>>

Opa: El lenguaje de la Nube

Tal y como reza su web The Cloud Language (el lenguaje de la nube), este lenguaje sale como una solución a la programación de sitios web cumpliendo con unas necesidades concretas. La empresa MLState ha puesto como su bandera a este lenguaje, sobre el que está orientando toda su actividad comercial.

Leer más =>>

Prácticas curiosas: Tetris

He estado en esta semana santa haciendo una práctica del Grado en Ingeniería Informática, para la asignatura de Programación Orientada a Objetos, en la UNED.

En la práctica, y la asignatura, se hace bastante énfasis en Java. A mi Java me parece un buen lenguaje, pero no es totalmente orientado a objetos, por lo que, te permite hacer cosas que, estando bien escritas (porque funcionan) en lenguaje Java, pueden no ser, en absoluto, orientadas a objetos.

Leer más =>>

Xdebug: Depurar y optimizar código PHP

Hay momentos en los que vemos que la carga de una página tarda demasiado, o que el uso de un recurso, que en principio habíamos creído que era menor, sube y su tiempo de ejecución hace que nuestro servidor sufra. Trazar estos problemas a simple vista o a través de trazas no es más que complicar el código y hacer que varíe su línea de ejecución y, con ello, el rendimiento en sí del mismo, por lo que, nos hace falta una herramienta a alto nivel, que no implique cambiar el código, que nos permita realizar este tipo de comprobaciones sobre el código. Esta es Xdebug.

Leer más =>>

Ruby: Reescritura y <em>yield</em>

Durante unas pruebas en el trabajo, enseñando a mi mujer (Marga), cómo funciona Ruby con su mayor potencia, la reescritura de código y los yield, pensé: con lo que me ha costado... mejor lo guardo en el blog. Y esto es :-)

Leer más =>>

Inversión de Control: El Patrón de los Frameworks

Leyendo un artículo de Martin Fowler, sobre el tema Inversión de Control (en inglés), comenzando por el final, la etimología de la frase (entendido como el origen del concepto), se comenta que, en un principio (sobre los años 80) la gente se refería a una nueva forma de hacer las cosas como el Principio de Hollywood, teniendo presente la famosa frase de los cineastas: no nos llames, nosotros te llamaremos.

Si pensamos en las librerías, en cualquier lenguaje, ya sean módulos, paquetes u objetos, siempre alcanzamos una funcionalidad encapsulada dentro de una forma específica a la que se la puede llamar para realizar una acción. Pero esto cambia radicalmente en los frameworks, u entornos de desarrollo, ya que estos entornos, normalmente, realizan un cierto trabajo, y te permiten extender esa funcionalidad base, con ciertas reglas, a través de código que se escribe.

Leer más =>>

SpiderMonkey: Extendiendo PHP

Hay muchas veces que nos encontramos con el problema de que queremos extender la funcionalidad de nuestro programa por extensiones, plugins, addons o como los queramos llamar. Estas extensiones tienen el problema de que pueden afectar al funcionamiento del resto del programa si lo ejecutamos directamente desde el core del programa que estemos haciendo, quedando el mismo en una situación inestable o nada funcional.

Leer más =>>

Banco de Pruebas (I): Velocidad

Hace tiempo hice algo parecido con los lenguajes de programación que entonces conocía, probando aquellos que eran de scripting, compilados y probando sobretodo, lo que tardan en levantar y hacer una operación tan simple como enumerar 100.000 números sacando por pantalla el número con un elevado a 2 de la posición en el que sale la impresión. Por ejemplo:

Leer más =>>

Lua: el lenguaje de los videojuegos

Echando un vistazo a los lenguajes de programación, me llamó la atención un lenguaje que había visto desde hace tiempo y al que cada vez se le está dando más protagonismo: el lenguaje Lua.

Hay muchos lenguajes extensibles que se emplean para poder desarrollar addons, plugins, de modo que cualquier desarrollo se pueda aprovechar de las ventajas de tener un lenguaje liviano y potente para su extensión, sin necesidad de tocar, ni conocer, el código fuente con el que se realizó.

Leer más =>>

Erlang Develop: Apoyo al desarrollo en Erlang

Llevo algún tiempo trabajando con Erlang/OTP y con sus facilidades a la hora de realizar prácticamente cualquier cosa. En lo que respecta al desarrollo de servicios concurrentes, de alta disponibilidad y sistemas críticos, es ideal.

Lo único que ha sido una piedra en el camino, es la curva de aprendizaje y la cantidad de código a modo de plantilla que hace falta para poder programar de forma rápida.

Por todo esto, decidí hacer un sistema de scripts (para Mac OS X y GNU/Linux, en principio, aunque en sistemas Solaris, HPUX, AIX, BSD, y demás sabores de Unix pueda funcionar sin cambios, e incluso en Windows a través de Cygwin), que faciliten la creación de proyectos y módulos de tipo OTP dentro del proyecto que se quiera desarrollar.

Leer más =>>

XSLT (II): Descubriendo XPath

Hace unos días escribí un artículo sobre XSLT a modo de introducción sobre esta tecnología. El artículo era muy simple, ya que solo pretendía mostrarse como introducción y mostrar lo que, en sí, el sistema XSLT puede llegar a hacer.

Ahora, vamos a completar un poco más esa visión adentrándonos en el uso de XPath.

Leer más =>>

XSLT (I): Hojas de Estilos para Transformación

Hace cuatro años que comencé a utilizar esta tecnología para el desarrollo web. Al principio como una forma de realizar una vista aislada del código base de la aplicación web, después como un metalenguaje más simple que el HTML y más enfocado a la presentación de formularios y datos específicos (semántica) en lugar de presentación.

Por último, hace poco, lo he visto muy útil para crear metalenguajes que simplifiquen cosas como VoiceXML. Este sistema y/o lenguaje que se basa en el uso de etiquetas XML, así como el uso de plugins a través de la etiqueta object (al igual que en HTML) y ECMAScript (o JavaScript) para agregar aún más dinamismo (y complejidad), supuso un reto.

El trabajo de XSLT, en todos estos escenarios fue la confección de un lenguaje intermedio (un metalenguaje) que se pudiese traducir de forma inmediata al lenguaje destinatario o esperado por el navegador o cliente que lo solicitara.

Leer más =>>

Propiedad del Código

Cuando comencé a leer libros sobre Extreme Programming, me llamó la atención una de las propiedades de esta metodología de desarrollo, que era la propiedad del código.

Por mi parte he sido siempre muy comunista con respecto al código, no tengo el menor reparo en mirar, ampliar y corregir código de otras personas y dejo que los demás vean, opinen y corrijan y/o agreguen cosas a mis códigos... es la mentalidad del software libre.

Pero en las empresas ocurre lo contrario. Es muy normal, yo diría que incluso enfermizo, llegar a ver cómo cuando entras en una empresa en la que hay más de tres programadores, cómo cuando algo falla, cuando hay que hacer una nueva mejora, ampliación, adaptación, siempre dice uno en voz alta: ese código es de fulanito; indicando que ni lo va a ver, ni lo piensa modificar.

Leer más =>>

Resolviendo Shikaku

Esta es una práctica que realicé (y comenté) en diciembre de 2008 para la asignatura de Programación III de la UNED.

La práctica se basaba en realizar un sistema para resolver tableros de shikaku, mediante el algoritmo de vuelta atrás. Mi solución es óptima pero no del todo correcta desde un punto de vista académico, ya que el uso del algoritmo (de backtracking) es menos usado de lo que debería.

Leer más =>>

Clojure: Más sobre Concurrencia

El término closure (clojure en francés y cláusula en castellano) se emplea en informática (según la wikipedia) como: una función que es evaluada en un entorno conteniendo una o más variables dependientes de otro entorno.; o dicho de otra forma, lo que se conoce como un código evaluado, es decir, procesado y/o compilado en caliente o tiempo de ejecución.

¿Por qué una introducción acerca de closure?, pues porque uno de los lenguajes que comienza a ser muy usado, es precisamente este: clojure.

Leer más =>>

El futuro de la web: HTML 5

Con este título he encontrado una presentación de Derek Bender, gracias a un artículo en la web del IES Gran Capitán de Córdoba (España), en el que se presentan datos significativos de cómo será la programación web a partir del año que viene, que es cuando ya todos los navegadores más importantes, tendrán soporte para HMTL 5.

No obstante, los equipos antiguos que aún manejan navegadores antiguos, no podrán visualizar estas mejoras, pero al menos, ya se habrá iniciado una mejor forma de realizar páginas web.

En principio, Derek, nos introduce en la historia de esta nueva liberación. Los grupos de trabajo principales: Apple, Mozilla y Opera (y muchos otros menos conocidos); se reunen para trabajar en una nueva liberación de este lenguaje de etiquetas basado en el uso cotidiano que se le da en estos momentos.

Leer más =>>

La duplicación en Ruby

Durante el día de hoy, hemos estado dando vueltas, tanto Daniel como yo, para ver si encontrábamos alguna forma de solucionar este problema que se nos había cruzado:

Leer más =>>

¡Shoes vive!

Hace tiempo escribí una entrada sobre este entorno de programación para GUI de Ruby, desde ahí a unos meses después, el creador del entorno, denominado why en la red, cerró todo su material en la red, eliminó su twitter, sus webs y dominios, eliminó sus códigos de github, etc.

Leer más =>>

Programación para Administradores de Sistemas

Cuando estuve estudiando el título de Administración de Sistemas Informáticos es cuando me acerqué a los lenguajes de scripting (por el año 2002), y fue cuando comencé a aprender lenguajes como PHP, Python, Ruby y Perl.

El lenguaje Perl me llamó la atención, sobre el resto, porque había sido un lenguaje creado por Larry Wall, un administrador de sistemas... ¡en un mes!, supongo que lo que creó fue la parte más básica del sistema, pero al mismo tiempo la más importante, ya que, como él mismo comenta, Perl fue la simplificación del uso de herramientas como awk, sed, shell script y C.

Leer más =>>

Los sectores del software

De siempre, se va viendo que las empresas de software se decantan por una forma de hacer las cosas, mientras que otras eligen otro camino distinto y, muy pocas, mezclan elementos de doctrinas tan establecidas y dogmáticas como son: el mundo del software libre, el mundo java o el mundo .net.

Leer más =>>

Comet ha muerto, ¡larga vida a websockets!

Leyendo el artículo de Joe Armstrong, sobre este mismo título, comenta que con la aparición de websockets (una nueva característica que ha aparecido en HTML5), el sistema comet y otros derivados, están abocados a la extinción.

Desde siempre, el sistema HTTP, llamado también web, ha sido un sistema cliente-servidor, donde el cliente siempre ha sido el navegador web, o cualquier herramienta que pudiese hacer una petición HTTP hacia un servidor, y el servidor, un ente pasivo, se encargaba de procesar la petición y retornar una respuesta. Nada más.

Leer más =>>

Sistemas de Mensajes Encolados (MQ)

Hace poco me he encontrado con un problema. Tengo un entramado de servidores y comunicaciones entre cada uno de ellos. Cada servidor puede notificar, ya sea vía SOAP, HTTP, XMPP o mediante cualquier otro protocolo, un evento o una información a otro servidor del entramado, con lo que cada servidor se configura de una forma específica, con una serie de nombres de dominio o IPs.

El problema viene al querer aplicar escalabilidad al proyecto. Cuando no solo hay un equipo implicado, sino que existen dos o tres, los cuales hay que configurar bajo ciertas circunstancias.

Leer más =>>

La Historia de Erlang

He encontrado un documento (en inglés) que redacta la historia de Erlang contada por su desarrollador principal, en los laboratorios de Ericsson:

Leer más =>>

PHP 5.3

Llego algo tarde, cosas del verano, pero voy a comentar algunas de las mejoras que vienen incluidas en la nueva liberación de PHP, la 5.3.

Para mi, esta versión, además de corregir fallos de la anterior, aporta características que le hacen acercarse aún más a la forma de programación profesional que viene dada con otros lenguajes como Java, C#, C++, Python o Ruby.

Leer más =>>

Lenguajes Funcionales para el Desarrollo Web

La web concurrente, a prueba de fallos y distribuida ya va siendo más fácil de desarrollar gracias a dos iniciativas paralelas. Una de ellas es Erlyweb, el entorno desarrollado por Yariv Sadan que permite realizar de forma fácil sitios web en lenguaje Erlang. La otra es Lift, un framework de desarrollo web para otro lenguaje funcional: Scala.

Leer más =>>

Escalado de Ruby on Rails

Después de liberar el primer proyecto escrito en Ruby on Rails, cuando lo pasamos a producción, nos dimos cuenta de que el sistema funcionaba realmente lento. En algunos casos, incluso, no respondía, con lo que buscamos información por internet y vimos:

Leer más =>>

Shoes: Programación fácil de GUI para Ruby

Cuando se realizan scripts para ciertas tareas para automatizarlas, pero que tienen que tomar datos del usuario, así como los datos que se presentan son útiles, tanto para rápida consulta, como para dar dicha información por teléfono o usarla en el código, otra interfaz, etc. surge el problema de que la consola se hace un paso como a otro mundo y resulta incómodo.

Leer más =>>

La liebre y la tortuga

En este cuento voy a intentar explicar lo que significa programar rápido y lo que significa programar de forma ágil. La primera forma sería la que se considera comenzar lo antes posible, para terminar lo antes posible... pero ciertamente, sin planificación, dar palos de ciego a ciertos niveles de implementación, es más lento que planificar la estrategia de desarrollo a priori. Vamos a verlo con el cuento de...

Leer más =>>

Reia: Ruby sobre Erlang

Al igual que en Java se pueden ejecutar lenguajes scripting tales como Ruby (JRuby), Python (Jython), Groovy... es posible hacer esto mismo en otros lenguajes, como C y Erlang.

Leer más =>>

Pruebas Unitarias

Después de haber estado adentrándome en TDD, muy poco a poco, he visto que el primer paso para hacer más fácil esta doctrina, son las pruebas unitarias.

Las pruebas unitarias son pruebas que se realizan sobre unidades aisladas de código, generalmente objetos, para asegurar que, con unos ciertos valores de entrada, siempre se reciben los mismos valores de salida, o los valores de salida que se esperan.

Leer más =>>

Ruby para programadores de PHP

Mi amigo Dani me indicó una página, ya que estamos más metidos en Ruby on Rails, que nos permitiría tener un sitio de referencia y comparación con las cosas, tal y como las hacíamos en PHP, cómo hacerlas ahora en Ruby on Rails.

Leer más =>>

Bussiness Process Management (BPM)

Según se puede ver en la definición de la wikipedia BPM es una metodología empresarial cuyo objetivo es mejorar la eficiencia a través de la gestión sistemática de los procesos de negocio.

Cuando una empresa tiene una actividad comercial, por ejemplo, basada en un almacén, con varios sistemas que requieren acceder a la base de datos para su manipulación (administrativos, atención al cliente, empleados de almacén...), cada uno con una misión específica, se deben de centralizar esa actividad de alguna forma para no caer en el problema de repetirnos a nosotros mismos (incumplir DRY) codificando una y otra vez lo mismo en varios programas distintos.

Leer más =>>

JavaScript y CSS no intrusivo en HTML

Cuando se pensaba en MVC, la capacidad para dividir las tareas obvias de tratamiento de datos, en lógica de negocio (el modelo), control de flujo de ejecución (el controlador) y la presentación de datos (la vista), aún quedaban en el aire muchos problemas en lo que respecta a las interaces, propiamente dichas, entre estas tres capas.

Centrándonos en la vista, existen miles de soluciones, para alejar al diseñador del código y al programador del diseño, pero aún así, cuando se habla de AJAX y desarrollos específicos... el programador tiene que tocar diseño y el diseñador preocuparse de lo que hará el código de servidor.

Leer más =>>

Lenguajes: Nuevas Versiones

En estos últimos días he visto los nuevos lanzamientos, o lo que se espera lanzar en varios "mundos" del desarrollo del software. Por un lado, hay varios puntos donde la interfaz pasado-futuro corre bastante peligro.

Los desarrolladores de ciertos lenguajes han creído conveniente romper con el pasado de uso de dichos lenguajes para acogerse a los progresos y prácticas más usadas actualmente. Haremos repaso.

Leer más =>>

Lenguajes de Programación

Revisando los tipos de lenguajes de programación existentes, llego a esta clasificación de los mismos:

  • Lenguajes imperativos
    • Lenguajes Spaguetti
    • Lenguajes Estructurados
    • Lenguajes Modulares
    • Lenguajes Orientados a Objetos
  • Lenguajes lógicos
    • Lenguajes declarativos
    • Lenguajes funcionales

Todos estos lenguajes de programación obedecen a una necesidad y/o ideología subyacente, que motivó el desarrollo del lenguaje con la metodología y sintaxis específica. A continuación describiré algo más en detalle cada uno de los anteriores.

Leer más =>>

Lenguajes esotéricos

Otro viernes... las oficinas a medio gas y toca trabajar... me da por buscar información, ahora que aprendo más sobre Ruby y Erlang y, topo con un lenguaje llamado COW. Un lenguaje esotérico.

Leer más =>>

Ruby: Esa pequeña Joya

El lenguaje de programación Ruby, creado por Yukihiro Matsumoto (a.k.a. Matz), fue ideado para ser un lenguaje que simplificara las actividades diarias y necesidades de programación de su creador, al igual que Perl (la otra joya) fuera creada por Larry Wall para cubrir sus necesidades como administrador de sistemas, Matz necesitaba un lenguaje que fuese igual o más potente que Perl, y con igual o mejor implementación de orientación a objetos que Python.

En su trabajo, Matz, usaba Perl, mientras desarrollaba Ruby en paralelo, hasta que fue lo suficientemente bueno como para reemplazarlo. El nombre de Ruby, por tanto, está motivado por la similitud, en simbología, con Perl. La primera liberación fue en 1995.

Leer más =>>

Gráfico Burndown (más de Scrum)

En estos días, después de haber pasado más de 24 horas en el último Sprint, sin descansar, donde comenté la experiencia de haber usado Scrum y XP en [otro artículo][1], volvemos a la carga.

Esta vez, con dos semanas de Sprint, bastante más tiempo, podemos realizar algunas técnicas más para poder medir cuánto vamos a tardar realmente en terminar el proyecto que tenemos entre manos.

Leer más =>>

Algoritmos heurísticos y algoritmos voraces

Realizando una práctica de la asignatura de programación 3, de la Universidad Nacional de Educación a Distancia (UNED), he podido comprobar la diferencia, en coste computacional y rendimiento, que supone realizar un algoritmo mediante un algoritmo heurístico, como puede ser el de vuelta atrás (backtracking) y un algoritmo voraz (reducción).

Leer más =>>

Scrum y XP en la práctica

Hace un tiempo escribí sobre Srum y XP, en ese mismo artículo, comentaba que estas técnicas, tanto Scrum como XP, eran dos técnicas que me gustaban mucho y que probaría en un futuro... bueno, pues ese futuro ya es presente :-)

La semana pasada, tuvimos, en la empresa en que trabajo, la presión de entregar un proyecto de forma rápida. Pensé que, en estos casos, lo que más se necesita es, como no, la organización. No se puede estar haciendo una actividad de desarrollo entre varias personas y estar con la cabeza preguntando siempre: ¿qué queda por hacer?; así que, me lancé, cogí dos tacos de post-it, uno de tamaño normal para las partes a desarrollar y otro de tamaño más pequeño, para las tareas que hay dentro de cada una de las partes.

Leer más =>>

Paradigmas y Patrones

Al desarrollar un programa, normalmente, el desarrollador elige un paradigma de programación y algún patrón de diseño, ya sea desarrollado por él, por su forma de trabajo a través de los años de experiencia, o tomado de alguna teoría o grupo de trabajo que lo haya conseguido transmitir.

Los grandes paradigmas de programación han llevado a que existan lenguajes de propósito general orientados únicamente a uno de estos paradigmas, o lenguajes que permiten, de una forma muy flexible, usar uno u otro de estos paradigmas.

Leer más =>>

Erlang y Asterisk: ErlAst

Para permitir una forma más dinámica de programar el plan de marcado (dialplan) de Asterisk, se emplea lo que se conoce como AGI. Viene a ser como el CGI pero a través de la entrada y salida estándares, stdin y stdout.

Como hacer fork dentro de la misma máquina y lanzar los intérpretes de los lenguajes que se suelen usar para AGI (PHP, Perl, Python...) trae consigo una carga considerable a una máquina que puede ya, de por sí, tener bastante carga con Asterisk, la aplicación de dialplan AGI, trae consigo la posibilidad de cambiar el medio de comunicación de entrada y salida estándar, por un socket abierto hacia otro equipo.

Leer más =>>

Programación Rápida de Webs

Cada lenguaje que es potencialmente útil para el desarrollo web, termina teniendo un framework para el desarrollo de aplicaciones web de forma rápida. A continuación pongo un listado de los lenguajes con sus respectivos entornos (los más usados y/o conocidos):

Leer más =>>

Serialización de Información

En los tiempos que vivimos de Internet, la programación de elementos aislados comienza a ser cada vez menos frecuente. Mientras que el desarrollo para Internet de aplicaciones tienden a ser más escalables, redundantes y tolerantes a fallos.

En ese aspecto, los programas deben de sincronizar sus datos con otros elementos de un mismo sistema o copias redundates en la red.

Leer más =>>

Erlang: concurrente, distribuido y en tiempo real

Después de tiempo desarrollando aplicaciones casi exclusivamente en PHP, me encuentro en el problema de que PHP no es, ni mucho menos, un lenguaje de uso general, sino un lenguaje desarrollado y pensado para la creación de aplicaciones web de forma rápida y, de forma controlada, útil y potente para grandes proyectos.

Leer más =>>

Cloud Software

Con este título, comienza a surgir una tendencia a usar más servicios en web. Esto viene acompañado de la liberación hace unos días de Google Chrome, el cual, aseguraban muchos expertos que no hace la competencia a Internet Explorer, Safari o Firefox, sino que se la hace a Windows.

Esto viene determinado porque el navegador se ha convertido en todo un sistema operativo en el que se ejecutan aplicaciones que se cargan de forma remota. Lo que ya habían visualizado hace años Sun con el uso de sus paquetes en forma de nombre de dominio y otros... pero de una forma mucho más transparente.

Leer más =>>