martes, 21 de junio de 2016

Cuentas de ahorro para estudiantes

 ¿Qué es una cuenta de ahorro?

 Una cuenta de ahorro es una cuenta bancaria cuyo principal objetivo es ofrecer al usuario la capacidad de guardar en ella dinero de manera periódica; en otras palabras como su nombre lo indica, el principal objetivo de una cuenta de este tipo es el ahorro de capital. A diferencia de las cuentas bancarias vinculadas con tarjetas de crédito, las cuentas de ahorro suelen relacionarse con tarjetas de débito; salvo en ocasiones especiales, la institución bancaria en donde abrimos nuestra cuenta de ahorro no debería poder tocar el dinero que se encuentra en dicha cuenta. Las cuentas de ahorro son perfectas para aquellas personas que no desean tener un compromiso mayor con la institución bancaria; en contraposición de los usuarios que cuentan con una tarjeta de crédito.

Cuentas de ahorro para estudiantes:

Las cuentas de ahorro son perfectas para los estudiantes; principalmente, debido a que los estudiantes suelen tener otras necesidades financieras; además, cuando un estudiante abre una cuenta de ahorro, esto comúnmente representa su primer acercamiento al mundo de las instituciones financieras. Por ello, los bancos suelen diseñar cuentas de ahorro que les favorezcan y aporten beneficios en específico según su situación.

En realidad, los estudiantes representan un nicho de mercado atractivo para los bancos, debido a que muchos estudiantes que eligen abrir su primer cuenta con una institución, suelen quedarse en ella durante largo tiempo (o, en ocasiones, para toda la vida).

Cabe señalar que las cuentas de ahorro para estudiantes corresponden a productos diseñados para un uso práctico donde los gastos de mantenimiento son bastante reducidos o, prácticamente, nulos (las tasas de intereses son bastante bajas o no, en ocasiones, no existen en absoluto).

En caso de que desees abrir una cuenta de ahorro para estudiantes, lo ideal es comparar las cuentas que ofrecen los diferentes bancos para saber cuál es la que se ajusta mejor a tus necesidades; y así, hacer una elección consciente.

miércoles, 15 de junio de 2016

Actividades Team building, la mejor alternativa para incentivar a los empleados



Las actividades team building que se realizan en algunas empresas fuera de la jornada laboral significan una excelente oportunidad para reforzar lazos de unión y sentido de pertenencia entre los trabajadores y la empresa en la que desempeñan sus funciones.

Expertos en motivación empresarial coinciden al afirmar que los planes team building para incentivar a los profesionales que forman parte de un equipo son más efectivas cuando se llevan a cabo fuera de la oficina, ya que de esta manera los empleados se sienten más cómodos, adoptan una actitud menos rígida y esa relajación influye directamente en el éxito del evento.

Y es que imaginemos que la empresa que quiere realizar actividades de este tipo se dedica al diseño web Bilbao, generalmente son funciones que se ejercen dentro de una oficina y las jornadas de trabajo suelen ser muy largas. Entonces, si el jefe propone hacer actividades recreativas o culturales dentro del mismo espacio donde los empleados pasan tanto tiempo, es posible que no se sientan animados a participar.

Por el contrario, si a los trabajadores se les dice que la empresa alquiló un lugar al aire libre para hacer un evento recreacional al que pueden asistir con vestimenta cómoda y en un horario distinto, ellos serán más receptivos, incluso si se trata de un fin de semana, porque verán la reunión como una oportunidad para compartir con sus compañeros y divertirse.

Características del team building


Efectivamente, los eventos empresariales que se realizan fuera de la oficina son la mejor alternativa para que cada miembro del equipo vea la empresa desde una perspectiva diferente. Y es que al sentirse parte de una actividad que no tiene nada que ver con las funciones que realiza a diario, sentirá que sus jefes lo tienen en cuenta y valoran su trabajo.


La ventaja del team building es que puede diseñarse un plan de acuerdo a los requerimientos de cada empresa, es decir, se pueden seleccionar el tipo de actividades en las que participarán los empleados, como gymkanas, competencias deportivas y juegos culturales. El catálogo de planes es muy amplio y siempre podrá adaptarse a las expectativas de cada gerente, con la finalidad de lograr los objetivos que quiera alcanzar.


Junto a las actividades, los empleados pueden disfrutar de una barbacoa, cocteles, y bebidas, dependiendo de lo que establezca la empresa que contrate los servicios de los organizadores del evento.


La idea es que en estos eventos los empleados conozcan más a las otras personas con las que comparten a diario, dejen a un lado el estrés y participen en las actividades que más les gusten. Mientras que la empresa podrá observar desde otra perspectiva las potencialidades de cada una de las personas que la integran.

