Translate

domingo, 15 de noviembre de 2009

JNA

JNA es un framework que nos facilita las tareas con dll; es decir nos hace más fácil jni.
Alguien que leyo, vio, trabajo o se pregunto que es jni; debe haberse dado cuenta que es complejo. Esta complijida se ve disminuida casi a 0 con JNA.

Parece publicidad barata pero es verdad. Si te digo que con una interfaz podes usar funciones que se encuentran en una dll?

Mira, tengo la siguiente dll:

// dllParaPruba.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"


extern "C"
{
//---------------------------------------------------------------------------
double __declspec(dllexport) multiplicar(double a, double b)
{
return a * b;
}
//---------------------------------------------------------------------------
double __declspec(dllexport) sumar(double a, double b)
{
return a + b;
}

//---------------------------------------------------------------------------

double __declspec(dllexport) potencia(double a, double n)
{
double acumulador = 1;
for (int i = 0; i <>
acumulador*=a;
}

return acumulador;
}
}

Y yo desde java quiero leerla y usarla, bueno tengo que escribir la siguiente interfaz:

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/**
*
* @author Emanuel
*/
public interface EjemploJNA extends Library {

EjemploJNA INSTANCE = (EjemploJNA)
Native.loadLibrary("dllParaPruba",
EjemploJNA.class);

double multiplicar(double a, double b);

double sumar(double a, double b);

double potencia(double a, double b);
}

Bueno ahora vamos hacer un test:

import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Emanuel
*/
public class EjemploJNATest {

static {
System.load("pathDondeSeEncuentraMiDll\dllParaPruba.dll");
}

@Test
public void sumar(){
double resultado = EjemploJNA.INSTANCE.sumar(2.3, 4.5);
assertEquals(new Double(resultado), new Double(6.8));
}

@Test
public void multiplicar(){
double resultado = EjemploJNA.INSTANCE.multiplicar(2.3, 4.5);

assertEquals(new Double(resultado), new Double(10.35));
}

@Test
public void potencia(){
double resultado = EjemploJNA.INSTANCE.potencia(2, 4);

assertEquals(new Double(resultado), new Double(16));
}

}

Listo!!

Que lo pario dijo mendieta!!

Una cosa me queda por aclarar es que compile la dll con el compilador de borland y no me fue muy bien, explotaba (no se bien por que) use el de microsoft y no hubo problema.

El que quiera más info dejo el link: https://jna.dev.java.net/

Y para toda la gente linda que usa maven la entrada en el pom:

<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.2.2</version>
</dependency>

Saludos!!!

domingo, 8 de noviembre de 2009

¿Quién necesita un arquitecto?

Como ya dije antes dos ideas es una pagina web muy buena, mezcla lo técnico con lo metodológico de una forma muy buena. Hoy quiero aconsejarles que lean este articulo :


Describe el rol de un arquitecto de software.

sábado, 7 de noviembre de 2009

Apache Solr

Solr es un servidor de búsquedas basado en Lucene, contiene Apis de comunicación xml/http y JSON. Entre otras características: es liviano, tiene cache, replicable y trae una interfaz web para administrarlo.


El modo de distribución es un war el cual nosotros deployeamos en nuestro web conteiner (jetty, tomcat o otro) y listo!


Vamos al browser y ponemos por ejemplo http://localhost:8080/solr (si lo deployearon como solr) y hay va aparecer la interfaz web para configurarlo.


Solr provee diferentes clientes para casi todas las plataformas:

· Ruby - SolRuby

· PHP - SolPHP

· Java - SolJava

· Python - SolPython

· JSON - SolJSON

· .Net - solrnet

  • C#

o SolrSharp

o Deveel Solr Client

  • Perl

o SolPerl

o Solr.pm

· JavaScript

o AJAX Solr.


Dejo links:

http://lucene.apache.org/solr/

http://wiki.apache.org/solr/

domingo, 1 de noviembre de 2009

RESTEasy

Es un proyecto de jboss que provee una implementación a jsr 311. Este proyecto contiene un conjunto de frameworks que nos facilitan el desarrollo con web services rest.

Jsr 311 nos permite desarrollar y publicar web services rest con anotaciones, vean que fácil es:

@Path("/library")

