<?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>Jesús Navarrete &#187; Proyectos</title>
	<atom:link href="http://www.jenaiz.com/category/proyectos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jenaiz.com</link>
	<description>jenaiz.com</description>
	<lastBuildDate>Thu, 14 Jan 2010 12:00:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reflexión tras la Conferencia Rails</title>
		<link>http://www.jenaiz.com/2008/11/19/reflexia%c2%b3n-tras-la-conferencia-rails/</link>
		<comments>http://www.jenaiz.com/2008/11/19/reflexia%c2%b3n-tras-la-conferencia-rails/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 10:27:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[opinión]]></category>
		<category><![CDATA[conferencia rails]]></category>
		<category><![CDATA[ror]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=83</guid>
		<description><![CDATA[A finales de la semana pasada, se celebró en Madrid la Conferencia Rails 2008, tal como os comenté, estuve allí conociendo gente, intercambiando opiniones y descubriendo lo que se está haciendo con Rails.
Este año he podido disfrutar asistiendo ambos días, además he disfrutado como más me hubiese gustado hacerlo siempre. Dado que desde hace un [...]]]></description>
			<content:encoded><![CDATA[<p>A finales de la semana pasada, se celebró en Madrid la <a href="http://www.conferenciarails.org/">Conferencia Rails 2008</a>, tal como os comenté, estuve allí conociendo gente, intercambiando opiniones y descubriendo lo que se está haciendo con Rails.</p>
<p>Este año he podido disfrutar asistiendo ambos días, además he disfrutado como más me hubiese gustado hacerlo siempre. Dado que desde hace un tiempo he estado trabajando más intensamente con Rails, y este ha sido el primer evento relacionado con el tema al que he podido asistir, eso si no contamos el <a href="http://www.toghq.com/info/event20081009">evento de Tog</a> en octubre <img src='http://www.jenaiz.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Como es habitual, aporto mi pequeña gota de feedback y como también es normal, no lo haré de todas las charlas, sino de aquellas que más me impactaron o que por una causa u otra más <em>recuerdos</em> han dejado en mi. Para los que se queden con ganas de más, les recuerdo que la organización grabó las charlas y que seguramente pronto estarán disponibles los vídeos como en otras ocasiones.</p>
<p><strong>Apertura y keynote por <a href="http://www.hashref.com/">fxn</a>.</strong> Una manera de abrir la conferencia singular, con referencias a hechos que originaron cambios. Personas que fueron contra corriente, con formas de pensar y/o hacer diferentes&#8230; Somos reacios al cambio, somos <em>animales</em> de costumbres y nos cuesta aceptar algo nuevo, pero cuando el cambio es llevado a cabo, cuando nos dejamos embaucar por lo extraño, sin duda disfrutamos como niños. Rails sin dudarlo es una <a href="http://www.amazon.com/Tipping-Point-Little-Things-Difference/dp/0316346624">pequeña cosa que ha hecho una gran diferencia</a>. Frameworks hay muchos, intentos de hacerlo de otra forma también, pero corrientes como la que vivimos no han habido tantas. Lo que más me maravilla de esta comunidad es que muchos hemos llegado a ella con experiencia sobre otras, con lecciones aprendidas a fuego y veo cosas que me gustan bastante.</p>
<p><strong>Caso de éxito: &#8220;Tog: Open Web, Social Networks y cintas de video&#8221;.</strong> Una explicación de la visión sobre los objetos sociales y sobre lo que una red social debería crearse. Intentando mostrar el aporte que <a href="http://www.toghq.com/">Tog</a> podría hacer con respecto a crear una red social. No sé si fue la charla, si oir a Aitor en estado catarroso o si definitivamente <a href="http://www.toghq.com/">Tog</a> tiene el tirón que parece. El caso es que el último día las votaciones de mejor proyecto del año 2008 recayó sobre él XD, y eso que fue liberado a ¡finales de septiembre! La verdad es que el trabajo detrás de esta primera inflexión que supuso la liberación del código se remonta a bastantes meses atrás. Antes hubo pruebas, proyectos, afinamiento de ideas y tras todo eso la creación de lo que ahora mismo es. Todo ello entorno a la idea que nos mueve de los objetos sociales y su valor.</p>
<p><strong>Rails HOT or NOT.</strong> Os recomiendo verla en video <img src='http://www.jenaiz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . No había utilizado todos los plugins que se comentaron, en ocasiones no podía decir nada malo por uno de ellos, pero sin duda descubrí opciones, opiniones en base a experiencias y espero pronto leer las conclusiones en la lista de <a href="http://lists.simplelogica.net/mailman/listinfo/ror-es">ror-es</a>; además de invertir algo de tiempo en cacharrear con alguno de ellos.</p>
<p><strong>Speed dating.</strong> Un experimento que pudo hacer que nos relacionásemos <em>gente con proyectos en busca de gente</em> y <em>gente en busca de proyectos</em>, aunque tubo un mayor aporte de empresas que buscaban personal para contratar que lo yo personalmente hubiese querido encontrar. Aún así, una grata experiencia.</p>
<p><strong>Caso de éxito: &#8220;b5map: Maps on Rails&#8221;.</strong> La verdad es que ya conocía la web desde hacía tiempo, conozco Aitor por sus post en <a href="http://www.jaiku.com">jaiku</a>, pero desconocía las <strong>tiranteces</strong> que parece haber entre los ayuntamientos. Algo que me llamó mucho la atención, fue descubrir que el proyecto se había llevado a cabo aunando a freelances y pequeñas empresas, algo loable viniendo de una administración pública.</p>
<p><strong>Keynote por Obie.</strong> Una forma de ver el mundo laboral y empresarial diferente a lo que se ve en este país. Sin duda oír hablar a <a href="http://obiefernandez.com/">Obie</a> diciendo que son buenos desarrollando, que les gusta y que eso es a lo que se dedican y es lo que le transmiten a sus clientes; lo cual despertó algún comentario en los asistentes, dada la comparación con lo que vivimos aquí en España. Aplicación de <a href="http://en.wikipedia.org/wiki/Pair_programming">Pair Programming</a> todo el tiempo, un ambiente laboral agradable, invitaciones a personas destacadas dentro del mundo de la programación para que interaccionen con la gente que trabaja en <a href="http://www.hashrocket.com/">Hashrocket</a>, etc etc. Fue agradable de escuchar y creo que sería increíble trabajar en esos ambientes (al lado de la playa <img src='http://www.jenaiz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) y de con esas premisas. Aunque sin duda mi conclusión actual es que no estamos tan lejos de conseguirlo, y que la nueva cultura de empresas pequeñas haciendo software creada entorno a Rails, podría llevarnos a eso.</p>
<p>Por comentar, me queda por ver a fondo la charla de <a href="http://www.eparreno.com/">Emili Parreño</a> sobre ActiveRecord, echarle un vistazo a <a href="http://francescesplugas.com/pages/typus">Typus</a>, probar <a href="http://aws.amazon.com/ec2/">EC2 de Amazon</a>, hacerse con uno de los aparatos que vimos en: <strong>Hardware Hacking en Ruby y casi en Rails</strong> para <em>iluminar los deploys</em> y definitivamente: hacer <a href="http://rubyhoedown2008.confreaks.com/05-bryan-liles-lightning-talk-tatft-test-all-the-f-in-time.html">TAFT</a> <img src='http://www.jenaiz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/11/19/reflexia%c2%b3n-tras-la-conferencia-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internship 2008 y flatee.com</title>
		<link>http://www.jenaiz.com/2008/10/03/internship-2008-y-flateecom/</link>
		<comments>http://www.jenaiz.com/2008/10/03/internship-2008-y-flateecom/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 09:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[opinión]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[flatee]]></category>
		<category><![CDATA[internship]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=79</guid>
		<description><![CDATA[A poco de iniciar mi actividad como freelance, comenzamos un proyecto para aprender los entresijos de rails y a la vez enfrentarnos a otro tipo de problemas que no tenían que ver tanto con programación. Como recordaréis estoy hablando de flatee.com.
Pues bien, he de anunciar que el Internship se ha dado por clausurado y el [...]]]></description>
			<content:encoded><![CDATA[<p>A poco de iniciar mi actividad como freelance, comenzamos un proyecto para aprender los entresijos de rails y a la vez enfrentarnos a otro tipo de problemas que no tenían que ver tanto con programación. Como recordaréis estoy hablando de <a href="http://www.jenaiz.com/index.php?/archives/135-El-comienzo-de-un-nuevo-proyecto-flatee.com.html">flatee.com</a>.</p>
<p>Pues bien, he de anunciar que el <a href="http://weblog.linkingpaths.com/2008/06/02/linking-internship-2008/">Internship</a> se ha dado por clausurado y el resultado no ha sido nada alentador.</p>
<p>La verdad es que se juntaron varias cosas, como ya <a href="http://weblog.linkingpaths.com/2008/10/03/decepcion-con-el-linking-internship-2008/trackback/">apuntan</a> en el blog de Linking. Una vez más se ha evidenciado <strong>la importancia de la dedicación total</strong>, es difícil que un proyecto propio o sideproject se convierta en una realidad cuando el tiempo empleado para ello es muy limitado.</p>
<p>Creo sinceramente que el momento en el tiempo no fue el mejor (verano); que se junto con el comienzo de nuestra nueva actividad; que quizás es bastante cierto que faltó algo de presión por tener un entregable; que nuestra dedicación no era completa y se juntó con otras actividades que colapsaron nuestro día a día; y quizás otros factores que no soy capaz de ver en este momento. Todo esto suena a <em>excusas explicatorias</em>, pero nada más lejos; lo importante es el análisis de lo ocurrido y sacar conclusiones, para aprender de la experiencia.</p>
<p>Para mi es un trago amargo pensar en el resultado, no se puede decir que de la experiencia no haya sacado nada, pues no estaría diciendo la verdad. Sin embargo he querido concluir totalmente con ello y en principio dado que no podía comprometerme una vez más y mentirme a mi mismo y a mis compañeros sobre el tiempo real que podría dedicar, he decicido <em>no continuar activamente</em> con el proyecto. No descarto volver a hacer más cosas en el proyecto, pero a día de hoy no tengo la certeza suficiente de cuánto puedo dedicarme a él.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/10/03/internship-2008-y-flateecom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Una red social para desarrolladores: debug_mode=ON</title>
		<link>http://www.jenaiz.com/2008/10/02/una-red-social-para-desarrolladores-debug_modeon/</link>
		<comments>http://www.jenaiz.com/2008/10/02/una-red-social-para-desarrolladores-debug_modeon/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 12:45:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[desarrolladores]]></category>
		<category><![CDATA[redes sociales]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=78</guid>
		<description><![CDATA[La verdad es que estos días he estado bastante en silencio, pero más por falta de tiempo que otra cosa, me disculpo, y empiezo por noticias que alegran nuestro trabajo. Hace un par de semanas fue lanzado debug_mode=ON, un portal para desarrolladores, que pretende crear una red social entorno a los mismos.
La idea quizás tiene [...]]]></description>
			<content:encoded><![CDATA[<p>La verdad es que estos días he estado bastante en silencio, pero más por falta de tiempo que otra cosa, me disculpo, y empiezo por noticias que alegran nuestro trabajo. Hace un par de semanas fue lanzado <a href="http://www.debugmodeon.com/">debug_mode=ON</a>, un portal para desarrolladores, que pretende crear una red social entorno a los mismos.</p>
<p>La idea quizás tiene bastantes alicientes aunque a mi me gustaría destacar un par de ellos:</p>
<p>- Una página de referencia <em>independiente</em> del lenguaje, del sistema, de la plataforma&#8230; da igual si eres programador o administrador o como ellos mismos dicen <em>informático en general</em>, <strong>todos tienen cabida en el mismo espacio</strong>.</p>
<p>- Un lugar donde escribir artículos puede darte beneficios, pues debug_mode=ON ha optado por que los obtengas, basta con que añadas tu código de <a href="https://www.google.com/adsense/login/en_US/">Google Adsense</a> y listo.</p>
<p>El hecho de que me haya retrasado con el post, ha tenido un efecto curioso, porque he podido intercambiar impresiones con alguno de los miembros del proyecto, en concreto con <a href="http://www.gimenete.net">Alberto Gimeno</a>. La verdad es que la idea ha tenido repercusión en algunos medios, tales como: <a href="http://barrapunto.com/articles/08/09/22/224258.shtml">barrapunto</a>, <a href="http://www.javahispano.org/contenidos/es/debug_modeon_nueva_red_social_de_programadores_en_espanol/">javaHispano</a> y algún otro, lo cual ha hecho más <em>emocionante</em> el arranque inicial.</p>
<p>La tecnología utilizada, para los que aún no lo hayáis adivinado es <a href="http://code.google.com/appengine/">Google App Engine</a>, lo cual ha sido enriquecedor a un punto y ha traido algún quebradero de cabeza que otro, dado que han tenido que superar bastantes <a href="http://groups.google.com/group/google-appengine/browse_thread/thread/6ff62bbb2ee9f373?hl=en&amp;pli=1">problemas de over quota</a> en los momentos iniciales, aunque lo <a href="http://www.debugmodeon.com/item/45851/como-resolvimos-los-problemas-de-carga">superaron</a>. Como curiosidad, coincidiendo con el <a href="http://code.google.com/intl/es_ALL/events/developerday/2008/home.html">Google Developer Day</a>, que se celebró en Madrid el pasado día 25 de septiembre (al que en el último momento no puede asistir) tuvieron la oportunidad de charlar con los ingenieros de Google sobre la herramienta de Google y sobre la página, además de poder enseñársela a algunas personas que asistieron al evento.</p>
<p>Desde aquí desearles mucha suerte y fuerzas para tirar de la idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/10/02/una-red-social-para-desarrolladores-debug_modeon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nube de tags</title>
		<link>http://www.jenaiz.com/2008/09/15/nube-de-tags/</link>
		<comments>http://www.jenaiz.com/2008/09/15/nube-de-tags/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 08:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[tags]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=74</guid>
		<description><![CDATA[El otro día cuando hablábamos de poder taggear modelos, os puse el ejemplo de las nubes de tags que vemos en innumerables ocasiones, sin embargo sólo avanzamos hasta disponer de un modelo tageable.
Ahora os voy a mostrar cómo se podría construir la nube de tags partiendo de lo que hicimos.
Lo primero, es que nuestra aplicación [...]]]></description>
			<content:encoded><![CDATA[<p>El otro día cuando hablábamos de poder taggear modelos, os puse el ejemplo de las nubes de tags que vemos en innumerables ocasiones, sin embargo sólo avanzamos hasta disponer de un modelo tageable.</p>
<p>Ahora os voy a mostrar cómo se podría construir la nube de tags partiendo de lo que <a href="http://www.jenaiz.com/index.php?/archives/144-Como-anadir-tags-a-nuestros-modelos.html#comments">hicimos</a>.</p>
<p>Lo primero, es que nuestra aplicación necesita utilizar un método llamado tag_cloud, que es el que se va a encargar de pintar la nube de tags, para ello hacemos que nuestro AplicationHelper incluya el helper que contiene el método:</p>
<pre name="code" class="ruby">module ApplicationHelper
  include TagsHelper
end</pre>
<p>Nos basta con añadir esto al helper del controlador concreto, pero dada la implementación del plugin creo que querréis crear más nubes de tags para otros modelos, por lo que he preferido tener disponible estos métodos para toda la aplicación.</p>
<p>Ahora Necesitamos cargar en nuestro controlador lo que va a ser mostrado en la vista:</p>
<pre name="code" class="ruby">@tags = Entry.tag_counts</pre>
<p>Y por último nos vamos a la vista y añadimos la nube de tags:</p>
<pre name="code" class="ruby">&lt;% tag_cloud @tags, %w(css1 css2 css3 css4 css5) do |tag, css_class| %&gt;
    &lt;%= link_to tag.name, { :action =&gt; :tag, :id =&gt; tag.name }, :class =&gt; css_class %&gt;
  &lt;% end %&gt;</pre>
<p>para que esta pueda tener el efecto adecuado, necestitáis definir los siguiente estilos en la vista:</p>
<pre name="code" class="css">.css1 { font-size: 1.0em; }
.css2 { font-size: 1.4em; }
.css3 { font-size: 1.6em; }
.css4 { font-size: 1.8em; }
.css5 { font-size: 2em; }</pre>
<p>estos deberíais adaptarlos en tamaño según vuestro diseño, ¿sencillo verdad?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/09/15/nube-de-tags/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cómo añadir tags a nuestros modelos</title>
		<link>http://www.jenaiz.com/2008/09/13/ca%c2%b3mo-aa%c2%b1adir-tags-a-nuestros-modelos/</link>
		<comments>http://www.jenaiz.com/2008/09/13/ca%c2%b3mo-aa%c2%b1adir-tags-a-nuestros-modelos/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 15:45:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[tags]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=73</guid>
		<description><![CDATA[Estoy seguro que más de una vez habéis visto nubes de tags en variedad de sitios webs, a la vez que las habéis utilizado, pues bien, existe un plugin en rails que puede haceros las delicias, para poder tagear cualquier modelo con el que estéis trabajando.
La historia de este plugin, es que David Heinemeier Hansson [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy seguro que más de una vez habéis visto nubes de tags en variedad de sitios webs, a la vez que las habéis utilizado, pues bien, existe un plugin en rails que puede haceros las delicias, para poder tagear cualquier modelo con el que estéis trabajando.</p>
<p>La historia de este plugin, es que <a href="www.loudthinking.com/ ">David Heinemeier Hansson</a> creó un plugin para poder poner tags a sus modelos, llamado: <a href="http://wiki.rubyonrails.org/rails/pages/Acts+As+Taggable+Plugin">acts_as_taggable,</a> sin embargo alguien decidió hacerle unos añadidos para convertirlo en más actual, haciendo que el nuevo plugin tuviese:</p>
<blockquote><p>[...] extras such as tests, smarter tag assignment, and tag cloud calculations.</p></blockquote>
<p>Este nuevo plugin recibió el nombre de <a href="http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids">acts_as_taggable_on_steroids</a> y es obra de Jonathan Viney.</p>
<p>Para instalarlo, nuestro primer paso debe ser:</p>
<blockquote><p>script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids</p></blockquote>
<p>Tras esto, debemos generar una migración para poder crear la tablas en las que se guardaran los datos:</p>
<blockquote><p>script/generate acts_as_taggable_migration</p></blockquote>
<p>Esto nos genera:</p>
<blockquote><p>004_acts_as_taggable_migration.rb</p></blockquote>
<p>el número no tiene porqué coincidir con el vuestro; aplicamos la migración:</p>
<blockquote><p>rake db:migrate</p></blockquote>
<p>Y ahora ya sólo nos queda hacer que nuestro controlador sea <em>tageable</em>:</p>
<pre name="code" class="ruby">class Entry &lt; ActiveRecord::Base
  acts_as_taggable
end</pre>
<p>Para añadir tags en el formulario de edición o en el de creación de nuestro modelo concreto, en nuestro caso: entries/new.html.erb y entries/edit.html.erb, basta con la siguiente línea de código:</p>
<pre name="code" class="ruby">&lt;%= f.text_field :tag_list %&gt;</pre>
<p>así nuestras entradas utilizarán tags y se guardarán.</p>
<p>Nuestro modelo cuenta con una serie de métodos para jugar con tags. Uno que debéis esperar, al ver como he llamado al <em>text_field</em> de los tags, es sin duda:</p>
<pre name="code" class="ruby">entry.tag_list = "ruby, rails"
entry.save</pre>
<p>Con él añadimos los tags a entry, tras grabarlo.</p>
<p>Podemos añadir a una lista ya existente:</p>
<pre name="code" class="ruby">entry.tag_list.add("languages", "article")</pre>
<p>borrar una etiqueta concreta:</p>
<pre name="code" class="ruby">entry.tag_list.remove("ruby")</pre>
<p>Podemos encontrar las entradas taggeadas con unas determinadas tags:</p>
<pre name="code" class="ruby">Entry.find_tagged_with('ruby, rails')</pre>
<p>Esto nos traera objetos que contenga cualquiera de las dos tags, si queremos que contengan las dos o más, tenemos que usar match_all.</p>
<pre name="code" class="ruby">Entry.find_tagged_with('ruby, rails', :match_all =&gt; true)</pre>
<p>Por defecto el delimitador es una coma, si deseamos cambiarlo, también tenemos esa opción:</p>
<pre name="code" class="ruby">TagList.delimiter = " "</pre>
<p>añadido al config/environment.rb, quedaría cambiado el delimitador.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/09/13/ca%c2%b3mo-aa%c2%b1adir-tags-a-nuestros-modelos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalación del plugin: acts_as_commentable</title>
		<link>http://www.jenaiz.com/2008/07/28/instalacion-del-plugin-acts_as_commentable/</link>
		<comments>http://www.jenaiz.com/2008/07/28/instalacion-del-plugin-acts_as_commentable/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 23:02:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[acts_as_commentable]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[ror]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=71</guid>
		<description><![CDATA[Este fin de semana he retomado mi idea de crear una herramienta para blogs, pero tenía la intención de hacer uso de la mayor cantidad posible de plugins que pudiese, para así poder experimentar con ellos. Cualquier blog que guste de hacer uso del feedback y de las opiniones de la gente, cuenta con un [...]]]></description>
			<content:encoded><![CDATA[<p>Este fin de semana he retomado mi idea de crear una herramienta para blogs, pero tenía la intención de hacer uso de la mayor cantidad posible de plugins que pudiese, para así poder experimentar con ellos. Cualquier blog que guste de hacer uso del feedback y de las opiniones de la gente, cuenta con un sistema que permite <strong>comentar</strong> las entradas que se hacen en el mismo. Pues bien, para hacer esto, podríamos crearnos el modelo que lo contendría, establecer la relación, validar las entradas, etc. Sin embargo existe un plugin, <a href="http://agilewebdevelopment.com/plugins/acts_as_commentable">acts_as_commentable</a>, que podría simplificarnos esta labor.</p>
<p>Para poder comentar nuestras entradas, vamos a generar un scaffold llamado <em>Entry</em>:</p>
<pre name="code" class="ruby">script/generate scaffold Entry title:string body:text create_at:datetime draft:boolean</pre>
<p>Empezamos por instalar el plugin:</p>
<pre name="code" class="ruby">script/plugin install http://juixe.com/svn/acts_as_commentable</pre>
<p>Necesitamos crear una migración para contener la tabla de comentarios, dado que el plugin no la crea por nosotros:</p>
<pre name="code" class="ruby">script/generate migration create_comments</pre>
<p>Esto nos genera un fichero en db/migrate cuyo nombre es <em>XXX_create_comments.rb</em>; XXX es un número, que dependerá de nuestro contenido en el directorio anterior, en mi caso es <em>002_create_comments.rb</em>, el contenido que debemos copiar en dicho fichero es:</p>
<pre name="code" class="ruby">class CreateComments &lt; ActiveRecord::Migration
  def self.up
    create_table :comments, :force =&gt; true do |t|
      t.column :author, :string, :limit =&gt; 50, :default =&gt; ""
      t.column :email, :string, :limit =&gt; 100, :default =&gt; ""
      t.column :website, :string, :limit =&gt; 100, :default =&gt; ""
      t.column :body, :text, :default =&gt; ""
      t.column :created_at, :datetime, :null =&gt; false
      t.column :commentable_id, :integer, :default =&gt; 0, :null =&gt; false
      t.column :commentable_type, :string, :limit =&gt; 15, :default =&gt; "", :null =&gt; false
      t.column :user_id, :integer, :default =&gt; 0, :null =&gt; false
    end

    add_index :comments, ["user_id"], :name =&gt; "fk_comments_user"
  end

  def self.down
    drop_table :comments
  end
end</pre>
<p>ejecutamos el proceso de migración, para poder empezar a usar la tabla:</p>
<pre name="code" class="ruby">rake db:migrate</pre>
<p>Para que nuestro modelo <em>Entry</em> empieze a ser comentable, necesitamos añadirle lo siguiente:</p>
<pre name="code" class="ruby">class Entry &lt; ActiveRecord::Base
  acts_as_commentable
end</pre>
<p>A partir de este momento, tenemos todo listo. Aunque ahora necesitamos utilizarlo, para ello, primero cambiamos la vista de las entradas para que puedan ser comentadas cuando las estemos viendo. Así que modificamos el fichero <em>entries/show.html.erb</em>, y añadimos:</p>
<pre name="code" class="ruby">&lt;%= render :partial =&gt; 'comment', <img src='http://www.jenaiz.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> bject =&gt; @entries %&gt;</pre>
<p>Creamos el fichero _comment.html.erb:</p>
<pre name="code" class="ruby">Comments
&lt;% if @entry.comments.count != 0%&gt;
    &lt;% for comment in @entry.comments %&gt;
    &lt;%= comment.author%&gt; said &lt;%= distance_of_time_in_words(Time.now,comment.created_at) %&gt;.
    	&lt;%= comment.body %&gt;
    &lt;% end %&gt;
&lt;% end %&gt;

&lt;%= form_tag :action =&gt; "comment", :id =&gt; @entry do %&gt;
  &lt;%= text_field 'comment', 'author'  %&gt; name (required)
 	&lt;%= text_field 'comment', 'email'  %&gt; email ( will not be shown ) (required)
 	&lt;%= text_field 'comment', 'website'  %&gt; website
	&lt;%= text_area "comment", "body" %&gt;
	&lt;%= submit_tag "Comment!" %&gt;
&lt;%= end_tag %&gt;
(falta añadir los saltos de línea correspondientes)</pre>
<p><em>comment</em>:</p>
<pre name="code" class="ruby"> def comment
      @entry = Entry.find(params[:id])
      comment = Comment.new(params[:comment])
      @entry.add_comment comment
      comment.save!

      Commentmailer.deliver_comment(comment)
      flash[:notice] = "Comentario añadido con éxito"
      redirect_to :action =&gt; 'show'
  end</pre>
<p>La creación del comentario es recogiendo los parámetros del formulario, aunque la parte importante es cómo manejar los comentarios, cómo añadírselo a una entrada:</p>
<pre name="code" class="ruby">@entry.add_comment comment</pre>
<p>Si os habéis fijado, la tabla añade una columna <em>user_id</em>, de esta forma tenemos asociados los comentarios a los usuarios. De tal forma que podremos hacer búsquedas como:</p>
<pre name="code" class="ruby">comments = Comment.find_comments_by_user(user)</pre>
<p>De tal forma que obtendríamos todos los comentarios para un usuario dado. O podríamos obtener los comentarios de un usuario para las entradas:</p>
<pre name="code" class="ruby">postComments = Entry.find_comments_by_user(user)</pre>
<p>Por si os entra la vena investidadora, os diré que en la tabla hay un par de columnas &#8220;mágicas&#8221; que crean la relación con los distintos modelos que quisieramos comentar:</p>
<blockquote><p>commentable_id &gt;&gt; almacena el identificador de lo que comentemos<br />
commentable_type &gt;&gt; almacena el tipo de lo que comentemos, en nuestro caso Entry</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/07/28/instalacion-del-plugin-acts_as_commentable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SVNMate: Plugin de svn para TexMate</title>
		<link>http://www.jenaiz.com/2008/07/24/svnmate-plugin-de-svn-para-texmate/</link>
		<comments>http://www.jenaiz.com/2008/07/24/svnmate-plugin-de-svn-para-texmate/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 08:53:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[svnmate]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=70</guid>
		<description><![CDATA[Trabajar en TextMate y no saber que archivos has modificado a la hora de hacer un commit, la verdad es que es un poco engorroso, porque ¿cómo sabes cúando hacer un commit? ¿cuáles son los archivos modificados? Siempre tenderás aer a hacer un commit de la carpeta padre más elevada que puedas o olvidarás algo.
En [...]]]></description>
			<content:encoded><![CDATA[<p>Trabajar en TextMate y no saber que archivos has modificado a la hora de hacer un commit, la verdad es que es un poco engorroso, porque ¿cómo sabes cúando hacer un commit? ¿cuáles son los archivos modificados? Siempre tenderás aer a hacer un commit de la carpeta padre más elevada que puedas o olvidarás algo.</p>
<p>En otros entornos de desarrollo esto se soluciona gráficamente, añadiendo un icono pequeño a cada archivo de tal forma que podemos saber el estado que tiene. Para TextMate existe una solución: <a href="http://ciaranwal.sh/files/SVNMate.tmplugin.zip">SVNmate</a>.</p>
<p>La instalación es bastante sencilla, el zip contiene un archivo llamado <strong>SVNMate.tmplugin</strong> que con doble click, se añadirá directamente a TextMate. Podéis corroborarlo entrando en las <em>Preferences</em>, allí podréis visualizar un menú similar a:</p>
<p><img class="size-full wp-image-136 aligncenter" title="svnmate" src="http://farm4.static.flickr.com/3464/3774584633_5b7110f5b6.jpg" alt="svnmate" width="576" height="302" /></p>
<p>Ahora necesitáis reiniciar y todos vuestros archivos adquirirán el icono del estado con respecto al svn.</p>
<p>Existe una pequeña pega: si modificas un archivo, el directorio inmediatamente superior queda como <em>modificado</em> por lo cual sabes que dentro existen cambios para hacer commit, pero por encima de esto ningún otro directorio muestra modificaciones. Un pantallazo de mi entorno de desarrollo os lo aclarará mejor:</p>
<p><img class="aligncenter size-full wp-image-137" title="directorios" src="http://farm4.static.flickr.com/3563/3775389700_f3c426baf8.jpg" alt="directorios" width="240" height="107" /></p>
<p>Esto hace que mientras trabajas con los directorios desplegados sabes más o menos como estás, pero que si los tienes comprimidos, realmente tienes parte del problema por el cual instalé el plugin.</p>
<p>¿Alguno sabéis si esto es configurable? ¿Habéis utilizado otro plugin?</p>
<p><strong>Update:</strong> Para hacer commits, updates, add file, etc. directamente seleccionamos un fichero y luego pulsamos a la vez: <strong>ctrl + shift + a</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/07/24/svnmate-plugin-de-svn-para-texmate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El comienzo de un nuevo proyecto: flatee.com</title>
		<link>http://www.jenaiz.com/2008/07/14/el-comienzo-de-un-nuevo-proyecto-flateecom/</link>
		<comments>http://www.jenaiz.com/2008/07/14/el-comienzo-de-un-nuevo-proyecto-flateecom/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 16:29:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[flatee]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=68</guid>
		<description><![CDATA[Llevo poco tiempo, y he posteado poco en estos últimos días, sin embargo todo tiene su explicación, estabamos dando forma a alguna de nuestras ideas. Aparte de tener que lidiar con la organización del tiempo, adaptarme al nuevo ecosistema de trabajo (del cual hablaré en otro momento) y algunas labores más, hemos por fin dado [...]]]></description>
			<content:encoded><![CDATA[<p>Llevo poco tiempo, y he posteado poco en estos últimos días, sin embargo todo tiene su explicación, estabamos dando forma a alguna de nuestras ideas. Aparte de tener que lidiar con la organización del tiempo, adaptarme al nuevo ecosistema de trabajo (del cual hablaré en otro momento) y algunas labores más, hemos por fin dado luz verde a un proyecto que esperamos os sea de utilidad.</p>
<p>Como parte del <a href="http://weblog.linkingpaths.com/2008/06/02/linking-internship-2008/">Internship 2008</a> desarrollado para <a href="http://www.linkingpaths.com">Linking Paths</a>, hemos emprendido el camino de un proyecto que consideramos bastante interesante; su nombre en clave es: <a href="http://www.flatee.com">flatee.com</a>. ¿De qué va todo esto? Bueno, <a href="http://blog.flatee.com/2008/07/14/empezamos-con-flatee/trackback/">la explicación</a> es mejor tormarla del propio <a href="http://blog.flatee.com">blog</a> del proyecto, y no repetirnos:</p>
<blockquote><p><img class="alignright size-full wp-image-139" title="flatee" src="http://farm4.static.flickr.com/3478/3775389634_e833813c11.jpg" alt="flatee" width="110" height="109" />La idea de flatee es darle una vuelta a las webs de clasificados para compartir piso: las webs especializadas están congeladas desde hace mucho tiempo, las generales de inmobiliarias a las que se les nota esa generalidad y por último las generales de clasificados que como se puede entender aportan bastante poco. De todas formas, sabemos que nuestra apuesta por la singularidad compite abiertamente en un mercado tradicional. No será fácil, pero el internship no es sólo desarrollo de software sino también hacerse valer en un sector determinado y estudiar vías de negocio.</p></blockquote>
<p>La verdad es que esto es el comienzo, el pistoletazo de salida. Pero queríamos aprovechar la experiencia con un blog en el que ir contando todo lo que nos sucede a lo largo de este tiempo, a la vez que tener una forma de contacto más natural. El tiempo de desarrollo es bastante corto y esperamos que tras esto podamos ofreceros una herramienta en la que buscar pisos compartidos y anunciarlos, orientada sólo a eso, <strong>pisos compartidos</strong>.</p>
<p>En esta ocasión la idea no va sólo rodeada de un desarrollo, sino que también la acompañan otros cuestiones más ligadas a crear un producto o servicio desde cero que al desarrollo propiamente dicho.</p>
<p>Cómo compañeros de viaje, estamos varios; por un lado: <a href="http://www.danilat.com">Daniel Latorre</a> y por otro yo mismo. Está claro que no emprendemos la aventura solos, sino que lo hacemos bajo la tutela de <a href="http://www.linkingpaths.com">Linking Paths</a>, de eso va el <a href="http://weblog.linkingpaths.com/2008/06/02/linking-internship-2008/">Internship</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/07/14/el-comienzo-de-un-nuevo-proyecto-flateecom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenJavaDay Madrid 2008</title>
		<link>http://www.jenaiz.com/2008/06/25/openjavaday-madrid-2008/</link>
		<comments>http://www.jenaiz.com/2008/06/25/openjavaday-madrid-2008/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 08:32:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[opinión]]></category>
		<category><![CDATA[evento]]></category>
		<category><![CDATA[OpenJavaDay]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=65</guid>
		<description><![CDATA[En algo así como 24 horas tendrá lugar en Madrid, en la Universidad Complutense el OpenJavaDay 2008; un evento en el cual se hablará de: Groovy, NetBeans, Glassfish, Spring, Java Content Repository, aplicaciones RIA, OpenSolaris, OpenJDK, BPEL, OpenESB y SOA.

Durante dos días tendremos la oportunidad de escuchar y también de interactuar con los talleres organizados [...]]]></description>
			<content:encoded><![CDATA[<p>En algo así como 24 horas tendrá lugar en Madrid, en la <a href="http://www.javahispano.org/openjavaday/lugar.html">Universidad Complutense</a> el OpenJavaDay 2008; un evento en el cual se hablará de: Groovy, NetBeans, Glassfish, Spring, Java Content Repository, aplicaciones RIA, OpenSolaris, OpenJDK, BPEL, OpenESB y SOA.</p>
<p><img class="aligncenter size-full wp-image-142" title="banneropenjavaday_fndblanco" src="http://farm3.static.flickr.com/2626/3774584153_84e76e2164.jpg" alt="banneropenjavaday_fndblanco" width="300" height="199" /><br />
Durante dos días tendremos la oportunidad de escuchar y también de interactuar con los talleres organizados a tal efecto.<br />
Algunos de ellos para conocer: OpenCms, Trails, Spring, OpenXava, Glassfish o ItsNat.</p>
<p>Es un encuentro organizado conjuntamente por Sun MicroSystems y javaHispano (asociación sin ánimo de lucro), tal como ellos lo describen: &#8220;un evento sobre tecnología Java creado por la comunidad y para la comunidad&#8221;.</p>
<p>Yo por mi parte estaré por allí, para escuchar algunas charlas, asistir a alguno de los talleres y cómo no, para intercambiar opiniones con algunos de los asistentes, conocidos y no conocidos. Ya sabéis, si nos vemos por allí no dudéis en saludar, aunque no nos hayamos visto en persona, será un placer conoceros. Nos vemos por allí!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2008/06/25/openjavaday-madrid-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Escalando Twitter</title>
		<link>http://www.jenaiz.com/2007/11/27/escalando-twitter/</link>
		<comments>http://www.jenaiz.com/2007/11/27/escalando-twitter/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 17:43:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Empresas]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[consejos]]></category>
		<category><![CDATA[escalabilidad]]></category>
		<category><![CDATA[ror]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://192.168.1.100/~jenaiz/wordpress/?p=50</guid>
		<description><![CDATA[Una charla tomando café me ha llevado a leerme realmente el problema de escalabilidad de twitter. Ya hace tiempo que hubo mucho bombo en internet, sobre el problema. Dado que pareció entenderse que Rails no escalaba y hubo gente que se lo tomó a mal, lo normal en estos casos.
No quiero entrar en ese debate [...]]]></description>
			<content:encoded><![CDATA[<p>Una charla tomando café me ha llevado a leerme realmente el problema de escalabilidad de twitter. Ya hace tiempo que hubo mucho bombo en internet, sobre el problema. Dado que pareció entenderse que Rails no escalaba y hubo gente que se lo tomó a mal, lo normal en estos casos.</p>
<p>No quiero entrar en ese debate antiguo, más bien quería ver que problemas tenían, y que soluciones encontraron. Algo que me ha sorprendido bastante es el índice de <a href="http://www.slideshare.net/Blaine/scaling-twitter">Alexa</a> presentado en las trasparencias. Si consideráis que no es fiable, no os preocupéis por eso, sólo estamos mirando e investigando, dar por hecho que lo es e imaginaros que haríais; y luego pensad si vuestras ideas son buenas soluciones.</p>
<p>Me ha inquietado bastante que en un par de meses el orden de magnitud se incrementase brutalmente. Vamos que se ha multiplicado por 10, aunque realmente me entra la duda de cómo interpretar la unidad que sale en el índice de la gráfica de Alexa.</p>
<p>Lo realmente curioso es lo que les llevó a la conclusión; realmente mejorar el modelo de datos, las querys que se lanzan, crear índices, mejorar el rendimiento en general de la aplicación, etc; bueno, son las primeras cosas que a priori se te ocurren.</p>
<p>Pero hay algunas anotaciones remarcables:</p>
<p>&gt;&gt; Controla tu aplicación. Cuando pones tu aplicación en un servidor para dar servicio a muchas personas, tienes que saber qué está pasando. Hay cosas tan evidentes como el número de visitas, los errores que se están produciendo, lo más visitado, etc. Hasta los tiempos empleados para acceder a determinadas opciones, cuales son los ataques que se están produciendo, el estado de tus servidores (logs, espacio en disco, servicios caidos, nodos caidos&#8230;), etc. Existen miles de cosas que tienes que administrar y otras tantas que debes controlar y ser avisado en cuanto se produzcan determinadas alertas.</p>
<p>&gt;&gt; Cachea, cachea, cachea: No conviertas tu base de datos en tu cuello de botella, e intenta cachear toda la información que puedas necesitar y vuelva a solicitarse, evitando peticiones innecesarias a tu base de datos.</p>
<p>Las <a href="http://highscalability.com/scaling-twitter-making-twitter-10000-percent-faster">estadísticas</a> que existían:</p>
<blockquote><p># Over 350,000 users. The actual numbers are as always, very super super top secret.<br />
# 600 requests per second.<br />
# Average 200-300 connections per second. Spiking to 800 connections per second.<br />
# MySQL handled 2,400 requests per second.<br />
# 180 Rails instances. Uses Mongrel as the &#8220;web&#8221; server.<br />
# 1 MySQL Server (one big 8 core box) and 1 slave. Slave is read only for statistics and reporting.<br />
# 30+ processes for handling odd jobs.<br />
# 8 Sun X4100s.<br />
# Process a request in 200 milliseconds in Rails.<br />
# Average time spent in the database is 50-100 milliseconds.<br />
# Over 16 GB of memcached.</p></blockquote>
<p>Más datos sobre otras arquitecturas en <a href="http://highscalability.com/">High Scalability</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jenaiz.com/2007/11/27/escalando-twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
