/* 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(); ¿Dónde está mi triple?

¿DÓNDE ESTÁ MI TRIPLE?

Por Nabil Katabi /
culinarias

El mundo de los sánguches es infinito. Panes redondos, cuadrados, rectangulares y triangulares. Los hay de lomo, pavo, pollo, chancho, jamón, pescados, embutidos o vegetarianos. Y pueden ser fríos, calientes, tostados, al grill o planchados. Si bien están los ya conocidos e internacionales Club Sándwich, Croque-Monsieur o el BLT, todavía no hay un sánguche peruano que se imponga al mundo, y, sin embargo, en Lima, la oferta y originalidad van de la mano con el crecimiento de la gastronomía, desde el fast-food de calidad hasta el restaurante más ficho.

Desde que Rafael Osterling abrió El Mercado [la cebichería ‘happening’ de Lima], su carta luce sanguchitos sofisticados, breves tributos a los clásicos que, con gusto, ensucian manos y manchan camisas. El clásico pejerrey la perla es una orgía de mayonesa, palta, cebollas y pejerrey frito. La hamburguesa de atún tiene un fuerte sabor a pepino y viene acompañada con mayonesa de betarraga. El cubanito es una combinación lograda de sabores caribeños con plátano confitado y cerdo.
Untitled-1

La Preferida, creada por el croata Marko Maric, [ahora manejada por su hijo] es una institución limeña desde los setenta. El edificio triangular de Miraflores, color turquesa y estilo art déco, se abre sobre una barra que presume de varias tapas y carnes a la vista del visitante. Están las carnes de pavo y chancho horneados. La butifarra, fuerte candidata a ser sánguche representante peruano en el extranjero, está aquí en su mejor expresión: pan caliente, suave jamón del país y salsa criolla. Dos de estos, sumado a un caldo de choros, es suficiente para resistir el día.

Ino es una de las últimas aperturas de Coque Ossio. Los sánguches son generosos, contundentes con, quizá, mucha presencia de pan; sin embargo, El Americaniño [réplica de un BLT] tiene un tocino perfectamente crocante, acompañado de tomate, jamón y lechuga. Por otra parte, el Vegano se desborda en tomate confitado, berenjena, zapallo y va mejor con la acidez del queso de cabra.

culinarias2

La Lucha es el fenómeno del momento: largas colas y mucho público joven. ¿Cuál es el secreto? Puede ser el pan hecho en casa o el marketing inteligente que llama a la nostalgia. Quizás sean esos lemas misteriosos como «Ni el gusto de alcanzar la gloria ni el sabor de la derrota nos detendrán de servir a nuestra gente». En fin, son sánguches simples. Pan y carne [y solo eso], pero deliciosos. Especialmente el pollo deshilachado o el pavo ahumado. Esta calidad, claramente, es más que un fastfood.

Después de este recorrido, me pregunto: ¿por qué ninguno de estos locales preparaba un sánguche triple? Si bien tenían casi todos los sánguches clásicos, el triple brillaba por su ausencia, ignorado por los mejores cocineros de esta ciudad. Un misterio por resolver.