Translate

lunes, 16 de junio de 2014

Hacer un proyecto con cxf, rest o soap con maven

Si recuerdan el post anterior, sabrán que ahora vamos a hacer un proyecto rest con cxf, pero vamos a usar m2e y jetty con el plugin "run jetty run".

Esto va a ser muy facil, vamos a nuestra queriada IDE eclipse, con los plugines m2e y run jetty run instalados. Y vamos a crear un nuevo proyecto maven:









Y luego clean install:


Y luego a correr el servicio:

Y ahora si ponemos en el browser http://localhost:8080/rest/hello/echo/HolaBlog veremos lo siguiente:
HolaBlog

Y Listo!!

domingo, 15 de junio de 2014

Hacer un proyecto con cxf, rest o soap con maven

Hace muy poco tuve que hacer un proyecto rest con maven y decidí utilizar Apache CXF y la verdad es que quede sorprendido por la facilidad. Y para que vean que no miento, les dejo la receta:

Ingredientes:

  • Abundante maven
  • IDE a gusto (yo voy a utilizar eclipse) 
  • Servidor web Jetty o tomcat, pueden utilizar el plugin de eclipse “run jetty run” si usa jetty. 


Para hacerlo más divertido vamos a hacer el proyecto soap con maven solamente y luego para el proyecto rest vamos a utilizar el plugin m2e de eclipse.

Vamos a hacer un proyecto soap con Apache CXF, para esto nos posicionamos en la carpeta que queremos crear el proyecto y luego ejecutamos:

 $ mvn archetype:generate
[INFO] Scanning for projects...
[INFO]                                                                        
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
 …

Ahora debemos elegir el archetype en nuestro caso es :
368: remote -> org.apache.cxf.archetype:cxf-jaxws-javafirst (Creates a project for developing a Web service starting from Java code)

Y luego elegimos la versión (hacer enter si quieren la ultima)
Y luego ingresar el nombre del proyecto, paquete y número de versión:

Define value for property 'groupId': : com.prueba
Define value for property 'artifactId': : soap
Define value for property 'version':  1.0-SNAPSHOT: :
Define value for property 'package':  com.prueba: :
Confirm properties configuration:
groupId: com.prueba
artifactId: soap
version: 1.0-SNAPSHOT
package: com.prueba
Confirm properties configuration:
groupId: com.prueba
artifactId: soap
version: 1.0-SNAPSHOT
package: com.prueba
 Y: : y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: cxf-jaxws-javafirst:3.0.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.prueba
[INFO] Parameter: artifactId, Value: soap
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.prueba
[INFO] Parameter: packageInPathFormat, Value: com/prueba
[INFO] Parameter: package, Value: com.prueba
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: com.prueba
[INFO] Parameter: artifactId, Value: soap
[INFO] project created from Archetype in dir: /home/emanuel/Projects/restVsSoap/soap
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5:05:03.940s
[INFO] Finished at: Sun Jun 15 18:17:02 ART 2014
[INFO] Final Memory: 14M/207M
[INFO] ------------------------------------------------------------------------
$ cd soap
$ mvn clean install
Al finalizar puedes importarlo a eclipse o cualquier IDE es recomendable utilizar m2e.
Ahora bien el reto era no utilizar IDE, por lo tanto vamos a levantar el tomcat desde maven:
$ mvn tomcat:run

Y Listo!!
Vamos a un browser e ingresamos a http://localhost:8080/soap
Y verán lo siguiente:

Available SOAP services:
HelloWorld
  • sayHi
