domingo, 21 de enero de 2007

Algoritmo de ordenamiento Burbuja en Java y C#

Ordenamiento Burbuja o Bubble Sort es un algoritmo para ordenar arreglos o listas de menor a mayor, conocido por la mayoría de los programadores.

Consiste en recorrer la lista las veces que sea necesario e ir comparando los elementos de a dos e intercambiándolos si fuera necesario para ordenarlos.

La condición a seguir seria:

Si(arreglo[i]>arreglo[i+1]) entonces
Variable Temporal=arreglo[i]
arreglo[i]=arreglo[i+1]
arreglo[i+1]=Variable Temporal

Y luego se incrementaría ya fuera de la condición el índice [i] en 1, bastaría con un i++. Un ejemplo básico seria una lista así:

Arreglo original: [5,4,8,7,6,3]

Primera pasada: [4,5,7,3,6,8]
Segunda pasada: [4,5,3,6,7,8]
Tercera pasada: [4,3,5,6,7,8]
Cuarta pasada: [3,4,5,6,7,8]

Asi en cuatro recorridos haciendo las comparaciones este metodo ordeno el arreglo.

Este es un ejemplo del metodo escrito en Java:

public static void burbuja(int [] ordenar) //recibe como parametro el arreglo desordenado
{
for (int i=1; i<ordenar.length;i++) //este for recorre el arreglo tantas veces como sea su tamaño.
{
for(int j=0;j<ordenar.length-1;j++) // este for recorre el arreglo y repite la condicion.
{
if (ordenar[j] > ordenar[j+1]) // compara los elementos en los indices [j] y [j+1]
{
int temp = ordenar[j]; // si el valor del indice [j] es mayor al de [j+1] los intercambia
ordenar[j]= ordenar[j+1];
ordenar[j+1]= temp;
}
}
}
}

Escrito en C#:

public static void burbuja(int[] ordenar) //recibe como parametro el arreglo desordenado
{
for (int i = 1; i < ordenar.Length; i++) //este for recorre el arreglo tantas veces como sea su tamaño.
{
for (int j = 0; j < ordenar.Length - 1; j++) // este for recorre el arreglo y repite la condicion.
{
if (ordenar[j] > ordenar[j + 1]) // compara los elementos en los indices [j] y [j+1]
{
int temp = ordenar[j]; // si el valor del indice [j] es mayor al de [j+1] los intercambia
ordenar[j] = ordenar[j + 1];
ordenar[j + 1] = temp;
}
}
}
}

Son códigos bastante similares ya que Java y C# utilizan casi la misma sintaxis, lo único que cambia en entre ambos es el método length en Java length y en C# Length. Tambien podría implementarse burbuja en c# utilizando foreach.

Con esto concluimos este articulo, saludos desde TecnoTutoriales.

sábado, 20 de enero de 2007

Montar un servidor apache y mysql utilizando EasyPHP y PhpMyAdmin

Las necesidades de montar un servidor local propio ya sea para su uso en la misma computadora o en una LAN, WAN o MAN han ido aumentado con el tiempo, la necesidad de almacenar grandes cantidades de información se ha hecho común, y una buena opción para almacenarlos es mediante una base de datos MySQL conocido globalmente por millones de programadores. Hoy en DIA cualquier desarrollador de software se ve obligado a montar su propio servidor tanto como para poder escribir sus programas como también a la hora de hacer la entrega del paquete a quienes contrataron el servicio.

En este tutorial explicaremos como montar nuestro propio servidor para utilizarlo en el host local.

El primer paso a llevar a cabo es bajar las versiones mas recientes de EasyPHP y phpMyAdmin, las versiones actuales al momento de escribir este TecnoTurorial son EasyPHP1-8 y phpMyAdmin-2.9.0.2, que podrán bajarlos haciendo click sobre ellos, o visita los sites oficiales de estos aquí:

EasyPHP

phpMyAdmin

En total 11,1 Mb, luego instalaremos el easyPHP siguiendo los pasos para la instalacion.

1) Seleccionamos el idioma

2) Nos dan la bienvenida, click en Next

3) Leemos y aceptamos la licencia, clicqueamos Next

4) Leemos la información importante que nos proporcionan y click en Next

