<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Maestros del Web &#187; Juan Manuel Lemus</title>
	<atom:link href="http://www.maestrosdelweb.com/author/juan-manuel-lemus/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maestrosdelweb.com</link>
	<description>Un espacio para los entusiastas del web</description>
	<lastBuildDate>Fri, 19 Mar 2010 07:00:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Escribiendo aplicaciones sociales con Google OpenSocial</title>
		<link>http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/</link>
		<comments>http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 18:00:14 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/</guid>
		<description><![CDATA[Una aplicación social es una forma de Google Gadget que contiene el soporte para la API JavaScipt de OpenSocial; que se centra en las personas, permitiendo compartir información personal y de actividades con sus amigos y conocidos.

Siguiendo con nuestra serie de artículos sobre Google OpenSocial la cual inicio con OpenSocial: introducción a la API social [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Una aplicación social es una forma de Google Gadget que contiene el soporte para la API JavaScipt de OpenSocial; que se centra en las personas, permitiendo compartir información personal y de actividades con sus amigos y conocidos.</span></p>
<p><span id="more-4027"></span></p>
<p>Siguiendo con nuestra serie de artículos sobre Google OpenSocial la cual inicio con <a href="http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/">OpenSocial: introducción a la API social de Google</a> y <a href="http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/">Primeros pasos con OpenSocial</a> ahora aprenderemos un poco más sobre las aplicaciones sociales con Google OpenSocial.</p>
<p>Para escribir una aplicación social, es necesario que: tengamos acceso a un contenedor que soporte OpenSocial, como <a href="http://Orkut.com">Orkut.com</a> y un conocimiento básico sobre el modo de desarrollo de un Google Gadget.</p>
<p>Todas las llamadas a la API de OpenSocial son asíncronas y requerirán de un soporte del lado del servidor para recibir y enviar información sobre las consultas.</p>
<h3>Importando la librería OpenSocial:</h3>
<div class="codigo">
<pre>&lt;ModulePrefs title="Title of Your Application"&gt;
  &lt;Require feature="opensocial-0.5"/&gt;
&lt;/ModulePrefs&gt;</pre>
</div>
<p>Agregamos como parámetro <code>FEATURE = “OPENSOCIAL-0.5”</code> a la etiqueta <strong>REQUIRE</strong>. Un ejemplo sencillo: listando amigos.</p>
<p>Para recibir información debemos crear un objeto <strong>DataRequest</strong> mediante la función <code>opensocial.newDataRequest()</code>. Una vez creado utilizamos la función <code>DataRequest.add(request)</code> para definir cada tipo de información que queremos recibir.  </p>
<p>Después de agregar las petición individuales, procedemos a invocar <code>DataRequest.send(callback)</code>. El parámetro de la función indica la función que será ejecutada una vez que se haya recibido la información del servidor. La función toma un parámetro <strong>DataResponse</strong>, que es el resultado de la petición:  </p>
<div class="codigo">
<pre>function onLoadFriends(dataResponse) {     // do something with the dataResponse   }
 /**
  * Request for friend information when the page loads.
  */
  function getData() {
    document.getElementById('message').innerHTML = 'Requesting friends...';
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');
    req.add(req.newFetchPeopleRequest ('VIEWER_FRIENDS'), 'viewerFriends');
    req.send(onLoadFriends);
  };</pre>
</div>
<p>El último parámetro en la función <code>newFetch*Request()</code> es una variable utilizada para recibir la información de la petición.  OpenSocial define los siguientes roles:</p>
<ul>
<li><strong>Viewer: </strong>el usuario autenticado en el navegador.</li>
<li><strong>Owner:</strong> el usuario al que le pertenece el Gadget en cuestión.</li>
<li><strong>Friends:</strong> usuarios a los que el propietario o visor han agregado a la lista de contactos.</li>
</ul>
<p>Ahora, veremos las instrucciones de código dentro de la función <code>onLoadFriends()</code>:</p>
<div class="codigo">
<pre>/**
  * Parses the response to the friend information request and generates
  * html to list the friends by their display name.
  *
  * @param {Object} dataResponse Friend information that was requested.
  */
  function onLoadFriends(dataResponse) {
    var viewer = dataResponse.get('viewer').getData();
    var html = 'Friends of ' + viewer.getDisplayName();
    html += ':&lt;br&gt;&lt;ul&gt;';
    var viewerFriends = dataResponse.get('viewerFriends').getData();
    viewerFriends.each(function(person) {
      html += '&lt;li&gt;' + person.getDisplayName();
    });
    html += '&lt;/ul&gt;';
    document.getElementById('message').innerHTML = html;
  };</pre>
</div>
<p>El parámetro <strong>dataResponse</strong>  pasado en la función contiene la información de la respuesta del servidor.  La función <code>DataResponse.get(key)</code> regresa cada uno  de las peticiones individuales realizadas. El ejemplo completo quedaría de la siguiente manera:</p>
<div class="codigo">
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;Module&gt;
 &lt;ModulePrefs title="List Friends Example"&gt;
   &lt;Require feature="opensocial-0.5"/&gt;
 &lt;/ModulePrefs&gt;
 &lt;Content type="html"&gt;

 &lt;![CDATA[

 &lt;script type="text/javascript"&gt;

 /**
  * Request for friend information when the page loads.
  */
  function getData() {
    document.getElementById('message').innerHTML = 'Requesting friends...';
    var req = opensocial.newDataRequest();
    req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');
    req.add(req.newFetchPeopleRequest ('VIEWER_FRIENDS'), 'viewerFriends');
    req.send(onLoadFriends);
  };

 /**
  * Parses the response to the friend information request and generates
  * html to list the friends along with their display name and picture.
  *
  * @param {Object} dataResponse Friend information that was requested.
  */
  function onLoadFriends(dataResponse) {
    var viewer = dataResponse.get('viewer').getData();
    var html = 'Friends of ' + viewer.getDisplayName();
    html += ':&lt;br&gt;&lt;ul&gt;';
    var viewerFriends = dataResponse.get('viewerFriends').getData();
    viewerFriends.each(function(person) {
      html += '&lt;li&gt;' + person.getDisplayName() + '&lt;/li&gt;';
    });
    html += '&lt;/ul&gt;';
    document.getElementById('message').innerHTML = html;
  };
  _IG_RegisterOnloadHandler(getData);

  &lt;/script&gt;
  &lt;div id="message"&gt; &lt;/div&gt;
  ]]&gt;
  &lt;/Content&gt;
&lt;/Module&gt;</pre>
</div>
<h3>Trabajando con información persistente:</h3>
<p>OpenSocial soporta guardar y obtener información por usuario y por gadget.  La información almacenada siempre será en formato de cadena de texto, que puede ser tratada como una cadena de texto en formato JSON.</p>
<h3>Actividades:</h3>
<p><a href="http://code.google.com/apis/opensocial/">OpenSocial</a> también permite compartir información sobre eventos y actividades.  Esto podría expresearse como un activity stream; un feed en donde cada entrada representa un evento. El uso de OpenSocial abre una nueva gama de aplicaciones de colaboración de usuarios en línea y aumenta las características de las aplicaciones.  </p>
<p>El uso de OpenSocial abre una nueva gama de aplicaciones de colaboración de usuarios en línea y aumenta las características de las aplicaciones.  Esto es solo una pequeñas reseñas del potencial de esta nueva herramienta.  Para mayor información pueden consultar <a href="http://code.google.com/apis/opensocial/">el sitio</a> del proyecto.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Primeros pasos con OpenSocial</title>
		<link>http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/</link>
		<comments>http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 18:16:35 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/</guid>
		<description><![CDATA[OpenSocial es una API sencilla de utilizar, aún en fase de pruebas, pero con un gran potencial de conectar a todos en todas partes. Para entender el impacto de OpenSocial debemos analizar desde el punto de vista de un usuario de Internet.  Qué es lo que realmente quiere una persona “común” cuando usa Internet. [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">OpenSocial es una API sencilla de utilizar, aún en fase de pruebas, pero con un gran potencial de conectar a todos en todas partes. Para entender el impacto de OpenSocial debemos analizar desde el punto de vista de un usuario de Internet.  Qué es lo que realmente quiere una persona “común” cuando usa Internet.  </span></p>
<p><span id="more-4021"></span></p>
<p>Fuera del ámbito de desarrollo podemos afirmar que la gran mayoría de las personas quieren conectarse con otros, crear grupos, compartir aficiones y encontrar información de su interés. El punto de afirmación es el gran éxito de las <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-tanto-saben-las-redes-sociales-de-nosotros/">redes sociales</a>.  La mayoría de personas quiere compartir con sus amigos.  La genialidad de las aplicaciones en estos grupos reside en que tan sencillo y potente me permite conocer lo que quiero saber.</p>
<p>Ahora bien, volviendo al objeto de nuestro estudio, después del repaso del por qué hacer aplicaciones sociales, veamos los cimentos de <a href="http://code.google.com/apis/opensocial/">OpenSocial</a>.  Como comentamos en el <a href="http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/">artículo anterior de la serie</a>, OpenSocial permite el uso de un conjunto de funciones especiales para crear aplicaciones sociales que podrán interoperar con muchos sitios que adopten esta misma API (que son ya varios e importantes, exceptuando <a href="http://www.facebook.com/">FaceBook</a>). </p>
<p>Hay dos maneras de accesar a la API de OpenSocial: utilizando <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript</a> del lado del cliente o <code>RESTful?</code> del lado del servidor.</p>
<h3>JavaSript API:</h3>
<p>La API de JavaScript utiliza <a href="http://code.google.com/apis/opensocial/docs/javascript/reference/">opensocial.*namespaces</a> y permite el acceso a tres principales áreas:</p>
<ul>
<li>Gente: información sobre una determinada persona y sus relaciones con otros.</li>
<li>Actividades: permite publicar y ver actualizaciones de lo que la “gente” esta haciendo.</li>
<li>Persistencia: un simple arreglo asociativo independiente del servidor.</li>
</ul>
<p>Algunas de las ideas del uso de esta serie de funciones son:</p>
<ul>
<li>Construir aplicaciones que no necesiten ser almacenadas en nuestro servidor.</li>
<li>Construir aplicaciones que incluyan componentes almacenados en el servidor para tareas de sincronización.</li>
<li>Crear un nuevo conjunto de aplicaciones con nuevas funcionabilidades para nuestros sitios.</li>
<li>Escribir una aplicación que pueda “correr” en varios sitios.</li>
</ul>
<p>La API OpenSocial para JavaScript está diseñada para utilizar tecnologías estándar basadas en el Web, permitiendo utilizar librerías desarrollas en lenguaje JavaScript estándar.  El paquete incluye un sistema completo de manejo de funciones asíncronas para <a href="http://www.maestrosdelweb.com/editorial/ajax/">AJAX</a>.</p>
<p>El paquete <code>RESTful</code> provee funciones complementarias a las funciones de la API JavaScript.  La herramienta permite entre otras cosas:</p>
<ul>
<li>Interacciones del lado del servidor basadas en el protocolo <a href="http://www.ietf.org/rfc/rfc4287.txt">RESTful AtomPub</a>.</li>
<li>Auntenticación vía <a href="http://oauth.net/core/1.0/">OAuth</a> </li>
</ul>
<h3>Usando la API de OpenSocial:</h3>
<p>Otras consideraciones adicionales son listadas en la página del <a href="http://code.google.com/apis/opensocial/">proyecto OpenSocial</a>.  Entre las más importantes destacan:</p>
<ul>
<li>Las aplicaciones son diseñadas de la misma manera de los Google Gadgets; mediante el edtior de texto favorito o utilizando Google Gadget Editor.</li>
<li>OpenSocial utiliza JavaScript, <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML </a>y <a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a> estándar; no es necesario el uso de plug-ins.</li>
<li>Nuestras aplicaciones pueden ser almacenadas en los servidores de Google (según determinadas políticas) o en nuestros propios servidores.</li>
<li>Es posible embeber <a href="http://www.maestrosdelweb.com/editorial/flash/">Flash</a> en nuestras aplicaciones sociales.</li>
<li>Para el desarrollo podemos utilizar librerías JavaScript como Dojo, Prototype, JQuery, GWT o la que nosotros consideremos más apropiada. Igualmente, podemos utilizar lenguajes de programación del lado del servidor como <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a>, <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby on Rails</a>, Java, etc.</li>
</ul>
<h3>Primer ejemplo, creando un Google Gadget:</h3>
<p>Como mencionamos anteriormente, las aplicaciones sociales están basadas en la misma tecnología que utilizan los Google Gadgets.  Ahora, veamos el primer ejemplo de como crear un simple Gadget:</p>
<div class="codigo">
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;Module&gt;
  &lt;ModulePrefs title="hello world example" /&gt;
  &lt;Content type="html"&gt;
     &lt;![CDATA[
       Hello, world!
     ]]&gt;

  &lt;/Content&gt;
&lt;/Module&gt;</pre>
</div>
<p>Algunas consideraciones sobre este ejemplo son:</p>
<ul>
<li>Un Google Gadget está desarrollado en lenguaje XML.  La primera línea denota este punto y debe  estar siempre presente en todo documento.</li>
<li>La etiqueta MODULE indica que el archivo contiene un Gadget.</li>
<li>La etiqueta MODULEPREFS contiene información sobre el Gadget como título, descripción, autor, etc.</li>
<li>La línea &lt;CONTENT TYPE = “HTML”&gt; indica que el Gadget contiene información en formato HTML.</li>
<li>Lo siguiente es el cuerpo del Gadget en formato HTML, predefinido con la clausura CDATA utilizada en documentos XML.</li>
</ul>
<p>Para obtener más información sobre Google Gadgets puedes vistar la página del proyecto en <a href=" http://code.google.com/apis/gadgets/docs/gs.html">Google Code</a>. En el <a href="http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/">último artículo</a> de la serie, se tratará exclusivamente de la creación de una aplicación social utilizando Google OpenSocial.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>OpenSocial: introducción a la API social de Google</title>
		<link>http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/</link>
		<comments>http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 16:05:53 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[opensocial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/</guid>
		<description><![CDATA[La tan famosa Web 2.0 se cimenta en la interacción del usuario a la creación de contenidos y servicios que cada vez más; ofrecen a los navegantes poder interactuar con otras personas, compartir aficiones, ideas, deseos e información personal.  La guerra de las redes sociales a tomado un nuevo rumbo; ahora ganará el que [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">La tan famosa <a href="http://www.maestrosdelweb.com/editorial/web2/">Web 2.0</a> se cimenta en la interacción del usuario a la creación de contenidos y servicios que cada vez más; ofrecen a los navegantes poder interactuar con otras personas, compartir aficiones, ideas, deseos e información personal.  La guerra de las redes sociales a tomado un nuevo rumbo; ahora ganará el que sepa compartir.</span><span id="more-3826"></span></p>
<p><img src='http://www.maestrosdelweb.com/images/opensocial.jpg' alt='Open social' style="float:right;padding:5px" />Todos conocemos a más de una red social de gran éxito.  En la actualidad la disputa por el primer lugar está con las <a href="http://www.maestrosdelweb.com/editorial/redessociales/">redes sociales</a> <a href="http://www.facebook.com">FaceBook</a> y <a href="http://MySpace.com">MySpace</a> a la cabeza y Google se ha sumado lanzando <a href="http://code.google.com/apis/opensocial/">OpenSocial</a> que no es una nueva red social, si no una plataforma de desarrollo, que permite a los sitios sociales administrar una API para conocer los perfiles de sus usuarios en otros sitios y <a href="http://www.maestrosdelweb.com/editorial/redessociales/">redes sociales</a>.  </p>
<p>La propuesta parece ser muy original y esta teniendo gran aceptación.  Google OpenSocial fue lanzado el 1 de noviembre de 2007 y desde su comienzo ya contaba con una alianza con los principales sitios sociales ha excepción de FaceBook.</p>
<p>Google OpenSocial provee un set de funciones especiales para el desarrollo de aplicaciones sociales que pueden interactuar en múltiples sitios.  El desarrollo de estar aplicaciones sería sencillo de realizar bajo las tecnologías <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript </a>y <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>.</p>
<p>Google <a href="http://orkut.com">Orkut</a> (una red social iniciada por un empleado de la compañía) ha sido uno de los primeros sitios que permite a los desarrolladores, probar las aplicaciones basadas en OpenSocial.  La iniciativa pretende que las aplicaciones puedan ser almacenadas en los servidores de las redes sociales o en los propios servidores, una idea muy parecida al modo de funcionamiento de las aplicaciones en FaceBook.</p>
<p>Una de las ventajas que señalan los encargados del proyecto en Google, es que OpenSocial es un modelo de programación sencillo que ayudará a los programadores y a los sitios web; por que a los primeros los ayudará a crear aplicaciones que trabajen con cualquier sitio que use la API.  Y a los segundos, les permitirá ofrecer estos servicios a sus usuarios como añadido.</p>
<h3>Algunos aspectos importantes antes de iniciar:</h3>
<p>Las aplicaciones de OpenSocial utilizan la arquitectura de <a href="http://desktop.google.com/plugins/">Google Gadgets</a> pero con el añadido de poder utilizar las funciones específicas para OpenSocial.  Es decir que antes de iniciar a desarrollar con OpenSocial, deberemos investigar como programar bajo Google Gadgets.</p>
<p>Por ende, al igual que Google Gadgets, una aplicación bajo OpenSocial, está desarrollada mediante documentos en formato <a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a> con HTML/JavaScript como parte del cuerpo del documento. Como se comentaba más arriba, uno de los primeros ambientes de desarrollo es Google Orkut.  Una primera idea de la manera en que los desarrolladores podrán probar sus aplicaciones es:</p>
<ul>
<li>Abrir la URL <a href="http://sandbox.orkut.com">sandbox.orkut.com</a></li>
<li>Seleccionar Applications en en panel lateral izquierdo</li>
<li>Pegar la URL de la ubicación del Gadget en la caja de texto Add an application by url</li>
</ul>
<p>Luego de que hemos instalado la aplicación podemos utilizar y testear la aplicación. Una nota importante es que los archivos de nuestro proyecto deberán estar públicos y accesibles mediante una URL.  Podremos instalarlo en un servicio compartido, nuestro servidor o en servicios de alojamiento como <a href="http://pages.google.com/">Google Pages</a>.  </p>
<p>Si hacemos cambios en nuestra aplicación puede que el contenedor de Orkut lo muestre cacheado; por lo que una solución propuesta es que agreguemos una variable en la URL como aleatoria. <a href="http://www.maestrosdelweb.com/editorial/usointernet/">Internet está cambiando</a> el modelo de negocio de muchos sitios y empresas.  En la actualidad, la Web 2.0 demanda un acercamiento entre los usuarios de los servicios y las redes sociales sin duda son la más viva expresión de esta demanda.  </p>
<p>Poco a poco nos acercamos al escenario de un mundo más conectado, mediante Internet.  Con OpenSocial, podemos interactuar desde nuestra red social favorita con nuestros amigos en otro sitio de interés, de una manera más transparente. </p>
<p>Google OpenSocial es un claro competidor del modelo de FaceBook. La pregunta está en que haremos los desarrolladores frente a estar propuestas.  Poder aprovechar el poder de ambas será crucial para poder integrar nuevos servicios a nuestros proyectos. </p>
<h3>Lecturas recomendadas:</h3>
<p>Para avanzar más sobre el tema te invitamos que leas los artículos: <a href="http://www.maestrosdelweb.com/editorial/primeros-pasos-con-opensocial/">Primeros pasos con OpenSocial </a>y <a href="http://www.maestrosdelweb.com/editorial/escribiendo-aplicaciones-sociales-con-google-opensocial/">Escribiendo aplicaciones sociales con Google OpenSocial</a> que es parte de está serie de artículos.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/opensocial-introduccion-a-la-api-social-de-google/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/opensocial.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/opensocial.jpg" medium="image">
			<media:title type="html">Open social</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Hojas de estilo con YAML</title>
		<link>http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/</link>
		<comments>http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/#comments</comments>
		<pubDate>Tue, 25 Dec 2007 07:00:28 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/</guid>
		<description><![CDATA[YAML es un framework de desarrollo para CSS,  el objetivo de utilizar esta herramienta es ayudar a los diseñadores a realizar hojas de estilo de una manera más ágil y estándar para los múltiples navegadores.  YAML combina una serie de características bastantes interesantes que sin duda nos harán más sencillo el trabajo a [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">YAML es un framework de desarrollo para CSS,  el objetivo de utilizar esta herramienta es ayudar a los diseñadores a realizar hojas de estilo de una manera más ágil y estándar para los múltiples navegadores.  YAML combina una serie de características bastantes interesantes que sin duda nos harán más sencillo el trabajo a la hora de diseñar con <a href="http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/">CSS</a>. </span><span id="more-3636"></span></p>
<p>Existen bastantes plataformas de desarrollo para diversas tecnologías.  Los más sonados son los que interactuan del lado del servidor y en el nivel de programación.  Pero <a href="http://www.yaml.org">YAML</a> es digno de mención por que realmente nos facilita la labor de realizar hojas de estilo.  </p>
<p>No debemos confundir el lenguaje de marcado YAML (Yet Another Markup Language) superconjunto de <a href="http://www.yaml.de">JSON con YAML</a> (Yet Another Multicolumn Layout).  Entre las principales características del framework están: </p>
<ul>
<li>Un esquema definido de plantillas que incluye una cabecera, un pie de página y un área para una o más columnas muy propio de las nuevas tendencias de diseño.</li>
<li>Compatibilidad con la mayoría de los navegadores utilizando la plantilla por defecto proporcionada en la distribución.</li>
<li>Esquemas de diseños fijos o fluidos.</li>
</ul>
<p>Lo interesante de esta herramienta es que cuando el diseñador inicia a crear la hoja de estilo lo hace con un esquema ya fijado y con la compatibilidad multinavegador. Esta última característica es muy importante a mi parecer. Posteriormente y con el transcurso del diseño de la plantilla el diseñador puede ir restando elementos innecesarios dentro de la hoja de estilo. Pero es importante resaltar que YAML no es una plantilla prediseñada. </p>
<h3>Estructura del paquete: </h3>
<p>El paquete de distribución incluye la carpeta <strong>YAML/</strong> que contiene los archivos necesarios para trabajar con la herramienta.  Las demás carpetas son <strong>DOCUMENTATION/</strong>, <strong>EXAMPLES/</strong> y <strong>TOOLS/</strong>.  Dentro de la carpeta YAML están las siguientes hojas de estilo. </p>
<ul>
<li><strong>/yaml: </strong>contiene los archivos <code>central_draft.css</code> y <code>markup_draft.css</code>.  Esta carpeta es la carpeta principal del framework.  El primer archivo embebe todos los componentes CSS necesarios para trabajar y el segundo muestra el código fuente de la estructura de YAML.</li>
<li><strong>/yaml/core: </strong>contiene los archivos <code>base.css</code>, <code>iehacks.css</code>, <code>print_base.css</code>, <code>slim_base.css</code>, <code>slim_iehacks.css</code> y <code>slim_print_base.css</code>.  Como su nombre lo indica, estos archivos son los componentes base del framework.  El primer archivo incluye toda la definición CSS para elaborar un diseño a tres columnas.  El segundo (<code>iehacks.css</code>) contiene todos los &#8220;ajustes&#8221; necesarios para la correcta visualización en el navegador Internet Explorer 5 al 7 independientemente del diseño elegido. Y el tercero proporciona soporte para CSS Print.</li>
<li><strong>/yaml/screen:</strong> componentes CSS para el diseño en pantilla.  Incluye los archivos basemod_draft.css y content_default.css.</li>
<li><strong>/yaml/navigation:</strong> componentes para la definición de menús de navegación horizontal y vertical.</li>
<li><strong>/yaml/print:</strong> hojas de estilo con valores por defecto para la definición de la versión imprimible de la página.</li>
<li><strong>/yaml/patches:</strong> mas &#8220;ajustes&#8221; para Internet Explorer.</li>
</ul>
<h3>¿Cómo empezar a utilizar nuestra plantilla? </h3>
<p>Cuando iniciamos el diseño, lo primero que debemos hacer es agregar nuestra plantilla como recurso de hoja de estilo, generalmente utilizando el atributo link. Esta hoja de estilo principal contiene nuestro diseño y la incorporación de las otras hojas de estilo que son parte de YAML mediante la regla <code>@import</code>. </p>
<div class="codigo">
<pre>&lt;head&gt;
      ...
      &lt;link href = "css/layout_3col_standard.css" rel = "stylesheet"
            type = "text/css"/&gt;
...
&lt;/head&gt;
/* import core styles | Basis-Stylesheets */
@import url(../yaml/core/base.css);
/* import screen layout | Screen-Layout einbinden */
@import url(../yaml/navigation/nav_shinybuttons.css);
@import url(screen/basemod.css);
@import url(screen/content.css);
/* import print layout | Druck-Layout einbinden */
@import url(../yaml/print/print_003_draft.css); </pre>
</div>
<h3>Reglas de oro para usar YAML correctamente </h3>
<p>Las siguientes reglas resumen los principios básicos para el buen desarrollo con YAML:</p>
<ul>
<li>YAML no es una plantilla prefabricada.
<li>
<li>YAML está basado en el principio TOP-DOWN (iniciar el desarrollo de la hoja de estilo con definiciones de propiedades estándard para todos los navegadores).</li>
<li>Todas las plantillas YAML necesitan de tres componentes <code>básicos: base.css</code>, <code>iehacks.css</code> y <code>print_base.css</code>.</li>
<li>Se debe separar correctamente los archivos del framework, de los propios de nuestro diseño incluyendo los archivos modificados del framework.</li>
<li>Lee el manual de documentación de YAML antes de iniciar el desarrollo con la herramienta.</li>
</ul>
<h3>El YAML Builder</h3>
<p>Adicionalmente en el sitio del proyecto hay un enlace al <a href="http://builder.yaml.de">YAML Builder</a>. Esta aplicación web nos permite definir plantillas en tiempo real y de una manera más gráfica simplificando aún más el proceso de desarrollo de la hoja de estilo. Luego que hemos terminado nos permite obtener una copia de la plantilla lista para poder ser utilizada. </p>
<h3>Conclusiones </h3>
<p>La idea de utilizar frameworks es debido a la necesidad de agilizar los tiempos de desarrollo de las herramientas.  YAML es una muy buena propuesta; útil para aquellos desarrolladores CSS.  </p>
<p>La herramienta permite realizar nuestras hojas de estilo de una manera más sencilla, rápida y elegante, combinando propiedades generales y un buen soporte para los navegadores con lo cual no tendremos que ser nosotros los que nos preocupemos por esos detalles que antes nos consumían tanto tiempo valioso. </p>
<p>Les invito a probar por ustedes mismo la herramienta.  Para mayor información sobre el proyecto pueden dirigirse a la <a href="http://www.yaml.de">página web</a> en donde encontrarán el manual de documentación, los archivos del framework y el vínculo al YAML Builder.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/hojas-de-estilo-con-yaml/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>CSS 3: las nuevas propiedades</title>
		<link>http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/</link>
		<comments>http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/#comments</comments>
		<pubDate>Thu, 20 Dec 2007 07:00:04 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/</guid>
		<description><![CDATA[Las posibilidades que permitirá la nueva versión de CSS tiene el potencial de cautivar a más de un desarrollador.  En el siguiente artículo veremos una lista de estas nuevas propiedades, ejemplos de su funcionamiento y algunas ideas prácticas de como utilizarlas en nuestros proyectos, cuando vea la luz. 
En el artículo sobre CSS 3: [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Las posibilidades que permitirá la nueva versión de CSS tiene el potencial de cautivar a más de un desarrollador.  En el siguiente artículo veremos una lista de estas nuevas propiedades, ejemplos de su funcionamiento y algunas ideas prácticas de como utilizarlas en nuestros proyectos, cuando vea la luz. </span><span id="more-3635"></span></p>
<p>En el artículo sobre <a href="http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/">CSS 3: más social que nunca</a>, hablé sobre las novedades a grandes rasgos del nuevo CSS 3, ahora trataré de detallarlas un poco más con ejemplos de código. Las nuevas propiedades han sido agrupadas en varios módulos según sus prestaciones. La siguiente lista de nuevas propiedades ha sido extraída de <a href="http://www.css3.com">CSS3</a>.: </p>
<h3>Nuevas propiedades</h3>
<ul>
<li><strong>Bordes:</strong> border-color,  border-image, border-radius, box-shadow.</li>
<li><strong>Backgrounds:</strong> background-origin, background-clip, background-size, layering multiple background images.</li>
<li><strong>Color:</strong> HSL colors, HSLA colors, RGBA colors opacity.</li>
<li><strong>Texto:</strong> text-shadow, text-overflow.</li>
<li><strong>Interface:</strong> box-sizing, resize.</li>
<li><strong>Selectores:</strong> attribute selectors.</li>
<li><strong>Formatos:</strong> media queries, multiple column layout, speech.</li>
</ul>
<h3>Backgrounds y Borders: </h3>
<p>Entre las principales características destacan que se podrá agregar múltiples background a un objeto, los borders podrán ser redondos con posibilidad de indicar el radio de curvatura. </p>
<p><strong>HTML:</strong> </p>
<div class="codigo">
<pre>&lt;div class="vcard" vcard"&gt;
      &lt;div class="addr-bl" bl"&gt;
            &lt;div class="addr-tr" tr"&gt;
…
            &lt;/div&gt;
      &lt;/div&gt;
&lt;/div&gt; </pre>
</div>
<p><strong>CSS: </strong></p>
<div class="codigo">
<pre>.vcard {
      background-color: #000;
      background-image:
      url(a-grad.gif),
      url(a-bl.gif),
      url(a-tr.gif);
      background-repeat:
      repeat-x,
      no-repeat,
      no-repeat;
      background-position:
      0 0,
      100% 0,
      100%;
}
</pre>
</div>
<p>Pueden darse cuenta que en este caso, los múltiples background son agregadas mediante coma ( , ).  El nivel de precedencia es de menos a más, es decir, el que está de último es el background de encima. </p>
<h3>Multi-column Layout </h3>
<p>Ahora será más sencillo crear diseños con múltiples columnas sin etiquetas adicionales.  Esta característica me ha parecido extraordinaria y muy útil. En el primer ejemplo, vemos la implementación de esta opción en la versión actual de <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a>.  Para este caso, debemos crear dos clases CSS y dos objetos DIV para simular la multi-columna. </p>
<div class="codigo">
<pre>&lt;div class="entry-content" content"&gt;
      &lt;div class="col first"&gt;
…
     &lt;/div&gt;
      &lt;div class="col"&gt;
…
      &lt;/div&gt;
&lt;/div&gt; 

.entry-content .col {
      float: left;
      width: 467px;
      margin-left: 30px;
} 

.entry-content .first {
      margin-left: 0;
} </pre>
</div>
<p>Y en CSS 3 la definición es más sencilla y requiere menos procesamiento </p>
<div class="codigo">
<pre>&lt;div class="entry-content" content"&gt;
…
&lt;/div&gt; 

.entry-content {
      column-count: 2;
      column-gap: 30px;
} </pre>
</div>
<h3>Advanced Layout:</h3>
<p>Esta nueva característica permitirá organizar los elementos en pantalla de una mejor manera y combinarlos de diferentes maneras sin etiquetas adicionales. </p>
<h3>Grid Positioning: </h3>
<p>Dará la posibilidad que agregar reglas con cuadrículas invisibles para maquetar páginas con un aspecto como libro o revista y jugar con el tamaño y las propiedades de los objetos para hacer que los elementos &#8220;floten&#8221; entre las posiciones. </p>
<div class="codigo">
<pre>
&lt;div class="entry-content"&gt;

      &lt;h2&gt;What is Sushi?&lt;/h2&gt;
…
            &lt;img src="sushi.jpg" class="photo" alt="" /&gt;
… 

&lt;/div&gt;
.entry-content {
      grid-columns:
            (30px * *)[4];
      grid-rows:
            9em 33.3% *;
      column-count: 4;
      column-gap: 30px;
} 

.entry-content h2 {
      float: page top left;
      width: 6gr;
      height: 1gr;
      margin-left: -30px;
} 

.entry-content img.photo {
      float: page bottom left;
      float-offset: 4gr 1gr;
} </pre>
</div>
<p>La respuesta a la pregunta de que si el ejemplo anterior es bastante confuso de entender a simple vista es, sí.  En palabras en un poco confuso explicarlo, pero el ejemplo anterior muestra un diseño con cuatro columnas, una foto en medio de la columna 2 y 3 y un titulo de página, todo al más puro estilo de una revista.  Así que ya no hay excusas que poner cuando el diseñador nos proponga hacer algo así en <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>. </p>
<h3>Selectors: </h3>
<p>El concepto de selector es un poco complicado de explicar, y todo debido a que este tipo de propiedades son muy poco utilizadas.  Algunos ejemplos de selector que si utilizamos son: <code>:hover</code> y <code>:visited</code> (los selector de hipervínculos).   Este tipo de selector podrían ser utilizados en otros elementos y de hecho así puede ser, a excepción del navegador Internet Explorer que no los soporta. Los nuevos selector serían: </p>
<ul>
<li><strong>E:only-of-type:</strong>  un elemento que es único en su tipo.</li>
<li><strong>E:not(s):</strong> un elemento que no coincide con los selector simples.</li>
<li><strong>E ~ F:</strong>  un elemento F precedido de un elemento E.</li>
<li><strong>E:nth-child:</strong>  un objeto que es el enésimo hijo del nodo padre.</li>
<li><strong>E:nth-last-child:</strong> un objeto que es el último hijo del nodo padre.</li>
<li><strong>E:nth-of-type:</strong> un elemento que es el enésimo nodo hijo de otro elemento.</li>
<li><strong>E.first-of-type:</strong> el primer elemento de un tipo. </li>
</ul>
<p>Las posibilidades para el uso de selector son realmente muchas. Ahora faltará que la nueva versión de CSS 3 este lista para poder empezar a utilizarla en nuevos desarrollos. </p>
<h3>Lecturas recomendadas: </h3>
<ul>
<li><a href="http://www.css3.com">css3.com</a></li>
<li><a href="http://www.creatingsexystylesheets.com">creatingsexystylesheets.com</a></li>
<li><a href="http://www.alistapart.com">alistapart.com</a></li>
<li><a href="http://www.trascendingcss.com/support">trascendingcss.com</a></li>
</ul>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/css-3-las-nuevas-propiedades/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>CSS 3: más social que nunca</title>
		<link>http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/</link>
		<comments>http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 07:00:33 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/</guid>
		<description><![CDATA[Después de varios años trabajando con la especificación de CSS 2, la Web se prepara para un cambio en el modo de trabajar con hojas de estilo.  Esta nueva versión viene cargada con grandes novedades y más social que nunca. 
CSS 3 ofrecerá grandes cambios y características largamente esperadas por nosotros los webmasters.  [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Después de varios años trabajando con la especificación de CSS 2, la Web se prepara para un cambio en el modo de trabajar con hojas de estilo.  Esta nueva versión viene cargada con grandes novedades y más social que nunca. </span><span id="more-3555"></span></p>
<p>CSS 3 ofrecerá grandes cambios y características largamente esperadas por nosotros los webmasters.  Lo veremos por todos lados y no viene solo; viene acompañado de HTML 5 y XHTML 2. Los cambios en estas tecnologías obedecen al fenómeno de la <a href="http://www.maestrosdelweb.com/editorial/web2/">Web 2.0</a> y a las recomendaciones del creador de la World Wide Web, <a href="http://www.maestrosdelweb.com/actualidad/tim-berners-lee-hablando-del-social-graph/">Tim Berners Lee</a> de llevar a la Web a la máxima expresión del concepto de <a href="http://www.maestrosdelweb.com/editorial/web-semantica-y-sus-principales-caracteristicas/">semántica</a>. </p>
<h3>Las ventajas de CSS 3:</h3>
<p>CSS 2 fue lanzado en 1997 y después de 10 años y alguna que otra actualización, el modelo y propiedades necesita un lavado de cara para obedecer a las demandas del medio.  A pesar de eso, realmente debemos mencionar que aún conserva muchas ventajas.   </p>
<p>Las ventajas principales en esta nueva versión son la inclusión de nuevas propiedades especialmente en cuanto al aspecto gráfico (recordemos que <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> también es utilizado para describir estilos para medios de audio) aunque se prevean mejores sustanciales en otros medios como el de sonido.  </p>
<p>La actualización incluirá los tan esperados bordes redondeados, textos con sombras,  la capacidad de asignar múltiples fondos, un mejor manejo de tablas incluyendo el estilo zebra, multi-columnas, etc. El modelo conservará muchas de las actuales propiedades y trabajará con nuevos selectores.  </p>
<p>También se habla del hecho de que con estas nuevas propiedades la carga de la página deberá descender pues el hecho de que muchos de los efectos estén ahora bajo control del <a href="http://www.maestrosdelweb.com/editorial/%C2%BFcomo-elegir-un-navegador-web/">navegador</a> hará que los recursos visuales e imágenes que ahora empleamos ya no tengan razón de seguir siendo utilizados. </p>
<h3>Capacidades visuales avanzadas:</h3>
<p>CSS 3 contiene varias mejoras en cuanto a interfaz gráfica, posicionamiento y tamaño de los objetos, usando condiciones de alineación para cada uno.  El objetivo es que sea más sencillo posicionar los controles dentro de la página y que cuenten con otras características como desplazamiento. </p>
<h3>Hojas de Estilo Aural:</h3>
<p>Pretende utilizar las opciones de ciertos dispositivos con capacidades de reproducción de sonido.  El módulo de audio podría agregar sonidos de fondo o efectos de transición que se activarían mediante determinado evento.  Otras propiedades permitan controlar la posición del sonido que se está reproduciendo, etc. </p>
<h3>Bordes y Fondos: </h3>
<p>Las nuevas capacidades de CSS 3 permitirían entre otras cosas usar imágenes para los bordes, redondear y/o agregar sombras. Posicionamiento de elementos en pantalla:  se podrá controlar de mejor manera los objetos y su dirección (horizontal o vertical).  </p>
<p>Además, se quiere incluir el módulo de paginación para crear pies de página, referencias cruzadas y construir cabeceras para títulos de secciones.  También se desea introducir una nueva propiedad para dividir secciones en columnas. </p>
<h3>Fuentes: </h3>
<p>Nuevas funciones sobre todo encaminadas a brindar un mejor soporte a múltiples lenguajes.  Se pretende volver a incluir el <code>@font-face</code> para utilizar fuentes externas. </p>
<p>Otros cambios sustanciales serían un mejor modelo para trabajar CSS con <a href="http://www.maestrosdelweb.com/editorial/dom/">DOM</a> incluyendo la posibilidad de cambiar valores a las propiedades, uso de <strong>NAMESPACES</strong> como <a href="http://www.maestrosdelweb.com/editorial/desarrollo-web/xml/">XML</a> y la inclusión de un mejor soporte para manejo de expresiones matemáticas. </p>
<h3>Roadmap de soporte de CSS 3 para los navegadores </h3>
<p>Lo que deberemos tomar en cuenta es que antes de saltar a empezar a migrar nuestro sitio a la versión CSS 3 la mayoría de los navegadores ya hayan implementado parte de estas nuevas especificaciones.   </p>
<p>Actualmente el desarrollo va con el navegador <a href="http://www.maestrosdelweb.com/actualidad/2228/">Opera</a> a la cabeza seguido de WebKit.  Opera 9.x incluso ya viene con soporte para los nuevas etiquetas de HTML 5. <a href="http://www.Mozilla.com">Mozilla</a> y <a href="http://www.maestrosdelweb.com/editorial/microsoft/">Microsoft</a> aún no han presentado mayores cambios en sus exploradores <a href="http://www.maestrosdelweb.com/editorial/firefox/">Firefox</a> e Internet Explorer, respectivamente.   </p>
<p>Por otro lugar el equipo de desarrollo de WebKit (donde podemos incluir a Konqueror y Safari) estado trabajando en dar soporte a estas nuevas propiedades.   Los cambios también incluyen el regreso de la propiedad <code>@font-face</code> que permite la carga de un recurso tipográfico (es decir una fuente TTF) como de una imagen se tratase.  </p>
<p>Esta propiedad fue incluida en la especificación de CSS 2.0 y eliminada de la lista bajo la excusa de no ser utilizada.  Los primeros en brindar el soporte a esta propiedad es el equipo de WebKit mediante un plugin. </p>
<h3>Qué esperar con CSS 3</h3>
<p>Esperamos que en el 2008 la mayoría de navegadores incluyan dentro de alguna actualización el soporte nativo para CSS 3 y las nuevas versiones de <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> y <a href="http://www.maestrosdelweb.com/editorial/haciaxhtml/">XHTML</a>. Por lo pronto, debemos de esperar un poco más, leyendo uno que otro documento que sale al respecto para prepararnos por que la salida de esas nuevas versiones esta mas cerca cada día. </p>
<p>El tema sobre CSS 3 es más extenso, así que hemos preparado varios artículos que te guiarán paso a paso sobre sus propiedades y aprovechamiento. Además, un ejemplo sobre una futura implementación dentro de hojas de estilo CSS 3.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/css-3-mas-social-que-nunca/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Maquetando con hojas de estilo</title>
		<link>http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/</link>
		<comments>http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 07:00:31 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Maquetación]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/</guid>
		<description><![CDATA[En la actualidad se ha vuelto muy famoso el concepto de separación de estructura y diseño (HTML de CSS). Hasta que punto debe ser llevado este modo de estructurar un sitio y que ventajas ofrece son solo algunas de las preguntas que trataremos de resolver en este artículo. 
CSS nació de la propuesta de dividir [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">En la actualidad se ha vuelto muy famoso el concepto de separación de estructura y diseño (HTML de CSS). Hasta que punto debe ser llevado este modo de estructurar un sitio y que ventajas ofrece son solo algunas de las preguntas que trataremos de resolver en este artículo. </span><span id="more-3493"></span></p>
<p><a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> nació de la propuesta de dividir la estructura del documento de su diseño.  La problemática que se venía dando en el viejo orden era que los documentos eran muy difíciles de mantener.  Si por ejemplo, suponemos un sitio con alrededor de 100 o más documentos el cambiar el diseño a cada uno era muy laborioso.</p>
<p>De esto ha pasado algún tiempo y las exigencias han cambiado.  El uso de CSS se ha hecho más cotidiano tanto que ya es un estándar.  Como en todo desarrollo, cuando separamos componentes estamos ahorrándonos tiempo y esfuerzo.  CSS es ideal para todos los proyectos no importando su tamaño.</p>
<h3>Clases y valores por defecto:</h3>
<p>Hace algún tiempo leí acerca de este tema en el sitio de Shapead y me llamó la atención tanto, que preparé la traducción.  A manera general el tema mostraba las razones para definir valores por defecto para la hoja de estilo que estamos utilizando.  </p>
<p>Como muchos sabemos existe un gran variedad de navegadores en el mercado y cada uno trabaja de manera distinta.  Aparte de que cada navegador tiene características particulares, trae consigo distintos valores por defecto para los documentos.  </p>
<p>La gran ventaja de utilizar esta técnica es que nos permite llevar el desarrollo de nuestra plantilla de una manera más estándar.  Por ejemplo, es recomendable definir los valores por defecto de los márgenes y de las sangrías, el tipo de letra, el interlineado, etc. Para que todos los navegadores muestren en la misma posición los elementos en pantalla.</p>
<p>Además es un técnica interesante el ir creando clases generales con nombres característicos que establezcan valores como el texto de decoración de la letra, el espaciado, etc. Con lo cual nos evitamos ir definiendo mismas propiedades para elementos distintos.</p>
<p>También, podemos definir y reutilizar valores de clases para ir creando los estilos en una especie de propiedades con herencia y que conforme vaya especializándose el diseño para un objeto; se vaya añadiendo propiedades específicas para el mismo.</p>
<h3>Técnicas para modelar la hoja de estilos:</h3>
<p>Es gracioso que cada webmaster tenga un modo particular de modelar su hoja de estilos.  Existen varios puntos a cubrir como:</p>
<p><strong>El orden en que se escriben las clases  y propiedades:</strong> una de las técnicas más populares es ir dividiendo por secciones a la vez de ir comentando ciertos puntos y clases dentro del CSS.  También podemos encontrar el caso de ordenar las clases por tipo y alfabéticamente (tanto nombres de clases como propiedades).</p>
<p>Crear un archivo CSS aparte por cada navegador con ajustes a las clases CSS que definitivamente no pudieron estandarizarse o utilizar los famosos hacks por navegador (una medida algo desesperada; aunque divertida).<br />
<strong><br />
Los nombres de las clases:</strong> casi todos coinciden en que es importante que los nombres de las clases sean descriptivos y que denoten incluso el ámbito en el que actúan en la página.  Una buena técnica podría ser ir definiendo la clase de lo general a lo específico como: <code>news_title_tiny</code> ó <code>administrator_menu_subitem</code>.</p>
<h3>Hojas de estilo para varios navegadores:</h3>
<p>Al tener tantos navegadores con diferentes características es inevitable que el diseño que estamos realizando no se vea bien en alguno de ellos.  En mi caso; cada vez que voy realizando cambios en la hoja de estilo voy probando continuamente en cada uno de los navegadores como se muestra la página.</p>
<p>Una buena implementación de CSS no contendrá ajustes o hacks.  Aunque muchas veces esto es inevitable, es necesario que conforme nuestra experiencia avanza, vayamos disminuyendo el uso de este tipo de técnicas que muchas veces se salen de los estándares.</p>
<p>Si separamos correctamente <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> de CSS, cuando quitemos la referencia a la hoja de estilo, este deberá verse y leerse de manera vertical sin ningún tipo de diseño.   Esto es una característica que  también nos permitirá aplicar de mejor manera las técnicas SEO.</p>
<h3>Algunas propiedades olvidadas de CSS 2</h3>
<p>Para quienes utilizamos editores con soporte CSS y la característica <strong>Smart Tags</strong> el ver propiedades que nunca utilizamos en la lista seguro que nos intriga.  Por qué será que casi nunca las utilizamos: talvez es desconocimiento o simplemente su uso está fuera de foco.  Para cualquiera de los dos casos aquí preparo una lista de algunos de esos elementos perdidos en CSS 2:</p>
<ul>
<li><strong>azimuth:</strong> indica el ángulo horizontal o lateral del sonido en hojas de estilos Aural.</li>
<li><strong>caption-sice:</strong> al igual que la anterior pertenece al orden de las propiedades para hojas de estilo Aural. Su objetivo es posicionar el elemento caption de una tabla arriba o abajo.</li>
<li><strong>clip:</strong>  esta propiedad me ha llamado mucho la atención. El objetivo de la misma es mostrar una región  de un elemento posicionable (con atributo position: absolute).  En CSS 2 la única forma que admite es un rectángulo pero se tienen planes de extender el soporte a otras formas.  Me ha parecido muy parecida, en cuanto a manejo y comprensión al elemento MAP.</li>
<li><strong>column-span:</strong> el equivalente a COLSPAN para elementos TD.</li>
<li><strong>content:</strong> este atributo es bastante peculiar y definitivamente sale del estándar de separar el contenido del diseño.  Funciona solamente con las seudoclases cue-before y cue-after.  Su objetivo es poder incluir contenido HTML antes o después de la definición del objeto.</li>
<li><strong>direction:</strong> permite definir la posición del texto de un elemento: es decir ya sea de izquierda a derecha o viceversa.  Actualmente no es soportada por ningún navegador.</li>
<li><strong>elevation:</strong> tiene un funcionamiento similar a azimuth.</li>
<li><strong>filter: </strong>para muchos no es una propiedad desconocida.  Es la encargada de aplicar filtros de efectos a los elementos CSS y solo está disponible para Internet Explorer.  Con ella se logra es famoso efecto de transparencia de imágenes PNG en versiones anteriores a Internet Explorer 7.</li>
<li><strong>letter-spacing:</strong> establece un espacio de separación entre letras.</li>
<li><strong>orphans:</strong> indica el número mínimo de línea que debe tener un párrafo que debe ser visible en la parte inferior de la página cuando ocurre el salto de página.  Generalmente utilizado para impresiones.
<li>
<li><strong>page-break-after, page-break-before:</strong> define el comportamiento del contenido para el salto de página cuando el documento es enviado a la impresora.</li>
<li><strong>pause, pitch, play-during, richness, speak, stress y voice-family:</strong> controles del sonido para hojas de estilo tipo Aural.</li>
<li><strong>size:</strong> define el tamaño y la orientación del papel para la impresión.</li>
<li><strong>text-indent:</strong> determina el tamaño de la sangría en la primera línea del párrafo.</li>
<li><strong>widows:</strong> el mismo propósito de orphans, pero en la posición de arriba del elemento.</li>
</ul>
<h3>Conclusiones:</h3>
<p>CSS es muy interesante y posee muchas cualidades.  CSS no es solamente utilizado para hacer el diseño de la página sino también de otros elementos como la versión imprimible y herramientas para voz.  Muchos dicen acerca de la necesidad de diseñar la versión imprimible de la página.  Ahora que vimos los elementos olvidados también podemos incluir la versión escuchada.</p>
<p>CSS está evolucionando y ahora esta próximo el lanzamiento de la tan esperada versión 3 que incluye muchas nuevas características ya solicitadas hace mucho tiempo incluyendo el regreso de <code>@font-face</code> para aquellos amantes de la era <a href="http://www.maestrosdelweb.com/editorial/web2/">Web 2.0</a> y de las tipografías.</p>
<p>NOTA: para quienes no sabíamos que eran las hojas de estilo Aural (así como yo, antes de escribir este artículo), les comento que este tipo de CSS es utilizado cuando la hoja de estilo describe las propiedades del sonido.  Como podemos recordar CSS puede ser utilizado en el medio de Internet, para Impresiones y para describir el comportamiento en medios de reconocimiento de voz y sonidos.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/maquetando-con-hojas-de-estilo/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Smarty: otras alternativas y proyectos similares</title>
		<link>http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 07:00:43 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smartyotras-alternativas-y-proyectos-similares/</guid>
		<description><![CDATA[Existen muchos sistemas de plantillas en todos los lenguajes para desarrollo en Internet. En este artículo veremos algunas alternativas de Smarty para desarrolladores en PHP y proyectos similares para plataformas como Ruby, Java y ASP.Net. 
Concluimos con nuestra serie sobre Smarty en donde hemos abordado los temas sobre, Smarty: razones para utilizar plantillas en mis [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Existen muchos sistemas de plantillas en todos los lenguajes para desarrollo en Internet. En este artículo veremos algunas alternativas de Smarty para desarrolladores en PHP y proyectos similares para plataformas como Ruby, Java y ASP.Net. </span><span id="more-3462"></span></p>
<p>Concluimos con nuestra serie sobre Smarty en donde hemos abordado los temas sobre, <a href="http://www.maestrosdelweb.com/editorial/smarty-plantillas/">Smarty: razones para utilizar plantillas en mis proyectos</a>, <a href="http://www.maestrosdelweb.com/editorial/smarty-instalacion/">Smarty: requerimientos, instalación y aprende a programar</a>, <a href="http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/">Smarty: a nivel avanzado</a> y ahora hablaremos de sus alternativas.</p>
<h3>Sistemas de Plantillas en PHP</h3>
<h3>Savant:</h3>
<p>El proyecto <a href="http://www.phpsavant.com/">Savant</a> es un sistema de plantillas que me ha parecido bastante interesante.  Savant está basado en el paquete PEAR. A diferencia de <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a> el archivo de plantilla no es un archivo con una sintáxis diferente sino otro archivo PHP.  </p>
<p>Una ventaja en cuando a rendimiento, aunque definitivamente  podría generar problemas en especial si lo utilizamos en un proyecto donde el encargado de la integración con <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> no es conocedor de <a href="http://www.maestrosdelweb.com/editorial/phpintro/">lenguaje PHP</a>. </p>
<p>Tiene varias similitudes con Smarty en cuanto a convención de nombre de funciones del objeto y al manejo de concepto de carpeta de plantillas.  El hecho de que la plantilla final sea PHP permite que pueda utilizar las variables y funciones de nuestro script original, pero a mi parecer también genera una gran vulnerabilidad. </p>
<p><strong>Ejemplo: Script PHP</strong> </p>
<div class="codigo">
<pre>&lt;?php
//  this gets the template output from the template search path.
$output = $tpl-&gt;fetch('template.tpl.php');
// this would display another template from a subdirectory
// in the template search path.
$output = $tpl-&gt;fetch('subdir/anotheryawiki_storelate.tpl.php');
// an alternative method: set the default template
// and then return the default script output.
$tpl-&gt;setTemplate('template.tpl.php');
$output = $tpl-&gt;fetch();
?&gt;</pre>
</div>
<p><strong>Plantilla:</strong></p>
<div class="codigo">
<pre>&lt;html&gt;
      &lt;!-- template source --&gt;
      &lt;?php include $this-&gt;loadTemplate('header.tpl.php') ?&gt;
      &lt;h2&gt;Main Content&lt;/h2&gt;
      &lt;p&gt;Your name is &lt;?php echo $this-&gt;name ?&gt;, right?&lt;/p&gt;
      &lt;?php include $this-&gt;loadTemplate('footer.tpl.php') ?&gt;
&lt;/html&gt;</pre>
</div>
<h3>Sistemas de plantillas para Ruby</h3>
<h3>Canny:</h3>
<p>Esta fantástica implementación del motor de plantillas Smarty para lenguaje <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a>. Los desarrolladores del proyecto han cuidado que la aplicación sea igual en cuanto ha implementación de lógica de programación y sobre todo que las plantillas que han sido creadas para Smarty puedan utilizar <a href="http://canny.sourceforge.net/index.shtml">Canny</a> como motor de compilación.  </p>
<p>Aunque hay algunas variantes a nivel de plantilla sobre todo por el manejo que se le da a los tipos de datos. Realmente un gran proyecto. </p>
<p><strong>Ejemplo: Script Ruby</strong> </p>
<div class="codigo">
<pre>#!/usr/bin/env ruby
require "Canny"
# Inicia el objeto Canny y asigna los directorios de plantilla
C = Canny.new
C.template_dir = 'templates'
C.compile_dir  = 'templates_c'
name = 'Canny user'
people = [
          {'name' =&gt; 'John Doe', 'city' =&gt; 'New York', 'zip' =&gt; '10000'},
          {'name' =&gt; 'Jane Doe', 'city' =&gt; 'Los Angeles', 'zip' =&gt; '90000'},
      ]
fruits = ['Apple', 'Orange', 'Banana', 'Strawberry', 'Cherry', 'Lemon', 'Lime']
def my_modifier(str, params=[])
     if params[0] == 'pie'
          str += " Pie"
     elsif params[0] == "smoothie"
          str += " Smoothie"
     else
          str
     end
end
Canny.register_modifier('my_modifier', 'my_modifier')
C.assign('name', name)
C.assign('people', people)
C.assign('fruits', fruits)
C.display('example.tpl')</pre>
</div>
<p><strong>Ejemplo: Plantilla</strong> (prácticamente es la misma sintáxis que Smarty). </p>
<div class="codigo">
<pre>Hello { $name }.
&lt;br /&gt;
&lt;br /&gt;
{ foreach from=$fruits item=fruit }
     { if $fruit == "Apple" or $fruit == "Cherry" }
          { $fruit|my_modifier:"pie" }
     {else}
          { $fruit|my_modifier:"smoothie" }
     {/if}
     &lt;br /&gt;
{/foreach}
{ foreach name=people from=$people item=person }
     { $canny.foreach.people.iterator } { $person.name|upper } lives in { $person.city|upper }.
     &lt;br /&gt;
{/foreach}
&lt;br /&gt;
&lt;br /&gt;
{ include file="example_show_total.tpl" total=$canny.foreach.people.total }</pre>
</div>
<h3>XTemplate:</h3>
<p>Esta es otra alternativa en lenguaje Ruby,  <a href="http://xtemplate.sourceforge.net/index.html">XTemplate</a> es un sistema de plantillas basado en XML. Su funcionamiento en bastante interesante aunque, por lo que he visto en cuanto al modo de funcionamiento y su sintáxis es viable en proyectos robustos y con un grupo de profesionales en manejo de estructuras con XML.   </p>
<p>Los ejemplos que he consultado para hacer esta pequeña reseña no dan muestras de ser un sistema que separe las plantillas en archivos aparte, aunque si es muy seguro que se logre emular esta opción mediante inclusiones de scripts.  </p>
<p><strong>Ejemplo: Ruby</strong></p>
<div class="codigo">
<pre>
require 'xtemplate'
data = {
  'members' =&gt; [
    {"name" =&gt; "name1", "age" =&gt; 20},
    {"name" =&gt; "name2", "age" =&gt; 23},
    {"name" =&gt; "name3", "age" =&gt; 30},
  ],
  'operators' =&gt; [
    {"name" =&gt; "op1", "age" =&gt; 28},
    {"name" =&gt; "op2", "age" =&gt; 32},
    {"name" =&gt; "op3", "age" =&gt; 24},
  ],
} </pre>
</div>
<p><strong>Ejemplo: de la Plantilla </strong>(dentro del mismo script) </p>
<div class="codigo">
<pre>text = &lt;&lt;EOF
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;members xmlns:xt="http://xtemplate.sourceforge.net/xtemplate"&gt;
  &lt;member xt:id="/members{push(stack1)}|/operators{pop(stack1);sort(age)}/name"&gt;
  &lt;/member&gt;
  &lt;xt:value-of id="/members{push(stack2)}" /&gt;
  &lt;xt:value-of id="/members{push(stack2)}" /&gt;
  &lt;member xt:id="/operators{pop_all(stack2)}/name"&gt;
  &lt;/member&gt;
  &lt;xt:value-of id="/members{push(stack3)}" /&gt;
  &lt;xt:value-of id="/members{clear_stack(stack3)}" /&gt;
  &lt;member xt:id="/operators{pop_all(stack3)}/name"&gt;
  &lt;/member&gt;
&lt;/members&gt;
EOF
t = XTemplate::XMLTemplate.new(text)
print(t.expand(data))</pre>
</div>
<p><strong>Ejemplo: salida </strong></p>
<div class="codigo">
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;members&gt;
  &lt;member&gt;name&amp;&lt;/member&gt;
  &lt;member&gt;name&amp;&lt;/member&gt;
  &lt;member&gt;name&amp;&lt;/member&gt;
&lt;/members&gt; </pre>
</div>
<p>En cuanto al manejo de sintáxis lo veo bastante interesante, con fuertes tendencias a la generación de archivos XML o con marcado.  Una característica es que la plantilla puede utilizar marcado XML o YAML (recordemos que Ruby viene con un Parser integrado de YAML).</p>
<h3>Motores de plantillas en lenguaje Java</h3>
<h3>Velocity: </h3>
<p>Proyecto impulsado por The Apache Foundation Software. <a href="http://velocity.apache.org">Velocity</a>  es un sistema basado en Java que permite a los diseñadores importar métodos en lenguaje Java a la plantilla para generar documentos HTML, SQL, PostScripts, etc. </p>
<h3>FreeMaker: </h3>
<p><a href="http://java-source.net/open-source/template-engines/freemarker">FreeMaker</a>, es otro sistema de plantillas para Java que permite generar documentos en formato HTML, RTF, PostScript, TeX, etc) y que permite ser integrado con Java Servlets, XML, Python y otras tecnologías. </p>
<h3>ASP.Net y Joel.Net, plantillas free open-source </h3>
<p>Joel.Net es un sistema bastante interesante de plantillas para ASP.Net.  Actualmente trabaja en VB.Net y C#.  Este software es lanzado bajo licencia JPL.  La instalación del componente es bastante sencilla y muy parecida a la instalación de otros módulos en Visual Studio.Net aunque tambíen puede ser instalado como módulo independiente. </p>
<p><strong>Ejemplo:</strong> </p>
<div class="codigo">
<pre>&lt;!-- template.html --&gt;
&lt;HTML&gt;
  &lt;HEAD&gt;&lt;TITLE&gt;No Title&lt;/TITLE&gt;&lt;/HEAD&gt;
  &lt;BODY bgcolor="#FFFFFF"&gt;
    &lt;TABLE border="0"&gt;
      &lt;TR&gt;
        &lt;TD&gt;&lt;tem:navigation&gt;navigation&lt;/tem:navigation&gt;&lt;/TD&gt;
        &lt;TD&gt;&lt;tem:main /&gt;&lt;/TD&gt;
      &lt;/TR&gt;
      &lt;TR&gt;&lt;TD colspan="2"&gt;
        &lt;tem:footer&gt;Copyright joel.net 2003.&lt;/tem:footer&gt;
      &lt;/TD&gt;&lt;/TR&gt;
    &lt;/TABLE&gt;
    &lt;BR&gt;&lt;BR&gt;
  &lt;/BODY&gt;
&lt;/HTML&gt;
&lt;!-- page.aspx --&gt;
&lt;%@ Register TagPrefix="cc1" NameSpace="template" Assembly="template" %&gt;
&lt;cc1:template id="Template1" runat="server" path="./template.html" /&gt;
&lt;asp:Panel id="tem_main" runat="server"&gt;
  &lt;B&gt;This should go in the main section!&lt;/B&gt;
&lt;/asp:Panel&gt; </pre>
</div>
<h3>Conclusiones </h3>
<p>Hemos visto sólo algunos de la gran diversidad de proyectos similares a Smarty en diversos lenguajes.  La mayoría emplean una sintáxis similar de plantillas y otros como el caso de Java que utiliza XML para definir la plantilla (que en modo particular me a parecido bastante interesante).  </p>
<p>También, vale la pena mencionar a Joel.Net que es un sistema bastante sencillo de utilizar para desarrolladores en ASP.Net y cuyo punto a favor es el ser libre y código abierto. Cada uno de los desarrollos en distinto y las alternativas vistas aquí son válidas. </p>
<p>En modo muy personal optaría por Smarty en desarrollo con PHP pues a demostrado ser un sistema muy bueno y con grandes prestaciones.  Igualmente, su proyecto en Ruby, Canny merece ser considerado para desarrolladores en este lenguaje. </p>
<p>Cada grupo deberá escoger el que más considere adecuado para su proyecto. Incluso, muchos optarán por no utilizar ningún sistema de plantillas. Eso queda muy a discreción del grupo de programadores. Aunque el proyecto sea algo pequeño, siempre es una buena práctica utilizar plantillas para separar la lógica de programación y el diseño. </p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smartyotras-alternativas-y-proyectos-similares/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Smarty: a nivel avanzado</title>
		<link>http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 20:26:32 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smarty-a-nivel-avanzado/</guid>
		<description><![CDATA[Smarty es una herramienta que permite crear plantillas, personalizar, adaptar y distribuir funcionabilidades complejas dentro de un marco de desarrollo limpio.  Smarty cuenta con una sintáxis propia que lo hace muy atractivo de utilizar y sencillo en especial para diseñadores web. 
Siguiendo con nuestra serie de artículos: Smarty: razones para utilizar plantillas en mis [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Smarty es una herramienta que permite crear plantillas, personalizar, adaptar y distribuir funcionabilidades complejas dentro de un marco de desarrollo limpio.  Smarty cuenta con una sintáxis propia que lo hace muy atractivo de utilizar y sencillo en especial para diseñadores web. </span><span id="more-3421"></span></p>
<p>Siguiendo con nuestra serie de artículos: <a href="http://www.maestrosdelweb.com/editorial/smarty-plantillas/">Smarty: razones para utilizar plantillas en mis proyectos</a>, <a href="http://www.maestrosdelweb.com/editorial/smarty-instalacion/">Smarty: requerimientos, instalación y aprende a programar</a>, ahora nos corresponde hablar sobre Smarty pero a nivel avanzado. <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a> cuenta con estructuras de control propias, cuando compilamos nuestra plantilla, verificará que no haya sido procesada antes, haciendo que la carga sea más rápida.</p>
<p>En la carpeta definida para los archivos compilados de las plantillas encontraremos el código <a href="http://www.maestrosdelweb.com/editorial/como-optimizar-tus-aplicaciones-php/">PHP</a>. Lo que demuestra que aunque la plantilla original tenga una sintaxis distinta, el archivo generado y ejecutado es un archivo PHP.  </p>
<h3>Calificadores Smarty </h3>
<p>En todo lenguaje existen los calificadores, que permiten hacer comparaciones entre variables.  Smarty tiene los propios un tanto distintos a los que estamos acostumbrados: </p>
<p><strong>Tabla: </strong>para los operadores lo recomendable es utilizar las alternativas, pero también es permitido utilizar los calificadores originales. Para los operadores <strong>AND / OR</strong> puede utilizarse el operador lógico <strong>(and / or)</strong> o <strong>&#038;&#038; (and) /  | | (or)</strong>. </p>
<h3>Estructuras de control en Smarty </h3>
<div class="codigo">
<pre>Sentencia IF:
{if $name eq "Fred"}
      Welcome Sir.
{elseif $name eq "Wilma" or $name eq "Vilma"}
      Welcome Ma'am.
{else}
      Welcome, whatever you are.
{/if} </pre>
</div>
<h3>Sentencia SECTION: </h3>
<p>Las <strong>section</strong> del template son usadas para realizar un ciclo <code>(loop)</code> de un arreglo de datos. Todas las etiquetas <code>{section}</code> deben tener su par <code>{/section}</code>. Los parámetros requeridos son <code>name y loop</code>. El nombre de la <strong>section</strong> puede ser el que usted quiera, formado por letras, números y subrayados. </p>
<p>Las <strong>sections</strong> pueden ser anidadas pero diferenciando unas de otras. Las variables del <strong>loop</strong> (normalmente una matriz de valores) determina el número de veces del <code>loop</code> de la <strong>section</strong>. </p>
<p>Cuando estuviera mostrando una variable dentro de una section, el nombre de la <strong>section</strong> debe estar al lado de la variable dentro de corchetes <strong>[]</strong>. <code>sectionelse</code> es ejecutado cuando no hubiera valores para la variable del <code>loop(ciclo)</code>. </p>
<div class="codigo">
<pre>&lt;?php
      $data = array(1000,1001,1002);
      $smarty-&gt;assign('custid',$data);
?&gt;
{* este ejemplo imprime todos los valores del arreglo *}
{section name = customer loop = $custid}
      id: {$custid[customer]} &lt;br /&gt;
{/section}
&lt;hr /&gt;
{* imprime todos los valores del arreglo en orden descendente *}
{section name=foo loop=$custid step=-1}
      {$custid[foo]} &lt;br /&gt;
{sectionelse}
      no hay valores en la variable
{/section} </pre>
</div>
<p>También, puede hacerse un ciclo sin un arreglo para tratar. Este ejemplo iniciará el contador en 10 e irá de 2 en 2 hasta el número 20: </p>
<div class="codigo">
<pre>{section name = foo start = 10 loop = 20 step = 2}
      {$smarty.section.foo.index}
{/section} </pre>
</div>
<h3>Sentencia FOREACH: </h3>
<p>Los ciclos <strong>foreach</strong> son una alternativa para <code>loop {section}</code>. Foreach es usado para pegar cada elemento de una matriz asociativa simple. La sintaxis para <code>foreach</code> es mucho más simple que <code>section</code>, pero tiene la desventaja de que solo puede ser usada en una única matriz, la etiqueta <code>{foreach}</code> debe tener su par <code>{/foreach}</code>. </p>
<p>Los parámetros requeridos son <strong>from e item</strong>, el nombre del ciclo <code>foreach</code> puede ser cualquier cosa que usted quiera, hecho de letras, números y subrayados. Los ciclos  <code>foreach</code> pueden ser anidados, y el nombre de los ciclos anidados, debe ser diferente uno de otro. La variable <code>from</code> (normalmente una matriz de valores) determina el número de veces del ciclo  <code>foreach</code>, el cual será ejecutando cuando no hubiran más valores en la variable<code> from</code>. </p>
<div class="codigo">
<pre>
&lt;?php
      $arr = array( 1001,1002,1003);
      $smarty-&gt;assign('custid', $arr);
?&gt;
{* este ejemplo muestra todos los valores de la matriz $custid *}
{foreach from = $custid item = curr_id}
      id: {$curr_id}&lt;br /&gt;
{/foreach} </pre>
</div>
<p>Recordemos que para arreglos asociativos, el signo de separación es el punto <strong>( . )</strong>.  Además, existe un conjunto de propiedades disponibles dentro del ciclo, como el número de interacción, la llave asociativa, etc. </p>
<h3>Otras funciones dentro de la plantilla Smarty: </h3>
<p>Smarty tiene un conjunto de funciones integradas bastante grandes,  enumerar cada una de ellas con sus características y mostrar un ejemplo, haría que este artículo fuese demasiado extenso.  A continuación, muestro un listado de algunas funciones interesantes y una pequeña descripción: </p>
<ul>
<li><strong>include_php: </strong> Incluye un archivo PHP dentro de la plantilla.  Util para obtener información de otros recursos.</li>
<li><strong>capture:</strong> es usado para recolectar toda la salida del template en una variable en lugar de mostrarla.</li>
<li><strong>ldelim, rdelim:</strong> son usados para escapar delimitadores en el template, en nuestro caso &#8220;{&#8221; or &#8220;}&#8221;.</li>
<li><strong>literal:</strong> permite que un bloque de texto sea tomado literalmente, no siendo interpretado por Smarty.
<li><strong>php:</strong> incrusta código PHP dentro de la plantilla.  No recomendado.</li>
<li><strong>assign:</strong>  Es usado para definir valores a las variables de template durante la ejecución del template.</li>
<li><strong>cycle: </strong>es usado para hacer un ciclo a través de un conjunto de valores. Esto hace mas fácil alternar entre dos o mas colores en una tabla, o ciclos a travéz de una matriz de valores.</li>
<li><strong>html_*:</strong>  funciones especiales para tratamiendo de cuadros de selección, imágenes, listas de selección, cuadros de fecha, etc.</li>
<li><strong>math:</strong> soporte para definición de funciones matemáticas.</li>
<li><strong>mailto: </strong>soporte automátizado para creación de vínculos de correo electrónico con posibilidad de codificación. </li>
</ul>
<h3>Extendiendo Smarty con Plugins: </h3>
<p>Smarty puede ser personalizado, agregando nuevos plugins con lo cual automatizamos funciones para ser utilizadas dentro del template.   </p>
<p>Podemos agregar nuestros propios scripts para extender: funciones, modificadores, funciones de bloque, funciones de compilación, prefiltros, postfiltros, filtros de salida, recursos e inserts.  Generalmente escribiremos funciones y modificadores. </p>
<h3>Nombres convencionales </h3>
<p>Los archivos y funciones de Plugin deben seguir una convención de apariencia muy especifica a fin de que pueda ser localizada por el Smarty. Los archivos de plugin deben ser nombrados de la siguiente forma: type.name.php. Donde <code>type</code> es uno de los siguientes tipo de plugin: </p>
<ul>
<li>function</li>
<li>modifier</li>
<li>block</li>
<li>compiler</li>
<li>prefilter</li>
<li>postfilter</li>
<li>outputfilter</li>
<li>resource</li>
<li>insert </li>
</ul>
<p>Algunos ejemplos: <code>function.html_select_date.php</code>, <code>resource.db.php</code>, <code>modifier.spacify.php</code>. Las funciones de plugin dentro de los archivos de plugin deben ser nombradas de la siguiente forma: <code>smarty_type _name() </code>.</p>
<div class="codigo">
<pre>&lt;?php
      /*
       * Smarty plugin
       * -------------------------------------------------------------
       * File: function.eightball.php
       * Type: function
       * Name: eightball
       * Purpose: outputs a random magic answer
       * -------------------------------------------------------------
       */
      function smarty_function_eightball($params, &#038;$smarty)
      {
            $answers = array('Yes',
                             'No',
                             'No way',
                             'Outlook not so good',
                             'Ask again soon',
                             'Maybe in your reality');
            $result = array_rand($answers);
            return $answers[$result];
      }
?&gt;
Question: Will we ever have time travel?
Answer:   {eightball}. </pre>
</div>
<p>Ahora bien, debemos reconocer que no existe solamente Smarty como motor de plantillas, sino que existen muchas más alternativas de proyectos con características similares y otras funcionabilidades.</p>
<p>En el próximo artículo y final de la serie sobre Smarty, enumeraremos cuales son esas alternativas junto con sus principales características. En fin, <a href="http://smarty.php.net">Smarty </a>demuestra ser una herramienta valiosa, open-source y  con una gran capacidad de expansión.  </p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smarty-a-nivel-avanzado/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Smarty: requerimientos, instalación y aprende a programar</title>
		<link>http://www.maestrosdelweb.com/editorial/smarty-instalacion/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smarty-instalacion/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 07:00:08 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/smarty-instalacion/</guid>
		<description><![CDATA[Smarty es una herramienta ideal como motor de plantillas, aprender su funcionamiento y las capacidades con las que cuenta, nos ayudará al rendimiento en el proceso del desarrollo de una aplicación web.
En el artículo Smarty: razones para utilizar plantillas en mis proyectos les hablé sobre las principales características y razones por las que es importante [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Smarty es una herramienta ideal como motor de plantillas, aprender su funcionamiento y las capacidades con las que cuenta, nos ayudará al rendimiento en el proceso del desarrollo de una aplicación web.</span><span id="more-3381"></span></p>
<p>En el artículo <a href="http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smarty-razones-para-utilizar-plantillas-en-mis-proyectos/">Smarty: razones para utilizar plantillas en mis proyectos</a> les hablé sobre las principales características y razones por las que es importante conocer Smarty. También hablamos acerca de sus capacidades de una manera muy general.  En este nuevo artículo veremos por qué considerar Smarty para nuestros proyectos y cómo empezar a utilizarlo. </p>
<h3>Requerimientos </h3>
<p>Smarty requiere un servidor web corriendo <strong>PHP 4.0.6 o posterior</strong>.  Para obtener los archivos debemos <a href="http://smarty.php.net">descargarlos</a> desde la página del proyecto <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a>.  Ahí se encontrará la última versión del mismo. </p>
<h3>Método de instalación </h3>
<p>Existen varios métodos para instalar Smarty en nuestro proyecto, cuando hemos descargado el paquete comprimido, encontraremos una serie de carpetas.  Los scripts del sistema están en el directorio de distribución <code>/LIBS/</code>.  Smarty puede ser instalado en una carpeta fuera del directorio raíz dentro de nuestro servidor (configurando la directiva <code>include_path</code> en el archivo <code>php.ini</code>) o estar en una carpeta dentro de la estructura de directorios del sitio.  Lo importante es que cuando creemos el objeto referencia, el interprete pueda localizar el archivo base <code>Smarty.class.php</code>:  </p>
<div class="codigo">
<pre>&lt;?php
      # Ejemplo de inclusión del archivo Smarty.class.php y creación del
      # objeto Smarty
      require('/path/relativo|absoluto/Smarty.class.php');
      $smarty = new Smarty;
?&gt;</pre>
</div>
<p>Smarty utiliza cuatro directorios para procesar las plantillas: <code>templates/</code>, <code>templates_c/</code>,<code> cache/ </code>y <code>configs/</code>.  Los directorios <code>templates_c/</code> y <code>/cache</code> necesitan permisos de lectura y escritura. Estos directorios son por defecto, pero cuando se crea la instancia del objeto, pueden definirse en tiempo de ejecución: </p>
<div class="codigo">
<pre>&lt;?php
      require('Smarty.class.php');
      $smarty = new Smarty;
      $smarty->template_dir = '/smarty/templates/';
      $smarty->compile_dir = '/smarty/compiles/';
      $smarty->config_dir   = '/smarty/configs/'
      $smarty->cache_dir    = '/smarty/cache/';
      $smarty->assign('name','Ned');
      $smarty->display('index.tpl');
?&gt;</pre>
</div>
<h3>Sintáxis básica: </h3>
<p>Todas las etiquetas del template deben estar marcadas por delimitadores. Por defecto, estos delimitadores son <code>{ y }</code>. En Smarty, todo el contenido fuera de los delimitadores es mostrado como contenido estático o igual (sin cambios). Cuando Smarty encuentra etiquetas en el template, trata de interpretarlos e intenta mostrar la salida apropiada en su lugar.   </p>
<p>Cuando incluimos código en <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript </a>o <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> dentro de la plantilla provocaremos un error.  Esto suelen pasar por que este código utiliza también las llaves.  La solución a este problema consiste en separar este código en archivos y utilizar el método estándar de <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML </a> para su inclusión o la utilización de bloques <code>{literal} {/literal}</code> para agruparlos.  Este bloque indica al motor de Smarty que no interprete el contenido del mismo. </p>
<p>Los comentarios son delimitados por <code>{* y *}</code>.  Las variables son referenciadas con el signo de <code>( $ )</code> y las constantes con signo de numeral: </p>
<ul>
<li><code>{ * foo * }</code>  <-- comentario de plantilla, no se muestra en HTML</li>
<li><code>{$foo}</code>   <-- desplegando el valor de la variable</li>
<li><code>{$foo[4]} </code>  <-- desplegando el quinto elemento del arreglo</li>
<li><code>{$foo.bar} </code>  <-- mostrando el valor de la llave "bar"</li>
<li><code>{$foo.$bar}</code>  <-- mostrando el valor de la llave correspondiente al valor de la variable "bar"</li>
<li><code>{$foo->bar}</code>  <-- desplegando el valor de la propiedad bar (objeto)</li>
<li><code>{$foo->bar()} </code> <-- desplegando el valor que regresa la función "bar()"</li>
<li><code>{#foo#}</code>   <-- mostrando el valor de la constante "foo" </li>
</ul>
<p>Generalmente los valores de constantes son definidos en archivos de configuración almacenados en la carpeta <code>/configs/</code> del directorio donde está trabajando Smarty y tienen una configuración especial.  Su utilización es importante por muchos motivos, incluyendo texto en otros lenguajes o configuraciones de colores, frases cortas, etc.  Para cargar un archivo de configuración dentro de la plantilla puede utilizarse la función: <code>{config_load file="foo.conf"} </code></p>
<p>Dentro del archivo de configuración, la definición de las constantes puede ser: </p>
<ul>
<li> pageTitle       = &#8220;This is mine&#8221;</li>
<li>bodyBgColor     = &#8220;#eeeeee&#8221;</li>
<li>tableBorderSize = &#8220;3&#8243;</li>
<li>tableBgColor    = &#8220;#bbbbbb&#8221;</li>
<li>rowBgColor      = &#8220;#cccccc&#8221; </li>
</ul>
<h3>Funciones: </h3>
<p>Cada etiqueta Smarty muestra una variable o utiliza algún tipo de función. Las funciones son procesadas y mostradas colocando atributos de la función entre delimitadores.  Los atributos en las funciones son colocados al mismo formato que los atributos <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>: </p>
<div class="codigo">
<pre>
{include file="header.tpl"}
{include file="header.tpl" attrib_name="attrib value"}
{include file=$includeFile}
{include file=#includeFile# title="Smarty is cool"}
{html_select_date display_days=yes}
&lt;select name="company"&gt;
{html_options options=$choices selected=$selected}
&lt;/select&gt; </pre>
</div>
<h3>La variable reservada {$smarty} </h3>
<p>Esta variable es de un caso especial dentro de la plantilla.  Desde esta variable podemos acceder a objetos dentro de la plantilla, sentencias, bloques de instrucciones, variables y constantes de <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a>, también proporciona un método para acceder a las constantes de archivos cargados  y otras propiedades.  Para mayor información, es recomendable leer el documento de ayuda de Smarty. </p>
<h3>Modificadores de variables </h3>
<p>Dentro de la plantilla podemos hacer modificaciones a las variables enviadas desde PHP.  Smarty proporciona estos para trabajar dentro de la plantilla.  Para aplicar un modificador, es necesario especificar el valor seguido por <code>|</code> (pipe) y el nombre del modificador. Si un modificador necesita parámetros estos siguen al nombre del modificador y son separados por <code>:</code> (dos puntos). </p>
<div class="codigo">
<pre>{* aplicar modificador a la variable *}
{$title|upper}
{* modificador con atributos *}
{$title|truncate:40:"..."} </pre>
</div>
<p>También es posible combinar modificadores.  Simplemente basta con colocar el siguiente con la misma sintáxis; separados por <code>|</code>(pipe). </p>
<h3>Conclusiones </h3>
<p>Este tipo de herramientas facilitan mucho el trabajo a los desarrolladores,  lo importante es obtener de ellos todo el potencial.  Utilizando Smarty en nuestros proyectos nos será de mucho beneficio, al desarrollar con la herramienta podemos separar la lógica de programación de la presentación y además involucrar a los diseñadores dentro del proceso.  </p>
<p>Las plantillas pueden incluir programación pero al estar vinculada casi por completo a la presentación es mucho más fácil de comprender para los diseñadores, porque no incluye elementos confusos.  Además, el diseñador puede hacer los cambios que quiera sin depender del programador. </p>
<p><em>NOTA: los ejemplos incluidos en este artículo fueron extraídos del manual de referencia de Smarty. </em></p>
<h3>Lecturas recomendadas:</h3>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/smarty-razones-para-utilizar-plantillas-en-mis-proyectos/">Smarty: razones para utilizar plantillas en mis proyectos</a></li>
<li><a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">¿Qué es Smarty?</a></li>
</ul>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/smarty-instalacion/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/smarty-instalacion/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smarty-instalacion/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Smarty: razones para utilizar plantillas en mis proyectos</title>
		<link>http://www.maestrosdelweb.com/editorial/smarty-plantillas/</link>
		<comments>http://www.maestrosdelweb.com/editorial/smarty-plantillas/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 07:01:30 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Editorial]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/desarrollo-web/php/smarty-plantillas/</guid>
		<description><![CDATA[Una de las prácticas más importantes dentro del mundo del desarrollo web es la separación del diseño y la programación.  El programador y el diseñador suelen ser personas distintas e Internet maneja un propio concepto de desarrollo gráfico muy diferente a la programación de aplicaciones de escritorio. 
A muchos programadores se nos ha inculcado [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Una de las prácticas más importantes dentro del mundo del desarrollo web es la separación del diseño y la programación.  El programador y el diseñador suelen ser personas distintas e Internet maneja un propio concepto de desarrollo gráfico muy diferente a la programación de aplicaciones de escritorio. </span><span id="more-3380"></span></p>
<p>A muchos programadores se nos ha inculcado este concepto, solemos trabajar en grupos de profesionales conformados por desarrolladores y diseñadores gráficos.  Luego,  que el diseñador a elaborado su propuesta gráfica, su diseño pasa al departamento de desarrollo para que a partir del mismo se elabore la programación. </p>
<p>Muchos profesionales de Internet suelen dedicarse al desarrollo de sitios, otros al desarrollo de aplicaciones.  Para ambos casos el diseño juega un papel muy importante.  Los que se dedican a la elaboración de sitios web, en muchos de los casos utilizan herramientas de terceros como <a href="http://www.maestrosdelweb.com/editorial/que-es-joomla/">Joomla!</a>, <a href="http://www.drupal.org.es/">Drupal</a>, <a href="http://www.maestrosdelweb.com/editorial/wordpress/">WordPress</a> (por mencionar algunos). </p>
<p>Estas herramientas de uso general suelen incluir un sistema de plantillas para manejar una diversidad mayor de diseños. Cada uno, utiliza un motor diferente que realiza su cometido. Lo importante es destacar que estas soluciones utilizan un sistema de plantillas o diseños para cambiar la cara del sitio que se esta administrando.</p>
<h3>Por qué es importante utilizar un sistema de plantillas </h3>
<p>La principal razón es que de esta manera ahorramos tiempo cuando depuramos la aplicación.  Una mala práctica de desarrollo consiste en embeber código de programación junto con el diseño y la maquetación.  La mayoría de lenguajes de programación permiten esta práctica.  El utilizar plantillas es importante por muchas razones: </p>
<ul>
<li>Es más sencillo darle mantenimiento a un script que solo incluye programación.</li>
<li> Dependiendo de nuestra programación, nuestra aplicación no depende del diseño y permite cambiarlo sin tener que hacer cambios dramáticos en la parte de programación.</li>
<li> Ambos profesionales pueden dedicarse a su área de experiencia.  Los programadores desarrollan y los diseñadores crean la vista de cara al usuario.</li>
</ul>
<h3>¿Qué es Smarty? </h3>
<p>En el caso particular de programación en <a href="http://www.maestrosdelweb.com/editorial/phpintro/">lenguaje PHP</a> existen muchas soluciones para el manejo de plantillas.  <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a> es un proyecto muy importante dentro del universo de paquetes desarrollados en PHP.  Smarty es un motor de plantillas muy potentes y versátil con capacidades de expansión a través de submódulos, extensiones y funciones.  </p>
<p>Los desarrolladores de Smarty supieron implementar un diseño de arquitectura de programación basado en el concepto de que una aplicación debe separar correctamente su lógica de programación de su diseño. Smarty incorpora una sistema de patrones de sintáxis para que dentro de la plantilla podamos incluir manejo y manipulación de variables; es decir dentro de una plantilla de Smarty puede hacerse programación. </p>
<p>Es importante mencionar que muchos proyectos importantes utilizan Smarty para el manejo de plantillas.  Además, hay implementaciones de Smarty en otros lenguajes de programación como el caso de  Canny desarrollado en <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a> y que puede interpretar las plantillas de Smarty. </p>
<p>Aparte de las ventajas antes mencionadas, Smarty es ideal para que los encargados del diseño puedan involucrase también en el desarrollo. Al separar la programación y  diseño, los diseñadores pueden participar lo cual permite que el proceso del proyecto sea mucho más rápido a la vez que da al diseñador un panorama mejor en cuanto a su arquitectura. </p>
<h3>Empezando a utilizar Smarty </h3>
<p>En su modo más sencillo, Smarty recibe variables para su impresión dentro de la plantilla.  Smarty trabaja a través de un objeto clase, las funciones más utilizadas serán: </p>
<div class="codigo">
<pre>$smarty->assign("ID_EN_PLANTILA", "VARIABLE"):  agrega la variable dentro del indice de variables de Smarty.
$smarty->display("NOMBRE_PLANTILLA"): despliegua y procesa la plantilla
</pre>
</div>
<h3>Ejemplo de inicialización de la variable de Smarty: </h3>
<div class="codigo">
<pre># Incluye la clase de Smarty
require "Smarty/libs/Smarty.class.php";                  

# Inicia el objeto
$smarty = new Smarty(); 

# Indica los directorios
$smarty->template_dir = "templates/";
$smarty->compile_dir  = "compiles/";
$smarty->caching      = false;
$smarty->cache_dir    = "cache/";
$smarty->config_dir   = "configs/"; 

# Manda variables a la plantilla
$smarty->assign("MY"        , $_SESSION["my"]);
$smarty->assign("TITLE_PAGE", "Smarty: Template Engine"); 

# Indica la plantilla
$smarty->assign("template.tpl"); </pre>
</div>
<h3>Conceptos para la creación de plantillas en Smarty</h3>
<p>En el ejemplo anterior se ilustra el método de inicialización del objeto de Smarty, la cual es bastante sencilla.  Ahora bien, Smarty utiliza principalmente cuatro directorios: </p>
<p><strong>template_dir: </strong> El directorio donde se almacenan las plantillas.</p>
<p><strong>compile_dir:</strong> el directorio donde se almacenan los archivos compilados.  Este directorio debe tener permisos de lectura y escritura en el servidor.  Smarty utiliza un sistema bastante peculiar para compilar las plantillas.   La clase lee el archivo de la plantilla y cuando la compila, deja indicado dentro del archivo la fecha de generación.  Cuando se le vuelve a pasar al objeto que se procese la página, el motor verifica esa fecha y si no ha sufrido cambios, no lo procesa.  Esto es importante, por que de esta manera no compila algo ya listo para ser utilizado y ahorra tiempo en el servidor.</p>
<p><strong>config_dir:</strong>  ya se menciono que Smarty tiene una sintáxis propia.  Los archivos de configuración son un agregado del sistema.  El objetivo es que dentro de estos se almacenen valores de configuración que no cambian pero que es importante que permanezcan como valores de constante.  Dentro de estos archivos pueden  clasificarse las constantes en secciones y dentro del TPL pueden referenciarse de un modo particular. </p>
<h3>Conceptos: </h3>
<p>Una plantilla puede incluir varias plantillas con lo cual se consigue una estructura de árbol,  independiente del script. Smarty trabaja con todos los tipos de datos nativos en PHP.  Otras implementaciones en otros lenguajes podrían variar en este funcionamiento.</p>
<p>La sintaxis de Smarty es muy similar a la de PHP, aunque con modificaciones.  Por ejemplo las instrucciones se delimitan con llaves <code>(  { } )</code> ,  pueden agregarse comentarios dentro de la plantilla <code>(  { *    * }  )</code> , existen las estructuras de control<code> IF y FOREACH</code> (para el manejo de variables tipo Array) y otras variaciones de estructuras de control. Las variables se representan con el signo de <code>( $ )</code>.</p>
<p>Existen funciones para manipulación de datos, generalmente suelen invocarse después de la referencia a la variable, a través del carácter <code>( | )</code>, y los parámetros después de <code>( : )</code>.  Ejemplo: <code>{$MY->username[strlen} </code></p>
<h3>Consejos: </h3>
<p>Aunque puede incluirse código de PHP dentro de la plantilla, esta práctica no es recomendada. Una buena práctica de programación consiste en enviar variables en arreglos sin ningún tratamiento en <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> para que la plantilla proceda a tratarla. Como se describió anteriormente, puede incluirse plantillas dentro de plantillas.  Esto puede resultan beneficioso para optimizar aún más la plantilla, incluyendo porciones de plantilla en varios archivos. </p>
<p>Smarty es una gran solución de motor de plantillas.  Contiene una gran arquitectura que puede ser ampliada según nuestras necesidades.  Esta ha sido solo una pequeña introducción al paquete.  En próximos artículos describiremos a mayor detalle cada una de las características dentro del sistema para que obtengamos el máximo desempeño del mismo. </p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/smarty-plantillas/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/smarty-plantillas/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/smarty-plantillas/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Maquetación de la aplicación (Quinto Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/#comments</comments>
		<pubDate>Thu, 01 Nov 2007 07:00:56 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/</guid>
		<description><![CDATA[XHTML, CSS y JavaScript son las tecnologías envueltas en el nivel de presentación de cara al usuario final, tres aspectos fundamentales independientes de las tecnologías detrás que apoyaron la presentación del contenido en el navegador.
Finalizamos con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre Desarrollo multinivel para aplicaciones basadas [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">XHTML, CSS y JavaScript son las tecnologías envueltas en el nivel de presentación de cara al usuario final, tres aspectos fundamentales independientes de las tecnologías detrás que apoyaron la presentación del contenido en el navegador.</span><span id="more-3326"></span></p>
<p>Finalizamos con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a>, <a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de programación (Segundo Nivel:L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/">Estructura de contenidos (Tercer Nivel:L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/">Diseño Gráfico (Cuarto Nivel: L5)</a> y terminamos con la Maquetación de la aplicación.</p>
<p>Nuestro usuario final estará en contacto con nuestra aplicación através del navegador y las tecnologías que soporta son XHTML, CSS y JavaScript, principalmente.  Para muchos de los diseñadores y programadores esta parte envuelve un cierto grado de expectación.</p>
<p>Al existir tantas alternativas de <a href="http://www.maestrosdelweb.com/editorial/%C2%BFcomo-elegir-un-navegador-web/">navegadores</a>, debemos tener especial cuidado en que nuestro sitio sea &#8220;renderizado&#8221; por la mayoría de ellos. El que nuestro sitio este accesible para la mayoría es importante; que este accesible para todos es trascendental (en este aspecto, me refiero a lo estupendo que es, que se vea bien en todos). </p>
<p>Las diferencias en el modo de trabajo de cada uno hace que para muchos  profesionales de integración y maquetación, sea un completo dolor de cabeza, el tratar de dar soporte a cada uno, con sus diferencias.  Pero debemos de recordar que nuestra misión es que nuestro proyecto pueda ser visto por nuestros usuarios, sin importar su sistema operativo, navegador y configuraciones especiales.  </p>
<p>Es perfectamente comprensible que creamos que existe mucha dificultad en lograr el soporte para todos.  Esta será una labor constante; reparando y probando el desempeño del sitio en diversas configuraciones poco a poco y corrigiendo los fallos que puedan existir.</p>
<h3>Maquetar para múltiples dispositivos</h3>
<p>Este tema puede llegar a ser un tanto controversial.  ¿Por qué deberíamos preparar nuestro sitio para que sea visto en diferentes dispositivos? ¿Vale la pena hacer un esfuerzo en que mi proyecto pueda verse en un computador, un teléfono o mi iPod?.  En mi opinión la respuesta es afirmativa, según mis perspectivas de proyecto.</p>
<p>El maquetar para más de un explorador ya es un reto en si; el hacerlo para teléfonos con acceso a Internet de alta velocidad, hace que mi aplicación sea y se vea más potente. Pero, ¿Cómo puede maquetarse para múltiples dispositivos?.</p>
<p>La respuesta es usar plantillas y dotar a la aplicación de un sistema de detección del explorador y/o dispositivo.  Por ello, es importante que si vamos a realizar una aplicación bajo esta estos paradigmas, las salidas deben ser en un formato estándar, con el cual, al cambiar entre distintos temas, no estemos redundando en programación, duplicando scripts, etc.</p>
<p>Existen en la actualidad, varios sistemas de manejo de plantillas.  Para los desarrolladores en <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a>, el más conocido es <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a>.  Este sistema de plantillas trabaja bajo una estupenda metodología de separación del contenido del diseño, dotando al archivo de la plantilla de un conjunto de etiquetas, que le permite agregar programación y trabajando con las variables enviadas desde el lenguaje.</p>
<p>Existen otros sistemas de plantillas en diferentes lenguajes.  Muchos <a href="http://www.maestrosdelweb.com/editorial/los-frameworks-de-php-agilizan-tu-trabajo/">frameworks</a> ya cuentan con un sistema de plantillas diseñado para aprovechar las características del lenguaje y hacer más fácil el crear temas y hacer la maquetación del sitio.  </p>
<p>Yo doy un voto a la forma en que trabaja Smarty, también existe un sistema de plantillas bajo <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a> que interpreta el formato de archivo de Smarty. Una idea en cuanto al uso de varias plantillas es que se concentra en un archivo la información que va a salir en determinado momento (podría ser un archivo por salida o por proporción de contenido a volcar) y que el archivo que contiene la salida pueda determinar el tema que hay que desplegar.</p>
<p>Cuando diseñamos un tema para el navegador y posteriormente lo maquetamos debemos tomar en cuenta varios aspectos:</p>
<ul>
<li>Utilizar con cuidado los tamaños de los elementos.  En la actualidad, el estándar de navegación en tamaño de resolución de pantalla es 1024&#215;768.  Muchos desarrolladores cuentan con monitores con una capacitad mayor.  Es recomendable que maquetemos a esta resolución estándar y que nuestro sitio se vea con un diseño adaptativo.  Algunos expertos recomiendan el uso de valores <strong>em</strong> en vez de valores en <strong>pixeles</strong> para que el texto se adapta al tamaño de la resolución.</li>
<li>Cuando maquetemos, hagamoslo según los estándares.  La utilización de estándares asegurará que el navegador tratará el documento de una mejor manera. Pero no nos asegura un 100% de soporte.</li>
</ul>
<h3>Maquetación para una actualización</h3>
<p>El ejemplo más claro en cuanto al factor de diseño y maquetación es el cambio de paradigma del modelo convencional basado en una estructura de tablas a la actual, basada en contenedores fluidos y div&#8217;s. </p>
<p>El formato HTML como tal va camino a una profunda reestructuración y actualización del modelo (HTML 5 y XHTML 2), dejando fuera ciertos elementos considerados obsoletos e introduciendo otros nuevos, llamados etiquetas semánticas.  El desarrollo de cualquier proyecto debe contemplar la actualización para el futuro, tanto del diseño como de la parte estructural del lenguaje que lo sustenta.  Esto nos dice que no debemos dejar abandonado el proyecto.</p>
<p>Además, también debemos contemplar los cambios que se producen a nivel de exploradores.  Lo que funcionaba perfectamente en la versión anterior del programa, pueda que en la nueva funcione de manera distinta.  </p>
<p>Por ejemplo:  la versión 6 o anterior de Internet Explorer no contaba con soporte nativo para el despliegue de imágenes en <a href="http://www.maestrosdelweb.com/editorial/migrardegifapng/">formato PNG</a>; sino a través de un filtro, podría lograrse el tan esperado efecto de transparencia.  </p>
<p>Esto causo que por largo tiempo, las páginas <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML </a>no pudieran incluir imágenes en este formato.  La solución a este caso fue el uso de tecnologías como <a href="http://www.maestrosdelweb.com/editorial/flash/">Flash</a> (que incluía otros efectos). Otro ejemplo es el tan sonado caso Microsoft-EOLAS, por el cual Microsoft tendrá que modificar el comportamiento de los objetos embebidos como QuickTime, Java Applets, Flash, etc. Incrustandoles un marco de activación.</p>
<p>Todos estos cambios que se vienen en nuevas versiones hacen que la experiencia del usuario cambie.  Debemos estar atentos a ellos para solucionarlos. Como conclusión a esta sección del artículo puedo inferir que preparar la maquetación para una actualización simplemente nos ayudará a mejorar, agilizar y optimizar los cambios futuros que debamos desarrollar.  </p>
<h3>Separación completa del esquema HTML, CSS y JavaScript</h3>
<p>Al fin llegamos a la parte práctica del artículo.  ¿Por qué separar la maquetación en HTML, CSS y JavaScript?. La respuesta es bastante obvia.  Para mejorar el rendimiento.  Los beneficios son bastantes, igual que los retos:</p>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> proporciona la estructura</li>
<li><a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> define el diseño de los elementos</li>
<li><a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript</a> le da una funcionabilidad adicional</li>
</ul>
<p>Al separar la presentación al usuario estamos:</p>
<ul>
<li>Mejorando el rendimiento dado que consumimos menos ancho de banda en transferencia.</li>
<li>Reutilizando código, diseño, etc.</li>
<li>Agilizando el proceso de actualización.  El tiempo que nos lleve realizar la actualización es directamente proporcional al número de archivos que debamos cambiar para realizar dicha actualización.</li>
</ul>
<p><a href="http://www.maestrosdelweb.com/util/maquetacion-l5.zip">Descargar el ejemplo.</a></p>
<p>En el modelo L5 la maquetación es la fase última de desarrollo del proyecto.  Hasta aquí hemos realizado un gran esfuerzo para construir una aplicación que cumpla con las expectativas de nuestro cliente y usuarios, a la vez que sea robusta y este bien estructurada.</p>
<p>Hemos aplicado una metodología de desarrollo clara, sencilla y basada en muchos conceptos nuevos y otros que posiblemente ya hemos escuchar, pero que ya enfocados sobre el modelo son simples de entender y aplicar.  </p>
<p>El propósito fundamental de esta guía fue proponer el <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">modelo L5</a> como un esquema de separación de las capas de desarrollo de proyectos para Internet. La oportunidad está abierta para aquellos que sepan llevar a cabo proyectos importantes, sostenibles y estables.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/maquetacion-de-la-aplicacion-quinto-nivell5/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Diseño Gráfico (Cuarto Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 07:00:38 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Usabilidad]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/</guid>
		<description><![CDATA[Hasta hace poco los diseños elegantes en colores sobrios y la utilización de tecnologías externas como Flash eran el referente del diseño para Internet, ahora se habla de la Web 2.0 y los diseños han cambiado drásticamente.
Siguiendo con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre Desarrollo multinivel para [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Hasta hace poco los diseños elegantes en colores sobrios y la utilización de tecnologías externas como Flash eran el referente del diseño para Internet, ahora se habla de la Web 2.0 y los diseños han cambiado drásticamente.</span><span id="more-3327"></span></p>
<p>Siguiendo con el ciclo de artículos inspirados en el modelo L5 constituidos por una introducción sobre <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a>, <a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de programación (Segundo Nivel:L5)</a>, <a href="http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/">Estructura de contenidos (Tercer Nivel:L5)</a> y ahora abordaré el Cuarto Nivel: L5 dedicado al diseño gráfico.</p>
<p>Ahora, parece ser que la tendencia de desarrollo esta muy ligada a lo casual, con colores pastel, letras grandes, muy al estilo tipográfico y de revistas.  Es increíble como los gustos han cambiado en tan poco tiempo; y seguirán cambiando en lo futuro. </p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-01.jpg' alt='diseno1' /></p>
<p>Al parecer en Internet la tendencias de la utilización de gráficos estáticos está volviendo con un toque  moderno y suelto. Si estamos dedicados al desarrollo y seguimiento de un proyecto publicado en Internet, una aplicación para clientes y todo aquel proyecto que esté en comunicación con usuarios fuera del ámbito administrativo, estar atento a las tendencias de diseño, es muy importante:</p>
<ul>
<li>Indica a nuestros usuarios que la aplicación está siendo supervisada y no es un proyecto que se ha descuidado o abandonado.  </li>
<li>Ayuda a mejorar la experiencia del usuario y llegar a un grado mayor de <a href="http://www.maestrosdelweb.com/editorial/usabilidad/">usabilidad</a>.</li>
</ul>
<p>Podría también decirse que ayuda a que el proyecto se vea más fresco e incluso a la moda en diseño, aunque sea una aplicación con bastante recorrido en <a href="http://www.maestrosdelweb.com/editorial/usointernet/">Internet</a>.</p>
<h3>Expresando el contenido de una manera gráfica</h3>
<p>Ahora, dejando un poco de lado la parte de las tendencias y centrándonos en la parte tal cual de la elaboración de diseño, debemos siempre recordar que sea cual sea nuestra inspiración de diseño, finalmente este deberá adaptarse al contenido real de la página y al público  que este enfocado.</p>
<p>Los diseñadores deberían trabajar conjuntamente con los encargados del contenido y los profesionales encargados de la maquetación final del sitio o aplicación.  Esto con el objetivo de que el diseñador sepa del contenido que debe incluirse en el diseño y que conozca las limitaciones del medio de Internet.</p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-03.jpg' alt='diseno2' /></p>
<p>Un error que suele cometerse con bastante regularidad en el desarrollo para Internet es que los diseñadores suelen ser los primeros en el orden de elaboración de proyectos.  Generalmente los encargados del diseño suelen presentar sus propuestas de diseño  antes de lo que realmente se deberían de presentar en detrimento de los encargados de la maquetación del sitio.  </p>
<p>El resultado es de esperarse:  diseños completamente fuera de la realidad de Internet, muy difíciles de plasmar en <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>; a veces con mucho contenido dinámico, animaciones y distractores. Por suerte, muchos profesionales del diseño en la actualidad, ya no suelen cometer estas faltas. </p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-35.jpg' alt='diseno6' /></p>
<p>Aquí sería conveniente que los diseñadores trabajen conjuntamente con el resto del equipo asignado para el proyecto, para tomar ideas de ellos y cuando haya un consenso de los diseños propuestos, mostrárselos al cliente para su aprobación.</p>
<p>Un buen diseño se acoplará al contenido del sitio y le dará la marca distintiva de originalidad que debe estar presente en todo proyecto para Internet.  Los diseños simples siempre serán una buena opción, aunque para ciertos casos es interesante probar elementos nuevos.</p>
<p>La regla general será hacer diseños agradables en donde la distribución del contenido este en el ángulo de la página donde cumpla su cometido fundamental.</p>
<h3>Factores de diseño para un proyecto dinámico y escalable</h3>
<p>Lo fundamental en todo diseño para Internet es la sencillez, es decir que no este cargado con elementos que distraigan o estén fuera de lugar, eso es elemental.  Las ventajas se centran en que un diseño sencillo es más apreciado que un diseño complejo con tantos detalles.  </p>
<p>Además, los beneficios que también implica incluyen un menor consumo de ancho de banda en el producto final. Como en todo lo anteriormente dicho, el uso de <a href="http://www.maestrosdelweb.com/editorial/flash/">Flash</a> debería estar restringido al mínimo o para salir de la monotonía de las imágenes GIF y que nunca se coloque información o contenido dentro; en especial si este contenido ayuda al posicionamiento del sitio en motores de búsqueda.</p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-39.jpg' alt='diseno4' /></p>
<p>También es importante tomar en cuenta la <a href="http://www.maestrosdelweb.com/editorial/usabilidad/">usabilidad</a>: la buena distribución del contenido, la inclusión de guías para localizar de manera fácil lo que el navegante está buscando, el uso de estándares de diseño como la inclusión de un vínculo en el logotipo para ir a la página de inicio o la simple presencia del famoso puntero de la &#8220;manita&#8221; para señalar vínculos.  Otra sugerencia es &#8220;ponerse del lado del usuario&#8221;.</p>
<p>Pienso que un diseño cumple con su misión cuando un navegante nuevo (entiéndase que nunca ha entrado a nuestro sitio con anterioridad) puede encontrar lo que busca en el menor tiempo requerido por que los elementos gráficos simplemente le guían, que gusta del diseño y que se toma el tiempo de colocarlo como marcador.  </p>
<p>El diseño siempre será fundamental en todo proyecto para Internet.  Un proyecto sin un buen diseño simplemente no servirá por que no hay atractivo en usarlo.  Y un diseño sin un buen contenido simplemente será una imagen bonita.  La tarea es trabajar conjuntamente y dejar que los profesionales trabajen en su área, siempre listos a escuchar a sus compañeros de equipo con los que tienen que trabajar para lograr el mejor resultado.</p>
<p><img src='http://www.maestrosdelweb.com/images/more-beautiful-designs-241.jpg' alt='diseno5' /></p>
<p>Cuando <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">propuse L5 como un modelo de desarrollo</a>, deje como cuarto nivel al diseño de la interfaz, porque muchos profesionales de Internet envueltos en el desarrollo pueden  tener mucha experiencia en todas las áreas.</p>
<p>Pero el diseño es un área más con la que contará nuestra aplicación y solamente puede ser elaborado por profesionales con la sensibilidad única que se necesita para darle a nuestro proyecto ese toque de genialidad gráfica y artística.</p>
<p>Las imágenes proporcionadas en este artículo fueron extraídas del artículo: <a href="http://www.smashingmagazine.com/2007/07/04/inspiration-package-usable-elegant-inspiring-design-showcase">Inspiration Package: 60+ Usable &#038; Elegant Designs</a>.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/diseno-grafico-cuarto-nivell5/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/more-beautiful-designs-01.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/more-beautiful-designs-01.jpg" medium="image">
			<media:title type="html">diseno1</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/images/more-beautiful-designs-03.jpg" medium="image">
			<media:title type="html">diseno2</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/images/more-beautiful-designs-35.jpg" medium="image">
			<media:title type="html">diseno6</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/images/more-beautiful-designs-39.jpg" medium="image">
			<media:title type="html">diseno4</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/images/more-beautiful-designs-241.jpg" medium="image">
			<media:title type="html">diseno5</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Estructura de contenidos (Tercer Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 07:00:10 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/</guid>
		<description><![CDATA[Entre los objetivos de cada una de las aplicaciones que podamos construir, se contempla el distribuir la información con la que contemos en nuestra base y mostrar el contenido que nuestros usuarios requieren para satisfacer sus necesidades.
El contenido que se maneja dentro de la aplicación es fundamental para que los usuarios consideren atractivo ingresar a [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Entre los objetivos de cada una de las aplicaciones que podamos construir, se contempla el distribuir la información con la que contemos en nuestra base y mostrar el contenido que nuestros usuarios requieren para satisfacer sus necesidades.</span><span id="more-3223"></span></p>
<p>El contenido que se maneja dentro de la aplicación es fundamental para que los usuarios consideren atractivo ingresar a él. Es por ello que en el Modelo L5 es un aspecto que debe ser profundamente evaluado.</p>
<h3>La importancia del Contenido en el Modelo L5: </h3>
<p>En el <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">modelo L5</a> el contenido es el punto de unión entre la tecnología del Servidor y las tecnologías del cliente.  Muchas veces, para nuestros usuarios no importará la programación que haya sido envuelta en la generación del contenido, lo importante son los resultados.</p>
<p>Al dividir el modelo en cinco fases, agregué una especial, para hablar acerca del contenido.  El contenido que hemos extraído desde nuestra Base de Datos y hemos procesado dentro de la <a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de Programación</a>, debe ser estructurado de una manera especial, para poder ser presentado al usuario final de la manera correcta. </p>
<p>El contenido, no debe ser estimado como el simple producto de nuestra labor, dentro de nuestra aplicación sino como el final de la misma.  Cuando hablo de la finalidad, me refiero a que es el valor y utilidad que le da a nuestra aplicación. </p>
<h3>Por qué trabajar con un modelo estándar basado en XML</h3>
<p><a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a> es un formato de documento, creado y pensado para la estructuración y el modelado de información.  No es una tecnología como <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a> ó <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a>. </p>
<p>XML simplifica en muchos casos la manipulación de la información dentro de los medios de almacenamiento y recuperación.  Todos sabemos que se basa en la definición de etiquetas y su estructuración a través de un modelo jerárquico. </p>
<p>Su uso en la generación del contenido que debemos presentar indicaría que no importará que tecnología apoyo su formación.  Siempre y cuando el formato del documento XML generado sea el mismo la aplicación podrá seguir operando sin ningún cambio aparente. </p>
<p>Existen diversas tecnologías derivadas de XML como los formatos SVG, MathML, RDF, XBL; cada una con una función específica, que nos ayudará en determinadas necesidades. Hay diferentes razones, por las que el uso de XML sea valioso en nuestros proyectos: </p>
<ul>
<li>Es un estándar.</li>
<li>Independiza la presentación del contenido de la tecnología empleada para generarlo, es decir, independiza la tecnología de servidor, de la tecnología del explorador.</li>
<li>Su uso nos permitirá hacer que módulos desarrollados en otros lenguajes puedan comunicarse con otros módulos, sin necesidad de hacer configuraciones adicionales.</li>
<li>Se adapta a nuestras necesidades, un documento XML, puede ser estructurado de diversas maneras y ampliado en su estructura, para que puedan ser agregados nuestros registros de campos y valores, sin que esto comprometa el uso que le da otros módulos que operaban con esa estructura antes de su cambio.</li>
</ul>
<p>Por tanto, es recomendable el uso de XML dentro de L5, su implementación en cualquier lenguaje de scripting es bastante sencilla, dada la multitud de módulos o parsers que existen en la actualidad para muchas plataformas. </p>
<h3>Formateo del documento XML </h3>
<p>Ahora bien, el siguiente paso sería el parseo del documento XML anteriormente generado.  Este  puede ser realizado por un lenguaje de scripting (que podría ser el mismo empleado para generar el XML, con el agravante que para muchos esto podría resultar en una redundancia y complejidad, dentro del proceso) o por el lenguaje del explorador a través de XSL o el mismo <a href="http://www.maestrosdelweb.com/editorial/diez-funciones-imprescindibles-en-javascript/">JavaScript </a> según sea la necesidad y el objeto del formato del documento. </p>
<p>En la primera opción: el parseo y recuperación de la información, en un formato nativo para el lenguaje de scripting, la razón fundamental es principalmente por la problemática que puede operar en sitios de Internet.  </p>
<p>La optimización para motores de búsqueda hace necesario que las páginas sean servidas como tal, en cuanto a su contenido que es el que interesa al motor de búsqueda. Si utilizásemos XSL para transformar el documento XML el motor de búsqueda no podría interpretar correctamente la página y esto sería en detrimento del posicionamiento del sitio. </p>
<p>Ahora bien la optimización en cuanto al uso de XSL podría ser utilizada en administradores o en herramientas web, que no requieran posicionamiento.  Pero, debemos de tener en cuenta el soporte de esto en navegadores.  En la actualidad, el mejor soporte es logrado en productos de la suite Mozilla. Pero también cuenta con el mismo soporte Internet Explorer, Opera y Safari.</p>
<h3>Optimización para múltiples dispositivos </h3>
<p>Otra ventaja importante es que cuanto separamos el contenido del diseño e incluso del <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a> logramos que con implementaciones,  el <a href="http://www.maestrosdelweb.com/editorial/tu-sitio-web-en-dispositivos-moviles/">contenido se adapte a diversidad de dispositivos</a>. Si hablamos de navegadores también podemos incluir el uso de plantillas, diseños, skins y templates.  Una idea sería que un sitio sea personalizable en este aspecto. </p>
<p>Ahora, si nos referimos a múltiples dispositivos,  estamos indicando que nuestro sitio este disponible no solo vía un ordenador, sino a través de otros dispositivos con acceso a Internet, unidades móviles, teléfonos, etc. </p>
<p>Las nuevas tendencias muestran que Internet cobrará mayor auge y que el acceso no se hará solamente por computadores sino dispositivos, como teléfonos celulares, unidades móviles y cualquier dispositivo con acceso a Internet de alta velocidad vía Wi-Fi.</p>
<p>Un ejemplo claro, son las unidades iPhone y el nuevo iPod Touch, otras como el Blackberry y otros dispositivos.  Dependiendo del nivel de alcance y los servicios que quiera ofrecer nuestra aplicación, así podremos realizar soporte para múltiples dispositivos. </p>
<p>Tomando en cuenta este enunciado, sería fantástico que podamos hacer que nuestro proyecto, pueda verse en más de una plataforma distinta al ordenador.  Ese es el deseo de muchos entusiastas y de la propia W3C que busca que el Internet y la World Wide Web, sea accesible para todos, sin importar el dispositivo que utilicen para estar en línea. </p>
<p>El separar el contenido nos ayudará a cubrir esta necesidad para dar a nuestros usuarios una mayor calidad de experiencia bajo nuestros servicios. </p>
<h3>El esquema de contenido define la presentación </h3>
<p>Recapitulando, decimos que el contenido, manda sobre el diseño.  El diseño se adapta al contenido, el esquema de contenido define la presentación, utilizando XML podemos generar dicho esquema, dependiendo de cada uno de los contenidos que queramos desplegar.  Se adaptará a cada necesidad y el contenido entrará a formar parte del diseño a través de la maquetación. </p>
<p>Pero recordemos: el formato XML no es la única opción que podemos emplear, también existe otros lenguajes de marcado como JSON y YAML.  Obviamente, existe muchos más, pero su uso dependerá si cumple nuestras necesidades de la mejor forma.</p>
<p><a href="http://www.maestrosdelweb.com/util/xml.phps">Descargar ejemplo</a></p>
<h3>Lecturas relacionadas:</h3>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a></li>
<li><a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</a></li>
<li><a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Lógica de programación (Segundo Nivel:L5)</a></li>
</ul>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/estructura-de-contenidos-tercer-nivell5/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Lógica de programación (Segundo Nivel:L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/#comments</comments>
		<pubDate>Tue, 16 Oct 2007 13:48:38 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/</guid>
		<description><![CDATA[En los inicios de la programación orientada a la web se han propuesto varios objetivos: que la aplicación cumpla con las características por las que fue creada y que esté disponible en cualquier medio con acceso a la tecnología de internet. ¿Por qué?
En los inicios de Internet, la programación se limitaba a presentar documentos estáticos. [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">En los inicios de la programación orientada a la web se han propuesto varios objetivos: que la aplicación cumpla con las características por las que fue creada y que esté disponible en cualquier medio con acceso a la tecnología de internet. ¿Por qué?</span><span id="more-3224"></span></p>
<p>En los inicios de Internet, la programación se limitaba a presentar documentos estáticos.  Conforme fue evolucionando, surgieron las tecnologías que actualmente conocemos con <strong>Lenguajes de Scripting</strong>. </p>
<p>En la actualidad, los lenguajes dominantes son <a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP </a>y ASP.Net   les siguen de manera rezagada Pearl y JSP. Y como tecnologías que están tomando impulso tenemos <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby</a> (con su framework Rails)  y Python (en este punto, creo que la principal razón de que Python esté tomando impulso, es por el uso intensivo que Google le está dando). </p>
<p>Realmente, no interesa en un 100% que tipo de tecnología estemos utilizando.  Cada una tiene ventajas y desventajas que nos permite crear nuestros proyectos.  En un mundo tan competitivo, no podemos simplemente pensar que utilizando la tecnología del momento, llegaremos a tener mayor éxito. </p>
<p>Las tecnologías cambian y son sustituidas. Nuestros proyectos subsistirán no por el lenguaje o tecnología que utilicemos, sino por la misma esencia del proyecto y como haya sido pensado y desarrollado. </p>
<h3>Desarrollo descentralizado </h3>
<p>Primero debemos de tener el concepto de programación modular.  Sea que estemos desarrollando para una aplicación nativa o para Internet.  Pero, centrándonos en el caso de la programación para Internet, al menos deben intervenir 5 tecnologías (SGBD, Scripting, <a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>, <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a> y <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript</a>). </p>
<p>Cuando hablamos de desarrollo descentralizado, en el <strong>modelo L5</strong> no nos referimos a estas separaciones (que elementalmente son los cinco nivel del método),  nos referimos, en el caso del nivel de Lógica de Programación, a la separación dentro de la lógica, en clases, procedimientos y funciones de una manera correcta.  </p>
<p>El desarrollo descentralizado no consiste simplemente en hacer esa separación,  de hecho, muchas partes del desarrollo deben estar separadas en componentes, a través de clases bien estructuradas, aprovechando las capacidades del lenguaje que utilizamos.  Siempre quiero repetir esto, por que creo que es importante.  </p>
<p>No se trata solamente de hacer una aplicación,  se trata de que nuestro proyecto llegue a ser un referente en todo sentido. La gran característica de aplicaciones o módulos como <a href="http://www.maestrosdelweb.com/editorial/que-es-smarty/">Smarty</a>, ADODB, entre otros, es que piensan en la reutilización.  Hacer algo que pueda ser aplicado en muchos otros proyectos.  </p>
<p>Lo realmente interesante de crear aplicaciones con componentes de este tipo, es que podemos ir creando estructuras personalizables que nos permitan extender su uso; con lo cual, vamos ganando experiencia y nuestro componente se va haciendo cada vez más potente. </p>
<p>Por ejemplo, consideremos un componente del lado de la programación, que nos permita crear backups periódicos de nuestra base de datos.  Con una buena combinación de programación e incluso un diseño de interfaz, este módulo nos permitiría agregar una nueva funcionalidad a nuestro proyecto. A la vez que estamos descentralizando funciones, estamos haciendo componentes reutilizables. </p>
<h3>
¿Por qué sitios como Google o Yahoo pueden ofrecer tan buenos servicios?</h3>
<p>Sin duda, es una idea con una gran dimensión de respuestas.  Puede que cuenten con los mejores equipos de desarrolladores.  Pero parte de su éxito consiste en utilizar una buena técnica de programación que combina componentes descentralizados y reutilizables. </p>
<h3>
Programando entre tecnologías </h3>
<p>Si tomamos como base el caso de <a href="http://www.maestrosdelweb.com/editorial/googlehis/">Google</a>, podemos conocer que su desarrrollo principal funciona sobre el lenguaje Python,  utiliza módulos en otros lenguajes como C para sus funciones.  Todos sabemos de la compra que Google hace a otras empresas que utilizan diferentes tecnologías.  ¿Cómo es que Google puede controlar todos estos servicios y combinarlos con éxito?. </p>
<p>Los lenguajes por naturaleza, han sido desarrollados para interactuar con componentes desarrollados para si mismos.  No permiten la utilización de otro código de manera nativa, sino a través de aplicaciones que son intermediarias entre el lenguaje principal y el huesped.   </p>
<p>Además de este tipo de desarrollo, que requiere una configuración más avanzada dentro del mismo servidor, existen otros métodos como los famosos <strong>Web Services </strong>que permite la comunicación entre dos o más servidores con tecnologías distintas o la utilización de tecnologías estándar como <a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a>, JSON o YAML, cuyos intérpretes han sido desarrollados para muchas plataformas y lenguajes. </p>
<h3>PHP + ASP.Net + Ruby </h3>
<p>Cómo optimizar y desarrollar más fácilmente utilizando múltiples tecnologías al mismo tiempo. Desde el artículo de introducción, hice mención de que una de las justificaciones para desarrollar bajo el concepto de CROSS-SCRIPTING era que podíamos utilizar lo mejor de cada tecnología para realizar una aplicación basada en Internet. </p>
<p>Debo aclarar que la utilización de varias tecnologías dentro de un proyecto, no debe ser una obligación para desarrollar bajo este método de desarrollo.  Si nuestro proyecto no lo requiere, no hay ningún inconveniente en no acatar este punto. </p>
<p>Otra justificación, es que así, vamos independizando los módulos de la aplicación.  Cada lenguaje tiene un grado de actualización diferente.  También al desarrollar de esta manera podemos simplificar procesos.  Por ejemplo,  una de las ventajas principales del lenguaje PHP es su versatilidad para manejar variables y que los tipos de datos no son estrictos.  </p>
<p>En adición a esto, ASP.Net, está muy integrado con la plataforma .Net de Microsoft, que integra muchas funciones y procedimientos muy potentes.  Y si comparamos Ruby, podemos comentar que tiene un gran soporte para la programación orientada a objetos.  Y así sucesivamente podemos enumerar muchas ventajas, que al combinarlas, nos permiten integran una aplicación realmente potente. </p>
<p>En la actualidad, es posible integrar todos los servicios en un solo Servidor, generalmente Apache.  En los últimos días he leído acerca de la posibilidad de utilizar ASP.Net directamente en Apache. Proyecto como Mono que también permiten programar en ASP.Net bajo otras plataformas como Mac OS X o Linux.   </p>
<p>Creo que la mejor manera de integrar cualquier tecnología es haciendo que trabaje bajo el enunciado de un módulo completo, y que se comunique a través de lenguajes estándar.  La optimización se hará dentro del mismo entorno de programación. </p>
<h3>Comunicación entre la BD y la Tecnología de Scripting: Vistas y Procedimientos </h3>
<p>Un ejemplo de comunicación entre dos tecnologías diferentes.  Pero, en este caso, resulta más sencillo su comunicación, por la gran diversidad de controladores que existen que permiten comunicarnos de cualquier plataforma de desarrollo de scripting a cualquier Gestor de Base de Datos. </p>
<p>Ahora bien, depende mucho el tipo de comunicación y el grado de privilegios que tenga nuestra aplicación sobre la Base de Datos sobre la que va actuar.  Generalmente, tendremos el control total sobre la misma, a excepción de sistemas con una base de datos ya existente, siendo nuestro programa un módulo de extensión.  Pero en primer caso, la utilización de consultas directas, no es una buena opción. </p>
<p>El SGBD, recibe instrucciones, generalmente en lenguaje SQL, que luego interpreta y ejecuta.  En Base de datos pequeñas o aun en desarrollo, la fracción de segundos de diferencia es casi imperceptible, pero a media que vamos creciendo dentro de la base de datos de registros, la manipulación de esos datos es más lenta.  En aplicaciones críticas, ese intervalo puede llegar a ser crucial. </p>
<p>El SGBD optimizará las consultas, pero una mejor manera de hacer que el sistema sea cada vez mejor, es utilizar vistas y procedimientos.  Las vistas, son muy parecidas a las consultas comunes de tipo SELECT.  Mucho comentan que su existencia, emula a una tabla más dentro de la base de datos.   </p>
<p>La principal ventaja es que permite combinar resultados de varias tablas, con lo cual la obtención de los datos es más rápida.  Otra ventaja de su utilización, es que en cuanto a los niveles de seguridad, el utilizar una vista es mucho mejor, porque para los usuarios que hacen la consulta, la vista representa una tabla y los campos parecen estar dentro de la misma entidad. </p>
<p>Además, dependiendo del gestor, puede que exista el concepto de Vista de una Vista, en que agrupamos aún más dichos valores, generalmente, por que estamos utilizando varias vistas que utilicen una misma estructura de valores de registros padre comunes. </p>
<p>En cuanto a los procedimientos, son importantes, por que su utilización, también permite un mayor grado de velocidad y seguridad al enviar los valores de los parámetros, permiten ejecutar más de una instrucción o consulta, etc.  La comunicación a la base de datos, debe hacerse de igual manera de con cualquier método tradicional. </p>
<p>Posiblemente si así pudiese implementarse, la utilización de un archivo en formato estándar, podría ayudar, para centralizar esas consultas a los procedimientos y vistas, en el formato que más se ajuste (a mi parecer en este punto, XML). </p>
<div class="codigo">
<pre>
# XMl
&lt;?xml version = "1.0" ?&gt;
&lt;database engine = "mysql" version = "5.0"&gt;
      &lt;section id =  "views"&gt;
            &lt;query id = "90TY67SE"&gt;
                  SELECT * FROM `_userslist`
                    WHERE `username` = '%username%'
            &lt;/query&gt;
      &lt;/section&gt;
&lt;/database&gt;
# PHP
$user = str_replace('%username%', 'maestrosdelweb',
                              getquery("90TY67SE"));
</pre>
</div>
<h3>Generación del Esquema de Modelo XML </h3>
<p>Antes de iniciar con la guía, estaba convencido que la mejor tecnología de vinculación para el modelo era <a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a>.  He leído arduamente respecto a este tópico, y aunque aun creo que una de las mejores opciones es XML. </p>
<p>El motivo de mi cambio es que aunque XML es muy bueno para describir datos, existen otras tecnologías para describirlos de igual manera, de una mejor manera, siempre adaptada al propósito de lo que se quiera representar. </p>
<p>En la actualidad, tecnologías como JSON o YAML están tomando auge en el área de intercambio de la información.  Estos tiene objetivos específicos, pero su mayor ventaja es que describen la información más HUMAN-FRIENDLY, lo cual les proporciona un valor añadido. </p>
<p>Un claro ejemplo de ello se ilustra en el siguiente cuadro: </p>
<div class="codigo">
<pre>
# En XML
&lt;?xml version = "1.0"?&gt;
&lt;article name = "L5"&gt;
      &lt;chapter number = "1" title = "Definición del Modelo Multinivel"&gt;
            &lt;subtitle&gt;Ventajas&lt;/subtitle&gt;
            &lt;subtitle&gt;Desventajas&lt;/subtitle&gt;
            &lt;subtitle&gt;Oportunidades&lt;/subtitle&gt;
            &lt;subtitle&gt;Retos&lt;/subtitle&gt;
      &lt;/chapter&gt;
&lt;/article&gt;
# En YAML
article: L5
chapter:
   - number: 1
   - title: Definición del Modelo Multinivel
  - subtitles: (Ventajas, Desventajas, Oportunidades, Retos)
</pre>
</div>
<p>Lo que si es importante de mencionar es que sea cual sea la tecnología a utilizar, el modelo sugiere que la salida, nunca sea en formato HTML/<a href="http://www.maestrosdelweb.com/editorial/haciaxhtml/">XHTML</a> y otro propio de las tecnologías utilizadas en los siguientes niveles.  Este punto es muy importante y es la base para la implementación del siguiente nivel.<br />
<a href="http://www.maestrosdelweb.com/util/mdw_nivel2l5.zip">Descargar ejemplo</a></p>
<h3>Lecturas relacionadas</h3>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a></li>
<li><a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</a></li>
</ul>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/logica-de-programacion-segundo-nivell5/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Modelado de datos e implementación de la base de datos (Primer Nivel: L5)</title>
		<link>http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/</link>
		<comments>http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 17:35:47 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/</guid>
		<description><![CDATA[El modelado de datos es uno de los elementos más importantes a la hora de iniciar el desarrollo de cualquier proyecto.  Esta es la estructura, sobre la que realmente reside la verdadera esencia de la aplicación.  Incluso determina si el proyecto va a cumplir con su verdadero objetivo. 
El modelado de datos es [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">El modelado de datos es uno de los elementos más importantes a la hora de iniciar el desarrollo de cualquier proyecto.  Esta es la estructura, sobre la que realmente reside la verdadera esencia de la aplicación.  Incluso determina si el proyecto va a cumplir con su verdadero objetivo. </span><span id="more-3200"></span></p>
<p>El modelado de datos es una técnica independiente de la implementación a la base de datos.  Esto es importante, porque la <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">metodología L5</a>, siempre busca que se saque el máximo provecho de diversas herramientas.  En particular, el esquema final y su implementación pueden sufrir cambios sin afectar de manera drástica la Lógica de Programación. </p>
<p>Uno de los puntos importantes que se deben indicar es que el modelado de los datos, debe ser llevado como una guía general.  Para los profesionales expertos, esto implica el desarrollo de los <strong>Diagramas de Entidades</strong> y del <strong>Modelo Entidad-Relación</strong>.  Independientemente de la metodología a utilizar, esta herramienta siempre será importante, para entender las relaciones entre las diversas entidades en la <strong>Base de Datos</strong>. </p>
<h3>Cómo definir el esquema de la Base de Datos </h3>
<p>Cuando definimos el <strong>Esquema de la Base de Datos</strong> estamos implementando en el lenguaje SQL del SGBD, el esquema de Modelado de Datos, anteriormente mencionado.  Es preciso notar que se define &#8220;en el lenguaje SQL del SGBD&#8221;, este punto es importante que sea ampliado.  Todos los SGBD, tienen diferencias finales en cuanto a la sintaxis que se maneja.   </p>
<p>Sabemos que SQL es uno solo y que por eso es estándar,  pero las diferentes distribuciones lo han implementado con ciertas variaciones.  Están variaciones, son una de las causas en que el modelo de desarrollo, ha separado el Modelado de los Datos, con la <strong>Lógica de Programación</strong>. </p>
<p>El esquema de la Base de Datos, debe a mi parecer ser definido en el lenguaje SQL de nuestro Sistema Gestor de Base de Datos.  La razón es básicamente sencilla: es más portable.  Si lo hiciésemos en una aplicación nativa para un sistema operativo en especial y tratáramos de implementarlo directamente en otro sistema, podríamos llegar a tener complicaciones. </p>
<p>Es importante destacar, que no se trata de realizar todas las instrucciones SQL, en herramientas como Bloc de Notas. Muchas herramientas que podamos utilizar, nos permitirán exportar nuestra implementación a un archivo, que contendrá la sintaxis SQL. Además, si que sería destacable que como <strong>Administradores Generales</strong> de la Base de Datos, conociésemos de la sintaxis misma del lenguaje.   </p>
<p>No es imperante que seamos unos gurus de la plataforma, pero siempre es importante que conozcamos los fundamentos.  Muchas de las funciones que al final implementemos, serán producto de nuestra investigación personal a través de foros donde se mencionen las soluciones a los diversos problemas o funciones nuevas que podamos utilizar. </p>
<h3>Herramientas que simplifican el trabajo</h3>
<p>Al final, si utilizamos una herramienta que nos simplifique el proceso de implementación, siempre será importante guardar un archivo, con las sentencias SQL generadas por la misma.  De hecho, con cada modificación debemos guardar una copia de respaldo. </p>
<p>Herramientas web como PHPMyAdmin, son muy importantes.  La implementación y las pruebas generalmente las realizaremos en un computador local y vía interfaz web, podremos hacer el cambio desde el mismo Servidor instantáneamente y transparente al usuario. </p>
<h3>Por qué optimizar </h3>
<p>Creo firmemente que la labor como desarrolladores es que los productos, superen las expectativas de nuestros clientes.  La optimización de la base de datos no escapa al proceso de optimización. </p>
<p>Un mal proceso de optimización a la Base de Datos, generará que el sistema sea inestable, poco fiable, con posibilidad de la información duplicada, lento para las transacciones, etc. Ahora bien, en el Modelo de Desarrollo la razón por la cual es necesario optimizar, es por que el modelo ve que cada aplicación no está exenta a ser actualizada.   </p>
<p>Las aplicaciones, entornos de desarrollo y tecnologías van cambiando considerablemente.  No podemos pretender que nuestro proyecto, siga funcionando por la eternidad en la versión del sistema en la que lo dejamos.  El hacer tal cosa, solamente demostrará una mala calidad de trabajo y poca visión sobre el futuro de nuestra aplicación.   </p>
<p>Los SGBD no cambian tan vertiginosamente, como otras tecnologías.  Por lo cual, optimizar nos permitirá hacer un sistema adaptable, que utilice lo mejor del sistema y que pueda escalar sin problemas, dentro de un corto plazo, cuando veamos que la nueva versión, cumple y sobrepasa nuestras espectativas.  Debemos siempre estar abiertos al cambio, pero utilizar lo mejor que haya en el momento presente. </p>
<p>En concepto de desarrollo escalado como cambiar de tecnología de BD sin alterar el modelo. Hasta este momento, muchos lectores preguntarán, por qué hacer tanto énfasis en cambiar de tecnologías.  Uno de los motivos es la escalabilidad. </p>
<h3>La importancia de la demanda</h3>
<p>Dentro de los SGBD, existen muchas soluciones que nos brindan diferentes capacidades y características.  Es muy común en la actualidad que los entornos de trabajo, se desarrollen para cumplir con metas a corto plazo y a medida que la aplicación, su entorno de trabajo y sus usuarios va en aumento; la aplicación debe responder a esas demandas, brindando mayor soporte a una mayor demanda de servicios. </p>
<p>Ahora bien, es probable que ante esta demanda de nuevos servicios, nuestro SGBD actual se quede corto en prestaciones y debamos mudar a otro gestor, sea por un mejor rendimiento a mayores transacciones, más requerimientos de seguridad, cambio de hardware y proveedor de software, etc. </p>
<p>Una aplicación, atada por completo a una sola plataforma, está condenada a desaparecer junto con la misma.  Como desarrolladores, debemos ser previsores de tales acontecimientos, haciendo sistemas escalables.   </p>
<p>Cuando separamos el modelado de Datos,  estamos relegando al SGBD de turno, las operaciones de manipulación, control y actualización de los datos.  Todos los sistemas actuales, ofrecen capacidades de programación de vistas, funciones, procedimientos y los tan famosos triggers. </p>
<p>Es importante que si utilizamos un sistema de desarrollo de este tipo, pensemos siempre en la generalización de su uso.  La lógica de programación depende del modelado de Datos.  Al centralizar las operaciones de mantenimiento de la información en el SGBD, y separar las funciones especiales que solo puede realizar el lenguaje, estamos independizando la Base de Datos del lenguaje de Scripting. </p>
<p>Si cambiamos de plataforma, y conservamos nuestro SGBD, la aplicación seguirá funcionando de la misma manera.  Sea que cambiemos de lenguaje de programación, que utilicemos varios al mismo tiempo o que migremos a la versión posterior, siempre el modelo se mantendrá intacto. </p>
<p>Sería una práctica interesante, la de separar en un archivo en formato XML o de otro tipo, las diferentes consultas que generamos a la base de datos.  A si, el lenguaje podría ir a leerlas.  Así separamos y centralizamos aún más.  Está practica sería de mayor importancia si combinamos tecnologías.  Un esquema podría ser: </p>
<div class="codigo">
<pre>
&lt;?xml version = "1.0" ?&gt;
&lt;database engine = "mysql" version = "5.0"&gt;
      &lt;section type = "views"&gt;
            &lt;view id = "72A35SRT"&gt; SELECT * FROM `_employees`&lt;/view&gt;
            &lt;view id = "ERT56QS8"&gt; SELECT `email` FROM `_clients`&lt;/view&gt;
      &lt;/section&gt;
      &lt;section type = "functions"&gt;
            &lt;function id = "8954DAER" success = "7946"&gt;
                  SELECT `user_exists`('%username%')
            &lt;/function&gt;
      &lt;/section&gt;
&lt;/database&gt;
</pre>
</div>
<p>Centramos en un archivo todos los <strong>Queries</strong>, identificándolos con un ID.  Esto podría conllevar un mayor procesamiento para el servidor, pero si optimizamos correctamente, podríamos llegar a mejor la respuesta, con un sistema de cache interno.  El archivo podría ser accedido por cualquier script, debemos tener un cuidado especial para evitar la irrupción de terceros. </p>
<h3>
Manejo y optimización del almacenamiento y las funciones de gestión del contenido </h3>
<p>Consideremos un ejemplo sencillo: imaginemos que estamos desarrollando una aplicación y que un procedimiento se debe realizar en varias partes de nuestro código.  Que sería lo más conveniente a realizar:  copiar una y otra vez el bloque de instrucciones o crear una sola función o procedimiento. </p>
<p>Esta misma situación ocurre, cuando programamos y ejecutamos consultas a la Base de Datos.  Es increíble como nuestro código empieza a crecer en ambas direcciones de nuestro editor.  Además, no solamente debemos fijarnos en ese aspecto.   </p>
<p>Al mandar consultas desde el lenguaje de Scripting a la Base de Datos, el SGBD, debe interpretarla y ejecutarla.  Obviamente, esto lo hace en milésimas de segundos.  Pero, cuando hablamos de alrededor de mil consultas o más por segundo, el tiempo que se tarda por cada transacción es vital. </p>
<h3>¿Cómo podemos solucionar este inconveniente y hacer que nuestra base de datos responda en un mejor tiempo? </h3>
<p>La respuesta es utilizar procedimientos, funciones y vistas.  Al estar dentro de la base de datos, estos suelen ser más rápidos, por que el SGBD, lo ha interpretado, depurado y optimizado con anterioridad, lo cual hace que las consultas sean más rápidas. </p>
<div class="codigo">
<pre>
La consulta general es:
INSERT INTO `lands`(`land_id`, `landname`, `area`, `lang`)
            VALUES ("gt", "Guatemala", "108880", "es"); 

Y cambiaría a: 

SELECT `addland`("gt", "Guatemala", "108880", "es")
&lt;-- </pre>
</div>
<p>En lugar de mandar un query de inserción a una base de datos desde el script, es más sencillo, mandar los parámetros a la función almacenada en el SGBD.  Dentro de la función está la consulta ya compilado.  </p>
<p>Además, al centralizar las consultas, cualquier cambio hecho, alterará a todos los procedimientos del lado del script que lo utilicen.  Esto ahorrará tiempo de desarrollo y mejorará el mantenimiento de la aplicación en su totalidad. </p>
<h3>Conclusiones</h3>
<p>Una buena separación de los componentes permitirá que nos enfoquemos en cada área de manera adecuada.  Cuando tengamos que dar mantenimiento, iremos al punto exacto de la aplicación.  Una buena estructura, generará mejores resultados y mayor rendimiento. </p>
<p>En el próximo artículo, veremos como debemos implementar la parte de programación.  Aprenderemos más acerca de la optimización de la aplicación y comentaremos acerca de como se vincularía la tecnología del servidor, con la tecnología del explorador. </p>
<p><a href="http://www.maestrosdelweb.com/util/modeladodedatos.txt">Descargar el ejemplo</a>.</p>
<h3>Lecturas relacionadas:</h3>
<ul>
<li><a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Desarrollo multinivel para aplicaciones basadas en el web</a></li>
</ul</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/modelado-de-datos-e-implementacion-de-la-base-de-datos-primer-nivel-l5/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
		<item>
		<title>Desarrollo multinivel para aplicaciones basadas en el web</title>
		<link>http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/</link>
		<comments>http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 07:00:37 +0000</pubDate>
		<dc:creator>Juan Manuel Lemus</dc:creator>
				<category><![CDATA[Administración de proyectos]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Editorial]]></category>

		<guid isPermaLink="false">http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/</guid>
		<description><![CDATA[Desde la programación procedimental hasta el Modelo de desarrollo MVC (Model, View &#038; Controller), las diferentes metodologías de desarrollo han evolucionado, conservando un fin común:  la total integración de componentes reutilizables y la separación de los niveles de programación.  
Existen bastantes métodos de desarrollo multinivel en la actualidad.  Muchos fueron pensados originalmente [...]]]></description>
			<content:encoded><![CDATA[<p><span class="intro">Desde la programación procedimental hasta el Modelo de desarrollo MVC (Model, View &#038; Controller), las diferentes metodologías de desarrollo han evolucionado, conservando un fin común:  la total integración de componentes reutilizables y la separación de los niveles de programación.  </span><span id="more-3130"></span></p>
<p>Existen bastantes métodos de desarrollo multinivel en la actualidad.  Muchos fueron pensados originalmente para la programación de aplicaciones tradicionales orientadas a un tipo de Sistema Operativo en particular.  </p>
<p>Posteriormente, fueron adaptadas para su implementación en entornos de desarrollo orientados al web.  Sin duda, algunos de ellos son eficaces en cualquier plataforma.  Pero el hecho de que hayan sido concebidas primeramente para entornos tradicionales, no permite explotar el potencial que se tiene, al programar para la web.</p>
<h3>El modelo MVC</h3>
<p>El modelo con mayor auge en la actualidad es el modelo MVC.  Sobre este modelo existe una serie de implementaciones como <a href="http://www.maestrosdelweb.com/editorial/rubyonrails/">Ruby on Rails</a> o <a href="http://www.maestrosdelweb.com/editorial/los-frameworks-de-php-agilizan-tu-trabajo/">Cake PHP</a>.  La ventaja fundamental del modelo es la separación de la lógica de programación en tres partes:  <strong>Modelo, Vista y Controlador</strong>.  </p>
<p>Según experiencias de programadores que han utilizado este modelo de desarrollo, el mismo se adapta perfectamente para proyectos pequeños, pero a medida que la complejidad del proyecto se incrementa, cada vez es más difícil llevar una integración perfecta sin afectar las demás estructuras.  </p>
<p>Puede resultar bastante complicado seguir con el  desarrollo de una aplicación con un nivel de complejidad mayor, sino contamos con la adecuada experiencia en el manejo del concepto.  </p>
<p>En lo particular, veo un serio problema en esta situación, además de que el uso del modelo, utilizando cualquier tecnología como Ruby on Rails u otros <a href="http://www.maestrosdelweb.com/editorial/los-frameworks-de-php-agilizan-tu-trabajo/">frameworks  de desarrollo</a>, hasta por completo nuestro proyecto a tal o cual tecnología.  </p>
<p>Esto puede ser un serio problema, si contamos con que la tendencia de nuevas herramientas mucho más fáciles de utilizar, están siendo desarrolladas continuamente y sus variantes son implementadas, como paquetes independientes de cualquier plataforma.</p>
<p>Hay mucho potencial en cualquier tecnología orientada al desarrollo de aplicaciones para Internet.  Existen bastantes lenguajes de scripting, en la actualidad y todos brindan una excelente solución para un rango determinado de necesidades. ¿Por qué no utilizar las mejores características de cada lenguaje para el desarrollo de aplicaciones?</p>
<h3>El modelo L5</h3>
<p>El modelo L5, como le he llamado, es un modelo orientado, completamente, al desarrollo de aplicaciones para Internet. Este modelo no es una derivación del modelo de desarrollo MVC.  </p>
<p>Es una división completa de las partes de integran el proceso de realización de cualquier proyecto orientado a <a href="http://www.maestrosdelweb.com/editorial/usointernet/">Internet</a> en el cual, la división la constituye las ramas de tecnologías que intervienen en una aplicación orientada a Internet.  Así, el modelo se divide en 5 grandes áreas:</p>
<ul>
<li>Modelado de Datos</li>
<li>Lógica de Programación</li>
<li>Estructura de Contenido</li>
<li>Diseño de la Interfaz</li>
<li>Maquetación e Implementación</li>
</ul>
<p>Estos cinco puntos son el pilar de este modelo.  Adicionalmente, cada uno tiene un grado de división que puede ser propuesto por el equipo de desarrollo, dependiendo de la complejidad del proyecto. </p>
<p>Aquí no está incluido la fase de Análisis y la definición de Metas que es obvio que necesita existir para que estos puntos puedan llevarse a cabo; la guía sobre la que descansa cualquier proyecto de desarrollo.</p>
<p>La justificación de separar el modelo en cinco entidades, es bastante sencilla.  Consideremos el desarrollo tradicional de un proyecto sencillo como por ejemplo un sitio de una pequeña empresa con un administrador de contenidos.</p>
<h3>Trabajando con un administrador de contenidos</h3>
<p>Si contamos con un administrador de contenidos, lo más común es que usemos una implementación de Base de Datos (MySQL, Oracle, SQL Server), relacionada con el contenido y accedida a través del lenguaje de scripting que hemos implementado (<a href="http://www.maestrosdelweb.com/editorial/phpintro/">PHP</a>, ASP.Net, Java, Ruby).  </p>
<p>Debemos contar con un diseño de interfaz y el producto final es la página vista en el explorador (<a href="http://www.maestrosdelweb.com/editorial/htmlhis/">HTML</a>, <a href="http://www.maestrosdelweb.com/editorial/introcss/">CSS</a>, <a href="http://www.maestrosdelweb.com/editorial/%C2%BFque-es-javascript/">JavaScript</a>).  Si nos damos cuenta, existe varias tecnologías involucradas en el producto final.  Todas con una tarea específica.  Este modelo es aplicable en cualquier nivel de definición y complejidad de un proyecto.  </p>
<p>El punto de inicio de cada proyecto se centra en la definición del modelo de la Base de Datos y del modelo de relaciones de los datos.  Esta filosofía se enfoca en el hecho de que separar cada uno de los puntos mencionados, proporcionará el verdadero dinamismo que debe tener una aplicación.</p>
<p>Por ejemplo: en el apartado de la definición de la base de datos, relegamos por completo el manejo del almacenamiento y las funciones de manejo de datos al SGBD, sea cual sea.  Con esto nos garantizamos un rendimiento absoluto y un máximo aprovechamiento.  </p>
<p>También, el punto que se quiere destacar es que cada uno de los elementos y tecnologías que integran el modelo puede ser reemplazo sin que esto afecte por completo los procesos subsiguientes. </p>
<h3>La programación adaptada a módulos</h3>
<p>Para el segundo punto, la programación, elegimos tecnologías que se adapten a cada módulo que se desarrolle.  Con esto podemos aprovechar al máximo el uso de una tecnología para una parte del esquema y utilizar diferentes tecnologías dentro del proyecto,  con lo cual, cada modulo se puede hacer de una manera optima, y sencilla por que estamos utilizando la mejor tecnología para su desarrollo.</p>
<p>La Estructura de Contenido es uno de los más importantes y por así decirlo el punto de inflexión dentro del desarrollo.  Aquí generamos un esquema de modelado de contenido.  Es decir, en el desarrollo de la base de datos, optimizamos el manejo de la información, en el área de programación optimizamos los procesos y construimos el punto de unión entre el contenido y el almacenamiento.</p>
<p>En la programación no debemos generar consultas completas a la base de datos (sino llamadas a funciones y vistas almacenados en el SGBD).  Las salidas deben estar en un formato estándar entre tecnologías como <a href="http://www.maestrosdelweb.com/editorial/flashxml/">XML</a>.</p>
<p>El contenido debe estar en un formato estándar.   Esto permitirá su manipulación a cualquier dispositivo. El Diseño Gráfico de la Interfaz es la definición de plantillas para el diseño general del sitio y el último punto es la maquetación general del sitio con la integración y la interpretación del contenido generado. Este aspecto también es reemplazable. En si, todos los puntos son reemplazables y escalables.</p>
<h3>Diseño inicial:</h3>
<ul>
<li>MySQL</li>
<li>PHP</li>
<li>XML</li>
<li>Diseño a Tres Columnas</li>
<li>XHTML 1</li>
</ul>
<h3>Reemplazar por:</h3>
<ul>
<li>SQL Server</li>
<li>PHP</li>
<li>XML</li>
<li>Diseño a Tres Columnas</li>
<li>XHTML 1</li>
</ul>
<h3>Actualización</h3>
<p>Sin cambiar toda la estructura, en una nueva actualización podríamos quedar como:</p>
<ul>
<li>SQL Server</li>
<li>ASP.Net</li>
<li>XML</li>
<li>HTML 5</li>
</ul>
<p>Un cambio radical, pero el modelo sigue bastante intacto, como al principio.</p>
<h3>Ventajas</h3>
<p>Son muchas las ventajas que se desprenden de realizar un proyecto basado en esta metodología. El modelo es fácilmente utilizable en proyectos sencillos y complejos.  Simplemente bastará con saber identificar de manera clara a los actores dentro del proceso y definir las funciones.  </p>
<p>Muchas soluciones de terceros que podamos utilizar pueden ser fácilmente agregadas al proyectos dentro del nivel correspondiente sin afectar el desarrollo de los demás niveles. La combinación de tecnologías puede ser una gran ventaja.</p>
<p>Muchas de las soluciones realmente optimas para nuestro proyecto, si son de terceros, podrían no estar disponibles en nuestro lenguaje de scripting principal, por lo cual su utilización sería imposible.</p>
<p>Pero, no necesariamente debemos utilizar múltiples tecnologías dentro del proyecto.  Si el proyecto no lo requiere o contamos con todos los elementos disponibles, podremos fácilmente, elegir por una solución.</p>
<p>Lo importante del desarrollo es que el producto final, cumpla con las necesidades requeridas.  La optimización es muy importante.  El modelo L5, hace mucho énfasis en ello.  Al final, de cada desarrollo se pretenderá que hayamos construido una estructura de programación estable y sobre todo reutilizable. </p>
<p>Podemos dividir asimismo, los desarrollos de sub-módulos por clases, módulos y paquetes completos, con sus características dependencias.  Siempre la estructura es interdependiente.  El mayor reto sería crear una base sólida multinivel.</p>
<h3>Desventajas</h3>
<p>Las desventajas aparentes están relacionadas, dentro del proyecto en si.  El utilizar múltiples tecnologías, demandará un mayor grado de conocimiento por parte del grupo de desarrolladores.  Recordemos, que este punto no es necesario, pero si muy útil a la hora de hacer aplicaciones escalables.</p>
<p>La metodología demanda que el equipo esté conformado por profesionales con mayor conocimiento en todas las tecnologías: desde la implementación de la Base de Datos, hasta la Maquetación.</p>
<p>El otro punto, consistirá en que posiblemente necesitemos mayores recursos para poder diseñar un proyecto. Muchos, podríamos tener un proyecto publicado en algún servidor compartido, y esto podría llegar a ser desventajoso, debido el grado de personalización y requerimientos que podríamos llegar a alcanzar dentro de la aplicación.</p>
<h3>Oportunidades</h3>
<p>Todos las metodologías, brindan un sin número de oportunidades.  Algunas son únicas para cada método.  </p>
<p>Entre las oportunidades destacan un mejor control dentro del proyecto, sencillez de actualización y de proceso de depuración y mantenimiento, y que, preferiblemente, al final de cada desarrollo, contaremos con mejores herramientas, reutilizables en posteriores proyectos o en la escalabilidad de antiguos desarrollos. </p>
<h3>Retos</h3>
<p>Si somos profesionales en tal o cual filosofía de desarrollo, siempre el cambio de perspectiva, nos causará cierto grado de incertidumbre y malestar.  Es normal.  Uno de los retos para los nuevos emprendedores, será la tentación de volver a las viejas prácticas.  El sistema, demandará cierto grado de disciplina.</p>
<p>Si no nos guiamos dentro de los parámetros de desarrollo, podríamos estropear el proceso.  Talvez, no lo veamos dentro del producto final, pero en un futuro, podremos toparnos con serios problemas dentro de la estructura de la aplicación.  La optimización, puede ser un proceso laborioso, pero debemos recordar que al final, este punto es vital para cualquier aspecto. </p>
<p>Las tecnologías en el Internet, están cambiando constantemente.  Como anécdota personal, antes de la redacción de este artículo, recién me entero de otro lenguaje de programación, mucho más rápido que ofrece muchas oportunidades.</p>
<p>Realizar una aplicación que sea optima para el presente y que pueda ser sujeta de grandes cambios, dentro del ciclo de funcionamiento, puede ser un gran reto, pero ciertamente, como equipo o como profesional independiente, nos brindará más de una satisfacción.</p>
<p>Te invitamos a que estés pendiente de la serie de artículos relacionados con el desarrollo multinivel para aplicaciones basadas en el web, que estaremos publicando durante las siguientes semanas.</p>
<hr /><p style="height: 64px;"><img src="http://www.maestrosdelweb.com/images/autores/332-11.jpg" alt="Juan Manuel Lemus" class="avatar" style="float:left;padding:0 5px" /> <strong>Juan Manuel Lemus</strong> para <a href="http://www.maestrosdelweb.com">Maestros del Web</a>.<br /><a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/#respond">Agrega tu comentario</a> | <a href="http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/">Enlace permanente</a> al artículo</p><hr style="clear: both;"/>
		<p><strong>Síguenos en:</strong> <img src="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" style="vertical-align:middle;"> <a href="http://twitter.com/maestros">@maestros</a> | <img style="vertical-align:middle;" src="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png"> <a href="http://www.facebook.com/pages/Maestros-del-Web/5833493986">Fan page</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.maestrosdelweb.com/editorial/desarrollo-multinivel-para-aplicaciones-basadas-en-el-web/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
	
		<media:thumbnail url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" />
		<media:content url="http://www.maestrosdelweb.com/images/autores/332-11.jpg" medium="image">
			<media:title type="html">Juan Manuel Lemus</media:title>
		</media:content>
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/twitter.png" medium="image" />
		<media:content url="http://www.maestrosdelweb.com/diseno/imagenes/facebook.png" medium="image" />
	</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1269084119.204 seconds -->
