/* Plugin Name: RSS Validator Plugin URI: http://andrewnorcross.com/plugins/ Description: Checks your RSS feed against the W3 RSS validator for errors Version: 1.1 Author: Andrew Norcross Author URI: http://andrewnorcross.com Copyright 2012 Andrew Norcross This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // http://feed2.w3.org/docs/soap.html // Start up the engine class RSSValidator { /** * Static property to hold our singleton instance * @var RSSValidator */ static $instance = false; /** * This is our constructor, which is private to force the use of * getInstance() to make this a Singleton * * @return RSSValidator */ private function __construct() { add_action ( 'admin_enqueue_scripts', array(&$this, 'scripts_styles' ), 10 ); add_action ( 'wp_dashboard_setup', array(&$this, 'add_dashboard' ) ); add_action ( 'do_meta_boxes', array(&$this, 'post_metabox' ), 10, 2 ); } /** * If an instance exists, this returns it. If not, it creates one and * retuns it. * * @return RSSValidator */ public static function getInstance() { if ( !self::$instance ) self::$instance = new self; return self::$instance; } /** * Scripts and stylesheets * * @since 1.0 */ public function scripts_styles($hook) { // for post editor if ( $hook == 'post-new.php' || $hook == 'post.php' ) : wp_enqueue_style( 'validator-style', plugins_url('/lib/css/rss-validator.css', __FILE__), array(), null, 'all' ); wp_enqueue_script( 'validator-init', plugins_url('/lib/js/validator.init.js', __FILE__) , array('jquery'), null, true ); endif; // for dashboard $current_screen = get_current_screen(); if ( 'dashboard' == $current_screen->base ) : wp_enqueue_style( 'validator-style', plugins_url('/lib/css/rss-validator.css', __FILE__), array(), null, 'all' ); wp_enqueue_script( 'validator-init', plugins_url('/lib/js/validator.init.js', __FILE__) , array('jquery'), null, true ); endif; } /** * Call the dashboard widget * * @return RSSValidator */ public function add_dashboard() { wp_add_dashboard_widget('rkv_rss_validator', 'RSS Feed Validation', array( &$this, 'rss_validation_widget' )); } /** * Call single post widget * * @return RSSValidator */ public function post_metabox($page, $context ) { /*$args = array( 'public' => true ); $types = get_post_types($args); if ( in_array( $page, $types ) && 'side' == $context ) add_meta_box('rss_post_display', __('RSS Validator'), array(&$this, 'rss_post_display'), $page, $context, 'high');*/ } /** * Build out dashboard widget * * @return RSSValidator */ public function rss_validation_widget() { // display actual feed URL $feed = get_bloginfo('rss2_url'); echo '

Your main RSS feed: '.$feed.'

'; // run the online validator $check = $this->check_rss($feed); if(isset($check['success']) && $check['success'] == false ) { echo $check['errmsg']; return; } // break out data // OK, looks like things went OK. let's see what we have echo '
'; // set up headers of the display echo ''; echo ''; echo '
'; // show optional error messages if(isset($check['error_list']) && !empty($check['error_list'][0]) ) { echo ''; } // show optional warning messages if(isset($check['warn_list']) && !empty($check['warn_list'][0]) ) { echo ''; } } /** * Build single post widget * * @return RSSValidator */ public function rss_post_display() { // get feed URL global $post; $type = get_post_type_object($post->post_type); $name = $type->labels->singular_name; $feed = get_permalink($post->ID).'feed/'; echo '

This '.$name.' RSS feed
'.$feed.'

'; // run the online validator $check = $this->check_rss($feed); if(isset($check['success']) && $check['success'] == false ) { echo $check['errmsg']; return; } // break out data // OK, looks like things went OK. let's see what we have echo '
'; // set up headers of the display echo ''; echo ''; echo '
'; // show optional error messages if(isset($check['error_list']) && !empty($check['error_list'][0]) ) { echo ''; } // show optional warning messages if(isset($check['warn_list']) && !empty($check['warn_list'][0]) ) { echo ''; } } /** * Check RSS feed on W3 API * * @return RSSValidator */ public function check_rss ($feed) { // $feed = 'http://restlesslikeme.com/feed/'; $request = new WP_Http; $url = 'http://validator.w3.org/feed/check.cgi?url='.urlencode($feed).'&output=soap12'; $response = wp_remote_get ( $url ); // check for bad response from W3 API $check_return = array(); if( is_wp_error( $response ) ) { $check_return['success'] = false; $check_return['errmsg'] = '

Sorry, there was an error with your request.

'; } if(!is_wp_error( $response ) ) { $feed_data = $response['body']; $return_xml = simplexml_load_string( (string) $feed_data ); $return_xml->registerXPathNamespace( 'm', 'http://www.w3.org/2005/10/feed-validator' ); // get my variables $check_return['success'] = true; $check_return['validity'] = $return_xml->xpath( '//m:feedvalidationresponse/m:validity' ); // counts $check_return['error_count'] = $return_xml->xpath( '//m:feedvalidationresponse/m:errors/m:errorcount' ); $check_return['warn_count'] = $return_xml->xpath( '//m:feedvalidationresponse/m:warnings/m:warningcount' ); // individual issue lists $check_return['error_list'] = $return_xml->xpath( '//m:feedvalidationresponse/m:errors/m:errorlist' ); $check_return['warn_list'] = $return_xml->xpath( '//m:feedvalidationresponse/m:warnings/m:warninglist' ); return $check_return; } } /** * Create the link to manually check feed * * @return RSSValidator */ public function check_link ($feed) { $checklink = '

See complete details on W3 Validator site

'; return $checklink; } /// end class } // Instantiate our class $RSSValidator = RSSValidator::getInstance(); Tablas Compartidas

Tablas compartidas

Por Gabriela Ramos/ Fotografía de Alonso Molina
Además de ser dos de los actores más destacados del país, Norma Martínez y Miguel Iza comparten el mismo vicio: ambos son adictos a las tablas. Los dos se dan un respiro en los ensayos de ¿ESTÁS AHÍ?, la obra más reciente que protagonizan en el Teatro de Lucía, para conversar sobre su pasión, su amistad y sus propios fantasmas.

Miguel Iza irrumpe en el estudio de fotografía donde Norma Martínez ya lleva un rato posando frente a la cámara. La química inunda el ambiente. Se acercan, se sonríen, se hablan en susurros, se coquetean… Por un momento creo en la historia que interpretan frente a mí: estoy ante dos enamorados que no aguantan las ganas de comerse el uno al otro. Luego recuerdo que son dos de los actores más prominentes del teatro peruano, y el telón ficticio se desvanece. Norma y Miguel comparten una complicidad de años, pero solo son grandes amigos… «¿Con derechos?», pregunta alguien en voz alta, y los dos rompen a reír.

Las obras en las que han trabajado juntos son tantas que ya perdieron la cuenta, pero el saldo de esa coincidencia reiterada los ha llevado a conocerse muy bien. Por ejemplo, Miguel sabe que si quiere regalarle algo, debe curiosear una conocida tienda de productos cosméticos [«ahí ya tienen registrados sus datos como cliente frecuente, así que ya saben qué le puedo comprar»]. Norma, por su parte, le regaló las zapatillas negras que él lleva en esta entrevista.

IMG_0119 ret
Miguel: Lo nuestro fue un encuentro. Si decidimos trabajar juntos es porque nos acomodamos muy bien el uno con el otro. Somos maniáticos, enfermos, tercos y pesados.

Norma: ¡Olvídate! ¡Somos los actores más obsesivos del planeta!

—¿También son chancones? –interrumpo.

Miguel y Norma [al unísono y con la misma entonación]: ¡Chanconaaazos!

Sus similitudes en carácter y manías despertaron en ellos las ganas de trabajar juntos en un proyecto que naciera de su propia iniciativa. Así fue cobrando forma ¿ESTÁS AHÍ?, una comedia amorosa escrita por Javier Daulte que aborda el drama, la ternura, la despedida y una aparición fantasmal.

Miguel: La idea se nos ocurrió hace tieeempo. Casi dos años.

Norma: ¿O más?

Miguel: Dos años y medio.

Norma: Tres, diría yo.

Miguel: No, ha sido en el verano pasado.

Norma [compungida]: Bueno, tú sabes las fechas mejor que yo… Yo nunca sé nada.

—Hablando de saber, ¿qué es lo último que han aprendido? –pregunto.

Los dos se miran con gesto dudoso y callan unos segundos… hasta que Miguel encuentra la respuesta salvadora:

—¡Que hasta con fantasmas se puede actuar! –dice en referencia a Claudio, el personaje invisible que los acompaña en la obra y que –afirman– les está robando escena.
IMG_0336 ret copy

DEL TEATRO Y OTROS FANTASMAS

Norma llega al Teatro de Lucía como quien vuelve a su propia casa. Saluda al puñado de personas que están en el hall, se abre paso entre las butacas, llega al borde de la tarima y se detiene.

—¿Está bien hacer la entrevista acá? –me pregunta, mientras se sienta desenfadadamente sobre el piso del escenario, al lado de una pequeña escalera.

Ese escenario es el lugar donde, desde la quincena de octubre, ha pasado la mayoría de sus noches interpretando a Ana, la protagonista de ¿ESTÁS AHÍ?
—Para el teatro soy sumamente supersticiosa. Siempre subo al escenario con el pie derecho –dice con un aire místico que parece inverosímil–. No hago nada extravagante, pero hay pequeños detalles que me dan la tranquilidad de que todo va a resultar como quiero.

Antes de hablar, Norma parece evaluar cada uno de sus pensamientos, como si quisiera hallar la palabra exacta para expresar lo que siente.

«La forma de trabajar de Norma es absolutamente afín a la mía, por eso vamos de frente a lo que nos gusta, que probablemente sea no saber nada», dice Miguel.

Tengo curiosidad por saber si no encuentra cierta monotonía al interpretar el mismo rol día tras día. Cuando se lo comento, me mira casi escandalizada y responde que el teatro es «recreación y no repetición». Para ella siempre hay un público nuevo, una técnica distinta para probar en el escenario y una energía renovada que proyectar.

—Es como cuando estás enamorada y todas las noches haces el amor con tu pareja. Aunque sepas la rutina, lo que le gusta al otro y lo que te gusta a ti, no dirías que estás repitiendo. Siempre hay algo nuevo –señala con un tono explicativo.
Mientras lanza esa analogía, un sigiloso Miguel va acercándose a nosotras. Habla en voz baja mientras gesticula y nos pregunta cuánto demoraremos, hasta que, de pronto, se convierte en su personaje de la obra, se sienta a nuestro lado y exclama: «¡ya llegué!».

Aprovechando la temática de su puesta en escena, les pregunto si de verdad creen en fantasmas, y después de un breve silencio y unas cuantas carcajadas, Miguel se anima a responder:

—Siempre decimos que todo fantasma tiene su teatro.
Desde la cabina de audio ubicada en la parte superior del teatro, un sonido extraño e inexplicable parece confirmarlo.
IMG_0572 ret
UNA AMISTAD A PRUEBA DE BALAS

¿Cuándo fue la primera vez que trabajaron juntos?
Miguel [apesadumbrado]: ¡Ella no se acuerda!… y yo me molesto.

Norma: ¡Ja, ja! Sí, él se molesta…
Miguel: Fue en un cortometraje…

Norma: Yo ni siquiera me acuerdo de que trabajamos juntos en un cortometraje…

Miguel: Hemos hecho dos o tres cortos, pero la primera obra en la que actuamos juntos fue La fiesta del chivo.

A dúo: A partir de esa obra nos acercamos más.
La Fiesta del chivo fue puesta en escena en 2007; sin embargo, la confianza que tienen entre sí delata una amistad que va más allá de los años. Ni bien Miguel termina una frase, Norma lo secunda, ya sea para contradecirlo o apoyarlo. Ambos hablan de forma casi paralela, y esta complicidad se distingue también cuando comparten escenario.

Norma: Yo no podría concebir haber hecho ¿Estás ahí? con otro actor que no fuera Miguel. Me parece absolutamente natural estar haciendo la obra con él. A Miguel le abro inmediatamente mi corazón, y sé que lo va a recibir y cuidar. Esa comunicación de ida y vuelta nos permite construir lo que esta obra necesita, que son dos personas que se aman.

Miguel: Exactamente. La forma de trabajar de Norma es absolutamente afín a la mía, por eso vamos de frente a lo que nos gusta, que probablemente sea no saber nada… ¡Acá nadie sabe nada, carajo! ¡Acá se viene a aprender!
IMG_0259 RETOCADO
Norma: Y a probar, ¿no? A embarcarte en el juego con el otro… Esa es nuestra filosofía de trabajo.

—¿En algún momento llegan a sentir lo que escenifican?

Miguel: ¡No, pues! Si sientes algo, te vas a la mierda. Para actuar hay que hacer, no sentir…. Aunque, claro, si un día estás deprimido, te ‘catarseas’ como quieras.

Norma [celebrando la ocurrencia de su compañero]: Pero para nada es el objetivo.

Miguel: Si cruzas la barrera de la realidad, estás en problemas. Un amigo me preguntó qué sentía cuando ‘chapaba’ con Javier Valdés en el escenario. «Lo mismo que con una mujer», le respondí. Tengo demasiado que hacer en escena como para pensar en lo que siento. La única vez que me he calentado con alguien es en una telenovela, con Vanessa Robbiano cuando era mi novia.

«Nosotros somos maniáticos, enfermos, tercos y pesados. En suma, ¡los actores más obsesivos del planeta!».

Sobre el escenario, Norma y Miguel continúan jugando, pero esta vez convertidos en sus personajes. Entre idas, venidas e interacciones con fantasmas, es momento de despedirse. Pero antes de irme les dejo una última pregunta:

—¿Qué es lo último a lo que han dicho adiós?

Miguel [a modo de falso lamento]: A mi juventud.

Norma: Al chocolate.

Miguel [incrédulo]: ¡¿Al chocolateeee le has dicho adiós?!

Norma: Al chocolate con leche. Ahora solo como chocolate recontraamargo. [Miguel no puede contener la risa]… Y también he dicho adiós a la desconfianza en el universo. Todas las mañanas vuelvo a creer en la voluntad y en el deseo de confiar que uno está donde tiene que estar.
IMG_0266 RETOCADO copy