Combate mortal con Nexuiz

Hace unos días la mara del trabajo me ha enviciado con el juego Unreal Tournament, así que era mi obligación encontrar algún juego similar de combate en primera persona, de buena calidad y sobre todo que fuera software libre.

Pues googleando por alli me tope con Nexuiz que practimente parece una copia de Unreal, pero que es lo mas importante que nos ofrece Nexuiz?
  • Esta disponible para Windows, GNU/Linux y Mac OS X.
  • Es multijugador soporta hasta 64 jugadores simultaneamente.
  • Puede realizarse batallas con bots.

¿Como obtenerlo?

Si utilizan sistemas basados en Debian así como Ubuntu, el juego esta disponible desde los mismos repositorios y se intala haciendo nada mas:

# apt-get install nexuiz

Solo hay un detalle, que la versión que esta en los repositorios es la 2.4.2, pero si lo descargamos directamente desde la página tendremos la versión 2.5.2, al descargarlo directamente desde la página tendremos una archivo que pesa aproximadamente casi 1 GB pero allí viene incluidas los ejecutables para las diferentes plataformas anteriormente mencionadas, nomas consiste en descomprimir y jugar eso es todo.

Así que invito a que descarguen el juego para darnos riata, adjunto un video para que se entusiasmen.

Comentarios (11)

EJB: Usando consultas SQL nativas

Cuando hablamos de EJB (Enterprise JavaBeans) indudablemente tenemos que hablar sobre JPA.

Siempre me ha parecido algo rigido el hecho de tener que usar consultas JPQL para generar mis Entity Class, aunque estar este tipo de consultar resulta beneficioso a la hora de cambiar de base de datos completamente ya que para la base de datos es transparente el JPQL. y aporta mucho a a la portabilidad del código con respecto a la base de datos.

Pero en ocasiones necesitamos hacer uso de caracteristicas propias de la base datos para crear consultas mas complejas y nos vemos limitados por el JPQL entonces vemos la necesidad de utilizar consultas SQL nativas y a la vez son mucho más rapidas que las JPQL.

¿Como se utilizan?

Se podría decir que la sintaxis es la siguiente:

Query createNativeQuery(String sql, Class entityClass)

Donde:

Parametro uno: String sql
Es la consulta SQL nativa en el cual deben de ir los campos que conformaran nuestra Entity Class.

Parametro dos: Class entityClass
Es la Entity Class resultante de la consulta nativa SQL.

Ahora como siempre recalco, es tipico de este blog desarrollar un pequeño ejemplito de uso.

Asumiendo, ya tenemos generadas nuestra Entity Class llamada Persona procedremos a generar una lista de "personas".

EntityManagerFactory emf=Persistence.createEntityManagerFactory("nombreUnidadPersistencia");

EntityManager em=em.createEntityManager();
String consulta="select * from persona";
Query q=em.createNativeQuery(consulta,com.paquete.modelo.Persona.class);
Persona[] personas=(Persona[])q.getResultList().toArray(new Persona[0]);

for(Persona p:personas)
System.out.println(p.getPropiedad());

A veces no queremos tener un array de Entity Class sino que queremos obtener un valor escalar proveniente de una función sum, avg, max, etc...

EntityManagerFactory emf=Persistence.createEntityManagerFactory("nombreUnidadPersistencia");
EntityManager em=em.createEntityManager();
String consulta="select sum(campo) from tabla";
Query q=em.createNativeQuery(consulta);
double total=((BigDecimal)((List)q.getSingleResult()).get(0)).doubleValue();

De esta forma podemos trabajar con consultas SQL nativas y poder hacer uso de las capacidades de nuestra base de datos.

Comentarios (5)

JSF y la clase AbstractPageBean

Hace poco un compa me comentaba que al desarrollar algunos de los ejemplos que he realizado con JSF e ICEfaces no sabía que librería era necesaria para utilizar la clase AbstractPageBean, esta clase la uso para efectos de poder utilizar el método getBean(String) y obtener ya sea managed bean instanciados o el valor actual en un recorrido por una dataTable entre otros usos mas.

Pues para resolver esta duda la librería que se utiliza es llamada "JSF 1.1 Design-Time Support - Deprecated" que esta incluida en Netbeans.

Como es de fijarse como bien dice el nombre de esta libreria es de uso obsoleto es por esa razón que ultimamente no la he estado utilizando así que implemento mi propio método getBean de esta forma:


Así puedo hacer llamadas incluso a SessionBeans y ApplicationBeans.

Comentarios (1)opiniones, ¿cual es la tuya?

Creando tablas dinámicas con OpenOffice.org Calc

Muchas de las cosas que se suelen utilizar con frecuencia en Microsoft Excel son las "Tablas dinamicas" y como yo soy partidario de usar siempre en lo posible software libre me decidi a realizar un pequeño ejemplo en cual se puede realizar lo mismo pero utilizando OpenOffice.org Calc.

En el caso de Calc no se llaman "Tablas dinamicas" sino "Piloto de datos".

Y como es de costumbre en este blog para poder entender de lo que estoy hablando es necesario elaborar un pequeño ejemplo.

Supongamos que tengo un archivo en cual esta conformado por las siguientes columnas:

Este archivo tiene reflejadas las ventas de ciertas sucursales por fecha y nosotros queremos generar un reporte en el cual podamos ver la venta de cada sucursal por semana y con filtro de mes.

Para ello seleccionamos todas las celdas que conformaran la base de datos de la tabla en nuestro caso seria desde la columna A hasta la F.


Luego debemos ir al menú Datos > Piloto de datos > Inicio.
Luego aparece otra ventana que nos pregunta la fuente de datos seleccionamos la que ya viene marcada por defecto que es "Selección actual", al dar aceptar aparecera la ventana para diseñar nuestra tabla dinamica.


Es importante que al diseñar se elija el botón "Opciones" y establecer que la tabla dinamica se cree en una nueva hoja.

Luego de esto obtenemos nuestra tabla dinamica.

Comentarios (8)

JSF: Creando reglas de navegación con Netbeans

Si bien muchos han leido la documentación de la misma página de Netbeans para las reglas de navegación, la explicación no da explicación para reusar la regla de navegación para varias páginas.

Es decir que solamente puedo utilizar la regla de navegación a través de una tan sola página, pero si de repente tenemos el mismo link en varias páginas no nos servira.

¿Como solucionamos este problema?

Es de una forma muy sencilla, para entenderlo crearemos una regla de navegación con tres simples jsp.

Luego de crear el proyecto y crear los tres jsp, debemos ir al archivo faces-config.xml y dar clic en el botón "XML".


Luego no aparece era el código xml del archivo, ahora debemos dar clic derecho sobre cualquier parte del documento y escoger la opción JavaServer Faces > Add Navigation Case...


Luego de esto en el campo "From view" debemos escribir un asterisco esto indica para poder utilizar la regla de navegación desde cualquier link en cualquier página, no escribiremos nada en el campo "From Action" así que en el siguiente campo llamado "From Outcome" debemos escribir la cadena que devolvera el método en el backing bean para acceder al link y por ultimo en el campo "To View" buscamos la página jsp, jspx o xhtml que deseemos acceder a través del link y procedemos a hacer clic en el botón "Add".


Ahora para crear una nueva regla realizamos los pasos mencionados anteriormente nada mas con la variante que el campo "From Outcome" y "To View" cambiaran, en el ejemplo que estamos desarrollando para el siguiente link lo llenamos así:

From Outcome: pagina_2
To View: pagina2.jspx


Y lo hacemos nuevamente con la tercera regla.

From Outcome: pagina_3
To View: pagina3.jspx


Y nuestro archivo debera quedar de la siguiente manera:


Con este nueva estructura nuestro diagrama ser verá así:


Luego procedemos a crear nuestro Managed Bean de scope Request para implementar las reglas que hemos creado, yo le he llamado "LinksBean"


Luego nada mas debemos enlazar el backing bean a los commandLink de la página jsp.


Luego de esto nada mas debemos ejecutar la aplicación, adjunto el proyecto para efectos de estudio. Si usas Windows recuerda tener instalado winrar para poder descomprimir el proyecto.

Comentarios (1)opiniones, ¿cual es la tuya?

JSF: Redireccionando a páginas de terceros a través de un BackingBean

Si bien existe la posibilidad para manejar los enlaces de nuestro proyecto Web con JSF a través del archivo de configuración faces-config.xml, a veces nos vemos en la necesidad de tener enlaces en las páginas de nuestro proyecto que redireccionan a sitios de terceros a través de una validación en el Backing Bean.

La manera de hacerlo es de la siguiente forma:

String url="http://krypto84sv.blogspot.com";
FacesContext fc=FacesContext.getCurrentInstance();
fc.getExternalContext().redirect(url);


