Cargar ítems antíguos de un feed RSS

Hace poco un amigo planteó la siguiente duda: “¿Cómo se puede consultar ítems antíguos en un feed RSS?”.

En principio la respuesta sería “No se puede”.

No se puede porque en el nivel más bajo un feed es simplemente una porción de software que escupe código XML (como este muy simple: RSS Generator) y en general no se incluye ningún tipo de parámetros de consulta, pues no hay un estándar que lo requiera.

Sin embargo, en Google Reader uno puede hacer scroll hacia abajo y al pasar el último ítem vemos como se cargan unos cuantos más debajo de éste, y si seguimos se puede ver como se cargan más, y así. ¿Cómo hace para conocer posts anteriores?

La respuesta es sencilla: Google sabe todo. Bueno, no todo, pero sabe mucho. Otro que sabe mucho es Stackoverflow, donde encontramos la explicación más factible: Google tiene cada ítem indexado, cuando uno solicita más, simplemente trae lo que tiene en el archivo. Es por eso que el scroll parece infinito, pero solo va hasta el primer ítem que indexó.

Una posible manera de obtener ítems antíguos entonces es utilizando Google Reader, formando una URL de este tipo: http://www.google.com/reader/atom/feed/[FEED_URL]?n=[ITEMS]

Donde [FEED_URL] es la URL del feed y [ITEMS] es la cantidad de ítems que queremos traer del archivo. Por ejemplo: http://www.google.com/reader/atom/feed/http://tedelmecanico.com/feed?n=50

Como dato aparte, existen borradores para el formato ATOM, que incluye paginado y archivo de ítems. Podes ver la especificación aquí: http://tools.ietf.org/html/rfc5005.

Enlaces

1er Concurso Interuniversitario de Bloggers

Les dejo la información sobre el primer concurso interuniversitario de blogs:

LR21 con el apoyo del Ministerio de Educación y Cultura y la participación de La Universidad de la República, la Universidad ORT, la Universidad de Montevideo, La Universidad Católica y La Universidad de la Empresa, quieren fomentar la información y el debate sobre la actualidad del Uruguay y el Mundo entre los jóvenes universitarios internautas, y para estimular las iniciativas que contribuyan a este fin, convocan al 1er concurso InterUniversitario de bloggers en nuestro país.

Hay más de 20 categorías para inscribirse. De cada categoría se elegirá el mejor blog, y de esos se elegirán los 3 ganadores.

El jurado fundamentará su decisión en base a los siguientes criterios:

  • Calidad literaria o estética (en caso de blogs multimedia)
  • Actualización: Los blogs que tengan más periodicidad tendrán un mayor puntaje. Se tomará en cuenta también a los blogs que hayan tenido más entradas en el año 2010.
  • Comunidad creada en el blog: la cantidad de miembros/seguidores del blog será también un factor a calificar.
  • Diseño y originalidad de contenidos.

Premios

  1. Viaje al Machu Picchu.
  2. Fin de semana en hotel en Colonia para dos personas con dos días de auto incluído.
  3. Un celular touchscreen.

Inscripción

El período de inscripción va hasta el 7 de noviembre. fue extendido en algún momento de esta semana, ahora es hasta el 14 de noviembre.

¡Suerte!

Enlaces

Tag <label>

Falso

Intenten clickear verdadero. Luego el falso. ¿Se nota la diferencia?

Es frustrante. Quizá hay muchos usuarios que ni se percatan de que clickeando el texto al lado de un checkbox (o cualquier otro tipo de input) pueden accionar sobre él. Pero hay una mayoría (espero) que sabe que al hacer click en el texto de rótulo de un elemento, el mismo se accionará.

Al perder este comportamiento rompemos con la consistencia y eso afecta la experiencia de usuario, en particular la usabilidad del sistema.

Cómo usarlo

Para utilizar un rótulo de este tipo lo único que hay que hacer es utilizar el tag <label for="element-id">, donde el atributo for define el ID del elemento que queremos accionar. También se puede lograr poniendo el input dentro del label, pero no es tan limpio y no se puede hacer en todos los casos.

Como ejemplo, el código de Verdadero/Falso:

<input type="checkbox" id="verdadero" /> <label for="verdadero" id="label-usuario-ok" >Verdadero</label>
<input id="falso" type="checkbox" /> <span id="label-usuario-mal" >Falso</span>

