Monday, December 26, 2005

Y WiMax??

Hace 12 meses que conoci la nueva tecnologia Wimax, pero al dia de hoy no veo productos para esta tecnologia, intel que es una de las sonadas solo la he visto en en chips, donde estan los productos de para el consumo tanto para la empresa como para la casa, donde me pregunto?

Que es lo que ha pasado, esta tednologia se anuncia con bombos y platillos, pero hasta el dia de hoy no veo producto ni para desktop ni para laptop, si alguien conoce algun producto, y claro que sea a un precio razonablemente para una empresa o una casa.

Busque en google, pero no aparece nada y lo poco que aparece es casos de exitos y algunos de los pocos productos que aparecieron son de empresas que realmente su costo esta muy por encima de cualquier tecnologia del mercado comparable.

Si alguien conoce algun producto por favor deje un comentario.

Friday, December 16, 2005

Como hacer una aplicacion java sin el Main()


class NoMainMethod
{
static
{
System.out.println("Mirenme! no soy un metodo main");
System.exit(0);
}
}

Thursday, December 08, 2005

Introducción a la tecnología movil de java, J2ME


La descripción de J2ME es que es semejante a J2SE, J2ME no es un pedazo de software, ni está una sola especificación. Esta diferencia puede ser confusa para los desarrolladores que son ya familiares con J2SE. En lugar, J2ME es una plataforma, una colección de tecnologías y especificaciones que se diseñan para el diverso mercado de los dispositivos. Porque J2ME atraviesa tal variedad de dispositivos, no tendría sentido de intentar crear una solución. J2ME, por lo tanto, se divide en configuraciones, perfiles, y paquetes opcionales.


Las configuraciones son las especificaciones que detallan una máquina virtual y un sistema bajo de APIs que se pueda utilizar con cierta clase del dispositivo. Una configuración, por ejemplo, se pudo diseñar para los dispositivos que tienen menos de 512 KB de memoria y de una conexión de red intermitente.

La máquina virtual es una Java Virtual Machine(según lo descrito en la especificación) o un cierto subconjunto del JVM. El sistema de APIs es acostumbradamente un subconjunto del J2SE APIs.

Las estructuras de un perfil en una configuración pero agregan un APIs más específico para hacer un ambiente completo para los usos. Mientras que una configuración describe un JVM y un sistema básico de APIs, por sí mismo no especifica bastante detalle para permitirle construir usos completos. Los perfiles incluyen generalmente APIs para el ciclo vital de uso, el interfaz , y el almacenaje persistente.

Un paquete opcional proporciona la funcionalidad que no se puede asociar a una configuración o a un perfil específica. Un ejemplo de un paquete opcional es el Bluetooth API (JSR 82), que proporciona un API estandardizado para usar el establecimiento de una red de Bluetooth. Este paquete opcional se podía poner en ejecución junto a virtualmente cualquier combinación de configuraciones y de perfiles.


Reportes con JasperReports y Webwork

En mi projecto de campusip utilizo Webwork como framework para la web. Ahora necesito crear unos reportes (comencé con lo más sencillo :-). Lo bueno de usar Webwork es que ya viene integrado el JasperReport y por lo tanto sencillo de utilizar. Los reportes jasper son simples xml (o si como no simples :-) los cuales se compilan y se llenan de una fuente de datos.

Primero solo crea un clase que herede de ActionSupport y que por supuesto implemente un DAO para el acceso a los datos (Esto es a tu manera). Recuerda crear una instancia de tipo colección como: List, ArrayList, etc. la cual será utilizada para llenar el reporte. ver código.

Segundo creas una entrada en el xwork.xml del .action, debes pasarle tres parametros: format, datasource y location. ver código. Tendrás que crear una entrada de .action por cada formato que desees el reporte. (PDF, HTML, XLS, CSV y XML)

Tercero diseña el reporte por supuesto (puedes utilizar unas de varias herramientas gráficas que existen) utilizando IReport o JasperAssistant, para diseñar un lindo reporte :-), no tengo que decir que ahi que compilar el reporte. (tu eliges el método, yo prefiero con ant) .

Cuarto probarlo para ver si funciona y claro que funciona :-P



package net.sf.campusip.web.webwork.action.beca;

