<?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>alejandro corpeño &#187; programación</title>
	<atom:link href="http://alejandro.corpeno.com/blog/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://alejandro.corpeno.com</link>
	<description>web - programación - arte - negocios</description>
	<lastBuildDate>Thu, 26 Aug 2010 07:33:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Cómo cobrar por tu trabajo &#8230;¿Según el sapo es la pedrada?</title>
		<link>http://alejandro.corpeno.com/2010/08/25/como-cobrar-por-tu-trabajo-segun-el-sapo-es-la-pedrada/</link>
		<comments>http://alejandro.corpeno.com/2010/08/25/como-cobrar-por-tu-trabajo-segun-el-sapo-es-la-pedrada/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 16:00:36 +0000</pubDate>
		<dc:creator>corp</dc:creator>
				<category><![CDATA[negocios]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://alejandro.corpeno.com/?p=506</guid>
		<description><![CDATA[Hace unos días un amigo me preguntó acerca de cómo decidir cuanto cobrar por su trabajo de diseño web. En la plática salieron algunos puntos interesantes que pensé sería bueno compartir en este artículo. Una vez estaba en una clase de “Pricing Strategies” y estábamos discutiendo acerca de como definir el precio de un producto. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/tjameswhite/2374677463/in/photostream/"><img class="aligncenter size-full wp-image-507" title="Creative Commons: Tim White (tjameswhite en flickr.com)" src="http://alejandro.corpeno.com/wp-content/uploads/2010/08/sapos.jpg" alt="" width="588" height="372" /></a></p>
<p>Hace unos días un amigo me preguntó acerca de cómo decidir cuanto cobrar por su trabajo de diseño web. En la plática salieron algunos puntos interesantes que pensé sería bueno compartir en este artículo.</p>
<p>Una vez estaba en una clase de <em>“Pricing Strategies”</em> y estábamos discutiendo acerca de como definir el precio de un producto. Hay muchas formulas y conceptos de economía acerca costos fijos, variables, análisis de la competencia, etc. para definir el precio de productos manufacturados.</p>
<p>Pero cuando hablamos del precio de un servicio profesional, no todos estos conceptos aplican y entramos al mundo del dicho <em>“según el sapo es la pedrada”</em> &#8230; donde el sapo puede ser el cliente, el consultor o ambos.</p>
<p>Para dar contexto al tema usaremos siempre el ejemplo de un consultor que ofrece servicios de diseño web.</p>
<p>Primero debemos analizar algunos detalles que se esconden tras ese numerito llamado precio&#8230;</p>
<h2>Qué es el precio?</h2>
<ul>
<li>El precio es la semilla de lo que después se convierte en nuestros ingresos totales. De este monto debe salir el dinero para pagar los costos fijos, variables, inversión en equipo, impuestos y compensar al dueño del negocio por el riesgo y costo de oportunidad. Desde este enfoque podemos deducir un precio <em><strong>en base a COSTO.</strong></em></li>
</ul>
<ul>
<li>El precio también puede ser un mecanismo de branding que sugiera la calidad del servicio que ofrecemos. Un precio muy bajo puede dar a entender que nuestro producto o servicio es de mala calidad y un precio alto por otro lado denota mayor calidad. En el caso de servicios profesionales de consultoría, la calidad corresponde a “que tan experto o especialista” es el consultor y de acuerdo a esto se espera que será el nivel de calidad del trabajo realizado.  De este enfoque podemos deducir un precio <em><strong>en base a VALOR AGREGADO.</strong></em></li>
</ul>
<ul>
<li>El precio también es un mecanismo de equilibrio de mercado. Si tenemos precios muy bajos y nuestra capacidad de producción es baja, es posible que no podamos abastecer toda la demanda.  A medida que subimos el precio, vamos filtrando la demanda y quedando solo con los clientes que está dispuestos a pagar más&#8230; llegando a un equilibrio y encontramos el segmento en que vamos a competir. De este enfoque podemos deducir un precio <em><strong>en base a COMPETENCIA DE MERCADO.</strong></em></li>
</ul>
<h2>Entonces &#8230; cuanto? cuanto vale?</h2>
<p>Cómo podemos responder a la pregunta que nos hace un cliente potencial cuando quiere que le desarrollemos un sitio web?<em> </em></p>
<p><em> </em></p>
<h2>&#8230; Depende</h2>
<p>Depende en parte del mercado. Vivimos en un mundo competitivo donde hay muchas personas ofreciendo <em>“su sitio web por sólo $100”</em> &#8230; pero la competencia a nivel de precios bajos no es sana, lleva a malos resultados y baja calidad.</p>
<p>Que tiene de malo contratar la oferta hipotética del sitio web por sólo $100?</p>
<p>A la larga no se puede retener la atención de un diseñador/consultor por mucho tiempo a ese monto&#8230; lo que puede terminar pasando después es:</p>
<ul>
<li>Llega el punto en que este consultor necesita más ingresos y busca más clientes&#8230; y en consecuencia ya no te contesta las llamadas ni responde tus emails (se te pierde) porque está ocupado atendiendo a otros.</li>
</ul>
<ul>
<li>El consultor ya no puede con sus gastos y consigue un trabajo fijo con un sueldo mensual entre 10 a 15 veces lo que te estaba cobrando y en que no tiene que preocuparse por andar buscando clientes&#8230; siempre le pagan su sueldo mes a mes.</li>
</ul>
<ul>
<li>El consultor se aburre de hacer sitio web y ya no se dedica a eso&#8230; y busca otro negocio (vende casas o carros por comisión).</li>
</ul>
<p>Al final, el cliente termina con un sitio web a medias, sin mantenimiento y en busca de alguien que tome el proyecto desde cero nuevamente (y a veces con el nombre de dominio secuestrado por el consultor anterior).</p>
<p>Entonces, no es bueno competir con esos precios bajos, ya que quienes operan en ese mercado terminan mal. Como consultores serios hay que pensar en el largo plazo, pensar en desarrollar una carrera estable y prospera dedicada a ofrecer tus servicios a clientes que puedan contar con tu disponibilidad por varios años.</p>
<h2>La pregunta no es cuanto vale un sitio web&#8230; es cuanto vale tu tiempo</h2>
<p>Una vez hicimos un estudio de mercado, comparando precios y servicios ofrecidos por 7 empresas de diseño web en Honduras. A todas enviamos la misma requisición y las ofertas que nos enviaron iban desde los $350 hasta los $2,600 &#8230; todas básicamente en respuesta a la misma solicitud.</p>
<p>Al final de cuentas, no importa si estás diseñando sitios web, casas, puentes, compuestos químicos o haciendo estudios de impacto ambiental&#8230; cuando trabajas como consultor, lo que vendes es tu tiempo y atención para dedicarla a solucionar un problema que no es tuyo&#8230; es de tu cliente, pero por medio de una transacción comercial se vuelve tuyo.</p>
<p>Al ver la pregunta de ‘cuanto cobrar’ bajo este enfoque y tomando en cuenta los enfoques de 1) costos, 2) valor agregado y 3) competencia de mercado, entonces podemos hacer un análisis para determinar nuestro precio.</p>
<p>Un análisis en base a costos puede ser:</p>
<ul>
<li>Si tu única fuente de ingresos por muchos años será la que venga de cobrar por tu tiempo, considerando que el día solo tiene 24 horas y no se pueden agregar más&#8230; hay que determinar cuantas horas productivas al día podes dedicar a clientes y hacer números en base a eso. Para el ejemplo usemos 5 horas diarias en trabajos de clientes, 5 días a la semana.</li>
</ul>
<ul>
<li>Al dedicarte a ser consultor estás tomando un riesgo&#8230; estás dejando ir la oportunidad de un empleo bien pagado (asumiendo que lo podes obtener) y eso representa al menos una referencia para tu costo de oportunidad</li>
</ul>
<ul>
<li>Si tomas tu costo de oportunidad mensual en base a un salario (por ejemplo $1,500) y lo dividís entre las horas efectivas al mes que podes dedicar a clientes (por ejemplo 100) entonces tu costo por hora es $15.00</li>
</ul>
<ul>
<li>Pero que pasa con los ahorros, vacaciones, aumentos en tus ingresos, retiro, seguro médico, etc.? Y a quien le cobro todas las horas que involucra conseguir un cliente, escribir propuestas, reuniones pre-venta, etc.? Al decidir ser consultor independiente vos sos el dueño de tu carrera y lo que pase con ella&#8230; debes hacer un plan financiero que considera todo esto. Probablemente el monto de $15 por hora deba en realidad incrementarse en un 50%, para un valor total de $22.50</li>
</ul>
<p>Entonces, si un sitio web te tomaría unas 50 horas de trabajo, tu cotización sería $22.50 x 50 horas =  “Sitio Web  $1,125.00”</p>
<h2>Valor Agregado</h2>
<p>Pero lo anterior sólo toma en cuenta el extremo inferior de la ecuación&#8230; el costo. ¿Qué pasa con el ‘valor agregado’ que el consultor aporta al ser un experto en el tema?</p>
<p>A medida que un consultor obtiene más experiencia y se especializa, su trabajo es más valioso, agrega más valor a los proyectos en que trabaja, es más eficiente (le toma menos horas completar un trabajo) y otros beneficios.</p>
<p>Además, llega a conocer mejor el mercado y descubre que hay ciertos segmentos de mercado en que los clientes tienen un nivel de presupuesto más alto para proyectos de web debido a que para ellos significa más ventas, mejor posicionamiento de marca o algo que realmente <em><strong>genera valor</strong></em>. Si este consultor llega a un cliente grande y descubre que el valor agregado que sus servicios representan para el cliente es de $8,000.00 (entregando un sitio web en 6 semanas) entonces automáticamente el nivel de precio del consultor sube y se ajusta a esto.</p>
<p>Cuando vengan nuevos clientes potenciales, el costo de oportunidad de este consultor ahora se basa en $8,000 por un website que le tome 6 semanas completar&#8230; entonces ahora basa su precio en $8,000 / 6 semanas / 5 días / 5 horas = $53.33</p>
<p>Ahora por ese website de 50 horas de trabajo, el consultor cotizaría 50 x $53.33 = $2,666.00</p>
<h2>Según el Sapo es la Pedrada&#8230;</h2>
<p><a href="http://alejandro.corpeno.com/wp-content/uploads/2010/08/2x2.png"><img class="alignright size-medium wp-image-538" style="margin-left: 15px; border: none;" title="2x2 de precios y niveles de experiencia" src="http://alejandro.corpeno.com/wp-content/uploads/2010/08/2x2-297x300.png" alt="2x2 de precios y niveles de experiencia" width="297" height="300" /></a>Normalmente este dicho significa que se le puede cobrar más a clientes grandes&#8230; pero creo que en realidad lo que se hace es cobrarle el precio justo a los clientes grandes y darles un descuento a los pequeños (que sabes que no pueden pagar lo que vale el trabajo)&#8230; eso sólo si es que realmente queres ayudarles.</p>
<p>Cada caso es diferente en cuanto a precios de consultores y en cuanto a valor que el cliente asigna al sitio web (su presupuesto). Cada consultor tiene sus planes y metas financieras diferentes que lo llevan a valorar de forma diferente su trabajo.</p>
<p>Algunos trabajan como parte de un equipo y entran otros factores en juego. Por eso hay firmas de desarrollo web como <a href="http://hashrocket.com/" target="_blank">Hashrocket</a> que cobran entre $150 y $250 por hora. En el sitio de preguntas y respuestas <a href="http://stackoverflow.com/questions/455490/how-much-should-i-charge-for-rails-programming" target="_blank">StackOverflow surgió una discusión</a> interesante en que los rangos anduvieron entre $25, $75 y hasta $200 por hora para desarrollo en Ruby on Rails.</p>
<h2>En conclusión</h2>
<p>En respuesta a mi amigo desarrollador de web, lastimosamente <em><strong>no hay una respuesta correcta</strong></em> &#8230; cada quien decide como quiere cobrar y luego se mide en el mercado para encontrar a los clientes que ven valor en lo que ofreces.</p>
<p>A medida que obtenés más experiencia trabajando con clientes debes ir identificando cual es tu área especialidad, el área específica en que más agregas valor. Al identificar esto, verás que hay segmentos de mercado que valoran bastante tu aporte de experto y no tienen inconveniente pagando lo que tu trabajo vale.</p>
<p>Algunos puntos finales:</p>
<ul>
<li><strong>Consejo:</strong> Difícilmente un cliente te pague por hora&#8230; debes hacer tu análisis de horas internamente y cotizar &#8216;por proyecto&#8217; con buena definición del alcance del mismo (que incluye y que no).</li>
</ul>
<ul>
<li><strong>Aclaración:</strong> No soy experto en precios&#8230; siempre es un trabajo complicado decidir como cobrar y este artículo sólo es un análisis con valores hipotéticos. Hay muchas otras formas de abordar el tema.</li>
</ul>
<ul>
<li><strong>Opinen:</strong> Sus opiniones son bienvenidas para compartir experiencias en el proceso de definir precios en sus mercados locales.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://alejandro.corpeno.com/2010/08/25/como-cobrar-por-tu-trabajo-segun-el-sapo-es-la-pedrada/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Ser más productivo y evitar distracciones</title>
		<link>http://alejandro.corpeno.com/2010/06/12/como-ser-mas-productivo-y-evitar-distracciones/</link>
		<comments>http://alejandro.corpeno.com/2010/06/12/como-ser-mas-productivo-y-evitar-distracciones/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 20:37:28 +0000</pubDate>
		<dc:creator>corp</dc:creator>
				<category><![CDATA[negocios]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[productividad]]></category>

		<guid isPermaLink="false">http://alejandro.corpeno.com/?p=334</guid>
		<description><![CDATA[Desde finales de marzo comencé a implementar ciertas tácticas enfocadas a evitar distracciones y ser más productivo en las actividades más importantes y quería completar el experimento para escribir algo al respecto en el blog. En este artículo quiero compartir algunas de estas tácticas y lo que he aprendido en el proceso. La decisión de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://alejandro.corpeno.com/wp-content/uploads/2010/06/productividad1.jpg"><img class="aligncenter size-full wp-image-452" title="Productividad" src="http://alejandro.corpeno.com/wp-content/uploads/2010/06/productividad1.jpg" alt="" width="588" height="423" /></a></p>
<p>Desde finales de marzo comencé a implementar ciertas tácticas enfocadas a evitar distracciones y ser más productivo en las actividades más importantes y quería completar el experimento para escribir algo al respecto en el blog. En este artículo quiero compartir algunas de estas tácticas y lo que he aprendido en el proceso.</p>
<h2>La decisión de cambiar</h2>
<p>Recuerdo los tiempos en que podía trabajar 3 horas corridas sin interrupciones en un proyecto&#8230; esos tiempos han terminado para siempre. Ahora con emails, twitts, notificaciones de facebook, messengers (gtalk, skype, etc&#8230;), llamadas al celular, mensajes de texto (sms), wifi en todos lados es casi imposible tener 30 minutos corridos sin una interrupción (sin contar cuando alguien entra abruptamente a tu oficina y te roba una hora sin sentido).</p>
<p>Normalmente &#8216;trabajo&#8217; (estoy frente a mi computadora) de 9AM a 9PM con un break de almuerzo de dos horas. De acuerdo a ese horario, bebería completar 10 horas de trabajo productivo cada día. Pero debido a todas las interrupciones y tratar de multi-task entre varios proyectos a la vez, al finalizar el día sentía que no había avanzado significativamente en las tareas importantes.</p>
<p>Decidí comenzar a cronometrar mis actividades para determinar cuanto tiempo realmente productivo trabajaba cada día. Los resultados fueron decepcionantes&#8230; en promedio estaba completando solamente 2 horas de trabajo realmente productivo cada día.</p>
<p><strong>¿Qué pasaba con las otras 8 horas?</strong><br />
Se perdían en actividades sin importancia que se iniciaban gracias a una interrupción&#8230; cada una tomando entre 40 y 90 minutos.</p>
<h2>El plan</h2>
<p>Después de medir el tiempo desperdiciado, decidí formular y seguir un plan de trabajo más ordenado.</p>
<p>El objetivo era <strong>reemplazar el comportamiento compulsivo de estar revisando email y sitios sociales</strong> todo el tiempo por <strong>revisar compulsivamente herramientas de productividad </strong>que me ayuden a mantenerme enfocado en las tareas que necesito completar.</p>
<p>Las bases del plan eran sencillas:</p>
<ul>
<li>Crear un horario en mi Google Calendar para definir bloques de tiempo a seguir todos los días, semana a semana. La idea de los bloques de tiempo de 3 a 4 horas es que durante ese tiempo te dediques exclusivamente a ese tipo de tareas. A veces no hay nada que hacer en uno de los bloques y se puede reemplazar el bloque de un día por el de otro (lo del lunes pasa al miércoles y viceversa).<br />
<span style="color: #ffffff;">. </span></li>
<li>Definir una hora para leer correos en la mañana, luego un seguimiento a medio día y otro en la tarde. La idea es solo leer y responder correo tres veces al día.<br />
<span style="color: #ffffff;">. </span></li>
<li>Reservar el lunes para &#8220;Apagar Incendios&#8221;, es decir, situaciones de urgencia impredecibles de algún cliente, empleado o socio que inevitablemente caerán en tu inbox al inicio de la semana.<br />
<span style="color: #ffffff;">. </span></li>
<li>Reservar un día a la semana para actividades personales y &#8216;Learning Day&#8217; en que me dedico a leer, ver videos de charlas, entrevistas, etc.<br />
Experimenté con los jueves y los viernes&#8230; el mejor día resultó ser viernes. Si hay algún blog post, artículo, video, podcast o cualquier otro contenido interesante que me mandan o encuentro por allí, lo salvo a <a href="http://evernote.com">evernote</a> y el viernes los reviso durante mi &#8216;learning day&#8217;.<br />
<span style="color: #ffffff;">. </span></li>
<li>Utilizar el feature de &#8216;multiple-desktops&#8217; del sistema operativo (en mi caso MacOSX, pero ahora Windows y desde hace tiempos Linux tienen esta función). De esta forma dividiré mi pantalla en 4 categorías:<br />
<blockquote>
<ol>
<li><strong>Tracking</strong> de productividad (google calendar, PivotalTracker y Toggl)</li>
<li><strong>Producción</strong>: los programas que necesite para la tarea en cuestión, ya sea programar, escribir propuestas o diseñar.</li>
<li><strong>Comunicación</strong> (gmail)</li>
<li><strong>Social</strong> (twitter, facebook, blipea)</li>
</ol>
</blockquote>
</li>
<li>Desactivar las notificaciones automáticas de todos los programas y sitios web, y aparecer offline de GTalk y Skype la mayor parte del tiempo.<br />
<span style="color: #ffffff;">. </span></li>
<li>Crear filtros en mi email para mantener el inbox lo más vacío posible (siguiendo consejos de <a href="http://inboxzero.com/inboxzero/">inbox zero</a>)<br />
<span style="color: #ffffff;">.</span></li>
<li>Llevar bitácora de tiempo de todas las actividades en que trabajo&#8230; para esto siempre uso <a href="http://toggl.com">toggl.com</a><br />
<span style="color: #ffffff;">.</span></li>
<li>Algo importante es no tratar de tener más de 3 proyectos o bloques de tareas importantes por día&#8230; debes enfocar los bloques productivos sólo en esas tareas.<br />
<span style="color: #ffffff;">. </span></li>
</ul>
<p>Por ejemplo, mi calendario de Google se ve así actualmente:</p>
<p><img class="aligncenter size-full wp-image-465" title="calendar" src="http://alejandro.corpeno.com/wp-content/uploads/2010/06/calendar1.png" alt="" width="588" height="343" /></p>
<h2>La disciplina</h2>
<p>Como han de estar pensando, seguir un plan así al pie de la letra es bien difícil y casi imposible&#8230; pues sí, lo es&#8230;</p>
<p>A medida pasaban las semanas y lo probaba en la vida real, resultaba bastante difícil seguir el calendario al pie de la letra ya que  las situaciones &#8216;imprevistas&#8217; son precisamente eso&#8230; no se pueden predecir. Si tengo el lunes reservados para incendios, pero no ocurre nada ese día&#8230; significa que otro día algo pasará y tendré que dedicarle tiempo entonces. Claro que, como el mismo plan indica, podría usar las horas del lunes en una actividad planeada del miércoles y luego dedicar el miércoles para los incendios&#8230; pero se vuelve complicado llevar control de que cambios se hicieron en el plan.</p>
<p>Pero bueno, el calendario sirve como un plan aspiracional de <strong><em>&#8220;Lo que debería estar haciendo&#8221;</em></strong>.</p>
<p>Este calendario son bloques de tiempo generales, en los que puedo designar un bloque de 4 horas en la mañana del martes para &#8220;proyectos propios&#8221;, pero el detalle de qué tareas específicas debo hacer en ese momento debe ser llevado en otra herramienta. Para esto yo uso <a href="http://pivotaltracker.com">PivotalTracker.com</a> que me permite organizar listas de to-do para múltiples proyectos. También he usado <a href="http://basecamphq.com">Basecamp</a> en ocasiones pero al final de cuentas el que más me ha servido para proyectos de desarrollo de software es PivotalTracker.</p>
<p>Las tareas específicas que tengo en el PivotalTracker, organizadas por proyecto representan mi organización de <em><strong>&#8220;Lo que tengo que hacer&#8221;</strong></em> .</p>
<p>Finalmente, necesitaba una forma de llevar control de <strong><em>&#8220;Lo que estoy haciendo&#8221;</em></strong> &#8230; las actividades que realmente estoy haciendo y contabilizar el tiempo que le dedico a cada una&#8230; esto para aprender de mí mismo y la forma en que trabajo&#8230; así puedo ir ajustando el plan, cada vez haciéndolo más realista.</p>
<p>Como ya había mencionado antes, para este control uso toggl.com (antes usaba una hoja de excel), que es excelente para &#8216;marcar tarjeta&#8217; cada vez que inicias y terminas una tarea.</p>
<p>Entonces, al final he terminado con tres herramientas web que me ayudan a mantenerme enfocado mis actividades productivas, organizando mi vida en tres niveles:</p>
<p><img class="aligncenter size-full wp-image-460" title="Herramientas para mantenerte enfocado" src="http://alejandro.corpeno.com/wp-content/uploads/2010/06/productividad-screens.png" alt="" width="588" height="168" /></p>
<h2>Lo aprendido</h2>
<p>Desde mucho antes de esto, mis amigos cercanos, con quienes he trabajado en algún proyecto antes me apodaron &#8220;RoboCorp&#8221; porque siempre he sido bien organizado, puntual y todo. Creo que algunos de ustedes pensarán que esta metodología de trabajo es demasiado extrema y que solo un robot puede seguirla, pero creo que lo importante que he aprendido es que:</p>
<ol>
<li>Es bastante complicado seguir este plan al pie de la letra, pero ayuda a enfocarse y tener por lo menos una metodología definida de trabajo para no perderse en la nube de &#8220;tengo miles de cosas que hacer y no se por donde comenzar&#8221;.<br />
<span style="color: #ffffff;">. </span></li>
<li>Cada quien debe diseñar su propio plan de trabajo y seleccionar sus propias herramientas&#8230; esto es lo que ha servido para mí, pero no necesariamente sirva para todos.<br />
<span style="color: #ffffff;">.</span></li>
<li>Lo más importante es &#8220;conocerte a ti mismo&#8221; y con el uso de estas herramientas y disciplinas podes llegar a conocer detalles como &#8220;cuantas horas realmente puedo avanzar a la semana en un proyecto propio o de un cliente&#8221;.<br />
<span style="color: #ffffff;">.</span></li>
<li>Lo que más me gusta de trabajar así es que al final de la semana puedo ver que realmente he avanzado en las cosas importantes, puedo medirlo y verlo tangiblemente en un reporte de toggl.<br />
<span style="color: #ffffff;">.</span></li>
<li>Como todo vicio, el primer paso para eliminar la perdida de tiempo que viene del consumo desordenado de &#8216;social media&#8217; es aceptar que tenemos un problema. Si controlas el consumo de contenidos de una forma ordenada, no perderás tanto tiempo.<span style="color: #ffffff;"><br />
</span></li>
</ol>
<h2>Recursos útiles</h2>
<p>Algunos artículos y libros recomendados para este tema:</p>
<ul>
<li><a href="http://thepowerofless.com/">The Power of Less</a></li>
<li><a href="http://inboxzero.com/">Inbox Zero</a></li>
<li><a href="http://www.43folders.com/">43folders</a></li>
<li><a href="http://www.fourhourworkweek.com/">The 4-hour Workweek</a></li>
</ul>
<p>Herramientas:</p>
<ul>
<li><a href="http://basecamphq.com">Basecamp</a>: to-do lists y project management simplificado</li>
<li><a href="http://pivotaltracker.com">Pivotal Tracker</a>: seguimiento de tareas de desarrollo de software</li>
<li><a href="http://toggl.com">Toggl</a>: cronómetro de trabajo con reportes de time-sheets</li>
<li><a href="http://evernote.com">Evernote</a>: para capturar ideas, notas, pensamientos y URLs desde tu PC o móvil</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://alejandro.corpeno.com/2010/06/12/como-ser-mas-productivo-y-evitar-distracciones/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>WebConfLatino 2010, nuevamente en Honduras</title>
		<link>http://alejandro.corpeno.com/2010/03/30/webconflatino-2010-nuevamente-en-honduras/</link>
		<comments>http://alejandro.corpeno.com/2010/03/30/webconflatino-2010-nuevamente-en-honduras/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 15:34:41 +0000</pubDate>
		<dc:creator>corp</dc:creator>
				<category><![CDATA[negocios]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[conferencias]]></category>
		<category><![CDATA[emprendimiento]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[webconf]]></category>

		<guid isPermaLink="false">http://alejandro.corpeno.com/?p=441</guid>
		<description><![CDATA[En junio del año pasado disfrutamos de la conferencia WebConfLatino junto a 300 centroamericanos, evento que organizamos con el objetivo de traer a Centroamérica un evento de calidad centrado en temas de negocios en la web. La conferencia fue un éxito&#8230; los participantes, patrocinadores y expositores quedaron muy satisfechos y sorprendidos, lo que nos dejó claro [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://alejandro.corpeno.com/wp-content/uploads/2010/03/webconf2010.jpg"><img class="aligncenter size-full wp-image-443" title="WebConfLatino 2010 - 23 Julio 2010" src="http://alejandro.corpeno.com/wp-content/uploads/2010/03/webconf2010.jpg" alt="" width="585" height="270" /></a></p>
<p>En junio del año pasado disfrutamos de la conferencia WebConfLatino junto a 300 centroamericanos, evento que organizamos con el objetivo de traer a Centroamérica un evento de calidad centrado en temas de negocios en la web.</p>
<p>La conferencia fue un éxito&#8230; los participantes, patrocinadores y expositores quedaron muy satisfechos y sorprendidos, lo que nos dejó claro que WebConfLatino es un evento que debería realizarse todos los años.</p>
<p>Desde septiembre comenzamos ya con los detalles de organización del evento de WebConfLatino 2010. Hoy estamos en las etapas finales de confirmación de conferencistas, comenzando el contacto con patrocinadores locales y actualizando el look y contenido del sitio web.</p>
<p>El 12 de Abril lanzaremos el nuevo website en <a href="http://www.webconflatino.com">http://www.webconflatino.com</a> &#8230; por el momento puedes <a href="http://www.webconflatino.com/2009">ver detalles del evento del año pasado</a>. Por ahora podemos adelantar que el evento se llevará a cabo el viernes 23 de Julio 2010 en el Campus de UNITEC en Tegucigalpa, Honduras. Al igual que el año pasado tendremos conferencistas internacionales representando a España, Colombia, Estados Unidos, Chile, Guatemala entre otros. Esperamos nuevamente recibir participantes de varias ciudades de Honduras y de todos los países vecinos, Guatemala, El Salvador, Nicaragua, Costa Rica y todos quienes quieran venir.</p>
<p>Este 29 de Marzo hice una presentación en <a href="http://pio.la/presentations/webconflatino-en-centroamerica">Pio.LA</a>, una comunidad en línea de innovadores latinoamericanos que organiza des-conferencias. En esta ocasión la des-conferencia se trataba de las comunidades y movimientos de emprendimiento web en Latinoamérica y me invitaron a dar una presentación acerca de WebConf.</p>
<p>A continuación les dejo el video de la presentación:<br />
<object id="utv913357" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="585" height="475" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="utv_n_278952" /><param name="flashvars" value="autoplay=false" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.ustream.tv/flash/video/5813882" /><embed id="utv913357" type="application/x-shockwave-flash" width="585" height="475" src="http://www.ustream.tv/flash/video/5813882" allowscriptaccess="always" allowfullscreen="true" flashvars="autoplay=false" name="utv_n_278952"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://alejandro.corpeno.com/2010/03/30/webconflatino-2010-nuevamente-en-honduras/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Haciendo prototipos rápidos de Aplicaciones Web con MockingBird</title>
		<link>http://alejandro.corpeno.com/2010/01/07/haciendo-prototipos-rapidos-de-aplicaciones-web-con-mockingbird/</link>
		<comments>http://alejandro.corpeno.com/2010/01/07/haciendo-prototipos-rapidos-de-aplicaciones-web-con-mockingbird/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 05:08:15 +0000</pubDate>
		<dc:creator>corp</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[emprendimientos]]></category>

		<guid isPermaLink="false">http://alejandro.corpeno.com/?p=236</guid>
		<description><![CDATA[Normalmente he usado papel y lápiz (cuando solamente hago bosquejos de mis ideas) o me ha tocado hacer simulaciones más completas en Photoshop para mostrar a clientes (que les gusta ver todo bien acabado), pero en esta ocasión lo que necesitaba era algo más básico, pero no tan simple como papel y lápiz... allí fue que encontré MockingBird.]]></description>
			<content:encoded><![CDATA[<p><a href="http://gomockingbird.com/"><img style="display: block; margin-left: auto; margin-right: auto; border: 0px initial initial;" title="mockingbird" src="http://alejandro.corpeno.com/wp-content/uploads/2010/01/mockingbird.png" alt="mockingbird" width="588" height="416" /></a></p>
<p>Hace unos meses tuve la idea de una nueva aplicación web a la que llamé KidsAbacus. Durante varias semanas lo he platicado con algunos amigos y colaboradores para conocer sus opiniones e ideas.</p>
<p>En ese proceso me di cuenta que para explicar bien la aplicación necesitaría hacer un prototipo funcional (<em>mockup</em>) para describir de forma rápida lo que esta aplicación web haría y como sería la interacción básica con los usuarios.</p>
<p>Normalmente he usado papel y lápiz (cuando solamente hago bosquejos de mis ideas) o me ha tocado hacer simulaciones más completas en Photoshop para mostrar a clientes (que les gusta ver todo bien acabado), pero en esta ocasión lo que necesitaba era algo más básico, pero no tan simple como papel y lápiz&#8230; allí fue que encontré <a href="http://gomockingbird.com/" target="_blank">MockingBird</a>.</p>
<h2><strong>Qué es?</strong></h2>
<p>MockingBird es una excelente herramienta web que sirve para crear &#8216;mockups&#8217; o &#8216;bosquejos&#8217; de aplicaciones web de forma fácil, rápida y hospedada en &#8216;la nube&#8217; para facilitar el proceso de compartir tus ideas con colaboradores y amigos.</p>
<p>La aplicación está desarrollada en el framework <a href="http://cappuccino.org/" target="_blank">cappuccino</a>, no necesita flash para funcionar y es bastante intuitivo y gratis (por el momento). Creo que comencé a usar la herramienta pocas semanas después de que esta se lanzó en beta, el primer <a href="http://blog.gomockingbird.com/welcome-3238" target="_blank">post del blog</a> de MockingBird  tiene fecha 3 de Noviembre 2009 (yo lo comencé a usar a mediados de Noviembre).</p>
<p>Algunas de las funcionalidades que me gustan de la versión gratis de MockingBird:</p>
<ul>
<li>Compatible con Firefox, Chrome y Safari (Internet Explorer no importa&#8230; ese solo lo utilizan los usuarios)</li>
<li>No necesita Flash para funcionar</li>
<li>Permite múltiples proyectos bajo la misma cuenta</li>
<li>Export a PDF y PNG</li>
<li>Opción para compartir un URL público con tu prototipo</li>
<li>Enlaces de pantalla a pantalla para simular funcionalidad</li>
<li>Gran cantidad de elementos de interface de usuario (drop downs, checkboxes, inputs de fecha, iconos, etc)</li>
</ul>
<p>Cosas que no me gustar y/o me preocupan:</p>
<ul>
<li>Si un proyecto crece mucho, los elementos comunes (como barras/menús de navegación) no son parte de una plantilla, entonces hay que hacer cambios manualmente en cada pantalla</li>
<li>Privacidad de la información&#8230; ya que lo que los usuarios hacen en este sitio son básicamente &#8216;planos de diseño&#8217; de nuevas aplicaciones web, prácticamente &#8216;ellos&#8217; (los dueños del sistema) pueden espiar las ideas de otros y ejecutar las que más les gusten rápidamente. Si tu proyecto es demasiado &#8216;top secret&#8217; probablemente no te sientas tranquilo al utilizar MockingBird.</li>
</ul>
<h2>Conclusión</h2>
<p>En general me gusta mucho MockingBird y lo estaré usandolo en algunos proyectos en que necesito explicar fácilmente a otros miembros del equipo lo que deseo que el producto final haga.</p>
<p>Aunque sigo pensando que en la mayoría de los casos lo mejor es papel y lápiz, MockingBird es una excelente opción para cuando necesitas compartir tus ideas de aplicaciones web con otros.</p>
]]></content:encoded>
			<wfw:commentRss>http://alejandro.corpeno.com/2010/01/07/haciendo-prototipos-rapidos-de-aplicaciones-web-con-mockingbird/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>miCajita.com &#8211; Hace casi 10 años</title>
		<link>http://alejandro.corpeno.com/2009/11/18/micajita-com-hace-10-anos/</link>
		<comments>http://alejandro.corpeno.com/2009/11/18/micajita-com-hace-10-anos/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 01:15:01 +0000</pubDate>
		<dc:creator>corp</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://alejandro.corpeno.com/?p=108</guid>
		<description><![CDATA[Hace unas semanas estaba buscando un archivo antiguo en un disco duro de backup y encontré el folder de mi proyecto de graduación de la Universidad. En el año 2000 registré el dominio miCajita.com y hospedé allí mi proyecto para la presentación a la terna de graduación, pero despues de unos meses no continué el proyecto ni volví a renovar dominio... hoy es un proyecto muerto.]]></description>
			<content:encoded><![CDATA[<p><a href="http://alejandro.corpeno.com/wp-content/uploads/2009/11/micajita-home.gif"><img class="aligncenter size-full wp-image-114" title="MiCajita.com (2000)" src="http://alejandro.corpeno.com/wp-content/uploads/2009/11/micajita-home-thumb.gif" alt="MiCajita.com (2000)" width="450" height="225" /></a></p>
<p>Hace unas semanas estaba buscando un archivo antiguo en un disco duro de backup y encontré el folder de mi proyecto de graduación de la Universidad. En el año 2000 registré el dominio miCajita.com y hospedé allí mi proyecto para la presentación a la terna de graduación, pero despues de unos meses no continué el proyecto ni volví a renovar dominio&#8230; hoy es un proyecto muerto.</p>
<p>Fue mi segunda aplicación web en PHP/MySQL, unos meses antes había desarrollado junto a <a href="http://www.twitter.com/rbreve">@rbreve</a> un portal multiservicios llamado SiliconAlien, proyecto que hoy tampoco existe (<a href="http://web.archive.org/web/20010418151651/http://www.siliconalien.com/">siliconalien en archive.org</a>)</p>
<h2><strong>En que consistía?</strong></h2>
<p>La idea de miCajita era simple y apta para aquellos días en que no existía Gmail y las cuentas de correo gratuitas (e incluso las pagadas) tenían límites de espacio demasiado bajas.</p>
<p>En esos días era muy común que uno no podía enviar correos con attachments de más de 1MB porque posiblemente la casilla de el receptor estaba llena. miCajita era una solución en que cada usuario podía crear su cuenta de 10 a 100MB de espacio para subir archivos que quisiera tener disponibles para compartir con otros.</p>
<p>El sistema incluía opciones como:</p>
<ul>
<li>File Manager web con folders públicos y privados</li>
<li>Control de accesos para lectura y escritura a nivel de archivo y folder para usuarios individuales y grupos</li>
<li>Envío de archivos desde miCajita hacia direcciones de email</li>
</ul>
<h2><strong>Por qué murió?</strong></h2>
<p>Era un proyecto que inicié por razones académicas (para graduarme) y en esos días estaba más metido en la onda de iniciar mi  empresa de consultoría, desarrollando websites para clientes.</p>
<p>Me pasó por la mente lanzarlo públicamente pero le tuve miedo a varios aspectos como:</p>
<ul>
<li><strong>Competencia existente: </strong>servicios como <a href="http://www.xdrive.com/">Xdrive</a>, el cual hasta tenía un software instalable para integrase al File Explorer de Windows, creando un disco virtual al podías drag and drop archivos para subirlos.</li>
</ul>
<ul>
<li><strong>Falta de dinero: </strong>me preocupaba el costo de hosting, ya que el plan era regalar unos 100MB por usuario si lanzaba el servicio al público. En ese entonces el hosting era más caro que ahora y no tenía fondos propios para soportar el costo.</li>
</ul>
<ul>
<li><strong>Falta de interés: </strong>los dos factores anteriores hicieron que mi interés por lanzar el proyecto públicamente muriera. Si volviera al pasado, posiblemente hubiera seguido con el proyecto buscando apoyo financiero externo&#8230;</li>
</ul>
<h2><strong>Lo positivo&#8230;</strong></h2>
<p>Creo que todo proyecto y experiencia en la vida deja algo positivo.<br />
De este proyecto puedo mencionar unas cuantas consecuencias positivas:</p>
<ul>
<li><strong>Aprendizaje: </strong>siendo uno de mis primeros proyectos de desarrollo web aprendí mucho en un tiempo bastante corto. Esto me sirvió en mi objetivo de desarrollo profesional como consultor y empresario.</li>
</ul>
<ul>
<li><strong>Dinero: </strong>Fue la base de un sistema privado de folders compartidos que vendimos a varios clientes para sus intranets. Logré monetizar el tiempo invertido en la programación vendiendolo al menos 10 veces y creando un buen nombre para mi empresa.</li>
</ul>
<ul>
<li><strong>Quedar con ganas de hacer más: </strong>el haber realizado el proyecto y seguirle los pasos a los servicios similares que existían en ese momento me hizo ver (a la larga) que las buenas ideas surgen y evolucionan rápidamente&#8230; me dejó <a href="http://www.tubabel.com/definicion/28093-picado" target="_self">picado</a> por intentar nuevamente con proyectos propios.</li>
</ul>
<h2><strong>Documentación</strong></h2>
<p>En el folder del backup que mencioné al inicio encontré dos documentos relevantes:</p>
<ul>
<li><a href="http://alejandro.corpeno.com/wp-content/uploads/2009/11/ManualdeUsuario-micajita.pdf">Manual de Usuario</a> &#8211; <span style="color: #888888;">350 KB</span></li>
<li><a href="http://alejandro.corpeno.com/wp-content/uploads/2009/11/ManualdeTecnico-micajita.pdf">Manual de Técnico</a> &#8211; <span style="color: #888888;">569 KB</span></li>
</ul>
<p>Son suvenirs de hace 10 años&#8230; mucho ha cambiado desde ese momento y si volviera a programar el sistema lo haría completamente de otra forma, pero allí les dejo para quienes tengan curiosidad de leer más acerca de lo que fue miCajita en su momento.</p>
]]></content:encoded>
			<wfw:commentRss>http://alejandro.corpeno.com/2009/11/18/micajita-com-hace-10-anos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Leyendo APIs desde Rails</title>
		<link>http://alejandro.corpeno.com/2009/11/12/leyendo-apis-desde-rails/</link>
		<comments>http://alejandro.corpeno.com/2009/11/12/leyendo-apis-desde-rails/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 23:12:01 +0000</pubDate>
		<dc:creator>corp</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[apis]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://alejandro.corpeno.com/?p=117</guid>
		<description><![CDATA[Esta semana tuve que integrar un sitio hecho en Rails con el API de wine.com. Mientras esta aplicación está en desarrollo se hospeda en un grid container pequeño de media temple.

Todo estaba funcionando bien en mi computadora cuando hice la integración usando el gem "hpricot", pero al subirlo al grid container tuve problemas. El log de Rails indicaba que el archivo hpricot_scan.so no era accesible.]]></description>
			<content:encoded><![CDATA[<p>Esta semana tuve que integrar un sitio hecho en Rails con el <a href="http://api.wine.com/wiki/api-object-dictionary">API de wine.com</a>. Mientras esta aplicación está en desarrollo se hospeda en un <a href="http://mediatemple.net/webhosting/gs/features/containers.php#ror" target="_blank">grid container</a> pequeño de media temple.</p>
<p><strong>El problema&#8230;</strong></p>
<p>Todo estaba funcionando bien en mi computadora cuando hice la integración usando el gem &#8220;hpricot&#8221;, pero al subirlo al grid container tuve problemas. El log de Rails indicaba que el archivo hpricot_scan.so no era accesible.</p>
<p>Encontré la solución <a href="http://www.cherpec.com/2009/06/hpricot-081-on-ruby-185/" target="_blank">en un blog</a>, el problema era que la versión de Ruby bajo la que operan los grid containers es la 1.8.5 y para esta versión hay unos problemas que requiren que se modifique el código fuente del gem.</p>
<p>OK, procedí a hacer los cambios en el código fuente tal como dice el artículo, pero me surgió otro problema&#8230;</p>
<pre><span style="color: #ff0000;">/usr/lib/ruby/1.8/fileutils.rb:754: command not found: ragel -v</span></pre>
<p>El  &#8220;rake&#8221; para regenerar el gem con los cambios requería &#8220;ragel&#8221; en el servidor&#8230;</p>
<p>Ya que los containers son pedazos virtuales de una maquina, no tengo acceso root para instalar nuevos paquetes, esto me impidió solucionar el problema:</p>
<ul>
<li>Instalando una versión más nueva de Ruby, por ejemplo 1.8.6 o 1.8.7</li>
<li>Instalando Ragel y completar el proceso de regenerar la gem hpricot</li>
</ul>
<p>Otra opción era pasar todo a un servidor dedicado y volver a preparar el ambiente de desarrollo, pasar la base de datos, etc&#8230; esto es factible pero no cuando necesito que mi cliente vea el update mañana.</p>
<p>La otra opción era hacer la integración nuevamente con algo diferente a  hpricot&#8230; opte por esta.</p>
<p><strong>La Solución</strong></p>
<p>Encontré <a href="http://railstips.org/2008/8/12/parsing-xml-with-ruby">un blog post</a> que compara tres formas de leer XML desde Rails&#8230; este me salvó ya que pude hacer la integración utilizando un método que no requiere librerías externas.</p>
<p>El artículo compara <a href="http://www.ruby-doc.org/stdlib/libdoc/rexml/rdoc/index.html">REXML</a>, <a href="http://wiki.github.com/hpricot/hpricot">Hpricot</a> y <a href="http://libxml.rubyforge.org/">libxml-ruby</a> &#8230; de todas la más lenta es REXML, pero es la que no depende de librerías externas y por lo tanto la que termine utilizando (probé con libxml pero tuve un problema similar).</p>
<p>Claro que esta es una solución temporal, solo para que mi contraparte en el proyecto pueda ver el avance.</p>
<p><strong>Ejemplo de Uso de REXML<br />
</strong></p>
<p>La solución con REXML es fácil de implementar y quiero compartirla en caso que alguien necesite leer XMLs desde una aplicación de Rails sin necesidad de usar librerías separadas.</p>
<p>Para el ejemplo usaremos el API de Twitter&#8230; este es el XML de mi timeline: <a href="http://twitter.com/statuses/user_timeline/corp.xml">http://twitter.com/statuses/user_timeline/corp.xml</a></p>
<p>Primero crearemos una función que recibe como parametro el usuario de twitter que queremos consultar, luego lee el XML correspondiente, lo almacena en un arreglo llamado <strong>twitts </strong>y lo devuelve con <strong>return twitts</strong>:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> get_twitts<span class="br0">&#40;</span>user<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;apiurl = <span class="st0">&quot;http://twitter.com/statuses/user_timeline/#{user}.xml&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;url = <span class="kw4">URI</span>.<span class="me1">parse</span><span class="br0">&#40;</span>apiurl<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;request = <span class="re2">Net::HTTP::Get</span>.<span class="me1">new</span><span class="br0">&#40;</span>apiurl<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;response,body = <span class="re2">Net::HTTP</span>.<span class="me1">new</span><span class="br0">&#40;</span>url.<span class="me1">host</span>, url.<span class="me1">port</span><span class="br0">&#41;</span>.<span class="me1">start</span> <span class="br0">&#123;</span>|http| http.<span class="me1">request</span><span class="br0">&#40;</span>request<span class="br0">&#41;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;twitts=<span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;doc = <span class="re2">REXML::Document</span>.<span class="me1">new</span><span class="br0">&#40;</span>body<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;doc.<span class="me1">elements</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="st0">&#8216;statuses/status&#8217;</span><span class="br0">&#41;</span> <span class="kw1">do</span> |s|</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;h = <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;%w<span class="br0">&#91;</span>created_at text source<span class="br0">&#93;</span>.<span class="me1">each</span> <span class="kw1">do</span> |a|</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;h<span class="br0">&#91;</span>a.<span class="me1">intern</span><span class="br0">&#93;</span> = s.<span class="me1">elements</span><span class="br0">&#91;</span>a<span class="br0">&#93;</span>.<span class="me1">text</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;h<span class="br0">&#91;</span><span class="re3">:screen_name</span><span class="br0">&#93;</span> = s.<span class="me1">elements</span><span class="br0">&#91;</span><span class="st0">&#8216;user&#8217;</span><span class="br0">&#93;</span>.<span class="me1">elements</span><span class="br0">&#91;</span><span class="st0">&#8216;screen_name&#8217;</span><span class="br0">&#93;</span>.<span class="me1">text</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;h<span class="br0">&#91;</span><span class="re3">:profile_image_url</span><span class="br0">&#93;</span> = s.<span class="me1">elements</span><span class="br0">&#91;</span><span class="st0">&#8216;user&#8217;</span><span class="br0">&#93;</span>.<span class="me1">elements</span><span class="br0">&#91;</span><span class="st0">&#8216;profile_image_url&#8217;</span><span class="br0">&#93;</span>.<span class="me1">text</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;twitts &lt;&lt; h</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">return</span> twitts</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Ahora ya podríamos usar esta función en nuestro controller, enviandole el usuario como parámetro.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">def</span> show_mytwitts</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">@twitts</span> = get_twitts<span class="br0">&#40;</span><span class="st0">&quot;corp&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
</ol>
</div>
<p>Para mostrar los twitts que almacenamos en el controller, la vista sería algo así:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;%<span class="kw1">for</span> twitt <span class="kw1">in</span> <span class="re1">@twitts</span> do%&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;img src=<span class="st0">&quot;&lt;%=twitt[:profile_image_url]%&gt;&quot;</span> width=<span class="st0">&quot;25&quot;</span> /&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;strong&gt;&lt;%=twitt<span class="br0">&#91;</span><span class="re3">:screen_name</span><span class="br0">&#93;</span>%&gt;:&lt;/strong&gt; &lt;%=twitt<span class="br0">&#91;</span><span class="re3">:text</span><span class="br0">&#93;</span>%&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; Enviado desde &lt;%=twitt<span class="br0">&#91;</span><span class="re3">:source</span><span class="br0">&#93;</span>%&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;hr /&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;%end%&gt;</div>
</li>
</ol>
</div>
<p><strong>Conclusión</strong></p>
<p>Hay muchas formas de leer XML desde Rails, de hecho las mejores y más elegantes facilitan mucho más el acceso a los datos por medio de integración con los modelos.</p>
<p>Lo que pude implementar con REXML es una solución rápida y simple que sirve para la etapa en que estas en desarrollo y para que tu cliente (socio o contraparte) pueda ver los resultados de la integración al API deseado.</p>
<p>Para producción conviene utilizar soluciones más eficientes. Mientras investigaba encontré esta presentación que describe muchas formas elegantes y más eficientes de leer XML con Rails:</p>
<div id="__ss_955192" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Ruby Xml Mapping" href="http://www.slideshare.net/marc.seeger/ruby-xml-mapping-presentation">Ruby Xml Mapping</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ruby-xml-mapping-1233006534538089-1&amp;stripped_title=ruby-xml-mapping-presentation" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ruby-xml-mapping-1233006534538089-1&amp;stripped_title=ruby-xml-mapping-presentation" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/marc.seeger">Marc Seeger</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://alejandro.corpeno.com/2009/11/12/leyendo-apis-desde-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
