Blog de Israel Viana

Artículos de Marzo de 2009

Arquitectura para una API web en 5 minutos

27 de marzo de 2009 | 1 comentario

Transcribo parte de un hilo en mi foro favorito:

Hola, tengo un sitio en el cual queiro implementar una API para permitir a los sitios que tengan su clave insertar registros en mi base de datos controladamente... algun dato para arrancar?

Tienes que pensar que para cualquier API hay peticiones y respuestas. Las peticiones tienen argumentos y las respuestas, contenido, independientemente de lo que se haga en el servidor, lectura, escritura o baile ;-) Es decir, a nivel de API no hay peticiones de lectura o escritura, eso dependen de la funcionalidad que se implemente. Todas las peticiones HTTP son "iguales" (con muchas comillas).

Ahora bien, para esas cosas hay muchas opciones. Si quieres algo sencillo a la vez que bastante compatible entre plataformas te recomiendo HTTP-GET para las peticiones y HTTP-JSON para las respuestas. Por ejemplo:

http://servidor.com/api/editarCliente.php?clave=xxxx&id=23&nombre=Pepito

Esto sería una petición que, en principio no tendría respuesta con contenido. Es decir, una vez enviada esa petición, se procesa y no hay nada que decir al cliente. O sí... un mensaje de "ok" o "error", aunque sólo sea eso..

Para una petición típicamente de lectura podríamos hacer algo como

http://servidor.com/api/clientesNuevos.php?clave=xxxx&limite=20

Esta petición requeriría los 20 últimos clientes añadidos. El PHP puede ejecutar la consulta, recorrer los resultados y guardarlos en un array. En cuanto tengas el array de resultados, lo único que hay que hacer es:

//Disponible a partir de PHP 5.2
echo $json_encode($my_array);

JSON es un formato de representación de datos compatible con JavaScript y muy usado últimamente. Con estas herramientas podrás implementar APIs de manera rápida y sencilla, a la vez que compatibles con una amplia gama de lenguajes y plataformas. Puedes usarlo también desde tu propia aplicación si deseas una interfaz AJAX, puesto que en JavaScript no necesitas descodificar JSON, ya que es un formato nativo de JavScript, como ya he comentado.


Nuevo por fuera, nuevo por dentro

25 de marzo de 2009 | 2 comentarios

Por culpa de la gripe que me ha mantenido en casa durante este puente (que encima, para mí ha sido de 5 días), aquí tienes el nuevo diseño del blog. Más sencillo, como todo lo bueno, más usable según las recomendaciones oficiales, fácil de leer para navegadores móviles y limitados, y ante todo, hecho por mí. Sin plantillas ni fotos de flipao a lo Enrique Dans. Un diseño centrado en el contenido y lo original que pueda aportar este humilde servidor.

Gracias al patrón Multivista, implementado según el método orientado a objetos que prometo explicar en breve, hay disponibles versiones RDF y RSS de casi todas las secciones. Además, he incluido un pequeño mod para visualizar la web sobre fondo negro, a gusto de los h4ckers del tres al cuarto y los ecologistas radicales, jeje.

Lo dicho, espero que os guste y tanto si es así como si no... comentarios aquí o en el twitter!


NO A LA CENSURA EN INTERNET

21 de marzo de 2009 | 0 comentarios


PHPTAL, un digno competidor de Smarty

21 de marzo de 2009 | 3 comentarios

Hoy he descubierto un sistema de plantillas para PHP que no conocía: PHPTAL. Está basado en TAL (Template Attribute Language), la sintaxis que utiliza ZPT, el sistema de plantillas de Zope, del que ya hemos hablado (si tuviese tiempo para aprender Python, me metería a saco con este maravilloso framework).

Este sistema de plantillas, a diferencia de Smarty (que vengo usando hasta ahora) está orientado a XML-XHTML. Qué mejor que un ejemplo:

Con TAL

<tal:block metal:define-macro="bloc">
 <div class="pagination" tal:condition="php: isset(pagination)">
 <tal:block repeat="item pagination">
  <tal:block condition="php: !empty(item.link)">

   <a tal:attributes="href item/link | ''" tal:content="item/label"/>
  </tal:block>
  <tal:block condition="php: empty(item.link)" content="item/label"/>

 </tal:block>
 </div>
</tal:block>

Con Smarty

<div class="pagination">
{foreach from=$pagination item=page}
 {if $page.lien != ""}
  <a href="{$page.lien}">{$page.label}</a>

 {else}
  {$page.label}
 {/if}
{/foreach}
</div>

A simple vista, se ve la diferencia sintáctica que ya he mencionado: la orientación a XML de TAL no permite generar CSS, por ejemplo, como sí permite Smarty. No obstante, esta limitación puede ser una gran ventaja, ya que con TAL es más fácil generar XHTML válido y trabajar con herramientas de autor (Dreamweaver, etc). Además, ofrece ciertas características de seguridad como validación de contenido inapropiado en los valores (inyección de JavaScript, etc). Y seguramente la sintaxis TAL permita transportar plantillas entre Zope y PHP con facilidad (aún no lo he comprobado in situ). También hay varios motores TAL para Perl, Java y Python (sin Zope), según la documentación de ZPT.

Otra de las ventajas (bueno, subjetivamente) de TAL es su orientación a objetos, bastante limitada en Smarty (por ejemplo, no soporta clases estáticas).

Los defensores de PHPTAL destacan la calidad del compilador en comparación con Smarty, que dicen poco adecuado a las últimas versiones de PHP.