miércoles, 16 de marzo de 2016

Lanza tu proyecto con un curso de marketing digital

Mucha gente quiere o tiene un proyecto a nivel personal, ya sea una un blog o una web de soporte para programadores freelance, pero siempre viene bien contar con un curso de marketing digital para lanzar dicho proyecto al gran público y hacerlo visible para todo el mundo en internet.

 

En el caso de tener un proyecto que vive de internet es muy importante tener mucha visibilidad en este campo, ya que al no contar con una tienda física en la que hacer la publicidad y en la que la gente puede pasar hay que buscar otras maneras de hacer que la gente entre a la web, lo más importante es ofrecer un servicio de calidad y diferente al resto de la competencia, pero a veces no basta solo con tener un buen servicio de calidad sino que hay que llamar a la gente, de ahí la importancia del curso marketing digital, en el que se podrán conocer todos los secretos de este tipo de publicidad y de las nuevas maneras que han surgido y están surgiendo para hacer publicidad como es por ejemplo el uso de las redes sociales para la promoción de la marca, ya que estas redes se cada día son utilizadas por más personas de todas las edades y de todos los países, por lo se están convirtiendo en una manera de conseguir clientes muy buena.

 

Además es hecho de tener un proyecto personal sirve para muchas cosas, como coger experiencia en la gestión y administración de proyectos, ya que a la hora de optar por un puesto de trabajo que tenga que ver directa o indirectamente con el mundo en el que está enfocado el proyecto personal, siempre será una gran ventaja a la hora de la entrevista, siempre y cuando la web también esté optimizada y sea bonita, en el caso del marketing online es muy buena idea optimizar el seo onpage de la web.


Sin dudas un curso de marketing digital puede ayudar muchísimo a la hora de, no solo lanzar un proyecto personal de éxito, sino a la hora de buscar un trabajo relacionado con el proyecto se destacarán mucho más que otros candidatos que no tienen ningún proyecto iniciado, ya que no cuentan con esta experiencia que si tienen estas personas que han decidido iniciar un proyecto sea por el motivo que sea, pero la cuestión es la cantidad de conocimientos que se ganarán.

martes, 15 de marzo de 2016

El posicionamiento en buscadores y su importancia

Tener éxito en internet inevitablemente para por el posicionamiento en buscadores, esta idea es una novedad en el mundo del marketing que ha surgido gracias al auge del mundo de internet.

 

Hoy en día la manera de hacer publicidad ha cambiado mucho, mejor dicho, está cambiando mucho, los medios clásicos de publicidad en los que primaba la televisión y la radio hoy en día están pasando a un segundo plano, y es que internet cada vez está más presente en la vida de más personas, de hecho casi todo el mundo realiza muchas búsquedas diarias en buscadores de internet como puede serlo google, además realizar una estrategia de publicidad en los buscadores junto con las redes sociales es mucho más barato y en algunas ocasiones mucho más eficaz que poner un anuncio en la televisión.

 

Además en el caso del social media es una estrategia muy utilizada por esas agencia marketing online de confianza de las empresas, o de los particulares que quieran aumentar las visitas de su web, además se suele mezclar con una estrategia de seo onpage y offpage, estas dos estrategias unidas junto con un estudio detallado de la web y del cliente en cuestión suelen tener muy buenos resultados en cuanto a visitas de la web se refiere, por supuesto la web debe ser atractiva al gran público porque el objetivo final es conseguir un buen rendimiento de todo ese esfuerzo y con una web que no esté adaptada a estos cambios de estrategia puede ser que todo el esfuerzo o el dinero invertido en ello sea en vano, por ello siempre hay que estudiar muy detenidamente qué tipo de estrategia se va a llevar a cabo para aumentar las visitas a la web mediante una estrategia de marketing online.


El posicionamiento en buscadores es sin lugar una tipo de marketing muy relevante y cada vez más utilizado no solo por las pequeñas empresas o por aquellas personas que tienen un proyecto personal, sino que además las grandes empresas de todo tipo recurren al marketing digital para ganar gente y clientes para su negocio, además ya sea mediante publicidad en google o en las redes sociales o intentando que la web salga en primera página siempre se ganan nuevos clientes y resultará beneficioso a corto plazo para la empresa, aunque los resultados pueden tardar una media de tres meses en aparecer y que sean rentables de verdad.

viernes, 12 de febrero de 2016

Automatismos industriales, la promesa de la modernidad

