Translate

miércoles, 2 de enero de 2013

Encapsular lo que varia




Termine el libro de Patrones de Erich Gamma. La verdad muy bueno, me intereso mucho como muestra los patrones desde un lenguaje dinamicamente tipado como SmallTalk y desde otro estaticamente tipado como C++. Les dejo unos párrafos que me gustaron, que tratan de describir la mayoría de los patrones de comportamiento:

Encapsular aquello que puede variar es el tema de muchos patrones de comportamiento. Cuando un determinado aspecto de un programa cambia con frecuencia, estos patrones definen un objeto que encapsula de dicho aspecto. De esta manera, otras partes del programa pueden colaborar con el objeto siempre que dependan de ese aspecto. Los patrones normalmente definen una clase abstracta que describe el objeto encapsulado, y el patrón toma su nombre de ese objeto. Por ejemplo:

  • Estrategia: encapsula un algoritmo.
  • Estado: encapsula un comportamiento dependiente del estado.
  • Mediador: encapsula el protocolo entre objetos.
  • Iterador: encapsula el modo de acceder y recorrer una colección. 

Estos patrones describen aspectos de un programa que probablemente cambien. La mayoría de los patrones tienen dos tipos de objetos: el nuevo objeto que encapsula y el objeto existente que usa un nuevo objeto creado. Normalmente si no fuera por el patrón, la funcionalidad de los nuevos objetos seria una parte integral de los existentes. Por ejemplo, el código de una Estrategia probablemente estaría ligado al contexto de la estrategia, y el código de un Estado se encontraría implementado directamente en el contexto del estado.

Pero no todos los patrones de comportamiento de objeto dividen así la funcionalidad. Por ejemplo, el patrón Chain of Responsibility trata con un numero indeterminado de objetos, cada uno de los cuales puede que ya exista en el sistema

El patrón Chain of Responsibility muestra otra diferencia entre los patrones de comportamiento: no todos definen relaciones de comunicación estática entre las clases. El patrón Chain of Responsibility describe el modo de comunicación entre un numero indefinido de objetos. Otros patrones usan objetos que se pasan como parámetros.

Como conclusión solo les puedo recomendar que lean "Patrones de Diseño" de Erich Gamma.

domingo, 30 de diciembre de 2012

Feliz 2013!!



Feliz año nuevo 2013 para todos, en especial a todas las persona que nos siguen, comentan o simplemente leen cada tanto.

Mis mejores deseos para todos!!

jueves, 27 de diciembre de 2012

JEdit versión 5 soporta Scala y Dart


Si no conocen JEdit, que les puedo contar? Es un editor de texto hecho en Java por lo tanto es multiplataforma. Es muy bueno, soporta plugins y más de 200 lenguajes, es configurable y de licencia GPL; lo único que le falta es que cebe mate.

Yo lo uso mucho en linux porque en linux no esta el notepad++ que personalmente me parece muy bueno también.

Lo interesante de la noticia es que ahora en su versión 5 va a soportar Scala y Dart. Se puede ver el crecimiento de este editor pero tambien de estos dos lenguajes que cada vez más se van haciendo espacio.

Dejo links:
http://www.infoq.com/news/2012/12/jedit5
http://www.jedit.org/

miércoles, 26 de diciembre de 2012

Nuevo Grupo de Scala en español

Invito a toda la gente que le interese el lenguaje Scala que se sume al nuevo grupo de Scala de Google+
La idea es formar la comunidad de Scala de habla hispana y compartir información, dudas, discusiones, etc...

Dejo link:
https://plus.google.com/u/0/communities/108530613408854767618

Mapa de Linux

Una forma muy graciosa de ilustrar el mundo linux:


martes, 25 de diciembre de 2012

Test-drive data visualization in the R language.

La gente code school ha publicado un curso gratuito sobre el lenguaje R. El lenguaje R es un lenguaje funcional en realidad R es un lenguaje y entorno de programación para análisis estadístico y gráfico.

Si vemos la wiki, nos dice: Se trata de un proyecto de software libre, resultado de la implementación GNU del premiado lenguaje S. R y S-Plus -versión comercial de S- son, probablemente, los dos lenguajes más utilizados en investigación por la comunidad estadística, siendo además muy populares en el campo de la investigación biomédica, la bioinformática y las matemáticas financieras. A esto contribuye la posibilidad de cargar diferentes bibliotecas o paquetes con finalidades específicas de cálculo o gráfico.

R se distribuye bajo la licencia GNU GPL y está disponible para los sistemas operativos Windows, Macintosh, Unix y GNU/Linux.

Es buenisimo!

Dejo el link:
http://tryr.codeschool.com/

domingo, 23 de diciembre de 2012

ATDD By Example


Le gente de InfoQ nos regalan un libro de TDD. Se preguntan porque la A, es de Acceptance

Recordemos que Acceptance Test Driven Development es una práctica que se logra teniendo una madurez utilizando TDD. ATDD dice que los criterios de aceptación pueden ser llevados a pruebas unitarias y de esta forma el proceso garantiza que el cliente dispone de un mecanismo automático para decidir si el software cumple con sus requisitos.

