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/

Custom Post Types en WordPress

Primero que nada, ¿Qué son Custom Post Types?

Los tipos  de datos que maneja WordPress nativamente son post, page, attachment, revision y nav menu. Los Custom Post Types son básicamente tipos de datos personalizados, algo así como los Content Types de Drupal. Son infelizmente llamados Post Types porque viven en la misma tabla que posts y pages (wp_posts), y son diferenciados por una columna post_type.

Definir nuevo custom post type

Para definir un tipo nuevo utilizamos la función create_post_type(). El siguiente código puede ser utilizado desde el archivo functions.php o aún mejor, desde un plugin.

add_action( 'init', 'create_post_type' );
function create_post_type() {
  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' => 'biblioteca'), //->Ver Error 404
		'capability_type' => 'post'
	)
  );
}

La función create_post_type() recibe como primer parámetro el nombre del tipo de dato y en segundo lugar una lista de parámetros para configurarlo. Aquí se puede ver el detalle de esta función: Function reference: register_post_type.

Luego de añadir ese código deberíamos ver un menú lateral “Libros” que nos permite gestionar nuevos elementos de tipo libro, tal como manejamos posts o páginas. Con el parámetro rewrite especificamos que las urls serán del tipo http://sitio.com/biblioteca/nombre-libro.

Error 404

Al editar el nuevo tipo de dato es posible encontrarse con errores de página no encontrada, al hacer preview o al visitar un nuevo ítem publicado si utilizamos el parámetro rewrite para hacer uso de permalinks. Para corregir esto basta con visitar Settings/Permalinks o agregando flush_rewrite_rules() luego de llamar a register_post_type().

Definir campos para el nuevo tipo de datos

A través del array supports podemos definir los campos nativos que contiene nuestro tipo de datos, por ejemplo title, editor (contenido), comments, etc. Pero también podemos añadir nuevos campos. Supongamos que quiero agregar un nuevo campo Editorial al tipo Libro.

Para esto hay que agregar un meta_box (las cajitas con opciones dentro de post.php) en la administración para poder editar ese campo. Esto se hace mediante la función add_meta_box().

add_action("admin_init", "admin_init");

function admin_init(){
    add_meta_box("libro-meta", "Información Extra", "info", "libro", "side", "low");
}

function info(){
    global $post;
    $custom = get_post_custom($post->ID);
    $capacity = $custom["editorial"][0];
    ?>
        <label for="capacity">Editorial</label>
        <input name="capacity" id="capacity" value="<?php echo $capacity; ?>" />
    <?php
}

Por último, registramos una función para guardar los campos personalizados.

add_action('save_post', 'save_extra');
function save_extra(){
    global $post;
    update_post_meta($post->ID, 'editorial', $_POST['editorial']);
}

Listo. Ahora además de posts y pages podemos crear Libros. Cómo mostrarlos, eso es tema para otro post :)

Desgargar código fuente

[download id=”3″]

Probado en WordPress 3.0.

Fuentes

  • http://codex.wordpress.org/Custom_Post_Types
  • http://codex.wordpress.org/Function_Reference/register_post_type
  • http://thinkvitamin.com/dev/create-your-first-wordpress-custom-post-type/