Los automatismos industriales son una solución efectiva y robusta, que permite facilitar las labores de una gran empresa que emplee procesos industriales modernos. En la actualidad, estos sistemas se ven favorecidos gracias a la innovación y el profesionalismo de los expertos que se dedican a la elaboración de maquinarias especializadas.
Los avances tecnológicos han facilitado los procesos de producción con la ingeniería en automatización,  instalación de robots, sistemas de manipulación automática, sistemas de ensamblaje de piezas, sistema de verificación y control, líneas de producción. Toda esta tecnología constituye alternativas rentables y fiables para mejorar los procedimientos industriales.
Por supuesto, el principal beneficio de los automatismos industriales está a simple vista: reducción de la mano de obra. Con esta valiosa ventaja, se logra reducir los costes en pago de personal, disminución de tiempos de fabricación de productos, elevación de los niveles de productividad, garantías de calidad y reducción del margen de error.  
Las empresas que tengan una visión de futuro que se asemeje a estas características pueden contar con las labores de excelentes proveedores que se dedican al diseño de maquinaria industrial a la medida. De esta manera, con la aplicación de diferentes técnicas, se hace posible conquistar la perfección, al reducir la intervención del hombre.
Actualmente, el alcance de los automatismos industriales ha sido tan determinante que se ha podido involucrar en diversas industrias en el mundo como la colocación de robots en granjas; en actividades turísticas con camareros robotizados; incluso, en la milicia de algunos países, como Rusia.
Sin duda alguna, optar por estos mecanismos, significa una inversión que se verá reflejada a corto y largo plazo. Los automatismos industriales, son parte de la evolución y del crecimiento empresarial. Por lo tanto, si ud quiere ver cómo crece su empresa a pasos agigantados, confíe en esta alternativa que está a la vanguardia.
No adoptar los automatismos, puede significar un atraso en un mundo que va avanzando a pasos agigantados, se trata de ganarle partido a los avances y facilidades que el hombre va descubriendo y no que todo esto se vuelque en nuestra contra, es sin duda, una decisión contra el reloj.

domingo, 11 de febrero de 2007

Hello World C# + Ado.net

En este tecnotutorial damos una introduccion a C#, utilizando Ado.net que es el encargado de todo lo referente a base de datos.

Para Trabajar con ADO.NET necesitamos una base de datos MySQL, podemos crearla a partir de un Script, para este ejemplo el script sera el siguiente:

IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'pruebaHello')
DROP DATABASE [pruebaHello]
GO

CREATE DATABASE [pruebaHello]
ON
(NAME = N'pruebaHello_Data',
FILENAME = N'c:\pruebaHello\pruebaHello.mdf',
SIZE = 4, FILEGROWTH = 10%)
LOG ON (
NAME = N'pruebaHello_log',
FILENAME = N'c:\pruebaHello\pruebaHello.LDF',
SIZE = 1, FILEGROWTH = 10%)
COLLATE SQL_Latin1_General_CP1_CI_AS
GO

USE [pruebaHello]
GO

CREATE TABLE [dbo].[Demo] (
[DemoID] [int] primary key,
[DemoValue] [varchar](200)
) ON [PRIMARY]

GO

INSERT INTO Demo (DemoID, DemoValue) VALUES (1, 'Hello World');
GO

Se guarda en un archivo llamado scriptHelloWorld.sql, se crea la carpeta segun se haya especificado en el script y luego se ejecuta:

osql -S .\SQLEXPRESS -E -i "scriptHelloWorld.sql"

lo que creara la base de datos
Luego seguimos con nuestro programa...


using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;


namespace ConsoleApplication1
{
class HelloWorld
{
static void Main(string[] args)
{
//String de la conexion Data Source host\servicio \\ para caracter de escape...
string connectionString = "Integrated Security=true;" +
"Initial Catalog=pruebaHello;" +
"Data Source= slim\\SQLExpress";
// Se crea la conexion con es string de conexion...
SqlConnection testConnection= new SqlConnection (connectionString);
// Se crea el comando que ejecutara los queries...
SqlCommand testCommand= testConnection.CreateCommand();
SqlCommand commandBuilder = testConnection.CreateCommand();
// Se Asiga el query...
testCommand.CommandText="Select DemoValue From Demo where DemoID=1";
// Se abre la conexion...
testConnection.Open();
//Se Ejecuta el query...
string result=(string)testCommand.ExecuteScalar();
//Se imprime...
Console.WriteLine(result);
//Se cierra la conexion
testConnection.Close();
}
}
}


Y asi obtenemos un Hello world directo de nuestra db impresa en pantalla, un saludo desde tecnotutoriales.

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.

Obtener la ruta de la aplicacion en Java con StringTokenizer

