Índice

|2018 |2017 |2016 |2015 |2014 |2013 |2012 |2011 |2010 |2009 |2008 |2006 |

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 →

Una semana con Golang

En 2012 escribí un artículo sobre el lenguaje Go y desde entonces no me tomé mucho en serio esa plataforma. Esta última semana después de 6 años y viendo el auge que está teniendo me he propuesto hacer un proyecto. ¿Lo revisamos?

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 →

Altenwald Books: Cómo se hizo

A principios de junio publicamos la web de Altenwald Books para la venta de libros técnicos en castellano y aprovechando la salida del segundo volumen de Erlang/OTP. Esta web ha sido creada desde cero en Phoenix Framework hasta conseguir tener un sitio ecommerce completamente funciona, ¿quieres saber cómo se hizo?

Leer más →

Lenguaje Elm: Código Cliente sin Errores

El lenguaje Elm es una de esas joyas que encuentras en el mundo de la programación y una vez lo aprendes te preguntas porqué no llegó antes. Las promesas del lenguaje son impresionantes y el hecho de desarrollar en el navegador web solo empleando el lenguaje da muchas ventajas sobre JavaScript y sus frameworks, ¿sabes por qué?

Leer más →

Competiciones y Programación Funcional: Ahora en Elixir

El mes pasado hice algo de programación funcional usando Erlang y me quedó pendiente mostrar cómo se vería desde otro lenguaje con una sintaxis un poco más simpática como Elixir. Vamos a verlo.

Leer más →

Competiciones y Programación Funcional

Tras ver la definición de la función global:random_exit_name/3 la cual sugiere la eliminación de un proceso y la asignación de otro a un nombre para evitar colisiones, ¿qué pasaría si la elección estuviese en más de dos elementos?

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 →

Haciendo Whatsapp (III): Mensajes y Recursos

Al construir nuestro sistema de chat nos encontramos ante un problema: los dispositivos móviles no son confiables. No mantienen una conexión constante a Internet y pierden la conexión fácilmente. Por otro lado XMPP está ideado para conexiones permanentes y confiables a Internet. ¿Cómo podemos usarlo sin perder información?

Leer más →

ephp y los Analizadores Sintácticos

Estos días me he propuesto seguir mejorando ephp, mi pequeño proyecto para poder incrustar código PHP dentro de aplicaciones hechas 100% en Erlang/OTP aprovechando las capacidades de Erlang/OTP y la facilidad de escribir código en PHP. El problema está en poder parsear ciertos aspectos de PHP que son un poco extraños, ¿adivinas cuáles?

Leer más →

Haciendo Whatsapp (II): Servidor y Autenticación

Uno de los grandes problemas al hacer una aplicación de chat para el móvil es la poca fiabilidad de las redes móviles. XMPP no fue diseñado para este tipo de escenarios pero las últimas versiones de ejabberd y MongooseIM vienen a darnos la solución, ¿implementamos nuestro chat?

Leer más →

Haciendo Whatsapp (I): Eligiendo Protocolo

Este mes he revisado las empresas a las que he ayudado a implementar sistemas de chat basados en ejabberd o MongooseIM, son ya 9 las empresas que han confiado en mi para ayudarles en España, Francia, UK, Luxemburgo, Finlandia y Estados Unidos. Todos intentan copiar los pasos de WhatsApp, ¿cómo montan sus sistemas?

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 →

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 origamicall, 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 →

Vagrant: Recursos en Red

Hace dos años escribí sobre Vagrant. Desde entonces se ha convertido en mi herramienta favorita para el desarrollo de software. No solo permite construir una máquina a medida del entorno donde correrá la aplicación, también permite la construcción de un entorno de trabajo incluso publicando las máquinas en la red local. ¿Has pensado en tener tu propio CPD en tu red local?

Leer más →

Phoenix Framework: Un Rails sobre Erlang/OTP

PHP, Rails, Django, Catalyst, ChicagoBossPhoenix 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 →

Balanceo con Hash Consistente

Últimamente he estado trabajando en sistemas que requieren de un sistema de balanceo ciego. Esto quiere decir que no conocemos el número de carga soportada en cada sistema, lo hacemos a través de un algoritmo matemático basado en la probabilidad, e incluso parece fácil, muchos lo usan en aplicaciones: cliente para memcached, o como el CEO de Travis-CI. ¿Conocías este sistema?

Leer más →

Conectores de Mysql en Erlang

Si te encuentras en la necesidad de conectar tu proyecto de Erlang/OTP con Mysql y tienes dudas de cual es el mejor driver para utilizarlo te comentamos algunas de las especificaciones, ventajas y desventajas de cada uno de los controladores que se han desarrollado y que se encuentran disponibles en Internet.

Leer más →

Hack: Facebook conquista PHP

Hoy en PHP-Classes he leído un artículo en el que se menciona una posible pugna entre el equipo de desarrollo de PHP y Facebook. Todos saben que Facebook fue construido empleando este lenguaje de programación y que ha invertido tiempo y dinero en desarrollar herramientas que lo mejorasen como HipHop (o HHVM), ¿Quiere Facebook hacerse con el control de desarrollo de PHP?