import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork.Preparable;

import net.sf.campusip.domain.personas.Beca;
import net.sf.campusip.web.webwork.action.AbstractAction;

/**
* @author vns
*
*/
public class PrintBecasReport extends AbstractAction implements Preparable {
private List becas = new ArrayList();

/**
*
*/
public PrintBecasReport() {
super();
}

public Object getModel() {
return this.becas;
}

/* (non-Javadoc)
* @see com.opensymphony.xwork.Preparable#prepare()
*/
public void prepare() throws Exception {
becas = jcolegio.getAll(Beca.class);
}

/**
* @return Returns the becas.
*/
public List getBecas() {
return becas;
}

}
========================

< name="reportbecas-pdf" class="net.sf.campusip.web.webwork.action.beca.PrintBecasReport">
< name="success" type="jasper">
< name="location">/mantenimiento/beca/becas_report.jasper
< name="dataSource"> becas
< name="format"> PDF


==========================



http://jasperreports.sourceforge.net/

Diseño de clases de Campusip


Este es el diagrama de clases del proyecto Campusip
https://sourceforge.net/projects/campusip/


Campusip es un software de administración de politécnicos de la República Dominicana. Y si quieren aportar este es un proyecto open source, la ayuda es bien recibida.

Este es un diseño para un caso particular pero puede ser modificado para ser usado en cualquier caso.

Diseño de reportes con JasperReport

Ahora que estoy comenzado a utilizar JasperReport para la creación de mis reportes, busquando un tutorial en la web, me tope con este tutorial. Es excelente porque también necesitaba una herramienta que fuese gráfica entonces iReport fue el que elegí, pero también existen otras herramientas gráficas.

Este trata todo los temas básicos para quien esta comenzado (como yo) a utilizar iReport para crear reportes en JasperReport. Realmente no es tan avanzado pero me ayudo en mis primeros pasos. Tampoco es que sea complicado.

Sunday, November 27, 2005

programar para el nuevo procesador Cell

En developerworks hay un articulo sobre como programar para el nuevo procesador Cell de IBM,
espero que lo disfruten.

Saturday, November 26, 2005

Sobre JavaWebStart

Si de java también, otra tecnología

Es un lanzador de aplicaciones via un navegador web. Creo que el grafico es muy explicito.

ventajas:
  • control de versiones y actulizacion automatica de la aplicación transparente al usuario
  • independiente de navegador
  • independiente de sistema operativo
  • firma de código
  • agrega caracteristicas de las que disfrutanlos applets como: seguridad, etc.
Desventajas: tener un JRE mayor a 1.2 ( no creo que sea un problema pues es una aplicación de java :-)

para más información:
http://java.sun.com/products/javawebstart/

también este artículo:
http://www.javahispano.org/article

Sunday, November 13, 2005

Hacer build más rápidos con ant

Encontre un buen artículo sobre como optimizar los build con ant.

Es importante optimizar los build porque aumentan la productividad en el desarrollo y más cuando el proyecto es pesado y complejo es cuanto más se necesita.

Aunque ya utilizaba algunas de estas técnicas, como usar jikes en las compilaciones se obtiene un redimento muy alto, por ejemplo en un proyecto que tengo, estaba con javac y se tardaba en compilar en casi 3 minutos y con jikes se tarda casi 1:15 ;-) se nota la diferencia. (tengo 118 clases en el projecto, más las que vendrán :-)

Claro que esto es más obvio cuando se utiliza
Continuous integration.

Y bueno lo que queremos siempre es lograr un mejor tiempo para aumentar la productividad cuando se trata de tareas repetitivas.

Tuesday, November 08, 2005

Java Studio Creator 2 Gratis!!!!!!!!! :-D

Sun está dando gratis por una promoción el Sun Java Studio Creador, que entre otras cosas permite desarrollar aplicaciones JSF.

Solo se debe estar registrado (SDLC) en el sitio de Sun y una vez que hagan la descarga les mandarán por mail la licencia para iniciar el IDE

Aprovechen esta oferta

http://www.netbeans.org/community/articles/creator_promo.html

Sobre JavaMail

