Mostrando entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Java. Mostrar todas las entradas

martes, 10 de mayo de 2011

Las 10 webs de lectura imprescindibles para el Arquitecto de Software

Hacia tiempo que tenía ganas de redactar una entrada con las webs que me vienen ayudando en el día a día laboral. De esta forma, confeccioné un ranking con lo que para mi son los 10 sitios webs imprescindibles para un Arquitecto de Software.


InfoQ es el más completo sitio con artículos y conferencias del mundo del software, dividido en comunidades: Java, .NET, SOA, Arquitecturas, Agile.


Subscripción para recibir tarjetas-artículos sobre nuevas tecnologías de software.


Comunidad con artículos de la plataforma JEE.



Extensa recopilación de articulos sobre la plataforma Java continuamente actualizada.


Web con artículos sobre metodologías ágiles y liderazgo de proyectos.


El clásico de clásicos de Java en el lenguaje de Cervantes con noticias y una gran comunidad comprometida a brindar ayuda en los foros.


Comunidad de Linux en español con novedades sobre tecnologías de desarrollo para éste sistema operativo.


Excelente web con todo los patrones de diseño, anti-patrones y técnicas de refactoring explicados gráficamente y con ejemplos en los lenguajes más usados.


Se autodefine como: "El corazón de la comunidad de desarrolladores Java".


Sitio principal sobre el desarrollo de las apis de Java, implementaciones de JSRs y librerias en incubación.

jueves, 19 de marzo de 2009

FileDrop: Drag & Drop de archivos fácil en Java

Así es como se presenta éste api, sencillo, de dominio público y muy, pero muy útil.

FileDrop no tiene licencia, es de dominio público y tal como se aclara en su web, podemos hacer lo que se nos antoje con el. El zip de descarga contiene además del jar, el archivo FileDrop.java con toda la funcionalidad embebida para que podamos incluírlo en la ruta de paquetes de alguna aplicación propia sin tener dependencias de jar externos.

Para ver cuan fácil es usar el Drag & Drop de archivos en Java con FileDrop, vamos a ir más alla del ejemplo de su web y vamos a hacer un componente que muestre imágenes y acepte archivos de imagenes "dragueados" desde el sistema. Algo similiar se podría hacer con visores PDF, reproductores multimedia, o cualquier funcionalidad relacionada al drag & drop de archivos integrada a una aplicación Java standalone. En éste link puse el código fuente del ejemplo.

Primero implementmos el visor de imágenes como un componente. También es posible implementar el visor de imagenes extendiendo de JPanel, Canvas o un JLabel en lugar de un JComponent.
Luego es necesario definir una clase que maneje la transferencia del objeto a draguear. Para nuestro propositito sólo se soportará transferencia de objetos java.awt.Image.

Y Finalmente, hacemos uso de FileDrop en el método que instancia nuestro visor de imágenes.

Como se aprecia en el ejemplo, en el método FileDroped del listener se espera un array de objetos File, ésto permite manejar múltiples "dropeos" de archivos. Una aplicación útil podría ser la típica lista de reproducción que al dropear múltiples archivos .mp3 en el contenedor Swing reproduzca el elemento [0] y encole el resto en la lista.

Espero que les sirva y cualquier duda, comenten.

lunes, 12 de enero de 2009

JNA: Invocando código nativo desde Java

Para los que no lo conozcan, JNA (Java Native Access) es un proyecto del JDK-Incubator que nos proporciona un api para poder acceder a código nativo desde java. JNA Nos facilita y acelera el desarrollo al poder invocar funciones de librerías compartidas (.dll en Windows y .so en Linux) sin tener que usar JNI, ya que solamente debemos codificar en java implementando las interfaces y reglas que la api nos expone. La licencia de JNA es LGPL.

Veamos un ejemplo hola mundo escrito en consola por la función printf de la librería msvcrt si la plataforma es windows o la librería c en caso contrario:



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

public class HelloWorld {

   public interface CLibrary extends Library {
       CLibrary INSTANCE = (CLibrary)Native.loadLibrary(
          (Platform.isWindows() ? "msvcrt" : "c"), 
          CLibrary.class);
  
       void printf(String format, Object... args);
   }

   public static void main(String[] args) {
       CLibrary.INSTANCE.printf("Hola mundo!\n");
       for (int i=0;i < args.length;i++) {
           CLibrary.INSTANCE.printf(
              "Argumento %d: %s\n", i, args[i]);
       }     
   } 
} 

Pueden apreciar la simpleza con la que se "wrappea" la funcion printf de c. Noten que además de imprimir el clásico "hola mundo" se imprimen todos los argumentos pasados al metodo main utilizando el formateo que nos ofrece la funcion printf de c.

Esto es solo un ejemplo ilustrativo de uso, pero imaginen el potencial de facilidad que nos permite JNA al utilizar funciones de c en java comparando con el arduo trabajo que nos llevaría con JNI.

Llevo un tiempo utilizando JNA y aunque me he encontrado con un par de inconvenientes, pude dar resolución feliz a todo lo que quise "wrappear" a java desde librerías nativas. Hablo de invocar funciones pasando como parametros estructuras complejas, y parámetros por referencia para poder obtener retornos. Hasta ahora todo lo pude hacer y de forma simple. :)

Para finalizar, algunos proyectos que utilizan JNA:

Cualquier consulta sobre JNA u cualquier otra tecnología la pueden realizar en: