jueves, 25 de diciembre de 2008

Consumir Web Services de Indicadores con PHP

En publicaciones anteriores, hemos visto diversas formas de conectarnos a un Web Services que nos entregaba los indicadores económicos de Chile. Hoy realizaremos la conexión al mismo servicio, pero desde PHP con la ayuda de NuSOAP que es un kit de herramientas (ToolKit) para desarrollar Web Services. NuSOAP esta compuesto por una serie de clases que nos harán mucho más fácil el desarrollo de clientes, es decir, aquellas aplicaciones que consumen los Web Services. También podemos crear servidores, ósea, aquellos que los proveen, pero eso no lo veremos hoy.


El código para consultar los indicadores financieros es bastante simple y no necesitará mayores comentarios:


<?php
require_once('lib/nusoap.php');
$proxyhost = isset($_POST['proxyhost']) ? $_POST['proxyhost'] : '';
$proxyport = isset($_POST['proxyport']) ? $_POST['proxyport'] : '';
$proxyusername = isset($_POST['proxyusername']) ? $_POST['proxyusername'] : '';
$proxypassword = isset($_POST['proxypassword']) ? $_POST['proxypassword'] : '';

$client = new nusoap_client('http://www.desachile.com/webservice.asmx?WSDL', 'wsdl',
                        $proxyhost, $proxyport, $proxyusername, $proxypassword);
$err = $client->getError();
if ($err) {
    echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}

$param = array('Fecha' => '20081010');
$result = $client->call('Indicadores', $param, '', '', false, true);

if ($client->fault) {
    echo '<h2>Fault</h2><pre>';
    print_r($result);
    echo '</pre>';
} else {
    $err = $client->getError();
    if ($err) {
        echo '<h2>Error</h2><pre>' . $err . '</pre>';
    } else {
        echo '<h2>Result</h2><pre>';
        print_r($result);
        echo '</pre>';
    }
}

$indicadores = $result['IndicadoresResult']['diffgram']['NewDataSet']['indicadores'];

echo 'UTM = '.$indicadores['utm'].'<br>';
echo 'UF = '.$indicadores['uf'].'<br>';
echo 'USD = '.$indicadores['usd'].'<br>';
echo 'EURO = '.$indicadores['euro'].'<br>';
?>

Espero les sea de utilidad.

Toby

viernes, 19 de diciembre de 2008

Indicadores Financieros de Chile en tú sitio

A todos quienes hemos buscado por Internet alguna página que nos entregue los indicadores económicos o financieros de Chile (dólar, uf, euro, utm), para poder colocarlos en nuestros sitios web gratuitamente y sin tener nosotros que estar actualizando estos indicadores diariamente, les informo que esa página ya existe.


Aquí les dejo un ejemplo y la forma de cómo deben colocarlos. Si te fijas, los indicadores son publicados por desachile.com. El sitio además posee un Web Services para obtener los indicadores financieros y poder usarlos en tu aplicación es una versión beta que aún se encuentra en desarrollo.


Ahora los que nos importa. El código que debes pegar es el siguiente:





otro diseño




Espero les sea de utilidad.
Toby.

jueves, 18 de diciembre de 2008

Consumir Web Services de Indicadores Económicos con ASP

En una publicación anterior, vimos como podíamos conectarnos a un Web Services utilizando el lenguaje de programación Visual Basic 6. Hoy veremos como conectarnos al mismo Web Services que nos entregaba los indicadores económicos de Chile. Empecemos. Comencemos por crear el formulario que recibirá la fecha de consulta e invocará al Web Services que se llamará “RescateWS.asp”. El código es el siguiente:



<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>http://turboprogramacion.blogspot.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
color: #FFFFFF;
font-weight: bold;
font-size: 18px
}
-->
</style>
</head>
<body>
<form action="Invocar.asp" method="post" name="form1">
<table width="300" border="0" cellspacing="0" cellpadding="0" align="center">
<tr bgcolor="#004080">
<td colspan="3"><div align="center" class="Estilo1">Consutar Indicadores Econ&oacute;micos</div></td>
</tr>
<tr bgcolor="#CCCCCC">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr bgcolor="#CCCCCC">
<td width="61%" align="right">Ingrese Fecha (yyyymmdd)</td>
<td width="4%">:</td>
<td width="35%"><input name="fecha" type="text" id="fecha" size="10" maxlength="10"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr bgcolor="#808080">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input name="Consultar" type="submit" value="Consultar"></td>
</tr>
</table>
</form>
</body>
</html>



