Categoría: web
Tag me baby
Aquí el posteador tardío :)
Algunos de los sospechosos habituales, lease Álvaro Ortiz, Fernando Blat, Keko y un servidor, hicimos equipo para el pasado Rails Rumble y por fin llevamos a cabo Tagueame.

El concepto es fácil, taguear personas :) Como este es un post que viene del pasado ya lo han explicado mis compañeros estupendamente aquí, aquí o aquí. 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.
Además, que yo tenga controlado, hay dos equipos más de rails hispano: ostraka y cahiers.
Quedaron listas para calificación 130 aplicaciones y todavía hoy se puede votar con un sistema aleatorio bastante curioso.
Trabajar con conexión
Hoy he tenido un fin de jornada de los que renuevan las ganas de trabajar. Discutía con Jorge sobre técnicas de maquetación, sus aplicaciones y lo poco que sabemos de muchas cosas.
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.
La fiebre de los 'layouts crecientes' volvió a salir a la luz hace poquito, cuando Huge Inc. lanzó el rediseño de la web de ikea . Todo el mundo coincidió en el trabajazo que habían hecho con el layout, que crece a la perfección.
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.
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.
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.
Ya tengo propósito para los próximos meses :)
Composición:
Esta vago-receta necesita de un poquito de preparación. Debemos de instalar la gema w3c_validators. 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:
# # 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
La última versión y correcciones estarán siempre en este gist.
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)
Esta vago-receta no usa nanoc ni nada por el estilo. La podemos usar en cualquier carpeta llena de archivitos html.
Indicaciones:
Se indica su uso especialmente en todos aquellos casos en el que necesitemos validar el código y tengamos más de 3 htmls :)
Especialmente recomendable cuando más de un zángano guarrea sobre el código.
Posología:
Vaya hasta la carpeta raiz de su proyecto en un terminal y escriba rake validate tantas veces como sea deseable y usted obtendrá un ouput coloreadito super majo.
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.
Contraindicaciones y sobredosis:
Validar constantemente puede convertirte en un pequeño psicópata, úsalo con mesura ;)
Otras presentaciones:
Añadiendo en la tarea un validate ".css" conseguimos validar nuestros estilos. Funciona pero en hojas de estilo enormes saca cositas un poco raras.
Maquetar para desarrollo
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.
Muchos de estos "vicios" los heredé de Álvaro y Marí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.
Esto es lo que a mi me funciona, es más que probable que no descubras nada nuevo:
Comentar y tabular:
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.
Es muy útil marcar con un comentario el final de los divs principales para siempre tener localizado dónde se cierra.
<div id="content">
...
</div><!-- #content -->
Tampoco está de más marcar con un comentario el comienzo y fin de bloques específicos, por ejemplo: <!-- ultimos comentarios --> o <!-- listado de profesores -->
Es la manera más fácil de no volvernos locos al abrir nuestro trabajo cuando ya no lo tengamos fresco.
Primero el marcado, después el estilo:
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.
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.
Mantén limpio tu html y hereda:
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.
Un ejemplo podría ser este:
<ul id="menu">
<li><a href="#">01</a></li>
<li class="active"><a href="#">02</a></li>
<li><a href="#">03</a></li>
<li><a href="#">04</a></li>
<li><a href="#">05</a></li>
</ul>
Marcando la clase en el li en lugar de en el enlace podemos actuar sobre dos elementos para componer nuestro estilo 'active'.
Menos no siempre es más:
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.
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.
Aclaro que no hablo más que de un poquito, un elemento para ajustar padding, para dar un sobrefondo en un momento determinado, etc, no estoy justificando un chorro de sobre-html que se pega con la filosofía de mantener el código lo más limpio posible.
Establece algún criterio de calidad:
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.
Que un código valide no significa que esté bien, pero sí que no se nos ha olvidado cerrar ninguna etiqueta.
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.
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.
Usa convenciones:
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.
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'.
Minimiza el impacto de los cambios:
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.
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.
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.
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 nanoc, que además está bastante documentado.
Intercambia conocimientos:
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.
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.
Todos los puntos anteriores son matizables, incluso algunos totalmente prescindibles, pero son un buen comienzo :)
de viaje con iwannagothere.net
Esta semana hemos abierto al público iwannagothere.net. Es un servicio pensando para viajeros desde el punto de vista activo y pasivo. Puedes compartir tus lugares y consejos sacados de tu experiencia viajera, o bien generar tu ruta a partir del contenido que ya hayan dado de alta otros viajeros.
La idea partió de María, y ella os explica mejor que yo de dónde ha surgido la idea y cómo nos hemos metido en este lío. Es el primer desarrollo grande fuera de the cocktail que hago con ella y ha sido tremendamente enriquecedor.
En la parte de desarrollo el que ha partido la pana ha sido Blat. Cualquier cosa que diga sobre él se queda corta.
En estos proyectos personales donde se barajan ilusiones pero no dinero es imprescindible poder ser totalmente transparente con tus compañeros para que puedan saltar de 'servilletas en los bares' a realidades más o menos ambiciosas.
Lo que sabemos: El proyecto se nos ha ido haciendo muy grande durante el proceso de creación. De hecho ha sido largo y con miles de pequeñas batallas sobre cómo hacer esto o aquello.
Finalmente, sabiendo que no está todo hilado y que tenemos casi tanto camino por recorrer como el que ya hemos recorrido, hemos sacado una beta. Somos conscientes de que tiene miles de carencias a todos los niveles, pero es la única manera de empezar en este tipo de proyectos. Además las críticas del entorno, de la gente que escribe sobre el proyecto y de la que escribe en el proyecto son muy útiles unas veces para descubrir dónde te has equivocado y otras para confirmar lo que ya sabías.
Esto significa que durante los próximos meses iwanna se irá transformando y mejorando para hacer la experiencia de uso mucho más agradable.
Lo que nos gustaría: Puestos a mirar alto nos gustaría llegar a ser una guía de viajes completa, muy completa.
El componente social se convierte en algo importante, pero tal vez no apto para los colonizadores de amigos en redes sociales. En iwanna no tiene sentido entrar, añadir y esperar. Para que la aplicación empiece a ser útil y se puedan crear rutas interesantes un buen puñado de usuarios tiene que haber contribuido con información.
Postear no es fácil si se busca aquella información que te hubiese gustado encontrarte en una guía, con toda la carga subjetiva que eso supone.
Sólo tras unos meses de rodaje y mucho trabajo sabremos si funciona o sólo ha sido una bonita experiencia.
A título totalmente personal. Sé que tenemos muchos puntos tangentes con otros proyectos y que las comparaciones son inevitables. Hemos querido construir por encima de todo una guía de viajes colaborativa, no un directorio de empresas, no un lugar donde la gente cuente sus viajes como una experiencia global. Nuestra primera tarea es resaltar nuestras diferencias y eso nos va a ayudar a evolucionar como servicio.
Esperamos veros por nuestra iwanna :)
Hola de nuevo! Vuelvo a la carga tras mi temporada de barbecho digital bloguero en la que he hecho en the cocktail cosas tan divertidas y bonitas como la web de mtv españa. Qué voy a decir yo que no haya dicho álvaro.
Ahora a divertirme. Jugando con la api de youtube vemos que podemos conseguir lo básico para poder tirar de su información con nuestra aplicación. Tenemos una gema que nos hace la vida más fácil.
Lo único que no nos devuelve la api de youtube directamente es la url del flv que va a cargar su player. No es que nos valga para muchas cosas, pero en casos concretos nos puede interesar (nah, nada de detalles).
Pongamos el caso de la url este video. La anatomía de la url (http://www.youtube.com/watch?v=0xaX7ZfX054) nos da la id del video, y incluso sin tirar de la gema sabremos que la url del player es http://www.youtube.com/v/0xaX7ZfX054.
La url directa al flv no es tan intuitiva de construir.
http://www.youtube.com/get_video.php?video_id=la sabemos&t=token de youtube a averiguar
Así que con un poquito de ruby (y definiendo un método string.to_hash):
require 'open-uri'
class String
def to_hash(seperation='&', assignment='=')
hash = Hash.new
self.split(seperation).each do |elemement|
pieces = elemement.split(assignment)
hash[pieces[0]] = pieces[1]
end
hash.delete_if { |key, value| value.nil? }
end
end
def get_flv(url)
getparams = nil
open(url) {|f|
getparams = f.base_uri.request_uri.split("?")[1]
}
unless getparams.nil?
parameters = getparams.to_hash()
url = "http://www.youtube.com/get_video.php?video_id=#{parameters['video_id']}&t=#{parameters['t']}"
end
return url
end
Así con una simple llamada a get_flv('http://www.youtube.com/v/0xaX7ZfX054') nos devolverá la url al flv.
A disfrutar!
Jugando con Hpricot
Si te gusta jugar con rails y nunca has probado hpricot (del siempre genial y bizarro whytheluckystiff) te lo recomiendo. En mi caso lo había probado un par de veces, pero para funciones muy básicas.
En este caso vamos a jugar con la opción que tiene para 'arreglar' inputs de html que vengan un poco escacharraillos ¿quién no se ha dejado un div sin cerrar? Pues esta gema nos va a ayudar a dejar el código limpito de verdad.
No descubro nada que no esté en la documentación, pero es que me ha parecido genial.
Cojamos el código a parsear, bien desde un archivo:
doc = Hpricot(open("tudocumento.html"))
Bien desde una variable:
doc = Hpricot(param[:mivariable])
Tenemos dos opciones. No toques mi código, sólo cierra lo que esté abierto:
doc = Hpricot(mivariable_o_documento) { |f| Hpricot f, :fixup_tags => true }
O bien cierra todo lo que esté abierto, y además convierte mi código en xhtml estricto:
doc = Hpricot(mivariable_o_documento) { |f| Hpricot f, :xhtml_strict => true }
Problemas, los hay. Cuando te enfrentas a un código (pegado desde word, por ejemplo) con 300 niveles de anidación no es capaz de decir más que 'too much stack levels'. Evidentemente no es el ejemplo más común, para código normal hecho por gente normal y con unos niveles de errores incluso algo bestia funciona.
Me queda comprobar cuánto consume realmente. Es mucho más ligero que otros parsers de html para rails, pero cuando da el 'stack levels' se come tu máquina y la del vecino. Imagino que se podrá controlar pero todavía no se como.
Ahora, para trabajos sencillo es ideal.
El 11870 y technorati
Cielos, el 11870 el número 1 en la búsquedas de technorati.
Ni Britney Spears rapada, ni youtube, ni myspace ni narices.

De verdad que me alegro mucho de que el proyecto esté funcionando
tan bien hasta ahora en estos poquitos días que lleva en funcionamiento.
Enhorabuena!!
-
Buscar
-
Sobre mamuso.net
mamuso.net
madrid, España
mamuso
ver perfil »
contacto »No somos nadie... y menos en bañador
(anteriormente 'haciendo el tonto un rato') -
Últimos comentarios
- Logos de consumo2.0 4 comentarios
EL TIO DE MI HERMANA KE NO ES TU PAPA PERO SI ES TU TIO KE ES ESPOSO DE MI ABUELA Y EL HIJO ES MI NIETO, ed, devain, [...] - Google Website Optimizer (on Rails) 2 comentarios
layuko, Jose - Vago-receta: validado masivo de tu html 1 comentario
Jose Galisteo - Otro blog... pero de muñequitos 2 comentarios
compartir piso, Egon Spengler - Acts_as_unvlogable: un plugin para manejarlos a todos :) 11 comentarios
QuarK, NIco Orellana, mamuso , [...] - Rmagick: imágenes a escala de grises 2 comentarios
Gustavo, Gustavo - Sobre escribir en un blog en castellano o hacerlo en inglés 6 comentarios
kathy spare, maura, mamuso, [...] - Trabajar con conexión 7 comentarios
marisa, pumpkin, Gonzalo, [...] - Attachment_fu, RMagick y cintas de video 1 comentario
Alfredo Solano - El día a día con nanoc 1 comentario
pumpkin
- Logos de consumo2.0 4 comentarios
-
Mis tags
-
Categorías
- ajax (1)
- blogs (5)
- código (24)
- diseño (4)
- el mundo es un pañuelo (11)
- flash (3)
- herramientas (20)
- mamuso (42)
- Ruby on Rails (63)
- tendencias (4)
- toys (2)
- vagorecetas (2)
- web (45)
-
Enlaces
-
Amigos
- Apuntes prestados
- Síndrome de ansiedad por separación
- The mixer
- Marylink
- (*_*) lau............blog
- Tentempié
- Macadamia
- El rincón de anita...
- Observando, que es gerundio...
- /dev/null
- Jcorrea
- Sugerencia de presentación
- Completamente fuera de lugar
- ├♦ hipersalomas garitas ♦┤sergio e. malfé.
- Insights blog
- Furilo mini
- In web we trust
- Trampantojo
- The refuseniks ha vuelto
- Pocoyó y sus amigos.
- Mamusina
- Killermuffin
- Milancico
- Blat
- White russian
- Una canción al día
- Sorprendete
- Carlival
- Lo que hay bajo las piedras
- Ideas fijas
- Looking for a sign
- Dummy on rails
- Cientifico.net
- Cantorrodista
- Coctaitor
- Cóctel de yogur
- ver la coctelera de mamuso
-
Secciones

