23 enero 2005

Tutorial de rmi

Acabo de corregir el tutorial de rmi. Sigue habiendo cosas que no tengo muy claras, como el formato exacto de los nombres que hay que poner en los sitios que se admiten URL o si no es necesario que el objeto remoto herede de UnicastRemoteObject.

En este último caso, parece que se puede hacer llamando a UnicastRemotObject.exportObject(), pero tendría que probarlo para saber seguro cómo funciona el tema.

El tutorial está en http://www.geocities.com/chuidiang/java/rmi/rmi.html

14 enero 2005

Algunas cosas de rmi

He estado revisando lo de rmi y he aprendido varias cosas

La primera es que los objetos remotos en teoría deben implementar Remote, pero en la práctica, veo que deben heredar de RemoteObject y lo normal es que lo hagan heredando de UnicastRemoteObject. Si símplemente se implementa la interface Remote, cuando el servidor de rmi registra el objeto, símplemente lo registra y luego termina. Si heredamos de UnicastRemoteObject, el objeto se registra, pero el servidor se queda corriendo. De esta forma, cuando llamemos remotamente al objeto, se ejecuta en este servidor que queda vivo.

Otra opción que he leido pero no probado, es que si no queremos heredar de RemoteObject o UnicastRemoteObject, se puede simplemente implementar la interface Remote, pero entonces debemos llamar a alguno de los métodos UnicastRemoteObject.exportObject()

Una vez compilado el objeto remoto (supongamos que es ObjetoRemoto.class), es necesario pasarle la herramienta rmic de java. A esta herramienta se le pasa la clase ObjetoRemoto y genera un ObjetoRemoto_Stubs.class y ObjetoRemoto_Skel.class. Este último sólo sirve para versiones de clientes rmi con versión de java anteriores a la 1.2

¿Para qué sirve el ObjetoRemoto_Stubs?. Cuando un cliente quiere llamar remotamente a un método de ObjetoRemoto, en realidad java tiene que hacer varias cosas. Debe traducir todos los parámetros del método a un "formato de red" estandard, de forma que independientemente de dónde corran el cliente y el servidor, sus versiones de java, etc, entiendan ese parámetro. También debe enviar algún tipo de mensaje por red al servidor de rmi indicándole que método de ObjetoRemoto debe ejecutarse y pasarle los parámetros.

ObjetoRemoto_Stubs hace todo eso, de forma que cuando nuestro cliente rmi pide un ObjetoRemoto, en realidad le pasan un ObjetoRemoto_Stubs. Cuando nuestro cliente rmi llama a un método de ObjetoRemoto_Stubs, este se encarga de formatear los parámetros, enviar el mensaje por red al servidor de rmi, esperar la vuelta, formatear la vuelta de formato red al formato específico del sitio en el que corre el cliente.

El cliente necesita ver en su classpath la Interface remota del objeto remoto, que es la Interface que contiene los métodos remotos a los que se puede llamar. También necesita ver al ObjetoRemoto_Stubs, que es el que en realidad recibe cuando pide el ObjetoRemoto.

En cuanto al tema del fichero de permisos java.policy, he visto que tengo problemas que no sé muy bien a qué se deben. En teoría, colocando este fichero en el home del usuario (en mi caso c:\documents and settings\chuidiang), debería encontrarlo. No sé muy bien a qué es debido, pero hay veces que me da problemas y es como si no lo encontrara.

La solución que he dado de momento, es cambiar la propiedad java.security.policy, en la que se puede especificar el fichero. La llamada sería algo como esto

System.setProperty ("java.security.policy", "mi_path/java.policy");

Todo esto está comentado y con un ejemplo sencillo de código en mi página http://www.geocities.com/chuidiang/java/rmi/rmi.html

09 enero 2005

Ejemplos de Timer en java

En mi página http://www.geocities.com/chuidiang/java/timer/timer.html acabo de poner un par de ejemplos de uso de javax.swing.Timer y java.util.Timer.

El ejemplo consiste en un simple reloj digital que aparece en un applet. LLevo un montón de tiempo con el ejemplo, pero no lo había terminado por falta de tiempo.

Cifrado de archivos en windows

He estado mirando el cifrado de archivos en windows. Si un disco es NTFS (se puede mirar al pinchar en "MI PC", "disco c:", "propiedades"), se puede cifrar un directorio y todo su contenido de forma que nadie puede verlo salvo el usuario que lo ha cifrado.