Ahora el archivo “Funcion.asp”, en donde vamos a crear la función “LeeXml()” que se encargará de leer el XML de respuesta con los indicadores que nos enviará el Web Services y la función “InvocarWebService()” que enviará el XML de consulta con el parámetro fecha. Nuestras funciones quedarán así:



<%
Function LeeXml(responseText)
Dim xmlResponse
Dim xnodelist
Dim indicadores
Dim id, uf, usd, euro, utm, tcm, fecha

indicadores = ""
If Len(responseText) <> 0 Then
Set xmlResponse = CreateObject("MSXML2.DOMDocument")
xmlResponse.async = false
xmlResponse.loadXml responseText
Set xnodelist = xmlResponse.documentElement.selectNodes("/soap:Envelope/soap:Body/IndicadoresResponse/IndicadoresResult/diffgr:diffgram/NewDataSet/indicadores")
Dim objItem

For Each objItem In xnodelist
id = objItem.selectSingleNode("id").Text
uf = objItem.selectSingleNode("uf").Text
usd = objItem.selectSingleNode("usd").Text
euro = objItem.selectSingleNode("euro").Text
utm = objItem.selectSingleNode("utm").Text
tcm = objItem.selectSingleNode("tcm").Text
fecha = objItem.selectSingleNode("fecha").Text
Next

indicadores = "<TABLE CELLSPACING='1' bgcolor='#dedede' ALIGN=CENTER WIDTH='250'>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>UF</TD>" & _
"<TD align='right'>"&uf&"</TD>" & _
"</TR>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>UTM</TD>" & _
"<TD align='right'>"&utm&"</TD>" & _
"</TR>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>D&oacute;lar Observado</TD>" & _
"<TD align='right'>"&usd&"</TD>" & _
"</TR>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>Euro</a></TD>" & _
"<TD align='right'>"&euro&"</TD>" & _
"</TR>" & _
"</TABLE>"
End If

LeeXml = indicadores
End Function

Function InvocarWebService (strSoap, strSOAPAction, strURL, ByRef xmlResponse)
Dim xmlhttp
Dim blnSuccess

Set xmlhttp = server.CreateObject("WinHttp.WinHttpRequest.5.1")
xmlhttp.Open "POST", strURL
xmlhttp.setRequestHeader "Man", "POST " & strURL & " HTTP/1.1"
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "SOAPAction", strSOAPAction
call xmlhttp.send(strSoap)

If xmlhttp.Status = 200 Then
blnSuccess = True
Else
blnSuccess = False
End If

xmlResponse = xmlhttp.ResponseText
InvocarWebService = blnSuccess
Set xmlhttp = Nothing
End Function
%>



Ya solo nos queda crear la página “Invocar.asp” que contiene el XML de consulta y llama a las funciones “InvocarWebService()” y “LeeXml()” para posteriormente presentarnos los indicadores resultantes por pantalla. Entonces el código es:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!-- #include file = "funcion.asp" -->
<%
strFecha = Request.Form("fecha")
strSoap = "<?xml version='1.0' encoding='utf-8'?>"& _
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"& _
"<soap:Body>"& _
"<Indicadores xmlns='Indicadores'>"& _
"<Fecha>"&strFecha&"</Fecha>"& _
"</Indicadores>"& _
"</soap:Body>"& _
"</soap:Envelope>"
strSOAPAction = "Indicadores/Indicadores"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>http://turboprogramacion.blogspot.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<%
Dim xmlResponse
If InvocarWebService (strSoap, strSOAPAction, "http://www.desachile.com/webservice.asmx?WSDL", xmlResponse) Then
Response.Write(LeeXml(xmlResponse))
Else
Response.Write "*** Ha ocurrido un Error ***"
End If
Set xmlResponse = Nothing
%>
</body>
</html>



Listo, ya solo nos queda probar. Si estás detrás de un Proxy, puede que tengas que hacer una pequeña variación en el código. Eso se los dejo como tarea.


Saludos y espero les ayude a quienes están comenzando con este tema.


Toby

Consumir Web Services de Indicadores con ASP

En una publicación anterior, vimos como podíamos conectarnos a un Web Services utilizando el lenguaje de programación Visual Basic 6. Hoy veremos como conectarnos al mismo Web Services que nos entregaba los indicadores económicos de Chile. Empecemos.

Comencemos por crear el formulario que recibirá la fecha de consulta e invocará al Web Services que se llamará “RescateWS.asp”. El código es el siguiente:




<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>http://turboprogramacion.blogspot.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {
color: #FFFFFF;
font-weight: bold;
font-size: 18px
}
-->
</style>
</head>
<body>
<form action="Invocar.asp" method="post" name="form1">
<table width="300" border="0" cellspacing="0" cellpadding="0" align="center">
<tr bgcolor="#004080">
<td colspan="3"><div align="center" class="Estilo1">Consutar Indicadores Econ&oacute;micos</div></td>
</tr>
<tr bgcolor="#CCCCCC">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr bgcolor="#CCCCCC">
<td width="61%" align="right">Ingrese Fecha (yyyymmdd)</td>
<td width="4%">:</td>
<td width="35%"><input name="fecha" type="text" id="fecha" size="10" maxlength="10"></td>
</tr>
<tr bgcolor="#CCCCCC">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr bgcolor="#808080">
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><input name="Consultar" type="submit" value="Consultar"></td>
</tr>
</table>
</form>
</body>
</html>



Ahora el archivo “Funcion.asp”, en donde vamos a crear la función “LeeXml()” que se encargará de leer el XML de respuesta con los indicadores que nos enviará el Web Services y la función “InvocarWebService()” que enviará el XML de consulta con el parámetro fecha. Nuestras funciones quedarán así:




<%
Function LeeXml(responseText)
Dim xmlResponse
Dim xnodelist
Dim indicadores
Dim id, uf, usd, euro, utm, tcm, fecha

indicadores = ""
If Len(responseText) <> 0 Then
Set xmlResponse = CreateObject("MSXML2.DOMDocument")
xmlResponse.async = false
xmlResponse.loadXml responseText
Set xnodelist = xmlResponse.documentElement.selectNodes("/soap:Envelope/soap:Body/IndicadoresResponse/IndicadoresResult/diffgr:diffgram/NewDataSet/indicadores")
Dim objItem

For Each objItem In xnodelist
id = objItem.selectSingleNode("id").Text
uf = objItem.selectSingleNode("uf").Text
usd = objItem.selectSingleNode("usd").Text
euro = objItem.selectSingleNode("euro").Text
utm = objItem.selectSingleNode("utm").Text
tcm = objItem.selectSingleNode("tcm").Text
fecha = objItem.selectSingleNode("fecha").Text
Next

indicadores = "<TABLE CELLSPACING='1' bgcolor='#dedede' ALIGN=CENTER WIDTH='250'>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>UF</TD>" & _
"<TD align='right'>"&uf&"</TD>" & _
"</TR>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>UTM</TD>" & _
"<TD align='right'>"&utm&"</TD>" & _
"</TR>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>D&oacute;lar Observado</TD>" & _
"<TD align='right'>"&usd&"</TD>" & _
"</TR>" & _
"<TR bgcolor='#f0f0f0'>" & _
"<TD>Euro</a></TD>" & _
"<TD align='right'>"&euro&"</TD>" & _
"</TR>" & _
"</TABLE>"
End If

LeeXml = indicadores
End Function

Function InvocarWebService (strSoap, strSOAPAction, strURL, ByRef xmlResponse)
Dim xmlhttp
Dim blnSuccess

Set xmlhttp = server.CreateObject("WinHttp.WinHttpRequest.5.1")
xmlhttp.Open "POST", strURL
xmlhttp.setRequestHeader "Man", "POST " & strURL & " HTTP/1.1"
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "SOAPAction", strSOAPAction
call xmlhttp.send(strSoap)

If xmlhttp.Status = 200 Then
blnSuccess = True
Else
blnSuccess = False
End If

xmlResponse = xmlhttp.ResponseText
InvocarWebService = blnSuccess
Set xmlhttp = Nothing
End Function
%>



Ya solo nos queda crear la página “Invocar.asp” que contiene el XML de consulta y llama a las funciones “InvocarWebService()” y “LeeXml()” para posteriormente presentarnos los indicadores resultantes por pantalla. Entonces el código es:


<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!-- #include file = "funcion.asp" -->
<%
strFecha = Request.Form("fecha")
strSoap = "<?xml version='1.0' encoding='utf-8'?>"& _
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>"& _
"<soap:Body>"& _
"<Indicadores xmlns='Indicadores'>"& _
"<Fecha>"&strFecha&"</Fecha>"& _
"</Indicadores>"& _
"</soap:Body>"& _
"</soap:Envelope>"
strSOAPAction = "Indicadores/Indicadores"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>http://turboprogramacion.blogspot.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<%
Dim xmlResponse
If InvocarWebService (strSoap, strSOAPAction, "http://www.desachile.com/webservice.asmx?WSDL", xmlResponse) Then
Response.Write(LeeXml(xmlResponse))
Else
Response.Write "*** Ha ocurrido un Error ***"
End If
Set xmlResponse = Nothing
%>
</body>
</html>



Listo, ya solo nos queda probar. Si estás detrás de un Proxy, puede que tengas que hacer una pequeña variación en el código. Eso se los dejo como tarea.


Saludos y espero les ayude a quienes están comenzando con este tema.


Toby


Los archivos del ejemplo, los puedes descargar en DesaChile.com

miércoles, 17 de diciembre de 2008

Los Sistemas Expertos

Los Sistemas Expertos, son sistemas informáticos que simulan el proceso de aprendizaje, de memorización, de razonamiento, de comunicación y de acción de un experto humano en cualquier rama de la ciencia. Estas características le permiten almacenar datos y conocimiento, sacar conclusiones lógicas, tomar decisiones, aprender de la experiencia y los datos existentes, comunicarse con expertos humanos, explicar el por qué de las decisiones tomadas y realizar acciones como consecuencia de todo lo anterior.

¿Qué condiciones deben cumplirse para que sea adecuado emplear un sistema experto para resolver un problema?

Las condiciones que deben cumplirse son:

Ø Falta de especialistas en la empresa u organización.
Ø Que la información que exista se encuentre desordenada.
Ø Falta de tiempo para capacitar a las personas o trabajadores de la empresa.
Ø Cuando los expertos humanos en una determinada materia son escasos.
Ø En situaciones complejas, donde la subjetividad humana puede llevar a conclusiones erróneas.
Ø Cuando es muy elevado el volumen de datos que ha de considerarse para obtener una conclusión.
Ø Que los expertos dispongan de conocimientos complejos en un área muy delimitada, donde no existan algoritmos ya establecidos (o donde los existentes no puedan solucionar algunos problemas).
Ø Que encontremos teorías que resulten prácticamente imposibles de analizar todos los casos teóricamente imaginables mediante algoritmos y en un espacio de tiempo relativamente corto y razonable.
Ø Que la estructuración e implementación del conocimiento del experto requiera una gran cantidad de trabajo.
Ø Cuando el conocimiento sea válido durante un largo espacio de tiempo y vaya a ser utilizado por el mayor número de personas.
Ø Cuando se desee evitar fallos en labores rutinarias complejas.
Ø Cuando se quiera ampliar de forma más rápida los conocimientos de los especialistas.
Ø Cuando se desee diagnosticar los fallos con mayor rapidez y conseguir tareas de planificación más completas y consistentes.
Ø Cuando se desee que personas con poca experiencia pueden resolver problemas que requieren un "conocimiento formal especializado".


¿Cuáles son las principales limitaciones de los PC para utilizar un sistema experto?

Las principales limitaciones que presentan los PC para utilizar un sistema experto son el hardware disponible como:

Ø La cantidad de memoria que tenga el PC.
Ø La capacidad y velocidad del procesador.
Ø El tamaño del disco duro para la capacidad de almacenamiento para la base del conocimiento.


¿Cómo se crea una base de conocimientos?

Para poder crear una base de conocimientos, primero se debe recopilar toda la información trascendente que poseen los especialistas de la organización, luego ordenarla y transferirla a la base de conocimientos.
El experto debe comprobar constantemente si su conocimiento ha sido transmitido de la forma más conveniente.
El ingeniero del conocimiento es responsable de una implementación correcta, pero no de la exactitud del conocimiento. La responsabilidad de esta exactitud recae en el experto.
Para obtener el conocimiento de los expertos se puede realizar por medio de entrevistas, reuniones, formulario, etc.


¿Cómo se comprueba y justifica un sistema experto?

Para poder comprobar y validar un sistema experto se debe consultar a los especialistas que contribuyeron con la información para la creación del sistema experto y con los usuarios para saber si el sistema cumple y satisface las necesidades para las cuales fue creado.


¿Cómo se asegura la validez de un sistema experto?

Para asegurar la validez de un sistema experto se debe mantener siempre actualizada su base de conocimientos con nueva información que se vaya incorporando al área del conocimiento en la cual se esta trabajando. Además, debe seguir cumpliendo y satisfaciendo los objetivos para los cuales fue creado.

miércoles, 10 de diciembre de 2008

Dar Formato al ingreso de numeros con javascript

Continuando con la publicación anterior, ahora utilizaremos las funciones que hemos escrito anteriormente para JavaScript. Ver aquí.


Lo haremos con un pequeño ejemplo. Se trata de dar formato a un número a medida que se va digitando en un cuadro de texto. Esta función se puede usar para el ingreso de códigos o para el RUT en el caso de Chile. Trataré de ser lo mas simple posible. La optimización de la función se las dejo a ustedes.

Si quieres ver como funciona, mira esta página Desachile.com.


La función quedaría así:


function Formato(num)
{
var largo = num.length;
var i, dd, ss, largo2, valor, punto, nvalor

dd=Replace(num,".","");
dd=Replace(dd,",","");
dd=Replace(dd,"-","");

if (Len(dd) <= 1)
{
if (IsNumeric(dd) == false)
{
num = "";
return (num);
}
}
else
{
if (IsNumeric(Left(dd, Len(dd) - 1)) == false)
{
num = "";
return (num);
}
}
largo2 = Len(dd);
i = 3;
valor = Left(dd, largo2 - 1);
largo = Len(valor);
nvalor = "";

if (largo2 >= 4)
{
while (i <= largo)
{
if (i < largo)
{
punto = ".";
}
else
{
punto = "";
}
nvalor = punto + Right(valor, 3) + nvalor;

if (Len(valor) > 1)
{
valor = Left(valor, Len(valor) - 3)
}
i = i + 3
}
nvalor = valor + nvalor;
nvalor = nvalor + "-" + Right(dd, 1);
return (nvalor);
}
else
{
if (largo2 > 1)
{
nvalor = Left(valor, 3) + "-" + Right(dd, 1);
}
else
{
nvalor=Replace(num,"-","");
}
return (nvalor);
}
}




Para mis amigos de Chile, les dejo como tarea el cálculo automático del digito verificador del RUT a medida que se van ingresando valores. En una futura publicación mostraré mi solución.

Saludos a todos. Toby.

Funciones Visual Basic para JavaScript

Aquí les dejo algunas funciones que normalmente usamos cuando programamos en Visual Basic, ASP, y que no las tenemos a la mano cuando programamos en JavaScript.



Replace ()

Devuelve una cadena en la que se reemplazó una subcadena especificada con otra subcadena un número especificado de veces.


function Replace(valor,n,c)
{
var valor = valor.split(n);
valor = valor.join(c);
return valor;
}



IsNumeric ()


Devuelve un valor de tipo Boolean que indica si unaexpresión se puede evaluar como un número.


function IsNumeric(valor)
{
var log=valor.length; var sw="S";
for (var x=0; x < log; x++)
{
v1=valor.substr(x,1);
v2 = parseInt(v1);
if (isNaN(v2))
{
sw= "N";
}
}
if (sw=="S")
{
return true;
}
else
{
return false;
}
}



LTrim, Rtrim y Trim (Funciones)



Devuelve una copia de una cadena determinada sin espacios a la izquierda (LTrim), sin espacios a la derecha (RTrim) o sin espacios ni a la derecha ni a la izquierda (Trim).


function LTrim(date)
{
var i = 0;
var j = date.length - 1;

if (date == null)
return (false);

for (i = 0; i < date.length; i++)
{
if (date.substr(i, 1) != ' ' &&
date.substr(i, 1) != '\t')
break;
}

if (i <= j)
return (date.substr(i, (j+1)-i));
else
return ('');
}

function RTrim(date)
{
var i = 0;
var j = date.length - 1;

if (date == null)
return (false);

for(j = date.length - 1; j >= 0; j--)
{
if (date.substr(j, 1) != ' ' &&
date.substr(j, 1) != '\t')
break;
}

if (i <= j)
return (date.substr(i, (j+1)-i));
else
return ('');
}

function Trim(date)
{
if (date == null)
return (false);

return RTrim(LTrim(date));
}



