<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Tutoriales de Desarrollo y Diseño Web | Web.Ontuts</title>
	
	<link>http://web.ontuts.com</link>
	<description>Tutoriales y Recursos Web de Calidad en Español</description>
	<lastBuildDate>Sun, 05 Feb 2012 15:47:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/web-ontuts" /><feedburner:info uri="web-ontuts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>web-ontuts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>En la Conferencia Rails 2011: las conferencias 1/2</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/L4FOfbKcQqU/</link>
		<comments>http://web.ontuts.com/general/en-la-conferencia-rails-2011-las-conferencias-12/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 15:57:46 +0000</pubDate>
		<dc:creator>Roberto Luis Bisbé</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[conferenciaror]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7480</guid>
		<description><![CDATA[Roberto nos resume el segundo día de la Conferenciaror en Madrid. En esta ocasión comienzan las ponencias relacionadas mayormente con Ruby on Rails... ¡no tienen desperdicio!


Related posts:<ol><li><a href='http://web.ontuts.com/general/en-la-conferencia-rails-2011-los-talleres/' rel='bookmark' title='Permanent Link: En la Conferencia Rails 2011: los talleres'>En la Conferencia Rails 2011: los talleres</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>Segundo día: Empiezan las conferencias</h3>
<p>Seguimos cubriendo la serie de la conferencia Rails, esta vez ya cubriendo las conferencias en sí, fueron muchas así que intentaré ser conciso:</p>
<h4>Introducción y estado de Ruby on Rails</h4>
<p>Primeramente, y tras el proceso de inscripción que dio como resultado una camiseta (para todos) y una taza (solo para los más previsores), tomamos asiento en el Florida Park, un sitio interesante situado dentro de ese enorme lugar que es el Parque del Retiro en Madrid, Javier Ramirez nos dio la bienvenida comentando el estado de Rails, y la contribución de la comunidad española a la causa, fue una charla muy interesante que nos permitió ver un poco cómo evolucionaban a la par el framework y los eventos relacionados.</p>
<h4>Julian Fischer: hay que actualizarse a la última versión</h4>
<p>Tras esta breve introducción al estado de Rails, Julian Fischer nos estuvo hablando, primeramente de cómo vino desde Alemania en moto para darse el paseíllo, y más adelante de cómo migraron sus aplicaciones (y más importante, sus desarrolladores) a rails 3.x. Nos habló de la necesidad de actualizar, de convencernos que tenemos que hacerlo y de convencer a nuestros clientes de tener los productos funcionando con la última versión disponible. También destacó la idea de tener (desde el punto de vista de un jefe de proyectos) a nuestra gente también actualizada (dar opciones a la formación e incentivarla).</p>
<h4>CofeeScript con Nicolás Sanguinetti</h4>
<p>Tras el cofee-break, una sesión de CofeeScript, impartida por Nicolás Sanguinetti, donde nos comentó las deficiencias de Javascript, y cómo CofeeScript ayudaba a paliarlas, usando una sintaxis más simple, y con varios ejemplos que nos ayudaron a tener una idea en general de la herramienta. Para gente con conocimientos de Javascript, era una de las charlas más recomendable.</p>
<h4>How I learned to smell code</h4>
<p>La última charla de la mañana se titulaba &#8220;How I Learned to Smell Code&#8221; que podemos traducir por &#8220;Cómo he aprendido a oler el código&#8221;, una charla impartida por Renée de Voursney, donde tras explicarnos su trayectoria profesional, nos comentó cómo sus capacidades iban evolucionando desde la universidad (donde tu código no se escribe para ser mantenible), primeros trabajos (donde, pese a mayor control, tu código era apenas reutilizado), hasta llegar a la comunidad Rails, viendo cientos de proyectos, y aprendiendo crear código que fuera usable por el resto de desarrolladores.</p>
<p>Finalmente nos comentó varios puntos a tener en cuenta a la hora de aprender:</p>
<ul>
<li>Intentar enseñarselo a alguien</li>
<li>Hacer katas (ejercicios de código)</li>
<li>Leer libros (concretamente nos propuso The Pragmatic Programmer y Clean Code: a handbook of agile software craftsmanship)</li>
<li>Tener un hobby, a ser posible que no tenga que ver nada con tu trabajo</li>
</ul>
<h4>Después de comer: introducción a 5 lenguajes diferentes</h4>
<p>Tras la comida, la primera sesión de la tarde fue una introducción en poco más de una hora, a 5 lenguajes de programación diferentes, por Sergio Gil: <strong>erlang</strong>, un lenguaje funcional, orientado a la concurrencia y a la tolerancia a errores, <strong>haskell</strong>, un lenguaje puramente funcional, con un sistema de tipos interesante, y extremadamente eficiente, <strong>common lisp</strong>, un lenguaje de programación funcional donde se mezclan indistintamente código y datos, la sintaxis no existe y se presta bastante a la metaprogramación (hacer programas que manipulan código, a que suena bien?), <strong>clojure</strong>, que es una versión más adecuada al siglo XXI de Lisp, más funcional si cabe y con el soporte de la máquina virtual java.</p>
<p>Finalmente <strong>ujfalusi</strong>, un lenguaje de programación ofuscado creado por el ponente, que nos dio la idea de crear nuestro propio lenguaje de programación, y tener la idea de cómo funcionan por dentro, y hacer algo realmente &#8220;geek&#8221; (No, ¡con esto no se liga!).</p>
<h4>Paolo Perrota desde una perspectiva de Java o C#</h4>
<p>La última sesión de la tarde, preparada, estuvo a cargo de Paolo Perrota, nos acercó a Rails desde la perspectiva de un programador Java o C# (estos bichos raros que <del>venimos</del> vienen de un mundo estático), comentó las principales diferencias, en las herramientas, en el diseño, en el uso de la línea de comandos como herramienta de programación VS uso de un IDE &#8220;grande y poderodo&#8221; como Eclipse, Netbeans o Visual Studio.</p>
<p>Fue una charla intensa y muy interesante que nos enseñó a ver con otros ojos otros lenguajes, a sentirnos incómodos con lo que hacemos y tengamos la necesidad de buscar algo más, y de tener un pensamiento más generalista a la hora de aprender un lenguaje nuevo, y que lo menos importante es la sintaxis.</p>
<h4>Mini-sesiones como colofón final</h4>
<p>Como colofón, tuvimos la oportunidad de ver mini-sesiones que surgieron a lo largo de la mañana donde vimos cosas como:</p>
<ul>
<li>Crear una historia, contarla y vivirla, por Luismi Cavallé (pronunciado KAH-BAH-YEAH!) altamente recomandado si veis algo suyo.</li>
<li>Trucos para la shell de OSX, atajos de teclado que nos hacen la vida más fácil, por Jorge Dias</li>
<li>ElasticSearch, un motor de búsqueda interesante que podemos incorporar a nuestros proyectos, por Eli Kroumova</li>
<li>Sergio Arbeo nos presentó su &#8220;<strong>Alternative Programming Languages Interest Group</strong>&#8220;</li>
<li>Nacho Coloma habló de <strong>hashBang</strong> y<strong> pushState</strong> dos características que pueden dar bastante de que hablar (para recargar la web y cambiar de url sin hacer un refresco completo de la página)</li>
<li>Josh Kalderimis nos invitó a unirnos a su grupo <strong>Social Charity Collective</strong>, y donar el resultado de un fin de semana de trabajo a obras de caridad, hay mucha gente que puede estar necesitando nuestro código.</li>
<li>Fernando Martinez, también hizo de las suyas invitandonos a trabajar con él en su empresa <img src='http://web.ontuts.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> , así que ya sabeis, si buscais trabajo Rails en Madrid, puede ser una oportunidad.</li>
</ul>
<p>Mañana terminará el evento, y tendréis otro resumen como este,</p>
<p>¡Nos vemos entonces!</p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/general/en-la-conferencia-rails-2011-los-talleres/' rel='bookmark' title='Permanent Link: En la Conferencia Rails 2011: los talleres'>En la Conferencia Rails 2011: los talleres</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/L4FOfbKcQqU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/general/en-la-conferencia-rails-2011-las-conferencias-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/general/en-la-conferencia-rails-2011-las-conferencias-12/</feedburner:origLink></item>
		<item>
		<title>En la Conferencia Rails 2011: los talleres</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/96AW2qWSGx4/</link>
		<comments>http://web.ontuts.com/general/en-la-conferencia-rails-2011-los-talleres/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 10:45:02 +0000</pubDate>
		<dc:creator>Roberto Luis Bisbé</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[backbone]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7478</guid>
		<description><![CDATA[Roberto nos cuenta cómo está desarrollándose la Conferencia Rails 2011 en Madrid. Talleres, ponencias y mucho networking en Madrid. Esta vez le ha tocado el turno a Ruby on Rails y Backbone.js... ¡no os lo perdáis!


Related posts:<ol><li><a href='http://web.ontuts.com/general/en-la-conferencia-rails-2011-las-conferencias-12/' rel='bookmark' title='Permanent Link: En la Conferencia Rails 2011: las conferencias 1/2'>En la Conferencia Rails 2011: las conferencias 1/2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>El primer día: talleres</h3>
<p>Hoy hemos podido difrutar de tres workshops que se presentan como introducción a la Conferencia Rails 2011, un evento que reúne profesionales del universo RoR para comentarnos sus experiencias, revelarnos trucos, pasar un buen rato y compartir.</p>
<h4>Rompiendo el hielo con Ruby on Rails</h4>
<p>La primera sesión estuvo a cargo de <strong>Raimond García</strong>, quien nos ayudó a romper el hielo con Rails, con un <em>hola mundo</em> desde 0, pasando por una introducción al modelo mvc, y a las particularidades de Rails, hasta el despliegue completo usando los servicios en la nube de Heroku. Una charla amena y entretenida, que nos permitió una vez terminada, probar por nosotros mismos cosas como enviar un e-mail a un usuario cuando se registre.</p>
<h4>Programación funciona sobre Ruby</h4>
<p>La segunda sesión fue un poco más fuerte, ya que estaba enfocada a las ventajas de usar programación funcional sobre Ruby. <strong>Arnau Sanchez</strong> nos mostró, entre otras cosas cómo implementar una versión muy básica de quicksort (uno de los algoritmos de ordenación por excelencia) en apenas 4 líneas, además enseñaba trucos para lograr un procesamiento paralelo de las operaciones. En mi opinión fue tremendamente interesante a pesar de mi falta de experiencia en Ruby. Como deberes me apunté aprender Haskell y F# (para un posible futuro artículo, tal vez).</p>
<h4>Backbone.js</h4>
<p>Tras la comida, una sesión de Backbone.js, un framework MVC basado en javascript, en el que estuvimos construyendo, bajo la tutela de <strong>Javier Arce</strong> una pequeña aplicación para calificar películas, tras una introducción a javascript desde el punto de vista del programador Ruby, impartida por <strong>Simon Tokumine</strong>, quien después estuvo explicando las particularidades de node.js, un framework que permite programación basada en eventos, y pudimos ver algunos ejemplos de uso (un servidor web, o un servidor de chat entre otros).</p>
<h4>Mañana más y mejor</h4>
<p>Felicitar a la organización de la conferencia, así como a los chicos de <strong>Madrid On Rails</strong>, por proporcionar las instalaciones para estas sesiones, y a los ponentes por su altísimo nivel técnico y la calidad de las ponencias.</p>
<p>¡Mañana más, desde Florida Park (El Retiro)!</p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/general/en-la-conferencia-rails-2011-las-conferencias-12/' rel='bookmark' title='Permanent Link: En la Conferencia Rails 2011: las conferencias 1/2'>En la Conferencia Rails 2011: las conferencias 1/2</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/96AW2qWSGx4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/general/en-la-conferencia-rails-2011-los-talleres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/general/en-la-conferencia-rails-2011-los-talleres/</feedburner:origLink></item>
		<item>
		<title>Monográfico MVC: Introducción</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/Z3W1fnh2M5M/</link>
		<comments>http://web.ontuts.com/tutoriales/monografico-mvc-introduccion/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 16:51:50 +0000</pubDate>
		<dc:creator>Roberto Luis Bisbé</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[ror]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7345</guid>
		<description><![CDATA[La semana pasada me surgió la necesidad de hacer un sistema de gestión de eventos para el DotNetClub del que formo parte y, aprovechando que lo estábamos estudiando en la carrera, decidí emplear el patrón Modelo-Vista-Controlador (MVC) y crear esta serie de artículos.


Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/introduccion-a-object-relational-mapping-orm/' rel='bookmark' title='Permanent Link: Introducción a Object-Relational Mapping (ORM)'>Introducción a Object-Relational Mapping (ORM)</a></li>
<li><a href='http://web.ontuts.com/tutoriales/tutorial-introduccion-zend-framework-php/' rel='bookmark' title='Permanent Link: Introducción a Zend Framework PHP'>Introducción a Zend Framework PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/grails-introduccion-a-desarrollo-web-java-para-dummies/' rel='bookmark' title='Permanent Link: Grails: Introducción a desarrollo web Java para &#8216;dummies&#8217;'>Grails: Introducción a desarrollo web Java para &#8216;dummies&#8217;</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>¿Por qué esta serie?</h3>
<p>La semana pasada me surgió la necesidad de hacer un sistema de gestión de eventos para el DotNetClub del que formo parte y, aprovechando que lo estábamos estudando en la carrera, decidí emplear el patrón Modelo-Vista-Controlador (MVC).</p>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/06/ror1.jpg" alt="Ror" /></center></p>
<p>El problema era que no me decidía si desarrollarlo en ASP.net o en Ruby on Rails, así que se me ha ocurrido hacer una pequeña implementación de la misma interfaz en los dos modelos para ver las diferencias, y ya que estaba, compartirlo con vosotros.</p>
<p>Como en un solo artículo es imposible dar siquiera una primera aproximación a cada una de las herramientas, lo hemos dividido en una serie, titulada <strong>Monográfico MVC</strong>.</p>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/06/asp.jpg" alt="ASP.net MVC" /></center></p>
<p>A lo largo de esta serie, veremos cómo partiendo de un diseño básico, podemos agregar la lógica MVC, y apreciar las diferencias entre dos tecnologías concretas, y muy diferentes:</p>
<ul>
<li><strong>Ruby on Rails</strong></li>
<li><strong>ASP.net MVC3</strong></li>
</ul>
<p>Comencemos pues la introducción al patrón MVC.</p>
<h3>Introducción: ¿Qué es MVC?</h3>
<p>De acuerdo con la definición de Wikipedia es:</p>
<blockquote><p>Patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos.</p></blockquote>
<p>Esto significa que tendremos tres componentes principales en nuestra aplicación:</p>
<h4>Modelo</h4>
<p>El modelo lo podemos ver como la base de datos, o el sistema relacional que controla cómo se leen y se guardan los datos, así como cierta lógica de validación y relaciones entre ellos (Lo podemos llamar modelo relacional, si estamos trabajando con bases de datos)</p>
<h4>Vista</h4>
<p>La vista es lo que se muestra al usuario o a un servicio web, es decir, una vista puede ser una página HTML para que el usuario acceda a los datos, una interfaz en Silverlight, o incluso un fichero XML que se consuma desde un programa externo.</p>
<h4>Controlador</h4>
<p>El controlador es el enlace entre la vista y el modelo, se encarga de recibir los eventos desde la vista (por ejemplo un botón “Enviar” de un formulario o de un cuadro de login) y de exponer a la vista los datos desde el modelo.</p>
<p>Este modelo no es nuevo, sino que fue introducido en 1987 en el lenguaje de programación SmallTalk, si quereis echar un vistazo a la especificación original, la podeis encontrar aquí: <a href="http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html">http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html</a></p>
<p><a href="http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html"></a>Con el auge de las aplicaciones web, se ha demostrado ser un modo de programación que encaja bastante bien con internet, siendo tanto el modelo y el controlador ejecutados del lado del servidor, y la vista ejecutada del lado del cliente.</p>
<h3>Diseño inicial</h3>
<p>Para poder centrarnos en los diferentes sistemas y no centrarnos tanto en el diseño, partimos de un diseño HTML ya construido que contiene dos páginas:</p>
<ul>
<li><strong>Lista de eventos</strong></li>
<li><strong>Ventana de detalles</strong></li>
</ul>
<p>La lista de eventos contendrá la fecha, el título del evento, el ponente y una descripción.</p>
<p>La ventana de detalles contendrá, además, el edificio, el aula, y la hora, así como dos opciones para editar y/o borrar el evento.</p>
<p>Visto este diseño podemos extraer el conjunto de datos necesario, y su tipo:</p>
<ul>
<li>Id: <strong>Integer</strong></li>
<li>Titulo: <strong>String</strong></li>
<li>Fecha: <strong>Date</strong></li>
<li>Edificio:<strong> String</strong></li>
<li>Ponente: <strong>String</strong></li>
<li>Descripcion: <strong>String</strong></li>
</ul>
<p>A partir de este diseño, y usando técnicas de scaffolding, comprobaremos lo sencillo que puede ser empezar a trabajar.</p>
<p>En la próxima entrega veremos cómo agregamos lógica a esta web usando el primero de los jugadores: <em><strong>Ruby on Rails</strong></em>.</p>
<p>¡Nos vemos en la próxima publicación!</p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/introduccion-a-object-relational-mapping-orm/' rel='bookmark' title='Permanent Link: Introducción a Object-Relational Mapping (ORM)'>Introducción a Object-Relational Mapping (ORM)</a></li>
<li><a href='http://web.ontuts.com/tutoriales/tutorial-introduccion-zend-framework-php/' rel='bookmark' title='Permanent Link: Introducción a Zend Framework PHP'>Introducción a Zend Framework PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/grails-introduccion-a-desarrollo-web-java-para-dummies/' rel='bookmark' title='Permanent Link: Grails: Introducción a desarrollo web Java para &#8216;dummies&#8217;'>Grails: Introducción a desarrollo web Java para &#8216;dummies&#8217;</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/Z3W1fnh2M5M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/tutoriales/monografico-mvc-introduccion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/tutoriales/monografico-mvc-introduccion/</feedburner:origLink></item>
		<item>
		<title>Cuestamenos, ahorra y gana dinero con tus compras y amigos</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/aooxkFu1Vu8/</link>
		<comments>http://web.ontuts.com/noticias/cuestamenos-ahorra-y-gana-dinero-con-tus-compras-y-amigos/#comments</comments>
		<pubDate>Wed, 18 May 2011 09:19:11 +0000</pubDate>
		<dc:creator>Adrián Mato</dc:creator>
				<category><![CDATA[noticias]]></category>
		<category><![CDATA[cuestamenos]]></category>
		<category><![CDATA[proyectos]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7418</guid>
		<description><![CDATA[Presentamos el proyecto Cuestamenos, de Enrique Medina uno de nuestros colaboradores en Ontuts. Si realmente queréis hacer uso de las promociones de distintas marcas conocidas, ahorrar y participar en diversos premios... ¡no dejéis de echarle un vistazo al artículo!


No related posts.]]></description>
			<content:encoded><![CDATA[<h3>¿Ya estáis vendiendo patrocinados y spameando?</h3>
<p>No, al igual que he publicado un artículo sobre <a href="http://web.ontuts.com/general/glibox-o-como-obtener-wordpress-themes-a-bajo-coste/">Glibox</a> hace ya algunas semanas mi idea con este tipo de publicaciones es <strong>echar un cable a todos los proyectos nacionales</strong> que quieran promocionarse. En realidad no publicamos cualquier cosa que nos manden, pero sí que lo hacemos con aquellos proyectos que realmente tienen un trabajo y una planificación detrás.</p>
<p>En esta ocasión el proyecto es <a href="http://cuestamenos.com/">Cuestamenos</a> de <a href="http://web.ontuts.com/author/enrique/">Enrique Medina</a> que ya ha colaborado anteriormente con Ontuts con alguna publicación sobre Grails.</p>
<h3>¿Qué es Cuestamenos y qué ofrece?</h3>
<p>El proyecto se resume en <strong>ahorra y gana dinero comprando e invitando a tus amigos</strong>. Ya ha sido presentado hace un tiempo en <a href="http://loogic.com/cuestamenos-com-y-el-negocio-del-cashback/">Loogic</a> y me comentan que les ha sorprendido para bien la aceptación y acogimiento que ha recibido entre los usuarios que realizan sus compras a través de Internet.</p>
<p><center><img alt="Cuestamenos" src="http://web.ontuts.com/wp-content/uploads/2011/05/cuestamenos.png" title="Cuestamenos" class="alignnone" width="512" height="225" /></center></p>
<p>Sin embargo, y gracias al feedback de la comunidad de usuarios, no han tardado en vislumbrar la necesidad de dotar de mayor usabilidad y visibilidad a la oferta de tiendas, productos y promociones, por lo que hace unas semanas han decidido ponerse manos a la obra y &#8220;reinventar&#8221; la web focalizando todos sus esfuerzos en una <strong>mayor facilidad</strong> a la hora de <strong>encontrar</strong> la <strong>información</strong> que buscamos.</p>
<p>El resultado según me comentan &#8220;ha sido espectacular a juzgar por las opiniones y comentarios de nuestros usuarios y el creciente volumen de nuevos registros&#8221;.</p>
<h3>¿Cuáles son las novedades que nos encontramos?</h3>
<p>Son muchas y variadas por lo que os las listo en secciones para que os sea más cómodo de entender:</p>
<ul>
<li><strong>Usuarios</strong>: ¿Por qué no premiar a los usuarios más activos? El programa de referidos permite a los &#8220;padrinos&#8221; beneficiarse también de las compras y registros de sus referidos. Por ejemplo, si tú como usuario recomiendas a varios conocidos que terminan dándose de alta en cuestamenos.com, por cada compra o registro que estos referidos tuyos hagan, tú te llevas un porcentaje adicional de esa ganancia.
</li>
<li><strong>Home</strong>: Una &#8220;fotografía&#8221; inmediata y clara de &#8220;qué está pasando&#8221;, así no se le escapara ni una sola oportunidad de ahorrar y ganar dinero al usuario. Para ello han rediseñado la home para que se asemeje a un &#8220;dashboard&#8221; o cuadro de mandos desde donde poder ver las últimas ofertas y tiendas. Además, han rediseñado los menús para hacerlos más intuitivos y manejables.
</li>
<li><strong>Ganancias</strong>: Hasta ahora podíamos comprobar nuestras ganancias dentro de nuestra cuenta, pero era bastante difícil tener una visión global de si realmente estábamos ahorrándonos dinero o no. Han añadido gráficos y una tabla mucho más dinámica para el detalle de las ganancias que permite ordenar, filtrar, etc.
</li>
<li><strong>Comunicación</strong>: Conscientes de que no todos los usuarios pueden entrar a la web en cualquier momento, han mejorado el detalle de información que se manda en nuestras comunicaciones por correo, de forma que ahora. Más detalle, más información, más transparencia, mejor control.
</li>
<li><strong>Productos</strong>: Aunque la anterior versión de la web ya proporcionaba una búsqueda básica de productos, la calidad de los resultados era bastante mejorable. Así, han incorporado una nueva búsqueda más rápida, certera y, sobre todo, que te permite navegar por los resultados, filtrarlos, ordenarlos, para que ningún producto se te escape y puedas encontrar sólo lo que buscas.
</li>
<li><strong>Promociones</strong>: De la misma forma que ahora se pueden buscar productos con un buen nivel de detalle, también han querido añadir esta funcionalidad a las promociones, de forma que puedas encontrar el cupón, descuento o ganga que estés buscando sin esfuerzo.
</li>
</ul>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/05/cuestamenos2.png" alt="" /></center></p>
<h3>Todo esto está muy bien pero&#8230; ¿por qué Cuestamenos y no otros?</h3>
<p>Ha sido una de las preguntas que se me han venido a la cabeza, y su respuesta en resumen es que hay otras web que aparentemente ofrecen el mismo tipo de servicio, pero aún así creen firmemente que <a href="http://cuestamenos.com">cuestamenos.com</a> está varios pasos por delante de ellas, no sólo por madurez y facilidad de uso, sino porque:</p>
<ul>
<li>Ofrece el <strong>mayor porcentaje de ganancias</strong>, y si eres VIP, el 100%.</li>
<li><strong>Búsqueda avanzada</strong> por precios, categorías y tiendas con más de 6 millones de productos. Cuestamenos ofrece un programa de referidos con el que ganas directamente si ellos compran o se registran en las tiendas.</li>
<li>Sistema avanzado de <strong>control de ganancias</strong> mediantes gráficas y otras herramientas. Además ofrece la posibilidad de cobrar tus ganancias bien por Paypal bien por transferencia directa en cuenta dentro de España, y sin absolutamente ningún tipo de comisión para ti.</li>
<li>Sólo Cuestamenos ofrece un <strong>servicio de atención gratuito</strong> al usuario que responde en pocas horas, incluso en minutos.</li>
</ul>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/05/cuestamenos3.png" alt="" /></center></p>
<h3>Pero aquí no acaba todo&#8230;</h3>
<p>Porque para celebrar la nueva web <strong>regalan a todos los nuevos usuarios 1€ sólo por registrarse</strong>, sin tener que hacer ninguna compra, sólo porque estamos convencidos de que una vez que nos pruebes, ya no sabrás comprar online si no es a través de <a href="http://cuestamenos.com">cuestamenos.com</a>.</p>
<p>Por mi parte sólo me queda felicitar a Enrique y todo el equipo y desearos mucha suerte, ¡dadle caña al proyecto!</p>
<p>¡Probadlo y no dudéis en enviarles feedback via comentarios!</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/aooxkFu1Vu8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/noticias/cuestamenos-ahorra-y-gana-dinero-con-tus-compras-y-amigos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/noticias/cuestamenos-ahorra-y-gana-dinero-con-tus-compras-y-amigos/</feedburner:origLink></item>
		<item>
		<title>Marcas de agua en imágenes usando PHP (I)</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/IVKyA-J3D3Q/</link>
		<comments>http://web.ontuts.com/tutoriales/marcas-de-agua-en-imagenes-usando-php-i/#comments</comments>
		<pubDate>Tue, 10 May 2011 16:26:02 +0000</pubDate>
		<dc:creator>Gonzalo Ayuso</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7156</guid>
		<description><![CDATA[En este tutorial aprenderemos a crear marcas de agua en nuestras imágenes utilizando PHP y mod_rewrite. Como siempre paso a paso, bien explicado y con imágenes del resultado final. ¡No os lo perdáis!


Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/creando-servicios-de-red-tcp-con-php-y-xinetd/' rel='bookmark' title='Permanent Link: Creando servicios de red TCP con PHP y xinetd'>Creando servicios de red TCP con PHP y xinetd</a></li>
<li><a href='http://web.ontuts.com/tutoriales/acelerando-los-tiempos-de-carga-uniendo-archivos-javascript-con-php/' rel='bookmark' title='Permanent Link: Acelerando los tiempos de carga uniendo archivos Javascript con PHP'>Acelerando los tiempos de carga uniendo archivos Javascript con PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/aprendiendo-a-utilizar-la-libreria-curl-en-php/' rel='bookmark' title='Permanent Link: Aprendiendo a utilizar la librería cURL en PHP'>Aprendiendo a utilizar la librería cURL en PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/tutorial-introduccion-zend-framework-php/' rel='bookmark' title='Permanent Link: Introducción a Zend Framework PHP'>Introducción a Zend Framework PHP</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>Imaginando una biblioteca de imágenes&#8230; ¡Demasiado trabajo!</h3>
<p>Imaginemos que tenemos un biblioteca de imágenes y que queremos añadirles una marca de agua a todas ellas. Podemos abrir un editor de imágenes (Gimp o Photoshop, por ejemplo) y crear nuestra marca de agua manualmente a todas ellas.</p>
<p>Es un <strong>trabajo sencillo</strong> pero si nuestra biblioteca de imágenes es <strong>muy grande el trabajo</strong> se convierte en algo más duro. Podemos <strong>automatizar</strong> esta tarea, pero si las marcas de agua que queremos poner son dinámicas, tenemos que buscar otra solución. Como ejemplo imaginemos que lo que queremos poner es la fecha/hora en la que el usuario solicita la imagen al servidor. Para hacer esto vamos a usar la librería GD y PHP. Empecemos:</p>
<blockquote><p>Gracias a la librería GD podemos añadir de manera sencilla marcas de agua a nuestras imágenes. Esto Unido a mod_rewrite nos permite hacer el trabajo al vuelo.</p></blockquote>
<h3>¡Automaticemos el trabajo!</h3>
<p>La idea es simple. En lugar de abrir directamente la imagen, lo que vamos a hacer es crear un script PHP que modifique la imagen original con la función <a href="http://www.php.net/manual/en/function.imagecreatefromjpeg.php">imagecreatefromjpeg</a> y le añada un footer con la fecha/hora . Después le entregaremos al navegador la imagen modificada con las cabeceras necesarias.</p>
<p>Esta solución nos implica modificar todas nuestras etiquetas img y pasar de algo así:</p>
<pre name="code" class="html">
&lt;img src=&#039;/ruta/de/la/imagen.jpg&#039; alt=&#039;img&#039; /&gt;
</pre>
<p>A algo así:</p>
<pre name="code" class="html">
&lt;img src=&#039;/ruta/del/script.php&#039; alt=&#039;img&#039; /&gt;
</pre>
<p>Para evitar esto vamos a usar un pequeño truco que consiste en usar el módulo mod_rewrite de apache (los demás servidores Web tienen módulos similares). Creando este simple archivo .htaccess en la carpeta donde tengamos nuestras imágenes jpg, podemos redirigir cada petición de la imagen original a nuestro script PHP que la modifica y le añade la marca de agua.</p>
<pre name="code" class="php">
RewriteEngine on
RewriteRule !\.(php)$ watermark.php
</pre>
<p>Ahora creamos nuestro script watermark.php para hacer la modificación.</p>
<pre name="code" class="php">
&lt;?php
$uri = $_SERVER[&#039;REQUEST_URI&#039;];
$documentRoot = $_SERVER[&#039;DOCUMENT_ROOT&#039;];
$filename = $documentRoot . $uri;
if (realpath(__FILE__) == realpath($filename)) {
    exit();
}
$stringSize = 3;
$footerSize = ($stringSize==1) ? 12 : 15;
$footer = date(&#039;d/m/Y H:i:s&#039;);

list($width, $height, $image_type) = getimagesize($filename);
$im = imagecreatefromjpeg($filename);
imagefilledrectangle (
        $im,
        0,
        $height,
        $width,
        $height - $footerSize, imagecolorallocate($im, 49, 49, 156));

imagestring($im,
        $stringSize,
        $width-(imagefontwidth($stringSize)*strlen($footer)) - 2,
        $height-$footerSize,
        $footer,
        imagecolorallocate($im, 255, 255, 255));

header( &#039;Content-Type: image/jpeg&#039; );
imagejpeg($im);
</pre>
<p>Como vemos el script es muy sencillo. Podemos modificarlo y cambiarlo por nuestro logotipo, o introducir nuevos valores. Para que esto funcione tenemos que tener nuestra instalación de PHP compilada con soporte <a href="http://www.php.net/manual/en/image.installation.php">GD</a>.</p>
<p>Imagen Original:<br />
<center><img src="http://gonzalo123.files.wordpress.com/2011/02/original.jpg?w=300" alt="" /></center></p>
<p>Imagen transformada:<br />
<center><img src="http://gonzalo123.files.wordpress.com/2011/02/after.png?w=300" alt="" width="300" height="225" /></center></p>
<h3>Una pequeña reflexión final</h3>
<p>Y eso es todo. ¿Qué pega tiene esta técnica? Pues que estamos usando unos <strong>recursos del servidor elevados</strong>. Estamos transformando la imagen cada vez que la solicitamos. Si el volumen de peticiones es pequeño no hay problema, pero si crece podemos tirar el servidor.</p>
<p>Una solución sencilla es <strong>cachear la imagen resultante</strong>. De este modo liberamos al servidor, pero ¿que pasa si la marca de agua es dinámica?. En el siguiente artículo de esta mini serie veremos una posible solución al problema.</p>
<p>¡Nos vemos en el próximo capítulo!</p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/creando-servicios-de-red-tcp-con-php-y-xinetd/' rel='bookmark' title='Permanent Link: Creando servicios de red TCP con PHP y xinetd'>Creando servicios de red TCP con PHP y xinetd</a></li>
<li><a href='http://web.ontuts.com/tutoriales/acelerando-los-tiempos-de-carga-uniendo-archivos-javascript-con-php/' rel='bookmark' title='Permanent Link: Acelerando los tiempos de carga uniendo archivos Javascript con PHP'>Acelerando los tiempos de carga uniendo archivos Javascript con PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/aprendiendo-a-utilizar-la-libreria-curl-en-php/' rel='bookmark' title='Permanent Link: Aprendiendo a utilizar la librería cURL en PHP'>Aprendiendo a utilizar la librería cURL en PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/tutorial-introduccion-zend-framework-php/' rel='bookmark' title='Permanent Link: Introducción a Zend Framework PHP'>Introducción a Zend Framework PHP</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/IVKyA-J3D3Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/tutoriales/marcas-de-agua-en-imagenes-usando-php-i/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/tutoriales/marcas-de-agua-en-imagenes-usando-php-i/</feedburner:origLink></item>
		<item>
		<title>vanilla: theme corporativo y portfolio para WordPress</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/tx2907eq7Ak/</link>
		<comments>http://web.ontuts.com/recursos/vanilla-theme-corporativo-y-portfolio-para-wordpress/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 12:07:43 +0000</pubDate>
		<dc:creator>Adrián Mato</dc:creator>
				<category><![CDATA[Recursos web]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[diseño]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7363</guid>
		<description><![CDATA[Presentamos nuestra última creación en Wordpress. vanilla es un theme corporativo y portfolio para aquellos que trabajan con el gestor de contenidos Wordpress. ¡Descubre todas sus características y entérate de cómo conseguirlo!


Related posts:<ol><li><a href='http://web.ontuts.com/recursos/7-themes-wordpress-para-fotografos-gratis/' rel='bookmark' title='Permanent Link: 7 Themes WordPress para Fotógrafos Gratis'>7 Themes WordPress para Fotógrafos Gratis</a></li>
<li><a href='http://web.ontuts.com/recursos/nes-theme-9-increibles-iconos-tematicos-de-videojuegos/' rel='bookmark' title='Permanent Link: NES Theme: 9 increíbles iconos temáticos de videojuegos'>NES Theme: 9 increíbles iconos temáticos de videojuegos</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>¿Qué es vanilla?</h3>
<p><center><a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><img src="http://web.ontuts.com/wp-content/uploads/2011/04/vanilla_01.png" alt="vanilla WordPress theme" /></a></center><br />
<a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><strong>vanilla</strong></a> es un <strong>theme corporativo y portfolio</strong> para aquellos que trabajan con el gestor de contenidos <strong>WordPress</strong>. Anteriormente WordPress era meramente utilizado para blogs pero es un hecho que el paso del tiempo y su popular aceptación lo hayan reconvertido en el CMS referencia para mucho tipo de proyectos.</p>
<blockquote><p>No creo que WordPress valga para todo pero realmente para proyectos pequeños y medianos aporta mucha versatilidad y sobretodo rapidez.</p></blockquote>
<p>El theme ha sido creado por un servidor y viene acompañado de un <strong>sistema de rotación de imágenes en la portada</strong> permitiendo mostrar nuestros últimos trabajos con un montón de efectos diferentes para captar la atención del visitante.</p>
<p>No importa si tus conocimientos de WordPress son escasos o amplios, el theme cubre ambos perfiles. ¿Cómo? Pues porque viene acompañado de un <strong>panel de administración</strong> de forma que rellenando formularios puedes <strong>personalizar y configurarlo a tu gusto</strong>.</p>
<p><center><a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><img src="http://web.ontuts.com/wp-content/uploads/2011/04/02_splash.png" alt="vanilla WordPress theme" /></a></center></p>
<p>De esta forma podrás por ejemplo <strong>añadir diapositivas</strong> al sistema de rotación de imágenes de portada, añadir <strong>proyectos a la galería</strong>, entradas en el <strong>blog</strong>, configurar tu cuenta de <strong>twitter</strong>, galería de <strong>flickr</strong>, dos <strong>sidebars</strong> completamente configurables mediante widgets y todo esto y mucho más sin tocar una línea de código.</p>
<p><center><a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><img src="http://web.ontuts.com/wp-content/uploads/2011/04/04_gallery.png" alt="vanilla WordPress theme" /></a></center></p>
<p>Además viene acompañado de <strong>8 archivos PSD</strong> por lo que podrás personalizar colores y el &#8220;look &#038; feel&#8221; general si algo no te convence de forma fácil y cómoda.</p>
<h3>Algunas características destacadas de vanilla</h3>
<p>Como os comentaba al inicio el theme viene cargado de opciones y características algunas de las más destacadas son las siguientes que os listo a continuación:</p>
<ul>
<li><strong>Rotación de diapositivas en portada</strong> completamente configurable.</li>
<li><strong>Galería de proyectos</strong>: imágenes y vídeos soportados.</li>
<li><strong>Página de contacto</strong> PHP lista para utilizar sin código.</li>
<li>Un montón de <strong>shortcodes</strong> personalizados.</li>
<li><strong>Menú desplegable</strong> completamente personalizable.</li>
<li>Habilitado para el <strong>uso de widgets</strong>.</li>
<li><strong>Template</strong> de <strong>páginas de ancho completo</strong> sin columnas adicionales.</li>
<li><strong>Página de error 404</strong> personalizada.</li>
<li>Posibilidad de añadir <strong>imágenes destacadas</strong> a las entradas del blog.</li>
<li>Comentarios anidados.</li>
<li>Último mensaje publicado en <strong>Twitter</strong>.</li>
<li>Galería de <strong>imágenes flickr</strong> como widget.</li>
<li><strong>Compatible con la mayoría de navegadores actuales</strong> (incluyendo <strong>IE7</strong> y <strong>IE8</strong>).</li>
<p></lu></p>
<p>Seguramente se me escapen algunas pero espero haberme acordado de las más importantes.</p>
<h3>¿Cómo puedo conseguir el theme?</h3>
<p>En esta ocasión el theme no viene en forma de recurso gratuíto como acostumbramos a publicar. La forma en la que lo hemos publicado ha sido mediante el marketplace de los chicos de Envato llamado como <a href="http://themeforest.net/?ref=adrianmg">Themeforest</a>.</p>
<p><center><a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><img src="http://web.ontuts.com/wp-content/uploads/2011/04/03_services.png" alt="vanilla WordPress theme" /></a></center></p>
<p>El precio del theme es de <strong>35$</strong> <a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><strong>pudiendo ser comprado aquí mismo</strong></a>. Además del propio theme hemos incluído una completa documentación para seguir paso a paso a la hora de configurar todas las distintas opciones en caso de que no encontréis lo que buscáis.</p>
<p><center><a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><img src="http://web.ontuts.com/wp-content/uploads/2011/04/05_blog.png" alt="vanilla WordPress theme" /></a></center></p>
<p><strong>¿Por qué no hemos publicado el theme de forma gratuíta?</strong> Sinceramente porque ha costado muchas horas de diseño, maquetación y programación y el resultado final me ha hecho convencerme que debía cobrar por ello <img src='http://web.ontuts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><center><a href="http://themeforest.net/item/vanilla-corporate-portfolio-wordpress-theme/234588?ref=adrianmg"><img src="http://web.ontuts.com/wp-content/uploads/2011/04/07_styles.png" alt="vanilla WordPress theme" /></a></center></p>
<p>Espero que os haya gustado y si tenéis alguna crítica o sugerencia para mejorar este o próximos diseños&#8230; ¡no dudéis en compartirla por favor!</p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/recursos/7-themes-wordpress-para-fotografos-gratis/' rel='bookmark' title='Permanent Link: 7 Themes WordPress para Fotógrafos Gratis'>7 Themes WordPress para Fotógrafos Gratis</a></li>
<li><a href='http://web.ontuts.com/recursos/nes-theme-9-increibles-iconos-tematicos-de-videojuegos/' rel='bookmark' title='Permanent Link: NES Theme: 9 increíbles iconos temáticos de videojuegos'>NES Theme: 9 increíbles iconos temáticos de videojuegos</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/tx2907eq7Ak" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/recursos/vanilla-theme-corporativo-y-portfolio-para-wordpress/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/recursos/vanilla-theme-corporativo-y-portfolio-para-wordpress/</feedburner:origLink></item>
		<item>
		<title>Las tres opciones del emprendedor: El bueno, el feo y el malo</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/ewXMh7DOWbI/</link>
		<comments>http://web.ontuts.com/opinion/las-tres-opciones-del-emprendedor-el-bueno-el-feo-y-el-malo/#comments</comments>
		<pubDate>Fri, 08 Apr 2011 09:07:36 +0000</pubDate>
		<dc:creator>Javier López</dc:creator>
				<category><![CDATA[Opinión]]></category>
		<category><![CDATA[emprendedores]]></category>
		<category><![CDATA[opinión]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7229</guid>
		<description><![CDATA[A la hora de emprender, y si simplificamos el asunto, cualquier emprendedor que comienza a dar sus primeros pasos tiene tres opciones: El bueno, el feo y el malo. 


No related posts.]]></description>
			<content:encoded><![CDATA[<p>A la hora de emprender, y si simplificamos el asunto, cualquier emprendedor que comienza a dar sus primeros pasos tiene tres opciones: El bueno, el feo y el malo.</p>
<h3>El Bueno</h3>
<p><strong>&#8220;El Bueno&#8221;</strong>, y lo llamo así porque para mí es lo ideal para alguien que salta a la piscina por primera vez, consiste en hacer algo <strong>hoy</strong> y ponerlo a la venta <strong>ayer</strong>. Haz algo, ponle un precio y véndelo cuanto antes. </p>
<p>Tan pronto como lo hayas movido un poco y estés ganando tus primeros euros, <strong>vuelve al primer paso y crea otro producto</strong>. O bien<strong> itera sobre él</strong> para que genere aún más dinero.</p>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/04/elbueno.jpg" alt="" title="elbueno" width="437" height="139" class="alignleft size-full wp-image-7253" /></center></p>
<p>Así de simple. Crea un<strong> producto completo</strong>, en el mínimo tiempo posible, y véndelo en internet. Te vale casi cualquiera cosa. Por ejemplo: </p>
<ul>
<li>Mini-videojuegos: para Flash, Iphone, Adroid, PC, etc.</li>
<li>Aplicaciones para móviles</li>
<li>Themes para webs y WordPress</li>
<li>Ebooks</li>
<li>Fotografías</li>
<li>Iconos</li>
<li>Loops de música o sonidos FX</li>
<li>Servicios web con diferentes planes y precios. Rey de los ejemplos: <a href="http://basecamphq.com/">BaseCamp</a></li>
<li>Etc&#8230;</li>
</ul>
<p>Hay tantas opciones como imaginación tengas.</p>
<blockquote><p>
Código fuente filtrado de origen desconocido con el algoritmo en cuestión. ¡Úsalo bajo tu propio riesgo!<br />
<br />
10 Haz un producto<br />
20 Ponlo en venta<br />
30 Múevelo<br />
40 GOTO 10
</p></blockquote>
<p>¿Te suena la palabra &#8220;<strong>passive incoming</strong>&#8220;? Lleva de moda varios años. Cualquiera de los productos que te he comentado puede convertirse en un passive incoming. Simplemente es un producto que pones a la venta, y mientras trabajas en el siguiente, el anterior está generando beneficio.</p>
<p>Si insistes en esa mecánica (crear producto nuevo mientras vendes el anterior) la bola de nieve irá creciendo, y aunque productos antiguos vayan decayendo con el tiempo, si haces una gráfica en modo campana, verás que con constancia irás teniendo unos ingresos remanentes incrementales que pueden hacer que vivas muy, pero que muy, bien.</p>
<blockquote><p>¿Acaso no hiciste negocios en el cole vendiendo fotocopias de las Tortugas Ninja? (Verídico en mi caso, sólo que yo encima puse a mi hermana a dibujar láminas de monstruos que luego fotocopiaba y vendía). Pues &#8220;El Bueno&#8221; es casi lo mismo.</p></blockquote>
<p>Algunos detalles a tener en cuenta:</p>
<ul>
<li>El producto que hagas, tiene que ser un <strong>producto acabado</strong>, o al menos <a href="http://www.minecraft.net/">una beta que merezca la pena pagar por usar</a>.</li>
<li>Es mejor sacar algo en 3 meses que no esté del todo perfecto y luego iterar sobre él. Que tardar 6 meses y sacarlo perfecto. &#8220;Perfecto&#8221; es muy relativo. Será perfecto para ti&#8230; pero sería mucho mejor haberlo sacado 3 meses antes y estar 3 meses iterando sobre él, recibiendo <em>feedback</em> constante de los usuarios, siendo ellos los que marquen el rumbo de la nueva <em>release</em>.</li>
<li>Ponte un <strong>tiempo de desarrollo muy estricto</strong> y que sea el menor tiempo posible.</li>
<li>Si el tiempo de desarrollo que calculas es mayor de 6 meses, piénsatelo mucho. Lo ideal sería algo que pudieras tener terminado en <strong>3 meses</strong>. Al menos si es la primera vez que vas a vender algo.</li>
<li>Si lo empiezas, acabalo. &#8220;<a href="http://www.youtube.com/watch?v=q3hn6fFTxeo">Hazlo, o no lo hagas, pero no lo intentes</a>&#8220;.</li>
</ul>
<p>Con &#8220;El Bueno&#8221; puede que no te hagas multimillonario, pero si que puede darte para un sueldo muy decente. Además, estarás continuamente haciendo proyectos nuevos y sacando nuevas ideas. Esta opción es muy entretenida.</p>
<p>¡Qué haces leyendo esto aún! ¡Ve y hazlo!</p>
<h3>El Feo</h3>
<p>Otra opción, &#8220;<strong>El Feo</strong>&#8220;, muy socorrida cuando a una startup está intentado que &#8220;El Malo&#8221; funcione y le falta liquidez (o al menos ese es nuestro caso), es <strong>hacer trabajos para terceros</strong>. Es decir, diseño y desarrollo web, aplicaciones para móviles, etc&#8230; todas esas cosas que por suerte o por desgracia ofrecemos en <a href="http://cokidoo.com/">Cokidoo</a>. </p>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/04/elfeo.jpg" alt="" title="elfeo" width="437" height="139" class="alignleft size-full wp-image-7254" /></center></p>
<p>Vale, da de comer, pero <strong>se parece demasiado a trabajar en una empresa con un sueldo</strong>&#8230; o como diría mi socio Iván&#8230; ¡es peor! Al menos si trabajas en una empresa como diseñador gráfico asalariado no tienes que preocuparte de si la empresa va bien o mal, o de si entran más o menos clientes&#8230; ¡ya está el jefe para eso!</p>
<p>Pero si empiezas a hacer trabajos para terceros, de pronto tu universo de preocupaciones se llenará de:</p>
<ul>
<li>Encontrar nuevos clientes</li>
<li>Trabajar en las ideas de otros&#8230; ¡eso no mola!</li>
<li>Entregar todos los curros a tiempo, echando tantas horas extra como hagan falta.</li>
<li>Que los clientes que tardan en pagar, paguen.</li>
<li>Tener poco tiempo para &#8220;El Bueno&#8221; o &#8220;El Malo&#8221;.
</ul>
<p>Partiendo de la base de que no quieres trabajar en una empresa con un sueldo, sino que quieres ser tu propio jefe y desarrollar tus propias ideas, esta opción, puede que te permita aguantar durante una temporada en la que &#8220;El Bueno&#8221; o &#8220;El Malo&#8221; no te dan de comer, pero a la larga, no hará más que quemarte.</p>
<p>Vale, hay excepciones. Hay freelancers que viven contentos haciendo esto y les va muy bien&#8230; pero más contentos estarían seguro si hubieran conseguido lo que <a href="http://envato.com/">Envato</a>, que partiendo de un <a href="http://freelanceswitch.com/">blog para freelancers</a> han acabado creando marketplaces, redes de blogs de tutoriales y literalmente forrándose.</p>
<p><a href="http://dribbble.com/">Dribbble</a> debe estar cargadito de freelancers muy felices haciendo sus cosas, pero cuando un cliente les aprieta, fijo que muchos de ellos preferirían echar horas extra trabajando en un proyecto propio que invertirlas en un cliente.</p>
<h3>El Malo</h3>
<p>&#8220;<strong>El Malo</strong>&#8221; es ese proyecto que los inversores están cansados de ver, pero que por otra parte es el único en el que merece la pena invertir, porque a largo plazo podría ser un pelotazo.</p>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/04/elmalo.jpg" alt="" title="elmalo" width="437" height="139" class="alignleft size-full wp-image-7255" /></center></p>
<p>Es un proyecto que <strong>va a necesitar mucho de tu tiempo y mínimo dos o tres años para empezar a ser rentable</strong>, si es que alguna vez lo es. Tiempo durante el cuál tus opciones se reducen a <strong>buscar financiación</strong>, con lo que tendrás uno o dos años para tu equipo aseguradas si la primera ronda de inversión es mínimamente decente&#8230; o bien <strong>apretarte el cinturón</strong> y salir de copas con &#8220;El Feo&#8221;. Es decir, trabajar en tu proyecto a la vez que para terceros&#8230; cuando los clientes aprietan por las entregas y a la misma vez intentas sacar adelante tu propio proyecto, te aseguro por experiencia, se hace duro.</p>
<p>Lo llamo &#8220;El Malo&#8221; porque <strong>muy pocos triunfan con este modelo</strong>. Muy pocas redes sociales o comunidades llegan a ser rentables, por no decir casi ninguna.</p>
<p>No obstante, si tienes muy claro lo que vas a vender, y no está basado en la mera publicidad (generar tráfico y esperar ganar dinero con publicidad o afiliados es muy complicado), puede que te salga bien. A empresas como Atrapalo, Privalia o Buyvip no las habría categorizado antes de empezar como &#8220;El Malo&#8221;. Esas empresas desde el día uno tenían algo para vender, y luego ya tenían que preocuparse de generar visitas y comunidad para vender aún más. Es muy distinto de por ejemplo hacer una web o comunidad de contenido útil como <a href="http://www.erasmusu.com/es/">Erasmusu.com</a> y luego intentar sacar dinero con publicidad o afiliados. Erasmusu es la leche en cuanto a comunidad, visitas y páginas vistas se refiere&#8230; pero no ha sido nada fácil empezar a que sea rentable.</p>
<p>Y si buscas inversión porque no quieres perder el tiempo trabajando para terceros y quieres enfocarte totalmente en tu proyecto, olvídate de que inviertan en una idea&#8230; como mínimo deberás tener un prototipo&#8230; y un buen &#8220;exit plan&#8221;, cuya traducción a la lengua de Cervantes o lo que el inversor ve en su cabeza es: &#8220;¿cómo pijos voy yo a sacar pasta de este asunto?&#8221;. Recuerda, al inversor le podrá motivar más o menos tu proyecto, pero lo que el quiere, es ganar dinero. Ni más, ni menos. Así que si no ve claramente lo que vas a vender, a quién se lo vas a vender y cómo lo vas a vender&#8230; ¡olvídate! Aparte, conozco gente que ha estado año y medio únicamente buscando financiación&#8230; ¡no es fácil!</p>
<blockquote><p>Con &#8220;El Malo&#8221; me refiero pues a aquellos proyectos que de por sí, no venden nada concreto, y que <strong>necesitan una gran cantidad de visitas</strong> para desarrollar modelos de negocio en torno a ellos y empezar a ser rentables. Me refiero a las redes sociales, comunidades online, foros, etc.</p></blockquote>
<p>¡Ojo! Cualquier <a href="http://themeforest.net/">marketplace</a> de Envato tiene una comunidad y foros detrás. Pero no me refiero a este tipo de comunidad. Esa comunidad está ahí para comprar o crear nuevos productos y empezaron primero como marketplace, luego como comunidad.</p>
<p>En contraposición al &#8220;El Malo&#8221; está &#8220;El Bueno&#8221;. Si haces un theme para <a href="http://themeforest.net/">ThemeForest</a> hoy y lo consigues poner en venta&#8230; durante la siguiente semana ya estarás teniendo tus primeros ingresos y la bola de nieve comenzará a rodar.</p>
<p>&#8220;El Bueno&#8221; podría convertirse también en un pelotazo digno de que algún inversor hubiera puesto pasta&#8230; por ejemplo <a href="http://itunes.apple.com/us/app/tiny-wings/id417817520?mt=8">este videojuego</a> de Iphone hecho por una sola persona debe haber generado muchísimo dinero. Pero lo normal es que los productos que crees, si eliges la opción del &#8220;El Bueno&#8221; te den un muy buen sueldo, pero no atraigan a ningún inversor&#8230; ¿y quién los necesita?</p>
<p>Claro esta, si te sale bien, &#8220;El Malo&#8221; es el que <strong>podría hacerte rico, muy rico</strong>. Como le has pasado a Twitter, Facebook, etc. ¡No quiero ser yo el que te desilusione!</p>
<p>Pero aún así, aún existiendo esa posibilidad, <strong>es mejor que empieces por &#8220;El Bueno&#8221;</strong>, durante como mínimo dos años, porque aprenderás mucho en el camino y podrás utilizarlo más adelante para arriesgarte en &#8220;tu gran proyecto&#8221;.</p>
<p>See you in another life!</p>


<p>No related posts.</p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/ewXMh7DOWbI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/opinion/las-tres-opciones-del-emprendedor-el-bueno-el-feo-y-el-malo/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/opinion/las-tres-opciones-del-emprendedor-el-bueno-el-feo-y-el-malo/</feedburner:origLink></item>
		<item>
		<title>¡Concursa y Gana una Camiseta del equipo Cokidoo!</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/ENEYbkEXFLU/</link>
		<comments>http://web.ontuts.com/general/%c2%a1concursa-y-gana-una-camiseta-del-equipo-cokidoo/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 12:44:11 +0000</pubDate>
		<dc:creator>Adrián Mato</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[camiseta]]></category>
		<category><![CDATA[cokidoo]]></category>
		<category><![CDATA[concursos]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7194</guid>
		<description><![CDATA[Sorteamos 3 fantásticas camisetas personalizadas con la imagen de Cokidoo de la mano de LolaCamisetas. Es muy fácil concursar tan sólo debes dejar tu mensaje de participación en Facebook o Twitter. ¡Suerte a todos!


Related posts:<ol><li><a href='http://web.ontuts.com/general/concursa-y-gana-el-juego-slide-colors-para-xbox-360-y-pc/' rel='bookmark' title='Permanent Link: Concursa y gana el juego Slide Colors para Xbox 360 y PC'>Concursa y gana el juego Slide Colors para Xbox 360 y PC</a></li>
<li><a href='http://web.ontuts.com/general/sorteamos-10-cupones-de-descuento-para-basekit/' rel='bookmark' title='Permanent Link: Sorteamos 10 Cupones de Descuento para BaseKit'>Sorteamos 10 Cupones de Descuento para BaseKit</a></li>
<li><a href='http://web.ontuts.com/general/sorteamos-23-invitaciones-para-google-wave/' rel='bookmark' title='Permanent Link: Sorteamos 23 Invitaciones para Google Wave'>Sorteamos 23 Invitaciones para Google Wave</a></li>
<li><a href='http://web.ontuts.com/general/sorteamos-20-invitaciones-para-google-wave/' rel='bookmark' title='Permanent Link: Sorteamos 20 Invitaciones para Google Wave'>Sorteamos 20 Invitaciones para Google Wave</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>Actualización: ¡Ya tenemos a los 3 ganadores!</h3>
<p>Nos gustaría dar las gracias a todos los participantes, han sido muchos más de los esperado y la verdad estamos muy contentos de la respuesta de todos en los distintos canales: facebook, twitter o el propio blog.</p>
<p>Y ahora vamos con lo que os interesa, estos han sido los <strong>3 ganadores</strong>:</p>
<ul>
<li><strong><a href="http://twitter.com/#!/pasku1">@pasku</a></strong></li>
<li><strong><a href="http://www.facebook.com/profile.php?id=100000751335799">José Daniel</a></strong></li>
<li><strong><a href="http://twitter.com/#!/RaulSimon">@RaulSimon</a></strong></li>
</ul>
<p>Enhorabuena alos tres, en breves nos pondremos en contacto con vosotros para pedir vuestra talla de camiseta y la dirección de envío.</p>
<p>¡Gracias a todos por participar y suerte para el próximo! <img src='http://web.ontuts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Sorteamos 3 camisetas de Cokidoo</h3>
<p>De la mano de los chicos de <a href="http://lolacamisetas.com">LolaCamisetas</a> esta vez sorteamos tres fantásticas, impresionantes, galácticas y exclusivas camisetas de <a href="http://cokidoo.com">Cokidoo</a>.</p>
<p><center><img src="http://web.ontuts.com/wp-content/uploads/2011/03/lolacamisetas.png" alt=""/></center></p>
<p>Los ganadores serán anunciados el <strong>4 de Abril</strong> y recibirán una de las camisetas con la talla que deseen en su domicilio, lógicamente sin gastos de ningún tipo <img src='http://web.ontuts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h3>¿Cómo puedo participar?</h3>
<p>Para participar tan sólo tienes que comentar en <strong>twitter</strong> por qué te gustaría ganar la camiseta <strong>mencionando al usuario</strong> <a href="http://twitter.com/ontuts">@ontuts</a> o bien en <a href="http://www.facebook.com/ontuts">nuestro Facebook</a> dejando también un pequeño mensaje con el que convencernos de que debas ser el elegido.</p>
<blockquote><p><strong>Ejemplo:</strong> Debo ganar una de las camisetas que sortea @ontuts porque nadie les ha hecho tanto la pelota como yo!</p></blockquote>
<p>¡Mucha suerte a todos!</p>
<h3>Acerca de LolaCamisetas</h3>
<p>Para los que no los conozcáis os recomendamos que <a href="http://www.lolacamisetas.com/">visitéis su web</a> en la que podréis encontrar todo tipo de <strong>camisetas originales y divertidas</strong>, llegando incluso a poder <strong>personalizar vuestras propias camisetas</strong>.</p>
<p><center><a href="http://lolacamisetas.com"><img src="http://web.ontuts.com/wp-content/uploads/2011/03/lolalogo.png" alt=""/></a></center></p>
<p>Desde Ontuts queremos dar las gracias a LolaCamisetas por el interés en participar en el concurso con nosotros, ¡da gusto tratar con gente así de agradable!</p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/general/concursa-y-gana-el-juego-slide-colors-para-xbox-360-y-pc/' rel='bookmark' title='Permanent Link: Concursa y gana el juego Slide Colors para Xbox 360 y PC'>Concursa y gana el juego Slide Colors para Xbox 360 y PC</a></li>
<li><a href='http://web.ontuts.com/general/sorteamos-10-cupones-de-descuento-para-basekit/' rel='bookmark' title='Permanent Link: Sorteamos 10 Cupones de Descuento para BaseKit'>Sorteamos 10 Cupones de Descuento para BaseKit</a></li>
<li><a href='http://web.ontuts.com/general/sorteamos-23-invitaciones-para-google-wave/' rel='bookmark' title='Permanent Link: Sorteamos 23 Invitaciones para Google Wave'>Sorteamos 23 Invitaciones para Google Wave</a></li>
<li><a href='http://web.ontuts.com/general/sorteamos-20-invitaciones-para-google-wave/' rel='bookmark' title='Permanent Link: Sorteamos 20 Invitaciones para Google Wave'>Sorteamos 20 Invitaciones para Google Wave</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/ENEYbkEXFLU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/general/%c2%a1concursa-y-gana-una-camiseta-del-equipo-cokidoo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/general/%c2%a1concursa-y-gana-una-camiseta-del-equipo-cokidoo/</feedburner:origLink></item>
		<item>
		<title>Creando servicios de red TCP con PHP y xinetd</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/dQ5CJ1YvO1I/</link>
		<comments>http://web.ontuts.com/tutoriales/creando-servicios-de-red-tcp-con-php-y-xinetd/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 13:15:21 +0000</pubDate>
		<dc:creator>Gonzalo Ayuso</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[xinetd]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7053</guid>
		<description><![CDATA[Presentamos un nuevo y sencillo tutorial para crear servicios de red en Linux, usando PHP y el daemon xinet.d. Como siempre explicaciones paso a paso y fáciles de seguir.


Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/creando-una-capa-de-conexion-abstracta-a-base-de-datos-con-php/' rel='bookmark' title='Permanent Link: Creando una capa de conexión abstracta a base de datos con PHP'>Creando una capa de conexión abstracta a base de datos con PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/acelerando-los-tiempos-de-carga-uniendo-archivos-javascript-con-php/' rel='bookmark' title='Permanent Link: Acelerando los tiempos de carga uniendo archivos Javascript con PHP'>Acelerando los tiempos de carga uniendo archivos Javascript con PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/marcas-de-agua-en-imagenes-usando-php-i/' rel='bookmark' title='Permanent Link: Marcas de agua en imágenes usando PHP (I)'>Marcas de agua en imágenes usando PHP (I)</a></li>
<li><a href='http://web.ontuts.com/tutoriales/mini-aplicaciones-web-con-python-y-juno-parte-ii/' rel='bookmark' title='Permanent Link: Mini Aplicaciones Web con Python y Juno: Parte II'>Mini Aplicaciones Web con Python y Juno: Parte II</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>No todo en PHP es Web y HTTP. Podemos usar PHP para muchas otras cosas. Por ejemplo podemos crear de una forma muy sencilla servicios de red. Cuando creamos servicios de red necesitamos obviamente un <strong>servidor de red</strong> (bien sea TCP o UDP).</p>
<p>Cuando trabajamos con Web y HTTP este servidor suele ser Apache (o similares), pero si queremos crear un servicio específico (no HTTP), además del servicio de red que queramos crear, necesitaríamos <strong>crear un servidor</strong>.</p>
<blockquote><p>No todo en PHP es Web y HTTP. Podemos usar PHP para muchas otras cosas. Por ejemplo podemos crear de una forma muy sencilla servicios de red.</p></blockquote>
<p>Esto lo podemos hacer con C, Java e incluso con PHP, pero cuando trabajamos en entornos Linux existe un daemon que nos permite <strong>desplegar servicios de red</strong> de una forma muy sencilla, encargándose de la parte del servidor y dejándonos a nosotros la parte del servicio de red. Este daemon es <a href="http://www.xinetd.org/">xinetd</a>.</p>
<p>Vamos a ver cómo crear un sencillo servicio de red TCP con xinetd y PHP&#8230; ¡Empecemos!</p>
<h3>Creando el servicio de red TCP con Xinetd y PHP</h3>
<p>El ejemplo que vamos a realizar escuchará del puerto 69321, e inicialmente dirá &#8220;Hola&#8221; cuando alguien realice una petición TCP a dicho puerto. El script del ejemplo es sumamente complicado:</p>
<pre name="code" class="php">
// /home/gonzalo/tests/test1.php
echo "HELLO\n";
</pre>
<p>Bien. Ahora lo que queremos es que nuestro servicio de red escuche el puerto tcp 60321. Para esto tenemos que definir en nuestro archivo /etc/services el puerto en cuestión:</p>
<pre name="code" class="c">
// /etc/services
...
myService   60321/tcp # my hello service
</pre>
<p>Y finalmente creamos la configuración en el daemon xinetd. Para ello creamos el archivo /etc/xinetd.d/myService:</p>
<pre name="code" class="c">
# default: on
# description: my test service

service myService
{
        socket_type = stream
        protocol = tcp
        wait = no
        user = gonzalo
        server = /usr/local/bin/php-cli
        server_args = /home/gonzalo/tests/test1.php
        log_on_success += DURATION
        nice = 10
        disable = no
}
</pre>
<p>Reiniciamos el daemon para que lea la nueva configuración del servicio que hemos creado:</p>
<pre name="code" class="c">
sudo /etc/init.d/xinetd restart
</pre>
<p>Y listo. Ya tenemos nuestro servicio de red operativo y funcionando. Para probarlo podemos usar un simple telnet al puerto definido:</p>
<pre name="code" class="c">
telnet localhost 60321
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hola
Connection closed by foreign host.
</pre>
<p>¿Fácil, no? Sí pero útil, no mucho. Por esto vamos a cambiar un poco es script para que acepte variables de entrada. Esto no es HTTP por lo que no podemos usar las típicas variables $_POST y $_GET.</p>
<p>Lo que tenemos que hacer es leer del stdin. En PHP, al igual que con otros lenguajes, esto es muy sencillo:</p>
<pre name="code" class="php">
$handle = fopen('php://stdin','r');
$input = fgets($handle);
fclose($handle);

echo "Hola {$input}";
</pre>
<p>Reiniciamos el xinetd y tenemos nuestro servicio listo</p>
<pre name="code" class="c">
telnet localhost 60321
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
</pre>
<p>Vemos que el telnet se nos quedará a la espera que introduzcamos un texto. Escribimos: &#8220;<em>gonzalo</em>&#8221; y obtenemos:</p>
<pre name="code" class="c">
gonzalo
Hola gonzalo
Connection closed by foreign host.
</pre>
<h3>Conclusión</h3>
<p>Y esto es todo. Con este sencillo script vemos que, si bien PHP es un lenguaje destinado principalmente para el desarrollo Web, podemos usarlo para otras cosas, manteniendo su punto fuerte: la sencillez.</p>
<p>¿Para qué nos puede servir esto? Bueno. Para empezar nos sirve para <strong>leer datos de dispositivos de red</strong> que tengamos por ahi, como báculas, lectores de tarjetas, sensores&#8230; Muchos de estos dispositivos suelen permitirnos en su configuración establecer una IP/puerto a la que van a enviar información en forma de trama TCP.</p>
<p>También podemos usarlo para <strong>comunicar procesos de una manera simple</strong>, sin necesidad de meternos con servidores XMLRPC/Soap y demás. En fin que es una herramienta más que tenemos a nuestra disposición para afrontar nuestros desarrollos.</p>
<p>¡Nos vemos en el próximo artículo!</p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/creando-una-capa-de-conexion-abstracta-a-base-de-datos-con-php/' rel='bookmark' title='Permanent Link: Creando una capa de conexión abstracta a base de datos con PHP'>Creando una capa de conexión abstracta a base de datos con PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/acelerando-los-tiempos-de-carga-uniendo-archivos-javascript-con-php/' rel='bookmark' title='Permanent Link: Acelerando los tiempos de carga uniendo archivos Javascript con PHP'>Acelerando los tiempos de carga uniendo archivos Javascript con PHP</a></li>
<li><a href='http://web.ontuts.com/tutoriales/marcas-de-agua-en-imagenes-usando-php-i/' rel='bookmark' title='Permanent Link: Marcas de agua en imágenes usando PHP (I)'>Marcas de agua en imágenes usando PHP (I)</a></li>
<li><a href='http://web.ontuts.com/tutoriales/mini-aplicaciones-web-con-python-y-juno-parte-ii/' rel='bookmark' title='Permanent Link: Mini Aplicaciones Web con Python y Juno: Parte II'>Mini Aplicaciones Web con Python y Juno: Parte II</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/dQ5CJ1YvO1I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/tutoriales/creando-servicios-de-red-tcp-con-php-y-xinetd/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/tutoriales/creando-servicios-de-red-tcp-con-php-y-xinetd/</feedburner:origLink></item>
		<item>
		<title>Apuntes sobre Seguridad Web</title>
		<link>http://feedproxy.google.com/~r/web-ontuts/~3/oKa8myvYNOQ/</link>
		<comments>http://web.ontuts.com/tutoriales/apuntes-sobre-seguridad-web/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 19:31:13 +0000</pubDate>
		<dc:creator>Iván Guardado</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://web.ontuts.com/?p=7060</guid>
		<description><![CDATA[Que las aplicaciones web que desarrollas funcionen y sean escalables es importante, pero mucho más lo es que sean seguras de forma que no se vea comprometida la seguridad y privacidad de tus usuarios. En este artículo damos un repaso a los ataques más comunes y cómo defenderte de ellos.


Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/sesiones-en-php/' rel='bookmark' title='Permanent Link: Sesiones en PHP'>Sesiones en PHP</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>Introducción</h3>
<p>Antes de ponerme a comentar los distintos tipos de vulnerabilidades conocidos y explotados de las aplicaciones web, quiero compartir el siguiente informe: <a href="http://www.verizonbusiness.com/go/2010databreachreport/">Informe de Investigación de Datos Violados 2010</a> (el informe se genera en 2010, por lo que analiza el año 2009) creado por <a href="http://www.verizonbusiness.com/">Verizon</a> en colaboración con el <a href="http://www.secretservice.gov/">USSS</a> (United States Secret Service).</p>
<p>Es un informe muy completo que analiza en profundidad <strong>los distintos tipos de ataques</strong> llevados a cabo con el objetivo final de robar información, bien sea a corporaciones o particulares. Os dejo un par de datos que me han parecido relevantes:</p>
<ul>
<li>40% de los robos fueron por hacking.</li>
<li>98% de los datos robados, procedían de servidores.</li>
<li>85% de los ataques fueron considerados fáciles.</li>
<li>96% de los robos serían evitables con medidas simples o intermedias.</li>
</ul>
<p>Solamente con ver estes datos, uno tiene razones más que suficientes para ponerse al día en el tema de seguridad web, y eso es lo que intentaré hacer en este artículo. A continuación le echamos un vistazo a los <strong>tipos de ataques más comunes</strong> para que por lo menos sepas que existen y los analices más profundamente si lo consideras necesario. Pero antes, os dejo unas cuantas gráficas extraídas del informe:</p>
<p><strong>Categorías de ataques por porcentaje de robos y registros</strong><br />
<a href="http://web.ontuts.com/wp-content/uploads/2011/03/img_1.png"><img src="http://web.ontuts.com/wp-content/uploads/2011/03/img_1.png" alt="" title="img_1" width="600" height="246" class="alignnone size-full wp-image-7105" /></a></p>
<p><strong>Tipos de hacking por porcentaje de robos y registros</strong><br />
<a href="http://web.ontuts.com/wp-content/uploads/2011/03/img_2.png"><img src="http://web.ontuts.com/wp-content/uploads/2011/03/img_2.png" alt="" title="img_2" width="600" height="620" class="alignnone size-full wp-image-7107" /></a></p>
<p><strong>Vías de ataque por porcentaje de robos y porcentaje de filas</strong><br />
<a href="http://web.ontuts.com/wp-content/uploads/2011/03/img_3.png"><img src="http://web.ontuts.com/wp-content/uploads/2011/03/img_3.png" alt="" title="img_3" width="600" height="272" class="alignnone size-full wp-image-7106" /></a></p>
<h3>Cross-Site Scripting (XSS)</h3>
<p>Es un tipo de vulnerabilidad web que permite a personas malintencionadas <strong>insertar código de lado de cliente</strong> (Javascript, VBScript, Flash&#8230;) en las páginas web accesibles por el resto de usuarios. Debido a esto, un atacante podría conseguir acceso a contenido sensible, cookies de sesión y demás información que el navegador almacene sobre el usuario atacado.</p>
<p>Un posible uso de esta vulnerabilidad, sería ejecutar un código Javascript que obtenga la cookie que almacena el identificador de sesión (SID) y lo envía al atacante, pudiendo así usar esa cookie para <strong>suplantar al usuario afectado</strong>.</p>
<p>Hay una pequeña categorización de este tipo de ataques, que los divide en dos:</p>
<blockquote><p>A través de XSS una persona malintencionada puede insertar código en una web, de forma que cualquier usuario que entre, estará expuesto a sus peligros.</p></blockquote>
<h4>No persistente</h4>
<p>Este es el tipo más común y se produce cuando un usuario envía datos al servidor, normalmente a través de la Query String (GET) o de un formulario (POST) e inmediatamente <strong>el código del servidor genera una respuesta usando esa misma información</strong> sin limpiar adecuadamente los datos.</p>
<p>Por ejemplo imagina que has programado un buscador para tu sitio web, que cuando no encuentra lo que acabas de buscar, genera una salida como “No se ha encontrado nada sobre gatos” en el caso que hayas buscado la palabra &#8220;gatos&#8221;. Bien, esto parece algo inofensivo pero&#8230;y si busco el siguiente texto?:</p>
<pre name="code" class="html">&lt;script&gt;alert(1)&lt;/script&gt;</pre>
<p>Pues que el servidor generará la siguiente salida:</p>
<pre name="code" class="html">No se ha encontrado nada sobre &lt;script&gt;alert(1)&lt;/script&gt;
</pre>
<p>De forma que el navegador, al encontrarse con la etiqueta &lt;script&gt;, <strong>ejecuta inmediatamente el código</strong>, en este caso, saltaría un inofensivo cuadro de diálogo.</p>
<p>A lo mejor ahora te estás preguntando, “<strong>¿pero cómo afecta esto a un usuario particular?</strong>”, “nadie que no sepa del tema, va a buscar eso y en cualquier caso, se está fastidiando a sí mismo”. Bien, imagina que tu buscador maneja las peticiones a través de parámetros GET de forma que si buscas “gatos”, accedes a la siguiente dirección:</p>
<pre name="code" class="html">http://example.com/search?q=gatos
</pre>
<p>Pues alguien malintencionado, puede generar la url:</p>
<pre name="code" class="html">http://example.com/search?q=&lt;script&gt;alert(1)&lt;/script&gt;
</pre>
<p>Simplemente tendría que enviar la URL a las personas que desea y listo.</p>
<h4>Persistente</h4>
<p>Este es un tipo <strong>más devastador</strong> ya que puede llegar a afectar a <strong>cualquier usuario que entre en tu web</strong>. Se trata de insertar y almacenar código malicioso en el servidor, de forma que se muestre a cualquier persona que acceda a dicha página. Esto es muy fácil de conseguir en las aplicaciones web que <strong>permiten a los usuarios generar contenido</strong>, como envíar comentarios, dar opinión en foros, etc&#8230;</p>
<p>Imagina que unos foros muy visitados no están limpiando bien los textos que los usuarios envían. Una persona que se haya dado cuenta, podría enviar un simple mensaje con:</p>
<pre  name="code" class="html">
&lt;script&gt;alert(1)&lt;/script&gt;
</pre>
<p>Ahora, cada persona que visite la página en la que has escrito, verá un inofensivo cuando de texto. Pero repito, podría ejecutar cualquier código, tan malicioso como uno quiera y la seguridad del navegador lo permita.</p>
<blockquote><p>La diferencia entre persistente y no persistente es que <strong>en los ataques persistentes</strong>, el código queda almacenada en el lado del servidor, mostrándose y ejecutándose en cada petición, <strong>mientras que los ataques no persistentes</strong>, inyectan el código de forma temporal como respuesta a una petición específica.</p></blockquote>
<h4>Cómo protegerse</h4>
<ul>
<li>Asegúrate de que <strong>todas las salidas generadas</strong> con textos 	potencialmente inseguros (enviados por usuarios) <strong>son completamente 	escapados</strong>. Para eso PHP nos ofrece algunas funciones como 	<a href="http://php.net/manual/en/function.htmlentities.php">htmlentities</a> o <a href="http://www.php.net/manual/en/function.htmlspecialchars.php">htmlspecialchars</a>, 	o como habíamos visto en un tutorial anterior, puedes <a href="../tutoriales/validar-y-sanear-datos-en-php/">Validar 	y sanear datos en PHP</a> de forma bastante sencilla.</li>
<li>Como ya he comentado, el principal objetivo de este tipo de 	ataques, es el <strong>robo de las cookies</strong>. Muchos sitios web, evitan que un 	atacante pueda suplantar cookies de otros usuarios <strong>vinculando la 	cookie a la dirección IP</strong> para la cual se había creado. De esta 	forma, alguien que intente usar una cookie desde otro ordenador, 	será considerado un usuario malicioso y se ignorará la cookie. 	Tambien existe la opción de <strong>especificar una cookie como HttpOnly</strong>, 	de forma que los navegadores no permiten acceder a dicha cookie al 	código ejecutado en el lado de cliente. Esta opción es soportada 	prácticamente por todos los navegadores modernos.</li>
</ul>
<h3>Cross-site request forgery (CSRF o XSRF)</h3>
<p>Esta vulnerabilidad <strong>explota la confianza que un sitio tiene un usuario</strong>, a diferencia del XSS, que explota la confianza que un usuario tiene en un sitio web. A grandes rasgos, consiste en que una persona malintencionada envía un link a una persona que sabe (o supone) que está identificada en una web, de forma que <strong>la persona ejecuta ciertos comandos sin enterarse</strong>.</p>
<p>Por ejemplo, imagina una web de un banco que dispone de la siguiente url para realizar una transacción:</p>
<pre  name="code" class="html">http://example.com/transaction?to=[ID USUARIO]&amp;amount=[CANTIDAD]
</pre>
<p>Sería realmente sencillo generar una url para que cualquier usuario identificado, te enviase dinero. Sería tan fácil como enviarle este link:</p>
<pre  name="code" class="html">http://example.com/transaction?to=ivan&amp;amount=1000
</pre>
<p>Ahora, imagina que en ese banco existen unos foros para que los usuarios registrados puedan opinar sobre distintos temas. <strong>Si no tienen los textos perfectamente saneados y escapados</strong>, una persona malintencionada podría insertar la siguiente etiqueta HTML:</p>
<pre name="code" class="html">&lt;img src=”http://example.com/transaction?to=ivan&amp;amount=1000” /&gt;
</pre>
<p>De esta forma, el navegador de cualquier usuario que entra en el foro, intentará descargar dicha imagen, pero en realidad, esa url no va a generar ninguna imagen, lo que va hacer <strong>es enviar una orden de transacción</strong> en caso de que el usuario esté identificado. Como ya he dicho, es un exceso de confianza del sitio web en las acciones del usuario.</p>
<h4>Cómo protegerse</h4>
<ul>
<li><strong>Requerir una clave secreta</strong> al usuario antes de llevar a cabo 	cualquier acción comprometida, como sería el caso del ejempl 	anterior.</li>
<li><strong>Limitar el tiempo de vida de la sesión</strong>: lo hacen en muchas 	webs de contenido sensible.</li>
<li><strong>Deshabilitar la opción de “Recordarme”</strong> ayuda a prevenir 	este tipo de ataques: si activas esa opción y luego te envían un 	exploit de CSRF, tienes muchas más posibilidades de que te afecte, 	pues el no estar logueado no te salva, ya que iniciarás la sesión 	automáticamente, ejecutando la acción que el exploit te envía.</li>
<li><strong>Comprobar la cabecera Referer</strong>: cualquier petición que no 	contenga esta cabecera debe ser denegada, debido a que existen 	formas sencillas de evitar el envío de esa cabecera. Además, esta 	validación podría tener problemas con navegadores o proxies que 	evitan el envío de esta cabecera por razones de privacidad. Sin 	embargo, si el sitio web requiere de máxima seguridad, es una 	opción más a tener en cuenta.</li>
<li><strong>Usar GET y POST debidamente</strong>: según los estandares, las 	peticiones GET nunca deben de tener efectos permanentes. Si bien los 	envíos POST tambien se pueden falsear, es una tarea más complicada 	en la que tienen que darse más vulnerabilidades.</li>
</ul>
<h3>SQL injection</h3>
<p>Es un tipo de ataque que <strong>explota la vulnerabilidad de la capa de base de datos</strong> de una aplicación. Se presenta cuando los <strong>filtros pasados a una sentencia SQL no son escapados correctamente</strong> y por lo tanto, un usuario malitencionado puede envíar caracteres con significado especial en SQL para <strong>modificar la consulta</strong>.</p>
<blockquote><p>En 2009, <strong>el 25% de los robos</strong> a través de hacking, fueron hechos usando SQL injection.</p></blockquote>
<p>Imagina la siguiente consulta SQL para comprobar que los datos de inicio de sesión que acaba de enviar un usuario son correctos:</p>
<pre name="code" class="php">
$query = “SELECT * FROM users WHERE login='{$username}' AND password='{$password}'”;
</pre>
<p>Si las variables son recibidas directamente del formulario enviado y <strong>no son escapadas</strong>, un usuario malintencionado podría hacer envíar lo siguiente:</p>
<ul>
<li><strong>Usuario:</strong> ivan</li>
<li><strong>Contraseña:</strong> &#8216; or &#8217;1&#8242;=&#8217;1</li>
</ul>
<p>Así, la query resultante sería:</p>
<pre name="code" class="sql">
SELECT * FROM users WHERE login='ivan' AND password=' ' or '1'='1' ;
</pre>
<p>Lo cual, hace que la condición siempre sea cierta y te puedas identificar como cualquier usuario.</p>
<p>La inyección SQL <strong>tiene muchas posibilidades</strong>, ya que una persona con experiencia podría poco a poco investigar la base de datos y llevar a cabo tareas como robar información valiosa, eliminar tablas importantes con el objetivo de hacer daño a tu sitio web, insertar contenido malicioso, dar permisos de administrador a su usuario&#8230;entre otras muchas, hay tantas posibilidades como ideas  maliciosas <img src='http://web.ontuts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>A continuación dejo un ejemplo para mostrar lo sencillo que es <strong>eliminar una tabla</strong> de un sitio web vulnerable a inyección SQl, para que te tomes siempre muy en serio este tipo de vulnerabilidad.</p>
<p>Siguiendo con el caso anterior, un usuario podría rellenar el formulario con lo siguiente:</p>
<ul>
<li><strong>Usuario:</strong> ivan</li>
<li><strong>Contraseña:</strong> &#8216;;DROP TABLE users; –</li>
</ul>
<p>Por lo que la consulta resultante sería:</p>
<pre name="code" class="sql">
SELECT * FROM users WHERE login='ivan' AND password=' ' ;DROP TABLE users; –';
</pre>
<p>Más vale que tuvieses bien configuradas las copias de seguridad <img src='http://web.ontuts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h4>Como protegerse</h4>
<p>Una vez más, <strong>la solución es escapar los datos</strong> antes de incrustarlos en la consulta. En PHP disponemos de una función llamada <a href="http://php.net/manual/en/function.mysql-real-escape-string.php">mysql_real_escape_string</a> limpiará todos los caracteres que tienen significado especial para MySql y pueden modificar la consulta. Por lo tanto, la consulta de inicio de sesión que hemos visto, se corregiría ejecutándola de este modo:</p>
<pre  name="code" class="php">
$userName = mysql_real_escape_string($userName);
$password = mysql_real_escape_string($password);
$query = sprintf(“SELECT * FROM users WHERE login='%s' AND password='%s'”, $userName, $password);
</pre>
<p>También os podéis currar vuestro propio código para gestionar las consultas y que sea más cómodo. En un tutorial ya habíamos visto <a href="../tutoriales/creando-una-capa-de-conexion-abstracta-a-base-de-datos-con-php/">Cómo crear una capa de conexión abstracta a la base de datos</a></p>
<h3>Session Fixation</h3>
<p>Este ataque se aprovecha de la vulnerabilidad de algunos sitios que <strong>permiten a un usuario fijar el identificador de sesión</strong> (SID) de otro usuario. La mejor forma entender esta vulnerabilidad es mediante un ejemplo (usados los nombres <a href="http://en.wikipedia.org/wiki/Alice_and_Bob">por convención</a>)</p>
<ul>
<li>Un usuario malintencionado llamado Mallory se percata de que 	en el sitio http://vulnerable.com <strong>existe la posibilidad de cambiar el SID</strong> de los usuarios.</li>
<li>Mallory, envía el siguiente link a Alice: 	http://vulnerable.com?SID=este_sera_tu_sid (con esto lo que hace es 	que cuando Alice entre en el sitio web, el servidor establecerá su 	SID con el valor “este_sera_tu_sid”, de forma, que <strong>Mallory sabe 	el SID de Alice</strong>).</li>
<li>Alice entra confiada en la web e inicia sesión.</li>
<li>Mallory, al conocer el SID de un usuario identificado en la 	web, <strong>puede suplantarlo</strong> simplemente accediendo a 	http://vulnerable.com?SID=este_sera_tu_sid</li>
</ul>
<p>Como puedes comprobar, es muy sencillo el proceso.</p>
<h4>Cómo protegerse</h4>
<p>La primera norma para evitar esto es <strong>no aceptar nunca identificadores de sesión a través de variables GET / POST</strong>. La mejor forma de manejar los SID de los usuarios es a través de cookies. Si usas PHP puedes configurarlo para que automáticamente maneje las sesiones a través de cookies e ignore cualquier forma de establecer el SID a través de otros medios. Esto se puede hacer configurando lo siguiente en el fichero php.ini:</p>
<pre name="code" class="php">
session.use_cookies = 1
session.use_only_cookies = 1
</pre>
<p>Otra medida para evitar la fijación de sesión, es <strong>regenerar el SID del usuario en cada petición</strong>. Haciendo esto, incluso aunque un atacante obtenga tu SID, el SID será inválido cuando el atacante intente suplantar al usuario. Esto es muy fácil hacerlo en PHP, simplemente hay que llamar a la función <a href="http://php.net/manual/en/function.session-regenerate-id.php">session_regenerate_id</a></p>
<h3>Conclusión</h3>
<p>Como habrás podido comprobar, las aplicaciones web están expuestas a múltiples vulnerabilidades que podrían tener <strong>efectos catastróficos</strong>. El simple envío de un comentario “infectado” podría tener como resultado el robo de información de cientos o miles de usuarios.</p>
<p>De todas formas, el objetivo de este tutorial no es el de sembrar el miedo entre los desarrolladores, sino el de informar sobre algo que (creo) muchas veces se obvia o se deja en segundo plano. Lo único que hay que hacer es investigar y aprender, <strong>si quieres derrotar a tu enemigo, ¡conócelo!</strong> <img src='http://web.ontuts.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>


<p>Related posts:<ol><li><a href='http://web.ontuts.com/tutoriales/sesiones-en-php/' rel='bookmark' title='Permanent Link: Sesiones en PHP'>Sesiones en PHP</a></li>
</ol></p><img src="http://feeds.feedburner.com/~r/web-ontuts/~4/oKa8myvYNOQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://web.ontuts.com/tutoriales/apuntes-sobre-seguridad-web/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://web.ontuts.com/tutoriales/apuntes-sobre-seguridad-web/</feedburner:origLink></item>
	</channel>
</rss>

