lunes, 7 de junio de 2010

Una de las ventajas (o inconvenientes, según se mire) de no tener televisión (ya ni siquiera televisor, murió hace una semana) es que cuando quieres ver algo lo tienes que querer de forma activa, es decir: o te lo pones tú mismo ó no hay nada que ver. Se acabó el “ver lo que echen“. Asi es que lo que vemos es porque lo queremos, lo buscamos, lo ponemos, como la serie Wallander.

La serie trata sobre las peripecias profesionales y personales de un inspector de policía. Hasta aquí nada nuevo. Ahora bien, reune algunos requisitos que la hacen muy diferente al clásico estereotipo de película de detectives, a saber: la acción/historia transcurre en Suecia (sí, eso que está a la derecha de New York según se cruza el Atlántico), está realizada por la BBC (plus), con una fotografía excelente, interpretada genialmente por Kenneth Branagh y donde los personajes son sanamente creibles.
La serie de Wallander está basada en la novela del sueco Henning Mankell, uno de los pasajeros del barco turco secuestrado y tiroteado por el ejercito Israelita y que este domingo cuenta su experiencia en El Pais:

(…)
Transcurrida una hora exactamente, los botes de goma se acercan veloces llenos de soldados enmascarados que inician el abordaje de inmediato. Nos reunimos en el puente de mando. Los soldados se muestran impacientes y quieren que bajemos a cubierta. Alguien se demora y lo atacan con una descarga eléctrica en el brazo. El hombre cae al suelo. Otro hombre que tampoco se movía con celeridad suficiente recibe el impacto de una bala de goma. Y todo esto sucede allí mismo, a mi lado. Es absolutamente real. Personas totalmente inocentes tratadas como animales y castigadas por su lentitud.
(…)

La serie la podeis descargar desde aquí. Son pocos capítulos pero largos (casi largometrajes).
Para descargar el juicio a los responsables de la matanza creo que vamos a tener que esperar más, mucho más, quizás viviendo un par de vidas más nos llegue a verlo.

domingo, 6 de junio de 2010

Un macho se pavonea delante de la hembra desplegando la cresta.

Abubilla pavoneandoseAbubilla pavoneandose

Vistos de cerca resultan unos pájaros raros. Tienen un pico desproporcionadamente grande a la cabeza (hay pocos pájaros tan feos como una abubilla mojada) y emiten un graznido espeluznante (además de su muy conocido pu-pu-pupu) que daría la impresión de que el animal está poseido por el mismisimo satanás de los cuervos. Pero luego llega el cortejo, y los machos despliegan su arsenal en forma de vuelos acrobáticos y crestas anaranjadas y se les perdonan muchas cosas.
Siempre se ha dicho que son animales faciles de domesticar, como las palomas, y probablemente serían mucho más populares si no fuese por la fea costumbre que tienen de convertir en pozo pestilente de moscas su agujerito lleno de polluelos que algunos llaman nido. Por lo demás son excelente compañía para cualquier agricultor o jardinero, ya que se pasan el dia “pinchando” el suelo en busca de larvas, orugas, etc… El día que los zopencos del campo entiendan que taponar con piedras los agujeros de los árboles les perjudica a ellos también, habremos avanzado un poquillo más. (sorry, es que el otro día estuve “destapando” casi una veintena de almendros. Hay pastores más borregos que el ganado que conducen).

Alicia en el pais de las maravillas
Ficcion, aventuras. Mala.
Inicialmente la califiqué de Pasable, pero me retracto, la película es mala. Aburre desde los 10 min. Y es que no basta una estética y unos efectos visuales impresionantes para justificar una película, ni aun tratandose de “Alicia en el PM” a manos de Tim Burton (algo que a priori reconozco me pareció un acierto). No bastan unos escenarios de colorines, liebres que hablan y personajes con la cabeza gorda para aguantar el tipo durante más de 15 ó 20 minutos.
Para empezar no es “Alicia en el PM“, sino un refrito entre esta y “A través del espejo“. Y para terminar creo que el tema de Lewis Carroll, con todos sus transfondos y dobles lecturas sociales, críticas a la época, numerología y personajes pesadillescos se pierden en cuanto los coge un director de cine yanqui y los convierte en un espectaculo circense de bichos raros y disneyworld (no en vano son los productores). Aunque suene a topicazo, creo que la verdadera película de “Alicia en el PM” vendrá otro día de manos de un director europeo ó, al menos, de un director de cine no-hollywoodiense.

TrailerTorrent

The wolfman
Ficción, suspense/miedo. Buena a Muy buena. Hace tiempo decía alguien en TV que “este año estaba lloviendo como antiguamente“, esta película hace buena esa frase: han hecho una película de miedo de la de antes. Pocas veces un remake mejora y supera tan claramente el original, sin que este abuso se base (únicamente) en una indiscutible mejora tecnológica. La ambientación gótica, la fotografía (que más que iluminar se diría que sombrea) y los actores que están geniales.
Lo que más me ha gustado es que han respetado mucho el aspecto del hombre-lobo original, evitando las posteriores “mejoras biológicas” que se les ha ido introduciendo en el cine (pareciendolo cada vez más a un animal y no a un hombre-lobo). Evidentemente la infografía & co. están ahí y se dejan notar, pero no con intención de abusar ó una especie de dejar en evidencia produciones anteriores. Las escenas de hombre-lobo corriendo a cuatro patas es de lo mejorcito que he visto, de las pocas que resultan creibles.
Por sacarle algún pero: quizás dure demasiado.
TrailerTorrent VOS Sigue leyendo…

viernes, 4 de junio de 2010

Un par de modificaciones simples a las funciones de WordPress que imprimen el paginador (ver al pie de la página principal, donde aparece “Apuntes más antiguos”, ahora aparece un numerito de fondo) para que incluyan el número de página a la que apunta el enlace. Me pareció mas cómodo, intuitivo, etc., etc…
Solo hay que tocar dos funciones (get_previous_posts_link y get_next_posts_link) para incluir una etiqueta nueva conteniendo el número y a continuación via CSS se formatea para que quede bonito, y todo sin gastar ni un kb en bitmaps.

Así es como se ha quedado la función get_next_posts_link en /raiz_wp/wp_includes/link_template.php
function get_next_posts_link( $label = 'Next Page »', $max_page = 0 ) {
global $paged, $wp_query;
if ( !$max_page ) {
$max_page = $wp_query->max_num_pages;
}
if ( !$paged )
$paged = 1;
$nextpage = intval($paged) + 1;
if ( !is_single() && ( empty($paged) || $nextpage <= $max_page) ) {
$attr = apply_filters( 'next_posts_link_attributes', '' );
return '<a href="' . next_posts( $max_page, false ) . "\" $attr title=\"Ir a la página $nextpage\">". preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) .'</a><small id="numeroSiguiente" class="numeroPaginaFondo">'.$nextpage.'</small>';
}
}

Así es como se ha quedado la función get_previous_posts_link en /raiz_wp/wp_includes/link_template.php
function get_previous_posts_link( $label = '« Previous Page' ) {
global $paged;
if ( !is_single() && $paged > 1 ) {
$paginaanterior = intval($paged) - 1;
$attr = apply_filters( 'previous_posts_link_attributes', '' );
return '<small id="numeroAnterior" class="numeroPaginaFondo">'.$paginaanterior.'</small><a href="' . previous_posts( false ) . "\" $attr title=\"Ir a la página $paginaanterior\">". preg_replace( '/&([^#])(?![a-z]{1,8};)/', '&$1', $label ) .'</a>';
}
}