El usuario final de cualquier software debería poder instalar este en la unidad y carpeta que el decida mas conveniente, por lo que a la hora de escribir el programa no podemos simplemente especificar la ruta en la que estará instalada este soft posteriormente.

Mediante getClass().getResource("archivo.ext"); podemos obtener el URL desde donde se esta ejecutando el programa, y obtener la dirección exacta del archivo que deseemos localizar, el problema radica en que nos devuelve algo como esto:

file:/C:/Documents%20and%20Settings/SLiM/Escritorio/Tecno/programa/Tutoriles/classes/archivo.ext

Una clase de mucha utilidad para casos como este es StringTokenizer, que nos permite recorrer un String en partes divididas por un carácter común, en este caso nuestro carácter común será "/".


Aquí les dejo un ejemplo de como utilizando StringTokenizer podemos obtener nuestra ruta exacta algo así como: "C:/Documents%20and%20Settings/SLiM/Escritorio/Tecno/programa/Tutoriles/classes/archivo.ext"

import java.util.StringTokenizer;

public class miPrograma {

public String getPath(String file){

String ruta = getClass().getResource(file).toString();
StringTokenizer tokenizer = new StringTokenizer(ruta, "/");
tokenizer.nextToken(); // Para saltar el la parte que no deseamos
String newRuta="";

while (tokenizer.hasMoreTokens()) {
newRuta+= tokenizer.nextToken()+"/";
}

return newRuta;
}

public static void main(String[] args) {
miPrograma instancia=new miPrograma();
System.out.println(instancia.getPath());

}

}

Esperamos que este miniTecnoTurorial haya sido de utilidad. Un saludo desde TecnoTutoriales.

Como almacenar y recuperar datos utilizando archivos de texto con Java

Para cualquier sistema informático es de vital importancia poder almacenar datos, de manera tal que la próxima vez que se encienda el ordenador y accedamos al sistema podamos recuperarlos, una forma de almacenar datos seria escribiéndolos sobre un archivo de texto.

import java.io.File;
import java.io.FileWriter;

Para ello necesitaremos de 2 clases fundamentales File y FileWriter, para poder instanciarlos debemos importar las siguientes librerías:

import java.io.File;
import java.io.FileWriter;

Luego crearemos el archivo:

File miArchivo = new File("unArchivo.txt");

También necesitaremos instanciar a FileWriter (que recibe como parámetro un archivo) que es el encargado de rellenar el archivo con la información:

try {

FileWriter writer = new FileWriter(miArchivo);

}

catch (IOException ex) {
ex.printStackTrace();

}

Ahora es el momento en el que debemos escribir los datos en el arhivo, siempre dentro del Try:

writer.write("Este es mi texto almacenado");

Y por ultimo debemos cerrar el FileWriter, dentro del Try:

writer.close();

Observacion: Sin este ultimo paso, el archivo quedaría vació.

Generalmente estamos acostumbrados a cerrar el archivo, en este caso el FileWriter se encarga de cerrar el archivo y guardar los cambios realizados.

De esta manera el archivo ha sido creado, ya contiene la información que se le proporciono para almacenar, y estos datos persistirán en disco.

Ahora si, cada vez que escribamos algo al archivo con write, esto se almacenara justo después de lo ultimo escrito, osea que si lo hacemos así:

writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.close();

Lo que tendremos como resultado en el archivo seria exactamente esto:

Este es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenado

Podríamos separalos mediante caracteres de escape como \n para una nueva línea, aunque seria tedioso a la hora que necesitemos almacenar 1000 líneas, por lo que aconsejaría utilizar aparte del FileWriter la clase PrintWriter que recibe como parámetro al FileWriter que a la vez ya tiene asignado el archivo sobre el cual va a trabajar, en este caso la clase el método quedaría algo así:

public void escribirArchivo(String datos){

File miArchivo = new File("unArchivo.txt");

try {
FileWriter writer = new FileWriter(miArchivo);
PrintWriter printer=new PrintWriter(writer);
printer.println(datos);
printer.close();
}

catch (IOException ex) {

ex.printStackTrace();
}

}

Comparando el método write con el println:

printer.println("Este es mi texto almacenado");
printer.println("Este es mi texto almacenado");
printer.println("Este es mi texto almacenado");
printer.println("Este es mi texto almacenado");

Tendríamos como resultado:

Este es mi texto almacenado
Este es mi texto almacenado
Este es mi texto almacenado
Este es mi texto almacenado

en lugar de:

Este es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenadoEste es mi texto almacenado

que es lo que se obtuvo con:

writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");
writer.write("Este es mi texto almacenado");

Nótese que no cerramos el writer sino el printer, ya que printer se encarga de cerrar todo lo demás, guardando así los cambios realizados.

En caso de querer modificar el archivo ya creado, primero se deberá almacenar en una variable el dato que ya contiene, debido a que al escribir de nuevo se sobrescribirá el archivo.

Para leer el contenido del archivo necesitaremos crear instancias de BufferedReader y FileReader, y una variable String para almacenar los datos leídos, entre los imports se debera agregar:

import java.io.FileReader;
import java.io.BufferedReader;

Luego creamos el archivo y el BufferedReader que contendrá todo lo que esta escrito en el archivo:

File miArchivo = new File("unArchivo.txt");
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(miArchivo));
String linea = reader.readLine();
String datos="";

Ya solo queda recorrer el archivo y guardar cada linea en la variable datos:

while(linea!=null){
datos+=linea;
reader.readline();
}
} catch(IOException ex){
ex.printStackTrace
}

Ahora si, ya tenemos lo contenido en el archivo dentro de la variable datos, y podemos utilizarla para lo que necesitemos, para visualizarla en un JTextArea, o simplemente imprimirlo a consola, etc.

Espero este tutorial haya sido de ayuda, no dudes en escribirnos, sobre cualquier duda, tutorial o sugerencia que tengas para aportar.

martes, 16 de enero de 2007

Encriptar y desencriptar passwords en Java con Blowfish

Muchas veces al desarrollar un sistema, los programadores nos vemos obligados a almacenar datos que no son de interés común a todos los usuarios que lo utilicen, mas bien son datos privados de cada usuario particular, especialmente en el caso de contraseñas o passwords, que deben permanecer almacenados manera tal que el sistema tenga conocimiento de ellos, pero no asi las personas que lo utilicen. En casos como este debemos almacenar estas cadenas de manera no legible a los usuarios.

Imagínese que tenemos la lista de usuarios con sus respectivos datos, y su contraseña almacenadas en una base de datos, y que tal base de datos caiga en manos de alguna persona con malas intenciones, ver el contenido de una db no es de lo mas difícil, esta persona podría obtener el usuario y contraseña del administrador del sistema, pudiendo asi modificar información vital del sistema, tales asi como montos, tazas de cambio, costos, salarios, etc, ocasionando perdidas a la compañía.

Pero que sucede si el campo mas importante de la fila "Password" esta encriptada?, sencillamente los datos obtenidos no servirían de nada, a no ser que los pueda desencriptar.

En este articulo, se explica como podemos encriptar y desencriptar un password (sin espacios) en otros tutoriales explicaremos como podríamos almacenar estos passwords en un archivo de texto, o una base de datos.

A continuación tenemos la clase que nos permitirá encriptar y desencriptar lo que necesitemos:

import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import java.security.spec.*;
import java.io.*;

public class Blowfish {

public static String encriptar(String cleartext, String key)

throws Exception {

return crypt(cleartext, key, Cipher.ENCRYPT_MODE);

}

public static String desEncriptar(String ciphertext, String key)

throws Exception {

return crypt(ciphertext, key, Cipher.DECRYPT_MODE);

}

private static String crypt(String input, String key, int mode)

throws Exception {

// Install SunJCE provider

Provider sunJce = new com.sun.crypto.provider.SunJCE();

Security.addProvider(sunJce);

KeyGenerator kgen = KeyGenerator.getInstance("Blowfish");

kgen.init(448);

SecretKey skey = kgen.generateKey();

byte[] raw = key.getBytes();

SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish");

Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");

cipher.init(mode, skeySpec);

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ByteArrayInputStream bis = new ByteArrayInputStream(input.getBytes());

CipherOutputStream cos = new CipherOutputStream(bos, cipher);

int length = 0;

byte[] buffer = new byte[8192];

while ((length = bis.read(buffer)) != -1) {

cos.write(buffer, 0, length);

}

bis.close();

cs.close();

return bos.toString();

}

}

Siendo los metodos principales encriptar y desEncriptar de la clase Blowfish públicos y estáticos nos dará la facilidad de utilizarlos sin necesidad crear una instancia de la clase sino que bastara con invocar la clase y luego el metodo, de modo que podemos almacenar el resultado en una variable String de la siguiente manera:


try {

String passwordEncriptado=Blowfish.encriptar("miPassword", "llave");

}

catch (Exception ex) {

ex.printStackTrace();

}

donde:

miPassword es la contraseña que deseamos encriptar

y llave es precisamente la llave que se tendrá en cuenta para encriptar y desencriptar