JavaMail es el api para el desarrollo de tus aplicaciones, utilizando unos de los servicos más utilizados del internet el CORREO. Encontre un buen artículo el cual vale la pena leer si se quiere empezar a programar con esta api en tus projectos. Este artículo esta dividido en dos:
la primera parte es dedicada a la recuperación ( por medio de pop3) de email y la segunda al envio de email mediante smtp.

Realmente encuentro el artículo muy completo para ser un intro.

Desarrolla con reglas

Estas son reglas interpretadas a mi manera de un artículo que encontré:

  • Entiende y acepta que tendrás errores
  • No eres tu código - cuando critiquen es a tu lenguaje o programa no es a ti (por lo menos ;-)
  • NO importa cuanto karate sepas, siempre habrá alguien que sepa más
  • No rescribas el código de otros programadores - reutilizalo BE OPEN SOURCE :-) si ya esta hecho porque hacerlo de nuevo
  • Trata a las personas que entienden menos que tu con respeto y paciencia
  • La única constante es el cambio
  • El mando lo obtienes usando tus conocimientos, no tu posición
  • Pelea por lo que creas pero acepta también las derrotas
  • No seas el nerd del cuarto oscuro
este es el artículo original:
http://www.maestrosdelweb.com/editorial/sinegois/

Probando Firefox 1.5rc1

Baje la version 1.5rc1 de Firefox y esta estupenda, principalmente porque tiene una caracteristica que siempre quise desde el inicio, hacer drag and drop con los TAB :-D para poder ordenalos a mi manera.

Tiene un manejo de error más amigable para los usuario:


Además tiene actulización automática. Y nuevas mejoras de rendimiento. Chequeen el site

http://www.mozilla.org/

El proyecto Looking Glass

Desde la ultima vez que probe Looking glass (ya hace un año), decidi entrar al site para ver las cosas nueva, y vaya que si hay cosas nuevas.

  • Primero: Ahi una version para windows :-( una escusa menos para cambiar a linux )
  • Segundo: Hay un LIVE CD, esto es bueno para dar en las presentaciones demostraciones de la capacidades del software.
  • Tercero: Obviamente el software esta más estable por el desarrollo rápido y acelerado que tiene el team :-D.
  • La lista de software compatible es más grande


https://lg3d-core.dev.java.net/

Consigue un CD gratis de Netbeans

Mirando en el site de netbeans encontré , que estan dando un CD gratis (te lo envian también gratis ;-) Viendo lo que tenia que hacer: solo tener que registrarme en SDN (ya estaba resgistrado desde hace un tiempo :-) y bueno llenar el form.

Que contiene el CD:
  • NetBeans IDE 4.1
  • J2EE Application Server 8.1 PE Bundle
  • Mobility Pack 4.1
  • NetBeans Profiler
Además de que el netbeans no lo utilizo mucho, tiene un buen soporte de cvs (es un sarcasmo ,OK)

Nota: aunque tendré que pedirlo de nuevo porque en realidad, quiero probar la version 5 que estará listo pronto, porque la verdad prefiero eclipse pero soy open main ;-)

aqui esta el link: http://www.netbeans.org/about/cd-form.html

Saturday, November 05, 2005

Libros recomendados para la lectura sin desperdicio

He aqui sacado de mi librero una lista de libros, en los cuales se pueden leer sin desperdicio del tiempo, como me a pasado a veces cuando compro un libro y termino dejándolo en el primer capitulo, porque no lleno mis expectativas.

Espero que lo disfruten como yo lo hice. Pero antes tendrán que ver mi opinión de cada uno, porque tal vez les sirva para decidir si desea leer o no, un libro determinado en la lista. Los libros pueden estar en ingles o en español (mayormente en ingles). No tienen ningun orden en particular.

Java Open Source Programming: with XDoclet, JUnit, WebWork, Hibernate (Paperback)
by Joseph Walnes, Ara Abrahamian, Mike Cannon-Brookes, Patrick A. Lightbody
Unos de los mejores, lo recomiendo pero tienes que tener conocimiento y experiencia en programación con java en la web (como minimo saber de servlet y jsp) y por supuesto de todo lo que implique una aplicación en la web. Esta escrito por los lideres de los proyectos que estan en el título.

A Programmer's Guide to Java Certification: A Comprehesive Primer, Second Edition (Paperback)
by Khalid Mughal, Rolf Rasmussen
Es el mejor libro si quieres aprender el lenguaje (y certificarte si lo deseas ;-), aqui aprendes el lenguaje por completo, no como en esos tutoriales mediocres ;-) claro requiere un minimo de conocimiento de computación. Este es muy básico solo es el lenguaje, aqui no aprendes ha hacer una aplicación.

SCWCD Exam Study Kit Second Edition : Java Web Component Developer Certification (Paperback)
by Hanumant Deshmukh, Jignesh Malavia, Matthew Scarpino
Este no lo he leido pero le he dado una hojeada y además es uno de los más recomendados en Amazon. Sólo lo tengo para refencia (Y para la certificación también ;-) pero es muy completo para buscar información sobre las dos tecnologías web más usadas de java JSP y Servlet.

Aprendiendo C++ Para Linux En 21 Dias - Con CD ROM (Paperback)
by Jesse Liberty
Buenisimo, con decir que aprendi la verdadera POO con este libro. Es un libro que debería tener un programador en su biblio.

MDA Explained: The Model Driven Architecture--Practice and Promise (Paperback)
by Anneke Kleppe, Jos Warmer, Wim Bast
Este es muy bueno si quiere actulizarte (que deberías) en el mundo de la ingeniería de software.
Es corto y lo trata un tema MDA que pretende ser el proximo para en el desarrollo de software de una manera más continua e integra, facilitandole la vida a los ingenieros.

Practical PostgreSQL (O'Reilly Unix) (Paperback)
by Command Prompt Inc (Editor), John C. Worsley, Joshua D. Drake
Este es un libro básicos si quiere programar utilizando esta base de datos. Escrito por los lideres del este mismo proyecto.

Core J2EE Patterns: Best Practices and Design Strategies, Second Edition (Hardcover)
by Deepak Alur, Dan Malks, John Crupi
Este es un libro de referencia que no debe faltar en tu biblio (si programas para J2EE), se describen los patrones utilizados en J2EE para cada una de sus tecnologías.

Apache: The Definitive Guide (3rd Edition) (Paperback)
by Ben Laurie, Peter Laurie
Este es un libro básicos si quiere programar utilizando este web server.

Core JavaServer Faces (Sun Microsystems Press Java Series) (Paperback)
by David Geary, Cay Horstmann
Este libro es una recomendación para leerlo (porque no lo he leido), pero lo tengo en espera. JSF es el nuevo framework de desallorro en java para la web. Pero su aceptación es muy cautelosa puesto que es un framework basado en componentes manejado por eventos (como ASP.net). Por eso rompe con las técnicas de desarrollo de los programadores de java (que son muy buenas ;-) este framework se adapta al desarrollo de ventana (utilizado en visual studio .net) de una manera visual (demasiado diría yo ). Bueno pero hay que leerlo ;-)

Hibernate in Action (In Action series) (Paperback)
by Christian Bauer, Gavin King
Si deseas conocer o programar con este maravilloso framework, este es una lectura obligatoria.
Hibernate es cada vez más usado y lo recomiendo para cualquier proyecto.

Don't Make Me Think: A Common Sense Approach to Web Usability (Paperback)
by Steve Krug
Si programas aplicaciones web, cualquiera que se a tu lenguaje, este libro es básico si quiere trabajar con un alto grado de profesionalismo utilizando las técnicas adecuadas para la usabilidad de tu web sites. Es una lectura obligatoria y es un libro corto

WebWork in Action (Paperback)
by Jason Carreira, Patrick Lightbody
Este es un libro básicos si quiere programar utilizando este framework para aplicaciones web. Escrito por los lideres del este mismo proyecto. Recomiendo este framework.

No existe mejor manera de aprender que practicar lo aprendido :-D ( frase mia ;-) )

Programación con multiagentes

Según wikipedia:


El dominio del sistema multiagente o de inteligencia artificial distribuida es una ciencia y una técnica que trata con los sistemas de inteligencia artificial en red.

El bloque fundamental de construcción de un sistema multiagente, como es de esperarse, son los agentes.

Aunque no existe una definición formal y precisa de lo que es un agente, éstos son por lo general vistos como entidades inteligentes, equivalentes en términos computacionales a un proceso del sistema operativo, que existen dentro de cierto contexto o ambiente, y que se pueden comunicar a través de un mecanismo de comunicación inter-proceso, usualmente un sistema de red, utilizando protocolos de comunicación.

