/* 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(); Alessandra Denegri - Perfiles - Revista ASIA SUR

Alessandra Denegri

Ya no quiere ser una chica mala

Escribe. Manolo Bonilla // Foto. César Guerrero Erazo
Estas son sus últimas palabras antes de ingresar a un retiro. ¿Cómo interpretar el silencio de una actriz?

Esto fue lo que escuché.

-¿Cómo estás?

-Loca. ¿Y tú?

-Debemos estar locos porque AlmaZen está cerrado.

-Pero yo estoy adentro.

La dueña de la voz por teléfono entonces aparece en la puerta de vidrio. Ahí estaba, con un chaleco blanco, una polera con capucha y una vincha verde que sujetaba su pelo. Alessandra Denegri acaba de regresar de Santiago de Chile. Fue a firmar el contrato por su participación en la serie Prófugos, a visitar a Cristóbal, su novio también chileno, y a morirse de frío a 5 grados.

El frío le causa alergia y hace que se enronchen sus dedos. Antes estuvo en Nueva York con nieve y solo sus pulgares se salvaron. Cuando tirita tiene ataques de dulce y come mucho chocolate. Pero hoy estamos en un restaurante de comida orgánica artesanal, donde la música es anestesiante, los colores de las paredes son pasteles y la mayoría de los comensales tienen dreads o visten ropas holgadas como para hacer yoga. Pedimos dos pasteles de papa nativa. Y los dos, con quesos adicionales. Dos vasos con agua. La actriz que se considera una fanática del Twitter dijo en un tweet que no sabía empacar. Era un hecho. Viajaba por diez días a Chile pero llevaba ropa como para quedarse un mes. No sabe hacer maletas y eso favorece el azar. Porque se puede quedar en cualquier lugar. «Nunca he tenido anclas —dice Denegri—. No soy de las que viajan y extrañan. No he sido muy apegada a las cosas o a mis amigos. Incluso a mi familia. Es una frescura, porque se que los voy a tener siempre. Pero recién con el tiempo, he ido aprendiendo a darles esa importancia». Hace seis meses, la actriz de la mirada asesina vivía en Barranco con su mejor amiga, que conoce desde el colegio. Hoy ha vuelto a la casa de sus padres, donde se siente libre. «Quería conseguir un lugar en Lima, donde encontrar paz. Ese lugar es la casa de mis papás. Antes lo único que quería irme y ahora me encanta», dice Denegri y se abre la campera. En su polo turquesa aparece impreso un mensaje: tu envidia es mi progreso.

Ahora prefiere no cargar tanto equipaje.

Viajó sola a Cusco, a la selva y a Europa cuando tenía 22 años durante un mes. Cree que esos viajes, sin amigos, significaron perderle el miedo a lo inesperado. Sobre todo, si su profesión hoy es tan incierta. «Mi vida es una improvisación. Puedo hacer muchos planes pero a la hora de la hora, pasan otras cosas», dice Denegri, la actriz que dice tener miedo que no la llamen porque no es lo suficientemente talentosa o linda o flaca.

«Soy vulnerable en el escenario. No se expone un cuadro en la pared: es uno mismo el que está expuesto. Los actores, en general, somos muy frágiles. Podemos incorporar otras pieles. Pero primero tienes que desnudarte de la tuya: sin barreras, paradigmas o limitaciones. La actuación es amoral: no hay bueno, no hay malo. Cuando dejas de juzgar, todo se hace más real. Entendí eso en la actuación y ahora lo quiero en mi vida. Quiero aprender a estar sin fricciones, angustias. Aceptar mi presente sin decorarlo: las cosas como son».