Notese que la cadena "url" va la url completa de la dirección donde queremos redireccionar, este método se puede también utilizar para ir a una página en especifico de nuestro proyecto, pero es mucho mas eficiente utilizar las reglas de navegación propias del faces-config.xml para moverse dentro de nuestro mismo proyecto.

Comentarios (0)

ICEfaces: Editando registros en Crosstab

Al leer un comentario en la entradade como crear Crosstab con ICEfaces, me hacian la consulta de como poder relacionar un id de un registro con un valor puesto en un inputtext dentro de la tabla, así que me decidi desarrollar un ejemplo como es de costumbre en este blog para poder resolver el problema.

El ejemplo que expondre no varia mucho del que esta hecho en la entrada de Crosstab con ICEfaces, pues la estructura de la base de datos es la misma.

También en la clase "Dao" se debe agregar dos métodos los cuales son:
  • ActualizarPrecio
  • NuevoPrecio

Despues el Managed Bean Pagina queda así:

Y la estructa de la tabla en xhtml es la siguiente:


Al ejecutar la aplicación a través de la ruta http://localhost:8084/EjemploTabla que se verá así:


¿Como es el funcionamiento de la aplicación?

Pues por cada InputText se ejecuta su respectivo evento ValueChangeListener ejecuta el evento ActualizarPrecio del managed bean Pagina al cambiar el valor de cada caja de texto y el método evalua si el precio existe lo actualizar de lo contrario lo crea.

Comparto el proyecto para efectos de estudio.

Comentarios (5)

Cambio de imagen en Anécdotas de las curvas del seno

Como es de notar ahora mi blog ha cambiado y mucho, pues ya tenia mucho de no darme a la tarea de embellecerlo un poco y es que tambien han habiado muchos cambios en mi vida, pues tambien tengo nueva computadora es una HP Pavilio dv2-1010la que ya tiene instalado el todo poderoso Debian y todos sus dispositivos funcionando a la perfección.

Mi nueva adquisición

Ahora espero tener un poco mas de actividad bloguera y contrubuir con mis post sobre Java a todos los amigos de la UES.

Saludos.

Comentarios (3)

JSF: Conectando tablas de FoxPro con Java y ICEfaces

En el trabajo ultimamente he estado arto de tener que estar creando aplicaciones en la cual se tiene que alimentar por medio de un archivo de Excel en las interfaces web y esto se debe que casi todo esta elaborado con tablas de fox, entonces me decidi a averiguar si hay alguna manera de pegarme a dichas tablas y a la vez tener los beneficios de JPA.

Googleando un poco me di cuenta que no existe un driver JDBC especifico para tablas de Fox Pro, entonces la solución es conectarse a través de ODBC, pues mucho me van a decir que utilizar ODBC es lento pero por el momento no he encontrado otra manera, y lo otro es que me amarra utilizar windows del lado del servidor de aplicaciones, intente usar unixODBC pero no existe driver para tablas Dbase así que por el momento estoy amarrado a windows utilizando esta conectividad.

Pues bien ahora voy a la parte que mas me gusta y es la de desarrollar un ejemplo, en el cual creare un proyecto Java Library Class con Netbeans en cual puede ser utilizado tanto en un proyecto web como en una aplicación de escritorio con Swing o alguna interfaz en Java que este en en escucha, o como putas les pegue la regalada gana usarlo siempre con Java.

Paso 0

Antes de empezar es necesario tener instalado el Driver de Microsoft Visual FoxPro que esta disponible en la siguiente dirección:

http://msdn.microsoft.com/en-us/vfoxpro/bb190233.aspx

Paso 1

Crear el origen de datos de las tablas, para este ejemplo yo creo que un archivo de base de datos de Fox con una tabla llamada "Persona", tambien funciona perfectamente con tablas libres.

Nos dirigimos a Panel de Control / Herramientas administrativas / Orígenes de datos (ODBC) estando alli en la ficha DSN de usuario damos clic en "Agregar" y nos aparecera el listado de Drivers a utilizar en nuestro caso seleccionaremos "Driver para o Microsoft Visual FoxPro" o cualquier otro similar que se llame Visual FoxPro que al fin y al cabo son iguales.


Luego de esto debemos elegir la ruta nuestro archivo de base de datos o la ruta del directorio donde tengamos nuestras tablas libres y asignamos nombre a nuestro Origen de datos en mi caso le llame "FoxPro"


Damos clic en "Ok" y tendremos listo nuestro origen de datos.