En cierto modo, un sistema multiagente es un sistema distribuido en el cual los nodos o elementos son sistemas de inteligencia artificial, o bien un sistema distribuido donde la conducta combinada de dichos elementos produce un resultado en conjunto inteligente.

Hay que notar que los agentes no son necesariamente inteligentes. Existen como en todo el resto del dominio de la inteligencia artificial, dos enfoques para construir sistemas multiagentes:

  • El enfoque formal o clásico, que consiste en dotar de los agentes de de la mayor inteligencia posible utilizando descripciones formales del problema a resolver y de hacer reposar el funcionamiento del sistema en tales capacidades cognitivas. Usualmente la inteligencia es definida utilizando un sistema formal (por ejemplo, sistemas de inferencia lógica) para la descripción, raciocinio, inferencia de nuevo conocimiento y planificaciôn de acciones a realizar en el medio ambiente.
  • El enfoque constructivista, que persigue la idea de brindarle inteligencia al conjunto de todos los agentes, para que a través de mecanismos ingeniosamente elaborados de interacción, el sistema mismo genere comportamiento inteligente que no necesariamente estaba planeado desde un principio o definido dentro de los agentes mismos (que pueden ser realmente simples). Este tipo de conducta es habitualmente llamado emergencia de comportamiento.

Desarrollo orientado a agentes

Como casi todo enfoque informático para la solución de problemas, los sistemas multiagentes proponen ayudas metodológicas de ingeniería de software, en este caso metodologías de ingeniería del software orientada a agentes (en inglés AOSE) y notaciones. Es decir, artefactos de desarrollo que son específicamente concebidos para crear sistemas basados en agentes.

Ontología y Web Semántica

Un avance para la informática como lo fue el WWW y lo más impresinante es que las dos tecnologías fueron ideas del mismo y único Tim Berners-Lee. Un físico (cada día me convenso de que la innovación no proviene una compañia X).

El uso de la ontología es ideal para el desarrollo de buscadores (Si como Google o mejor ;-), para completar esta tecnología (si le puede llamar así) ya esta incluida en el area de inteligencia artificial por lo que si programas para esto, ya estas trabajando con temas de inteligencia artificial.

Según wikipedia:

El término ontología en informática hace referencia al intento de formular un exhaustivo y riguroso esquema conceptual dentro de un dominio dado, con la finalidad de facilitar la comunicación y la compartición de la información entre diferentes sistemas. Esta es la diferencia con, aunque toma su nombre de una analogía con, el significado filosófico de la palabra ontología.

Un uso común tecnológico actual del concepto de ontología, en este sentido, lo encontramos en la inteligencia artificial y la representación del conocimiento. En algunas aplicaciones, se combinan varios esquemas en una estructura de facto completa de datos, que contiene todas las entidades relevantes y sus relaciones dentro del dominio.

Los programas informáticos pueden utilizar así la ontología para una variedad de propósitos, incluyendo el razonamiento inductivo, la clasificación, y una variedad de técnicas de resolución de problemas.

Típicamente, las ontologías en los ordenadores se relacionan estrechamente con vocabularios fijos --una ontología de fundacional -- con cuyos términos debe ser descrito todo lo demás. Debido a que esto puede ocasionar representaciones pobres para ciertos dominios de problemas, se deben crear esquemas más especializados para convertir en útiles los datos a la hora de tomar decisiones en el mundo real.

Dichas ontologías son valorables comercialmente, creandose competencia para definirlas. Peter Murray-Rust se ha quejado de que esto conduce a "una guerra semántica y ontológica debido a la competencia entre estándares". Por consiguiente, cualquier estándar de ontología fundacional es posible que sea contestado por los agentes políticos o comerciales , cada uno con su propia idea de 'lo que existe' (en el sentido filosófico de ontología).


La Web semántica tiene como objetivo crear un medio universal para el intercambio de información basado en representaciones del significado de los recursos de la Web, de una manera inteligible para las máquinas. Con ello se pretende ampliar la interoperabilidad entre los sistemas informáticos y reducir la mediación de operadores humanos en los procesos inteligentes de flujo de información. El precursor de la idea, Tim Berners-Lee miembro fundador del W3C, se esfuerza en que su propuesta de la Web semántica sirva para ampliar la capacidad de la World Wide Web mediante estándares, lenguajes de marcado y otras herramientas aplicables a su tratamiento.