Bien, ahora ya tenemos el ciphertext del password almacenada en passwordEncriptado, con un

System.out.println(passwordEncriptado); podemos ver el ciphertext que es õÛR.Â<¶ìZïúÞÆˆ}³ equivalente a miPassword

De la misma manera si queremos desencriptarlo bastara con llamar al método desEncriptar de la siguiente manera:

try {

String passwordDesencriptado=Blowfish.desEncriptar(passwordEncriptado,"llave");

}

catch (Exception ex) {

ex.printStackTrace();

}

Donde:

passwordEncriptado es el ciphertext, y la llave es la llave utilizada para encriptarlo. Observación importante: Si se utiliza una llave diferente no se podrá recuperar el password, sino que obtendremos otra cadena en vez de la original.

Si imprimimos a consola podremos ver que passwordDesencriptado = "miPassword". Tal como estaba antes de encriptarse.

Con esto ya tenemos el poder para almacenar información confidencial, dando mas seguridad al sistema en cuanto a perdida, modificaciones y robo de informaciones.

Espero este tutorial haya sido de ayuda, no dudes en escribirnos, sobre cualquier duda, tutorial o sugerencia que tengas para aportar.

Crear un servidor de noticias RSS utilizando RSS Builder y Dreamweaver 8

Internet, la red de redes, avanza a pasos agigantados. Una web estática no es llamativa para el usuario; se ve arcaica, retro, antigua, desactualizada…simplemente parece ser una información que alguien colgó algún día y que reside allí esperando a que el autor algún día se digne a modificar. Y es que el tópico de renovarse o morir es totalmente aplicable a la web 2.0.

Últimamente vemos más a menudo como las páginas web se actualizan de una forma sencilla y dinámica. Cualquier usuario sin conocimientos avanzados puede tener su propio blog e ir actualizándolo de una forma rápida y cómoda.

El siguiente artículo va dirigido a aquellos webmasters que deseen incluir una sección de noticias en su web. Los usos de los conocimientos adoptados después de leer el artículo pueden adaptarse en función de la imaginación y la usabilidad que le de el programador: lista de novedades, de artículos recientes… incluso podría llegar a programarse su propio blog desde 0.

Os pondré un ejemplo para que lo entendáis de una forma más clara: en http://www.provicsa.com/ hay una sección de actualidad inmobiliaria que se actualiza a diario para nuestros clientes. La implementación podría haberse realizado de dos maneras: la primera sería haciendo una suscripción a un servidor de noticias RSS, el cuál nos “bombardearía” de noticias que quizás no nos interesarían y que, por lo consiguiente, no podríamos controlar. La segunda opción sería crear nosotros nuestro propio servidor de noticias. Esta opción quizás no sea tan cómoda como la primera y requiera de unos conocimientos más avanzados en cuanto a programación hago referencia, pero la personalización del canal dará un valor añadido a nuestro feed (o servidor de noticias).

Este artículo va orientado a desarrolladores web que tengan unos conocimientos básicos sobre XML y sus posibles usos. Si no conoces nada sobre este lenguaje te recomendamos que eches un vistazo en los buscadores.

¿Pero, qué es RSS?
Se trata de una especificación del estándar XML para utilizar en sitios que se actualizan frecuentemente facilitando la agregación de información de medios a partir de procedimientos automáticos. No es más que un documento XML que incluye información orientada a listas.

A continuación se detalla el patrón XML que sigue el estándar RSS:

INFORMACIÓN GENERAL DEL CANAL
- Título del canal RSS
- Vínculo
- Descripción (¿qué función tiene el canal, a quién va dirigido?)
ELEMENTOS (serán cada una de nuestras noticias):
- Título (título de cada una de las noticia, por ejemplo)
- Vínculo de la noticia
- Descripción (pequeña introducción sobre qué tratará la noticia)
- Fecha de publicación
- Fuente de la noticia o autor

PASO 1: CREAR ARCHIVO RSS
Una forma de crear el archivo RSS sería hacerlo de forma manual, utilizando cualquier editor de texto ya que, como se ha comentado anteriormente, el resultado será un archivo que seguirá el patrón XML. Sin embargo, el objetivo es que se pueda modificar el contenido web de una forma ágil y eficaz, y esto sería realmente una manera tediosa.

Otra forma más cómoda y rápida de crear este canal de noticias sería haciendo uso de alguna aplicación que utilice una interfaz gráfica amigable y de uso sencillo que nos genere por si misma el fichero RSS.

En nuestro caso crearemos el canal RSS (o también feed o canal de noticias) mediante RSS BUILDER, que podemos descargar desde www.snapfiles.com/get/rssbuilder.html