5) Proporcionamos la ruta de instalacion y click en Next

6) Indicamos el grupo de trabajo

7) Y por ultimo confirmamos los datos ingresados y procedemos a la instalación, cliqueando Install

8) Una vez terminada la instalación, click en Finish

Y con esto ya tenemos instalado el EasyPHP, solo necesitaremos iniciar y si ve la necesidad de actualizar sus archivos de configuración pedirá permiso para reiniciar la aplicación, le damos que si y el se encarga de todo, luego iniciara los servicios y estará listo para utilizar.

Con esto podremos usar php y Mysql en el host local, aun no podremos ingresar mediante una computadora que esta en la misma red, para hacer que el servidor funcione en LAN se deberán modificar algunas cositas en el archivo httpd.conf que se encuentra en EasyPHP1-8\conf_files\ en el próximo tutorial nos centraremos en la configuración de este archivo.

Luego descomprimimos el phpMyAdmin y cambiamos el nombre de la carpeta para tener un modo de acceso mas fácil, en vez de algo como phpMyAdmin-2.9.0.2-all-languages, podríamos tener phpMyAdmin. Esta carpeta debemos moverla a la carpeta EasyPHP1-8\www\

Y con esto tenemos instalado nuestro servidor Apache + MySQL, además de eso tenemos nuestro gestor web de base de datos MySQL, solo restar abrir un explorador, e ingresar a http://localhost/ o 127.0.0.1 que es equivalente a localhost y podremos ver el index del EasyPHP y de ahí ya podremos navegar localmente por nuestras webs gracias al servidor que hemos montado. Todas las webs que se quieran montar bastara con copiarlas dentro de la carpeta www.

Esto es todo por el momento, luego expandiremos mas esto en otro tutorial permitiendo que este servidor pueda ser accesado remotamente desde otras computadoras, entre tanto estate atento para esta nueva entrega, un saludo desde TecnoTutoriales.

viernes, 19 de enero de 2007

Creación de SISTEMA DE AYUDA en Java utilizando JAVAHELP

Quizás muchos de vosotros no hayáis pensado que incluir la típica “Ayuda” en la barra de herramientas de vuestras aplicaciones le ofrecerá un valor añadido a vuestro cliente y quizás os pueda ahorrar de las pesadas conservaciones con cliente que ha contratado vuestros servicios.

En muchos de los casos las aplicaciones quizás no requieran, por su complejidad, un manual de soporte al usuario final. Sin embargo, en proyectos mayores servirá como documentación adicional que el usuario podrá consultar para resolver posibles problemas que puedan surgirle sin necesidad de tener que ponerse en contacto con el desarrollador de la aplicación.

Que dispongamos de esta herramienta para la plataforma Java y que su uso no sea sumamente complicado no significará que sea necesario desarrollar la ayuda para el clásico tres en raya; el usuario no la consultará nunca y eso se verá traducido en trabajo inútil que nunca será valorado. ¿Para que comprarte un 200cv si no puedes pasar de 120 km/h…?

Llegados a este punto creo que no es necesario describir que es JavaHelp. Se trata de un conjunto de herramientas que permiten crear el clásico sistema de ayuda con unos resultados profesionales.

El resultado dependerá, como no, de lo que se lo trabaje cada uno. Quizás alguna vez hayáis entregado un manual de usuario a vuestro cliente; pues bien, este manual puede haber sido más o menos consultado en función del empeño que hayáis puesto en él.

Para poder llevar a cabo nuestro sistema de ayuda deberemos disponer de la máquina virtual JAVA, de un IDE para el desarrollo (yo utilizo NetBeans), un editor de texto y del fuente JavaHelp, que podéis descargar en http://java.sun.com/products/javahelp/download_binary.html. El binario contendrá las clases necesarias para desarrollar la ayuda y los ficheros JAR necesarios para distribuir con la aplicación.

Como habéis podido ver en tutoriales anteriores, el estándar XML ofrece un abanico infinito de posibilidades. Aquí no iba a ser menos. Para el desarrollo de nuestra ayuda deberemos crear 3 archivos que seguirán el citado estándar. Los formatos de los ficheros serán *.jhm, *.xml y *.hs. Ándate con cuidado, JavaHelp es Case-Sensitive.

