Friday, October 28, 2005

Nuevo sistema de licencias de Microsoft

Bueno, parece ser que ya comenzaron a enteder, aunque a su manera pero es un primer paso para lo que deben hacer sino quieren perder mercado, pero pienso que estan muy lentos todavia.

aki esta un link sobre el tema de las nuevas licencias de desarrollo, modeladas como las licencias open source ya conocidas como la BSD, etc. Disfrutenlo ;-)

http://www.versioncero.com/noticia/425/nuevo-sistema-de-licencias-de-microsoft

Monday, October 24, 2005

Sobre Ajax


Esta imagen describe muy bien lo que es Ajax.


Segun wikipedia:

AJAX, acrónimo de Asynchronous JavaScript And XML (en inglés «JavaScript y XML asíncronos»). Técnica de desarrollo web para crear aplicaciones interactivas mediante la combinación de tres tecnologías ya existentes:

  • HTML (o XHTML) y Hojas de Estilo en Cascada (CSS) para presentar la información;
  • Document Object Model (DOM) y JavaScript, para interactuar dinámicamente con los datos, y
  • XML y XSLT, para intercambiar y manipular datos de manera desincronizada con un servidor web (aunque las aplicaciones AJAX pueden usar otro tipo de tecnologías, incluyendo texto plano, para realizar esta labor).

Diferencias con las aplicaciones web tradicionales

En las aplicaciones web tradicionales los usuarios interactúan mediante formularios, que al enviarse, realizan una petición al servidor web. El servidor se comporta según lo enviado en el formulario y contesta enviando una nueva página web. Se desperdicia mucho ancho de banda, ya que gran parte del HTML enviado en la segunda página web, ya estaba presente en la primera. Además, de esta manera no es posible crear aplicaciones con un grado de interacción similar al de las aplicaciones habituales.

En aplicaciones AJAX se pueden enviar peticiones al servidor web para obtener únicamente la información necesaria, empleando SOAP o algún otro lenguaje para servicios web basado en XML, y usando JavaScript en el cliente para procesar la respuesta del servidor web. Esto redunda en una mayor interacción gracias a la reducción de información intercambiada entre servidor y cliente y a que parte del proceso de la información lo hace el propio cliente, liberando al servidor de ese trabajo.

Wikipedia

Un ejemplo de es este tipo de aplicaciones, que de seguro ya lo has probado es Gmail y también Google Maps ;-).

Sunday, October 23, 2005

HelloWorld en J2ME con Midlet

Este es mi primer código para celulares en J2me y por supuesto es un Helloworld. El proximo paso es hacer un juego llamado sudoku para celulares. También he pensado en el uso de bluetooth y de webservices con celulares( a ver como le hago).

También el uso de OTA, que es para la instalación de aplicaciones en los celulares desde un servidor, la ventaja de esto es que la aplicaciones se instalan, actualizan y descargan automaticamente siendo fácilmente usable por el usuario.

MovilSudoku.java
------------------
package net.sf.jsudoku.movil;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class MovilSudoku extends MIDlet implements CommandListener
{
private Form mMainForm;

public MovilSudoku()
{
mMainForm = new Form("HelloWorld with MIDlet");
mMainForm.append( new StringItem(null,
" HelloWorld with MIDlet. \n By vns java "));
mMainForm.addCommand( new Command("Exit", Command.EXIT, 1) );
mMainForm.setCommandListener( this );
}

protected void startApp( ) throws MIDletStateChangeException
{
Display.getDisplay(this).setCurrent(mMainForm);
}

protected void pauseApp( )
{
}

protected void destroyApp( boolean p1 ) throws MIDletStateChangeException
{
}

public void commandAction(Command cmd, Displayable arg1) {
notifyDestroyed();
}
}

Saturday, October 22, 2005

Como hacer un JDBC Datasources con Database Connection Pool en Tomcat y Hibernate

Durante la creación de mi projecto campusip, agregé esta caracteristica al projecto, para mejorar el rendimiento en cuanto a el manejo de session y transacciones con la base de datos (cualquiera que sea esta).

Un pool de conecciones se encarga de crear y manegar las conecciones a un a base de datos determinada. la ventaja es que se recicla y se reusa las conecciones a las DB, siendo esto más eficiente que crear una nueva cada vez. El componente utilizado aqui es Jakarta-Commons DBCP el cual hace lo que acabamos de describir.

Tomcat 5.5.X ha hecho cambio de como se hace una configuración JNDI para una conección JDBC. Ya no se cambia el archivo server.xml, todos los cambios se hacen en el directorio de la webapp y se debe tomar en cuenta el nombre de la webapp. (en nuestro caso campusip)

  1. Modificar web.xml, context.xml y hibernate.cfg.xml segun ejemplos dados debajo.
  2. Instalar los driver de JDBC: se debe copiar el driver JDBC de la base de datos usada (En mi caso postgresql ) a esta dirección $CATALINA_HOME/common/lib, donde CATALINA_HOME es la dirección de instalacion de Tomcat. (Es un archivo *.jar )
  3. Instalar los driver de DBCP connection pool, entonces se debe copiar a la direccion $CATALINA_HOME/common/lib/naming-factory-dbcp.jar.
  4. Copiar el archivo webapps/campusip/META-INF/context.xml con el nombre cambiado para %Tomcat 5.5%\conf\Catalina\localhost/campusip.xml - el archivo no sufre cambios.
  5. Cualquier otra ver documentación.
Estos procedimiento (NI pienses que lo hago manual :-D) son de manera automátizada atravez de una herramienta de la cual ya he hablado llamada Ant, utilizando el build.xml del projecto.

Y ya solo es cuestión de probar la aplicación web.

context.xml :


<Context path="/campusip" docBase="campusip"
debug="5" reloadable="true" crossContext="true">

<Resource name="jdbc/campusipDB" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/jcolegioip"
username="postgres" password="postgres" maxActive="20" maxIdle="10"
maxWait="-1"/>

</Context>


----


web.xml (solo la parte de resource ):



<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">



...

<resource-ref>
<description>Connection to my DB.</description>
<res-ref-name>jdbc/campusipDB</res-ref-name>
<res-type>javax.sql.DataSource </res-type>
<res-auth>Container</res-auth>



</resource-ref>

...

</web-app>

------

hibernate.cfg.xml (solo la parte de la DB):


<session-factory>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

<property name="connection.datasource">java:/comp/env/jdbc/campusipDB</property>

...

</session-factory>
</hibernate-configuration>
----

Nota : Tomcat viene con un sistema de JNDI de sólo lectura. . ver documentación

The OpenDocument format (ODF)

"El Formato de Documento Abierto para Aplicaciones Ofimáticas de OASIS, también referido como OpenDocument, es un formato de fichero estándar para el almacenamiento de documentos ofimáticos tales como hojas de cálculo, memorandos, gráficas y presentaciones. Su desarrollo ha sido encomendado a la organización OASIS y está basado en el esquema XML que es utilizado por OpenOffice.org." definición de wikipedia.

Para entender el problemaso que tiene Microsoft tratando de defender su formato MS WORD ML (el cual ya perdió la batalla), puesto que el estado de Massachussets donde se prohibió el uso de formatos cerrados en las oficinas publicas a partir del 2007, para el cual ya será obligatorio el uso de formatos abiertos.

Y realmente tienen razón, se ha probado a través de los años que los formatos cerrados tienen barreras técnicas o legales, arriesgando a futuro al que use este tipo de software. Una vez más se probó que el modelo abierto es la mejor solución para el desarrollo de software.

La institución encargada de este estándar es OASIS, acrónimo de (Organization for the Advancement of Structured Information Standards), (la cual también es encargada en conjunto con W3C del estándar de WebServices) es una institución sin fines de lucro.

Claro que una de las primeras aplicaciones que soportan este formato es OpenOffice.org.

