Translate
martes, 30 de agosto de 2011
Linux El emblema del software libre celebra sus 20 años de vida
http://www.ieco.clarin.com/tecnologia/Linux-emblema-software-libre-celebra_0_544745576.html
Me quedo con este párrafo:
En la actualidad, de aquella versión de garaje que nació en un ambiente de PC queda muy poco. Se apuntaló la estabilidad, la seguridad y el hecho de estar respaldado por algunos colosos de la tecnología, han convertido a Linux en una opción muy seria en las empresas . No es por casualidad que está instalado en el 92 % de las supercomputadoras, según el sitio especializado top500.org.
Feliz Cumpleaños al mejor Sistema Operativo por lejos!!!
Feliz Cumpleaños Linux!!!
IBM Linux Prodigio subtitulado por guivaloz
domingo, 28 de agosto de 2011
Profiles de Maven
En el siguiente profile le estamos diciendo a maven que no corra los test con la expresiónnotest org.apache.maven.plugins maven-surefire-plugin 2.9 true
Para correr este profile es necesario ejecutar el comando con el parametro -P notest, por ejemplo:
mvn clean install -P notest
Creación de Herencia entre projectos con Maven
Creamos el proyecto padre:
mvn archetype:create -DgroupId=com.ejemplo -DartifactId=EjemploPomPadre
Luego borramos la carpeta src y editamos el pom para que sea similar al siguiente:
4.0.0 com.ejemplo EjemploPomPadre 1.0-SNAPSHOT pom ...
Cambiamos el packaging a pom y agregamos las dependencias comunes para todos los proyectos hijos.
Ahora creamos 2 proyectos en el directorio EjemploPomPadre.
mvn archetype:create -DgroupId=com.ejemplo -DartifactId=EjemploHijo1
mvn archetype:create -DgroupId=com.ejemplo -DartifactId=EjemploHijo2
Si editamos el pom del proyecto EjemploPomPadre vemos que maven agrego la siguiente entrada:
EjemploHijo1 EjemploHijo2
Si editamos el pom de uno de los proyectos hijos veremos que se agrego la siguiente entrada indicando el proyecto padre:
Si agregamos una dependencia en el pom padre se agregan a los proyectos hijos, para verificar las dependencias reales de un proyecto tenemos el comando:EjemploPomPadre com.ejemplo 1.0-SNAPSHOT
mvn help:effective-pom
Detención de conflictos entre dependencias con Maven
Ver jerarquía de dependencias
$ mvn dependency:tree
Este comando muestra el arbol de dependencias.
Ver dependencias en orden alfabético
$ mvn dependency:resolve
Analizar uso de dependencias
$ mvn dependency:analyze
Crear un proyecto web con Maven
Para crear un proyecto web se debe posicionar en el directorio donde se quiere crear el proyecto y se debe ejecutar la siguiente comando:
mvn archetype:create -DgroupId=com.ejemplo -DartifactId=EjemploWeb -DarchetypeArtifactId=maven-archetype-webapp
Con este comando se creara un proyecto web, para poder verlo desde eclipse se debe agregar la siguiente entrada en el pom.
maven-compiler-plugin 1.6 1.6 org.apache.maven.plugins maven-eclipse-plugin 2.7 2.0 true org.apache.maven.plugins maven-javadoc-plugin org.apache.maven.plugins maven-project-info-reports-plugin
El wtpversion es la versión de Web Tools Project de eclipse, el cual es necesario setear para que eclipse, utilice esta herramienta.
Luego entrar a la carpeta del proyecto y ejecutar:
mvn install
mvn eclipse:eclipse
Luego de ejecutar estos comandos es posible importar este proyecto a eclipse.
Ahora vamos a configurar un plugin para ejecutar nuestro proyecto web con maven. Se agregara la configuración de un servidor web llamado jetty.
Para esto se debe agregar en el pom el siguiente plugin:
org.mortbay.jetty maven-jetty-plugin
Y ejecutar mvn jetty:run para luego abrir un browser y ir a http://localhost:8080/EjemploWeb/, en el cual podremos ver nuestro proyecto funcionando.
viernes, 26 de agosto de 2011
Libros en castello sobre agilismo
lunes, 22 de agosto de 2011
Iniciando con Maven Parte 3
Dependencias
Una dependencia es una referencia en el POM de la librería que se desea incluir en el proyecto. Por ejemplo si deseamos incluir la librería para el manejo de JUnit debemos declararlo de la siguiente manera:
junit junit 4.5
Como vimos, los objetos en el repositorio se identifican mediante 3 tags groupId:artifactId:version
Transitividad de dependencias
Con esto, nos referimos al hecho de que cada dependencia, incluye a su vez las dependencias que necesita. Por ejemplo, si agregamos la dependencia A, que a la vez depende de B, entonces B se incluirá sin la necesidad de explicitarlo.
Es muy importante tener siempre presente la transitividad, a la hora de detectar problemas de BUILD ERROR. Supongamos que agregamos la dependencia A, que a la vez depende de B, versión 1.0. Es muy probable que no seamos conscientes de esa transitividad, con lo cual, en algún momento podemos agregar en el pom, explícitamente, la dependencia B versión 2.0. Lo que ocurrirá, es que si en el código utilizamos features de la versión 2.0 que no están en la 1.0, entonces tendremos un BUILD ERROR. Esto es así, ya que maven le da prioridad a la transitividad.
Para estos casos, lo que tendremos que hacer cuando agregamos la dependencia A, es excluir la B, versión 1.0.
org.A A 1.0 org.B B org.B B 2.0
Scope de dependencia
Las dependencias tienen varios niveles o scopes, algunas hacen falta para compilar, otras solo para los test, algunas las va a incluir el contenedor.
Los scopes de las dependencias pueden ser utilizados para limitar o condicionar las dependencias transitivas. Existen seis tipos de scopes:
Compile: es el scope por defecto. Las dependencias están disponibles en el proyecto y en sus proyectos dependientes.
Provided: se espera que el JDK, la aplicación o el contenedor provean la dependencia.
Runtime: la dependencia no es requerida en tiempo de compilación pero sí para la ejecución.
Test: son dependencias que son requeridas solo cuando se compila y ejecuta los test.
System: similar a provided pero se le debe indicar el jar que contiene la dependencia.
Import: (a partir a la version 2.0.9) solo es usado en una dependencia del tipo POM en la sección . Indica que el POM utilizado debe ser remplazado con las dependencias que éste tenga en su sección.
Iniciando con Maven Parte 2
Pom
En el directorio de nuestro proyecto encontraremos un archivo con el nombre pom.xml el cual contienen toda la información de nuestro proyecto:
4.0.0 com.ejemplos EjemploMaven 1.0-SNAPSHOT jar EjemploMaven http://maven.apache.org UTF-8 junit junit 3.8.1 test
En el pom se registra el groupId, artifactId, versión, etc. Entre las diferentes propiedades se encuentra las dependencias; las dependencias son los artefactos que el proyecto necesita para poder ejecutarse.
Cada dependencia contiene un groupId, artifactId y versión; especificando esta información se le indica a maven la dependencia; la cual el bajara de internet y la guardara en nuestro repositorio. Para obtener datos de dependencias se puede utilizar paginas como http://www.mvnrepository.com/
Integración con los IDE
Si deseamos usar una IDE, como eclipse, IntelliJ IDEA, netbeans o otra. Maven es capaz de generar un proyecto de eclipse, de idea y creo que de netbeans. Basta ejecutar esto
mvn eclipse:eclipse
mvn idea:idea
Luego, desde nuestro IDE, creamos un proyecto importando o leyendo el fichero de proyecto que ha generado maven.
Para eclipse, hay que hacer algo más. Debemos definir dentro de eclipse la variable M2_REPO apuntando a nuestro repositorio local de maven.
También hay plugins en nuestros IDEs que hacen más fácil el trabajo con maven, de forma que desde nuestro IDE podamos ejecutar las tareas maven. En codehaus tienes los plugins para los cuatro IDEs más conocidos: eclipse, netbeans, IntelliJ y JBuilder.
Seguiremos posteando sobre esta gran herramienta!
sábado, 20 de agosto de 2011
Iniciando con Maven
Maven es una herramienta para la construcción de proyectos en java, ya explicamos que es en este post http://emanuelpeg.blogspot.com/2011/02/maven.html ahora veamos como utilizarlo.
Instalar Maven:
- Bajar Maven de: http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-2.2.1-bin.zip, por ejemplo
- Copiarlo en un directorio en disco por ejemplo: c:\maven
- Agregar la carpeta bin de maven a la variable PATH. Para meter el subdirectorio bin en el path de ejecutables, le doy con el botón derecho del ratón sobre el icono de "Mi PC" y elijo "Propiedades", "Avanzado" y "Variables de Entorno". Busco "Path" y le doy a "Editar". Añado al final ";C:\maven\bin" (con punto y coma delante, para separlo de lo que ya haya escrito)
- Abrir una consola en windows ir a ejecutar y escribir “cmd”, en linux abrir cualquier consola y escribir:
> mvn --version
Y obtendrá la siguiente salida:
Apache Maven 2.2.1 (r801777; 2009-08-06 16:16:01-0300)
Java version: 1.6.0_25
Java home: /java/sdk/jdk1.6.0_25/jre
Default locale: es_AR, platform encoding: UTF-8
OS name: "linux" version: "2.6.35-22-generic" arch: "amd64" Family: "unix"
Configurar maven para que funcione utilizando una red con un proxy:
Es común el uso de proxies en empresas para brindar mayor velocidad en el uso de internet, en otros casos también es usado para restringir el uso de internet para algunos empleados. Es posible configurar maven para que funcione atra vez de un proxy.
Si la conexión a internet es a través de un proxy, necesitamos configurar maven para que sepa cómo acceder a través de él. El proxy puede además requerir un usuario y password para el acceso.
Vamos al directorio conf donde tenemos instalado maven, en mi caso c:\maven-2.0.4\conf y editamos el fichero settings.xml. Es un fichero xml y en el sitio que pone proxies, justo debajo, ponemos esto
El id optional es un nombre que queramos darle para identificar el proxy. En vez de optional podemos poner cualquier nombre.... optional true http mi_nombre_usuario mi_passowrd ip_de_mi_proxy 80 ordenadores_de_mi_red_local_separados_por_comas
Por ejemplo:
ConfigProxy true http proxyuser proxypass 10.10.10.1 8080 10.10.10.2|10.10.20.1
Creación de proyecto con Maven
Para crear un proyecto con maven hay que abrir la consola, y pocicionarse en la carpeta donde es necesario crear el proyecto y luego escribir en consola los siguiente:
mvn archetype:create -DgroupId=com.ejemplos -DartifactId=EjemploMaven
Veamos los parámetros
- archetype:create es el comando/plugin, o como quieras llamarlo, de maven para crear un proyecto. Por defecto crea un proyecto de java plano.
- -DgroupId es el conjunto de proyectos al que pertenece nuestro proyecto. Por ejemplo, yo puedo meter todos mis programas de ejemplo en un grupo que llamaré "com.ejemplos". Este nombre que pongamos aquí va a servir de paquete inicial para todas las clases del proyecto. Todos los proyectos maven deben pertenecer a un grupo, aunque sea único para él, que se denominará groupId.
- -DartifactId es el nombre que queramos dar al proyecto. Maven creará un directorio con este nombre y el jar que genere para el proyecto tendrá también este nombre. Todos los proyectos maven tienen un nombre para identificarlos, que se denomirá artifactId
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30 seconds
[INFO] Finished at: Sat Aug 20 19:26:27 ART 2011
[INFO] Final Memory: 11M/490M
[INFO] ------------------------------------------------------------------------
La estructura del proyecto creado es la siguiente:
EjemploMaven
+---src
¦ +---main
¦ ¦ +---java //Para nuestros fuentes
¦ ¦ +---com
¦ ¦ +---ejemplos
¦ ¦ +---App.java
¦ +---test
¦ +---java //Para test de Junit
¦ +---com
¦ +---ejemplos
¦ +---AppTest.java
+---pom.xml
Dentro un fichero pom.xml que es un fichero que contiene datos de configuración de nuestro proyecto, como dependencias con otros jar, tipos de informes que queremos en la página web de nuestro proyecto, etc.. Inicialmente contiene una serie de cosas por defecto que podremos cambiar si lo deseamos.
Crea dos subdirectorios, uno src y otro test. Dentro de src debemos meter todo lo que sean fuentes y ficheros de configuración o datos propios del proyecto. En la parte de test debemos meter todos nuestros fuentes de prueba, clases de test de JUnit, ficheros de datos o de configuración de pruebas, etc. Es decir, en src va lo que es del proyecto y en test lo que nos ayude a probar el proyecto, pero no sea propio del proyecto.
En ambos casos, crea un directorio java. Ahí debajo es donde van los fuentes java. En paralelo a estos directorios java y si lo necesitamos, debemos crear nosotros a mano otros directorios. El nombre de estos nuevos directorios es standard en maven.
Para compilar la aplicación, por consola entramos al directorio EjemploMaven
y escribimos:
mvn compile
Si queremos correr los test
mvn test
Si queremos generar el empaquetado (jar, war, ear)
mvn package
Si queremos correr los test + compilar + generar el empaquetado
mvn install
Al correr estos comandos generara una carpeta target, la cual contendra los archivos compilados y el jar generado. Si se quiere borrar esta carpeta y limpiar el proyecto se debe ejecutar:
mvn clean
Se pueden convinar los comandos por ejemplo borrar target y limpiar el proyecto para luego generar un paquete:
mvn clean install
Repositorios Maven
Una de las grandes ventajas de maven son los repositorios (almacenes) de ficheros jar que se crea.
Si miras en http://www.ibiblio.org/maven2/ tienes el repositorio oficial de jars de maven. Ahí están los groupId de casi todos los jar de libre distribución que puedas encontrar en internet. Tienes el log4j, commons-logging, JFreeChart, mysql-connector, etc, etc. Maven es capaz de bajarse cualquiera de estos jar si tu proyecto lo necesita.
Todo lo que se baje maven de internet lo mete en un repositorio (almacen) local en tu pc, de forma que si lo necesita una segunda vez, no necesita descargárselo nuevamente de internet. Este directorio, habitualmente está en
$HOME/.m2 en unix/linux
C:\Documents and Settings\usuario\.m2 en windows
Adicionalmente podemos configurar maven para que use más repositorios, tanto de internet como otros que montemos internamente en nuestra red local si la tenemos. Por ejemplo, en internet tienes otro repositorio con jars independiente de maven en http://java.freehep.org/maven2/
Al hacer mvn install maven agrega nuestor jar al repositorio local de nuestra PC. Es decir que lo agrega a .m2
domingo, 14 de agosto de 2011
JavaCC
JavaCC (Java Compile) es un generador de lenguajes que funcionen sobre la plataforma java y además es open source. Es similar a Yacc pero para java.
JavaCC es una herramienta para transformar y generar un parser con código Java (similar a las expresiones regulares) para chequear la sintaxis del código fuente desde reglas definida como gramática. La gramática de JavaCC es similar a la de java por suerte.
Dejo algunos tutoriales:
http://www.codeproject.com/KB/cross-platform/CreateProgrammingLanguage.aspx
http://www.uhu.es/470004004/practicas/practica04.htm
miércoles, 10 de agosto de 2011
Rails for Zombies: Resurrection Announcement
Muy interesantes son los cursos dictados por codeschool entre los más cursados se encuentra el de Ruby for zombies. La verdad lo recomiendo porque es muy fácil de seguir y además es gratuito.
Ahora van a dictar la segunda parte titulada: Resurrection Announcement. No solo que son muy divertidos sino que muy interesantes.
Java SE 7 Released
After nearly five years of collaboration within the worldwide Java community, Java Platform, Standard Edition 7 is ready for download! The major features of Java SE 7 are Project Coin, the Fork/Join framework, the New File System API, and InvokeDynamic. It's an important step in Java’s evolution. Learn more:
Download Java SE 7
Read the Press Release: Oracle Announces Availability of Java SE 7
Watch the technical presentations from Oracle's global event on July 7
View Moving Java Forward: A Video Discussion about Java 7
Find a JUG meeting covering Java 7 near you
Access Java 7 Training
Get Involved in Open JDK
-The Oracle Technology Network Team (The Java Source Blog)
domingo, 7 de agosto de 2011
Clojure
Clojure es Lisp sobre JVM. Clojure es un dialecto de Lisp por lo tanto si entendemos Lisp entendemos Clojure. Lisp es un lenguaje funcional no puro. Lisp tiene algunas características interesantes:
Lisp es un lenguaje de listas. Una llamada a una función utiliza el elemento de la primera lista como la función y el resto como los argumentos.
Lisp utiliza sus propias estructuras de datos para expresar código
Si mezclamos estas dos ideas obtendremos un lenguaje ideal para metaprogramacion. Podemos organizar nuestro código en un árbol teniendo una base de modelo de objetos, también podemos crear un código basado en prototipos. Dándonos gran flexibilidad.
Los primeros dialectos de Lisp son Common Lisp y Scheme. Scheme y Clojure son de la familia de dialectos llamado lisp-1 y Common Lisp es de la familia llamada lisp-2.
Una de las cosas más importantes de Clojure es que funciona sobre la JVM lo que permite usar todas las librerías y frameworks ya escritos en java.
Clojure es funcional y es dinámicamente tipado, lo que hace que el código sea más fácil de leer y más divertido de escribir.
Esto es solo una introducción en proximos post seguiremos escribiendo de este lenguaje.
Dejo Link:
http://clojure.org/
sábado, 6 de agosto de 2011
jueves, 4 de agosto de 2011
UnQL
CouchDB y SQLite han creado un nuevo lenguaje de consulta de datos, aunque es similar a SQL, esta diseñado para trabajar con bases documentales, NoSQL.
El lenguaje incluye select, update, delete y inserts pero no como SQL ya que no trabaja con tablas sino con colecciones desordenadas de documentos. En UnQL un documento es un objeto que puede ser descripto con JSON, un float, un string, puede ser visto como un documento.
Al leer que todos los documentos se pueden representar con JSON, se nos viene a la mente BSON el lenguaje de MongoDB otra base de datos documental, NoSQL. Tomando caminos diferentes confluimos en casi iguales estructuras y lenguajes. Sera hora de estandarizar un lenguaje NoSQL?