Google
 
Web javaenespanol.blogspot.com

Friday, February 08, 2008

Abriendo un cajón de dinero con Java

Hace unos días se me presentó la tarea de abrir un cajón de dinero mediante el puerto serie (RS-232) a través de un sistema de Punto de Venta web. Este cajón, es un POSLine Modelo CD-040.

La caja donde venía, contenía lo siguiente:
  1. Una simple hoja con especificaciones (no presentaba manual).
  2. Una pieza que se coloca en la PC como si de un dispositivo PCI se tratase (misma que servía para alimentar al cajón mediante alguno de los conectores de corriente que normalmente conectamos a los discos duros o lectoras de CD/DVD) y que tiene un jack hembra RJ-11 (los jacks que usan los teléfonos)
  3. El cajón en sí, al cual le salía un cable que tenía el conector RS-232 (puerto serie) y, a manera de bifurcación, un RJ-11, mismo que se conectaba al dispositivo del punto 2.
El problema, fue que el cliente no me dijo del dispositivo del punto 2, y se presentó en mi oficina con el cajón y el cable. Yo, no había tenido contacto con ese tipo de cajones, así que procedí a investigar al respecto.

En las múltiples páginas que consulté decía que los cajones podían ser de dos tipos: Serie, conectado a la PC, o RJ-11, conectado a una impresora de tickets, en este caso, una Epson TM-u220, así que me pareció un trabajo fácil, puesto que, según yo, el cajón era híbrido.
Investigué sobre los comandos de Epson, llegué a varias páginas donde decían cual era el comando, envié el código a la impresora, previamente conectado el cajón mediante el RJ-11 y no pasaba nada, después, procedí a conectar el cajón al puerto serie, y utilicé lo siguiente para abrirlo:

Windows: echo > COM1
Linux: echo >
/dev/ttyS0

por supuesto, abrió, pero el problema era que tenía que ser abierto desde web, así que me puse a investigar sobre cómo hacerlo con Java.

Me encontré con la sorpresa de que Java había quitado el soporte para puertos serie bajo Windows, así es que llegué a dos soluciones alternas: RXTXComm y otra implementación de javax.comm que no recuerdo.

Intenté abrirlo, lo logré, convertí en Applet mi aplicación Java, y volvió a abrir, creé el JAR, firmé el applet, lo cargué en Firefox y nada, me decía que no encontraba la clase principal, hice todo lo que se me ocurrió, puse en PATH el .dll, el rxtxcomm.jar, etc, etc, etc, claro, pasando por el infierno de que Windows refresca la PATH cada que se le ocurre.

La cantidad de código que se tenía que usar para conectar al puerto serie, y sobretodo, la idea de tener que poner archivos externos en la JRE local, no terminaba por convencerme, así que decidí una vía alterna, simplemente ejecutar la linea echo > COM1 desde Java, puesto que los clientes web que accederían al sistema serían windows, además de que el cajón estaría conectado a uno de los clientes, no al servidor (un WAMP).
Entonces, hice lo siguiente:


package cashdrawer;

public class OpenCashDrawer extends Applet{
public void init() {
super.init();
doCall();
}

public static void doCall(){
try {
String[] command={"cmd","/c","echo 'anything' > COM1"};
Process p = Runtime.getRuntime().exec(command);
p.waitFor();
System.out.println(p.exitValue());
}
catch (Exception err) {
err.printStackTrace();
}
}
}

Hice el JAR, firmé el applet y voilá, funcionó!!

Probablemente sea una solución poco ortodoxa, pero hace su tarea, faltaría agregar
que pueda ejecutarse en Linux (eso es facil) y también que se pueda ejecutar como
standalone poniendo el método main.

Espero que les sirva. Hasta pronto.

Saturday, February 04, 2006

Diferencias entre Java y Javascript

Me he encontrado con un sitio que explica las diferencias entre Java y Javascript y me pareció interesante compartirlo, espero les sirva de algo a los principiantes de estos lenguajes.

Diferencias entre Java y Javascript

Nos vemos.

Thursday, February 02, 2006

JSP versus? PHP

Dando vueltas por la red se encuentra uno con muchas discusiones acerca de qué es mejor, si PHP o JSP. Algunos dicen que JSP, otros que PHP, algunos dicen incluso que JSP no es un lenguaje, otros dicen que depende de el tipo de aplicación que se quiera desarrollar en el lenguaje que se debe elegir, etc, etc, etc.

Bueno, pues, aquí pretendo hablar un poco más sobre esta "batalla".

Quizas la pregunta más frecuente es: ¿es PHP tan potente como JSP? o ¿es JSP tan potente como PHP?

La respuesta, definitivamente es: Sí y No. Ambiguo? pues, sí y no. :D

No podemos hablar de JSP sin hablar de Java, sin embargo sí podemos hablar de PHP simplemente. Cuando JSP fue creado, se hizo de forma que aceptara otros lenguajes de scripts, aunque finalmente quedó como default el lenguaje Java, pero también hay implementaciones con Javascript, u otros, es por eso que existe la directiva page, que puede tener como parámetro language=java o language=javascript.

Veamos algunas comparativas:

JSP
  • Usa código Java
  • Incrusta órdenes dentro de código HTML
  • Puede cargar e incluir Java Beans
  • Crea Java Servlets con HTML estático impreso en la output stream.*
PHP
  • Usa un lenguaje propio (con sintáxis heredada de C, Java y Perl)
  • Incrusta órdenes dentro de código HTML (pero con PHP templates lo hace de otra forma)
  • Provee de un intérprete PHP como módulo de Apache (mod_php)
Hablemos de ese asterísco azul en el último punto de JSP.
JSP, es lo que nosotros vemos mientras programamos, pero cuando ese código se pasa al servidor, se convierte en lenguaje Java. El código HTML, por ejemplo, algun_tag_html, se convierte en System.out.print(
"algun_tag_html");, y la página JSP pasa a ser un servlet cualquiera en Java puro, así que, en realidad JSP es un lenguaje de representación, no hay un intérprete de JSP propiamente dicho como lo hay de PHP. Ésto, por supuesto, no es una desventaja ni mucho menos, es sólo para que entendamos lo que pasa cuando la página con código JSP va al servidor.

Todo esto nos da como resultado que: comparar a JSP con PHP es como preguntar que qué es mejor si leer un libro o besar a tu novia. Claro que en ocasiones el libro estará mejor que la novia (por supuesto no físicamente, o quién sabe :D), pero me refiero a la clase de cosas que se comparan; siempre es preferible comparar las cosas de la misma naturaleza.

Entonces tenemos que JSP, a final de cuentas, es Java, y si comparamos a Java con PHP hay una gran distancia tanto en años de desarrollo como en capacidades, y si nos ponemos estrictos, Java es más que un lenguaje de lado del servidor, ya que puede ser también de lado del cliente, sin embargo, no siempre Java es la mejor solución para las aplicaciones web. No a mi gusto.

Java es lento por naturaleza, pero potente por la misma naturaleza. No hay una PVM (PHP Virtual Machine para ejecutar PHP de lado del cliente). PHP es rápido, pero con manejo de datos para aplicaciones bancarias o donde el flujo de información es demasiado, puede tronarse. Claro todo depende de cómo se programe, siempre uno tiene sus trucos.

Hablar de lenguajes de programación y de aplicaciones potentes en web (no sólo), sin hablar de los gestores de bases de datos que usa cada lenguaje es no ir a fondo con la comparativa, pero eso será tema de otro post.

Aún falta ahondar mucho acerca de estos dos lenguajes. Pronto postearé algo más sobre los mismos.

Hasta pronto.

Eclipse IDE: de los mejores y gratis

Hoy les hablaré de uno de los mejores entornos de desarrollo, estoy hablando de Eclipse.

Ese IDE no es únicamente para Java como muchos piensan, de hecho ni siquiera soporta Java nativamente. Eclipse es, digamos, una armazón (en inglés se usa Workbench), a la que se le va añadiendo capacidades mediante plug-ins.

El único plug-in que Eclipse, hasta ahora, trae por default es el de Java, pero hay por la red cientos de plug-ins para diversos lenguajes como PHP, Actionscript, UML, Javascript, etc. e incluso hay algunos plugins que se les puede añadir o quitar características, puesto que estos plug-ins están hechos en Java y encapsulados en archivos JAR.

Por supuesto, también podemos crear nuestros propios plug-ins. Para eso, tenemos que conocer la API de Plug-ins de Eclipse, misma que se puede bajar en su sitio www.eclipse.org.

Existen muchos IDE's más, pero a mi gusto Eclipse es uno de los mejores. Sun Microsystems tiene su propio IDE, se llama NetBeans, se puede descargar de http://www.netbeans.org, también está el ahora gratuito Java Studio Creator, muuuy bueno también, si lo que quieres es sólo desarrollar en Java o JSP, Java Studio Creator muy probablemente sea tu solución, puedes echarle una miradita en http://developer.sun.com/jscreator.