Este fenómeno ha causado un efecto domino para los demás estados, porque también están interesados en el cambio. Y una de las preocupaciones de Microsoft, es que de hacerse esto efecto no habría compatibilidad con los formatos anteriores de sus office, pero el miembro de desarrollo Gary Edwards respondió diciendo que esto esta definido en la capa de transformación la cual se encarga de esto y trabajaron durante 18 meses en eso. ver artículo de entrevista.

Otra razón mas que alegan los opositores al Standard es el costo de la implementación del nuevo formato en las instituciones públicas. Le deja para que comenten.

Sunday, October 16, 2005

Validaciones con modulo 11 y más

En el desarrollo de sistemas se utilizan los llamados "Digitos de autoverificación" este se calcula aplicando una fórmula. En nuestro caso es para la Cédula y el RNC, los cuales son campos importantes en las bases de datos y deben ser verificados antes de aceptar esos datos como válidos.

Las fórmulas son la de Módulo 10 y Módulo 11, respectivamente. Hay otro datos como el de la tarjeta de créditos que se utiliza una formula llamada algoritmo de LUHN, que es utilizado para verificar si el número de una tarjeta dada es válido. (Eso no quiere decir que no sea robada :-)

También es utilizado en verificacián de cádigo de barras y otras aplicaciones más.

Este es el código que utilizo, todavia no tengo el algoritmo para la tarjeta de crédito pero pronto se lo agregaré.


/**
* Clase de utilirias para la validacion de datos, como cedula y RNC, etc.
*
* @version 1.1v
* @author vns
*
*/
public class Validation {

/**
* Este método valida si la cedula de la República Dominicana es válida,
* utilizando el algoritmo modulo 10. No se pasan guiones en el
* argumento.

*
* @since 1.1v
* @param cedula es un arreglo de char numérico
* @return true si la cedula es válida.
*/
static public boolean validarCedula(char[] cedula){
int suma = 0;
int division = 0;
final char[] peso = {'1','2','1','2','1','2','1','2','1','2'};

if (cedula.length != 11)
return false;
else
{
for (int i = 0; i < 10 ; i++ ){
int a = Character.getNumericValue( cedula[i] );
int b = Character.getNumericValue( peso[i] );
char[] mult = Integer.toString(a * b).toCharArray();
//TODO mover de aqui, más arriba
//para verificar si es un dígito o no
if (!Character.isDigit(cedula[i]))
return false;

if (mult.length > 1){
a = Character.getNumericValue( mult[0] );
b = Character.getNumericValue( mult[1] );
}else{
a = 0;
b = Character.getNumericValue( mult[0] );
}
suma = suma + a + b;
}

division = (suma / 10) * 10;

if ( division < suma )
division += 10;

int digito = division - suma;

if (digito != Character.getNumericValue(cedula[10]) )
return false;
}
return true;
}

/**
* Este método valida si el RNC de la República Dominicana es válida,
* utilizando el algoritmo modulo 11. No se pasan guiones en el
* argumento.

*
* @since 1.1v
* @param rnc es un arreglo de char numérico
* @return true si el rnc es válido
*/
static public boolean validarRNC(char[] rnc){
final char[] peso = {'7','9','8','6','5','4','3','2'};
int suma = 0;
int division = 0;

if (rnc.length != 9)
return false;
else
{
for (int i = 0; i < 8; i++) {
//para verificar si es un dígito o no
if (!Character.isDigit(rnc[i]))
return false;

suma = suma + (Character.getNumericValue(rnc[i]) * Character.getNumericValue(peso[i]) );
}

division = suma / 11;
int resto = suma - (division * 11);
int digito = 0;

if (resto == 0 )
digito = 2;
else if (resto == 1)
digito = 1;
else
digito = 11 - resto;

if (digito != Character.getNumericValue(rnc[8]) )
return false;
}

return true;
}
}

Lenguaje DUDU+

Mi primer lenguaje de programación. Su nombre es DUDU+ bautizado así por un compañero (Raydelto)