Para ello, en "mi pc" vamos al directorio en cuestión. Con el botón derecho pulsamos "propiedades" y dentro de "avanzado" hay un "check" para cifrar. Al hacerlo, nos pregunta si queremos cifrar también también todos los subdirectorios y demás.

El problema que he visto es que el usuario "administrador" puede ver los ficheros aunque estén cifrados y que los demás usuarios, estén o no cifrados, no tienen acceso a ellos. El resumen es que no veo demasiado sentido a este tema. Quizás para usuarios que estén en el mismo grupo.

Para que el administrador no pueda ver los ficheros de forma fácil, se puede denegar el permiso al administrador para acceder a los ficheros (nuevamente en "propiedades", en la pestaña de "seguridad"). De todas formas esto no garantiza la privazidad, porque el administrador puede cambiar el propietario del fichero para así poder verlo.

Bueno, al menos parece que sirve para que no vean los ficheros por error, aunque si quieren verlos, pueden.


05 enero 2005

rmi en java

En http://www.osmosislatina.com/java/rmi.htm hay un tutorial que explica los conceptos de rmi, sin ejemplos. Es adecuado para entender que es el stubs, el skeleton, etc.

En http://www.programacion.com/java/tutorial/rmi/ hay un tutorial más típico. Explica menos, pero va siguiendo los pasos en código para hacer un ejemplo.


Gráficos en java

Tengo que echarle un ojo a JTGL, que parece que es un paquete para pintar gráficos en java, pensado para juegos. Se supone entonces que será eficiente y quizás me sirva para gráficos de espectros, señales y demás.

http://www.jtgl.org/modules/news/


Paso de vhs a dvd

Por lo que he estado mirando, es necesario el compresor de mpeg2 para poder grabar en dvd.

Mirando las tarjetas de pinnacle pc tv stereo que permite la captura de video además de ver la tele, he visto que el compresor de mpeg2 va aparte, hay que pagar por internet para activarlo, después de haber comprado la tarjeta, para habilitarlo. Creo que eso ya no me gusta, además en ningún lado pone cuánto hay que pagar. (http://www.pinnaclesys.com/ProductPage_n.asp?Product_ID=1480&Langue_ID=5&division_id=) El precio es de unos 60 euros, más lo que haya que pagar en internet. Es cuestión de preguntar cuánto.

Otra de pinnacle que tiene buena pinta es la pinnacle moviebox usb, http://www.pinnaclesys.com/ProductPage_n.asp?Product_ID=1885&Langue_ID=5, pero vale unos 300 euros y no deja ver la tele. El problema es que incluye el software de edición pinnacle studio 9 que vale unos 90 euros, así que creo que estaré pagando por algo que casi no voy a usar.

He visto una tarjeta aver media que no permite ver la televisión, pero lleva el compresor de mpeg2 en hardware, con lo que haría falta un pc menos potente. La pega es que no deja ver la tele... http://www.avermedia.es/cgi-bin/ezmakerpropci.asp. Creo que el precio también es de unos 100 euros.

Seguiré mirando

02 enero 2005

Algunos enlaces

En http://www.programacion.com/blogs/ he encontrado blogs sobre programación. Quizás debería pasar este blog allí ...

En http://www.iespana.es/heberg/ y en www.iespanapro.com he encontrado un par de ofertas intesantes sobre webhosting con dominio incluido, no muy caras. Es algo que tengo que pensar.

Otro enlace que alguien ha puesto en mi página de enlaces es http://www.starlinux.net. Tiene un foro de programación en linux.

01 enero 2005

Programación orientada a aspectos

La programación orientada a aspectos básicamente consiste en una herramienta (que se añade al compilador) que nos permite, durante la ejecución del programa, capturar la llamada a los métodos de nuestro programa, de forma que podemos hacer algo antes o después de que se ejecuten, incluso podemos hacer que el método no se llame o devuelva una cosa distinta.

Típicamente se puede usar para cosas del siguiente estilo:
  • Hacer una traza de nuestro programa. Podemos capturar la llamada a los métodos e ir escribiendo en pantalla, según se van llamando, "llamado al método tal con tales parámetros".
  • Persistencia en base de datos. Podemos capturar los métodos del tipo "tomaDato()" para hacer que antes o después de que se ejecute, escribir ese dato en base de datos.
  • Privilegios. Capturando determinados métodos y en función del usuario que somos, podemos permitir la ejecución normal del método o denegarla.

El proceso normalmente consiste en hacer nuestro programa de una forma normal, sin preocuparnos de este tipo de temas (trazas, persistencia, privilegios, etc). Luego hacer una serie de clases especiales a las que la herramienta llamará cada vez que se ejecute uno de los métodos que digamos. En esas clases especiales hacemos la traza, persistencia o lo que sea.

En un fichero xml se dice qué métodos se quieren capturar y a cuales de nuestras clases especiales hay que llamar.

Luego se compila todo con unas opciones especiales de la herramienta de programación orientada a aspectos y se ejecuta el programa.

Todavía no he hecho ninguna prueba sobre el tema, pero todo se andará.

31 diciembre 2004

navegador y cliente correo de mozilla

He instalado el navegador Firefox y el cliente de correo Thunderbird de mozilla (http://www.mozilla.org/) y de momento van bien.

La instalación sin problemas, me ha importado de outlook express y del internet explorer todas las cuentas de correo, direcciones de amigos, páginas de favoritos y el correo de todos los buzones (entrada, enviados, etc).

En cuanto a la forma de usarlos es similar a lo que estoy acostumbrado con el outlook express y el internet explorer, así que sin problemas.

Sólo un par de tonterias:

Al importar el correo, me ha creado una carpeta "inbox" propia del Thunederbird y una de "entrada", copia de la de outlook express. Luego a mano he tenido que mover los correos de "entrada" a "inbox" y borrar la carpeta "entrada". Idem com "enviados", "eliminados", etc.

En cuanto a la hora de escribir un correo, parece que el cursor se "come" el final de la letra recién tecleada, con lo que queda un efecto algo raro (aunque no molesta).

De momento voy a dejarlos instalados y usarlos, esperando que haya menos virus, gusanos y similares capaces de aprovechar sus agujeros de seguridad.

rmi

Sobre mi tutorial de rmi (http://www.geocities.com/chuidiang/java/rmi/rmi.html) tengo una pequeña inquietud.

Resulta que decidí hacerlo sin tener ni idea de rmi, así que me puse a mirar tutoriales sobre el tema por internet y a tratar de codificar un ejemplo para la página.

Al final conseguí un ejemplo que funcionaba dentro de mi pc (tanto servidor como cliente corriendo en pc, sin salir a red). Sin embargo, hay algo que no me cuadra. En todos los tutoriales se habla de la necesidad de compilar ciertas clases con rmic, sin embargo yo no lo hice.

El ejemplo de la página aparentemente funciona, pero seguro que hay algo que no está como debe. Tengo pendiente revisar el tema y corregir dicha página.

Libros de jsp

Por curiosidad sobre jsp me compré un par de libros para ver de qué iba el tema.

Primero compré uno de Agustín Froufre "Java Server Pages, Manual de usuario y tutorial", editorial ra-ma, unos 18 euros, que no me gustó nada. No tenía ni idea de JSP y después de dejar el libro a medias, seguía sin tener ni idea. Para alguien que no sabe, empieza con conceptos que no se conocen y que no se han explicado en el libro. Se explican después y esa es una de las cosas que más me repatea en un libro, que primero use palabras y cosas que no ha explicado y que las explique luego.

Al final, como casi siempre, me compré una guia de Anaya de JSP (de esas pequeñas que valen unos 12 euros) y me sirvió para enterarme de qué iba el asunto.


Paso de video vhs a dvd

Tengo varias cintas Hi8 de cámara de video y quiero meterlas en DVD. Ando mirando información sobre qué ordenador, tarjetas, software y demás necesito.

He encontrado unos manuales interesantes sobre el tema en http://www.videoedicion.org//index.php?page=Manuales

Me parece interesante un cuaderno que me compre de "pc-cuadernos básicos" (www.pc-cuadernos.com) titulado "Digitalice sus videos de VHS a DVD", número 22, en el que se habla de este tema.

Aparentemente tendré que comprar un disco duro aparte (el que tengo ahora es de 20 Gigas y está casi lleno) que sea algo rápido (ATA 100 a 7200 rpm). Que el disco sea rápido es importante para que la tarjeta que captura el video no tire imágenes.

También hay que comprar una tarjeta que permita capturar el video. Hay varias opciones:
  • Sintonizador de TV, es más barato (unos 60, 90 euros), pero aparentemente da menos calidad y deja mucho trabajo por hacer a la CPU.
  • Tarjeta o chisme externo que permite capturar video. Uno de calidad decente parece que anda sobre los 200, 300 euros y no permite sintonizar tele. Las diferencias de precio entre unas y otras es que hagan la captura y compresión de señal en hardware (las más caras) o se lo dejen todo a la CPU del ordenador (son más baratas, pero requieren ordenadores más potentes).

Sigo en ello...