public class Library {

@GET

@Path("/books")

public String getBooks() {...}

@GET

@Path("/book/{isbn}")

public String getBook(@PathParam("isbn") String id) {

// search my database and get a string representation and return it

}

@PUT

@Path("/book/{isbn}")

public void addBook(@PathParam("isbn") String id, @QueryParam("name") String name) {...}

@DELETE

@Path("/book/{id}")

public void removeBook(@PathParam("id") String id {...}

}

Recuerden que los web services rest no tienen un descriptor wsdl como los soap, sino que lo que describe a los servicios rest en la url y el método por donde se aceden.

@PUT, @DELETE, @GET, etc decimos el método y con @Path indicamos el path donde esta publicado.

RESTeasy puede ejecutarse sobre cualquier contenedor web.



viernes, 30 de octubre de 2009

miércoles, 28 de octubre de 2009

Firebug es lo más!!

Soy fanatico de firebug es un producto que me hizo la vida mucho más facil. Firebug es un plugin para FireFox que resulta de gran utilidad para depurar problemas con CSS y JavaScript en páginas web. Una herramienta indispensable en el arsenal de cualquier desarrollador web. Su punto más débil, con toda probabilidad, es que sólo funciona bajo Firefox.


Firebug Lite es un porte de Firebug a JavaScript que da acceso a una buena parte de la funcionalidad de Firebug desde IE, Safari, Chrome y Opera. Para emplearlo basta con añadir este script a la página que queremos depurar:

<script type='text/javascript' src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>

domingo, 25 de octubre de 2009

¿Qué son los DSL?

Los DSLs son lenguajes de programación especialmente diseñados para desarrollar software restringido a un dominio determinado. A diferencia de los lenguajes llamados de propósito general como Java, C++ o C#, los DSLs cuentan con un universo limitado de aplicación. No obstante, gracias precisamente a esta especialización, presentan facilidades y ventajas a la hora de abordar los problemas de software para los que fueron diseñados y desarrollados.

Domain Specific LanguaceJava usa muchos DSL basados en xml, por ejemplo struts usa un dsl para definir el workflow de sus paginas, es mucho más fácil y flexible que hacerlo con java. Los archivos .properties tambien son un ejemplo dsl, con un universo muy limitado pero que resulta mucho más facil que hacerlo con XML o java.

Para definir e implementar lenguajes DSL es posible basarnos en un lenguaje de propósito general que sirva como contenedor, o bien partir de cero, requiriendo en este caso de específicos compiladores o intérpretes. Los DSLs del primer tipo citado suelen denominarse DSLs internos dejando la categoría de externos para los del segundo tipo.

Los Internal DSL: están escritos en el propio lenguaje padre. Son basicamente lo que siempre hemos conocido como “API” aunque utilizando “fluent interface” y atendiendo más a la semántica de los métodos. Un ejemplo en Java sería la generación de SQL por parte de Hibernate:

SQLQuery sql = new SQLQuery();
sql.Select("Id").Select("FirstName").Select("LastName").From("Person").Where("Id = 1").Where("FirstName = 'Chris'").OrderBy("LastName").OrderBy("FirstName");
string strSqlString = sql.ToString();


Los External DSL: No están escritos en el mismo Java. Se utiliza un lenguaje externo. En el caso de Java han triunfado especialmente los External DSL escritos en XML. Un caso sería el MVC de Struts, que se declara así:

<action-mappings >

<action path="/listar" type="org.springframework.web.struts.DelegatingActionProxy">

<forward name="listar" path="lista.aplicaciones"/>

</action>

<action path="/formularioNuevaAplicacion" type="org.springframework.web.struts.DelegatingActionProxy">

<forward name="mostrar" path="nueva.aplicacion"/>

</action>

<action path="/nuevaAyuda" attribute="aplicacionForm" name="aplicacionForm" type="org.springframework.web.struts.DelegatingActionProxy" scope="request" input="nueva.aplicacion">

<forward name="nueva" path="/listar.do"/>

</action>

</action-mappings>


Usamos DSL todo el tiempo y ni sabia :|


sábado, 24 de octubre de 2009

Groovy

Groovy es como el java del siglo XXI, es un lenguaje script basado en java que toma características de Python, Ruby, Perl y Smalltalk. La especificación JSR 241 se encarga de su estandarización para una futura inclusión como componente oficial de la plataforma Java.

Java no es el único que piede ejecutarse dentro de una JVM (máquina virtual Java). Resulta que Groovy es uno de esos lenguajes dinámicos ejecutables en una JVM, que a diferencia de los otros como lo son JRuby, Jython y Scala, posee un grado muy alto de cercanía con el lenguage Java y al mismo tiempo posee características únicas. Continúa leyendo para saber mas sobre este lenguage y lo que puede ofrecerte.

Groovy usa una sintaxis muy parecida a Java, comparte el mismo modelo de objetos, de hilos y de seguridad. Desde Groovy se puede acceder directamente a todas las API existentes en Java. El bytecode generado en el proceso de compilación es totalmente compatible con el generado por el lenguaje Java para la Java Virtual Machine (JVM), por tanto puede usarse directamente en cualquier aplicacion Java. Todo lo anterior unido a que la mayor parte de código escrito en Java es totalmente válido en Groovy hacen que este lenguaje sea de muy fácil adopción para programadores Java; la curva de aprendizaje se reduce mucho en comparación con otros lenguajes que generan bytecode para la JVM, tales como Jython o JRuby. Groovy puede usarse también de manera dinámica como un lenguaje de scripting.

Veamos unos ejemplos de la pagina oficial de groovy:

Simple "Hola mundo":

def name='World'; println "Hello $name!"

Un "hola mundo" más complicado:

import static org.apache.commons.lang.WordUtils.* 
class Greeter {
  Greeter(who) { name = capitalize(who) }
  def salute() { println "Hello $name!" }
}
new Greeter('world').salute()

Los problemas evolucionan por lo tanto las soluciones también deben evolucionar. La evolución natural de java es Groovy!



lunes, 19 de octubre de 2009

jar with dependencies

Como hacer un jar con todas las dependencias listo para entregar el cliente y quedar como un duque y exitoso desarrollador?

Es fácil...
Con Maven, lo más grande que hay!!

Lo que tenemos que hacer es configurar un plugin como este:

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
<mainClass>com.paquete.elNombreDeMiApp</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- append to the packaging phase. -->
<goals>
<goal>single</goal> <!-- goals == mojos -->
</goals>
</execution>
</executions>
</plugin>

Y listo!!

maven y netbeans segunda parte

Como dije en un post anterior netbeans permite importar proyectos maven como nativos.

Para ejecutar estos proyectos crea un archivo nbactions.xml donde podemos indicar a netbaans como ejecutar nuestro proyecto, miren este ejemplo:

<action>
<actionName>run</actionName>
<goals>
<goal>package</goal>
<goal>org.codehaus.mojo:exec-maven-plugin:1.1.1:exec</goal>
</goals>
<properties>
<exec.workingdir>${project.build.directory}</exec.workingdir>
<exec.args>-jar ${project.build.finalName}-jar-with-dependencies.jar</exec.args>
<exec.executable>java</exec.executable>
</properties>
</action>
<action>

Aca le indico a netbeans que ejecute la tarea exec de maven de un proyecto jar que es nombreDelProyecto-jar-with-dependencies.jar

Creo que es muy flexible. Maven con netbeans es una avión!!!

sábado, 17 de octubre de 2009

El disco más vendido de la Argentina

Escuche en la radio que el disco más vendido de rock nacional era "Alta suciedad" (un discaso) pero yo estaba seguro que era el amor despues del amor de fitito Paez y por suerte no estaba equivocado.

"Alta suciedad" de Andres Calamaro es el segundo. El disco superó las 500.000 copias vendidas en todo el mundo (el segundo disco más vendido del rock argentino justo después de El amor después del amor de Fito Páez que alcanzó las 750.000 copias vendidas) y llevó al músico a realizar gran cantidad de recitales, en los cuales compartió el escenario con músicos como en grande ,Fito Páez y Joaquín Sabina, entre otros.

Este regreso post-Rodríguez fue perfecto y diez años después (2007) Alta suciedad sería ubicado en el décimo puesto por 180 músicos y periodistas musicales en lo que serían Los 100 mejores álbumes del rock argentino según Rolling Stone.

Entonces el más vendido es "El amor despues del amor" me quedo tranquilo, en realidad me queda la duda si Calamarico supero a Fitito. Por eso si saben algo comenten!!

viernes, 16 de octubre de 2009

JetBrains libera IntelliJIdea!!!

JetBrains libera IntelliJIdea Community Edition con licencia Apache.

No es la IDE en totalidad sino una versión menor, pero esta bueno para probar y siempre a la larga los productos open source son mejores y más completos que los primitivos.



sábado, 10 de octubre de 2009

Hadoop HBase

HBase es como el BigTable de google pero libre :D

Mas específicamente, HBase es una base de datos distribuida que permite escalar casi linealmente con simplemente agregar mas servidores al sistema. Para esto HBase puede utilizar opcionalmente una tecnología llamada HDFS (Hadoop Distributed File System) que básicamente es el análogo del GFS (Google File System), que no es mas que un fichero de archivos distribuidos.

Con esta arquitectura es posible lograr no solo altos niveles de rendimiento, sino que además altos niveles de redundancia en datos, ya que a cierto nivel los datos están distribuidos de manera redundante similar a como los datos son distribuidos en un sistema de discos duros con tecnología RAID 5 por ejemplo (aunque esta funcionalidad tengo que aun verificarla personalmente, pero sepan que es parte al menos del concepto original).

Algo importante a notar aquí es que si algo hemos aprendido del Internet, y en particular de Aplicaciones Web, es que en muchos casos la demanda de usuarios es impredecible, en donde una pequeña empresa con una gran idea puede de la noche a la mañana recibir millones de visitas, y para eso mejor estar preparado que perder esas visitas, y es ahí en donde se le verá la importancia a HBase.

Sin embargo, HBase no es solo una base de datos altamente escalable, sino que además es un nuevo paradigma que por fin quizás deje atrás las bases de datos relacionales en muchos casos típicos.

Por décadas hemos dependido de bases de datos relacionales, y estas han sobrevivido las bases de datos de objetos, de XML, y toda variedad bajo el sol, pero gracias a las lecciones que Google le ha dado al mercado con su infraestructura, se ha hecho evidente que esta nueva filosofía de diseñar bases de datos es quizás la mas adaptable para las necesidades de hoy en Internet.

Sin embargo, hay que entender que aunque HBase representa una amenaza a largo plazo tanto para las bases de datos comerciales como Oracle, DB2 o MS SQL Server, así como a las de Código Libre como Postgress o hasta a la misma MySQL, que sin embargo hay situaciones en donde es mejor aun tener una base de datos relacional. ¿Cómo decidir? Este documentote apuntará a los primeros pasos.

Técnicamente, HBase está implementado en Java, por lo que funciona en cualquier plataforma que tenga una máquina virtual de Java, lo que hace a HBase una tecnología fácil de adoptar en entornos de Unix, Linux, Windows y hasta OS X.

Pero quizás una de las mejores noticias sobre esta tecnología es que es Open Source (Código Libre), lo que significa que puede ser utilizado por cualquiera libre y gratuitamente, así como uno poder aportar a su desarrollo o aprender de su código fuente.

Si eres estudiante de informática, no pierdes nada en aprender estos conceptos ahora, y de paso estarás mejor preparado cuando en unos años este tipo de conocimientos se tornarán invaluables y altamente cotizados. Un tip: Puedes iniciar con HBase y Java en una sola PC, y cuando quieras experimentar en modo distribuido es cuando en realidad necesitarás a HDFS.

Nota a técnicos: Una aclaración: Aunque BigTable es relativamente reciente, los conceptos detrás de la técnica no lo son, y ya eran conocidos desde hace al menos unos 20 años atrás en otras formas.

Actualización: Algo importante que no mencioné en el artículo es que Yahoo es posiblemente el contribuidor mas grande a este proyecto, y lo utiliza en decenas de miles de servidores internamente.


Que es Hadoop?


Apache Hadoop es un proyecto Java de software libre para brindar servicios de computación distribuida, escalable y confiable. Hadoop fue inspirado por los papers: Google's MapReduce y Google File System (GFS) . Hadoop incluye los siguientes subproyectos:

