Cosas que le pasan a un desarrollador web profesional
Cosas que le pasan a un desarrollador web profesional
Las reacciones ante un unfollow en Twitter suelen ser diversas, desde la acción recíproca inmediata (cosa que no logro entender ¿has dejado de ver el telediario porque el presentador no se dirija a ti en persona? pues eso…) hasta la más absoluta indeferencia. A mi más bien me mueve la curiosidad, saber si ha sido la posible reacción ante un tuit concreto, el perfil de la persona que deja de seguirme, etc…
Aquí os traigo un pequeño script que he hecho para enterarme de esto. Sé que hay por ahi muchos servicios que hacen lo mismo, los he probado y todos me han parecido una chusta, publicidad, desfase en la notificación y en general nada que cumpla bien algo tan simple como esto. Por eso he acabado tirando unas líneas de código para tenerlo en mi propio servidor y hacer exáctamente lo que espero, que es muy sencillo: recibir un email cada vez que alguien deje de seguirme en Twitter. A continuación explico algunos detalles de esta mini aplicación que podéis descargar desde github.

Continuar leyendo – Script Caza Unfollowers de Twitter »
Atención al titulo, soy un hacha jugando con keywords para atraer a todo tipo de audiencia al blog… y no, no se ha muerto Apache y los módulos se pelean por la pasta… en fin, al turrón. Pongamos que tenemos una web http://www.pepe.com, que en el servidor corresponde al path /home/web/pepe, y un subdirectorio http://www.pepe.com/admin, cuya ruta es /home/web/pepe/admin.
En mi caso concreto pepe.com es un dominio antiguo, y quiero que toda referencia a él acabe en el nuevo, digamos paco.com. Para ello utilizo un htaccess que hace una redirección 301 a lo bruto:
# colocado en /home/web/pepe/.htaccess Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)$ http://www.paco.com [R=301,L]
Éste es mi problema concreto, pero por ejemplo es también muy común en frameworks y CMS hacer una redirección general de todas las peticiones a un único fichero. Vamos, que aquí lo importante es la reescritura general.
Ahora lo que quiero es proteger con contraseña el acceso a mi administración, por lo que utilizo otro htaccess con el contenido estándar para ésto:
# colocado en /home/web/pepe/admin/.htaccess AuthType Basic AuthUserFile /home/web/pepe/admin/.htpasswd AuthName "Acceso Administrador" Require valid-user
Y como no podía ser de otra forma el invento no funciona. Cuando intento acceder a http://www.pepe.com/admin me redirige a http://www.paco.com, luego el primer cambio es meter una excepción para que no aplique la regla de reescritura para la URL que nos interesa. Lo podemos hacer en el htaccess principal con una condición:
# colocado en /home/web/pepe/.htaccess Options +FollowSymlinks RewriteEngine on RewriteCond %{REQUEST_URI} !^/admin/?RewriteRule ^(.*)$ http://www.paco.com [R=301,L]
O si no necesitamos de ninguna reescritura en el directorio hijo podemos directamente desactivar el engine:
# colocado en /home/web/pepe/admin/.htaccess RewriteEngine offAuthType Basic AuthUserFile /home/web/pepe/admin/.htpasswd AuthName "Acceso Administrador" Require valid-user
Cojonudo, pero sigue haciendo la redirección. Primera comida de cabeza importante: comento todas las reglas de reescritura y sigue redirigiendo ¿? resulta que Firefox cachea las redirecciones (al menos las 301), así que ya puedes darle a F5 y estar correctas las reglas, que no te enterarás si no borras la caché del navegador, eso o utilizar Explorer (no lo he probado en el resto).
Descartado el navegador, ésto sigue sin rular. Utilizando el imprescindible HttpFox y Google descubro que la autenticación básica de Apache que queremos usar manda una cabecera 401 Unauthorized, que el navegador recibe y es cuando muestra el cuadro de usuario/contraseña. Segunda comida de cabeza importante: el servidor está buscando un mensaje de error personalizado para el 401 (en una directiva ErrorDocument), que no encuentra y por tanto lanza, adicionalmente, un 404. Y resulta que, no me preguntes por qué, este último error pasa por la reescritura general y es lo que está provocando la redirección. Acojonante. La solución es definir dicho ErrorDocument en nuestro htaccess:
# colocado en /home/web/pepe/.htaccess Options +FollowSymlinks RewriteEngine on RewriteCond %{REQUEST_URI} !^/admin/? RewriteRule ^(.*)$ http://www.paco.com [R=301,L] ErrorDocument 401 "Acceso restringido"
¡Aparece el cuadro para meter usuario/contraseña! joder, ha costado.
No me ha pasado, pero sí: yo salgo a la calle con el iPhone en el bolsillo ACOJONADO.
Antaño, cuando perdías un PC era poco menos que una hecatombe (y una especie de catarsis cuando lo asumías): fotos, música, documentos, toneladas de películas… hoy en día Internet lo ha cambiado todo, y al menos los hardcore users (a los que siempre asocio con el iPhone, al menos con el uso intenso del iPhone al que aquí me refiero) ya guardan gran parte de esa información en la nube.
Éste es uno de los ingredientes de la tragedia. El otro es la miniaturización del hardware y el poder llevar ahora un mini ordenador en el bolsillo, dispositivos que permiten acceder a la nube desde cualquier sitio.
En definitiva: cacharro + nube + pérdida/robo = El Horror
Y para ilustrar mi pavor, una captura de la pantalla principal de mi iPhone, así que el desgraciao que lo encontrara/robara tendría acceso a:

Bueno, creo que el concepto ha quedado claro. Y ésta es una página de 4 (y lo restauré hace poco…) de aplicaciones, telita!
Y sí, claro que tengo activo el bloqueo con código, pero sin saber ni papa de estas cosas, pondría la mano en el fuego a que hay alguna forma sencilla de saltarse esta protección… lo dicho, tal es el acojono que me estuve planteando pagar por una cuenta de MobileMe únicamente por el borrado a distancia, pero no, he optado por la opción gitaner: un móvil de los que darían con los cereales que no tenga ni WAP para llevar en determinadas salidas (principalmente cualquiera que implique noche). Mi iPhone es mucho iPhone.
También conocido como endless scrolling, endless pageless, paginación sin páginas, etc… es un patrón de interfaz de usuario del que se viene hablando desde hace unos años, aunque es últimamente cuando parece que lo veo implementado en cada vez más sitios.
El ejemplo por antonomasia es por supuesto el de Google Reader, pero hay muchos más: Facebook (fijaros que lo hace una vez cuando vas a mitad de página), Digg, Bing, Vimeo, Dropular….
Básicamente consiste en cargar más contenido dinámicamente conforme te acercas al final de la página, de forma que la navegación por el mismo no queda interrumpida en ningún momento. Viene a ser un sustitutivo de la paginación tradicional.
Luego comentaré los pros y contras que pienso tiene esta técnica. Antes contar cómo lo he implementado en mi tumblr, micro Usuario de Internet, algo que llevaba bastante tiempo queriendo hacer y que sin duda opino le va como anillo al dedo.

Aunque en principio tenía intención de remangarme, encontré un plugin, de-pagify, que lo implementa de forma muy flexible y aprovechando parte de la magia de jQuery. Utilizar un framework de javascript simplifica considerablemente la codificación del método, que de otra forma sería bastante más laboriosa, sobre todo el paso de procesar el contenido para pintarlo en pantalla.
En la página del plugin viene todo explicado muy claramente, sólo destacar dos cosas:
// Format url as "?page=1 div#wrapper div.post" var url = [next.attr('href'), options.container, options.filter].join(' ');
El método de ajax load, que es con el que nos vamos a traer el contenido de la siguiente página para pintarlo dinámicamente, permite especificar la URL con selectores separados por espacios, de manera que podemos controlar qué elementos, qué HTML al fin y al cabo, queremos que se cargue en la capa que eligamos. Ésto nos ahorra de una tacada tener que hacer alguna modificación en el código de la aplicación (se van a ir pidiendo por ajax sucesivas páginas como si la navegación fuera la clásica) y tener que procesar el HTML que recibimos (se pinta tal cual porque ya viene filtrado con el contenido, lo único que he tenido que modificar de la página es un poco la maquetación).
En definitiva, y en mi opinión:
PROS
CONTRAS

El temita de la internacionalización (i18n para los amigos) en una aplicación web puede dar para largo y tendido, yo voy a hablar aquí concretamente de la forma de guardar y utilizar las cadenas de texto del site en varios idiomas utilizando el framework de templates Smarty.
Hay muchas formas de hacerlo, se pueden encontrar varias alternativas en este post de best way to build a multi-language site with smarty, que empezó en el ¡2003! (el frenético ritmo que lleva la tecnología hace que no me crea nada que no sea de ayer…). Todas tienen sus ventajas e inconvenientes, y dado que no hay nada en el core de Smarty para ésto ni una solución popularmente aceptada como la estándar, cada uno debe analizar lo que necesita para su proyecto y tener unas preferencias subjetivas, que en mi caso son: