22 ago 2010

ZTD comenzando el 3er mes

Ya cumpli un nuevo mes con ztd (es el segundo), aunque en el ultimo mes no he podido implementar completamente los habitos 3 y 4, por lo menos he mantenido los habitos 1 y 2.

El habito 4 me fue sencillo de implementar, ya que de a poco me voy diciplinando para poder realizar solo 1 tarea a la vez. Si debo reconocer que aun se me presentan distracciones, pero ya las identifico y se me hace mas facil controlarlas.

En cambio el habito 3, necesita de una planificacion mayor, y por lo tanto a veces lo tiendo a dejar de lado, por tareas que no se alinean con mi planificacion.

Por ahora, el sentarme a realizar una planificacion semanal, la he podido realizar solo en 2 de las 4 semanas del mes. Como proximo objetivo tengo el poder tomar este habito e incorporarlo realmente a mi vida. Pudiendo planificar mis metas semanales (y quiero planificar las metas a mas largo plazo) para luego poder estar mucho mas enfocado y alinear todos mis esfuerzos. Por ahora no implementare mas habitos, ya que no he implementado realmente y por completo los 4 primeros.

Espero que estas lineas sirvan de ayuda para aquellos que han comenzado con ztd y desean dejarlo o se sienten identificados con mis palabras. Muchas gracias por seguir leyendo, y hasta la proxima.

18 jul 2010

Mis primeros 30 días con ZTD

Para aquellas personas que vienen siguiendo mis posts ya saben que hace unos 30 días comencé con ZTD (Zen To Done – una especie de variante a GTD).

Durante este tiempo en el cual vengo utilizando las primeras 2 pautas de ZTD me ha ido bastante bien, debo reconocer que tener este tipo de disciplina ayuda muchísimo. Si bien no me había propuesto objetivos en este período, más que completar los primeros 30 días y ver como me iba, he logrado mucho más que ello. He podido tomar mayor control sobre las tareas que realizo, priorizar que es importante, y descartar todas aquellas tareas improductivas que me sacaban gran parte de mi día, sin dejar nada a cambio.

Ahora tengo que seguir adelante con el plan, hasta llegar a implementar los 10 puntos que se plantean en ZTD. Implementaré los dos puntos siguientes, el realizar una planificación semanal y diaria, y el de evitar distracciones. Aún estoy evaluando que implican cada uno de ellos y viendo si solo implemento uno, o implemento dos. Por el momento solo describiré cuales son los dos puntos que tengo pensado implementar:

Planificar

ZTD plantea algo que es muy bueno, para poder cumplir nuestras metas y poder darle un rumbo a nuestras vidas, la planificación. Se plantea algo muy sencillo, que al comienzo de cada semana, nos propongamos cuales serán las tareas más importantes que vamos a realizar durante la semana que comienza. Y luego, al comienzo de cada día, nos propongamos entre 1 y 3 tareas importantes que vamos a realizar en el día. Siempre, durante el día/semana, debemos darle prioridad a las tareas que hemos planificado, ya que ellas nos llevarán a donde queremos ir.

Realmente me parece algo muy bueno, ya que uno muchas veces se plantea metas que quiere alcanzar en un determinado tiempo, pero con el día a día, las va dejando de lado. Poder anticiparnos a las tareas antes que se vuelvan urgentes, nos ayuda a poder hacer las cosas importantes sin necesidad de correr.

Hacer

El otro hábito de ZTD que estoy analizando implementar es el de hacer solo 1 tarea a la vez. Muchas veces estamos realizando una tarea y algo nos interrumpe, o nos ponemos con el e-mail, o un mensaje, y comienzan nuestros problemas (sin darnos cuenta). Comenzamos a realizar varias tareas a la vez, y realmente, no hacemos ninguna eficientemente. Terminamos destinando mucho más tiempo y perdemos concentración en el proceso.

Al leer esto me di cuenta que debo dejar el multiprocesamiento para las computadoras, el cerebro esta mejor entrenado para hacer una única tarea a la vez (el context switch interno no es muy rápido).

Es por ello que lo más importante en este hábito es hacer una única tarea a la vez, y no distraernos con otras tareas. Por ejemplo, si vamos a escribir un documento en la computadora; antes cerremos el e-mail, el mensajero, y concentrémonos en la tarea que estamos realizando.

Obviamente pueden surgir (y nos van a surgir) interrupciones, pero debemos aprender a controlarlas, dejemos una nota en la bandeja de entrada, y luego la procesaremos cuando terminemos con esta tarea.

En los primeros 30 días de ZTD, he realizado ciertos hábitos similares a estos nuevos que debo implementar, pero de una manera informal e inconsciente. Por ejemplo, al comienzo de cada día planificaba que tareas iba a realizar en el día, y cuando comenzaba una tarea importante, intentaba todo tipo de distracciones (intentaba asignarle un tiempo estimado a la tarea, lo cual me permitía saber que tan bien conozco mis tiempos y si puedo cumplirlos sin distracciones).

Bueno, espero poder darle un poco de luz a aquellos que están corriendo día a día con sus tareas, y que se sienten sobrepasados por sus obligaciones. Prueben ZTD, no perderán nada, que es lo peor que puede pasar?

Todos aquellos que hayan experimentado con ZTD o métodos similares, o piensen que estos hábitos les podrían ayudar, me gustaría conocer sus experiencias/comentarios.

En 30 días seguro ya hay otro post sobre este tema, ahora me debo retirar a planificar mis metas.

22 jun 2010

Iniciando con Zen To Done (ZTD)

Zen To Done es un “sistema” de productividad que nos ayuda a organizarnos un poquito mejor, y hacer las cosas que debemos hacer. Es una variante de GTD (Getting Things Done), pero un poquito más estructurado.

Desde hace un tiempo venia siguiendo GTD, todos los que cumplimos diferentes roles, debemos aprender a asignarle a cada cosa su tiempo y hacer todo. Es decir, no podemos dejar que el trabajo nos saque tiempo de nuestra vida, ni que cosas de nuestra vida interfieran con el trabajo. Creo que existen diferentes tipos de personas, algunas que piensan en su vida privada mientras están en el trabajo, y en el trabajo cuando están en su vida privada. Y también esas que no pueden sacar el trabajo de su vida sintiendo que deben hacer más y más (workaholics). Muchos de estos inconvenientes se presentan, a mi entender, por no poder darle a cada cosa su espacio.

A partir de querer mejorar mi productividad es que me empecé a acercar a GTD. Mi primer acercamiento a GTD fue a través del libro de Allen, que en aquí lo han traducido algo así como Organizate con Eficacia. Empece a leer el libro, me pareció muy interesante, perooooo… nunca lo termine. Me parecía una lectura que podía ayudarme, pero me resultaba demasiado extensa para ver si realmente sus principios podían funcionar. Yo buscaba algo más práctico. Es por eso que comence a leer blogs, e información sobre GTD, y experiencia de personas que lo estaban implementando con éxito.

Desde hace un tiempo que vengo utilizando algunos de sus principios, dividir en tareas, tener un inbox (aunque no demasiado formal), etc. En realidad adapte los puntos que pensé que podían ser útiles para mí. Pero la semana pasada me tope con ZTD (Zen To Done), que podría decir que es una versión modificada de GTD (Si bien los principios son similares, y tampoco fueron descubiertos por Allen en su libro, me parece más acorde a mi).

ZTD nos propone cumplir con 10 reglas o pasos para lograr una mejor productividad. No los voy a enunciar, para aquellos que quieran conocer más pueden visitar la página oficial http://zenhabits.net/ en la cual encontrarán toda la información, y hasta un libro con los pasos.

Los puntos que me parecieron importantes es que no se deben implementar (en realidad aconsejan no implementar) más de 1 o 2 pasos por mes. Es decir, debemos dar los pasos de a uno, como cuando empezamos a caminar. La idea es crear un hábito, e ir cambiando de a poco nuestra manera de hacer las cosas. Yo comencé con los primeros dos, que son los únicos que mencionaré.

1. Llevar siempre algún medio que nos permita plasmar nuestras ideas. Siempre se nos vienen cosas a la cabeza, tareas que debemos realizar, información que vemos en la calle que deseamos recordar, en fín, todo aquello que viene a nuestra mente y decimos “no me tengo que olvidar de esto”. Todo eso, lo debemos escribir en una libreta, o cualquier otro medio que llevemos SIEMPRE con nosotros. El objetivo es sencillo, liberar nuestra mente. Nuestra mente no esta preparada como medio de almacenamiento, ni es una agenda. Alguna vez te paso ver algo que te interesaba, decirte a ti mismo, esto lo debo recordar, y luego lo recordaste tarde o directamente te lo olvidaste? bueno, si a ti también te paso, este método te será de mucha utilidad. Una vez que llegamos a nuestra casa o trabajo, debemos volcar toda la información que recolectamos en la bandeja de entrada o INBOX (ver el siguiente punto).

2. Debemos tener una bandeja de entrada en nuestra casa/oficina en la cual debemos poner todas las cosas que nos llegan: correspondencia, notas que hemos tomado, anotaciones de familiares/compañeros de trabajo, en fin todo (sería como el único punto de acceso a nuestras actividades). Lo que debemos hacer es lo que se llama procesar la bandeja de entrada. Debemos tomar todos los elementos que en ella se encuentran, de arriba hacia abajo, sin saltear ninguno. Por cada elemento que tomamos debemos:

  • Si nos lleva realizarlo 2 minutos o menos, lo hacemos de inmediato
  • Si es para tirar, lo tiramos
  • Si lo podemos delegar, lo delegamos
  • Si es para archivar, lo archivamos
  • Si no es ninguna de las anteriores, entonces lo debemos poner en nuestra lista de tareas o calendario para realizarlo más tarde

Es tan sencillo como eso los 2 primeros hábitos que debemos tomar. Hasta ahora estoy cumpliendo, espero poder lograr llegar a los 30 días y poder lograr incorporar este hábito. El 18 de Julio, comentaré como me fue con estos primeros 30 días de ZTD.

Ya estas utilizando algún sistema para mejorar tu productividad, ya sea GTD, ZTD, o cualquiera? Si es así, me gustaría conocer tu experiencia. Deja un comentario comentando tu experiencia, y un resumen de como lo implementas.

10 may 2010

Servicios Web – Retornar un XML con NuSOAP

Aquí estoy nuevamente con un artículo de web services / servicios web, en esta oportunidad, voy a incluir un ejemplo en el cual ser servidor retorna un XML al cliente, y este lo muestra por pantalla. Este ejemplo surgió a petición de un visitante a mi blog. Espero que les sea de utilidad.

Servidor

El servidor es muy similar a todos los servidores de los ejemplos anteriores, simplemente que retorna un XML. Dado que el servidor retorna un XML, debemos convertirlo antes de poder retornarlo, para que no genere conflictos con el código del “envoltorio” (SOAP) que transportará el XML. La forma más rápida es utilizar el método base64_encode que ya trae incorporado PHP. Es decir, codificamos el XML con base64, de esta forma nos aseguramos que no aparecerán caracteres extraños, y luego retornamos ese XML modificado.

<?php
require_once('nusoap/lib/nusoap.php');
$miURL = 'http://pruebas.orlandobrea.com.ar/nusoap_ejXML';
$server = new soap_server();
$server->configureWSDL('ws_orlando', $miURL);
$server->wsdl->schemaTargetNamespace=$miURL;

$server->register('getXML', // Nombre de la funcion
                   array(), // Parametros de entrada
                   array('return' => 'xsd:string'), // Parametros de salida
                   $miURL);
function getXML(){
    return new soapval('return', 'xsd:string', base64_encode('<?xml version="1.0" encoding="UTF-8"?>
<vehiculos>
  <coche>
      <marca>Toyota</marca>
      <modelo>Corolla</modelo>
      <fechaCompra>2002</fechaCompra>
  </coche>
  <coche>
      <marca>Honda</marca>
      <modelo>Civic</modelo>
      <fechaCompra>2003</fechaCompra>
  </coche'));
}

$server->service($HTTP_RAW_POST_DATA);
?>

En el ejemplo el XML es fijo y esta incorporado a la función del web services, en la vida real, el código XML lo generaremos a partir de algunos datos dinámicos o en como necesitemos.

Cliente

El cliente es casi el mismo que en los ejemplos iniciales que he dado en mi blog, salvo que antes de mostrar/procesar la respuesta, se debe transformar de base64 a texto normal, algo así como “descodificarla”. Para esto PHP también nos provee de una función base64_decode.

<?php
require_once('nusoap/lib/nusoap.php');
// Crear un cliente apuntando al script del servidor (Creado con WSDL)
$serverURL = 'http://pruebas.orlandobrea.com.ar';
$serverScript = 'nusoap_server_ejXML.php';
$metodoALlamar = 'getXML';

$cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl');
// Se pudo conectar?
$error = $cliente->getError();
if ($error) {
    echo '<pre style="color: red">' . $error . '</pre>';
    echo '<p style="color:red;'>htmlspecialchars($cliente->getDebug(), ENT_QUOTES).'</p>';
    die();
}

// 1. Llamar a la funcion getRespuesta del servidor
$result = $cliente->call(
    "$metodoALlamar",                     // Funcion a llamar
    array(),    // Parametros pasados a la funcion
    "uri:$serverURL/$serverScript",                   // namespace
    "uri:$serverURL/$serverScript/$metodoALlamar"       // SOAPAction
);
// Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
if ($cliente->fault) {
    echo '<b>Error: ';
    print_r($result);
    echo '</b>';
} else {
    $error = $cliente->getError();
    if ($error) {
        echo '<b style="color: red">-Error: ' . $error . '</b>';
    } else {
        echo base64_decode($result);


    }
}

?>

En el ejemplo, solo muestro la respuesta que me ofreció el servidor del servicio web, cuando estemos ante una implementación real, seguramente deberemos procesar esta información para ofrecer, por ejemplo, una respuesta a un usuario.

Conclusión

Como hemos podido ver, la implementación de este tipo de alternativas, es muy sencilla, solo debemos tener especial cuidado en la codificación de la respuesta que utilizamos en NuSOAP. A modo de “regla” podría decir que todo aquello que sabemos que utilizará caracteres extraños, podemos codificarlo en base 64 en el servidor, y luego decodificarlo en el cliente (de esta forma nos aseguramos que la información ha viajado correctamente).

Debo reconocer que hace tiempo que no indago el código de NuSOAP, por lo tanto no recuerdo si codifica de alguna forma las respuestas automáticamente (que yo recuerde, no lo hace).

Espero que haya sido de utilidad, y que sirva para que sigan explorando con los Web Services.

Saludos a todos los seguidores, y gracias!

3 may 2010

WebServices con NuSOAP en PHP - Ejemplo 4 - Vista

Bueno, estoy volviendo al blog de a poco, es por eso que estoy publicando la 4 parte de los ejemplos de web services con NuSOAP. En esta oportunidad voy a poner un simple ejemplo de cliente/servidor en el cual el cliente muestra la información enviada por el servidor.

Si bien el código es muy sencillo, y parecido a los ejemplos anteriores, puede ser un poco más complejo de seguir, ya que hay una parte de visualización de los datos obtenidos desde el servidor (a diferencia de los ejemplos anteriores).

Es importante aclarar que esta forma de desarrollo no es la más aconsejable para un desarrollo real, ya que la vista esta muy ligada al código de conexión. Todo mejoraría un poco más utilizando algún sistema de templates, como smarty, twig, etc.

¿Como funciona el ejemplo?
El cliente llama a listarClientes en el servidor, y muestra el resultado retornado en una tabla. Cuando el usuario hace click para ver los datos de un determinado cliente, el cliente (PHP) llama a getCliente, que retorna todos los datos del cliente. Luego, muestra todos los datos obtenidos del servidor al usuario.

Comencemos por el servidor

<?php

require_once('nusoap/lib/nusoap.php');
require_once('cliente.php');
require_once('clienteDAO.php');
require_once('soporte_obrea.php');

$miURL = 'http://pruebas.orlandobrea.com.ar/nusoap';
$server = new soap_server();
$server->configureWSDL('ws_orlando', $miURL);
$server->wsdl->schemaTargetNamespace=$miURL;

$soporteWS = new SoporteWS(); // Creo una instancia del objeto propio (SoporteWS)

// ---------------- Funciones usadas por el WS
function getCliente($id) {
    global $soporteWS;
    $dao = new ClienteDAO();
    $cliente = $dao->getCliente($id);
    $respuesta = $soporteWS->convertirAVectorParaWS($cliente);
    return new soapval('return', 'tns:Cliente', $respuesta);
}
function listarClientes() {
    $dao = new ClienteDAO();
    $listado = $dao->getList();
    $objSoporte = new SoporteWS();
    $respuesta = $objSoporte->convertirAVectorParaWS($listado);                 
    return new soapval('return', 'tns:listadoClientes', $respuesta);
}

// --------------- Definicion de las funciones y estructuras expuestas en el WS
$server->wsdl->addComplexType('Cliente',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'id' => array('name' => 'id', 'type' => 'xsd:int'),
        'nombre' => array('name' => 'nombre',    'type' => 'xsd:string'),
        'apellido' => array('name' => 'apellido', 'type' => 'xsd:string'),
        'cuit' => array('name' => 'CUIT',    'type' => 'xsd:string')
    )
);
$server->wsdl->addComplexType('listadoClientes',
    'complexType',
    'array',
    '',
    '',
    array (array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Cliente[]'))
);

$server->register('getCliente', // Nombre de la funcion
                   array('id' => 'xsd:int'), // Parametros de entrada
                   array('return' => 'tns:Cliente'), // Parametros de salida
                   $miURL
                 );
$server->register('listarClientes', // Nombre de la funcion
                   array(), // Parametros de entrada
                   array('return' => 'tns:listadoClientes'), // Parametros de salida
                   $miURL
                 );

$server->service($HTTP_RAW_POST_DATA);
?>


El servidor es muy similar a los anteriores, expone solo dos métodos:

  • listarClientes: retorna una lista con los clientes.
  • getCliente: retorna el cliente cuyo id es recibido como parámetro de llamada.
La definición del objeto, y los métodos de acceso a datos (DAO) están definidos en los archivos que son importados (cliente.php y clienteDAO.php). Recomiendo que te descargues el archivo comprimido con todo los archivos, que se encuentra al final de este tutorial y que prestes atención a estos archivos. Si bien son muy sencillos, te ayudará mucho que vayas realizando pruebas sobre los mismos también para que puedas ver el comportamiento. Si solo te interesa la parte de WS (Web Services), puedes prestar atención solo a los archivos que están publicados.

¿Como es el cliente?
Bueno, el cliente es un poquito más complejo que los anteriores, ya que no solo hace peticiones al servidor, sino que tiene una pequeña interacción y presenta los datos al usuario.


<?php
require_once('nusoap/lib/nusoap.php');
require_once('cliente.php');
require_once('soporte_obrea.php');

// Crear un cliente apuntando al script del servidor (Creado con WSDL)
$serverURL = 'http://pruebas.orlandobrea.com.ar'; // Reemplazar por la URL de tu servidor
$serverScript = 'nusoap_server_ej4_view.php';
$soporteWS = new SoporteWS();

$cliente = new nusoap_client("$serverURL/$serverScript?wsdl", 'wsdl');
// Se pudo conectar?
$error = $cliente->getError();
if ($error) {
    echo '<pre style="color: red">' . $err . '</pre>';
    echo '<p style="color:red;'>htmlspecialchars($client->getDebug(), ENT_QUOTES).'</p>';
    die();
}

$listado = '';
$objCliente = '';
// Existe el parametro "view" en la URL con la cual se esta llamando a este script?
if ($_GET['view']) {
    // Si => debo mostrar los datos del cliente
    $metodoALlamar = 'getCliente';
    $result = $cliente->call(
        $metodoALlamar,                     // Funcion a llamar
        array($_GET['id']),    // Parametros pasados a la funcion
        "uri:$serverURL/$serverScript",                   // namespace
        "uri:$serverURL/$serverScript/$metodoALlamar"       // SOAPAction
    );
    // Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
    if ($cliente->fault) {
        echo '<b>Error: ';
        print_r($result);
        echo '</b>';
    } else {
        $error = $cliente->getError();
        if ($error) {
            echo '<b style="color: red">Error: ' . $error . '</b>';
        } else {
            $objCliente = $soporteWS->convertirDeVectorDesdeWS($result, 'Cliente');
         }
    }
} else { // No fue llamado con el parametro "view" en la URL => debo mostrar el listado de clientes
    $metodoALlamar = 'listarClientes';
    $result = $cliente->call(
        $metodoALlamar,                     // Funcion a llamar
        array(),    // Parametros pasados a la funcion
        "uri:$serverURL/$serverScript",                   // namespace
        "uri:$serverURL/$serverScript/$metodoALlamar"       // SOAPAction
    );
    // Verificacion que los parametros estan ok, y si lo estan. mostrar rta.
    if ($cliente->fault) {
        echo '<b>Error: ';
        print_r($result);
        echo '</b>';
    } else {
        $error = $cliente->getError();
        if ($error) {
            echo '<b style="color: red">Error: ' . $error . '</b>';
        } else {
            $listado = $soporteWS->convertirDeVectorDesdeWS($result, 'Cliente');
         }
    }
}
// De aca en mas es la pagina HTML que muestra el listado de clientes o los datos de un cliente en particular (dependiendo
// si se llamo con view como parametro o no)
?>
<html>
<body>
    <? if ($listado) { ?>
    <!-- Listado de todos los clientes -->
    <h1>Listado</h1>
    <table>
        <tr><td>Nombre</td><td>Apellido</td><td>CUIT</td><td>Acciones</td></tr>
        <?php
            foreach ($listado as $objeto) {
                echo '<tr>';
                echo '<td>'.$objeto->nombre.'</td>';
                echo '<td>'.$objeto->apellido.'</td>';
                echo '<td>'.$objeto->cuit.'</td>';
                echo '<td><a href="nusoap_client_ej4_view.php?view=yes&id='.$objeto->id.'">Ver</a></td>';
                echo '</tr>';
            }
        ?>
    </table>
    <? } else { ?>
    <!-- Datos del cliente seleccionao -->
    <h1>Cliente</h1>
    <?php
        echo '<strong>ID:</strong> '.$objCliente->id.'<br/>';
        echo '<strong>Nombre:</strong> '.$objCliente->nombre.'<br/>';
        echo '<strong>Apellido:</strong> '.$objCliente->apellido.'<br/>';
        echo '<strong>CUIT:</strong> '.$objCliente->cuit.'<br/>';
    ?>
    <? } ?>
</body>
</html>


Como mencione anteriormente, el cliente es un poco más complejo que los anteriores, ya que el mismo script permite ver el listado de clientes, y los datos de un cliente en particular.
Si el script, no recibe parámetros en la URL, muestra el listado de todos los clientes que se encuentran en el sistema (llamando a listarClientes en el WS). En cambio si recibe el parámetro view, y el id del cliente que se desea mostrar, ejecuta otra sección del script, la que muestra los datos del cliente.

La página del listado se ve así












Y luego de hacer click sobre "Ver", nos lleva a la página:











la cual contiene el detalle del cliente seleccionado, en este caso "Blas Pascal". Ambas páginas, se encuentran en el mismo script. Es cuestión de gustos incluir ambas en el mismo script, o utilizar dos scripts diferentes. A los fines de este artículo, me pareció más práctico incluir toda la información del cliente en un único script. Si lo deseas, puedes separar el archivo cliente en dos scripts menores.

Los archivos cliente, y servidor los puedes descargar aquí

Conclusión
Este artículo, es una recopilación de los anteriores, con unos pequeños agregados, como la interacción con el usuario, y la presentación de la información.

Este artículo pretende ser el puntapié inicial para que comiences a explorar tu mismo con los servicios web, ya sean en PHP o cualquier otro lenguaje que te guste. Las posibilidades son infinitas, tu serás el que ponga los limites en que aplicación o módulo utilizarás web services. Ya tienes una base para seguir explorando, ahora depende mucho de ti que practiques y comiences a utilizarlos en tus proyectos.

Debo hacer una aclaración que creo que es importante si aún no has comenzado proyectos con Web services. Al comenzar a utilizar web services, te encontrarás con varios inconvenientes, algunos de la herramienta que utilizamos, y otros propios de la etapa de aprendizaje. Lo importante es saber que el camino puede ser un poco difícil en algunos momentos, pero se puede lograr. Si te quedas atascado, sigue probando, descansa un poco, piensa alternativas, busca las posibles causas, y vuelve a retomar. Por eso es tan importante, que no comiences con un proyecto real, sino que, como todo, comiences sobre un proyecto interno, o de prueba, para ir probando y tener tiempo para encontrar los trucos.

Otro punto importante, los Web Services, tampoco son la bala de plata (Silver bullet), por lo tanto, no intentes utilizarlos para cualquier proyecto, aplica tu criterio para decidir que es lo más conveniente para cada proyecto o módulo que debes realizar.

Espero que haya sido de utilidad, me gustaría conocer tu experiencia, si te ha resultado de utilidad este artículo, y que información más te gustaría encontrar sobre estos temas.

Éxitos y a seguir probando.

14 ene 2010

Nuevo año... nueva persona?

Ya hace un tiempo que no estoy realizando post en mi blog, entre las fiestas y el comienzo de año se hace un poco más difícil retomar las actividades habituales. En este año pienso lograr muchos objetivos, estoy intentando seguir las pautas de Jim Rohn y ya tengo mi lista de objetivos para este año, entre ellos el comenzar nuevamente con actividades físicas. Es por eso que decidí retomar yoga, investigando sobre videos de Yoga, encontre el sitio de www.yoga.org.nz, del cual te puedes descargar videos totalmente gratuitos de Yoga, también puedes comprar el DVD.

¿Por que Yoga?
Porque es una buena actividad para una persona que pasa mucho tiempo delante de una computadora, también para relajarse un poco y olvidarse del stress diario. Si alguna persona que lea este post, aún no lo probo, le sugiero que lo haga, solo le debe dar unas clases para sentirse muchisimo mejor. Que es lo peor que puede pasar? Que te des cuenta que no te gusta? bueno, pero por lo menso fue una nueva experiencia.

En el pie del post, voy a poner nuevamente un enlace al sitio, pero esta vez con el texto que ellos "recomiendan" creo que es lo mínimo que puedo hacer en contrapartida por haber obtenido un material totalmente gratuito y de muy buena calidad.

Bueno, para comenzar les recomiendo el sitio que deje el enlace más arriba. Suerte, y un muy buen comienzo de año para todos. Ya tengo que ponerme en acción nuevamente, tengo que hacer al menos un ejemplo más de WebServices con NuSOAP, pero ahora, mejor me relajo y ohmmmmm.


FREE DVDS Yoga Online
Visit the Yoga.org.nz Online yoga website heaps of cool yoga stuff including a free downloadable Videos and DVDs.