Paso 2

Dentro de Netbeans 6.7 es necesario crear una conexión de base de datos de tipo "JDBC-ODBC Bridge" en username y password se coloca un usuario y contraseña de windows y la cadena de URL JDBC se coloca el nombre del Origen de datos que en nuestro caso es "FoxPro".


Paso 3

Procedemos a crear un proyecto Java Class Library, que le nombrare "JavaFox", que contendra nuestro Entity Class de la tabla Persona. Para este caso en particular creare la unidad de persistencia a parte y la clase Entidad ya que el asistente de Netbeans no puede crearlo por nosotros ya que fox no sabe sobre esquemas y asi no funciona bien el asistente.

Cree mi paquete llamado "org.dani.ejemplo.fox" doy clic derecho sobre este me voy a "Nuevo" selecciono la categoría "Persistence" y selecciono "Unidad de persistencia", en la ventana de dialogo del asistente podemos como libreria de persistencia Hibernate o Toplink en mi caso siempre me gusta usar mas TopLink asi que elijo esta, también elijo la conexión de base de datos que creamos anteriormente y en la opción de Table Generation Strategy marcamos "none" y por ultimo damos clic en Finish.

Paso 4

Ahora procedemos a crear nuestra Entity Class de la tabla Persona, damos clic derecho sobre el paquete que habíamos creado seleccionamos de nuevo la categoría "Persistencia" pero ahora escogemos "Entity Class" y completamos la clase de esta manera:


Paso 5

Creamos un proyecto web Con ICEfaces y Facelets, yo lo llamare "WebFox", tambien debemos importar el proyecto anterior a este, ya sin perder ya tanto el tiempo nos diponemos a crear nuestro Managed Bean llamado "TemplateClient", el cual tendra la funcionalidad de listar, modificar y guardar registros de la tabla de FoxPro.

Paso 6

Ahora solo debemos editar la parte de la vista que es el templateclient.xhtml


Ya hecho todo lo anterior nada mas bastara con ejecutar nuestra aplicación


Comparto el proyecto para efectos del estudio.

Comentarios (4)

ICEfaces: Incluir dropdown List (combos) en tablas

El día de ayer el compañero Hugo me manifestaba su inquietud de como incluir un combo (SelectOneMenu) dentro de una tabla con ICEfaces a su vez que este combo tuviera seleccionado el elemento correspondiente a cada registro de tabla para posteriormente poder modificarlo.

Pues bien me parecio buena idea desarrollar la solución al problema planteado anteriormente, pues para el ejemplo que expondre a continuación se utilizaran las siguiente herramientas:
Antes de iniciar cabe aclara que siempre es fundamental utilizar Convertidores personalizados a la hora de utilizar SelectOneMenu y JavaBeans pues resuelven la vida muchisimo.

Paso Uno

Crear un proyecto de Persistencia de datos para la base de datos Sample en Derby que viene con Netbeans, pero lo principal es a clase "Dao" que es donde obtengo todos mis Entity Class:


Paso Dos

Crear nuestro proyecto Web utilizando los frameworks ICEfaces y Facelets, y crear nuestro Convertirdor para el objeto Manufacturer y posteriormente registrarlo en faces-config.xml

Registro del convertidor en faces-config.xml

Paso Tres

Ahora creamos nuestro Managed Bean que le llamaremos TemplateClient al igual que la página template-client.xhtml, nada mas para efectos de saber que corresponde a ese xhtml y será de tipo request.


Paso Cuatro

Nada mas debemos diseñar nuestro página xhtml que es la template-client.xhtml


Ahora solo debemos ejecutar la aplicación que se verá de la siguiente manera

Adjunto el proyecto para efectos de estudio.

Comentarios (1)opiniones, ¿cual es la tuya?

ICEfaces: Custom Converter

Ya hace un buen rato Hugol me preguntaba de como poder obtener un objeto seleccionado a través de un componente SelectOneMenu con ICEfaces, ya que siempre le tocaba obtener el valor del id y despues volver a reconstruir el objeto y esa tarea es super tediosa, entonces alli surge la necesidad de utilizar "Converter", ¿que es esto? el mecanismo es el de conversión y está definido por el interfaz javax.faces.convert.Converter y sus múltiples implementaciones. Las conversiones aseguran que el tipo de un dato introducido en un formulario JSF sea el correcto.

