Nuestras noticias en tu móvil

Prueba nuestra nueva app para Android e IOs Podras ver todas las noticias, eventos y todas nuestras actualizaciones
  

Suscribete en nuestro Newsletter

Regístrate en nuestro Newsletter para estar al tanto de las noticias, talleres y podcast que tendremos próximamente
Suscríbete aqui

Foto del autor Jorge Urdaneta

Primeros pasos en Clojure

Clojure es un dialecto de Lisp para que se ejecuta sobre la JVM, CLR (.NET) y JavaScript. Soporta, promueve y facilita la programación funcional con estructuras de datos inmutables, es decir, que cuando las modificamos devuelven otra instancia con los cambios dejando la original sin cambios. Para ello usa varias técnicas que permiten hacerlo eficientemente.

El creador de Clojure Rich Hickey promueve el uso de la programación funcional evitando tener estados compartidos (como los que tenemos en atributos de clases y variables globales) escribiendo funciones "puras" que significa que su resultado sólo depende de sus parámetros y no crean ningún tipo de efectos secundarios en otras partes del programa (como cambiar el valor de un parámetro o atributo de una clase). Esto facilita el desarrollo de aplicaciones concurrentes, permite hacer caching de resultados de funciones que toman tiempo y minimiza el Mocking en pruebas unitarias.

Seguir leyendo...

Tags: clojure

Foto del autor Jorge Urdaneta

Flisol 2013 este sábado 27 de abril en varias ciudades de Venezuela

El festival latinoamericano de instalación de software libre en su edición 2013 será este sábado 27 de abril en varias ciudades de Venezuela. Ubica una sede cerca de ti en este enlace

Yo ofreceré dos charlas en la sede Maracaibo via Google hangout asi que podrán verlas desde cualquier lugar. Una será sobre el terminal linux y otra sobre herramientas de desarrollo software libre. Más información sobre horarios y otras charlas de la sede Maracaibo

Foto del autor Jorge Urdaneta

ElasticSearch Server. Primer libro sobre elasticsearch

book cover

A casi 3 años del lanzamiento de ElasticSearch al mercado ya tenemos un primer libro de la editorial packtpub --> [Enlace al sitio oficial del libro]. En mi caso yo preferí obtener la versión para el kindle en Amazon --> [Enlace al libro en Amazon].

Hoy comencé a leerlo. Es bastante "beginer friendly". Las instrucciones de instalación y primeras llamadas al API REST muy fáciles de entender. Recomiendo este libro para principiantes de ElasticSearch y en general de Full-text Search.

Foto del autor Jorge Urdaneta

Búsquedas en bases de datos sin LIKE

Introduciendo el error

Tienes que implementar una búsqueda de productos donde se indica una porción de texto que podría estar en cualquier parte de un campo. Buscas la documentación de SQL y ves que puedes usar LIKE. Pues facil:

SELECT * FROM producto WHERE nombre LIKE '%vaso%'

Aquello funciona perfecto en todas nuestras pruebas y entregamos la aplicación.

Los síntomas

Luego en producción con 2 millones de productos resulta que esa interfaz es una de las más usadas por los 200 usuarios de la empresa. ¡Catastrofe! llama el cliente diciendo que "el sistema está lentísimo".

El administrador de la base de datos dice que se deben optimizar esas consultas que haz hecho. Presenta como evidencia lo que tardan aquellos SELECT que usan LIKE que hiciste aquel día. Dice que por más que le define distintos tipos de índices, particiona la tabla, agrega más nodos, entre otras medidas nada logra bajarle los tiempos de ejecución.

¿Qué pasó?

Los índices de bases de datos tipo Btree pueden ser aprovechados (y aquello dependerá del manejador) si la consulta fuera LIKE 'vaso%' pues los valores están ordenados. Pero cuando hacemos '%vaso%' ya toca revisar cada uno de los registros de la tabla.

Full-text Search

Son técnicas para la organización de índices que faciliten la búsqueda de texto. Es toda una especialidad en el desarrollo de software. Varía mucho la manera en que se obtiene el texto, se organiza en un índice, se realiza la búsqueda y se ofrece un servicio o "motor de búsqueda".

Un motor de búsqueda que usamos a diario es Google. Robots (crawlers) van viendo páginas, obteniendo su texto, aplicando ponderaciones según la sección donde salgan y actualizando sus complejos índices. Luego cuando estamos buscando vemos cómo en pocos milisegundos se obtienen millones de resultados para nuestra búsqueda. Incluso si nos equivocamos en una palabra. Más aún mostrando porciones del texto donde salen las palabras que indicamos.

¿Cómo comenzar?

Algunos motores de bases de datos tienen algún soporte a Full-text Search. MySQL en su motor MyISAM (el peor de todos) lo ofrece en su manual. PostgreSQL también ver documentación. SQL Server de Microsoft también lo incluye y Oracle ofrece el producto "Oracle Text" para ello ver documentación.

En la mayoría de los casos no se necesita más que lo que trae el manejador. Al menos con el caso de la búsqueda de productos. Sin embargo cuando hablamos de aproximación por sonido, ponderación, porciones de texto donde se consiguen los términos, entre otros ya toca utilizar sistemas externos y mantenerlos sincronizados con la base de datos.

Apache Lucene (lucene.apache.org)