Aun falta hablar de muchos otros IDE's, pero creo que con estos es más que suficiente por hoy.

Wednesday, February 01, 2006

mayscript????

Para que pueda haber comunicación entre un applet y Javascript, el tag necesita tener como parámetro la palabra MAYSCRIPT, de otra manera no lo lograrás.

Ejemplo:

<.APPLET CODE="scroller.class" WIDTH=150 HEIGHT=15 MAYSCRIPT>


Nos vemos.


Tuesday, January 31, 2006

Cómo crear un applet

Un applet se crea simplemente con importar la clase Applet, extender la clase principal de nuestro programa Java y sobreescribir, al menos, el método init() de dicha clase.

Ejemplo:

import java.applet.Applet

public myApplet extends Applet{

public init(){
String valor = getParameter(myParameter);
System.out.print(valor);
}
}


Así quedaría un applet muy sencillo que escribe en consola el valor de la variable valor.

Bien, y si queremos ponerlo en una página HTML. Pues, simplemente usamos el tag APPLET.

<-applet code="myApplet.class" width=400 height=75>
<-param name="myParameter" value="Hola!!!">




Los guiones al principio del tag no debe llevarlos, sólo lo puse así porque no recuerdo el tag para escribir código HTML y no lo represente :D :D :D

Monday, January 30, 2006

Java en español

Hola, he creado este espacio debido a que falta mucha información de Java en español, sobretodo cuestiones específicas como firmado de applets, las cuales se encuentran en inglés, y en español, a menos de que seas un buen buscador, que tengas mucho tiempo y no estes en un cybercafé :D

Invito a todos que escriban sus snippets (pedazos de código), trucos, funciones, noticias traducidas al español o lo que se les ocurra acerca de Java.

Muchas gracias.

Yo inicio con algo muy sencillo y muy buscado:
Acceder a Javascrpt o documento HTML y sus componentes desde un applet de Java.

1. Lo primero es importar la clase JSObject, que está en netscape.javascript.

import netscape.javascript.*; o también
import netscape.javascript.JSObject;

Si no te deja usar la clase, muy probablemente tengas que instalar un versión más nuevo de la Java Virtual Machine, ya que esta clase viene como plug-in, y se encuentra en el directorio donde está instalada tu JVM, por ejemplo: jre1.5.0_06\lib\plugins.jar. En algunos casos esta ruta no está disponible para el compilador, así que marca error, la solución?, reinstala la JVM.

Bueno, una vez hecho esto, ya tenemos a disposición todos los métodos de la clase JSObject. Pero necesitamos crear la instancia de objeto, así que lo hacemos de la siguiente manera:

JSObject myWindow = (JSObject) JSObject.getWindow(this);


Explicación:

JSObject myWindow: creamos una variable llamada myWindows del tipo JSObject
(JSObject): hacemos el "casting", es decir, convertimos un tipo a otro tipo de dato, en este caso, al tipo JSObject.
JSObject.getWindow(this): llamamos al método getWindow() de la clase JSObject a la cual necesitamos pasarle como parámetro un applet, es decir, getWindow(Applet myApplet), y como estamos refiriendonos al mismo applet, entonces utilizamos la palabra especial THIS, es decir, ESTE APPLET.

Una vez hecho esto, tenemos una serie de métodos en la variable myWindow. Algunos de ellos son:
  • call
    • public Object call(String methodName, Object args[])
Este método nos sirve para hacer una llamada a alguna función Javascript. La forma de llamarla es la siguiente:
  • myWindow.call("miFuncionJavaScript", args);
Debemos tener cuidado con la variable args, ya que debe ser creada como tipo objeto:

  • Object[] args = { "myParameter1", "myParameter2" };
De esta forma sería como si llamaras al función miFuncionJavascript(P1, P2) desde dentro del tag (es que no me deja poner completo el nombre del tag) de la siguiente forma:
  • miFuncionJavascript(myParameter1, myParameter2);
Hay una forma más fácil de llamar a una función JavaScript desde un applet y es usando una función que también estará en myWindow y es eval. Se usa de la siguiente forma:
  • myWindow.eval("miFuncionJavascript(myParameter1, myParameter2)");
Espero les sirva; es todo por hoy.