<?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/"
	>

<channel>
	<title>Arath Velázquez</title>
	<atom:link href="http://www.arathvelazquez.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.arathvelazquez.com</link>
	<description>Desarrollando en Web</description>
	<lastBuildDate>Thu, 12 May 2011 05:05:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>¿Por qué decidir usar CouchDB?</title>
		<link>http://www.arathvelazquez.com/2011/05/por-que-decidir-usar-couchdb/</link>
		<comments>http://www.arathvelazquez.com/2011/05/por-que-decidir-usar-couchdb/#comments</comments>
		<pubDate>Thu, 12 May 2011 04:57:24 +0000</pubDate>
		<dc:creator>Arath Velázquez</dc:creator>
				<category><![CDATA[CouchDB]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[NoSQL]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=260</guid>
		<description><![CDATA[Hace unas semanas, platicando con un posible mentor sobre un nuevo desarrollo en el que estoy trabajando, salió esa pregunta; ¿Por qué decidiste usar CouchDB si nunca lo has usado y ...]]></description>
			<content:encoded><![CDATA[<p>Hace unas semanas, platicando con un posible mentor sobre un nuevo desarrollo en el que estoy trabajando, salió esa pregunta;</p>
<blockquote><p>¿Por qué decidiste usar <a href="http://couchdb.apache.org/index.html">CouchDB</a> si nunca lo has usado y por qué no utilizar MySQL?</p></blockquote>
<p>Lo primero que se me vino a la mente fue:<br />
 – Porque quiero aprender CouchDB – </p>
<p>Esa fue la primera parte de mi respuesta y al parecer, no fue una respuesta muy satisfactoria.</p>
<p>Lo que sucede es que las personas que se quieren involucrar en los proyectos como mentores, inversionistas y/o cofundadores saben que todo es un riesgo, pero ellos saben y quieren trabajar con el riesgo de hacer crecer un proyecto, no con el hecho de que el proyecto no se complete por deficiencias técnicas o incluso, que ni siquiera arranque por las mismas razones.</p>
<blockquote><p>&#8220;¿Cómo apoyarte, si es posible que ni arranques el proyecto porque nunca has usado tal tecnología?&#8221;</p></blockquote>
<p>Y se entiende perfectamente, no van a apoyarte y a invertir su tiempo para que tú aprendas, así no funcionan los “negocios”. </p>
<p>Entonces tuve que dar más solidez a mi respuesta agregando algunos puntos (todos debatibles):<br />
<em><br />
       -	La idea del desarrollo es que sea una aplicación o servicio escalable.<br/><br />
       -	No tienes tablas de relaciones ni esquemas como cuando usas RDBMS y por consiguiente, evitas hacer demasiados “Joins” entre las tablas.<br/><br />
       -	En teoría, si algo le pasa al sistema es fácil recuperar los datos.<br/><br />
       -	La replicación de los sistemas es bastante sencilla.<br/><br />
       -	Simplifica en cierta forma, nuestro diseño de base de datos.<br/><br />
</em></p>
<p>Sobre los puntos anteriores, me gustaría agregar que solo expresan de manera sencilla unas de las virtudes (por llamarlas de alguna manera) de las bases de datos NoSQL como en este caso CouchDB, pero esto no las hacen ni mejores ni peores que las relacionales.</p>
<p>Obviamente, saber las ventajas no garantiza el éxito, pero creo que el punto a favor es que si todo sale bien al utilizar nuevas tecnologías, <em>iremos un paso adelante y habremos superado uno de primeros obstáculos de muchos que nos enfrentaremos en nuestros futuros proyectos</em>.</p>
<p>Más adelante espero hacer un análisis más detallado de todas las prestaciones que ofrecen las bases de datos no relacionales, como el manejo de los datos basados en JSON, cómo es el tipo de base de datos orientadas a documentos y sobre todo, lo que más problema le dará a los que venimos de bases de datos relaciones&#8230; como utilizar e implementar en código Map/Reduce.</p>
<blockquote><p><strong><em>It is not the strongest of the species that survives, nor the most intelligent. It is the one that is most adaptable to change.</em></strong></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2011/05/por-que-decidir-usar-couchdb/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>¿Un inicio como cualquier otro?</title>
		<link>http://www.arathvelazquez.com/2011/03/un-inicio-como-cualquier-otro/</link>
		<comments>http://www.arathvelazquez.com/2011/03/un-inicio-como-cualquier-otro/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 18:24:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Desde Cero]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Libros Digitales]]></category>
		<category><![CDATA[Sitios Web]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=240</guid>
		<description><![CDATA[Desde hace algunos meses he tenido en mente realizar un nuevo sitio web que sirva como herramienta y esté enfocada principalmente a las actividades que involucran a los desarrollodores y ...]]></description>
			<content:encoded><![CDATA[<p><br/><br />
Desde hace algunos meses he tenido en mente realizar un nuevo sitio web que sirva como herramienta y esté enfocada principalmente a las actividades que involucran a los desarrollodores y diseñadores Web. </p>
<p>La idea de crear esta nueva herramienta o sitio, sinceramente no me quitaba el sueño, era algo que quería hacer por aprender, por plasmar un poco de lo que me gusta hacer y contribuirle un poco al ecosistema digital donde habito.</p>
<p>La idea es algo que ya existe, no intento inventar ningún hilo negro ni de ningún otro color, de hecho existen varios sitios similares. Sin embargo, estos sitios existentes son para un mercado distinto y creo que en ese sentido, es donde esta herramienta podría tener un buen comienzo cuando salga a la luz. </p>
<p>Como comentaba, la idea NO me quitaba el sueño, pero siempre me estuvo dando vueltas en la cabeza, hablaba de cómo debería de funcionar, que contendría y hasta los colores. Hubo momentos en los que mi Novia me escuchaba y me compartía algunos puntos de vista, pero en una ocasión me dijo &#8211; <i>son buenas ideas, ¡hazlo! ¿Cuándo empiezas?</i> </p>
<p>Pensaba que me decía eso para que la dejara de atosigar con mis platicas, pero en realidad era lo que faltaba&#8230; <i>empezar y ¡ya!</i>.</p>
<p>Desde esa tarde le he dedicado bastante tiempo a la lectura de blogs y algunos libros y a la par he empezado a crear el sitio. Empecé con el diseño, un diseño sencillo y limpio. En estos momentos que escribo esto, ya tengo maquetado el index en HTML y CSS y ya he creado las principales tablas de mi base de datos. También ya estoy creando mi Modelo con mis consultas y ya estoy &#8220;imprimiendo&#8221; en la Vista algunos valores obtenidos de la base datos. Lo cual presiento que es un buen comienzo y por eso quise compartirlo en el blog.</p>
<p>Afortunadamente, tengo amigos que son desarrolladores o están en el área. Les he comentado lo que estoy haciendo, les he mostrado algunas pantallas y se les ha hecho interesante la manera en que el sitio pudiera contribuir. Esto me ha reafirmado que era preciso crearlo.</p>
<h3>Mis lecturas</h3>
<p>Como les comentaba hace un momento, me he dedicado a leer algunos libros y bastantes blogs. Un libro que la verdad recomiendo bastante para los que empezamos con esto de las WebApps o WebServices es el de &#8220;Getting Real&#8221; que por cierto,  <a href=" http://gettingreal.37signals.com/toc.php">aquí lo pueden encontrar en línea.</a>.</p>
<p>Este libro, que aparte es una guía, la verdad es muy digerible, las páginas no están atiborradas de texto, solo tienen lo justamente necesario. Lo acabo de terminar y desde las primeras páginas me sentí reflejado y aunque algunas ideas llegan a ser muy poco ortodoxas e ir en contra de lo que uno normalmente piensa o lo que uno comúnmente hace, como decir que no inicies tu <a href="http://es.wikipedia.org/wiki/Compa%C3%B1%C3%ADa_startup">Startup</a> con inversionistas, sino con tu propio capital para no perder la pasión&#8230;<br />
<a href="http://gettingreal.37signals.com/ch02_Fund_Yourself.php"><br />
<blockquote>Ya que la pasión no viene con etiqueta de precio</p></blockquote>
<p></a> </p>
<p>O decir que todas las peticiones para mejorar sus aplicaciones, <a href="http://gettingreal.37signals.com/ch05_Forget_Feature_Requests.php">las leen, las tiran y se olvidan de ellas</a>, estas ideas tienen una razón de ser y los de 37 Signals lo explican muy bien.</p>
<p>Respecto a los blogs, pues en realidad hay muchísima información relacionada con las nuevas Startups o desarrollos.</p>
<p>Por ejemplo, hace días encontré que muchos sitios como Twitter, Facebook y Digg entre otros están migrando a NoSQL, lo cual cambia todo el concepto de las base de datos relacionales y que <a href="http://bret.appspot.com/entry/how-friendfeed-uses-mysql">FriendFeed sigue usando MySQL pero sin ningún esquema de base de datos ni relaciones inherentes entre las tablas</a>.</p>
<p>Otro <a href="http://www.philwhln.com/quoras-technology-examined">artículo</a>, que en lo personal me llamó muchísimo la atención (lo imprimí para leerlo con calma) por la manera que expone las tecnologías y como integraron todo en una de las últimas Startups llamada <a href="http://www.quora.com">Quora</a>.</p>
<p>Como pueden ver, estos artículos no son nada extensos y aportan demasiado a la causa. </p>
<blockquote><p>Si estás por iniciar un desarrollo web o negocio,  haz que la lectura sea tu mejor socio.</p></blockquote>
<p>Entre mis bookmarks tengo otros artículos pendientes  y otros que sigo digiriendo y que con calma iré leyendo.</p>
<h3>La motivación sigue siendo el cliché más importante</h3>
<p>Hasta este momento, quiero pensar que voy bien. Le he dedicado tiempo al proyecto en mis ratos libres y otros no tan libres en la casa, he aprovechado para leer en el trabajo (si el tiempo lo permite) y he avanzado poco a poco.  </p>
<p>Desde el inicio, la idea era materializar el concepto y creo que inicie bien, como decimos, <i>lento pero seguro</i>.  En lo que llevo, no hay día que no aprenda algo nuevo y eso me tiene motivado, creo que “La motivación” sigue siendo uno de los recursos más importantes cuando estamos en esto de crear o materializar nuestras ideas. Pero, obviamente todos empezamos así o ¿no? </p>
<p>Todos los proyectos, incluyendo hasta por los que nos pagan, deben tener un factor común que es la motivación. Sin este catalizador, las situaciones se pueden hacer más pesadas de lo que ya son, los retos del principio se hacen obstáculos imposibles, la intensidad y entrega se ve mermada por cualquier desavenencia y se puede llegar a estropear todo el proyecto. Conozco en experiencia propia de muchos proyectos que comenzaron de la misma forma y al final solo quedaron en eso, en un comienzo. </p>
<p>Entonces, lo que llevo hecho y lo que he empezado es “¿Un inicio como cualquier otro?”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2011/03/un-inicio-como-cualquier-otro/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Wireframes, una ilustración de nuestras páginas Web.</title>
		<link>http://www.arathvelazquez.com/2010/11/wireframes-una-ilustracion-de-nuestras-paginas-web/</link>
		<comments>http://www.arathvelazquez.com/2010/11/wireframes-una-ilustracion-de-nuestras-paginas-web/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 07:21:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Desde Cero]]></category>
		<category><![CDATA[Freelancing]]></category>
		<category><![CDATA[Sitios Web]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=218</guid>
		<description><![CDATA[Los proyectos web, como cualquier otro proyecto, tiene diferentes etapas. Una de las etapas más importantes y que determinará un gran porcentaje de éxito, es la planeación. Aquí se analizan ...]]></description>
			<content:encoded><![CDATA[<p>Los proyectos web, como cualquier otro proyecto, tiene diferentes etapas. Una de las etapas más importantes y que determinará un gran porcentaje de éxito, es la planeación. Aquí se analizan los requerimientos, se busca entender y resolver las necesidades del proyecto y se hace una investigación general del alcance del mismo.<br />
<br/><br />
Como parte de la planeación, una vez que tenemos claras las necesidades y características del proyecto, podemos &#8220;materializar&#8221; nuestra página con <strong>Wireframes</strong>.<br />
<br/><br />
Un wireframe, es una ilustración o un dibujo donde se plasma y sugiere la estructura del sitio y se muestra de una manera muy general el posible contenido, las funcionalidades e incluso algunos menús y links. Muchas veces podemos empezar haciendo un sketch en una servilleta o en una hoja de papel y a partir de ahí utilizar algún software para crear nuestros wireframes.</p>
<blockquote><p>Los wireframes, son básicamente ilustraciones que nos muestran el esqueleto de una página web.</p></blockquote>
<p>La siguiente imagen es un wireframe de la estructura general de wordpress (click en imagen, para ver en tamaño real).</p>
<p><a href="http://www.arathvelazquez.com/wp-content/uploads/2010/11/wireframe_wordpress.png"><img class="aligncenter size-full wp-image-219" title="wireframe_wordpress" src="http://www.arathvelazquez.com/wp-content/uploads/2010/11/wireframe_wordpress.png" alt="" width="487" height="617" /></a></p>
<p>El wireframe anterior, lo creé (como una prueba de un posible diseño) con una herramienta llamada Balsamiq. La herramienta cuenta con una aplicación instalable (creada con Adobe Air) y una aplicación que funciona desde el mismo navegador de Internet (<a title="Probar Balsamiq" href="http://builds.balsamiq.com/b/mockups-web-demo/" target="_blank">Ir a aplicación Web</a>). Esta última opción me parece bastante interesante, ya que no tenemos que instalar nada extra ni registrarnos.<br />
<br/><br />
Obviamente, podemos encontrar infinidad de herramientas que nos permiten crear Wireframes a partir de sketches, pero esta me pareció excelente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/11/wireframes-una-ilustracion-de-nuestras-paginas-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extensión de Chrome para quitar el Who to follow &#8211; Sin configurar nada</title>
		<link>http://www.arathvelazquez.com/2010/08/extension-chrome-quitar-el-who-to-follow/</link>
		<comments>http://www.arathvelazquez.com/2010/08/extension-chrome-quitar-el-who-to-follow/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 07:41:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Extensiones]]></category>
		<category><![CDATA[Google Chome]]></category>
		<category><![CDATA[Sitios Web]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=209</guid>
		<description><![CDATA[Si eres usuario de twitter y lo has usado últimamente desde la interfaz Web, habrás notado que lanzaron el &#8220;Who to follow&#8221;. El cual, mediante un algoritmo te sugiere a quienes podrías seguir&#8230; si, ...]]></description>
			<content:encoded><![CDATA[<p>Si eres usuario de twitter y lo has usado últimamente desde la interfaz Web, habrás notado que lanzaron el &#8220;Who to follow&#8221;. El cual, mediante un algoritmo te sugiere a quienes podrías seguir&#8230; si, igual que en Facebook.</p>
<p>En lo personal, esa función no debió ser lanzada sin tener los filtros necesarios, dado que muchas de las recomendaciones, son personas a las que había dejado de seguir e incluso, a personas que tenias bloqueadas.</p>
<p>Como todo desarrollador (y geek), quise crear mi propia extensión para Chrome, dado que es mi navegador por excelencia y también por que ya tengo algo de experiencia con <a href="http://www.arathvelazquez.com/2010/07/primera-extension-para-chrome/" target="_blank">extensiones para Chrome</a>.</p>
<p>La extensión la puedes descargar desde aquí:</p>
<p align="center"><a href="http://www.arathvelazquez.com/tutos/chromeExtension/index.php?descarga=nofollow"><br />
Descarga la extensión [CRX]</a></p>
<p>La diferencia que vas a encontrar con esta extensión, es que no necesitas configurar nada y no necesitas otra extensión aparte.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/08/extension-chrome-quitar-el-who-to-follow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>9 libros muy útiles y para descargar sobre Diseño Web</title>
		<link>http://www.arathvelazquez.com/2010/07/9-libros-diseno-web-para-descarga/</link>
		<comments>http://www.arathvelazquez.com/2010/07/9-libros-diseno-web-para-descarga/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 13:44:05 +0000</pubDate>
		<dc:creator>Arath Velázquez</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Libros Digitales]]></category>
		<category><![CDATA[Sitios Web]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=201</guid>
		<description><![CDATA[Hace unos días comentaba en mi cuenta de twitter, sobre un libro digital que me pareció muy interesante para las personas que están incursionando en el área de jQuery. Ahora, ...]]></description>
			<content:encoded><![CDATA[<p>Hace unos días comentaba en mi cuenta de <a title="jQueryBook" href="http://twitter.com/ArathVelazquez/status/18923030874" target="_blank">twitter</a>, sobre un libro digital que me pareció muy interesante para las personas que están incursionando en el área de jQuery.</p>
<p>Ahora, ese mismo libro lo encontré nuevamente, pero esta vez junto otros 8 libros electrónicos (en Inglés) relacionados con el diseño web.</p>
<p>Espero que alguno de ellos les sea de utilidad.</p>
<p><a href="http://designingfortheweb.co.uk/book/" target="_blank">Designing for the Web</a><br />
<a href="http://www.zeldman.com/talent/Taking_Your_Talent_to_the_Web.pdf" target="_blank"> Taking Your Talent to the Web</a><br />
<a href="http://diveintohtml5.org/" target="_blank"> Dive Into HTML 5</a><br />
<a href="http://jqfundamentals.com/book/book.html" target="_blank"> jQuery Fundamentals</a><br />
<a href="http://dotnetslackers.com/projects/Data-Structures-And-Algorithms/" target="_blank"> Data Structures and Algorithms</a><br />
<a href="http://www.webguru-india.com/free-webdesign-ebook.php" target="_blank"> Design Your Imagination</a><br />
<a href="http://building-android-apps.labs.oreilly.com/" target="_blank"> Building Android Apps with HTML, CSS, and JavaScript</a><br />
<a href="http://www.the-web-book.com/index.php" target="_blank"> The Web Book</a><br />
<a href="http://joeclark.org/book/sashay/serialization/" target="_blank"> Building Accessible Websites</a></p>
<p>La liga original la puedes encontrar aquí: <a href="http://speckyboy.com/2010/07/13/9-more-useful-and-free-downloadable-web-design-books/" target="_self">9 More Useful and Free Downloadable Web Design Books</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/07/9-libros-diseno-web-para-descarga/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desarrolla tu primera extensión para Chrome</title>
		<link>http://www.arathvelazquez.com/2010/07/primera-extension-para-chrome/</link>
		<comments>http://www.arathvelazquez.com/2010/07/primera-extension-para-chrome/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 22:26:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Desde Cero]]></category>
		<category><![CDATA[Extensiones]]></category>
		<category><![CDATA[Freelancing]]></category>
		<category><![CDATA[Google Chome]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Sitios Web]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=153</guid>
		<description><![CDATA[En este artículo explicaré como desarrollar tu primera extensión para Chrome. Al principio, pretendía solo mostrar el famoso &#8220;Hola Mundo&#8221;, pero opté por ahondar un poco en la API que ...]]></description>
			<content:encoded><![CDATA[<p>En este artículo explicaré como desarrollar tu primera extensión para Chrome.</p>
<p>Al principio, pretendía solo mostrar el famoso &#8220;Hola Mundo&#8221;, pero opté por ahondar un poco en la API que nos ofrece Google.</p>
<p align="center"><a href="http://www.arathvelazquez.com/tutos/chromeExtension/index.php?descarga=zip"><br />
Descarga el código [ZIP]</a></p>
<p align="center"><a href="http://www.arathvelazquez.com/tutos/chromeExtension/index.php?descarga=crx"><br />
Descarga la extensión [CRX]</a></p>
<p><br/></p>
<p>El artículo será explicado de una manera detallada y asume que tienes un conocimiento previo de HTML, CSS y Javascript. Usaremos también algunas funciones de <a href="http://es.wikipedia.org/wiki/Document_Object_Model" target="_blank">DOM</a> para la manipulación de las páginas.</p>
<h3>&iquest;Que vamos a hacer?</h3>
<p>Vamos a crear una extensión, la cual despliegue un popup con los nombres de las pestañas que tenemos abiertas. Aparte del nombre, tambien nos va a desplegar el favicon de la página y resaltará la que tengamos abierta. </p>
<p>Para hacerlo un poco más completo, también vamos a imprimir la cantidad de pestañas que tenemos abiertas.</p>
<p>Una vez terminada, se verá así:</p>
<p align="center"><img src="http://www.arathvelazquez.com/wp-content/uploads/2010/07/vistaPrincipal.jpg" alt="" title="vistaPrincipal" width="274" height="368" class="alignnone size-full wp-image-154" /></p>
<h3>Generalidades básicas de las extensiones en Chrome.</h3>
<p>-Las extensiones son básicamente páginas web. A estas les puedes agregar hojas de estilo, imágenes y sobre todo Javascript. Javascript es lo que le dará la funcionalidad a la extensión.</p>
<p>-La API de Google nos permite tener una interacción con las páginas, los favoritos, las tabs, el historial y otros componentes más.</p>
<p>-Todas las extensiones requieren de un archivo llamado <a href="http://code.google.com/chrome/extensions/manifest.html">&#8220;manifest.json&#8221;</a>, el cual define las características mas importantes de la extensión.</p>
<h3>Agrega tus propias extensiones con el modo desarrollador de Chrome.</h3>
<blockquote><p>Google se ha caracterizado por brindar herramientas muy potentes a los desarrolladores. Su proyecto Chrome es un ejemplo de esa afirmación. </p></blockquote>
<p>Si alguna vez has usado las herramientas de Chrome para analizar tus páginas, sabrás que no estoy lejos de la realidad. Basta con hacer click derecho sobre algún componente y seleccionar <i>Inspect element</i>.</p>
<p>Ahora, para agregar tus propias extensiones, abre el Menú de Herramientas o Tools y selecciona <i>Extensions</i>. Te mostrará las extensiones que tienes instaladas y del lado superior derecho encontrarás la opción para ampliar el modo Desarrollador.<br />
<a href="http://www.arathvelazquez.com/wp-content/uploads/2010/07/developerMode.jpg"><img src="http://www.arathvelazquez.com/wp-content/uploads/2010/07/developerMode.jpg" alt="" title="developerMode" width="583" height="140" class="aligncenter size-full wp-image-161" /></a></p>
<p><br/>Hacemos click sobre el botón que dice &#8220;Load unpacked extension&#8221; y seleccionamos nuestra carpeta que incluye los archivos. Una vez con esto y si todo está bien, veremos algo como así:</p>
<p><img src="http://www.arathvelazquez.com/wp-content/uploads/2010/07/mostrarExtension.jpg" alt="" title="mostrarExtension" width="584" height="125" class="aligncenter size-full wp-image-165" /></p>
<p>Esto quiere decir que ya tenemos agregada la extensión a Chrome.</p>
<h3>Creando lo más básico.</h3>
<p>Lo primero que tenemos que hacer, es crear el archivo que llamaremos &#8220;manifest.json&#8221;. En él, vamos a definir lo siguiente:</p>
<p>-El nombre de nuestra extensión, en nuestro caso lo llamaremos &#8220;Tabs Manager&#8221;.<br />
-La versión de nuestra extensión.<br />
-La descripción de la misma.<br />
-La manera en la que desplegaremos nuestra extensión y también que página html vamos a desplegar. <a href="http://code.google.com/chrome/extensions/browserAction.html">(Ver aquí para más detalles.)</a><br />
-El icono que queremos que tenga nuestra extensión.<br />
-Por último también le diremos con que elementos vamos a interactuar. En nuestro caso usaremos las &#8220;Tabs&#8221;.</p>
<p>Nuestro archivo &#8220;manifest.json&#8221; nos quedaría así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
<span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;Tabs Manager&quot;</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">&quot;version&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;1.0&quot;</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">&quot;description&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;Primera extensión en Chrome creado por www.arathvelazquez.com&quot;</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">&quot;browser_action&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span>
		     <span style="color: #0000ff;">&quot;default_icon&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;icon.png&quot;</span><span style="color: #339933;">,</span>
		     <span style="color: #0000ff;">&quot;popup&quot;</span><span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;tabs.html&quot;</span>
		   <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
 <span style="color: #0000ff;">&quot;permissions&quot;</span><span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;tabs&quot;</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Con esto, ya podriamos agregar nuestra extensión a Chrome, aunque nos marcaría que no encuentra la página por que hace falta nuestro archivo &#8220;tabs.html&#8221;.</p>
<h3>El XHTML</h3>
<p>Crearemos nuestro archivo XHTML que llamaremos &#8220;tabs.html&#8221;, el cual es simplemente una página web que definimos como XHTML y donde incluimos el archivo de JavaScript, así como la hoja de estilo.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span>
<span style="color: #00bbdd;">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Tabs<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">style</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span>&gt;</span> @import 'style.css'; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">style</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;script.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<h3>	Nuestro archivo JavaScript.</h3>
<p>Lo siguiente, es lo más importante de la extensión, ya que en este archivo tendremos toda la funcionalidad. El archivo lo llamaremos &#8220;script.js&#8221;</p>
<blockquote><p>Todos los bloques de código están comentados, y se explican por si solos. Aún así, voy a hacer algunas observaciones.</p></blockquote>
<p>Empezamos por crear dos funciones. Estas las usaremos más adelante para crear nuevos elementos de manera dinámica en nuestro HTML.</p>
<p>Lo que hacen estas funciones es crear el div contenedor y la lista desordenada. Para eso, usamos las utilidades de DOM.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Variables generales.</span>
<span style="color: #003366; font-weight: bold;">var</span> popup<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> ul<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> li<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//Esta función crea la div principal y la agregamos a la página.</span>
<span style="color: #003366; font-weight: bold;">function</span> creaContent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  	popup <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//Creamos el elemento div.</span>
  	popup.<span style="color: #660066;">id</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;content&quot;</span><span style="color: #339933;">;</span>		       <span style="color: #006600; font-style: italic;">//Le damos nombre al id &lt;div id=&quot;content&quot;&gt;.</span>
  	popup.<span style="color: #660066;">style</span>.<span style="color: #660066;">cssText</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;width: 100%;&quot;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">//Que abarque todo el ancho de la página.</span>
  	document.<span style="color: #660066;">body</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>popup<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>      <span style="color: #006600; font-style: italic;">//Lo agregamos al body -DOM-.</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//Con esta función vamos a crear una lista y la agregamos a nuestro div anterior.</span>
<span style="color: #003366; font-weight: bold;">function</span> creaUls<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>					 	
  	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>ul<span style="color: #009900;">&#41;</span> popup.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>ul<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	       <span style="color: #006600; font-style: italic;">//Si ya existe ul, lo removemos.</span>
  	ul <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>     <span style="color: #006600; font-style: italic;">//Creamos el elemento ul.</span>
  	popup.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>ul<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		       <span style="color: #006600; font-style: italic;">//Lo agregamos a div llamado popup. -DOM-</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Vamos a necesitar también, una función que acorte los títulos de las pestañas.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Truncamos el titulo de la página para obtener solo 30 caracteres.</span>
<span style="color: #003366; font-weight: bold;">function</span> truncate<span style="color: #009900;">&#40;</span>cad<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> length <span style="color: #339933;">=</span> <span style="color: #CC0000;">30</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> cad2Truncate <span style="color: #339933;">=</span> cad<span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> truncatedCad <span style="color: #339933;">=</span> cad2Truncate.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span>length<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">return</span> truncatedCad<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Creamos una función para llenar los elementos de la lista. En esta función lo que hacemos, es recibir el numero de pestañas que tenemos abiertas en nuestro navegador y también recibimos la variable que tendrá la información de las pestañas. </p>
<p>Con esta información, podemos empezar a crear los elementos li de nuestra lista.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Creamos los elementos de la lista con el nombre y el favicon.</span>
<span style="color: #003366; font-weight: bold;">function</span> creaElementos<span style="color: #009900;">&#40;</span>numTabs<span style="color: #339933;">,</span> tabName<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">;</span>					<span style="color: #006600; font-style: italic;">//Contador para las tabs.	</span>
	<span style="color: #003366; font-weight: bold;">var</span> favicon<span style="color: #339933;">;</span>				<span style="color: #006600; font-style: italic;">//Para almacenar el favicon.</span>
	<span style="color: #003366; font-weight: bold;">var</span> title<span style="color: #339933;">;</span>				<span style="color: #006600; font-style: italic;">//Para almacenar el titulo.</span>
&nbsp;
	creaUls<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>				<span style="color: #006600; font-style: italic;">//Creamos el elemento de lista desordenada.</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;=</span>numTabs<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>		<span style="color: #006600; font-style: italic;">//Recorremos todas las tabs de la ventana.</span>
	<span style="color: #009900;">&#123;</span>
		li <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">//Creamos los items para la lista.</span>
		li.<span style="color: #660066;">id</span> <span style="color: #339933;">=</span> tabName<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">id</span><span style="color: #339933;">;</span>		    <span style="color: #006600; font-style: italic;">//Le asignamos como id, el mismo id de la tab.</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tabName<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">selected</span><span style="color: #009900;">&#41;</span> 	    <span style="color: #006600; font-style: italic;">//Si la tab es la seleccionada, le damos otro estilo.</span>
		<span style="color: #009900;">&#123;</span>
			li.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;selected&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		favicon <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;img&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">//Creamos un elemento de imagen.</span>
		favicon.<span style="color: #660066;">style</span>.<span style="color: #660066;">cssText</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;width:16px; height:16px;&quot;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//Le damos las dimensiones con CSS.</span>
		favicon.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> tabName<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">favIconUrl</span> <span style="color: #339933;">||</span> <span style="color: #3366CC;">&quot;vacio.png&quot;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//El src será el favicon o en su caso una imagen en blanco.</span>
&nbsp;
		title <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;span&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #006600; font-style: italic;">//Creamos un span para darle formato al titulo</span>
		title.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;titulo&quot;</span><span style="color: #339933;">;</span>			<span style="color: #006600; font-style: italic;">//La clase para el CSS</span>
		title.<span style="color: #660066;">textContent</span> <span style="color: #339933;">=</span> truncate<span style="color: #009900;">&#40;</span>tabName<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #006600; font-style: italic;">//Agregamos el titulo de 30 caracteres a nuestro elemento span.</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">//Aquí vamos a agregar los elementos creados dinamicamente a nuestra página usando -DOM-</span>
		<span style="color: #006600; font-style: italic;">//En la &quot;impresión&quot; de HTML, lo que veremos será algo así:</span>
		<span style="color: #006600; font-style: italic;">//&lt;li style=&quot;width:16px; heigth: 16px;&quot; src=&quot;la_ruta_del_favicon&quot;&gt;</span>
		<span style="color: #006600; font-style: italic;">//&lt;span class=&quot;titulo&quot;&gt;El_titulo_del_tab(Truncado a 30 caracteres)&lt;/span&gt;&lt;/li&gt;</span>
&nbsp;
		li.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>favicon<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #006600; font-style: italic;">//Agregamos el favicon a nuestro item de la lista.								</span>
		li.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>title<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	        <span style="color: #006600; font-style: italic;">//Agregamos el titulo a nuestro item de la lista.</span>
		ul.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>li<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #006600; font-style: italic;">//Ahora, agregamos el item y su formato a la lista completa.</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Lo siguiente es hacer uso de la API que nos brinda Google para las extensiones. Lo que vamos a hacer con ello, es utilizar un EventListener que está a la espera de algún evento, y en este caso, hará que la función entre en juego al momento de cargar la extensión.</p>
<p>Utilizamos la API para las tabs o pestañas de la siguiente manera:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">chrome.<span style="color: #660066;">tabs</span>.<span style="color: #660066;">getAllInWindow</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> tabs<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>...<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//Donde function(tabs), le dará a tabs la información como un vector.</span>
<span style="color: #006600; font-style: italic;">//Google lo expone así:</span>
<span style="color: #006600; font-style: italic;">//El parametro para el callback, debe de especificar una función similar a esta:</span>
<span style="color: #006600; font-style: italic;">//function(array of Tab tabs) {...});</span></pre></div></div>

<p>También les habia comentado al principio, que vamos a imprimir el número de tabs en el ícono de la extensión. Para eso usamos lo siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">chrome.<span style="color: #660066;">browserAction</span>.<span style="color: #660066;">setBadgeText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>text<span style="color: #339933;">:</span> num_tabs<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//Donde el num_tabs es una cadena con el numero de tabs.</span></pre></div></div>

<p>El código de la implementación sería así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #006600; font-style: italic;">//Esta parte es la mas importante.</span>
<span style="color: #006600; font-style: italic;">//Creamos un evento para que al momento de cargar la página se ejecuten nuestras funciones.</span>
<span style="color: #006600; font-style: italic;">//Si no tuvieras este Event Listener, tendrias que mandar llamar la función directamente desde tu HTML.</span>
window.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;load&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 	 <span style="color: #006600; font-style: italic;">//Se ejecuta al momento de cargar la página ('load').</span>
  <span style="color: #006600; font-style: italic;">//En esta parte, es necesario aclarar que al parámetro llamado &quot;tabs&quot;, le daremos toda la informacion de las pestañas.</span>
  <span style="color: #006600; font-style: italic;">//Observa que la parte de function(tabs) es el callback del método y en este se realizan las operaciones.</span>
  chrome.<span style="color: #660066;">tabs</span>.<span style="color: #660066;">getAllInWindow</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>tabs<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">//Obtenemos información de todas las tabs abiertas...</span>
	<span style="color: #003366; font-weight: bold;">var</span> num_tabs <span style="color: #339933;">=</span> tabs.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>	    <span style="color: #006600; font-style: italic;">//Aquí obtenemos el numero de tabs.</span>
	num_tabs <span style="color: #339933;">=</span> num_tabs.<span style="color: #660066;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	    <span style="color: #006600; font-style: italic;">//Convertimos el numero a string.</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//Este método, nos permite modificar algunas partes del icono de la extensión.</span>
	chrome.<span style="color: #660066;">browserAction</span>.<span style="color: #660066;">setBadgeText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>text<span style="color: #339933;">:</span> num_tabs<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #006600; font-style: italic;">//Imprimimos en el icono, el numero de tabs abiertas.</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">//Ya con toda la información necesaria, solo nos queda crear los elementos principales.</span>
	creaContent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #006600; font-style: italic;">//Creamos dinámicamente el div llamado content.</span>
	creaElementos<span style="color: #009900;">&#40;</span>num_tabs<span style="color: #339933;">,</span>tabs<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #006600; font-style: italic;">//Creamos los elementos como ul, li y los valores finales.</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>Estiliza la extensión.</h3>
<p>Por último, le daremos el estilo a nuestra extensión de la siguiente forma:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">body 		<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">230px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span>Verdana<span style="color: #00AA00;">;</span>font-<span style="color: #000000; font-weight: bold;">size</span><span style="color: #00AA00;">:</span><span style="color: #933;">11px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">black</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#content</span> 	<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>padding<span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
ul 		<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">list-style</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
li 		<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">0px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #933;">4px</span> <span style="color: #933;">2px</span> <span style="color: #933;">0px</span> <span style="color: #933;">4px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">20px</span><span style="color: #00AA00;">;</span> -webkit-border-radius<span style="color: #00AA00;">:</span><span style="color: #933;">5px</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
img 		<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">vertical-align</span><span style="color: #00AA00;">:</span><span style="color: #993333;">middle</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.titulo</span> 	<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">5px</span> <span style="color: #933;">0px</span> <span style="color: #933;">0px</span> <span style="color: #933;">6px</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">vertical-align</span><span style="color: #00AA00;">:</span><span style="color: #993333;">middle</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.selected</span> 	<span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#FF9933</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<blockquote><p><b>Listo! Ya has creado tu primera extensión para Google Chrome.</b></p></blockquote>
<h3>&iquest;Que faltaría hacer?</h3>
<p>Después de desarrollar esta extensión, podrás utilizar la API y hacer, por ejemplo:<br />
-Que al momento de presionar sobre el título, abra la pestaña seleccionada.<br />
-Agregar un botón para cerrar cualquier pestaña desde la extensión.<br />
-Realizar una búsqueda entre los titulos de las pestañas abiertas.</p>
<p>Espero que les sirva esta guía/artículo para conocer un poco más las extensiones de Chrome, así como el uso básico de las API&#8217;s que ofrece Google.</p>
<p>Si tienes algún comentario, no dudes en hacérnoslo saber.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/07/primera-extension-para-chrome/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Como crear un plugin sencillo para WordPress [Parte 1]</title>
		<link>http://www.arathvelazquez.com/2010/06/como-crear-un-plugin-sencillo-para-wordpress-parte-1/</link>
		<comments>http://www.arathvelazquez.com/2010/06/como-crear-un-plugin-sencillo-para-wordpress-parte-1/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 04:08:07 +0000</pubDate>
		<dc:creator>Arath Velázquez</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Desde Cero]]></category>
		<category><![CDATA[Freelancing]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Sitios Web]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=101</guid>
		<description><![CDATA[WordPress es un sistema de gestión de contenido (CMS por sus siglas en Inglés) que se distribuye y desarrolla libremente como código abierto, esto quiere decir que el código con ...]]></description>
			<content:encoded><![CDATA[<p>WordPress es un sistema de gestión de contenido (CMS por sus siglas en Inglés) que se distribuye y desarrolla libremente como código abierto, esto quiere decir que el código con el que fue creado es accesible para todos los usuarios y que los desarrolladores puedan implementar sus propias soluciones.</p>
<p>Esto ha permitido un crecimiento importante en todos los aspectos y por eso mismo, en la actualidad WordPress cuenta con una de las mas importantes <a href="http://wordpress.org/extend/plugins/">colecciones de plugins</a> o complementos para utilizar.</p>
<blockquote><p>Un plugin como tal, es una aplicación que aporta una nueva funcionalidad al sistema y que por lo general es muy específica.</p></blockquote>
<p>En WordPress, la verdad es muy sencillo encontrar un plugin que cumpla una determinada función, y para entender su funcionamiento, en este artículo veremos como crear uno desde cero.</p>
<p>En esta primera parte, el plugin permitirá enviar a nuestro usuario de twitter, un pequeño texto, el nombre del post y el link del post. Algo interesante, es que el link o URI (muchos les llamamos URL también), será &#8220;acortada&#8221; usando una sencilla API de un acortador de URLs creada por <a href="http://www.rodrigopolo.com" target="_blank">Rodrigo Polo</a>.</p>
<h3>Generalidades de los plugins en WordPress.</h3>
<p>Todos los plugins para WordPress son creados con PHP y pueden agregar funcionalidad y diseño con JavaScript, CSS entre otras herramientas.</p>
<p>Los plugins deben de ser creados dentro de la carpeta &#8220;wp-content/plugins&#8221;. </p>
<p>Si el plugin, solo requiere un archivo, lo puedes dejar en el directorio de plugins, pero por lo general y por buenas prácticas, se debe optar por crear una carpeta independiente con el nombre del plugin. Aparte de buenas prácticas, esto nos dará oportunidad de organizar los archivos de una manera sencilla.</p>
<p>El archivo PHP principal, deberá tener el mismo nombre del plugin.</p>
<p>WordPress tiene la funcionalidad de leer los archivos y reconocer cabeceras que determinan qué tipo de elementos son. Esto aplica para las hojas de estilo, las páginas, los plugins y otros elementos más.</p>
<p>Por lo tanto, los plugins deben de contar con una cabecera que identifica el nombre del plugin, descripción e información adicional.</p>
<h3>Plantilla general para el plugin.</h3>
<p>Lo más básico es crear la cabecera con la información principal dentro de nuestra carpeta, en este caso la llamaremos updatter:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*
Plugin Name: Updatter
Plugin URI: http://arathvelazquez.com/updatter
Description: Actualiza tu estado en twitter con el ultimo post que publiques.
Version: 0.1
Author: Arath Velázquez
Author URI: http://www.arathvelazquez.com
*/</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Guarda el archivo con el nombre updatter.php en la carpeta del plugin:<br />
<a href="http://www.arathvelazquez.com/wp-content/uploads/2010/06/ruta_carpetas.png"><img src="http://www.arathvelazquez.com/wp-content/uploads/2010/06/ruta_carpetas.png" alt="" title="ruta_carpetas" width="192" height="179" class="alignnone size-full wp-image-103" /></a></p>
<p>Una vez realizado estos sencillos pasos, ya tienes un plugin que ya puede ser activado desde la consola de administración:<br />
<a href="http://www.arathvelazquez.com/wp-content/uploads/2010/06/plugin_en_admon.png"><img src="http://www.arathvelazquez.com/wp-content/uploads/2010/06/plugin_en_admon.png" alt="" title="plugin_en_admon" width="560" height="340" class="alignnone size-full wp-image-105" /></a></p>
<h3>Funcionalidad básica del plugin.</h3>
<p>Como les comentaba anteriormente, el plugin nos permitirá crear y enviar un post a nuestra cuenta de twitter.<br />
Para eso, crearemos una función en el mismo archivo antes guardado.</p>
<p>La función la llamaremos updatter:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> updatter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$nombreDelPost</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_title</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$urlDelPost</span> <span style="color: #339933;">=</span> get_permalink<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$preTexto</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Desde el blog: &quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$urlCompleta</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://rod.gs/?longurl=&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$urlDelPost</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$urlAcortada</span> <span style="color: #339933;">=</span> curling<span style="color: #009900;">&#40;</span><span style="color: #000088;">$urlCompleta</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$comentario</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$preTexto</span><span style="color: #339933;">.</span><span style="color: #000088;">$nombreDelPost</span><span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; &quot;</span> <span style="color: #339933;">.</span><span style="color: #000088;">$urlAcortada</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//=======</span>
	<span style="color: #666666; font-style: italic;">//Mas adelante, en este espacio escribiremos algo extra.	</span>
	<span style="color: #666666; font-style: italic;">//=======</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>En la función, simplemente obtenemos el título del post, el link o URI y un texto que los precede. También incluí de una vez una función que implementaremos en los siguientes párrafos, para no repetir código más adelante.</p>
<p>Si se fijan, $urlDelPost tiene la dirección completa del post, que por lo regular es bastante extensa y para fines prácticos, entre menos letras usemos para comentar en twitter, mucho mejor.</p>
<p>Lo que vamos a hacer, es simplemente utilizar una función muy sencilla y la llamaremos <i>curling</i>. Esta función lo que hace es recibir una URL y devolvernos el contenido en una cadena.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> curling<span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 				                  
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Pasamos la dirección y la &quot;seteamos&quot;.</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//La transferencia en una cadena</span>
        <span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Y ahora le asignamos  a $output, el valor como cadena</span>
        <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Cerramos y liberamos los recursos</span>
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$output</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Y finalmente, la función nos regresa el resultado. </span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ya con esto y con ayuda del API de Rodrigo Polo, tenemos un link bastante corto y que no pasará de 20 caracteres. El resultado lo tenemos en $urlAcortada y ahora, simplemente creamos el comentario completo que vamos a postear.</p>
<p>A continuación, vamos a crear un div para agregarlo a nuestro blog, la idea de este plugin, es que vaya al final del listado de posts y al final de cada post. Para eso escribimos al final de la función updatter lo siguiente (esto lo puse en imagen, porque el browser lo interpreta):</p>
<p><a href="http://www.arathvelazquez.com/wp-content/uploads/2010/06/codigoDiv.png"><img src="http://www.arathvelazquez.com/wp-content/uploads/2010/06/codigoDiv.png" alt="" title="codigoDiv" width="522" height="144" class="alignnone size-full wp-image-114" /></a></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>is_single<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> is_home<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$content</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$divTweet</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$content</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Con esto creamos el DIV que vamos a mostrar y además le decimos, que solo se va a imprimir en los posts y en el listado de los posts. Si la página en la que nos encontramos, es alguna de las dos opciones,  imprimimos el contenido y concatenamos el divTweet, y si no, solo imprimimos el contenido.</p>
<blockquote><p>Es importante que la impresion de cadenas se realice con &#8220;return&#8221; en lugar de &#8220;echo&#8221;</p></blockquote>
<p>Ya con esto, tenemos la funcionalidad completa del plugin.</p>
<h3>Colocando el plugin en su lugar.</h3>
<p>Hasta ahorita, el plugin por si solo ya tiene lo necesario para funcionar, solo resta decirle en donde lo vamos a colocar. </p>
<p>A lo que me refiero con esto, es que en WordPress, podemos agregar filtros o acciones a determinadas secciones. Por ejemplo, podríamos agregar una acción al momento en que publicamos un nuevo post o al momento de comentar. Se puede agregar una acción o filtro a casi cualquier sección de WordPress.</p>
<p>Entonces, lo que nos resta a nosotros para terminar, es decirle que vamos a agregar las operaciones del plugin al contenido de la siguiente manera (debe estar colocado dentro del plugin y afuera de todas las funciones):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'the_content'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'updatter'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'the_excerpt'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'updatter'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Con esto, le decimos que el plugin tenga efecto en el contenido y en los extractos de los post.</p>
<p>Espero que encuentren práctico este artículo para estudiar y crear sus propios plugins en WordPress.</p>
<h3>Actualización</h3>
<p> (30 de Junio de 2010):<br />
Hice unas pequeñas mejoras y correcciones en algunas partes del código.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/06/como-crear-un-plugin-sencillo-para-wordpress-parte-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creando experiencia para el usuario.</title>
		<link>http://www.arathvelazquez.com/2010/06/creando-experiencia-para-el-usuario/</link>
		<comments>http://www.arathvelazquez.com/2010/06/creando-experiencia-para-el-usuario/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 18:04:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Sitios Web]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=75</guid>
		<description><![CDATA[Cuando las personas interactúan con un sitio web, con algún celular, con aparatos electrónicos o hasta con una botella, experimentarán una sensación que puede llegar a ser positiva, negativa o ...]]></description>
			<content:encoded><![CDATA[<p>Cuando las personas interactúan con un sitio web, con algún celular, con aparatos electrónicos o hasta con una botella, experimentarán una sensación que puede llegar a ser positiva, negativa o incluso indiferente. Esa sensación es la experiencia del usuario, un factor importante para el éxito o fracaso de cualquier producto.</p>
<p>En este artículo trataré de explicar con un ejemplo, que factores  consideré mas importantes, al momento de diseñar y desarrollar la página donde te encuentras en este momento.</p>
<p><a href="http://www.arathvelazquez.com/wp-content/uploads/2010/06/CreandoExperiencia.jpg"><img src="http://www.arathvelazquez.com/wp-content/uploads/2010/06/CreandoExperiencia.jpg" alt="Crea experiencia para el usuario" title="CreandoExperiencia" width="600" height="152" class="alignnone size-full wp-image-80" /></a></p>
<p>Como te podrás dar cuenta, todo tiene un mismo formato y el sitio trata de seguir una misma idea. </p>
<p>Básicamente esto se debe a que en los sitios web como en los productos en general, el éxito será determinado por la calidad en la experiencia del usuario final y la calidad del diseño, y no solamente me refiero al diseño con la combinación de colores, sino a la estructura general del sitio, el posicionamiento de los elementos, la facilidad de interacción y sobre todo que en unos solos minutos se entienda de que se trata.</p>
<p>Si buscamos una definición concreta a lo que significa la experiencia del usuario, posiblemente encuentres infinidad de resultados, pero como mencioné hace unos momentos, voy a centrarme en mi ejemplo.</p>
<p>Hay 4 factores que podrán definir la experiencia del usuario y es muy importante que se complementen, por que individualmente no brindarán la experiencia positiva que estamos buscando.</p>
<p>Estos son los factores:<br />
<em>Imagen<br />
Usabilidad<br />
Funcionalidad<br />
Contenido</em></p>
<p>Empecemos por partes:</p>
<h3>La imagen</h3>
<p>Es en general todo lo relacionado con el diseño, la creatividad, lo estético, la proyección del sitio, la consistencia, así como la creación de una identidad visual y corporativa del sitio.</p>
<p>Como podrán ver alrededor, el sitio trata de conservar una imagen similar desde cualquier punto que se observe, al menos eso pretendí al hacer el diseño. Las sombras, algunos degradados, los colores e incluso los brillos y los cortes, crean una imagen que puede ser diferente a las comunes e incluso memorable.</p>
<h3>La usabilidad</h3>
<p>Es prácticamente la facilidad de que el usuario o el visitante puedan utilizar el sitio de una manera sencilla, sin complicaciones y llegar a un objetivo concreto, como puede ser mandar un correo para contactarme o comprender la sencilla navegación del sitio.</p>
<p>Algo que me gustaría destacar, es la manera en la que el usuario puede mandar un correo usando el <a href="http://www.arathvelazquez.com/contacto/">formulario de contacto</a>.<br />
Podrás notar que la manera de usarlo no es para nada como se acostumbra, esta vez es diferente<sup>1</sup>.</p>
<h3>La funcionalidad</h3>
<p>Incluye todo lo técnico del sitio, los procesos, las aplicaciones y es en esencia lo que hace trabajar al sitio y claramente no lo vemos como usuarios. Un sitio funcional, será robusto, esto quiere decir que tendrá que trabajar correctamente ante diferentes situaciones, también tendrá que evitar errores o al menos saberlos manejar.</p>
<p>Como un claro ejemplo, en la página principal existe un SlideShow (como una presentación de diapositivas) que muestra los artículos de cierta categoría<sup>2</sup> y donde puedes navegar por los diferentes artículos con las flechas laterales.</p>
<p>También, en el formulario de contacto, existe una funcionalidad que no permite mandar correos sin tu nombre, sin tu correo, o que tu correo no esté bien escrito y por supuesto, que el correo incluya el mensaje.</p>
<p>Estas dos funcionalidades por nombrar algunas, son algo interno del sitio. Sin la implementación correcta de estas, podrías mandarme un correo vacío, o con tu cuenta de correo incorrecta o inválida, y así no podría contestarte.</p>
<h3>El contenido</h3>
<p>Es todo lo que incluye el sitio, desde el texto, las imágenes y la relación de los elementos. Para sitios donde se publican artículos, el contenido es vital y tiene que estar activo todo el tiempo,  y nunca se podrá prescindir de el.</p>
<p>En este factor, solo me queda comprometerme a mantener actualizado el sitio y publicar de una manera constante.</p>
<p><sup>1</sup>Si intentaste desde un dispositivo móvil, notaras que es complicado. Te pido una disculpa ya que estoy haciendo un diseño especial para todos los que vivimos unidos a nuestros &#8220;gadgets&#8221;.</p>
<p><sup>2</sup>Más adelante incluiré los proyectos en los que he participado.</p>
<blockquote><p>Fe de erratas:</p>
<p>Los sitios web, al igual que las aplicaciones, sufren de algo inevitable:<br />
&#8220;Nunca puedes decir que están terminados&#8221;<br />
Esto aplica para todo el software en general. Es por eso que puedo afirmar que este sitio aún no está terminado y agradecería tu critica u observación sobre él.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/06/creando-experiencia-para-el-usuario/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Re_acciona destruye una página de Youtube</title>
		<link>http://www.arathvelazquez.com/2010/05/re_acciona-destruye-una-pagina-de-youtube/</link>
		<comments>http://www.arathvelazquez.com/2010/05/re_acciona-destruye-una-pagina-de-youtube/#comments</comments>
		<pubDate>Mon, 03 May 2010 04:58:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Comerciales]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=20</guid>
		<description><![CDATA[Acciona es una compañía española que se dedica al desarrollo y la sustentabilidad ambiental. Como parte de su campaña, Acciona realizó un video que se me hizo interesante por varias razones. Una de ...]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://www.acciona.es/">Acciona</a></em> es una compañía española que se dedica al desarrollo y la sustentabilidad ambiental.</p>
<p>Como parte de su campaña, <em>Acciona</em> realizó un video que se me hizo interesante por varias razones.</p>
<p>Una de esas razones, es que no te esperas lo que acontece con la página de Youtube, hicieron un excelente uso del espacio del video, así como de los controles y el <a href="http://www.youtube.com/experiencere">resultado lo puedes ver aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/05/re_acciona-destruye-una-pagina-de-youtube/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Habemus Blog</title>
		<link>http://www.arathvelazquez.com/2010/05/hello-world/</link>
		<comments>http://www.arathvelazquez.com/2010/05/hello-world/#comments</comments>
		<pubDate>Sun, 02 May 2010 00:05:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Freelancing]]></category>
		<category><![CDATA[Sitios Web]]></category>
		<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.arathvelazquez.com/?p=1</guid>
		<description><![CDATA[Este es el primer Post.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.arathvelazquez.com" target="_self">Este es el primer Post.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arathvelazquez.com/2010/05/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

