lunes, 13 de agosto de 2007

Crear una ventana en Debian a traves del sistema X11

Estoy haciendo un pequeño ejemplo sobre como crear ventanas, interface, para debian usando X11, para ello me he basado en una web especificamente de Chuidiang, y consejos de varios foros.

Los primero es crear una carpeta de trabajo. Yo le llamo Program, luego ubi{candonos en ese directorio creamos un fichero ordinario denominado: Ventana1.cc, el codigo completo de este archivo lo extrai de aqui, pero de todas maneras lo coloco en las siguientes lineas:

Fichero: Ventana1.cc
/**
* Javier Abellán, 4 de Febrero de 2003
*
* Programa simple para la creación de una ventana y dibujo de gráficos en
* ella.
*/
#include
#include

int main()
{
/* Conexion con el servidor de X */
Display *disp = NULL;

/* Ventana que vamos a crear para dibujar */
Window ventana;

/* Color que vamos a utilizar para dibujar una linea */
XColor color;

/* Abrimos la conexion con el servidor de X */
disp = XOpenDisplay(NULL);

/* Creamos una ventana */
ventana = XCreateSimpleWindow (
disp,
XDefaultRootWindow (disp),
100, 100,
500, 500,
1, 1,
BlackPixel (disp, DefaultScreen(disp)));

/* Hacemos que la ventana sea visible */
XMapWindow (disp, ventana);
XFlush (disp);

/* Obtenemos el color rojo */
color.flags = DoRed | DoGreen | DoBlue;
color.red = 65535;
color.blue = 0;
color.green = 0;

XAllocColor (
disp,
DefaultColormap (disp, DefaultScreen(disp)),
&color);

/* Indicamos que el color de dibujo a partir de ahora es el rojo */
XSetForeground (
disp,
XDefaultGC (disp, DefaultScreen(disp)),
color.pixel);

/* Dibujamos una linea */
XDrawLine (
disp,
ventana,
XDefaultGC (disp, DefaultScreen(disp)),
10, 10,
100, 100);

XFlush (disp);

/* Espera para que la ventan ano se cierre inmediatamente */
sleep (100);
}

Luego de terminar de editarlo sigue la compilacion desde el terminal, colocamos:
-$ g++ Ventana2.cc -L/usr/X11R6/lib -lX11 -o Ventana2
Luego de esto se genra un ejecutable Ventana2, tal como indicamos en la orden anterior.
Ahora lo ejecutamos:
-$ ./Ventana2
Y listo!, la ventana aparecio.

Problemas con g++
Inicialmente cuando trate de ejecutar este ejemplo, no me corria porque recien habia instalado debian asi que
no tenia instalado el compilador de c. Bueno lo que hice fue, basandome en algunos foros, tuve que insertar mi disco
de instalacion y seguidamente ejecutar desde el terminal el siguiente comando, se debe entrar como root:
-# apt-get install build-essential
Y listo!, problema solucionado.

sábado, 28 de julio de 2007

Timer en Visual Basic 6.0

El timer o temporizador es útil para muchas cosas, principalmente yo lo uso cuando quiero diseñar splashes.

Aquí presento una aplicación básica por la cual se trata de entender el funcionamiento del timer. El atributo principal de este objeto timer es "interval", el cual determina la velocidad del timer.


He construido la interface mostrada arriba, el timer,--- que es el objeto seleccionado ---, tiene un método o o procedimiento mostrado abajo:

Private Sub Timer1_Timer()

End Sub

Cuando el atributo del timer "interval" es igual a 1, entonces quiere decir que cada 1 milisegundo se llamara a la función Sub Timer1_Timer()

Si lo modificamos: interval=1000, entonces cada 1 segundo visitará a dicha función, así se puede recorrer una cadena o imágenes para realizar una animación.

Aquí les presento el código completo de la interface mostrada arriba:

Public a As Integer
Public s(5) As String


Public Sub iniciar()
a = -1
s(0) = "a la una"
s(1) = "a las dos"
s(2) = "a las tres"
s(3) = "a las cuatro"
s(4) = "y a las cinco"
End Sub

Private Sub Command2_Click()
Timer1.Interval = Val(Text1.Text)
End Sub

Private Sub Form_Load()
Call iniciar
End Sub

Private Sub Timer1_Timer()
If a = 4 Then
a = -1
End If
a = a + 1
Label1.Caption = s(a)
End Sub


miércoles, 25 de julio de 2007

Conexion MySQL con Java

En este tema asumo que ya se sabe de antemano cómo crear una base de datos en MySQL, para que el tema se enfoque realmente en la conexión con Java.
Trataré de actualizar cada artículo para que sea más entendible en cuanto mi tiempo me dé, bueno el primer paso para realizar la conexión entre MySQL y Java es bajarse el paquete mysql-connector-java-3.1.14-bin.jar, lo pueden encontrar buscando en google, sino en cuanto logre subirlo al servidor colocaré el enlace.

Seguidamente se tiene que colocar en una carpeta, preferible en donde no haya mucho movimiento, me refiero a una carpeta que no acostumbres a usar. En todo caso te creas una en el disco C:\mysql-connector-java-3.1.14 y se acabo el asunto.

Base de datos usada
Crearemos una BD simple en MySQL, tratando emular a un pequeño directorio telefónico. Para ello seguiremos los siguientes pasos:
  1. Crear la base de datos: Agenda
  2. Crear tabla: Telefonos
    • Campo 1: nombre[50] (clave primaria)
    • Campo 2: telefono[10]
JCreator
Con este IDE tuve el inconveniente de que modificando las variables globales no me resultaron, así que la única forma que encontré fue creando un proyecto y en librerías añadir el path donde alojé el mysql-connector-java-3.1.14-bin.jar (esto se realiza en propiedades del proyecto en el menú proyecto) .

Usaremos DriverManager.getConnection (url, userName, password); que sirve para establecer la conexión entre MySQL y Java.

Crearemos una clase: GestorMySQL

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class GestorMySQL{

private Connection conexion;
private Statement sentencia;

public GestorMySQL()throws Exception {
conexion=null;
sentencia=null;
conectar();
}

public void conectar() throws Exception {
Class.forName("com.mysql.jdbc.Driver").newInstance();
this.conexion = DriverManager.getConnection("jdbc:mysql:///Agenda","root","");
this.sentencia = conexion.createStatement();
}

public void desconectar() throws Exception {

if (this.sentencia != null) {
try {
this.sentencia.close();
} catch (SQLException SQLE) {
System.err.println ("La sentencia no ha sido instanciada... "+SQLE);
}
}
if (this.conexion != null) {
try {
this.conexion.close();
} catch (SQLException SQLE) {
System.err.println ("La conexion no ha sido instanciada... "+SQLE);
}
}
}

public void insertarContacto(String nombre,String telefono) throws SQLException {
String sql=null;
try{

sql = "INSERT INTO Telefonos VALUES ('"+nombre+"','"+telefono+"');";
System.out.println(sql);
sentencia.execute(sql);
System.out.println("Telefono guardado en Agenda");
}
catch(Exception e ) {
System.err.println ("No se puede insertar ningún dato... "+e);
}
}

public void reportarContactos() throws SQLException {
String sql=null;
ResultSet rs=null;
try{

sql = "SELECT * FROM Telefonos";
sentencia.executeQuery(sql);
rs = sentencia.getResultSet ( );

while (rs.next ( )) {
System.out.println("Nombre:"+rs.getString(1));
System.out.print("\t\tTelefono: "+rs.getString(2));
}
rs.close ( );
sentencia.close ( );
}
catch(Exception e ) {
System.err.println ("No se puede consultar ningún dato... "+e);
}

}

}

Clase Aplicación
La clase final donde irá el método estático Main() y en donde ingresaremos 3 datos:

public class Aplicacion{

public static void main(String[] args)throws Exception {
GestorMySQL gm=new GestorMySQL();
gm.insertarContacto("Jose","221100" );
gm.insertarContacto("Carlos","331100" );
gm.insertarContacto("Carmen","441100" );
gm.reportarContactos();
}
}

Ya que está diseñado en consola, podrán ver los resultados. Por ahora eso es todo, espero que sirva aunque sea de algo.