1.- Fichero JHM: El formato para este archivo deberá ser el siguiente:

Lo que haremos en este fichero será definir cada una de las páginas que compondrán nuestra ayuda (que deberán estar en formato HTML). Un ejemplo podría ser “altaCliente.html”, “bajaCliente.html”, “asociarCliente.html”… Además definiremos los iconos que se utilizarán para mostrar los nodos (carpeta raíz desplegada, carpeta raíz cerrada,…).

Un ejemplo real de este fichero podría ser el siguiente:

En el ejemplo se han definido 5 páginas (archivos html) y 6 iconos (archivos de imagen).

2.- Fichero XML: Ahora será necesario, para cada entrada creada anteriormente, asignarle un nombre, que será el que se muestre en el árbol jerárquico. Analicemos el siguiente ejemplo:



CategoryOpenImage y CategoryClosedImage hace referencia al icono que se mostrará cuando el nodo padre del árbol esté desplegado/plegado. TopIcImage será el icono que se mostrará en los nodos hoja, text será el texto del nodo y target la referencia asociada a la página, que se ha identificado en el fichero JHM.

3.- Fichero HS: El formato de este fichero, así como la explicación de cada uno de los valores es el siguiente:



Una vez creados estos 3 ficheros crearemos un índice con las palabras clave que compongan nuestro manual. Para ello deberemos hacer uso del script jhindexer que encontraremos en javahelp/bin. Supongamos que tenemos todos nuestros ficheros html en la carpeta JavaHelp (como es mi caso); deberemos teclear, pues, en la línea de comandos jhindexer JavaHelp.

El Script nos creará una carpeta (JavaHelpSearch). Es importante que este comando lo ejecutemos una vez tengamos la jerarquía de directorios creada ya que si movemos los ficheros deberemos volver a ejecutar el script ya que se perderán las referencias a los índices creados.

Ahora será interesante realizar una vista de cómo se mostrará nuestra ayuda antes de integrarla en la aplicación. Para ello utilizaremos un jar que se encuentra en demos/bin (dentro de la carpeta JavaHelp, claro está). Para realizar esta vista previa ejecutaremos la instrucción java – jar hsviewer.jar. Se nos mostrará un cuadro de diálogo en el que deberemos especificar, en el primer campo, el nombre del fichero hs junto con su extensión (por ejemplo: ayuda.hs). En el segundo campo deberemos definir la ruta.

El último paso será añadir el sistema JavaHelp a nuestra aplicación. Primero deberemos añadir las clases necesarias para su correcta compilación y funcionamiento. Posteriormente deberemos definir la URL del fichero con extensión hs y crearemos una instancia del objeto HelpSet. El tercer paso será instanciar un objeto de la clase HelpBroker. Únicamente nos quedará asignar el evento al botón que vayamos a utilizar para mostrar la ayuda (por ejemplo al pulsar F1). El código resultante podría asemejarse al siguiente:


import javax.help.*;

try {
URL hsURL = HelpSet.findHelpSet(null, "../help/fichero.hs");
hs = new HelpSet(null, hsURL);
} catch (Exception e) {
System.out.println("HelpSet "+hs+" no encontrado")
return;
}

HelpBroker hb = hs.createHelpBroker();
help_browser.enableHelpOnButton(btnHelp, "introduction", hs);


Recuerda que será necesario que añadas una de las librerías de sistema (las de extensión jar) en el classpath de tu aplicación (por ejemplo, jh.jar).

miércoles, 17 de enero de 2007

Teoría básica de los WEBSERVICES

El siguiente artículo no lo trataremos de forma tan práctica como con otros anteriores.

Por lo tanto no consideraremos este texto como un tutorial sino como un artículo debido a que creemos que puede ser, de cualquier forma, de vuestro interés.

Es habitual el bombardeo por medio de páginas, spam, publicidad, banners… de términos ingleses muy novedosos que ni siquiera conocen quienes hablan de ellos.

1.- ¿Qué es un WebService?

La traducción literal de WebService es servicio web, con lo que podremos imaginar por donde irán los tiros. No son más que aplicaciones que proveen de datos Y/O servicios a otras aplicaciones. Se trata de un sistema de comunicación (que sigue unos estándares básicos basados en XML) entre diferentes servidores.