El proceso de instalación es rápido y el asistente no planteará ningún tipo de complicación al usuario.

La aplicación funciona de forma similar a un FTP. Nuestro feed deberá estar alojado en algún sitio en la red (deberemos tener un espacio donde alojarlo), con lo que será necesario configurar el acceso para subir el fichero que generemos. Dicha configuración la haremos accediendo a Settings >> FTP Site Manager o con el método abreviado de teclado CTRL+F.

Deberemos definir un nuevo sitio (New Site) y asignarle un nombre (en este caso, PROVICSA). Posteriormente deberemos rellenar los campos que aparecen en la parte derecha del cuadro de diálogo con los datos del servidor. Los campos user y password hacen referencia a los mismos datos que utilizas para conectarte a tu servidor FTP. En el campo Remote Path incluiremos la ruta en la que ubicaremos el feed. Si se mantiene el valor por defecto, el programa entenderá que se copia en la raíz del server. Un ejemplo de este campo podría ser /httpdocs/noticias/. En este caso el fichero lo encontraremos dentro de la carpeta "noticias", y esta carpeta "noticias" estará dentro de la carpeta "httpdocs".

Remote File hará referencia al nombre del archivo que creemos (con extensión XML). Por ejemplo, podríamos llamarlo noticias.xml. Por lo tanto, nuestro fichero RSS lo encontraremos en nuestro server en la ruta /httpdocs/noticas/noticias.xml.

Una vez completados todos los datos del servidor ya podremos empezar a trabajar con nuestro feed. En la parte izquierda de la pantalla principal encontramos las propiedades del canal, como puede ser el título (en el caso de Provicsa le hemos asignado “Últimas noticias del sector inmobiliario”). Iremos rellenando los campos que creamos oportunos con los valores que queramos asignar. No es obligatorio rellenar todos los campos.

Ahora únicamente nos quedará ir añadiendo cada una de las noticias o items. El programa nos muestra 4 botones (añadir item, eliminarlo, desplazar hacia arriba y desplazar hacia abajo).
Haciendo clic sobre el primer icono (añadir item) crearemos el primer item o noticia. Los campos principales serán el título, el enlace (que será el de la página correspondiente que contendrá la noticia completa) y la descripción, donde como norma general se incluirá una breve descripción, introducción o resumen de lo que será la noticia en cuestión. Con dicho campo podrás incluir enlaces, textos en negrita… para ello utiliza el icono HTML Editor y verás todas las posibilidades que el programa ofrece.

Iremos añadiendo tantas noticias como sea necesario y, una vez finalizado el proceso de inserción de datos, será necesario subir el fichero al servidor. Esto lo haremos mediante el icono Publish Feed. Aparecerá un cuadro de diálogo en el que deberemos seleccionar el servidor (que será el que hayamos configurado previamente, en nuestro caso PROVICSA). Además, podremos indicar cuantos ítems queremos subir al server. La misma aplicación se encargará de subir el fichero al servidor.

Una vez cierres el programa, éste te preguntará si deseas almacenar el fichero. Esta copia se refiere a nivel local, ya que en el servidor ya la tendremos almacenado.

De esta forma ya tendremos creado nuestro canal de noticias. Siempre que queramos modificar el fichero únicamente será necesario iniciar la aplicación, hacer clic sobre el icono Download Feed, actualizar los datos que sean necesarios y volver a subir el canal al servidor. Así de simple.

PASO 2: PROCESAR EL FICHERO RSS
El objetivo siguiente es el de procesar nuestro fichero RSS para mostrar las noticias en nuestro sitio web. Para ello utilizaremos Dreamweaver 8. Lo primero que tendremos que hacer será crear un fragmento de XSLT. Esto lo hacemos de la siguiente manera: Archivo >> Nuevo >> Categoría Básica >> XSLT (fragmento). Al aceptar, Dreamweaver nos pedirá que asociemos una fuente de datos (archivo XML) para asociar el nuevo fragmento de XSLT. En nuestro caso pondremos la ruta del feed que hemos creado anteriormente con RSS Builder. Una vez asociado el fichero, Dreamweaver nos mostrará el panel de vinculaciones. Si la aplicación no te muestra el panel de vinculaciones, haz clic sobre Ventana >> Vinculaciones o utiliza el método de teclado abreviado CTRL+F10 para mostrarlo.

En el panel de vinculaciones lo que se nos mostrará es el aspecto del fichero XML que hemos asociado. Deberemos arrastrar y soltar los nodos que nos interesen al panel de diseño. Por ejemplo, si queremos insertar el título del canal, bastará con arrastrar el nodo title (cuyo padre es channel) a dicho panel.