Desde luego PHPTAL se presenta como una alternativa realmente digna, y bastante adecuada a la metodología orientada a objetos que estoy siguiendo en el patrón multivista (prometo publicar la segunda parte en breve). Como contrapartida, el no poder trabajar con documentos no XML. Zope lo soluciona incluyendo otro motor de plantillas llamado DTML, que pese a su sugerente nombre no es orientado a XML/HTML. Aunque personalmente no me parece una solución óptima para muchos proyectos meter un motor de plantillas más para, seguramente, CSS y JavaScript sólamente.


Pensar a lo grande, vivir a lo grande

19 de marzo de 2009 | 2 comentarios

Mucha gente vive año tras año sin un rumbo fijo en su vida. No se plantean objetivos, valores, motivos por los que vivir de la forma más plena que les sea posible.

Napoleon Hill recomienda cuatro líneas guía para trazar unos objetivos vitales y poder seguir ese rumbo a largo plazo:

  1. Los objetivos tienen que ser claros y específicos: qué quieres hacer con tu vida, cuál es tu lugar en el universo, qué piensas hacer con el tiempo que tienes. Es necesario echar a volar, ver la realidad desde un punto de vista más amplio de lo rutinario y tomar decisiones firmes.
  2. Los objetivos no tienen por qué ser realistas o alcanzables: todo es posible, siempre y cuando se sepa cómo hacerlo. Una vez establecidos los objetivos, debe planificarse el modo de alcanzarlos. Si los objetivos resultan abstractos, concretarlos.
  3. Tus objetivos deben ser cortos. Es bueno repetirlos cada mañana.
  4. Tus objetivos deben hacerte sentir bien, ya que sabes qué vas a hacer. Es una actitud de anticiparte al futuro que has elegido.

De la reseña que hacen en Dumb Little Man, me gusta el siguiente párrafo:

Your life is like a ship. Of course, you need a crew, busily working away to keep afloat and keep moving, but even more importantly, you need a map, you need a compass and you need a captain. Without them, your ship just won't get anywhere.

Tu vida es como un barco - por supuesto, necesita una tripulación, trabajando con ahínco para mantener a flote y en movimiento la nave, pero aún más importante, necesitas un mapa, necesitas una brújula y necesitas un capitán. Sin ellos, tu barco simplemente no va a ninguna parte.

¿Y esto, cómo se come desde la fe? Me gusta ya que después de haber leído el texto, uno puede pensar que esta visión de la vida se contradice con una entrega santa a la voluntad de Dios. La metodología planteada (objetivos más o menos fijos, poner cada día tus energías en ellos) puede coincidir o diverger con una visión cristiana del día a día: la vocación a la que estamos llamados, elegida por el Señor marca unos objetivos a gran escala, es más, sería más acertado hablar de "sentido" más que de "objetivos". No obstante, los objetivos pueden ser el sentido de la vida. En la de un cristiano, el objetivo es estar con Dios, y el sentido de la vida apunta hacia Él. La vida eterna, expresión máxima de vida plena en el Señor, supone una superación de cualquier objetivo vital.

Al mismo tiempo que Dios marca el "qué", en líneas generales, marca también el ritmo de la vida, en la medida en que libremente se lo permitamos. Napoleon Hill recomienda recordar y revivir cada día los objetivos marcados, para que éstos inspiren las actividades de la jornada. La Iglesia propone comenzar el día rezando, para que Dios nos inspire el mejor camino para llegar a nuestros objetivos.

Encontremos un punto de convergencia de las dos visiones: dejemos que Dios lleve nuestra vida, dirigiendo nosotros nuestras pocas acciones, pidiendo fuerzas y discernimiento para ver qué y cómo, y esforzarnos, en la medida que esté en nuestra mano, para ser lo más felices posible.


10 consejos para hacer más productiva tu navegación con Firefox

13 de marzo de 2009 | 0 comentarios
  1. No abuses de las extensiones. Elimina todas las que no sean estrictamente necesarias.
  2. Si lees mucho, blogueas o investigas, quizá la extensión Wired Marker te resulte útil.
  3. MeeTimer es una interesante extensión que mide el tiempo que pasas en cada página, clasificándolo en trabajo, ocio, etc.
  4. Un theme chillón o sobrecargado puede desconcentrarte y ralentizar Firefox.
  5. Elimina la barra de Google, la de Yahoo! y cualquier otra que no aporte una funcionalidad que realmente uses. Te quitan espacio en la pantalla para navegar, y no suelen ser muy útiles.
  6. Utiliza los atajos de teclado y ratón: Ctrl+T abre una nueva pestaña, y click central en un enlace lo abre en una pestaña nueva. Los mouse gestures son un gran invento, aunque personalmente no los uso.
  7. Firefox se está volviendo lento y pesado. Quizá puedas prescindir de él. Opera y Chrome son dos excelentes opciones (esta última me gusta por rápida y sencilla), aunque sin la potencia de las extensiones de Firefox.
  8. Hay extensiones y scripts para Greasemonkey que mejoran aplicaciones web como GMail o Netvibes. Por ejemplo: Better GMail o Better Google Reader. Mis aportaciones: un script para maximizar el espacio de Netvibes y otro para hacer más ancho el gestor de tareas Remember The Milk.
  9. Con Menu Editor puedes eliminar todas esas opciones de los menús que no te hacen falta (por ejemplo, en el menú contextual de un enlace no necesitas el menú Abrir en pestaña nueva porque ya sabes cómo hacerlo con un sólo click). Y con CuteMenus puedes ponerle iconos, para facilitar la navegación por los menús.
  10. El plug-in the Foxit Reader para leer PDF es más rápido y ligero que el de Adobe Reader.

¿Algún otro consejo? ¿Te parece Firefox un buen navegador para no perder el tiempo?


israelviana.es es propiedad de Israel Viana, escrito en Murcia (España). Puedes ponerte en contacto conmigo a través de la dirección de e-mail .com.
Información en RDF Metadatos Dublin Core Creative Commons License