Space ()


Devuelve una cadena que consiste en un número especificado de espacios.


function Space(n)
{
var t="";

for(var i=1; i<=n; i++)
t=t+" ";
return t;
}



Mid ()


Devuelve una cadena que contiene un número especificado de caracteres.


function Mid(s, n, c)
{
var numargs=Mid.arguments.length;

if(numargs<3)
c=s.length-n+1;

if(c<1)
c=s.length-n+1;
if(n+c >s.length)
c=s.length-n+1;
if(n>s.length)
return "";

return s.substring(n-1,n+c-1);
}



Left ()


Devuelve una cadena que contiene un número especificado de caracteres del lado izquierdo de la cadena.


function Left(s, n)
{
if(n>s.length)
n=s.length;

return s.substring(0, n);
}



Right ()


Devuelve una cadena que contiene un número especificado de caracteres del lado derecho de la cadena.


function Right(s, n)
{
var t=s.length;
if(n>t)
n=t;

return s.substring(t-n, t);
}



Len ()


Devuelve el número de caracteres en una cadena.


function Len(d)
{
if (Trim(d) != "")
{
return(d.length);
}
else
{
return(0);
}
}



Si quieres descargar el código, se ecuentra en esta página Desachile.com.


Espero les Ayude. Toby.

martes, 9 de diciembre de 2008

La Robótica

Web de Referencia: http://robotica-de-toby.blogspot.com/

Hoy día les quiero hablar de la "Robótica" y de la importancia que ha ido tomando día a día y de como avanza a pasos agigantados.

La robótica es la ciencia o rama de la ciencia que se ocupa del estudio, desarrollo y aplicaciones de los robots. El avance de la robótica favorece el incremento de la productividad de alimentos, ropa, calzado, aparatos electrónicos y mecánicos, etc.

En la actualidad se cuenta con computadores que utilizan el lenguaje oral para ejecutar algunos escritos u órdenes. Existen muchos y variados prototipos que juegan un papel destacado en la computación, en la micro eléctrica, la robótica y sistemas expertos entre otros. Estos ejemplos, nos presentan una visión futuristas que dentro de poco serán empleados por todos de manera común.



El término Robótica procede de la palabra robot. La robótica es, por lo tanto, la ciencia o rama de la ciencia que se ocupa del estudio, desarrollo y aplicaciones de los robots.

Los robots son dispositivos compuestos de sensores que reciben datos de entrada y que pueden estar conectados a la computadora. Esta, al recibir la información de entrada, ordena al robot que efectúe una determinada acción. Puede ser que los propios robots dispongan de microprocesadores que reciben el input de los sensores y que estos microprocesadores ordenen al robot la ejecución de las acciones para las cuales está concebido. En este último caso, el propio robot es a su vez una computadora.


Si te interesa el tema y buscas más información puedes visitar la siguiente dirección:
http://robotica-de-toby.blogspot.com/

Saludos a todos y espero les ayude.

lunes, 8 de diciembre de 2008

Consumir Web Services con Visual Basic

Vamos a crear una aplicación en Visual Basic para conectarnos a un Web Services que nos entregará los indicadores económicos de Chile, los cuales podemos usar en cualquier aplicación si la necesidad de tener que ingresar nosotros mismos estos valores a una base de datos. Empecemos.


Comencemos por crear un nuevo proyecto




Los controles que agregaremos son los siguientes:




Luego guardamos el proyecto como “Consulta_WS.vbp” y el formulario como “Form_WS.frm”.


Ahora que ya tenemos todo listo, nuestro formulario debería quedar así:




Antes de comenzar a escribir código en nuestro proyecto, necesitamos agregar una referencia a “Microsoft XML, V3.0” y eso lo hacemos de:




Luego buscamos “Microsoft XML, V3.0” y la seleccionamos.




Hacemos clic en Aceptar y ya estamos listos.


Nuestro siguiente paso será agregar un Módulo a nuestro proyecto.





Le dejamos el nombre que nos da por defecto (Module1) y escribimos la siguiente función:

Function InvokeWebService(strSoap, strSOAPAction, strURL, ByRef xmlResponse) As Boolean
Dim xmlhttp As MSXML2.XMLHTTP30
Dim blnSuccess As Boolean

