[Screencast] Report Manager y MySQL mediante Borland DBExpress

12 05 2009

Buenas

Dicen que una imagen vale más que mil palabras, entonces, 22 fps valen más que una imagen.

Acá un video tutorial que realice para la lista de correos de Report Manager, la temática es “Conectar Report Manager MySQL utilizando los controladores de Borland DBExpress”. ¿Por qué?, porque resulta mucho más rápido que por ODBC (ODBC es lento!!, pero saca de apuros).

Links

Video Original
Lista de correos de Report Manager

Saludos





Hilos o Threads (Ejemplo en Java)

2 01 2009

Ahora les voy a explicar un poco sobre este interesante tema.
Antes, una aplicación se ejecutaba secuencialmente, es decir, paso a paso o línea a línea, con el pasar del tiempo se requirió la ejecución de instrucciones en paralelo dentro de un mismo programa o proceso, esto condujo a que los lenguajes nos ofrecieran soporte para este tipo de programación naciendo así la programación multi-hilo o multi-threading.
¿Que es un proceso?
Sin ahondar en esto, un proceso es un conjunto formado por las instrucciones del programa, su propio estado de ejecución, el espacio de memoria que utiliza mientras se ejecuta y alguna información mas que necesite el S.O. para ejecutarlo.
Para el caso de un programa multi-hilo además se almacena la información de cada hilo, cabe destacar que cada hilo tiene su propio estado.
Ahora, ¿Que es un hilo (thread)?
Un hilo es un conjunto de instrucciones que se ejecutan dentro del programa, lo diferente, un programa puede tener múltiples hilos y ejecutarlos en paralelo.

Los hilos se pueden ejecutar de forma sincronizada o no sincronizada, no es complejo pero lo explicare con un ejemplo
Se lanzan 3 hilos, estos 3 hilos llaman al mismo método.
De forma no sincronizada el método se ejecuta 3 veces de forma paralela
De forma sincronizada el método se ejecutara 3 veces de forma procedural, es decir, primero un hilo, luego el siguiente y finalmente el ultimo.

Orden de ejecución
Uff, raro, mejor dicho aleatorio, el orden lo maneja el S.O., si lanzo 5 hilos y ejecuto el programa 10 veces lo más probable es que las 10 veces el orden de ejecución de los hilos sea distinto.
Para solucionar esto están las prioridades, este punto lo tocare en otra entrada ya que no lo he utilizado mucho.

Ahora un ejemplo de programación multi-hilo en Java (En la actualidad la mayoría de los lenguajes soporta este tipo de programación)

principal.java

import java.io.*;

//Clase Principal
class principal{
    public static void main(String[] args){
			Menu();
        }
	public static void Menu(){
			System.out.println("Menu");
			System.out.println("----\n");
			System.out.println("1. Ejemplo No Sincronizado");
			System.out.println("2. Ejemplo Sincronizado");
			System.out.println("3. Cerrar");

			String str = new String();
			BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in));
			try{
				str = entrada.readLine();
			}catch(IOException ex){}

			switch(Integer.valueOf(str)) {
			case 1:
				//No Sincronizado
				Hilo h1 = new Hilo("Hilo 1",false);
				Hilo h2 = new Hilo("Hilo 2",false);
				h1.start();
				h2.start();
				break;
			case 2:
				//Sincronizado
				Hilo h3 = new Hilo("Hilo 3",true);
				Hilo h4 = new Hilo("Hilo 4",true);
				h3.start();
				h4.start();
				break;
			case 3:
				System.exit(0);
				break;
			default:
				Menu();
				break;
			}

		}
}

//Clase que extiende de Thread (Hilo)
class Hilo extends Thread{
    String Nombre = new String();
	Boolean Sincronizar;
    public Hilo(String str, Boolean Sinc) {
        super(str);
        Nombre = str;
	this.Sincronizar = Sinc;
    }

    public void run() {
		if(Sincronizar)
			Proceso.Sincronizado(Nombre);
		else
			Proceso.NoSincronizado(Nombre);
    }
}

//Clase que contiene el proceso que ejecutaran los hilos
class Proceso{
    static void NoSincronizado(String str) {
        for (int i = 0; i <= 9999; i++) {
            System.out.println("En " + str);
        }
    }

    static synchronized void Sincronizado(String str) {
        for (int i = 0; i <= 9999; i++) {
            System.out.println("En " + str);
        }
    }
}

Explicando un poco el código, explicare solo las partes fundamentales, asumo lectores con experiencia en el lenguaje:
Lo primero es ejecutar el método menu() donde se presentan las opciones para ejecutar hilos de forma sincronizada o no sincronizada.
En las líneas 24 y 25 se crean objetos a partir de la clase Hilo, la clase Hilo se extiende de Thread (nombre de clases y variables bastante descriptivos), el constructor de esta clase recibe el nombre del hilo a crear (Línea 52), la variable boolean que le sigue es para especificar si este objeto se va a ejecutar sincronizado o no.
El método start() sirve para lanzar el hilo, no confundir con el método run(), que ejecuta el método run() especificado por la interface de la clase thread, ESTO NO LANZA EL HILO COMO PROCESO APARTE, EJECUTA EL METODO EN LA MISMA LINEA DEL PROGRAMA, O SEA PROCEDURAL.

Para definir un método como sincronizado, basta con anteponer la sentencia synchronized y automáticamente este se sincronizara dependiendo de las solicitudes que este tenga.

Espero les haya sido de ayuda
Saludos





Monitorear la JVM

21 12 2008