Como comentario aparte, este “error”  es uno de los tantos que pasan desapercibidos por más que el HTML valide perfectamente.

Referencia

  • https://developer.mozilla.org/en/HTML/Element/label

Promote JS! por una documentación JS más visible

JavaScript Reference, JavaScript Guide, JavaScript API, JS API, JS Guide, JS Reference, Learn JS, JS DocumentationPromote JS es un movimiento que tiene como objetivo mejorar la visibilidad de la excelente documentación que existe sobre JavaScript en el MDC (Mozilla Developer Center).

La iniciativa surge como contraataque a la poca calidad de los recursos que poseen los primeros lugares en los resultados de las búsquedas (W3Schools y otros).

Para lograr su objetivo crearon esta camapaña, que consiste en generar links hacia la documentación JavaScript del MDC y así mejorar la posición en los resultados de búsqueda.

Hoy la búsqueda por “JavaScript” en Google arroja el siguiente resultado:

El MDC figura recién en la segunda página de resultados, con un enlace a “About JavaScript“. En unas semanas volvemos a ver si mejoró el posicionamiento.

Links

Descompilar archivos .mo a .po

Si por alguna razón se encuentran con un archivo .mo a medio terminar, como me pasó a mi, pueden decompilarlo de la siguiente manera (deben tener Poedit instalado.)

En un terminal ejecutar: msgunfmt /ruta/archivo/entrada.mo > /ruta/archivo/salida.po

¡Listo! En Ubuntu lleva un minuto, en Windows hay que hacer dos pasitos más.

En Windows

  • Como msgunfmt.exe no está en el PATH, o bien lo agregamos o copiamos el archivo de entrada en la carpeta bin de Poedit antes de ejecutar el comando. Por defecto está en C:\Program Files\Poedit\bin.
  • Otro problemita al correrlo en Windows es que la terminal puede  escupirnos “Access is denied“. Para solucionarlo ejecutamos cmd.exe con permisos de Administrador y listo.

Fuente

  • http://www.doitmyway.net/2009/06/30/decompile-wordpress-mo-to-po/
  • http://www.poedit.net

Listar y paginar Custom Post Types en WordPress

Los tipos de datos customizados (Custom Post Types) en WordPress fueron uno de los agregados más importantes de la versión 3. Agregan a la plataforma un soporte nativo para cualquier tipo de dato, conviertiendose cada día más en un CMS completo (nos guste o no.)

En la entrada Custom Post Types en WordPress se puede ver como crear un custom post type de tipo libro. Tienen infinitas utilidades, pero en muchas ocasiones vamos a necesitar por lo menos una página con un listado y una página individual para mostrar un ítem de ese tipo. Para el primer caso, seguramente queramos un paginado.

Hoy en día la manera más sencilla de hacer esto es utilizar la clase SD_Register_Post_Type de Soma Design. Aunque quizá en un futuro este comportamiento esté integrado en la plataforma, hoy es difícil hacerlo sin plugins, sobre todo para el que no conoce mucho el código de WordPress.

La funcionalidad más interesante que provee es:

  1. URLs customizadas para el listado general de un post type, con paginación y feed.
    Ej.: http://sitio.com/libros/, http://sitio.com/libros/page/2/http://sitio.com/libros/feed/ )
  2. Plantillas customizadas para lista de ítems y páginas individuales. Si registramos “libro” como post type, podremos usar libro/single.php (individual) y libro/index.php (lista) para una mejor organización.

Modo de uso

Primero debemos incluír la clase SD_Register_Post_Type en nuestro código. Se puede incluír desde un archivo externo:
require_once('sd_register_post_type.class.php')
o copiar la clase entera a nuestro código (dentro de functions.php por ejemplo.)

Lo único que resta es registrar el nuevo tipo de dato utilizando la función auxiliar sd_register_post_type:

sd_register_post_type('libro', $args, 'libros')

Esta función es simplemente un wrapper de register_post_type, recibe los mismos parámetros(nombre, array de parámetros) más un tercer parámetro para el nombre plural del tipo. Si no se especifica el segundo y tercer parámetro se toman valores por defecto, en el caso del plural se agrega una s al nombre del tipo.

Gracias a eso, se puede reutilizar el código utilizado con register_post_type con esta nueva función:

sd_register_post_type( 'libro',
    array(
	'public' => true,
	'labels' => array(
		'name' => __( 'Libros' ),
		'singular_name' => __( 'Libro' ),
		'add_new' => __( 'Añadir Libro' ),
		'add_new_item' => __( 'Añadir Nuevo Libro' ),
		'edit' => __( 'Editar' ),
		'edit_item' => __( 'Editar Libro' ),
		'new_item' => __( 'Nueva Libro' ),
		'view' => __( 'Ver Libro' ),
		'view_item' => __( 'Ver Libro' ),
		'search_items' => __( 'Buscar Libro' ),
		'not_found' => __( 'Libro No Encontrado' ),
		'not_found_in_trash' => __( 'Libro no encontrado en Papelera' )
	),
	'description' => __( 'Libros y revistas' ),
	'menu_position' => 20,
	'menu_icon' => get_stylesheet_directory_uri() . '/images/libros.png',
	'query_var' => true,
	'supports' => array(
		'title',
		'editor',
		'comments',
		'trackbacks',
		'page-attributes',
		'thumbnail' ),
	'rewrite' => array( 'slug' => 'libros'), //->Ver Error 404
	'capability_type' => 'post'
    )
)

Error 404

Como en el caso de la entrada anterior, los cambios de las URLs no van a tener efecto hasta visitar Ajustes>Enlaces Permanentes (Permalinks) para refrescar las reglas de permalinks.

Luego de seguir esos pasos deberías poder administrar libros desde el panel de administración de WordPress y visualizar libros individuales (por default cargados en la plantilla single.php.)

Paginado

Para tener una plantilla con un listado de libros con paginado, creamos un archivo libro/index.php dentro de la carpeta del theme activo y agregamos el código siguiente para traer los posts de la base de datos:

$wp_query = new WP_Query(array('post_type' => 'libro',
                                 'paged' => $paged,
                                 'posts_per_page' => 30,
				 'orderby' => 'title',
				 'order' => 'ASC')
);

Eso seleccionaría 30 libros por página, ordenados por título en forma ascendiente. Por último faltaría agregar los links de paginación. La manera más sencilla es agregando next_posts_link('Página siguiente') y previous_posts_link('Página anterior').

Se puede ver un código similar funcionando en el blog Ted el Mecánico, en la sección de Salas. Se puede ver la página 2 del listado o la página individual de La Trastienda, por ejemplo.

Links

  • http://codex.wordpress.org/Custom_Post_Types
  • http://codex.wordpress.org/Custom_Fields
  • http://somadesign.ca/projects/smarter-custom-post-types/
$wp_query = new WP_Query(array(‘post_type’ => ‘ted_venue’,
‘paged’ => $paged,
‘posts_per_page’ => 30,
‘orderby’ => ‘title’,
‘order’ => ‘ASC’)
);

User Interface Stack Exchange en beta pública

User Interface Stack Exchange es un sitio de preguntas y respuestas manejado por la comunidad, orientado a investigadores y expertos en el área de interfaz de usuario, uno de los tantos derivados de StackExchange.

En estos 7 días de beta privada el sitio contó con 185 usuarios, 78 preguntas y 280 respuestas, y ahora se lanza esta nueva etapa pública de la fase beta.

En esta primera etapa se preguntaron sobre todo cosas muy básicas, pero poco a poco se va llenando de recursos valiosos. Una de los que destaco es la lista de libros recomendados sobre interfaz de usuario: Must-read User Interface Books?.

Luego de abierta la fase pública se evaluará el sitio por parte de StackExchange para ver si pasa a formar parte permanente de su “stack”. Todo depende del esfuerzo de la comunidad.

#PlayaValley 2010

20/ 21/ 22 Agosto 2010. Internet, creatividad, negocios y… arena en el teclado.

20/ 21/ 22 Agosto 2010. Internet, creatividad, negocios y... arena en el teclado.

Agenda

Viernes 20

  • 20:30 – 24:00   Acreditaciones, fiesta de bienvenida

Sábado 21

  • 08:00 – 10:00   Desayuno
  • 10:00 – 10:30   Apertura
  • 10:30 – 11:30   Nicolás Jodal
  • 11:30 – 13:00   Mariano Sáenz + Mauro Suárez
  • 13:00 – 15:00   Almuerzo
  • 15:00 – 16:30   Cecilia Nuñez + Fabián Barros
  • 16:30 – 18:30   Break, actividades, Paint Ball
  • 18:30 – 20:00   Libre
  • 20:00 – 21:30   Cena
  • 21:30 – 24:00   Fiesta chill out

Domingo 22

  • 08:00 – 10:30   Desayuno
  • 10:30 – 11:30   Gonzalo Frasca
  • 11:30 – 13:00   José Gordin + AJE y JCI
  • 13:00 – 15:00   Almuerzo
  • 15:00 – 16:30   Equipo de Software Libre
  • 16:30 – 17:00   Break
  • 17:00 – 18:00   Panel de Intercambio
  • 18:00 – 18:30   Cierre

Más información en el sitio del evento: PlayaValley.com

Friday, August 20
8:30pm

Acreditaciones, fiesta de bienvenida.
Saturday, August 21
8:00am

Desayuno
10:00am

Apertura
10:30am

Nicolás Jodal
11:30am

Mariano Sáenz + Mauro Suárez
1:00pm

Almuerzo
3:00pm

Cecilia Nuñez + Fabián Barros
4:30pm

Break, actividades, Paint Ball
6:30pm

Libre
8:00pm

Cena
9:30pm

Fiesta chill out
Sunday, August 22
8:00am

Desayuno
10:30am

Gonzalo Frasca
11:30am

José Gordin + AJE y JCI
1:00pm

Almuerzo
3:00pm

Equipo de Software Libre
4:30pm

Break
5:00pm

Panel de Intercambio
6:00pm

Cierre

Detectar soporte HTML5 con Modernizr

Modernizr es una biblioteca de funciones que permite detectar el soporte nativo de nuevas y futuras tecnologías en los navegadores web. Dichas tecnologías son implementaciones de las especificaciones de HTML5 y CSS3.

El principal objetivo de Modernizr es proveer una forma confiable de detectar estas implementaciones, para poder sacar provecho de los navegadores o bien proveer una alternativa en caso de que el navegador no implemente la tecnología en cuestión.

Para usarlo simplemente basta con descargar el archivo Javascript y cargarlo desde una página. Automáticamente Modernizr realiza las pruebas correspondientes para detectar las capacidades del navegador y las almacena en forma de booleano en un objeto llamado “Modernizr”, al que podemos acceder dentro de nuestro Javascript.

Por ejemplo, para saber si el navegador soporta la etiqueta <video>, debemos chequear:

if(Modernizr.video){
//código HTML5
}
else{
//código alternativo
}

Al momento de la detección, Modernizr también agrega a la etiqueta <html> clases según las capacidades de nuestro navegador. Por ejemplo, si soporta video, audio y canvas, la etiqueta pasa a ser <html class="audio canvas video">.

Por lo tanto, otro método válido para chequear si el navegador soporta cierta implementación es ver si dicha etiqueta posee la clase correspondiente, acorde a la documentación de Modernizr.

En el ejemplo utilizo este último método para hacer la comprobación.

Demo: HTML5 Tester

Links

WordPress plugin: Undo Publish

Undo Publish es un un pequeño experimento de plugin, inspirado en la funcionalidad Undo Send de Gmail Labs, que ofrece la misma funcionalidad pero en el panel de WordPress. En pocas palabras permite cancelar la publicación de un post nuevo dentro de los 3 segundos posteriores a su publicación.

Configuración

El plugin no tiene opciones de configuración dentro del panel de administración de WordPress. Sin embargo, editando el archivo del plugin se puede configurar el tiempo de espera que permite antes de publicar el post. La variable a editar es define(TIME_LIMIT, 3000), en milisegundos.

Notas

  • El plugin se activa solamente para posts que sean nuevos. Es decir, no va a molestar cuando la acción sea Actualizar un post.
  • Se activa también para Custom Post Types (No se si es un bug o un feature, depende del Custom Post Type, creo yo.)

Instalación

  • Descomprimir en wp-plugins/
  • Activar.

Descarga

Pueden descargarlo del repositorio oficial de WordPress, incluyo el link aquí abajo.

Undo Publish – WordPress Plugin Directory

http://wordpress.org/extend/plugins/undo-publish/

http://wordpress.org/extend/plugins/undo-publish/