Componentes de la Web Semántica

Los principales componentes de la Web Semántica son los metalenguajes y estándares de representación XML, XML Schema, RDF, RDF Schema y OWL. La OWL Web Ontology Language Overview describe la función y relación de cada uno de estos componentes de la Web Semántica:

  • XML aporta la sintaxis superficial para los documentos estructurados, pero sin dotarles de ninguna restricción sobre el significado.
  • XML Schema es un lenguaje para definir la estructura de los documentos XML.
  • RDF es un modelo de datos para los recursos y las relaciones que se puedan establecer entre ellos. Aporta una semántica básica para este modelo de datos que puede representarse mediante XML.
  • RDF Schema es un vocabulario para describir las propiedades y las clases de los recursos RDF, con una semántica para establecer jerarquías de generalización entre dichas propiedades y clases
  • OWL añade más vocabulario para describir propiedades y clases: tales como relaciones entre clases (p.ej. disjunción), cardinalidad (por ejemplo "únicamente uno"), igualdad, tipologías de propiedades más complejas, caracterización de propiedades (por ejemplo simetría) o clases enumeradas.

El padre del internet

Tim Berners Lee, increiblemente es un físico, aunque no es raro los físicos también programan :-).

http://es.wikipedia.org/wiki/Tim_Berners-Lee

UPDATE: NOTA DE ACLARANDO dicho el padre del internet es el padre del WWW específicamente.

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.

Tuesday, September 27, 2005

Como escribir comentarios para la documentación con el Javadoc

How to Write Doc Comments for the Javadoc Tool

Este es un tutorial de la convenciones usadas para la creación de comentarios en los programas que creamos en los projectos. Este documentación es importante porque será utilizado por otros programadores (y en algunos casos por nosostros mismos), para el desarrollo.

Este documento trara de como crear la documentación para que el javadoc pueda crear una documentación de nuestro código de manera correcta (como la del API de J2SE por ejemplo).

Obviamente el tutorial esta en ingles.

http://java.sun.com/j2se/javadoc/writingdoccomments/index.html

Code Conventions for the JavaTM Programming Language

Las convenciones de código son importantes para los programadores por un número de razones:

  • el 80% del coste del ciclo de vida de un software va al mantenimiento.
  • Apenas cualquier software es mantenido por su vida entera por el autor original.
  • Las convenciones de código mejoran la legibilidad del software, permitiendo entender el nuevo código más rápidamente y a fondo.
  • Si usted envía su código fuente como producto, usted necesita cerciorarse de que también esté empaquetado y limpiao como cualquier otro producto que usted cree.

Nosotros utilizamos las convenciones de código para el lenguaje de programación de JavaTM:
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

Este Howto esta en ingles (el idioma oficial de la programación), no hay tradución por el momento, pero trata de cosas muy sencillas, pero que deben tomarse en cuenta a la hora de programar. Tales como:
  • Nombres de archivos
  • Organización de los archivos
  • Identación del código
  • Declaraciones
  • Sentencias
  • Comentarios
  • Espacios en blancos
  • Convencion de nombres
  • Practicas de programación
  • Ejemplos de código
Todos esto relacionado claro, con el formato que debe tener el código escrito por un equipo de programación.

Por suerte, existe una herramienta sencilla que automatiza este proceso (NO es que hagas de tu código un desatre :-D ). Jalopy es un formateador de código fuente para el lenguaje JAVA. El cual ayuda para tener una simetría (utilizando las conveción que definas) en tu código fuente. El cual comenzaré a utilizar en mis projectos.

http://jalopy.sourceforge.net/

Saturday, July 30, 2005

Historia de Google

Los comienzos