Con ATDD, el equipo de desarrollo tiene un objetivo específico satisfacer las pruebas de aceptación, que los mantienen continuamente dentro de lo que el cliente realmente quiere

Dejo el link:
http://www.infoq.com/articles/atdd-by-example-book

jueves, 20 de diciembre de 2012

¿Te atreves a soñar?

Un buen video para emprendedores, muy bueno:


7 base de datos en 7 días



Se acuerdan que hable de un libro muy bueno llamado 7 lenguajes en 7 días, bueno Eric Redmond y Jim R. Wilson lanzaron un nuevo libro llamado 7 base de datos en 7 días. En el recorre base de datos relacionales y NoSQL. Las bases que se muestran son Redis, Neo4J, CouchDB, MongoDB, HBase, Riak, y Postgres. La idea es no saber todas, pero si sus particularidades y porque elegir una o la otra.

Dejo el link:
http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks

martes, 18 de diciembre de 2012

Guía práctica sobre el software libre




Quiero compartir la "Guía Práctica sobre Software Libre su selección y aplicación local en américa LATINA y el Caribe" con ese nombre debe ser un libraso.

El libro empiza algo así:

"En 2001, al comenzar UNESCO a brindar apoyo al movimiento de software libre,se cumplieron 18 años desde que lanzamos el movimiento y empezamos a desarrollar el sistema operativo GNU. Hemos recorrido un largo camino.

En 1984 era imposible usar un sistema moderno de computadora sin instalar un sistema operativo propietario, que hubiera sido entonces obtenido bajo una licencia de uso restrictiva. Nadie tenía permiso para compartir libremente el software con otros usuarios y prácticamente todos los usuarios tenían bloqueado el acceso que les hubiera permitido ajustar el software a sus propias necesidades. Los propietarios del software habían levantado paredes para dividirnos.

El Proyecto GNU fue fundado para cambiar esto. Su primera meta: desarrollar un sistema operativo portable compatible con Unix que fuera hecho 100% de software libre. Ni 95%, ni 99.5%,sino 100%, de manera que los usuarios fueran libres de distribuir el sistema completo y de  cambiar y contribuir con cualquier parte de él. El nombre del sistema, GNU, es un acrónimo recursivo que significa "GNU no es Unix"­­ como manera de rendir homenaje a Unix y a la vez indicar que GNU es algo diferente. Técnicamente GNU es como Unix. Pero GNU le da a sus usuarios libertad, y Unix no.."

Lo que no sabia es que la UNESCO brindaba apoyo al software libre.

Dejo link:

http://unesdoc.unesco.org/images/0015/001560/156096s.pdf

Libro de CSS avanzado gratuito.


Quiero compartir el siguiente libro de css avanzado, entre los temas estan:
Parece bueno, a leerlo entonces.
http://www.librosweb.es/css_avanzado/pdf/css_avanzado.pdf

lunes, 17 de diciembre de 2012

Yield en scala y en ruby


Yield es una palabra reservada en diferentes lenguajes por ejemplo en Ruby, podemos definir un código, dejando una definición a medias para poder ampliarla en el momento el que sea llamada, por ejemplo:


def ordena( vector )
     (0..(vector.size-2)).each do |i|
         k = i
         (i+1..(vector.size-1)).each do |j|
             k=j if yield(vector[k], vector[j])
         end
         if k!=i
             tmp = vector[k]
             vector[k] = vector[i]
             vector[i] = tmp
         end
     end
end

vector = [ 5, 3, 2, 4, 6, 1 ]

ordena(vector) do |e1, e2|
    (e1 > e2)
end

puts vector  # [1, 2, 3, 4, 5, 6]

ordena(vector) do |e1, e2|
    (e1 < e2)
end

puts vector  # [6, 5, 4, 3, 2, 1]

Como se ve en el ejemplo a ordena se le pasa un vector y también un pedazo de código o closure, y este se ejecuta donde se encuentra la palabra yield. Como se puede ver se aprovecha mucho que ruby es dinámicamente tipado.

Pero en Scala es diferente, yield es usado para retornar resultados múltiples desde una iteración. Por ejemplo:

val range = 1 to 5
for(val i <- range) yield i+1 //RandomAccessSeq.Projection[Int] = RangeM(2, 3, 4, 5, 6)

Como podemos ver con el for se itera y con yield es como se van acumulando los resultados.

Por lo visto, cambia mucho el uso de Yield desde Ruby a Scala. Cuidado con esto puede ser causa de muchas errores!


domingo, 16 de diciembre de 2012

Tu código va a cambiar el Mundo!


Esta pagina es una iniciativa muy buena, lo que nos permite es ayudar a proyectos sin fines de lucro que se conciben para ayudar.


Colaborar es algo más que habitual en nuestro sector: desde quien participa en algún proyecto de software libre hasta quien libera sus propios trabajos cediéndolos a la comunidad, pasando por los que realizan desinteresadamente alguna web para una asociación que conozca.

Pues precisamente ese lado solidario es el que se quiere emplear en esta página creada por la Fundación hazloposible, aunando a las ONG que requieran ayuda y a los profesionales que quieren ofrecerla pero quizá no saben muy bien cómo.

Dejo el link:
http://tucodigovaacambiarelmundo.org/

Infografía: historia de la virtualización