| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Jan | ||||||
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Bien, pues estos días no he estado haciendo otra cosa más que trabajar y trabajar xD
Ya no estoy en el equipo de Fútbol, por alguna razón ya no me dieron muchas ganas de ir aparte de que ya me queda lejos de la nueva oficina y a algunos partidos no llegaría, además de que esta última semana me lastimé el pie. Lo que quiero ahora es entrar a natación en la alberca olímpica de por mi casa, está muy muy padre y es nueva
En estos días he estado muy ajetreado, dos o tres veces por semana tengo que viajar a León, Gto. y es bastante pesado, aunque espero que rinda frutos. La onda ahi está muy interesante
no es a lo que estoy acostumbrado (software), es a nivel más electrónico, control por radiofrecuencia (RFID) como las tarjetas IAVE de la autopista o como los chips que ponen en el Super Mercado a los artículos. Obviamente yo no voy a implantar eso pero al menos veré como se hace y es de lo más interesante (para mi, claro está xD) como se nota que cada vez quiero alejarme más del código
al menos laboralmente porque de hobbie no creo que lo llegue a dejar completamente.
He tenido algo de tiempo en estos días pero no sabía que postear aqui :-/ de hecho hice un artículo nuevo de Java sobre Callbacks, puede ser buen pretexto que lo ponga, pero mejor solo daré las ligas, estos son los sitios donde lo puse:
Aaaaahh por cierto, casi lo olvido, este Sábado 8 habrá una reunión en el DF que comenzó a organizar Evilrulo de hackerss.com que viene de no sé que estado, pero como yo también iré al DF en esa fecha ahi estaré. El plan es ir al billar creo así que difundo la noticia por si alguien más se quiere apuntar
Bueh, no sé que más escribir
no sé que diablos me pasa pero ando cortísimo de inspiración, no sé si les ha pasado
alguna sugerencia?
En fin, espero que el próximo post sea mucho más ameno… gracias por leer, hasta aqui llegó este. ![]()
Visto 41052 veces por 7422 visitantes
Hace unas semanas que no había podido entrar… la razón? un proyecto/negocio corriendo que no me deja tiempo de nada…
Hoy vi que una chica argentina revivíó un post que puse hace año y algo: sobre 10 cosas que tenía que decir en ese momento, y emularé la idea para hacer lo mismo un año y algo después, o sea hoy!
Seguimos con la parte del coding…
Autor: Javier Benek (blog.benek.org)
Para: http://www.hackerss.com
Usando:
* JDK 1.6 u1
* JBoss 5.0.0.Beta1
* Oracle 10g XE
Habrá algunas veces cuando no querramos que una conexión a la base de datos esté definida en el código fuente, con todo y usuario y password. Las razones? la más importante de todas ellas es cuando manejamos más de un ambiente de desarrollo, con una base de datos para cada uno (supongamos un ambiente de desarrollo, otro de pruebas y finalmente producción). Por supuesto no son los mismos datos de conexión para una y para otra (usuario, password, sid, y regularmente hasta host). Hacerlo en el código fuente obviamente obligaría a cambiar esa parte del código fuente cada vez que llevemos la aplicación de un ambiente a otro.
En este caso, haré el ejemplo con JBoss, un excelente proyecto Servidor de Aplicaciones, para quienes tengan la duda, no! no es solamente un contenedor
Esto será sencillo, así que pongamos atención…
* Un DataSource es un objeto JNDI (Java Naming and Directory Interface) con el cuál obtendremos una conexión desde un Connection Pool hacia una base de datos.
* Lo primero que necesitamos es obtener el jar que contiene el Driver JDBC de Oracle, pueden ocupar el clásico que es classess12.jar, aunque yo ocupé ojdbc14.jar, la diferencia es que este último es para su uso con las últimas versiones del JDK: 1.4 - 1.5, mientras classes12.jar está optimizado para JDK 1.2 y 1.3. Lo bajan de aqui: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_10201.html
* Ahora tomaremos un ejemplo que ya trae Jboss en sí, copiamos desde /docs/examples/jca/oracle-ds.xml a nuestro directorio /server/default/deploy (si utilizan el driver transaccional[XA] copien oracle-xa-ds.xml)
Tenemos que elegir que driver vamos a utilizar:
Oracle OCI Type 2 Driver
* Class: oracle.jdbc.driver.OracleDriver
* URL: jdbc:oracle:oci8:@<database>
Oracle OCI Thin Type 4 Driver
* Class: oracle.jdbc.driver.OracleDriver
* URL: jdbc:oracle:thin:@<host>:<port>:<database>
Oracle OCI XA Type 2 Driver
* Class: oracle.jdbc.xa.client.OracleXADataSource
* URL: jdbc:oracle:thin:@<host>:<port>:<database>
Oracle OCI Type 2 Driver
* Class: oracle.jdbc.driver.OracleDriver
* URL: jdbc:oracle:oci8:@<database>
* En este caso usaré el ‘Thin’, así que ahora editamos el oracle-ds.xml en estas partes:
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@bnk:1521:XE</connection-url>…
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>usuario</user-name>
<password>password</password>
* Si no se saben los datos de host, puerto y SID, están en el network/ADMIN/tnsnames.ora de Oracle.
* Ahora editaremos el standardjaws.xml que está en /server/default/conf (puede venir como jaws.xml), ya que por default JBoss está configurado para conectar con HypersonicDB, pero este no es el caso ya que nosotros lo haremos con Oracle.
<jaws>
<datasource>java:/OracleDS</datasource>
<type-mapping>Oracle10</type-mapping>
</jaws>
* Nos seguimos con el standardjbosscmp-jdbc.xml (puede venir como jbosscmp-jdbc.xml) y modificamos esta parte:
<datasource>java:/OracleDS</datasource>
* Finalmente el login-config.xml, agregamos una application-policy con el nombre OracleDBRealm de este modo:
<application-policy name = “OracleDbRealm”>
<authentication>
<login-module code = “org.jboss.resource.security.ConfiguredIdentityLoginModule” flag = “required”>
<module-option name = “principal”>sa</module-option>
<module-option name = “userName”>sa</module-option>
<module-option name = “password”></module-option>
<module-option name =”managedConnectionFactoryName”>
jboss.jca:service=LocalTxCM,name=OracleDS
</module-option>
</login-module>
</authentication>
</application-policy>
* Ahora ya tenemos nuestro JBoss listo para poder utilizar una base de datos Oracle!
* Lo siguiente es a desición del programador y el patrón de diseño que esté utilizando en su proyecto. En mi caso Utilizo el patrón de acceso a datos DAO, así que creo una clase GenericDAO, la cuál va a ser una superclase con un método que devolverá un objeto Connection utilizando la configuración que acabamos de crear.
GenericDAO.java:
package org.sintelti.dao;
import java.sql.Connection;
import java.sql.SQLException;import javax.naming.InitialContext;
import javax.naming.NamingException;import javax.sql.DataSource;
/**
* Clase para crear una conexion vía JNDI a Oracle 10 XE!
*
* @author Javier Benek
* @version v0.1
*/
public class GenericDAO {
/**
* Metodo para crear y configurar una conexion!
*
* @return Se devuelve un objeto Connection con la conexion ya configurada!
*
* @throws NamingException !
*/
public Connection getConnection() throws NamingException {
Connection cnn = null;try {
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource) initialContext.lookup(”java:OracleDS”);try {
cnn = ds.getConnection();
} catch (SQLException sqle) {
System.out.println(
“Error obteniendo la conexión en GenericDAO: ” +
sqle.getMessage());
}
} catch (NamingException ne) {
System.out.println(
“Error en el método getConnection() de la clase GenericDAO: ” +
ne.getMessage());
}return cnn;
}
}
* Esta clase será utilizada cada vez que desarrollemos un caso de uso o un include, ya que crearemos
la clase DAO específica para ese include (o caso de uso) y extenderemos de GenericDAO, llamaremos al
método que le he llamado getConnection() para obtener una instancia de la conexión y la utilizaremos como deseemos.
Pongo de ejemplo una clase DAO.
SiiOperacionDAO:
package org.sintelti.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.naming.NamingException;
/**
* Clase para obtener las capitales de los estados de la república!
*
* @author Javier Benek
* @version v0.1
*/
public class SiiOperacionDAO extends GenericDAO {
/**
* Metodo para generar la consulta!
*/
public void generaConsulta() {
Connection cnn = null;
Statement st = null;
ResultSet rs = null;try {
cnn = getConnection();
} catch (NamingException ne) {
System.out.println(
“NamingException en el metodo generaConsulta() de la clase SiiOperacionDAO: ” +
ne.getMessage());
}try {
st = cnn.createStatement();rs = st.executeQuery(”select * from estados order by id_estado asc”);
while (rs.next()) {
System.out.println(rs.getString(”CAPITAL”));
}
} catch (SQLException sqle) {
System.out.println(
“Error SQL en el metodo generaConsulta() de la clase SiiOperacionDAO: ” +
sqle.getMessage());
}
}
}
* Ya en este punto, tenemos resuelto todo, depende de la arquitectura de la aplicación y de la lógica de negocio
el saber desde donde se implementará esta clase, en mi caso desde mi clase Business (Patrón de diseño Business-Delegate)
* Suponemos que hasta este momento hemos ya hecho Deploy a nuestro proyecto, en mi caso mi proyecto curso-struts.war
ya está sobre /server/default/deploy en mi carpeta de Jboss, solo es cosa de levantar el servidor y voila!
Bueno ya cumplí, espero que comenten. Saludos a todos!! ![]()
Visto 36228 veces por 8120 visitantes
Muy bien, comenzamos con este proyecto después de algunas semanas de prueba
En el proyecto Blogs-E nos encargamos de brindar un subdominio con espacio para tener un bonito blog Gekko, sin necesidad de instalar nada, solo configurar tu blogs-e como tú quieras!
Además de todo, no tendrás que preocuparte por actualizar tu blogs-e con Gekko, ya que nosotros lo hacemos por ti! Siempre estarás cómodamente a la última versión!
Lo bueno del proyecto, es que tenemos el respaldo de los desarrolladores de Gekko, Xiam y Blacknash, quienes han sido muy amables y han cooperado con esta iniciativa, y son parte de este proyecto tambien!
y vamos a lo importante…
¿Cómo obtengo mi Blogs-E?
1. Escribenos un mail a get@blogs-e.org (o por el formulario de contacto directamente). Tomate tu tiempo y cuentanos algo introductorio sobre ti
2. Incluye en el correo el subdominio que quisieras para tu Blogs-E al estilo http://tunombre.blogs-e.org
3. Espera un poco a que leamos tu peticion, normalmente debemos aprobar tu Blogs-E en menos de 24 horas, pero si han pasado un poco mas no desesperes, siempre obtendras respuesta ^^
Esperemos que te agrade el proyecto, cualquier feedback puedes enviarlo a staff@blogs-e.org, te lo agradeceremos
::::
![]()
Visto 20267 veces por 3082 visitantes
Regreso de un largo periodo de no escribir con esto que ojalà le sirva a alguien..
:::::::::::::::::::
[How-to] Desarrollando GUI con SWT, Standard Widget Toolkit
Por: Javier Benek
Para: Hackerss.com
:::::::::::::::
Que es SWT??Es un framework para crear interfaces gráficas en Java, que crea a través de JNI (Java Native Interface) interfaces gráficas nativas del Sistema Operativo en donde ejecutemos nuestra aplicación SWT.
Es un framework para crear interfaces gráficas en Java, que crea a través de (Java Native Interface) interfaces gráficas nativas del Sistema Operativo en donde ejecutemos nuestra aplicación SWT.Esto quiere decir que con el mismo código visualizaremos en cada Sistema Operativo nuestras ventanas como si hubieran sido creadas para ese SO en específico.
:::::::::
Ahora bien, enumeraré las que a mi parecer son las más visibles ventajas y desventajas de este framework.
Ventajas:
Desventajas:
Algunas aplicaciones creadas con SWT:
:::::::::::::::::
Bien, ahora comencemos:
- Creemos un nuevo proyecto de Java en nuestro IDE preferido (para este tuto utilizaremos Eclipse IDE). El proyecto en este ejemplo se llamará ‘tests’
- Descarguemos SWT de http://www.eclipse.org/swt/ y lo dejamos dentro de nuestro proyecto..
- Importamos SWT al proyecto, en Eclipse IDE es en File/Import..