Dichas aplicaciones se encuentran “empaquetadas” en la red y contienen una colección de funciones. Cualquier aplicación puede acceder a un servicio web sin importar en que plataforma resida el servicio o en que lenguaje haya sido desarrollado. Para entenderlo de una manera sencilla, imagina la cada día más clásica tienda virtual. Si buscamos en la web encontraremos rápidamente WebServices que ofrecen un intercambio directo entre la tienda virtual y la entidad bancaria.

Otros ejemplos serían el caso de Amazon.com, que permite acceder directamente a sus servicios manejando el “carrito de la compra” o Google, el cuál puede invocar la búsqueda directamente usando una API.

El acceso a los servicios web suele ser vía http o https, ésta última mucho más segura. Sin embargo, los WS también pueden funcionar bajo los protocolos FTP, SMTP o TCP.

El uso de los WebServices (a partir de ahora WS), asegurarán pues, una interoperabilidad entre sistemas. Es de suma importancia analizar los beneficios que supone el uso de los WS ya no sólo para desarrolladores (que se liberarán de la tarea de desarrollar software propio), sino también para empresas (que permitirán que los desarrolladores dediquen su tiempo a enfocarse en el valor añadido de la compañía reduciendo así costes).

También podríamos hacer una descripción algo más técnica del término; se trata de una interface que se encuentra entre el código de aplicación y el código del usuario.

Todo esto está muy bien y es muy interesante pero, ¿como se invoca un WS?

2.-Invocación de los WS
La invocación se basa en 4 capas: Descubrimiento (protocolo UDDI), descripción (protocolo WSDL), invocación (protocolo XML/SOAP) y transporte (protocolo TCP/SMTP/HTTP).


Capa 1 - Descubrimiento / Discovery: Se trata de obtener el WS que cumpla los requerimientos que “andamos buscando”. Por ejemplo, un WS que nos devuelve la población de cada una de las provincias de un país.

Capa 2 - Descripción / Description: Ahora que ya hemos localizado el servicio en la red, deberemos saber cómo invocarlo para obtener los resultados deseados. En el caso de que queramos saber los habitantes de Barcelona, ¿qué método deberemos utilizar; getBarcelona(), getPoblacion(String: ciudad,…)?

Capa 3 - Invocación / Packaging: Deberemos llamar al método correspondiente utilizando los parámetros correspondientes. Para ello se utiliza el protocolo SOAP, como norma general.

Capa 4 - Transporte / Transport: Se encarga del transporte de datos (respuesta) entre servidores.

3.-Creación y puesta en marcha de un WS
Como hemos comentado anteriormente, un WS puede es independiente de la plataforma y del código que se haya empleado. Sin embargo, el WS deberá ser publicado para que posteriormente pueda ser “descubierto”. Esto se realizará mediante un documento WSDL. El WS además será necesario que se publique en el registro UDDI, que no es más que una base de datos de WS.

WSDL, SOAP, UDDI… ¿como funciona cada protocolo?
Todos y cada uno de los protocolos se basan en el estándar XML.

a) SOAP (Simple Object Access Protocol): Este protocolo define un mecanismo para el paso de instrucciones (comandos) y parámetros entre clientes y servidores. Independiente tanto del modelo de datos, como del lenguaje de programación utilizado y de la plataforma.

b) WSDL (Web Services Description Language): Este protocolo indica qué operaciones puede realizar el WS, dónde se ubica, cómo se invoca…) WSDL describe un servicio como una colección de puertos (“communication endpoints”) capaces de intercambiar mensajes, pudiendo describir en forma abstracta operaciones y mensajes, prescindiendo de las especificaciones de protocolo y tipo de datos.
WSDL vincula las descripciones abstractas a una implementación concreta de protocolos y tipos de datos, permitiendo la reutilización de las definiciones abstractas. Este documento se puede crear de forma manual o utilizando alguna aplicación que lo genere de forma automática, como podría IBM Web Services Toolkit o Apache WebServices Toolkit.

c) UDDI (Universal Description Discovery and Integration): Este protocolo permite que se listen, busquen y descubran este tipo de software. Podríamos llegar a compararlo con las clásicas páginas amarillas.