Es un motor de búsqueda super completo y maduro. Está hecho en Java y tiene un largo camino recorrido. Se podría decir que ha llegado a su madurez y goza de sus años dorados. Todo desarrollo de motores de búsqueda recientes include de alguna u otra manera a Lucene. Incluso hay implementaciones en otros lenguajes que varían en completitud, calidad y suporte. Acá una lista.

Su principal limitante es que está atado a un directorio local donde almacena los índices. No posee un proceso independiente que ofrezca un servicio en red y resulta difícil integrarlo en aplicaciones distribuidas modernas. Para mitigar esta limitación se han creado servidores de búsqueda distribuidos como Apache Solr y más recientemente ElasticSearch.

Conclusiones

Creo que he dejado acá varios apuntadores hacia dónde comenzar a leer. Son buenos tiempos para las búsquedas avanzadas. Toda aplicación moderna ofrece una caja de búsqueda en algún sitio. Plataformas de desarrollo como Google App Engine ofrecen apis para búsqueda de texto. Otro ejemplo es Amazon AWS con su Cloud Search. Siempre habrá una genial plataforma de búsqueda disponible para tu ambiente de desarrollo.

Foto del autor Jorge Urdaneta

Java el nuevo COBOL

O al menos eso leo por allí. Cada día son más populares lenguajes dinámicos y/o funcionales como Ruby, Python, JavaScript, Clojure entre otros. Más aún usando esos lenguajes se han creado muy buenos frameworks Web como Rails (ruby), Django (python), NodeJS (js), entre otros. Tampoco ayudan las plataformas en la nube como Heroku, Engine Yard, Google App engine, y otras que ofrecen maneras muy sencillas de desplegar aplicaciones usando estos lenguajes dinámicos.

Yo recuerdo una época en que importaba mucho el tiempo de ejecución a la hora de decidir la plataforma de desarrollo. Sigue importando para grandes aplicaciones Web como twitter, tumblr y google. Pero algunos de ellos utilizaron Java más como manera de optimizar una vez estaba el servicio en funcionamiento. Es decir, que en primera instancia no se eligió Java.

Con la rápido que una aplicación puede perder relevancia tiene sentido buscar la manera más sencilla y rápida de desarrollar. Es decir que a la final el tiempo de ejecución podría ser menos importante que el tiempo de desarrollo.

Esto es un total dejavú para quienes vimos el mismo argumento cuando se adoptó Java dejando poco a poco a un lado C++. Más aún para los que vieron COBOL pasar a "legacy".

La tendencia es clara:

  • mejor código ¿han visto lo bien que luce un código en Python?
  • mayor velocidad en el desarrollo
  • programación funcional
  • tipado dinámico o inferencia de tipos

Ojalá viva lo suficiente para ver la siguiente generación.

Tags: java

Foto del autor Jorge Urdaneta

Los juegos del Global Game Jam Maracaibo 2013

foto evento global game jam maracaibo

imagen cortesia EmprendoVenezuela.net

El pasado fin de semana del 25 al 28 de Enero 2013 tal como habíamos anunciado se dió el Global Game Jam sede Maracaibo. La gente de Emprendo Venezuela tiene una muy completa nota de prensa sobre los pormenores del evento.

Fueron 2 los juegos que se desarrollaron:

Descarguenlos, juegenlos, comenten, vean el código fuente, modifiquenlo y no menos importante ¡Diviertanse!.

Tags: ggj eventos

Foto del autor Jorge Urdaneta

Eclipse Orion

Eclipse ha creado nuevo sitio Web donde podremos usar su nueva IDE basada en HTML5 y JavaScript Orion. Desde la página del proyecto se pueden bajar la aplicación y ejecutarla en su computadora si prefieren.

Crearse una cuenta es muy sencillo y desde el editor podemos trabajar con repositorios github y ftp. Lo más interesante es la sincronización. En el caso de github es un muy completo cliente gráfico para git donde podemos desde el git status ver qué cambió, stage it, commit y push a nuestro repo github. No tuve chance de probar repositorios FTP.

Crea tu cuenta en OrionHub.org hoy --> OrionHub.org

Aplicación para Chrome

Me tomé un momento para hacer la app para Chrome que añade el ícono. Descagar --> Orion Chrome App

Foto del autor Jorge Urdaneta

Ruby y su debil encapsulamiento

Estaba leyendo sobre programación orientada a objetos en Ruby cuando me encuentro con que todas las variables de instancia son privadas. Más adelante veo que aún así es posible modificarlas directamente rompiendo el encapsulamiento.

Acá una clase ejemplo que tiene 2 variables de instancia.

                class User
                    def initialize(email,name)
                        @email, @name = email, name
                    end
                
                    def to_s()
                        "#{@name} <#{@email}>"
                    end
                end

En teoria tanto @name como @email son privadas por defecto y no deberíamos poder cambiarlas desde el objeto directamente. Pues resulta que todo objeto tiene un método "instance_eval" que permite leer y escribir variables de instancia.

                u = User.new('[email protected]','Jorge')
                u.instance_eval { @name = "Carlos" }
                puts u
                
                => Carlos <jorge.urdaneta@gmail.com>

Fácilmente es posible leer y escribir variables de instancia rompiendo el principio de encapsulamiento.

Igual Ruby me sigue pareciendo un lenguaje super interesante. Este es sólo un detalle algo decepcionante pero bueno... a todos los lenguajes les vemos alguna falla como esta.

Tags: ruby