DUDU+ es un lenguaje de programación basado en la sintaxis de JAVA el cual es desarrollado por mis compañeros y yo. Este lenguaje no trata de crear la POO que tiene java en si ni tampoco crear un lenguaje de programación completo, sino que forma parte de un aprendizaje en el cual podamos crear(desarrollar) un lenguaje en el que se pueda:

a) Declarar variables
b) Verificar la síntaxis
c) Realizar operaciones matemáticas

Las especificaciones para crear un programa en DUDU+:

  • lenguaje estructurado (no existe la intención de hacerlo POO)
  • Los identificadores deben ser palabra que empiecen con letras, pueden contener letras y números. (NO se empieza con caracteres especiales excepto $ y _ )
  • La clase es la estructura principal, compuesta por variables miembros(no es POO).
  • solo exite Repeat... Until, no existe estructuras de flujo (if...then, swicth...case)
  • Las operaciones matematicas permitidas son:
  1. +, -, *, /
  2. Ademas existe los operadores ++, --. (sólo postfijos)
  • Las variables pueden ser de tipo:
  1. byte
  2. integer
  3. short
  4. long
  5. float
  6. double
  • No exite Package ni Import por ende.
  • Se Agrego manejo de arreglo
  • Existe una nueva estructura de Stack la cual se instancia con la palabra clave
    make stack. (ver test.java)
  • Agrege una estructura manejo de arreglos.

En un siguiente post publicaré el grammar del lenguaje DUDU+. He mejorado el leguaje dudu+ ya que tenia algunos bugs. También puedo presentar el diagrama de un código en forma de árbol según el diagrama del lenguaje.

Wednesday, October 12, 2005

Desarrollo en Móviles Nokia con Java

Aqui estoy de nuevo con algo nuevo, me decidi a programar para dispositivos Móviles con J2ME, seleccione con blanco los teléfonos NOKIA especificamente en el modelo de 6230 de un amigo porque yo no tengo un celular con tecnologia java integrada. (Sony Ericsson t68i es el mio).

Bueno en mi ide favorito :-) ECLIPSE le instale un SDK de NOKIA el Nokia Developer's Suite 3.0 for J2ME™ el cual trae como ven en la imagen un simulador para las aplicaciones.



Dentro de las caracteristicas de este SDK de NOKIA estan:
  • Un creador de clases
  • Diseñador de UI
  • Diseñador de flujo de pantalla
  • Creador de paquetes
  • Firmador de paquetes
  • Herramientas para clientes de WebServices
  • Emulador de aplicaciones
  • Un editor de DRM (Para lo de derecho de autor, si no lo sabes)
  • Convertidor de audio
  • Y otros más.
Es rápido hacer, ver y probar tu aplicación en el simulador. Lo cual te muestra lo que haz logrado :-D. Lo más interesante que tiene es el Diseñador UI, el cual voy a probar para diseñar un pequeño juego.

En mi primera experiencia solo puedo decir que, viendo que NOKIA se a unido a ECLIPSE para el desarrollo de un IDE y SDK para lo que es aplicaciones moviles, podemos esperar mucho más cosas en el futuro en esta área.

Monday, October 10, 2005

Sobre números aleatorios

Para la generación de número aleatorios,por los general uno trabaja con números del cero hasta un numero superior, en código esto seria haci:


private static byte generarNum() {
return (byte) ( Math.random() * NumeroSuperior + 1);
}


Pero que pasa si queremos ( Como me paso a mi ), generar números aleatorios entre
un minimo y un maximo, debemos hacer esta fórmula:

private static byte generarNum() {
return (byte) ((
NumeroSuperior - NumeroInferior + 1) * Math.random() + NumeroInferior );
}

Espero que este codigo le sea util.

Saturday, October 01, 2005

Tool para extreme programming y Software que utilizo en el desarrollo

Aqui presento algunas de la librerias y software utilizados en el desarrollo de mis sistemas.

Eclipse
Mi IDE favorito, lo recomiendo, además de ser el número uno detro de los open source :-).
www.eclipse.org