y en el CSS algo como
.paginador .numeroPaginaFondo { font-weight:bold; display:inline; position:absolute; top:-55px; font-size:102px; color:#eed;z-index:-1;}
.paginador .numeroPaginaFondo#numeroAnterior {right:0px;}
.paginador .numeroPaginaFondo#numeroSiguiente {left:0px;}

Creo que queda más bonico del tó que unicamente el enlace del texto.

jueves, 3 de junio de 2010

En la rambla del cañar sobrevive el único grupo de Acantos (Acanthus mollis) que conozco en Cartagena que crece de forma espontánea. Refugiados a la sombra de una enorme higuera y entre las cañas huyendel calor del verano que ya está llamando a la puerta.

acanto Iacanto I

Problablemente sea más conocido por inspirar a escultores de los capiteles de columnas gracias a sus grandes hojas, pero en estos dias sus espigas de flores son sencillamente espectaculares.

miércoles, 2 de junio de 2010

He modificado la función get_calendar de este WordPress 2.9.0 ubicada en /raiz_wp/wp_includes/general_template.php para reemplazar el titulo del més por una lista de mes-año (numero de apuntes).
Creo que con esto se mejora bastante la navegación por los apuntes antiguos y aunque me suena de algún plugins que hace algo parecido vereis que se pueden ahorrar algunos recursos simplemente añadiendo unas líneas a la función.
La función get_calendar ha quedado de la siguiente manera (la parte corregida/modificada está advertida, el resto de la función es la original … creo… :) )
function get_calendar($initial = true) {
global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;
$cache = array();
$key = md5( $m . $monthnum . $year );
if ( $cache = wp_cache_get( 'get_calendar', 'calendar' ) ) {
if ( is_array($cache) && isset( $cache[ $key ] ) ) {
echo $cache[ $key ];
return;}
}
if ( !is_array($cache) )
$cache = array();
// Quick check. If we have no posts at all, abort!
if ( !$posts ) {
$gotsome = $wpdb->get_var("SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1");
if ( !$gotsome ) {
$cache[ $key ] = '';
wp_cache_set( 'get_calendar', $cache, 'calendar' );
return;
}
}
ob_start();
if ( isset($_GET['w']) )
$w = ''.intval($_GET['w']);
// week_begins = 0 stands for Sunday
$week_begins = intval(get_option('start_of_week'));
// Let's figure out when we are
if ( !empty($monthnum) && !empty($year) ) {
$thismonth = ''.zeroise(intval($monthnum), 2);
$thisyear = ''.intval($year);
} elseif ( !empty($w) ) {
// We need to get the month from MySQL
$thisyear = ''.intval(substr($m, 0, 4));
$d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's
$thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('${thisyear}0101', INTERVAL $d DAY) ), '%m')");
} elseif ( !empty($m) ) {
$thisyear = ''.intval(substr($m, 0, 4));
if ( strlen($m) < 6 )
$thismonth = '01';
else
$thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2);
} else {
$thisyear = gmdate('Y', current_time('timestamp'));
$thismonth = gmdate('m', current_time('timestamp'));
}
$unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear);
// Get the next and previous month and year with at least one post
$previous = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts
WHERE post_date < '$thisyear-$thismonth-01'
AND post_type = 'post' AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 1");
$next = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts
WHERE post_date > '$thisyear-$thismonth-01'
AND MONTH( post_date ) != MONTH( '$thisyear-$thismonth-01' )
AND post_type = 'post' AND post_status = 'publish'
ORDER BY post_date ASC
LIMIT 1");
/* translators: Calendar caption: 1: month name, 2: 4-digit year */
$calendar_caption = _x('%1$s %2$s', 'calendar caption');
echo '<table id="wp-calendar" summary="' . esc_attr__('Calendar') . '">';
echo '<caption>';
//INICIO seccion cambiada
$unixPrimero=mktime(0,0,0,4,5,2003);
$anoAnterior="";
$unixUltimo=time();
echo '<select onchange="document.location.href=this.value;">';
while ( $unixPrimero < $unixUltimo ) {
$apuntesMensuales = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_date LIKE '%".date('Y-m-', $unixPrimero)."%' AND post_status='publish' LIMIT 1");
$anoEnCurso=date('Y', $unixPrimero);
if($apuntesMensuales > 0) {
if( $anoAnterior != $anoEnCurso ) {
if($anoAnterior != "") echo "</optgroup>";
echo "<optgroup label=\"$anoEnCurso\">";
$anoAnterior=$anoEnCurso;
}
echo "<option value=\"/".date('Y/m', $unixPrimero)."\"";
if( date('Y/m', $unixPrimero) == "$thisyear/$thismonth" ) echo " selected=\"selected\" ";
echo ">".$wp_locale->get_month(date("m",$unixPrimero))." - ".date('Y', $unixPrimero)." (".$apuntesMensuales.")</option>\n";
}
else {
if( $anoAnterior != $anoEnCurso ) {
if($anoAnterior != "") echo "</optgroup>";
echo "<optgroup label=\"$anoEnCurso\">";
$anoAnterior=$anoEnCurso;
}
echo "<option disabled>".$wp_locale->get_month(date("m",$unixPrimero))." - ".date('Y', $unixPrimero)." (0)</option>";
}
$unixPrimero=$unixPrimero+2678400;
}
echo "<option value=\"/\"";
if( date('Y/m', $unixUltimo) == "$thisyear/$thismonth" ) echo " selected=\"selected\" ";
echo ">".$wp_locale->get_month(date("m",$unixUltimo))." - ".date('Y', $unixUltimo)." (actualmente)</option>\n";
echo '</select>';
// $mesSegundo=$primerMes + 2592000;
// echo date('F Y', $mesSegundo);
// $mesActual="";
// echo sprintf($calendar_caption, $wp_locale->get_month($thismonth), date('Y', $unixmonth));
//FIN seccion cambiada
echo '</caption>
<thead>
<tr>';
$myweek = array();
for ( $wdcount=0; $wdcount<=6; $wdcount++ ) {
$myweek[] = $wp_locale->get_weekday(($wdcount+$week_begins)%7);
}
foreach ( $myweek as $wd ) {
$day_name = (true == $initial) ? $wp_locale->get_weekday_initial($wd) : $wp_locale->get_weekday_abbrev($wd);
$wd = esc_attr($wd);
echo "\n\t\t<th abbr=\"$wd\" scope=\"col\" title=\"$wd\">$day_name</th>";
}
echo '
</tr>
</thead>
<tfoot>
<tr>';
if ( $previous ) {
echo "\n\t\t".'<td abbr="' . $wp_locale->get_month($previous->month) . '" colspan="3" id="prev"><a href="' .
get_month_link($previous->year, $previous->month) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $wp_locale->get_month($previous->month),
date('Y', mktime(0, 0 , 0, $previous->month, 1, $previous->year))) . '">« ' . $wp_locale->get_month_abbrev($wp_locale->get_month($previous->month)) . '</a></td>';
} else {
echo "\n\t\t".'<td colspan="3" id="prev" class="pad"> </td>';
}
echo "\n\t\t".'<td class="pad"> </td>';
if ( $next ) {
echo "\n\t\t".'<td abbr="' . $wp_locale->get_month($next->month) . '" colspan="3" id="next"><a href="' .
get_month_link($next->year, $next->month) . '" title="' . esc_attr( sprintf(__('View posts for %1$s %2$s'), $wp_locale->get_month($next->month) ,
date('Y', mktime(0, 0 , 0, $next->month, 1, $next->year))) ) . '">' . $wp_locale->get_month_abbrev($wp_locale->get_month($next->month)) . ' »</a></td>';
} else {
echo "\n\t\t".'<td colspan="3" id="next" class="pad"> </td>';
}
echo '
</tr>
</tfoot>
<tbody>
<tr>';
// Get days with posts
$dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date)
FROM $wpdb->posts WHERE MONTH(post_date) = '$thismonth'
AND YEAR(post_date) = '$thisyear'
AND post_type = 'post' AND post_status = 'publish'
AND post_date < '" . current_time('mysql') . '\'', ARRAY_N);
if ( $dayswithposts ) {
foreach ( (array) $dayswithposts as $daywith ) {
$daywithpost[] = $daywith[0];
}
} else {
$daywithpost = array();
}
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'camino') !== false || strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'safari') !== false)
$ak_title_separator = "\n";
else
$ak_title_separator = ', ';
$ak_titles_for_day = array();
$ak_post_titles = $wpdb->get_results("SELECT post_title, DAYOFMONTH(post_date) as dom "
."FROM $wpdb->posts "
."WHERE YEAR(post_date) = '$thisyear' "
."AND MONTH(post_date) = '$thismonth' "
."AND post_date < '".current_time('mysql')."' "
."AND post_type = 'post' AND post_status = 'publish'"
);
if ( $ak_post_titles ) {
foreach ( (array) $ak_post_titles as $ak_post_title ) {
$post_title = esc_attr( apply_filters( 'the_title', $ak_post_title->post_title ) );
if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) )
$ak_titles_for_day['day_'.$ak_post_title->dom] = '';
if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one
$ak_titles_for_day["$ak_post_title->dom"] = $post_title;
else
$ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . $post_title;
}
}
// See how much we should pad in the beginning
$pad = calendar_week_mod(date('w', $unixmonth)-$week_begins);
if ( 0 != $pad )
echo "\n\t\t".'<td colspan="'. esc_attr($pad) .'" class="pad"> </td>';
$daysinmonth = intval(date('t', $unixmonth));
for ( $day = 1; $day <= $daysinmonth; ++$day ) {
if ( isset($newrow) && $newrow )
echo "\n\t</tr>\n\t<tr>\n\t\t";
$newrow = false;
if ( $day == gmdate('j', (time() + (get_option('gmt_offset') * 3600))) && $thismonth == gmdate('m', time()+(get_option('gmt_offset') * 3600)) && $thisyear == gmdate('Y', time()+(get_option('gmt_offset') * 3600)) )
echo '<td id="today">';
else
echo '<td>';
if ( in_array($day, $daywithpost) ) // any posts today?
echo '<a href="' . get_day_link($thisyear, $thismonth, $day) . "\" title=\"" . esc_attr($ak_titles_for_day[$day]) . "\">$day</a>";
else
echo $day;
echo '</td>';
if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) )
$newrow = true;
}
$pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins);
if ( $pad != 0 && $pad != 7 )
echo "\n\t\t".'<td class="pad" colspan="'. esc_attr($pad) .'"> </td>';
echo "\n\t</tr>\n\t</tbody>\n\t</table>";
$output = ob_get_contents();
ob_end_clean();
echo $output;
$cache[ $key ] = $output;
wp_cache_set( 'get_calendar', $cache, 'calendar' );
}

Podeis ver como queda echando un vistazo al calendario que aparece en estas páginas, en la columna de la derecha.

Cuaderno de campo es un blog desarrollado y mantenido por Trebol-a y en el que escriben Trebol-a, Miguel, Merche y Mónica
Si quieres saber algo más sobre los autores acude a la página acerca-de, si quieres contactar con alguno de nosotros hazlo a través de contactar ó de Google+

Creative Commons: Todo el contenido de la web (imágenes, textos, vídeos, a excepción de aquellas obras de otros autores enlazados por Cuaderno de Campo) se acoge a los términos expresados en la licencia Creative Commons