Translate
lunes, 27 de diciembre de 2010
La propiedad intelectual tiene más valor cuando se comparte
Más de Erlang
El case:
1> Animal = "dog".
2> case Animal of
2> "dog" -> underdog;
2> "cat" -> thundercat
2> end.
underdog
3> case Animal of
3> "elephant" -> dumbo;
3> _ -> something_else
3> end.
something_else
el _ es como el “default” de c, c++, java, etc...
El si es un tanto diferente a lo que conocemos, el si puede tener varias condiciones y varios resultados:
8> X = 0.
9> if
9> X > 0 -> positive;
9> X < 0 -> negative;
9> true -> zero
9> end.
Similar a javascript se puede asignar una función a una variable:
16> Negate = fun(I) -> -I end.
#Fun
17> Negate(1).
-1
18> Negate(-1).
1
Podemos usar funciones con listas
1> Numbers = [1, 2, 3, 4].
[1,2,3,4]
2> lists:foreach(fun(Number) -> io:format("~p~n", [Number]) end, Numbers).
1
2
3
4
ok
lists:foreach permite aplicar una función a cada elemento de una lista.
Si queremos filtrar los menores a 3 por ejemplo, es muy facil con lists:filter :
11> Small = fun(X) -> X < 0 end.
12> lists:filter(Small, Numbers).
[1,2]
EL lenguaje también provee una forma de saber si todos los elementos de una lista cumplen con un filtro:
15> lists:all(Small, [0, 1, 2]).
true
16> lists:all(Small, [0, 1, 2, 3]).
false
o si alguno lo cumple:
17> lists:any(Small, [0, 1, 2, 3]).
true
18> lists:any(Small, [3, 4, 5]).
false
Con foldl se puede hacer que una variable sea mantenida mientras la función esta iterando por la lista:
28> Numbers.
[1,2,3,4]
29> lists:foldl(fun(X, Sum) -> X + Sum end, 0, Numbers).
10
Como podemos ver la variable Sum se va pasando por cada ejecución de la función que acumula, y al comenzar la ejecución Sum = 0.
Hasta aquí hemos recorrido a vuelo de pájaro Erlang, un lenguaje original que nos muestra que se pueden hacer las cosas de diferente modo.
martes, 21 de diciembre de 2010
Top de lenguajes de programación para 2011 según eweek
Java
C
C++
C#
Javascript
Perl
PHP
Visual Basic
Python
Ruby
Objective C
Actionscript
Groovy
Go
Scala
Erlang
Clojure
F#
Dejo link:
http://www.eweek.com/c/a/Application-Development/Java-C-C-Top-18-Programming-Languages-for-2011-480790/?kc=rss
lunes, 20 de diciembre de 2010
Frase
La complejidad es uno de los principales problemas de la tecnología informática. Y que una y otra vez caemos en el error de que para resolver la complejidad lo que hace falta es todavía más complejidad.
Totalmente de acuerdo!!
domingo, 19 de diciembre de 2010
Erlang
jueves, 16 de diciembre de 2010
Google regala los productos de Instantiations a la Fundación Eclipse
Google ha donado WindowBuilder Pro (que incluye Swing Designer, SWT Designer y GWT Designer) y CodePro Profiler a la comunidad de código abierto y que en la primera mitad de 2011 pasarán a ser nuevos proyectos de Eclipse.
Estos productos nos ayudan a desarrollar de forma fácil interfaces gráficas con java y eclipse.
Que grande google!!!
Dejo links:
http://googlecode.blogspot.com
http://code.google.com/javadevtools/eclipse-donation-faq.html.
miércoles, 15 de diciembre de 2010
Masterbranch
domingo, 5 de diciembre de 2010
Clojure
Clojure es Lisp en JVM. Es decir entendiendo Clojure entenderemos List, y entendiendo List entenderemos Clojure. Después de Fortran, List es el lenguaje más viejo. List es un lenguaje funcional pero no es un lenguaje puramente funcional.
Una de las más importantes características de Clojure es que corre en la JVM.
Deben bajar la consola para Clojure de http://clojure.org/ y empecemos haciendo un Hola Mundo!
user=> (println "Hola Mundo!")
Hola Mundo!
nil
Veamos llamadas a funciones:
user=> (- 1)
-1
user=> (+ 1 1)
2
user=> (* 10 10)
100
user=> (mod 5 4)
1
user=> (/ (/ 12 2) (/ 6 2))
2
user=> (+ 2 2 2 2)
8
user=> (- 8 1 2)
5
user=> (/ 8 2 2)
2
user=> (+ 3.0 5)
8.0
user=> (+ 3 5.0)
8.0
Clojure maneja los tipos de java:
user=> (class true)
java.lang.Boolean
user=> (class (= 1 1))
java.lang.Boolean
Podemos usar el condicional:
user=> (if true (println "True it is."))
True it is.
nil
user=> (if false (println "true") (println "false"))
false
nil
Veamos las listas:
user=> (list 1 2 3)
(1 2 3)
user=> '(1 2 3)
(1 2 3)
vectores:
user=> [:hutt :wookie :ewok]
[:hutt :wookie :ewok]
Mapas:
user=> {:chewie :wookie :lea :human}
{:chewie :wookie, :lea :human}
Definir funciones:
user=> (defn force-it [] (str "Use the force," "Luke."))
#'user/force-it
y usarla:
user=> (force-it)
"Use the force,Luke."
Este es un pequeño y humilde paseo por Clojure, si deben aplicar programación funcional en una aplicación Java es la herramienta justa.
Dejo links:
http://clojure.org/
Io
jueves, 25 de noviembre de 2010
Apache Wave In A Box
Cuando Wave fue abandonado, se comentaba que Google liberaría el proyecto con el nombre de Wave In A Box, pero sin seguir desarrollándolo. Pus bien, hoy Wave In A Box ya tiene a alguien que le empuje: la fundación Apache.
La fundación va a alojar el proyecto junto a los demás y va a impulsarlo con un equipo de desarrollo al igual que se hace con el servidor Apache. El producto se llamará Apache Wave In A Box, y la idea es que sirva para que cualquiera lo pueda instalar en un servidor sin problemas.
Según Apache, adoptan Google Wave porque hay bastante gente interesada en la continuidad del proyecto. Entre ellos están la recién comprada Novell, SAP o incluso la Marina de los EEUU.
Aunque Google Wave no tuvo una muy buena acogida, su tecnología es muy buena y compleja, y merece la pena ser guardada y desarrollada. Habrá que ver cómo evoluciona ahora Apache Wave y el tratamiento que le da la fundación Apache, y si consigue que Wave sea más aceptado de lo que lo fue con Google.
Dejo link:
miércoles, 24 de noviembre de 2010
¿Porque optar por soluciones Open Sources a la hora de desarrollar?
Como principal ventaja del software Open Sources se pensaría en el bajo costo dado que se relaciona Open Sources como gratis y esto no es así. Es un error pensar en el Open Sources como una solución barata dado que el software puede tener costo, pero además el software tanto Open Sources como comercial tiene costos ocultos. Como costo oculto podríamos nombrar la falta de soporte, o falta de documentación. Estos costos ocultos hay que tenerlos en cuenta a la hora de optar por un software.
El uso de frameworks open sources para el desarrollo de aplicaciones trae aparejado muchos beneficios que dependen de la comunidad que respalde el framework; cuanto mayor es la comunidad mayor va a ser el soporte, la documentación, calidad y los usuarios que usan el framework:
Soporte: El soporte brindado puede ser mayor a una aplicación comercial y la información suministrada por foros de problemas es basta.
Documentación: Si bien no es común que un software open source este bien documentado, la información suministrada por blogs, foros, libros es mayor que productos comerciales.
Calidad de código: La calidad del código de framework open source es mayor ya que el código es visto por decenas de programadores y revisados por una comunidad de usuarios.
A la vez existen beneficios intrínsecos del software open sources:
Usar el programa: podemos usar el programa sin ninguna restricción, ni siquiera comecial ya que podemos vender nuestro desarrollo, pero una restricción es que debemos incluir el código fuente en la venta.
Libertad de aprender: podemos aprender del código fuente, aprender como fue hecho el framework y saber como realmente funciona. De esta forma el grupo de trabajo no esta limitada a ver solo la documentación sino que puede debugear el código fuente y palpar lo que hace realmente.
Libertad de modificar: Si existe un bug, es posible corregirlo y publicar su corrección para que se encuentre en futuras versiones. Además podemos extender el framework como queramos, desarrollando nueva funcionalidad que luego podemos publicar para que la comunidad la pruebe y use.
Estas ventajas no son menores, dado que el conocimiento es el arma más importante en un grupo de desarrollo informático y el open source permite cultivar el conocimiento, dando nos el privilegio de leer las lineas de código y ver como funciona.
Apostar a el software open source es apostar al capital humano, con un grupo consolidado puede aprender y desarrollar mejor a partir del código fuente. Los desarrolladores aprenden como funciona el framework viéndolo funcionar.
Utilizar software Open Source no solo beneficia a quien lo usa sino a toda una comunidad.
martes, 23 de noviembre de 2010
Spring Dynamic Modules for OSGi(tm) Service Platforms
lunes, 22 de noviembre de 2010
Apache Aries
El proyecto Aries ofrecerá un conjunto de componentes enchufables (plugins) Java que permite a una aplicación empresarial utilizar estos plugins usando modelo de programación OSGi . Esto incluye la implementación y extensión de las especificaciones definidas por OSGi Alliance Enterprise Expert Group (EEG)
Apache Aries nos permitirá consumir por medio de OSGI módulos que nos brinden la persistencia JPA por ejemplo. Pluging que le den valor agregado a la aplicaciones o frameworks que nos ayuden a desarrollar podrán ser utilizados usando OSGI.
OSGi es una tecnología de modularidad madura de Java, que es muy usado en muchos ambientes, pero, en el ámbito empresarial, ha sido tradicionalmente más explotados por la parte interna, infraestructura runtime. Esto es principalmente debido a la falta de un claro modelo de programación empresarial OSGi, y la falta de aplicación e implementación de OSGi para la tecnología JEE.
Especificaciones OSGi son dictadas y mantenidas por la OSGi Alliance, que reconoce este estado de cosas hace varios años y estableció un grupo de expertos en aplicaciones enterprice dentro de la Alianza para centrarse específicamente en las necesidades de aplicaciones empresariales. El objetivo de este proyecto es entregar implementaciones de código abierto de estas tecnologías centradas en la aplicación para permitir el desarrollo de componentes, en beneficio de la modularidad de OSGi en combinación con modelos de programación basados en estándares, que pueden ser desplegados en tiempo de ejecución.
Es un objetivo del proyecto Aries proporcionar un hogar natural para las implementaciones de código abierto de las actuales y futuras especificaciones OSGi EEG, incluyendo la oportunidad para el desarrollo colaborativo de pruebas de cumplimiento, y un entorno para demostrar la composición de estas tecnologías y explorar áreas EEG donde carecen de cobertura de las especificaciones. Otro objetivo de este proyecto es aprovechar la experiencia adquirida a informar a las contribuciones a OSGi requisitos EEG y documentos de especificaciones.
Apache Aries esta en la incubadora esperemos que pronto salga de ahí y nos sorprenda con nuevos módulos para nuestra aplicación.