Como es de costumbre en este blog desarrollare un pequeño ejemplo de como crear un Custom Converter, para un conjunto de objetos de tipo Product generado a través de JPA con Netbeans 6.7 y Apache Derby en un SelectOneMenu (dropdown List).

Lo primero es crear una clase que implemente la interfaz javax.faces.convert.Converter y desarrollar los métodos getAsString y getAsObject. El primero convierte el valor de la cadena del item seleccionado al objeto que queremos obtener, el según convierte el objeto ya convertido en cadena para colocarlo en el value de la etiqueta Option que genera ICEfaces.

Mi clase ConvertidorProducto quedó así:



Creamos nuestro managed bean de tipo request en mi caso lo llame TemplateClient al igual que el xhtml de la siguiente manera:



Luego se debe registrar nuestro convertidor en faces-config.xml de nuestro proyecto quedando así:


Luego desarrollamos el archivo, en mi caso, template-client.xhtml de la siguiente manera


Y por ultimo deployamos el proyecto que se verá así:


Adjunto el proyecto para que pueda ser estudiado.

Comentarios (3)

Crosstab con ICEfaces

Una de las cosas que se hace bastante uso en las aplicaciones de gestión es la elaboración de tablas para presentar datos, y entre muchos casos que se me han presentado a veces es necesario generar tablas en la cual tanto las filas como las columnas van creciendo a esta situación se le denomina Crosstab en inglés.

Últimamente en mi trabajo los recientes proyectos los he estado realizando mediante ICEfaces que me ha reducido considerablemente el tiempo desarrollo gracias a su implementación de Ajax y por el lado de los usuarios que obtienen aplicaciones mucho mas parecidas como si fueran de escritorio como están acostumbrados.

Antes que comenzar a desarrollar el proyecto necesitamos tener una base de datos, para este caso utilizare derby que ya esta embebido con Netbeans, así no tengo que obligar a mi lectores instalar ya sea MySQL, PostgreSQL u Oracle.

Mi base de datos le llame crosstab y la estructura de las tablas es la siguiente:

create table producto (
id int not null primary key generated always as identity,
descripcion varchar(20) not null
)

create table periodo (
id int not null primary key generated always as identity,
inicio date not null,
fin date not null
)

create table precio (
id int not null primary key generated always as identity,
valor double not null,
fk_producto int not null,
fk_periodo int not null,
constraint precio_producto foreign key(fk_producto) references producto(id),
constraint precio_periodo foreign key(fk_periodo) references periodo(id)
)


Nota: Es necesario agregarle registros, la aplicación que se desarrollara no tendrá ninguna validación en cuanto si en la tabla se encuentran datos nulos en la tabla Precio. Adjuntare el código fuente del proyecto con el respectivo script SQL de la estructura de la base de datos que puede ser descargado al final de este post.

Pues bien ahora es el momento de echarle mano al desarrollo de la aplicación, en mi caso me gusta crear mis Entity Class como un proyecto de librería de Java para tener separada la lógica del negocio con la interfaz web mi proyecto se llamara JavaCrosstab.

La forma para generar Entity Class con JPA ya fue tratado a anteriormente, así que en el proyecto se agregara nada mas una Clase llamada Control.

Nota: Hay que recordar que habrá que agregar posteriormente las librerías TopLink y derbyClient al Tomcat, por que el proyecto web lo hare con este servidor.

Ahora el ejemplo que desarrollare estará hecho con Facelets, no entrare en detalles como crear un proyecto Facelets ya que esto ya lo he hecho, pues nada mas me centrare en la forma de crear la tabla mediante ICEfaces y JPA.

Pues procedemos a crear un proyecto Web con Netbeans con los frameworks ICEfaces y Facelets llamado WebCrosstab, deberemos agregar el proyecto donde se encuentra nuestros Entity Class creado anteriormente llamado JavaCrosstab luego crear un Managed Bean llamado ConversorDolares, a este Bean deberá tener la siguiente estructura:

Este Managed Bean hereda de la clase "AbstractPageBean" para poder acceder a los métodos "getValue" y obtener el valor de la columna y fila actual cuando se este generando la tabla en la pagina template-client.xhtml.

Ahora editaremos la página template-client.xhtml con el siguiente contenido:


Hecho esto nada mas bastara iniciar la base de datos crosstab de derby en Netbeans, realizar deploy al proyecto WebCrosstab y acceder a la ruta http://localhost:8084/WebCrosstab.


Adjunto el código fuente del proyecto WebCrosstab y la estructura de la base de datos.

Comentarios (6)