Para insertar el título de las noticias arrastraremos el nodo title cuyo padre es item. Al arrastrar dicho nodo a la pantalla de diseño, lo que se mostrará será el siguiente texto:
{rss/channel/item/title.

Ahora introduciremos el autor de la noticia. Para ello situaremos el cursor al final del marcador XML y presionamos Mayús+Enter para introducir una nueva línea. Ahora introduciremos, por ejemplo: “Escrito por:” o, en el caso de Provicsa, “Fuente: ”. Se trata del texto que se mostrará, para cada noticia, de quién ha escrito o de dónde proviene la noticia. Ahora únicamente consiste en arrastrar el nodo autor (cuyo padre es item). Iremos añadiendo los ítems y los textos que queramos de la misma manera (“Resumen: ” acompañado del nodo “description”, por ejemplo). Puedes realizar una vista previa en el navegador mediante F12. Se mostrará el título y el autor de la última entrada añadida en el canal de noticias.

Eso está muy bien, pero lo que queremos es que se nos muestren todas las entradas, no únicamente la última que hemos añadido al fichero RSS. Para ello deberemos crear una región repetida que se encargue de recorrer todos los elementos del feed, como si de un bucle se tratara. Para ello, en la pantalla de diseño, seleccionaremos todo aquello que queramos que se repita para cada una de las noticias y, en la ventana de propiedades (si no se muestra utiliza Ventana >> Propiedades o utiliza el método abreviado CTRL+F3) , seleccionaremos como formato Párrafo. De esta forma conseguiremos que cada noticia se muestre como un párrafo diferente. Una vez hecho esto, y con el texto aún seleccionado, haremos clic sobre Insertar >> Objetos XSLT >> Repetir región. Un cuadro de diálogo nos pedirá el nodo a repetir. Deberemos seleccionar el nodo item. Una vez realizado el paso guardaremos los datos y crearemos una vista previa para ver que se ha creado correctamente la región repetida. Aplicaremos los estilos CSS que creamos necesarios, aunque no se mostrarán al realizar la vista previa.

El siguiente paso consistirá en crear los vínculos correspondientes para cada una de las noticias. Cada artículo deberá apuntar a su link. Para acceder a este link lo podemos crear de la manera que más nos guste. Podríamos hacerlo al hacer clic sobre el título, o sobre la descripción, o con el clásico “leer” o “Acceder a la noticia”. En este caso lo haremos mediante el citado “Acceder a la noticia”. Para ello deberemos introducir este texto en la región repetida que hemos creado. Una vez introducido el texto dentro de la región, lo seleccionaremos y haremos clic sobre la carpeta que se encuentra adjunta a la etiqueta de vínculo. Aparecerá una pantalla para seleccionar el archivo; no nos interesará que el vínculo sea un fichero, sino que sea una fuente de datos. Para ello, selecciona la opción Fuente de datos y selecciona el nodo link cuyo padre es item. Una vez realizada la operación, salvaremos los datos y generaremos una vista previa para verificar que el paso se ha realizado correctamente y los enlaces funcionan a la perfección.

La primera parte ya estará finalizada. Ahora faltará integrar este fragmento XSLT a una página dinámica. En este caso crearemos un nuevo documento llamado actualidad-inmobiliaria.php, por ejemplo. Aconsejamos que almacenes el fichero en la misma ruta que el fragmento XSL. Realizaremos el diseño para la página que creamos oportuno, eso ya va "a gusto del consumidor". Recuerda que deberás reservar un área para introducir la sección de noticias.

Una vez sepamos donde ubicar la sección de noticias, situaremos allí el cursor y ya sólo faltará incluir el fragmento en nuestra página dinámico. Esto lo haremos de la siguiente manera: Insertar >> Objetos de aplicación >> Transformación XSL. Seleccionaremos el fragmento que hemos creado anteriormente (el fichero XSL) y Dreamweaver detectará la fuente de datos de forma automática. Una vez pulsemos Aceptar se generará una carpeta llamada includes en la raíz del sitio. Dicha carpeta contendrá la biblioteca que realiza la transformación en el lado del servidor y debe cargarse en el servidor de prueba. Es importante recalcar que esta carpeta, el fragmento XSLT y la página dinámica deberán subirse al servidor para que el feed funcione correctamente. Ahora sí se mostrarán los estilos aplicados al documento XSLT.

De esta forma ya podremos visualizar nuestro feed en nuestro sitio web.

Esperamos que este documento haya sido de utilidad. Un saludo desde TecnoTutoriales.