Leer más →

Qué, Cómo... mejor, ¿Por qué?

Uno de los avances más grandes en el desarrollo del software fue el intento de estandarizar, industrializar o sistematizar el proceso de creación del software. Este esfuerzo nos ha llevado a disponer de técnicas de gestión del tiempo, procesos y tareas. Ha evolucionado la generación de software. ¿Qué debemos hacer? Indica el análisis. ¿Cómo lo hacemos? Indica el diseño… pero, ¿Por qué lo hacemos?

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 →

Vagrant: construye tu entorno de trabajo

De siempre me he dado cuenta de que muchas veces intento modificar algún proyecto, algún entorno que requiere de un entorno de trabajo muy específico y me paso unas cuantas horas rehaciendo ese entorno en mi PC a través de técnicas como rvm, kerl o más llanamente con el update-alternatives de Debian. Pero, ¿cómo podría tener un entorno de trabajo desde cero y en muy poco tiempo funcionando?

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 →

SOA 2.0: XMPP como ESB para el IoT

Hace tiempo escribí una entrada sobre la posibilidad de utilizar XMPP como elemento para SOA (service oriented arquitecture, arquitectura orientada al servicio), hoy vuelvo de nuevo con la idea y amplio un poco más gracias a este artículo (en inglés) que me ha llamado la atención sobre el hecho, ya no solo como sistema SOA, sino también como ESB (enterprise service bus, bús de servicio empresarial), para mantener comunicación entre todos los recursos de un sistema de la información.

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 →

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 →

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 (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 →

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 →

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 →

Behaviours: la potencia de OTP

Una de las potencias de Erlang y el framework OTP, son los comportamientos (o behaviours), estos se basan en la [Inversión de Control][1], es decir, que existe un código base que se autocompleta a través de la implementación de unos callbacks definidos en la plantilla, que deben de ser implementados para que todo funcione correctamente.

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 →

UUID: Identificador Único Universal

Últimamente, cada más sistemas, y cada más sitios emplean algo llamado UUID, cuyas siglas vienen a decir: Universally Unique ID; aunque suene algo arrogante, el cálculo de un UUID casi que podríamos decir que garantiza el que sea único. Es más, su grado de colisión es tan bajo que si lo colocásemos como identificador de clave primaria de una tabla que alberga elementos recogidos aleatoriamente de otras tablas de bases de datos de todo el mundo, que hayan empleado este tipo de dato, garantizamos que no habrá repetidos.

Suena excitante, pero…

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 →

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 →

Una clase/objeto/proceso, Una responsabilidad

Una clase, una responsabilidad, fue uno de los textos que se me quedó grabado tras la lectura del libro Diseño Ágil con TDD de Carlos Blé.

Leer más →

NodeJS: el servidor JavaScript

El servidor Node.js vió la luz de manos de Ryan Dahl en 2009, la motivación, según la entrevista que BostInno le realizó en enero de 2011, es la arquitectura de E/S orientada a eventos.

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 →

NewSQL: dos vías para mejorar SQL

Últimamente hay muchos medios (como SDJournal) que van haciendo eco de una nueva versión, según algunos más fácil, de SQL.

Según vemos en la página oficial del proyecto, NewSQL dispone a día de hoy de dos posibles gramáticas a implementar. Una de ellas está basada en la Java Database (JDB) y otra sería la evolución propia de SQL (SQL II, o S2). Aún no se ha decidido qué versión será la empleada como newSQL, por lo que, podemos decir que es un proyecto a futuro y no hay implementación real de momento.

Leer más →

Selenium: probando aplicaciones web

Bueno, ya tocaba, después de dedicar varios apartados al desarrollo web, toca dedicarle un pequeño, aunque importante apartado a una herramienta de comprobación (tests) como es Selenium.

Leer más →

DJJob: Trabajos en background para PHP

Hace tiempo que vamos encontrándonos de forma recurrente con este problema… ¿cómo conseguir que PHP realice un trabajo en background e ir consultando cuánto le falta o cuando ha terminado dicho trabajo?

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 RSS para poner noticias en una web, en Ruby on Rails, y me gustó la simpleza con la que se parsean los códigos y se pueden presentar las noticias, sin mucho esfuerzo, y apenas líneas de código. Unos días más tarde, me tocó hacerlo también en PHP… e 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 →

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 →

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 →

Rails 3.1: Mejorando las Vistas

Puf, no sé ni por donde comenzar, han sido tantas cosas las que he visto en el cambio de la versión de Rails 3.0 a esta nueva liberación… pero no solo por las mejoras que conlleva o tiene esta nueva liberación, sino más bien por esa cantidad de elementos que se anexan y que no conocía… ya me vale :-P

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 Demoware, o quizás sea por puro vicio… ya eso lo dejo a opinión popular :-P

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 →

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 →

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 →

ChicagoBoss: Web y Erlang cada vez más cerca

Hace un tiempo, Juanse, un compañero de trabajo, me envió un enlace de un framework desarrollado por Evan Miller que se llama ChicagoBoss. Este framework ha sido concebido con Ruby on Rails en mente, no es de extrañar cuando a lo largo de toda la documentación, se hacen referencias a cosas de Ruby on Rails, y las similitudes son tan extraordinariamente grandes, para ser dos lenguajes bastante diferentes.

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 yield

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 →

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 →

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 →

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 →

ETL: Revisando el Software

Hace ya más de un año que escribí una entrada sobre ETL, donde comentaba los principios que lo fundan y algún que otro software disponible para realizar ETL. Revisando la entrada, me he dado cuenta de que el software que entonces encontré, ha cambiado bastante, incluso uno de ellos ha desaparecido como tal.

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 →

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 →

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 →

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 →

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

Actualización: ver nueva entrada.

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 →

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 →

ETL: Extracción, Transformación y Carga

Este término, ETL, se acuña a la mayoría de transformaciones de datos que deben de realizar empresas para compatibilizar sus datos con los de sus proveedores y/o clientes.

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 →

REST: Representational State Transfer

Después de haber usado durante unos años sistemas RPC para la compartición de la información, XML-RPC, SOAP y Elm; llego a REST, un concepto que mencionó primero un compañero de trabajo, Juanse, y después vi en profundidad en un curso de Ruby on Rails que se organizó en la empresa en la que trabajo (gracias Dani por ese curso tan completo).

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 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 →

Proxy: Patrón de Diseño para Seguridad

Entre los patrones de diseño que ya comenté en otro post, quiero agregar uno que dejé pasar, y al que he retomado hace poco, tanto de forma teórica, como para implementación en algunos desarrollos. Es el patrón de diseño Proxy.

Este patrón es usado para agregar una capa de seguridad sobre un sistema ya desarrollado y que es totalmente ajeno a este aspecto. Es decir, podemos desarrollar un sistema de control de almacén en el que solo tendremos en cuenta el stock en sí del almacén y, para agregar los usuarios, permisos y demás, entonces, agregamos el la capa proxy que se encarga de asegurar el acceso solo a los usuarios que deban de poder acceder.

Leer más →

Desarrollo Web

Hace tiempo, comenté acerca del desarrollo web en plataformas como Java, PHP, Erlang, Python… en ese momento, veía la maraña en la que está tejida la red de redes, el abanico de posibilidades a la hora de desarrollar una aplicación web y comenzaban a sonar términos como CRUD, SOA, MVC, ActiveRecord, Scaffolding…

Es una verdad que cada entorno, en cada lenguaje, ha ido implementando una serie de características que facilitasen y acelerasen la creación de entornos web, de toda índole, en poco tiempo y, una vez aislada la idea base, dado un nombre e incluso un acrónimo de tres letras (como el buen Jargon file manda :-) ), se convierte en un concepto de estudio e implementación en el resto de lenguajes.

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 →

