<rss version="2.0" 
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/" 
>
<channel>
<title>mamuso.net</title>
<link>http://mamuso.net</link>
<description></description>
<language>es-es</language>
<dc:subject>Música</dc:subject>


<image>
	<url>http://s3.amazonaws.com/lcp/mamuso/myfiles/v2-200-thumb-10344-mamuso2-065x65.gif</url>
	<title>mamuso.net</title>
	<link>http://mamuso.net</link>
</image>
<generator>the-shaker v0.1. More on http://www.the-shaker.com</generator>
<item>
<title>Google Website Optimizer (on Rails)</title>
<link>http://mamuso.net/post/2009/01/27/google-website-optimizer-on-rails</link>
<pubDate>2009-01-27T00:30:40+00:00</pubDate>
<content:encoded><![CDATA[<p>Sobre el papel <a href="http://www.google.com/websiteoptimizer">Google Website Optimizer</a> parece una herramienta de marketing estupenda. Nos permite definir unos objetivos y probar distintos contenidos o alternativas de una misma página para ver qué funciona mejor. El problema es que para ponerlo en marcha hacen falta <span style="text-decoration: line-through;">dos ingenieros de caminos</span> algunos conocimientos técnicos.</p>
<p>Tras seleccionar los objetivos google nos da huellas javascript para poner en cabeceras, pies, rodear secciones... Esta página da verdadero pavor la primera vez que la ves. No es de extrañar que antes de asustarte pregunte si lo vas a instalar tú o vas a contar con un equipo técnico para instalarlo.</p>
<p><img class="imgcen" src="http://mamuso.net/myfiles/mamuso/Imagen-5.png" alt="" /></p>
<p>Como miré en mis cajones y no encontré ningún 'web team' me imaginé que esto iba a tener que acabar probándolo en mis propias carnes, así que pensé ¿que haría McGiver?, o mejor, alguien más vago ¿qué haría <a href="http://www.lacoctelera.com/porras">Porras</a>?. Evidentemente algo que me quitase de trabajar más de una vez en esto.</p>
<p>Buscando lo que había hecho por ahí encontré <a href="http://github.com/apatten-kidzui/website_optimizer/tree/master">este plugin</a>, que incorporaba unos helpers monísimos pero no me valía por tres cositas:</p>
<ul>
<li>GWO es para usarlo una temporadita, decidir qué contenido es el que nos da mejor rendimiento y olvidarlo. Así que si puedo evitar modificar la aplicación mejor.</li>
<li>Tengo que incluir scripts concretos en páginas concretas. Si todas mis páginas comparten layout y quiero tener varios experimentos activos al mismo tiempo me toca montar la fiesta del 'elsif' o alguna similar, y... ﻿﻿si puedo evitar modificar la aplicación mejor.</li>
<li>Si esto del GWO al final es buena idea, que parece que sí, van a querer usarlo en más sitios, y si yo o cualquiera de los agraciados podemos evitar modificar las aplicaciones... mejor!</li>
</ul>
<p>Así que lo descarté y traté de construir algo que cumpliese con todo lo anterior.</p>
<p>Y de la <a href="http://sofanaranja.com/2007/09/19/elogio-de-la-vagancia/">vagancia</a> más absoluta ha salido la primera versión de <strong><a href="http://github.com/mamuso/gwo_on_rails/tree/master">gwo_on_rails</a></strong>, un pequeñisimo plugin que te permite integrar este servicio tirando de un triste (pero bonito) yaml.</p>
<p>Está por limpiar, refactorizar y podar, amen de hacer tests más robustos, pero la realidad es que simplifica bastante el trabajo y ya está funcionando en un site en producción, en una home, a las mil maravillas sin modificar para nada la aplicación: instalar y rellenar el fichero de configuración.</p>
<p>¿Se puede pedir más? seguro que sí, hay partes que seguro se pueden resolver de formas más eficientes y otras que se a ciencia cierta que son un poquito matar moscas a cañonazos, así que cualquier sugerencia para mejorar el plugin será recibida con los brazos abiertos.</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2009/01/27/google-website-optimizer-on-rails#comentarios
</comments>
</item>
<item>
<title>Acts_as_unvlogable: un plugin para manejarlos a todos :)</title>
<link>http://mamuso.net/post/2009/01/05/acts_as_unvlogable-plugin-manejarlos-todos</link>
<pubDate>2009-01-05T00:18:26+00:00</pubDate>
<content:encoded><![CDATA[<p>Hace ya más de un añito que <a href="http://unvlog.com/">unvlog</a> salió a la luz y durante todo este tiempo hemos ido añadiendo soporte para más servicios de video a la criatura.</p>
<p>Como cualquier 'equipo A' que se precie teníamos un plan: sólo integraríamos servicios que tuviesen API. Pero un día implementas el primero que no la tiene, después ves que la estructura inicial la podías haber planteado de otro modo... y a la vuelta de un año tienes un montón de código esparcido por controladores, modelos y módulos que necesita orden.</p>
<p>De este 'barrer la casa' ha salido el plugin <a href="http://github.com/mamuso/acts_as_unvlogable/tree/master">acts_as_unvlogable</a> que permite sacar de varios servicios de video, más o menos populares, una información básica a partir de la url.</p>
<p>Por ejemplo. Si tenemos este preciosos video de vimeo: <a href="http://vimeo.com/1766353">http://vimeo.com/1766353</a> podemos averiguar su título, conseguir un thumbnail, la url del embed, el html necesario para embeberlo y la url del flv así de fácil:</p>
<pre name="code" class="ruby">  video = UnvlogIt.new("http://vimeo.com/1766353") video.title # => "Nice Clean White"  video.thumbnail # => "http://images.vimeo.com/ [...] /141150563_506.jpg"  video.embed_url # =>  "http://vimeo.com/moog [...] how_portrait=1"  video.embed_html(400, 300) # => " object width='400' height='300' [...] /object"  video.flv # =>  "http://www.vimeo.com/ [...] /video.flv"  </pre>
<p>La elección de estos datos y no otros es porque nostros utilizamos en la aplicación, y porque es el minimo común en todos los servicios.</p>
<p>Para saber cómo instalarlo, conocer todos los métodos y en general para tener información totalmente actualizada te recomiendo que le eches un vistazo a la <a href="http://github.com/mamuso/acts_as_unvlogable/tree/master">página del plugin</a>.</p>
<p>El plugin tiene dos dependencias, <a href="http://rubyforge.org/projects/youtube-g/">youtube-g</a> y <a href="https://code.whytheluckystiff.net/hpricot/">hpricot</a>.</p>
<p>En esta versión del plugin los servicios soportados son:</p>
<ul>
<li><a href="http://www.youtube.com/">Youtube</a></li>
<li><a href="http://video.google.com/">Google video</a></li>
<li><a href="http://vimeo.com/">Vimeo</a></li>
<li><a href="http://flickr.com/">Flickr (videos)</a></li>
<li><a href="http://metacafe.com/">Metacafe</a></li>
<li><a href="http://dailymotion.com/">Dailymotion</a></li>
<li><a href="http://collegehumor.com/">Collegehumor</a></li>
<li><a href="http://blip.tv/">Blip.tv</a></li>
<li><a href="http://vids.myspace.com/">Myspace</a></li>
<li><a href="http://www.ted.com/talks/">Ted Talks</a></li>
<li><a href="http://11870.com/">11870.com</a></li>
<li><a href="http://qik.com/">Qik</a></li>
<li><a href="http://www.marca.tv/">Marca.tv</a></li>
<li><a href="http://www.dalealplay.com/">Dalealplay</a></li>
</ul>
<p>Estamos abiertos a incluir muchísimos más, no os cortéis en pedir! Además todos los que vayamos integrando en unvlog, acabarán en el plugin.</p>
<p>La intención es mantener el plugin vivo y hacerlo evolucionar, así que si lo usáis en una aplicación y encontráis cualquier fallo o deja de funcionar algún servicio o tenéis alguna idea para hacerlo más útil nos gustaría que nos lo contases en nuestro <a href="http://tickets.unvlog.com/projects/show/acts-as-unvlogable">sistema de soporte</a>.
</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2009/01/05/acts_as_unvlogable-plugin-manejarlos-todos#comentarios
</comments>
</item>
<item>
<title>Attachment_fu, RMagick y cintas de video</title>
<link>http://mamuso.net/post/2008/12/04/attachment_fu-rmagick-y-cintas-video</link>
<pubDate>2008-12-04T02:36:36+00:00</pubDate>
<content:encoded><![CDATA[<p>Hoy hemos hecho un import masivo de imágenes a una web, y han quedado así, tan bonitas con todos sus tamaños bien buestos gracias a <a href="http://github.com/technoweenie/attachment_fu/tree/master">attachment_fu</a> (vía <a href="http://rmagick.rubyforge.org/">RMagick</a>).</p>
<p>Cuando he ido a la web a comprobar qué tal quedaba todo me he dado cuenta de que los thumbnails generados descargaban lentitos, así que por pura casualidad me dió por mirar el tamaño de cada imagencita de 50x50 pixeletes de nada.</p>
<p>Mmmm.... 60kb!!!! WTF!!!!</p>
<p>Vale, tranquilidad... es un error... voy a mirar mi importación en local que seguro que está mejor.</p>
<p>Pues mira no, está igual :)</p>
<p>La primera solución, y la más obvia, es la de tocar la calidad de la imagen en la importación en rmagick, de hecho &lt;a href="http://sobrerailes.com/"&gt;Lupión&lt;/a&gt; me envió <a href="http://blog.philburrows.com/articles/2008/05/03/hacking-attachment_fu-to-cut-down-on-image-size-while-keeping-things-pretty/">este post</a> donde incluso te hablan de tocar la imagen de forma selectiva en función del thumbnail.</p>
<p>Así que nada... toco mi métodito en attachment_fu y le casco una calidad de 70 y... ya está!!</p>
<p>Reimportamos mientras me tomo un cafetito y... ale, ha terminado. Esto no puede haber salido mal, pero por si las moscas voy a ver qué ocupa la misma image de 50x50.</p>
<p>Aha... 45kb... mecagoen!!!!!</p>
<p>Antes de sacar el hacha vamos a ver qué puede tener esa imagen. Command + i y...</p>
<p><img class="imgcen" src="http://mamuso.net/myfiles/mamuso/perfilimg.png" alt="" /></p>
<p>Aha... así que este thumbnail se ha hecho con una nikon :)</p>
<p>El caso es que RMagick al manipular una imagen no nos elimina ni los posibles comentarios y notas que pueda tener la imagen, ni ninguno de sus perfiles, ni exif... vamos, que se viene con todos los metadatos puestos. En una imagen mediana o grande tal vez esos Kbs de más no molesten, pero en cositas tan pequeñas yo prefiero eficiencia a sobreinformación.</p>
<p>Podemos ser mucho más selectivos, pero por lo general el comando <a href="http://www.simplesystems.org/RMagick/doc/image3.html#strip_bang">strip!</a> es nuestro amigo :) De este modo en <em>vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb</em>, en el método <em>resize_image</em>, retocamos esta linea:</p>
<pre name="code" class="ruby"> self.temp_path = write_to_temp_file(img.to_blob) </pre>
<p>Por esto:</p>
<pre name="code" class="ruby"> img.strip! self.temp_path = write_to_temp_file(img.to_blob {self.quality = 70}) </pre>
<p>Lo de la calidad es opcional, RMagick usa por defecto el 75% de calidad, que es válida para un montón de casos.</p>
<p><img class="imgdcha" src="http://mamuso.net/myfiles/mamuso/A0100283_1_thumbnail.jpg" alt="" />Así que volvemos a lanzar la importación... 3... 2... 1... y a ver. Esta vez no nos esperamos a que acabe :) Et voilà! Su imagen de 4Kb!</p>
<p>Cosa fina!</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2008/12/04/attachment_fu-rmagick-y-cintas-video#comentarios
</comments>
</item>
<item>
<title>Tag me baby</title>
<link>http://mamuso.net/post/2008/10/29/tag-me-baby</link>
<pubDate>2008-10-29T09:36:37+00:00</pubDate>
<content:encoded><![CDATA[<p>Aquí el posteador tardío :)</p>
<p>Algunos de los sospechosos habituales, lease <a href="http://www.furilo.com/">Álvaro Ortiz</a>, <a href="http://www.inwebwetrust.net/">Fernando Blat</a>, <a href="http://www.kekoponte.com/">Keko</a> y un servidor, hicimos equipo para el pasado <a href="http://railsrumble.com/">Rails Rumble</a> y por fin llevamos a cabo <a href="http://tagueame.r08.railsrumble.com/">Tagueame</a>.</p>
<p><img src='http://mamuso.net/myfiles/mamuso/tagueame.png' width='312' height='104' class='imgcen'/></p>
<p>El concepto es fácil, taguear personas :) Como este es un post que viene del pasado ya lo han explicado mis compañeros estupendamente <a href="http://www.furilo.com/archivos/tagueame-nuestra-participacion-en-el-rails-rumble-08/">aquí</a>, <a href="http://www.inwebwetrust.net/post/2008/10/20/tagueame-the-rails-rumble-application">aquí</a> o <a href="http://www.kekoponte.com/?p=477">aquí</a>. Así que yo sólo voy a decir que el reto de hacer una aplicación en un par de días, sin horarios extremos es refrescante.</p>
<p>Además, que yo tenga controlado, hay dos equipos más de rails hispano: <a href="http://ostraka.r08.railsrumble.com/">ostraka</a> y <a href="http://cahiers.r08.railsrumble.com/">cahiers</a>.</p>
<p>Quedaron listas para calificación <a href="http://railsrumble.com/entries">130 aplicaciones</a> y todavía hoy se puede votar con un sistema aleatorio bastante curioso.
</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2008/10/29/tag-me-baby#comentarios
</comments>
</item>
<item>
<title>Vago-receta: localizar vistas en un proyecto rails</title>
<link>http://mamuso.net/post/2008/09/16/vago-receta-localizar-vistas-un-proyecto-rails</link>
<pubDate>2008-09-16T10:03:55+00:00</pubDate>
<content:encoded><![CDATA[<p>Para ti, pequeño maquetador en proyectos rails :) En un proyecto normal las vistas tienen una jerarquía y están "donde deben de estar"™. El problema viene cuando la cosa se complica y hay partials compartidos, vistas que se reciclan y empiezan las particularidades.</p>
<p>Toda esa información está en el log. En mi caso uso este truquito cuando me tengo que centrar en solucionar sólo problemas en vistas y necesito ir al grano. Arrancamos el server de desarrollo con:</p>
<pre name="code" class="ruby"> 	script/server | grep Render </pre>
<p>o directamente sobre el log:</p>
<pre name="code" class="ruby"> 	tail -f development.log | grep Render </pre>
<p>De esta manera la salida que nos devuelve es más o menos así:</p>
<pre name="code" class="ruby"> 	Rendering template within layouts/application 	Rendering sessions/new 	Completed in 0.01080 (92 reqs/sec) | Rendering: 0.00938 (86%) | DB: 0.00000 (0%) | 200 OK [http://0.0.0.0/login] </pre>
<p>Y de esta forma localizamos la vistas a la primera :)</p>
<h3>Mamá, los 404 no me dejan ver el bosque!</h3>
<p>De vez en cuando llega la invasión de los 404. Normalmente son imágenes que no encuentra, y que puede ser por miles de motivos. Si la cantidad de errores es abusiva podemos hacer:</p>
<pre name="code" class="ruby"> 	tail -f development.log | grep -v 404 | grep Render </pre>
<p>Y ya está :)</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2008/09/16/vago-receta-localizar-vistas-un-proyecto-rails#comentarios
</comments>
</item>
<item>
<title>Tocar la información</title>
<link>http://mamuso.net/post/2008/09/11/tocar-informacion</link>
<pubDate>2008-09-11T22:40:22+00:00</pubDate>
<content:encoded><![CDATA[<p>Durante mis estudios de diseño industrial adquirí unos hábitos de observación sobre todo lo que es nuevo para mi. Cuando viajamos a otros países siempre que puedo visito supermercados para comparar productos y presentaciones, y de paso me divierto imaginando hábitos de consumo. </p>
<p>Otra cosa que me apasiona es el mobiliario urbano, tal vez por ser objetos que por definición condicionan la identidad de una ciudad, a los que no se les permite olvidar su faceta práctica. Forma, función y emoción a pie de calle. Infravalorados y olvidados porque ya son parte de nosotros.</p>
<p>Crear objetos durante una época de tu vida (con más o menos éxito) hace que hables de las cosas como si tuviesen alma, como si tuviesen mucho que contarnos y que mostrarnos. Y en este caso es así.</p>
<p>Interiorizamos conceptos de accesibilidad sin saberlo parados en un semáforo, con esos ruidos molestos que suceden cada vez que se pone en verde para los peatones. ¿No has tenido la tentación nunca de cerrar los ojos y tratar de cruzar? ¿Hacia dónde irías? ¿Tu oído está tan entrenado como para poder llegar al otro lado de la calle? Prometo que esta semana intentaré cruzar así La Castellana :)</p>
<p>En el último año, visitando Copenhague, descubrí este pequeño elemento pegado a los semáforos:</p>
<p><a href="http://flickr.com/photos/kelly_hirano/282355116"><img src="http://farm1.static.flickr.com/121/282355116_f6e102c5d5.jpg?v=0" width="450" alt="APS" class="imgcen"/></a></p>
<p>Es el cacharrito de los ruidos molestos, versión danesa. Como si fuese un danés de pro estuve ignorando toda la grandeza del elemento, mirando a lugares más interesantes.</p>
<p>Un semáforo interminablemente pesado me hizo caer en la cuenta de que estaba ante una pieza que transmitía mucha más información de la que parecía a simple vista, porque no había que mirarla, <em>había que tocarla</em>. Todo lo que usted necesita para orientarse en un semáforo.</p>
<ul>
<li>La barrita superior <strong>indica dirección</strong>. Está perpendicular al paso de cebra.</li>
<li>Los dos pequeños realces del extremo nos indican que <strong>hay una mediana antes de llegar al otro extremo de la calle</strong>.</li>
</ul>
<p>Muchísima información concentrada en un <a href="http://flickr.com/photos/kelly_hirano/282358007/">pequeño cachito metálico</a>.</p>
<p>Ese tipo de dispositivos, a medio camino entre el diseño industrial y la señalética, se llaman <a href="http://www.walkinginfo.org/aps/home.cfm">señales peatonales accesibles (APS)</a>.</p>
<p>En Copenhague estos <a href="http://www.walkinginfo.org/aps/4-14.cfm">APS</a> son muy usuales en el centro, en las afueras se van extendiendo bajo demanda de asociaciones de ciegos de Dinamarca.</p>
<p>Salgan ahí fuera y lleven cuidado, pero sobre todo lleven la curiosidad puesta.
</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2008/09/11/tocar-informacion#comentarios
</comments>
</item>
<item>
<title>Trabajar con conexión</title>
<link>http://mamuso.net/post/2008/09/08/trabajar-con-conexion</link>
<pubDate>2008-09-08T22:32:26+00:00</pubDate>
<content:encoded><![CDATA[<p>Hoy he tenido un fin de jornada de los que renuevan las ganas de trabajar. Discutía con <a href="http://jcorrea.es/">Jorge</a> sobre técnicas de maquetación, sus aplicaciones y lo poco que sabemos de muchas cosas.</p>
<p>Estoy maquetando una cosita a base de ems y ha surgido un pequeño choque (de los buenos). En menos de 5 minotos hemos puesto nuestras cartas encima de la mesa: ¿tiene sentido usarlo? ¿realmente vale para algo? ¿es un esfuerzo extra? ¿tiene alguna implicación accesible? y así unas cuantas más.</p>
<p>La fiebre de los 'layouts crecientes' volvió a salir a la luz hace poquito, cuando <a href="http://www.hugeinc.com/news/index.php?ID=70">Huge Inc.</a> lanzó el rediseño de la web de <a href="http://www.ikea-usa.com/">ikea </a>. Todo el mundo coincidió en el trabajazo que habían hecho con el layout, que crece a la perfección. </p>
<p>Tal vez el principal motivo para usar esta técnica fuese el dotar de un 'extra-ball' para resoluciones de pantallas grandes, o simplemente fuese un pequeño guiño técnico sin más. Y digo pequeño guiño porque después la implementación de las páginas de producto no crece igua de bien.</p>
<p>Vale, estamos de acuerdo en que en cuanto los navegadores implementen un buen zoom esto, probablemente, no tendrá sentido. Firefox 3 ya lo incorpora y previsiblemente cualquiera que salga a partir de ahora.</p>
<p>El caso es que sea cual sea la conclusión a la que hemos llegado Jorge y yo, que en este caso no importa, sales por la puerta teniendo la sensación de que trabajas desconectado de los que te rodean y con menos espíritu crítico del que debieras. Hoy me he reafirmado en que una conversación de apenas 10 minutos con alguien realmente interesante, y que probablemente se encuentre a menos de 3 minutos de ti, puede aportarte mucha más visión e ideas de lo que te imaginas. </p>
<p>Ya tengo propósito para los próximos meses :)
</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2008/09/08/trabajar-con-conexion#comentarios
</comments>
</item>
<item>
<title>Vago-receta: validado masivo de tu html</title>
<link>http://mamuso.net/post/2008/09/07/vago-receta-validado-masivo-tu-html</link>
<pubDate>2008-09-07T18:50:52+00:00</pubDate>
<content:encoded><![CDATA[<h3>Composición:</h3>
<p>Esta vago-receta necesita de un poquito de preparación. Debemos de instalar la gema <a href="http://code.dunae.ca/w3c_validators/">w3c_validators</a>. Una vez hecho eso necesitaremos copiar este cachito de código en un archivo Rakefile en la raiz de donde tengamos nuestras maquetas. Si ya tenemos un Rakefile sólo añadiremos la tarea:</p>
<pre name="code" class="ruby"> # # Massive html validation task #  # This rake task comes from the nanoc validation task (http://gist.github.com/8961) # Copy this Rakefile to the root of your htmls or add the task to your existing Rakefile  # and run: #  #   rake validate #  # and that's all :)  task :validate do    require 'w3c_validators'   include W3CValidators    desc "W3C validation of all the files of the current folder"   task :validate do     validate '.html'     # add validate '.theextensionofyourhtml' to extend this task   end     private      # Colorize your output :)    def colorize(text, color_code); "#{color_code}#{text}\e[0m"; end   def red(text); colorize(text, "\e[31m"); end   def green(text); colorize(text, "\e[32m"); end    # Validation calling to the w3c_validators methods   def validate ext     @validator = (ext == ".css" ? CSSValidator.new : MarkupValidator.new )      files(".", true, ext).each do |file|       results = @validator.validate_file(file)       if results.errors.length > 0           results.errors.each do |err|             puts "** #{file} => #{red(err)}"           end         else           puts "** #{file} => #{green('Valid!')}"         end     end    end      # Stoled from nanoc :) (but with a lot of love)   def files(dir, recursively, ext = '')     glob = File.join([dir] + (recursively ? [ "**", "*#{ext}" ] : [ "*#{ext}" ]))     Dir[glob].reject { |f| File.directory?(f) or f =~ /(~|\.orig|\.rej|\.bak)$/ }   end end   </pre>
<p>La última versión y correcciones estarán siempre <a href="http://gist.github.com/9281">en este gist</a>. </p>
<p>Si la extensión de los archivos a validar no es .html, no dude en variar la línea de la tarea donde se especifica la extensión o añada tantas líneas como sea necesario (esssto hay que mejorarlo)</p>
<p>Esta vago-receta no usa nanoc ni nada por el estilo. La podemos usar en cualquier carpeta llena de archivitos html.</p>
<h3>Indicaciones:</h3>
<p>Se indica su uso especialmente en todos aquellos casos en el que necesitemos validar el código y tengamos más de 3 htmls :)</p>
<p>Especialmente recomendable cuando más de un zángano guarrea sobre el código.</p>
<h3>Posología:</h3>
<p>Vaya hasta la carpeta raiz de su proyecto en un terminal y escriba <em>rake validate</em> tantas veces como sea deseable y usted obtendrá un ouput coloreadito super majo.</p>
<p>Cada validación tarda casi nada, pero cuando hay un buen puñado de htmls necesitamos un poquito de paciencia. Aunque bien mirado siempre es mejor que ir uno por uno.</p>
<h3>Contraindicaciones y sobredosis:</h3>
<p>Validar constantemente puede convertirte en un pequeño psicópata, úsalo con mesura ;)</p>
<h3>Otras presentaciones:</h3>
<p>Añadiendo en la tarea un <strong>validate ".css"</strong> conseguimos validar nuestros estilos. Funciona pero en hojas de estilo enormes saca cositas un poco raras.
</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2008/09/07/vago-receta-validado-masivo-tu-html#comentarios
</comments>
</item>
<item>
<title>El día a día con nanoc</title>
<link>http://mamuso.net/post/2008/09/06/dia-dia-con-nanoc</link>
<pubDate>2008-09-06T02:32:41+00:00</pubDate>
<content:encoded><![CDATA[<p>Hace bastante tiempo intentamos usar <a href="http://nanoc.stoneship.org/">nanoc</a> para maquetar proyectos más o menos grandes. Era una versión muy decente, pero que necesitaba madurar. Al mismo tiempo exploramos algún otro mini framework similar como <a href="http://staticmatic.rubyforge.org/">staticmatic</a>, pero estaba todavía menos cocido.</p>
<p>Desde la versión 2 de nanoc el framework se ha convertido en algo bastante sólido, pero además es open souce, es extensible, el código está documentadísimo y su uso también. Si hace mucho que lo probaste tal vez deberías darle una segunda oportunidad.</p>
<h3>Vaaale</h3>
<p>Está claro, hay métodos más sencillos de hacer html, y que requieren menos conocimientos técnicos, quién no se acuerda de <a href="http://www.adobe.com/products/homesite/">home site</a>. </p>
<p>Tampoco hace falta ser ingeniero aeronáutico para manejar esto. Con tener <a href="http://www.ruby-lang.org/es/">ruby</a> y <a href="http://docs.rubygems.org/">rubygems</a> es suficiente para instalarlo y comenzar a trabajar, y hasta ahí llegamos todos.</p>
<h3>"Envíeme las maquetas a..."</h3>
<p>El clásico include de php nos permite reutilizar gran parte de nuestro código, incluso introducir lógica en nuestra maquetación, nada nuevo. Pero si el sistema nos obliga a tener configurado un host o no funciona si no es bajo un servidor con unas características determinadas (más o menos comunes, eso da igual) sólo nos sirve a nosotros y a nuestro entorno de trabajo cercano. </p>
<p>Con nanoc tenemos las mismas ventajas pero su output es siempre html independiente del framework, de manera que podemos enviar el directorio de salida a cualquiera y lo podrá ver sin obligarle a configurarse nada, como en los viejos tiempos :)</p>
<h3>Si son 4 comandos!</h3>
<p>Tanto <a href="http://www.kekoponte.com/?p=36">keko</a> como <a href="http://www.josedelcorral.es/2008/08/26/nanoc-o-como-hacerte-la-vida-mas-facil/">Jose</a> han hablado ya de las maravillas del <a href="http://nanoc2.jottit.com/">tutorial de nanoc2</a> que escribe y actualiza el gran <a href="http://sofanaranja.com">Ale</a> y que nació del <a href="http://sofanaranja.com/2007/09/18/documentacion-del-taller-de-maquetacion-agil-disponible-online/">tallercito de maquetación ágil</a> que vivimos hace ya casi un año.</p>
<p>No te voy a contar nada que no puedas ver en el tutorial de Ale o en la <a href="http://nanoc.stoneship.org/help/">documentación oficial</a>, de hecho sólo estoy rascando la superficie un poquito.</p>
<ul>
<li><strong>nanoc create_site nombredelsite</strong> para crear un proyecto nuevo. Tienes muchísimas posibles combinaciones, pero los valores por defecto nos permiten trabajar estupendamente.</li>
<li><strong>nanoc create_layout nombredellayout</strong>. Hay un layout por defecto con el que puedes trabajar. Aquí el concepto de layout es también el de partial. Puedes incluir un layout que contenga, por ejemplo, la cabecera de nuestro site en el layout por defeto llamándolo <em>&lt;%= render 'cabecera' %&gt;</em>.</li>
<li><strong>nanoc create_page nombredelapagina</strong> para crear las páginas. Cada página tiene un yaml en el que le podemos definir filtros, variables a usar...</li>
<li><strong>nanoc compile</strong> hace lo necesario para juntar layout, páginas, lógica, etc... y meterlo en la carpeta de salida que hayamos definido.</li>
</ul>
<p>Para no tener que estar compilando el proyecto a cada cambio (sí, yo también soy de los que cambia dos divs y tiene que recargar la página) existe el comando <strong>nanoc autocompile</strong>, que nos lanza un servidor, por defecto en el puerto 3000, y cada vez que entramos a <em>http://0.0.0.0:3000/nombredelapagina</em> recompila esa página. Este comando no funciona bien en windows al menos en esta versión, puedes ver el html generado, pero muestra las imágenes como corruptas. </p>
<p>Vamos, que son 4 comandos! A cambio tenemos un proyecto mucho más sostenible y hemos reducido al mínimo el impacto de los cambios sobre la maqueta. </p>
<p>Hay varios comandos más, pero con estos ya podrías crearte un site majísimo. ¿Merecería la pena construir una aplicación de ejemplo complejita por entregas?</p>
<h3>Big, bigger, biggest</h3>
<p>Lo mejor de todo es que podemos dejar nanoc como está e ir extendiendo nuestra aplicación. Lo podemos hacer a base de plugins, que son archivos .rb situados en el directorio lib o bien con rake tasks, en el directorio tasks.</p>
<p>Así que el límite está en tu imaginación, en tu dominio de ruby y tu experiencia con <a href="http://railsenvy.com/2007/6/11/ruby-on-rails-rake-tutorial">rake</a>. </p>
<p>Por poner un ejemplo. Sería maravilloso que en un proyecto enorme, antes de entregar, tuviésemos una manera de validar de golpe todas las maquetas (y bola extra css).</p>
<p>Lo más fácil sería crear una tareita rake que analizase nuestro output por nosotros. Si copias este <a href="http://gist.github.com/8961">validate.rake (*)</a> en tu directorio tasks podrías ir a la raiz de tu proyecto y correr <em>rake validate</em>. En un momentito tooooodo validado :)</p>
<p><em>(*)</em> en el momento que escribo esto el gist de la tarea rake está fallando, así que puedes verlo <a href="http://nanoc2.jottit.com/08_currando_menos">aquí</a>.</p>
<p>Esta y otras tareas y plugins las trataremos de colgar (y mantener) en <a href="http://gist.github.com/thecocktail">nuestro gist</a>, por si encontráis alguna cosilla que os resulte útil.</p>
<p>Si todavía tienes dudas instálalo, trastea un poquito con cosas nada comprometidas y si no encuentras respuesta a tus dudas siempre puedes unirte a la <a href="http://groups.google.com/group/nanoc-es?hl=es">lista de nanoc en castellano</a>.
</p>
]]></content:encoded>
<comments>
http://mamuso.net/post/2008/09/06/dia-dia-con-nanoc#comentarios
</comments>
</item>
<item>
<title>Maquetar para desarrollo</title>
<link>http://mamuso.net/post/2008/08/25/maquetar-desarrollo</link>
<pubDate>2008-08-25T01:59:40+00:00</pubDate>
<content:encoded><![CDATA[<p>Desde hace meses he ido incorporando de manera bastante natural a mi rutina de maquetación pequeños detalles que ayudan a que el engranaje entre la maqueta y la implementación en un proyecto web sea un poquito más sencillo. La mayoría son obviedades, sentido común fácil de incorporar a nuestro día a día.</p>
<p>Muchos de estos "vicios" los heredé de <a href="http://www.furilo.com/">Álvaro</a> y <a href="http://limalimon.com.es/">María</a> y otros los he ido incorporando a base de trabajo y de integrar html en desarrollo, pero sobre todo a base de equivocarme mucho, que también es necesario.</p>
<p>Esto es lo que a mi me funciona, es más que probable que no descubras nada nuevo:</p>
<h3>Comentar y tabular:</h3>
<p>Un código bien tabulado siempre es más legible independientemente del lenguaje que estemos escribiendo. Si la maquetación se hace en equipo siempre está bien llegar a un acuerdo sobre el tipo de tabulación que se va a usar. Yo me encuentro cómodo con 4 espacios, pero es cuestión de gustos.</p>
<p>Es muy útil marcar con un comentario el final de los divs principales para siempre tener localizado dónde se cierra.</p>
<p><code>
<pre>      &lt;div id="content"&gt;          ...      &lt;/div&gt;&lt;!-- #content --&gt; </pre>
<p> </code></p>
<p>Tampoco está de más marcar con un comentario el comienzo y fin de bloques específicos, por ejemplo: &lt;!-- ultimos comentarios --&gt; o &lt;!-- listado de profesores --&gt;</p>
<p>Es la manera más fácil de no volvernos locos al abrir nuestro trabajo cuando ya no lo tengamos fresco.</p>
<h3>Primero el marcado, después el estilo:</h3>
<p>No hablo de escribirte todo el html de la página que vayas a maquetar, pero es muy fácil identificar los bloques que van a funcionar como unidad.</p>
<p>Pon el esfuerzo en escribir un html limpio y semántico en lugar de ir saltando entre la hoja de estilo y el html desde el principio. A mi esto me da muy buen resultado, pero hay quien prefiere ver una evolución más gradual mientras trabaja.</p>
<h3>Mantén limpio tu html y hereda:</h3>
<p>Todos hemos pasado una fase de 'classitis' :) Un uso correcto de la herencia nos evita este problema. Al integrar el html la mayoría de los desarrolladores son cuidadosos, pero un código limpio les facilita bastante las cosas, reduce el margen de error y es más sostenible. </p>
<p>Un ejemplo podría ser este: </p>
<p><code>
<pre>  	&lt;ul id=&quot;menu&quot;&gt; 	   &lt;li&gt;&lt;a href=&quot;#&quot;&gt;01&lt;/a&gt;&lt;/li&gt; 	   &lt;li class=&quot;active&quot;&gt;&lt;a href=&quot;#&quot;&gt;02&lt;/a&gt;&lt;/li&gt; 	   &lt;li&gt;&lt;a href=&quot;#&quot;&gt;03&lt;/a&gt;&lt;/li&gt; 	   &lt;li&gt;&lt;a href=&quot;#&quot;&gt;04&lt;/a&gt;&lt;/li&gt; 	   &lt;li&gt;&lt;a href=&quot;#&quot;&gt;05&lt;/a&gt;&lt;/li&gt; 	&lt;/ul&gt; </pre>
<p></code></p>
<p>Marcando la clase en el li en lugar de en el enlace podemos actuar sobre dos elementos para componer nuestro estilo 'active'.</p>
<h3>Menos no siempre es más:</h3>
<p>Se que mucha gente está a favor de poner únicamente el html necesario, ni más ni menos. Yo estoy totalmente de acuerdo siempre y cuando sepamos a ciencia cierta que un cambio en una estructura del html dentro de unos meses no va a generarnos más dolores de cabeza de los necesarios. </p>
<p>Con toda la cautela del mundo, a veces un div de más rodeando un bloque de contenido nos da el juego suficiente para cosas tan básicas como ajustar detalles entre distintos navegadores. Siempre es más fácil añadir un poquito más de CSS que destripar una aplicación en producción.</p>
<p>Aclaro que no hablo más que de <em>un poquito</em>, un elemento para ajustar padding, para dar un sobrefondo en un momento determinado, etc, no estoy justificando un chorro de <em>sobre-html</em> que se pega con la filosofía de mantener el código lo más limpio posible.</p>
<h3>Establece algún criterio de calidad:</h3>
<p>En todas las fases de un proyecto deberían de haber reglas de control que nos ayudasen a asegurar que nuestro trabajo sea lo suficientemente bueno. El criterio de calidad más usual en el caso de la maquetación es el de validar tanto html como CSS.</p>
<p>Que un código valide no significa que esté bien, pero sí que no se nos ha olvidado cerrar ninguna etiqueta.</p>
<p>Esto nos lleva a otro criterio más, que es probar nuestro trabajo en los navegadores que exija la ruta del proyecto, que por lo general suelen ser 4 - 5.</p>
<p>Yo además, siempre que es posible paso trozos complicados de código a compañeros de trabajo o de fatigas para tener siempre una segunda opinion, que normalmente no es objetiva, pero que nos aporta un punto crítico.</p>
<h3>Usa convenciones:</h3>
<p>Usar patrones en esquemas básicos que se repiten a lo largo de todo un site nos facilita el trabajo a nosotros y a los integradores. </p>
<p>El ejemplo más fácil de explicar sería el de marcar el elemento activo en un menú. Normalmente tenemos una navegación principal y una secundaria al menos. Pues podríamos convenir que los menús siempre son listas, y que el elemento activo se va a marcar en el li con una clase 'active'.</p>
<h3>Minimiza el impacto de los cambios:</h3>
<p>Quiérete a ti y a los que te rodean y utiliza todos los medios que tienes a tu alcance para no perder ni tu código ni tu tiempo. </p>
<p>Mete todo tu código en un control de versiones. Da igual el que sea, el que más fácil te resulte o el que menos infraestructura vaya a requerir. Los más famositos son subversion, csv y últimamente está muy e moda git. Dedicale un ratito a aprender los 4 comandos básicos y nunca vuelvas a perder un solo archivo.</p>
<p>Utiliza herramientas que te ayuden a hacer el trabajo mecánico. Todos hemos recibido un cambio en la cabecera en un proyecto en el que ya hay 50 maquetas ya hechas :) Si hacemos un reemplazo masivo corremos el riesgo de cambiar lo que no debemos. Si hacemos el cambio en una sola maqueta y avisamos de dónde está el cambio vía mail / viva voz / paloma mensajera corremos el riesgo totalmente innecesario de que el que finalmente va a trabajar con las maquetas no reciba el recado.</p>
<p>Cualquier método que nos permita trabajar con el concepto de 'include' nos puede valer, pero los más útiles son los que generan html estático. Una buena solución si no le tienes miedo a programar un poquito sería <a href="http://nanoc.stoneship.org/">nanoc</a>, que además está <a href="http://www.kekoponte.com/?p=36">bastante documentado</a>. </p>
<h3>Intercambia conocimientos:</h3>
<p>Habla con la gente que trabaja contigo, intercambia opiniones, trata de conocer sus problemas a la hora de afrontar lo que tú les vas a enviar porque es la mejor manera de que todo salga bien.</p>
<p>Discute con otra gente tus métodos. Hace unos días tuvimos una pequeña reunión varios compañeros para poner en común formas de trabajar y surgieron temas interesantísimos que no salen de ninguna otra manera.</p>
<p>Todos los puntos anteriores son matizables, incluso algunos totalmente prescindibles, pero son un buen comienzo :)
</p>
</p></p>]]></content:encoded>
<comments>
http://mamuso.net/post/2008/08/25/maquetar-desarrollo#comentarios
</comments>
</item>
 
</channel>
</rss>