- Luego en General elegimos ‘Existing proyect into Workspace’

- Luego seleccionamos el zip que bajamos con swt y el nombre del proyecto ‘org.eclipse.swt’

- Ya tenemos SWT dentro de nuestro Workspace, ahora tenemos que agregarlo como dependencia de nuestro proyecto ‘tests’, entonces vamos a las propiedades de ‘tests’ (click derecho en tests/properties), luego damos click en Java Build Path, vamos a la pestaña de Projects y le damos ‘add..’ seleccionamos ‘org.eclipse.swt’, y luego OK y de nuevo OK.

- Bien, ya tenemos nuestro proyecto listo para implementar SWT, ahora debemos saber algunos conocimientos teóricos.
SWT se compone de principales elementos, que interactúan entre ellos para lograr la interfaz nativa que tanto le caracteriza:
Ahora un poco de código para mover esto..
Así implementamos una nueva ventana vacía:
package lol;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;public class testings {
public static void main(String lol[]){
Display display = new Display();
Shell shell = new Shell();shell.setText(”Hackerss.com”);
shell.setVisible(true);
shell.setSize(400, 300);
shell.open();while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}}
Que es lo que hacemos ahi??
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
Importamos las clases Display y Shell, imprescindibles en cualquier proyecto SWT.
Display display = new Display();
Shell shell = new Shell();
Instanciamos un Display y después una Shell, a la que le asignamos la Display que creamos.
shell.setText(”Hackerss.com”);
shell.setVisible(true);
shell.setSize(400, 300);
shell.open();
Como ya habíamos mencionado, ’shell’ es nuestra ventana, así que con ’setText’ definimos su título, con ’setVisible’ si queremos que sea mostrada, con ’setSize’ el tamaño y con ‘open’ la iniciamos.
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
Este bucle while es muy importante, ya que es nuestro ‘manejador de eventos’, lo que hace es que una vez mostrada la ventana y si la misma no está ejecutando algún evento lanza un bucle que deja la ventana en espera (sleep) de otro evento venidero, así que está constantemente en escucha de algún otro evento que se dispare.
display.dispose();
por último, liberamos la aplicación con dispose(), quien finaliza ‘display’ y todos los shells que ‘display’ contiene, esto solo ocurre cuando la ventana ha sido cerrada, cuando damos click en cerrar la ventana automáticamente el ciclo while no se cumple y salta al siguiente paso ‘display.dispose()’
Resultado:

::::::::::
Utilizando Widgets.
Bueno, iba a explicar detalladamente como poner widgets en layouts y algunos tips más, pero desde ayer interrumpí este tuto por cuestiones de trabajo, así que hice esta pequeña aplicación con una caja de texto, un botón y un listener que ejecutan una acción..
Aqui está el código, por favor examínenlo y vean la manera de implementar los widgets en el Grid(layout), y también chequen la acción que lleva a cabo el listener que le puse al botón.
/*
Creado por Javier Benek. Para Hackerss.com.
:: http://www.hackerss.com/
:: http://www.benek.org/
*/package lol;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolTip;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;/**
* Clase que implementa SWT en la aplicación!
*
* @author jBenek
* @version v1.0
*/public class testings {
/**
* Método que crea una ventana con un widget Text y
* un widget Button de SWT, y agrega un listener al
* botón para desplegar un ToolTip en la bandeja del
* sistema (Tray) con el texto introducido!
*
* @param lol - Arreglo de Strings por default del
* método main que guarda la entrada de datos al inicio
* de la ejecución del programa!
*/public static void main(String[] lol) {
final Display display = new Display();
final Shell shell = new Shell();shell.setText(”Hackerss.com”);
shell.setVisible(true);GridLayout layout = new GridLayout();
layout.numColumns = 4;shell.setLayout(layout);
final Text texto = new Text(shell, SWT.BORDER);
texto.setEditable(true);
texto.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 3, 1));final Button boton = new Button(shell, SWT.PUSH);
boton.setText(”Envia”);
boton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));SelectionAdapter sel = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
final ToolTip hssTip = new ToolTip(shell,
SWT.BALLOON | SWT.ICON_WORKING);
hssTip.setMessage(texto.getText());Tray hssTray = display.getSystemTray();
if (hssTray != null) {
TrayItem hssItem = new TrayItem(hssTray, SWT.NONE);
hssTip.setText(”Hackerss.com :P”);
hssItem.setToolTip(hssTip);
hssTip.setVisible(true);
}
}
};boton.addSelectionListener(sel);
shell.pack();
shell.setSize(400, 100);
shell.open();while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}display.dispose();
}
}
Lo que muestra al iniciar la aplicación es esta ventanita:

y al dar click el listener ejecuta esta acción:

:::::::::::::::
Examínenlo y córranlo, cualquier duda pónganla aqui ![]()
Visto 13344 veces por 2886 visitantes

Bien, pues escribo para informar que el ensayo que redacté sobre Apache Ant no será publicado en este blog como prometí por lo menos hasta entrando el siguiente mes
La razón es que mi ensayo será publicado en la revista Software Libre Para Ti el próximo mes, así que podrán verlo ahi o esperar a que lo publique en este blog, faltan solo unos pocos días así que no será larga la espera
Como verán, no es una noticia mala sino buena, el artículo está 100% terminado y como lo prometí lo verán muy pronto ![]()
Visto 6127 veces por 860 visitantes