Seguimos con truquitos de shell para desarrolladores, en este caso de Ruby. Os estoy enseñando mi ~/.bash_profile por fascículos
En este caso se trata de estar en concidiones de acudir al viejo aforismo "si todo lo demás falla, consulta el manual", en nuestro caso con las gemas de ruby que tengamos instaladas y que, mejor o peor, suelen venir documentadas.
No sé si conocéis el comando gem server (deberíais). Levanta un servidor web (creo que es un Webrick) en el puerto 8808 de nuestra máquina, apuntando directamente a la documentación de las gemas. Nos bastará apuntar nuestro navegador favorito a http://localhost:8808/, buscar la gema en cuestión, y ponernos a leer.
Pero se puede hacer más cómodo aún, metiendo esto en nuestro ~/.bash_profile:
export GEMDIR=`gem env gemdir` gemdoc() { open $GEMDIR/doc/`$(which ls) $GEMDIR/doc | grep $1 | sort | tail -1`/rdoc/index.html } _gemdocomplete() { COMPREPLY=($(compgen -W '$(`which ls` $GEMDIR/doc)' -- ${COMP_WORDS[COMP_CWORD]})) return 0 } complete -o default -o nospace -F _gemdocomplete gemdocLa segunda función y la última línea son para dar autocompletado al comando, lo cual lo hace aún más atractivo para vagos. Por cierto, yo nunca le había metido mano al autocompletado en bash y tiene pinta de ser bastante simple la cosa, si investigo algo más ya os contaré.
El caso es que con la función gemdoc tendremos acceso directamente a la documentación de una gema concreta (en vez de al índice), sin necesidad de levantar el servidor (accede directamente al sistema de archivos), y además con autocompletado:
(Sacado de aquí).
Nota: según el sistema operativo, quizás necesites cambiar alguna cosa del script (en particular, puede que tengas que cambiar la llamada a open por una llamada a tu navegador favorito). Esto funciona tal cual en MacOSX.
Uno de los errores más comunes cuando llevas poco tiempo usando git (o llevas un poco más pero eres un tolai como yo) es confundirte de rama: estar en una de desarrollo pensando que estás en la master, o viceversa, y liarla parda con cualquier comando. Este truquito te permite saber en todo momento cuál es la rama seleccionada.
Añade esto en tu ~/.bash_profile:
git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /' } export PS1="\u@\h:\w \$(git_branch)$ "Bueno, en la parte de \u@\h:\w pon lo que quieras o lo que tuvieras antes, eso es lo que me gusta tener a mí (usuario@máquina:directorio). Con este truquito, si estás en un directorio que es una copia de trabajo de git, el prompt te mostrará entre paréntesis la rama en la que estás:
¿A que mola? (por cierto, lo he cogido, con una mínima modificación, de aquí)
.
Anda que no hemos sufrido... pero tal y como ha jugado España esta Eurocopa, cualquier cosa que no hubiera sido la copa hubiera sido a todas luces injusto. Ha sido un lujazo verles jugar.
Para los que amamos el fútbol (y nos toca la polla que sea considerado paleto por gente normalmente bastante paleta ella misma), una gran noticia y un gran motivo de emoción. Otro trocito de felicidad para la saca
Ya sé que ese tipo de titulares suelen ser más del tipo "Poorra.com en Menéame", "Poorra.com en El País", "Poorra.com en Wired", "Poorra.com en el telediario de Antena 3" o "Poorra.com en Aquí Hay Tomate", pero me hace mogollón de ilusión que la Poorra aparezca en este clasicazo de la blogosfera española. Recibir alabanzas de alguien a quien admiras es siempre guay
Contestando a las cositas que dice Juan:
Muchas gracias Juan, y suerte esta noche, que estás ahí arriba, jodío!
Es un patrón bastante común, querer obtener uno (o más) objetos aleatorios de una tabla (modelo en Rails). Ayer mismo lo estuvimos hablando con Jaime en Twitter.
El primer impulso:
item = Model.find(:first, :order => "RAND()")Y funcionar funciona, pero a nada que la tabla sea un poco grande, estás crujiendo la base de datos, básicamente porque cualquier consulta con ORDER BY que no pueda usar un índice (y obviamente esta no puede) lo hace. Le obligas a ordenar toda la tabla (en La Coctelera hay tablas con más de dos millones de filas) para darte una sola fila.
Este truquito lo recuerdo de mis tiempos PHPeros: miras el número de filas (n), generas un número aleatorio entre 0 y n-1, y usas ese offset para hacer una consulta sin ORDER BY (a.k.a. muy rápida) y con ese OFFSET. En Rails:
n = Model.count o = rand(n - 1) item = Model.find(:first, :limit => 1, :offset => o)Si quieres más de uno, pues repetir. Muchos tienen que ser para que te salga más caro hacerlo así que con el RAND().
Como es un patrón relativamente común y es un poco feo andar haciendo esas cosas en los controladores, en un ratito que tuve ayer hice un mini-plugin para hacer este tipo de consultas (la verdad es que es tan mínimo que más que para un plugin daba para un pastie y gracias, pero los pasties no se testean y yo sin Caseratests no como ). Y nada, aquí está.
El último par de semanas he estado a tope (es un decir) con un proyectito que desde ya está en beta-para-amigotes y que puede que algún día llegue a ver la luz pública y todo. En making of Poorra.com Alberto cuenta de qué va todo, cómo hemos trabajado, y lo bien que nos lo hemos pasado, y nos lo estamos pasando.
Como mínimo ha servido para que varias personas (confirmado por ellas) que en general pasan del fútbol le cojan el puntillo; y para que mis excusas para no bloguear ni el huevo hayan subido bastante de nivel .
Alberto ha hecho una fichilla técnica de la parte del front, así que a mí me tocaría hacerla de la parte técnica y de aplicación. Mejor lo dejamos para otro día , pero vamos, ya os podéis imaginar que Ruby on Rails a tope. He dicho que ha sido divertido.