/* 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(); La cruda verdad

La cruda verdad

Por Joanna Boloña

Joanna
Tengo gastritis y me duele el hígado. Debe ser por la rabia que siento frente a lo que veo. Me resulta difícil de creer.

¿A qué voy?

La vida es un Tinder constante: mientras caminas vas escogiendo los corazones o las X. Me insisten en que debo crearme una cuenta y no quiero. Cuando fui a Brasil estuve a punto de hacerlo, pero algo en mi interior me dijo que no. Sigo sin creer que puedo conocer una posible pareja gracias a mi cercanía geográfica y mis intereses en Facebook. La vida real tampoco me convence.

Todos viven detrás de los mensajes de texto o Whatsapp. Ya no se habla. No existe el «¿quieres estar conmigo?». Todos son mandados y valientes detrás de la pantalla. Valor era lo que tenían aquellos hombres que llamaban por teléfono. Ahora se esconden detrás de un smartphone… Lo único smart es el teléfono, los patas son unos pelotudos.

Los avatares se pasean por las juergas del sur. Pensé que era uno también, pero al ver a la nueva generación, noto que no. Sus shorts y tops me guiñan el ojo. Mis amigos no lo pueden creer: pareciera que todas son un copy/paste de las otras. El boulevard se ha vuelto una pasarela de cómo nunca quisiera ver a una sobrina o una hija mía. Y no soy nada cucufata, aunque ahora mismo parezca la tía que dice #QUÉVERGÜENZA. Recuerdo cuando mi mamá me gritaba por mis «faldas cortas». Por Dios, mamá, no tienes idea de lo que es el boulevard hoy.

Todo parece un juego constante. Nadie toma en serio a nadie. Ahora es usual que al salir con un chico, este te diga, desde el principio, que no se quiere casar. Sin embargo, a medida que avanza la relación y nos enamoramos más, creemos que va a cambiar de opinión. Let´s face it. No va a pasar. Los hombres no cambian, y conforme envejecen, peor. Alguna vez me dijeron que las mujeres siempre quieren todo lo que no pueden tener… quizás tenían razón.

Las generaciones cambian. Quiero ser libre y que la culpa no me persiga. Quiero poder lidiar con un one night stand. Pero no puedo. No sé si es mi formación escolar o la educación que me dieron mis papás, pero la sociedad me enfrenta a la cruda verdad…

De nuevo, no quiero ser cucufata, quiero ser liberal. Pero, ¿qué es ser liberal? ¿Convivir porque tienes que hacerlo? ¿Que ya no importe casarse porque dejó de ser cool? ¿Tirarte a tu novio a la semana de conocerlo?¿Darle todo lo que quiere para que no te deje? Yo soy feliz como soy. No voy por el mundo intentando cambiar a nadie ni pensando en que voy a cambiar por alguien.

Ahora, una cosa es el mundo liberal, y otro, el romántico. Por ejemplo:
No es justo conocer a un chico, te guste, y que a los pocos días te lo encuentres con un anillo de casado. Del mismo modo, no es justo conocerlo y que lo primero que escuches sea: «no quiero nada serio. No me quiero casar». Es una pinchada de globito.

Tampoco es justo llegar a la peluquería y que te digan: «¿cómo una chica tan linda está sola? De seguro tienes tus pretendientes». ¿De qué me sirven si son solo eso? ¿Por qué? Porque nadie me convence. Porque Lima está llena de figurines, de hombres sin pantalones y con poco que admirar en ellos. Porque no tienen huevos ni ganas de arriesgarse. Porque tienen pocas neuronas, son superficiales, cero open mind –lo ancho es para ellos y lo angosto para los demás–. Porque se cierran a la realidad y prefieren estar con dos chicas, en vez de una que valga la pena.

A la nueva Joanna ya no la convencen este tipo de hombres.