  • Hadoop Common: Utilidades comunes.
  • Avro: Un sistema de serialización de datos que provee integración con lenguajes scripts.
  • Chukwa: Un sistema recolección de datos para manejo de grandes sistemas distribuidos.
  • HBase: Una base de datos distribuida que soporta la estructura de data storage para grandes tablas.
  • HDFS: File system distribuido.
  • Hive: Una infraestructura de data warehouse que prove sumarización de datos y consultas ad hoc.
  • MapReduce: Un framework para procesos distribidos de grandes conjuntos de datos en clusters
  • Pig: Un lenguaje de alto nivel para flujo de datos y framework de ejecución de procesos en paralelo.
  • ZooKeeper: Un coodinador de servicios de alta performance para aplicaciones distribuidas.

El equipo de Yahoo anunció que logró batir el record en el concurso anual GraySort, siendo ganador en 2 categorías. GraySort consiste en un conjunto de benchmarks, cada uno con sus propias reglas. Todos los benchmarks miden el tiempo para ordenar distinta cantidad de registros de 100 bytes cada uno (los primeros 10 bytes son la clave del registro, el resto el valor).

Para repartir la carga utilizaron un cluster gigante coordinado con Apache Hadoop. De esta manera, Apache Hadoop logró ordenar 1 Terabyte de datos en 62 segundos, y 1 Petabyte en 16.25 horas. Es la primera vez que un producto de software libre logra ganar esta competencia.

Apache Hadoop esta en el top level de los proyectos de Apache

lunes, 5 de octubre de 2009

Donde estas jar ?

No les paso que usaban un jar o una clase y no se acuerdan de donde salio o la entrada en el POM?

Bueno por suerte existe http://javacio.us/ que nos permite buscar clases y nos devuelve la entrada del pom. Lo pueden configurar como un plugin de google y cada vez que busquen en google, nos ayudara!!!

Otra herramiente más buena que el arroz con leche, es http://www.mvnrepository.com que nos permite buscar las dependencias para agregar a nuestro pom.