Hace un rato estaba programando threads (Hilos) en java y me dieron ganas de verlos, más que nada para realmente darme cuenta de que eran procesos aparte (Aunque basta con ver la ejecución del programa, pero uno siempre quiere mas).
De esa forma di con VisualVM, una excelente aplicación para monitorear las aplicaciones que hacen uso de la JVM, el punto en contra, al parecer no tiene versión para Linux =( .
Sin más, les dejo unos screenshot y la pagina del autor para que lo evalúen.

Página del autor
–> DESCARGA <–





Snapshot To Image

17 12 2008

Retomando el blog…
Hace un rato me nació la necesidad de guardar imágenes de la pantalla para explicar un procedimiento paso a paso, antes mi proceso para esto era tomar la foto (Imprimir Pantalla), ir a algún editor de imágenes, pegarla y luego guardar el archivo. Como podrán darse cuenta, si uno necesita capturar varias fotos es ganarse trabajo de mas, en ese momento recordé que soy desarrollador y me dije a mi mismo, “Mismo, porque no automatizar esta labor”.

Snapshot To Image (Instantánea a Imagen), el nombre en inglés es por costumbre solamente.

*Click para agrandar.

Instrucciones de uso

  1. Primero hay que seleccionar la carpeta donde se almacenaran las imágenes.
  2. Si se desea se establece un nombre para las imágenes (Se aumenta un correlativo al guardarlas).
  3. Hacer click en “Iniciar”, si se desea se minimiza a la barra de tareas para que no estorbe.
  4. Para capturar las imágenes basta con apretar “Imprimir Pantalla” (Print Screen), lo que guardara una imagen de la pantalla en la carpeta anteriormente seleccionada.
  5. Finalmente para que no guarde mas imágenes, restaurar la aplicación y hacer click en detener.

Requerimientos:

Cualquier duda, critica, informe de bug o comentario es bien recibido.

—-> DESCARGAR AQUI <—

Saludos





Cajero con Windows XP

2 10 2008

Hace un tiempo, luego de un corte de luz me encontré con este cajero automático iniciando su sistema y de paso una sorpresa.

Cajero 1

Cajero 2

(Disculpen la calidad de imagen, fue con el celular y pase rápido)

En lo personal pensaba que los cajeros contaban con otro S.O., algún Linux o BSD, bueno, ahora no tengo dudas.





Desarrollando Sistemas Informáticos

24 07 2008

El motivo de este artículo es que estoy desarrollando mi primer sistema informático “real”, digo real ya que en prácticas he podido hacer diversas cosas, pero no es lo mismo a estar trabajando en desarrollar uno.

Bueno, no nos desviemos de la temática, cuando comencé a evaluar dicho sistema fueron surgiendo distintas dudas respecto a con que software desarrollarlo, software de desarrollo hay muchos, pero cual cumplirá con las 3B (Bueno, Bonito y Barato), y aquí es donde comencé la búsqueda.

Antes que nada me hice una lista, que tipo de software necesito.

- IDE
- Base de Datos
- Generador de Reportes

En IDEs, uno relativamente fácil de utilizar, amigable, sin costo alguno (Aunque no lo crean) y con un resultado final amigable al usuario es Microsoft Visual Basic 2005 Express Edition, si Microsoft y gratis. Las ediciones Express de Visual Studio no tienen costo alguno, solo deben registrarse en el sitio web y descargarlos. Para salir de la duda llame al Soporte Técnico y me respondieron, “No hay problema en que usted utilice este software para realizar un software comercial siempre y cuando sea capaz de satisfacer las necesidades del sistema” y como el sistema no es complejo, sirve.

Ya tengo la parte programación y ventanas, ahora los datos, alternativas sin costo para bases de datos no fue problema, ya que por excelencia tenemos a PostgreSQL y MySQL, y también un poco menos nombrada Firebird. Por comodidad y documentación elegí MySQL (Obviamente en su versión GPL).

Ahora tengo un IDE para poder programar y un motor de bases de datos suficiente, ¿Cómo hago que se comuniquen?, existe un driver de MySQL para .NET, teniendo eso, tenemos ADO.NET con MySQL,

Luego de eso, como le presento los informes (Listados, Planillas.) al usuario, ahí encontré ReportManager, un generador bien potente y estable, pero la curva de aprendizaje fue lenta. Con esto surge la misma pregunta anterior, ¿Cómo hago para que ReportManager hable con MySQL?, OBDC es la respuesta, se crea un origen de datos (hay que instalar un controlador ODBC para acceder a MySQL) y se le hace referencia desde ReportManager, y para que este se entienda con Visual Basic.NET tenemos un control ActiveX.

Más adelante voy a presentar un práctico para que se comprenda los usos del software y puedan aprovechar el desarrollar a buen nivel y $0 pesos.

Software Mencionado (Click para ir a sus webs).





Que es Linux

24 07 2008

Mucha gente (Me incluyo) cuando comienza a interiorizarse a este mundo se encuentra con una serie de términos que no comprende (GNU, Unix, Linux, Kernel, Distribuciones, etc…).
A continuación tratare de explicar de una forma simple de que se trata.

Todo comienza con UNIX®, este es un sistema operativo no libre, multitarea y multiusuario creado en 1969, posee una arquitectura estable técnicamente.

Luego de esto aparece un proyecto con el objetivo de crear un sistema operativo totalmente libre y compatible con UNIX denominado GNU (GNU is Not Unix), aquí es donde nace el proyecto GNU (1983) iniciado por Richard Stallman.

En 1985 Stallman crea la FSF (Free Software Foundation), La Fundación para el Software Libre está dedicada a eliminar las restricciones sobre la copia, redistribución, entendimiento, y modificación de programas de computadoras.

A esta altura ya está la iniciativa del software libre y el apoyo de licencias para este.

Ya cerca de 1990 había suficiente software libre como para poder concretar un sistema operativo, pero faltaba algo vital, el núcleo, es aquí donde aparece Linus Torvalds, quien desarrollo Linux con la idea de crear un sistema para arquitectura i386 basado en UNIX.

Comúnmente se habla del sistema operativo Linux, lo cual está mal, ya que Linux es el núcleo que utilizan las distintas distribuciones tipo UNIX.

Que es el núcleo de un sistema operativo? , El núcleo es el Kernel…Que es el Kernel?
El Núcleo o Kernel de un sistema operativo es el software encargado de gestionar el uso de hardware por parte de los distintos programas, ya que salir directamente al hardware es bastante complejo.

Ya tenemos el núcleo, diversos programas y una licencia que apoya al proyecto GNU.
Aquí hace su entrada el término Distribución, una distribución no es nada más que el núcleo Linux mas una serie de programas (Ofimática, gestores de ventanas, entornos de escritorios, etc…).

En la actualidad existen una serie de distribuciones, no se puede decir cual es mejor que otra, todo depende de gustos y costumbres.

A continuación una lista de las que más he oído hablar:

Este artículo no es más que una pequeña y resumida introducción al mundo del software libre, el tema es muy extenso ya que al investigar se van cruzando distintos temas, pero esto sirve de orientación para los que recién comienzan.