Set xmlhttp = New MSXML2.XMLHTTP30
xmlhttp.open "POST", strURL, False
xmlhttp.setRequestHeader "Man", "POST " & strURL & " HTTP/1.1"
xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
xmlhttp.setRequestHeader "SOAPAction", strSOAPAction
Call xmlhttp.send(strSoap)

If xmlhttp.Status = 200 Then
blnSuccess = True
Else
blnSuccess = False
End If

Set xmlResponse = xmlhttp.responseXML
InvokeWebService = blnSuccess
Set xmlhttp = Nothing
End Function



Ahora que ya tenemos lista la función que se encargará de conectarse al Web Services, nos queda poder llamarla desde nuestro botón “Consultar”. Damos doble clic sobre el botón y escribimos:


Private Sub Consultar_Click()
Dim xmlResponse As MSXML2.DOMDocument30
Dim strSoap As String
Dim strSOAPAction As String
Dim strWsdl As String

strSoap = Soap.Text
strSOAPAction = Action.Text
strWsdl = Wsdl.Text
If InvokeWebService(strSoap, strSOAPAction, strWsdl, xmlResponse) Then
Resultado.Text = xmlResponse.xml
Else
Resultado.Text = "Error"
End If

Set xmlResponse = Nothing
End Sub



Bueno, ya tenemos lista nuestra aplicación que se encargará de consultar un Web Services, pero ahora debemos aprender como usarla.

Para nuestro ejemplo, vamos a consultar la página de Indicadores Financieros de Chile desde la siguiente dirección (siempre que el servicio se encuentre disponible, o sino, pueden usar otro web services): http://www.desachile.com. Una vez aquí buscamos la dirección que nos llevará a la página del Web Services http://www.desachile.com/webservice.asmx


Analicemos un poco esta página. En el link “Service Description”, si haces clic sobre el, veremos que nos lleva a la página http://www.desachile.com/webservice.asmx?WSDL en donde WSDL son las siglas de Web Services Description Language, un formato XML que se utiliza para describir los Servicios Web. Volvamos atrás.


Si hacemos clic en el Link “Indicadores”, nos llevará a http://www.desachile.com/webservice.asmx?op=Indicadores que es la página que nos interesa, por que nos dirá que información debemos enviar para consultar el Web Services de Indicadores Financieros.


Fijémonos en SOAP 1.1


La primera sección nos indica que es lo que debemos enviar y la segunda sección nos indica que es lo que recibiremos. Como vemos, debemos enviar un XML con una fecha de consulta y nos retornará un XML con los resultados.


Vamos a copiar la primera sección y pegarla en nuestra aplicación en el cuadro que tenemos para el Soap. No olviden colocar la fecha de consulta con el formato año mes día (ej: 20081203):


<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Indicadores xmlns="Indicadores">
<Fecha>20081203</Fecha>
</Indicadores>
</soap:Body>
</soap:Envelope>


Ahora copiamos el SOAPAction ("Indicadores/Indicadores") y lo pegamos en Action de nuestra aplicación sin las comillas.


Ya solo nos queda la dirección Wsdl que como ya vimos antes es: http://www.desachile.com/webservice.asmx?WSDL la copiamos y la pegamos en nuestra aplicación.


Ya podemos hacer clic en consultar y obtendremos el XML con los indicadores.




Si ordenamos el resultado tendremos:


<?xml version="1.0" ?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<IndicadoresResponse xmlns="Indicadores">
<IndicadoresResult>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="indicadores">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int" minOccurs="0" />
<xs:element name="uf" type="xs:double" minOccurs="0" />
<xs:element name="usd" type="xs:double" minOccurs="0" />
<xs:element name="euro" type="xs:double" minOccurs="0" />
<xs:element name="utm" type="xs:double" minOccurs="0" />
<xs:element name="tcm" type="xs:double" minOccurs="0" />
<xs:element name="fecha" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<indicadores diffgr:id="indicadores1" msdata:rowOrder="0">
<id>432</id>
<uf>21429.37</uf>
<usd>666.84</usd>
<euro>847.53</euro>
<utm>37652</utm>
<tcm>127.49</tcm>
<fecha>20081203</fecha>
</indicadores>
</NewDataSet>
</diffgr:diffgram>
</IndicadoresResult>
</IndicadoresResponse>
</soap:Body>
</soap:Envelope>


Ahora ya solo queda recorrer el XML para obtener los valores, pero eso se los dejo a ustedes.

Saludos y espero les sirva.


Entradas populares