Netbeans
Es una buena opción, solo lo uso para la editar .jsp y archivos xml. (Eclipse ya tiene esta caracteristicas ), y la ventaja que busco es de tener complementación de código (para los tag de jsp) y verificación de errores en línea.
www.netbeans.org

Hibernate
Es una poderosa herramienta de persistencia object/relational y un servicio de consulta para Java de alto rendimiento. Hibernate le deja desarrollar las clases persistentes que siguen el lenguaje usual de Java - incluyendo la asociación, la herencia, el polimorfismo, la composición, y el marco de las colecciones de Java. Hibernate permite que usted exprese consultas en su propia extensión portable del SQL (HQL), así como en el SQL nativo, o con los objetos basados en Java.
www.hibernate.org

Webwork
Es un marco de desarrollo de aplicaciones web en Java. Se construye específicamente para aumentar la productividad del desarrollador y simplicidad del código en mente, proporcionando la ayuda robusta para las plantillas reutilizables de UI, tales como controles del form, los temas de UI, la internacionalización, el parámetro dinámico del form traz un JavaBeans, la validación lateral robusta del cliente y del servidor, y mucho más.
http://www.opensymphony.com/webwork/

Sitemesh
Es un marco de disposición y de decoración de aplicaciones web y marco de la integración del uso de la web para ayudar en crear los sitios grandes que consisten en muchas páginas para las cuales se requiera un esquema constante de look/feel, de la navegación y de la disposición.
http://www.opensymphony.com/sitemesh/

Lucene
Es una biblioteca de alto rendimiento, completamente equipada del motor de búsqueda de texto escrita enteramente en Java. Es una tecnología conveniente para casi cualquier uso que requiera búsqueda con texto completo, especialmente inter-plataforma. Es parte de la comunidad de Apache.
http://lucene.apache.org/

Jakarta Commons
Los Commons es un subprojecto de Jakarta centrado en todos los aspectos de los componentes reutilizables de Java.
http://jakarta.apache.org/commons/index.html

Xdoclet
XDoclet es un motor abierto de la generación del código de fuente. Permite la programación Orientada a Atributos para Java. En pocas palabras, esto significa que usted puede agregar más significación a su código agregando los meta datos (atributos) a sus fuentes de Java. Esto es lo que se hace en las etiquetas especiales de JavaDoc.
http://xdoclet.sourceforge.net/xdoclet/index.html

Ant
La hormiga de Apache es una herramienta de construcción basada en java. En teoría, es una clase de como Make, pero sin las arrugas de este.
http://ant.apache.org/

Junit
Por es un marco de trabajo de pruebas de regresión escrito Erich JUnit Gamma y de Kent Beck. Es utilizada por el desarrollador que crea pruebas de unidad en ejecución en sus programas escritos en Java. Este framework es muy utilizado, principalmente para el que aplica la metodología de Xtreme Programming.
http://www.junit.org/index.htm

MockObjects
Este es parte del TTD. Ver junit
http://www.mockobjects.com/FrontPage.html

Jikes
Jikes TM es un copilador que traduce archivos fuentes de Java TM como esta definido en la especificación de la lenguaje de Java en bytecoded el sistema de instrucción y el formato binario definidos en la especificación virtual de la máquina de Java . La mejor ventaja de usar jikes es un copilador del alto rendimiento (compila en segundo gran cantidad de código) , haciéndolo ideal para el uso con proyectos más grandes.
http://jikes.sourceforge.net/

Tomcat
Es el contenedor de servlet que se utiliza en la puesta en práctica oficial de la especiicación para los Java Servlet y las tecnologías de las JavaServerPages.
http://jakarta.apache.org/tomcat/index.html

Postgresql
el altamente escalable, SQL implementado al estandar, sistema de administración objeto-relacinal de base de datos de fuente abierta más avanzado, ahora está experimentando la prueba beta de la versión siguiente : PostgreSQL 8,1. Tienen que probarlo :-D.
http://www.postgresql.org/

Todos estas librerias y software tienen sus licencias de uso, asi que deben leerselas antes de tomar una desición de usarlos.