Endpoint address: http://localhost:8080/soap/HelloWorld
WSDL : {http://prueba.com/}HelloWorldImplService
Target namespace: http://prueba.com/


Available RESTful services:


En el próximo post vamos con REST.

sábado, 14 de junio de 2014

Manejando Funciones como Objetos en Scala



En Scala las funciones también son objetos por tanto es posible pasar funciones como argumentos, guardarlas en variables y devolverlas como respuesta de otras funciones. Esta habilidad para manipular funciones como valores es una de las piedras angulares de la programación funcional.

Como ejemplo muy simple de porqué puede resultar útil el uso de funciones como valores, consideremos una función temporizador cuyo propósito sea realizar alguna acción una vez por segundo. ¿Cómo le pasamos la acción a realizar? lógicamente, como una función.

En el siguiente programa, la función temporizador se llama unaVezPorSegundo, y toma una función como argumento. El tipo de esta función se escribe () => unit y es el tipo de todas las funciones que no tienen parámetros de entrada y que no devuelven nada (el tipo unit es similar a void en C/C++). El método main de este programa simplemente llama a la función temporizador para que repita cada segundo la impresión por pantalla de la frase “el tiempo pasa volando”.

object Temporizador {
      def unaVezPorSegundo(repite : () => unit) {
            while (true) { repite(); Thread sleep 1000 }
      }

      def elTiempoVuela() {
            println("el tiempo pasa volando...")
      }

      def main(args: Array[String]) {
            unaVezPorSegundo(elTiempoVuela)
      }
}

Aunque este programa es fácil de entender, se puede refinar un poco. Antes de nada, se ve que la función elTiempoVuela solo se ha creado para ser pasada posteriormente como argumento al método unaVezPorSegundo . Tener que dar nombre a esa función, que sólo se usa una vez, parece innecesario, y de hecho estaría bien poder construirla justo cuando se le pasa a unaVezPorSegundo. En Scala esto es posible usando funciones anónimas, que son exactamente eso: funciones sin nombre. La versión revisada de nuestro programa temporizador utilizando una función anónima en vez de elTiempoVuela queda así:

object Temporizador {

      def unaVezPorSegundo(repite: () => unit) {
            while (true) { repite(); Thread sleep 1000 }
      }

      def main(args: Array[String]) {
            unaVezPorSegundo(() =>
                  println("el tiempo pasa volando..."))
      }
}

La presencia de una función anónima en este ejemplo, se revela por la flecha ‘ => ’ que separa a la lista de argumentos de la función, del cuerpo de la misma. En este ejemplo la lista de argumentos es vacía, como indican los paréntesis vacíos a la izquierda de la flecha. El cuerpo de la función es el mismo que el de elTiempoVuela antes.

Otra característica es que una función puede ser devuelta como resultado de otra función. Esto es sumamente útil y nos permite currificar funciones. Pero que es currificar? En resumen "Si ajustas algunos argumentos, tendrás una función de los argumentos restantes".

Veamos un ejemplo:

object CurryingTest {
 
      def multiplicar (nro1: Int) : (Int)=> Int = (nro2: Int) => nro1 * nro2
                                                 
      def doble(nro: Int) = multiplicar(2)(nro)    
 
      doble(3)         //> res0: Int = 6
}

Pero podemos utilizar el azúcar sintáctico:

object CurryingTest {
      def multiplicar (nro1: Int)(nro2: Int) = nro1 * nro2
     
      def doble(nro: Int) = multiplicar(2)(nro)    
 
      doble(3)       //> res0: Int = 6
}

Para los curiosos el nombre "currificar", acuñado por Christopher Strachey en 1967, es una referencia al lógico Haskell Curry.

Las funciones son muy importantes y modelarlas como objetos nos hace la vida más fácil.

Unos cuantos libros!!


Quiero compartir unos cuantos links con libros:

https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md
https://github.com/vhf/free-programming-books/blob/master/free-programming-books-es.md
http://resrc.io/

jueves, 12 de junio de 2014

haxl, el framework haskell para acceder a datos.

haxl es un framework desarrollado por la gente de facebook, con el fin de hacer más fácil el exceso a
datos desde haskell. Tanto base de datos como web services.

Haxl es el sucesor de FXL y resuelve todos los problemas que tenia la anterior librería.

Dejo link:
http://www.infoq.com/news/2014/06/haxl
https://code.facebook.com/projects/854888367872565/haxl/

miércoles, 11 de junio de 2014

Swift el nuevo lenguaje de Apple


Y llego un indicio del fin de los tiempos, sisi. Apple se digno en crear un lenguaje moderno para su plataforma Cocoa y Cocoa Touch. Al parecer Apple se dio cuenta que Object-C estaba un tanto viejo y creo un lenguaje más moderno.

A simple vista el lenguaje esta bueno se parece mucho a python, pero según la gente de Apple es mucho más rápido.  A la vez se puede crear código de forma interactiva y es un lenguaje que se integra con Object-C

Bueno ahora nos toca ver si este lenguje levante vuelo,

Les dejo una comparación con scala: https://github.com/densh/talks/blob/master/swift-vs-scala-211-2014-06-03/Swift%20vs%20Scala%202.11.pdf

Dejo link:
http://swift-lang.org/
https://developer.apple.com/swift/

domingo, 8 de junio de 2014

Nashorn, Combina el poder de Java y Javascript en la JDK 8


Seguramente se acuerdan de Rhino, este framework de la asociación Mozilla permitía correr javascript en la plataforma Java. Con Java 8, Oracle decidió remplazar este framework con uno propio y este tiene el nombre de Nashorn.

Entre las características de Nashorn podemos remarcar los siguientes puntos:

  • Tiene un soporte total de la especificación ECMAScript 5.1, además compila javascript a bytecode usando las nuevas características de la plataforma incluyendo invokedynamic introducido en el JDK 7.
  • Si comparamos el rendimiento con Rhino es Nashorn muy superior por utilizar invokedynamic, pero si lo comparamos con motores javascript como V8 (utilizado en Chrome y en Node.js) queda mucho trabajo por hacer.  
  • Como Nashorn viene con JDK 8, también tiene soporte para interfaces funcionales y todas las nuevas características de la nueva versión del JDK. 

Vamos a hacer una pequeña prueba, un "hola mundo" con Nashorn

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class PruebaNashorn {

public static void main(String[] args) throws ScriptException {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
nashorn.eval("print('Hola Mundo')");
}

}

Vamos a tomar ahora las instrucciones de un archivo, para eso debemos cambiar la instrucción eval de la siguiente manera:

nashorn.eval("load('src/hola.js')");

Y hola.js es el archivo siguiente:

function saludar(nombre) {
print("Hola " + nombre);
}

saludar("Mundo");

Javascript es un lenguaje muy potente y fácil de utilizar, que nos puede ser de gran ayuda que podamos contar con el en la plataforma java es de gran utilidad.

Dejo links:
http://www.infoq.com/articles/nashorn
http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/
http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html

sábado, 7 de junio de 2014

En que anda MongoDB?

Quiero compartir esta imagen que describe la realidad de esta base de datos:


Detox



Todos tenemos archivo que tienen un nombre que hace difícil que podamos escribirlos en la consola o
nombres con caracteres especiales que nos hacen la vida imposible.

Para resolver todos tus problemas esta Detox una herramienta de fácil uso que permite limpiar nuestros archivos de caracteres especiales o nombre extraños, veamos un ejemplo:

$ ls
Future Crew - Skaven - 2nd Reality.s3m
$ detox -v .
Scanning: .
./Future Crew - Skaven - 2nd Reality.s3m -> ./Future_Crew-Skaven-2nd_Reality.s3m
$ ls
Future_Crew-Skaven-2nd_Reality.s3m

Muy bueno!!

Dejo link:
http://detox.sourceforge.net/

miércoles, 4 de junio de 2014

Hall Pas en codescholl por 2 días!!

Codescholl nos regala 2 días de cursos gratis para que lo probemos y luego saquemos nuestras condiciones. así que a aprovechar!!

Free 2-day Trial

Test drive Code School with a free Hall Pass and get access to all of our courses and resources for the next 48 hours. Activate your Hall Pass now and start learning!
ACTIVATE MY HALL PASS

domingo, 1 de junio de 2014

Python 3 esta matando a Python

Me encontré con este articulo y me resulto muy interesante. Dado que yo pienso que los lenguajes no deberían evolucionar sino que deberías dar paso a otros lenguajes. Les doy un ejemplo en la plataforma Java, fue liberado Java 8 lenguaje que permite por ejemplo hacer cosas como leer un archivo de modo Java 4 o Java 6 o Java 7 y ni hablar todas las librerías que se deben reescribir para que usen clausuras.

Por lo tanto lo ideal en mi forma de ver las cosas es que Java siga siendo Java (podemos agregar pequeñas mejoras) pero el lenguaje no cambie su sintaxis. Eso sí que de lugar a otros lenguajes más evolucionados Scala, Groovy, Ceylon, etc.  Esto nos asegura que existe solo una forma de hacer las cosas y esa forma esta bien.

Volviendo a Python, no cuento con el conocimiento técnico para decernir si esta bien o no el articulo pero por supuesto me resulto por demás interesante. Que opinan? coinciden con el articulo? Un lenguaje debe evolucionar sin importar que existan n formas de hacer algo y ese n se incremente en cada version del lenguaje?

Dejo el link:
https://medium.com/@deliciousrobots/5d2ad703365d/?source=tw-37817e5ad188-1401476497717&utm_content=bufferbdb69&utm_medium=social&utm_source=plus.google.com&utm_campaign=buffer

sábado, 31 de mayo de 2014

Apache Spark


Se puede ser más rápido que Apache Hadoop? Y si se puede y Apache Spark esta para probarlo.

Hadoop es el framework por defecto si hablamos de Big Data. Spark fue diseñado para soportar en memoria algoritmos iterativos que se pudiesen desarrollar sin escribir un conjunto de resultados cada vez que se procesaba un dato. Esta habilidad para mantener todo en memoria es una técnica de computación de alto rendimiento aplicado al análisis avanzado, la cual permite que Spark tenga unas velocidades de procesamiento que sean 100 veces más rápidas que las conseguidas utilizando MapReduce.

Y además fue desarrollado en Scala, lo que permite facilidad de integración con Scala, Java y también python (eso es lo que se puede leer en su web)

Spark tiene un framework integrado para implementar análisis avanzados que incluye la librería MLlib, el motor gráfico GraphX, Spark Streaming, y la herramienta de consulta Shark. Esta plataforma asegura a los usuarios la consistencia en los resultados a través de distintos tipos de análisis.

Como conclusión podemos afirmar que spark es un framework big data, pero liviano y a la vez más rápido.

Dejo link:
http://spark.apache.org/
http://en.wikipedia.org/wiki/Apache_Spark

martes, 27 de mayo de 2014

School of Haskell



School of Haskell es una página en la cual podemos aprender Haskell por medio de tutoriales y vídeos.

Esta muy buena!!

Dejo link: https://www.fpcomplete.com/school

lunes, 26 de mayo de 2014

Prueba un lenguaje de forma online


El programador curioso por lo general se siente frustrado al ser encasillado en un lenguaje, siempre cree que puede haber otra forma de hacer las cosas, mejor o peor pero distinta.

Es sabido que cuando crees encontrar el lenguaje perfecto simplemente se está ignorando un montón de problemas los cuales no aplicaría muy bien ese lenguaje que parece perfecto.

Por suerte los programadores curiosos o inquietos tienen muchas herramientas que les permiten investigar nuevos horizontes. Entre ellas están las páginas que permiten probar un lenguaje de forma online. Sin tener que instalar nada le podemos dar una primera probada a ese lenguaje que nos interesa tanto.

Vamos a revisar las páginas que en mi humilde opinión son muy buenas para introducirnos en un lenguaje:

Groovy web console : Groovy es un lenguaje de tipado dinamico que corre sobre la plataforma Java. Es un lenguaje sumamente interesante. Groovy web console es una página sumamente simple que te permite ejecutar Groovy de forma rápida y sencilla.

Try Clojure: Clojure es un lenguaje para los amantes de Lisp. Clojure es un derivado de Lisp y corre sobre la plataforma Java. Try Clojure nos brinda la consola RELP de Clojure de forma web.

Try Ruby: Si no conocen Ruby, ésta es tu oportunidad. Try Ruby no solo permite ejecutar Ruby sino que nos brinda un conjunto de actividades para acrecentar nuestro conocimiento.

Scala Tutorials: Scala es un lenguaje multiparadigma (Funcional y Orientado a Objeto) que corre en la plataforma Java. Scala Tutorials es un tutorial básico de Scala que te permite jugar con el lenguaje y sobre todo aprender

Try Haskell: Haskell es un lenguaje funcional que es bueno que aprendas. Muy rico en conceptos, cambia tu forma de pensar un problema. Try Haskell es una página inspirada en try ruby que permite probar este maravilloso lenguaje.

Try Ceylon: Ceylon es el lenguaje de la empresa JBoss para la plataforma Java, en este lenguaje esta trabajando Gavin King (el creador de hibernate) entre otros. Try Ceylon tiene la misma esencia que try ruby o try haskell y a la vez nos permite probar ejemplos. Nobleza obliga, gracias Enrique Zamudio por recordarme. 

Compile online: Y por ultimo Compile online que es una página que no solo permite probar innumerables lenguajes también se puede probar frameworks javascript y distintas tecnologías web.

En conclusión para probar un lenguaje solo se necesita un browser y un poco de tiempo. Conocen otra pagina que debería estar en la lista? Cual les pareció más interesante?


Scala: The Simple Parts with Martin Odersky

Quiero recomendar este video presentado por Martin Odersky:


Dejo link:
http://new.livestream.com/accounts/8519806/events/3011572