Todo empezó en una primavera de 1995 cuando dos jóvenes universitarios, Sergey Brin, de 23 años, con experiencia en diseño web y titulado en Ingeniería Electrónica, y Larry Page, de 24, expero en tratamiento de datos y licenciado en Informática y Ciencias Matemáticas, que acabarian siendo cofundadores y actuales presidente y CEO de Google, se conocieron en un evento organizado por la Universidad de Standford para los aspirantes a su prestigioso Doctorado en Informática. Allí discutieron arduamente sobre cada tema hablando, sus sólidas opiniones y divergentes puntos de vista encontraron un objetivo común, conseguir información relevante de una gran cantidad de datos.

Es en otoño de ese mismo año, cuando estos dos estudiantes empiezan a desarrollar un algoritmo para la búsqueda de datos, que utilizarian en para el proyecto de "Biblioteca Digital" de la Universidad de Standford (Digital Library Project). En ese momento comenzó lo que más tarde sería llamado por Larry Page como PageRank, en 1997. También publicó, ese mismo año, un documento explicativo del PageRank que puedes encontrar aquí.

En enero de 1996, Larry y Sergey empezaron a desarrollar un motor de búsqueda llamado BackRub, nombrado así por su capacidad única de analizar los "enlaces entrantes" (enlaces que provienen de otras páginas) de una página web. Este buscador corría sobre varias máquinas Sun e Intel y su base de datos principal era guardada por un Sun Ultra II con 28Gb de disco y estaba implementado en Java y Python. Como curiosidad podemos ver un post de Larry preguntando una duda de Java (aquí). Larry, quien era conocido por haber construido una impresora a base de piezas de Lego, se puso manos a la obra para crear un nuevo entorno de servidores de gama baja (PC's), en vez de máquinas muy caras. Angustiados por su constante escasez de dinero, espereban siempre con ilusión la llegada de nuevas máquinas al departamento que pudieran utilizar para su proyecto. Muestra de esta escacez de medios son máquinas como esta.

Ya en 1997, BackRub pasa a convertirse en Google. Aún podemos ver como era Google por aquel entonces gracias a archive.org. El nombre "Google" es un juego de palabras que proviene de la palabra "googol", término acuñado por Milton Sirotta para referirse a a un número representado por un 1 seguido de 100 ceros. Un googol es un número muy largo. No existe un googol de nada en el universo, ni de estrellas, ni de partículas de polvo, ni de átomos. La utilización de este término por Google refleja la misión de organizar la inmensidad infinita que aparenta la world wide web.

Larry y Sergey continuaron perfeccionando su tecnología durante la primera mitad de 1998. Siguiente un camino que sería la clave del principio de Google, compraron un terabyte de discos a precios muy bajos y construyeron su propio data center en la habitación de Larry. Empezaron a buscar patrocinadores para su nueva empresa pero a pesar de la fiebre del puntocom de la época no tuvieron mucha suerte. Aquí podemos ver como era el diseño de Google por aquellos tiempos y aquí, el hardware que utilizaban.

Incapaces de interesar a ningún portal de los vigentes en aquel momento, Larry y Sergey deciden ir por su cuenta. Lo único que necesitaban era dejar de usar la habitación de Larry como datacenter, saldar sus deudas causadas por la compra de tantos discos y buscar a un inversor. Al final, además de los cien mil dólares ofrecidos por Andy Bechtolsheim, uno de los fundadores de Sun, consiguieron entre familia, amigos y otros parientes recaudar un capital inicial de almenos $1 millón de dólares.

A finales de Septiembre de 1998 Google Inc. es inauguarada en el garaje que les alquilaba un amigo. El local tenía grandes ventajas como una lavadora y una secadora entre otras cosas. También servía de parkin para el primer empleado de la compañía Craig Silverstein, ahora director de tecnología de Google.

Cuando Google.com aún estaba en fase beta, respondía a unas 10000 búsquedas al día. La premsa empezó a hacer eco de ello y varios artículos elogiando a Google aparecieron en USA Today y Le Monde. En diciembre de ese mismo año, PC Magazine nombró a Google en su top 100 de mejores buscadores del año 1998. Google empezaba a darse a conocer al mundo.

A partir de aquí Google empezó a crecer desmesuradamente. Al año siguiente, 1999, volvieron a mudarse a oficinas más grandes, con más empleados y respondiendo a alrededor de 500000 visitas. Y así hasta ahora, ganando premios, aportando calidad e innovación y batiendo records, Google es hoy el mejor buscador de la red y el más utilizado.