Desarrollo Orientado a Pruebas (TDD)

El desarrollo orientado a pruebas (TDD, test driven development) es una forma de desarrollar basándose en que un cierto algoritmo responda de una forma específica a unos datos específicos. Para explicar mejor esto, voy a explicar primero el enfoque tradicional y luego expongo las mejoras que introduce esta forma.

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 →

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 →

Documentación de Proyectos Libres

Se ha hablado mucho sobre la escasez de documentación en proyectos libres, tanto de manuales técnicos o de administración, que expliquen como instalar y administrar el software, como manuales de usuario, que expliquen cómo realizar las actividades que propone el software realizar.

Es claro que, cuando una persona aprende a desarrollar, a programar, se sienta frente al ordenador y comienza esa frenética batida de golpes contra el teclado, una pausa para ver los resultados, un momento de pensar en el siguiente paso, y otra vez a teclear… en esos momentos, la documentación, si se piensa hacer, es algo que se estima para un futuro… para cuando se dé a conocer.

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 →

Desmitificando: software y su mantenimiento

Desde siempre, cuando una empresa apuesta por software privativo frente a software libre o de fuente abierta, lo hace por tener cubiertas las espaldas, por tener garantías y saber que hay una empresa que responde por ese software, tanto en mantenimiento, como en incidencias graves, que pueden llegar a pagar indemnizaciones.

Este es el principal motivo de que se abogue por software propietario, simple y llanamente. Cualquier otro motivo es un mito, como cualquiera de los siguientes:

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.

Pero fuera de este entorno, en el background de las grandes empresas donde todo debe de ser escalable, redundante y en alta disponibilidad, y sobre todo cuando las aplicaciones no son para servidores web, usar un lenguaje que no está preparado para el desarrollo deseado, puede conllevar muchos quebraderos de cabeza, e incluso, no alcanzar el objetivo deseado.

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 aplciaciones 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 →

MVC en PHP: ¿es correcto?

Después de haber realizado una investigación sobre el tema, he hallado una serie de enlaces, donde se destacan cosas como que el único MVC oficialmente creado es phpMVC, o cosas como que MVC no es para PHP.

En principio, buscando alternativas, además de phpMVC tan solo encontré Kenda, el cual se encuentra en un estado muy inicial y con muy poco apoyo.

Leer más →