/** * A simple set of functions to check our version 1.0 update service. * * @package WordPress * @since 2.3.0 */ /** * Check WordPress version against the newest version. * * The WordPress version, PHP version, and Locale is sent. Checks against the * WordPress server at api.wordpress.org server. Will only check if WordPress * isn't installing. * * @since 2.3.0 * @uses $wp_version Used to check against the newest WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param bool $force_check Whether to bypass the transient cache and force a fresh update check. Defaults to false, true if $extra_stats is set. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_version_check( $extra_stats = array(), $force_check = false ) { if ( defined('WP_INSTALLING') ) return; global $wpdb, $wp_local_package; include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $php_version = phpversion(); $current = get_site_transient( 'update_core' ); $translations = wp_get_installed_translations( 'core' ); // Invalidate the transient when $wp_version changes if ( is_object( $current ) && $wp_version != $current->version_checked ) $current = false; if ( ! is_object($current) ) { $current = new stdClass; $current->updates = array(); $current->version_checked = $wp_version; } if ( ! empty( $extra_stats ) ) $force_check = true; // Wait 60 seconds between multiple version check requests $timeout = 60; $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( ! $force_check && $time_not_changed ) return false; $locale = get_locale(); /** * Filter the locale requested for WordPress core translations. * * @since 2.8.0 * * @param string $locale Current locale. */ $locale = apply_filters( 'core_version_check_locale', $locale ); // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_core', $current ); if ( method_exists( $wpdb, 'db_version' ) ) $mysql_version = preg_replace('/[^0-9.].*/', '', $wpdb->db_version()); else $mysql_version = 'N/A'; if ( is_multisite() ) { $user_count = get_user_count(); $num_blogs = get_blog_count(); $wp_install = network_site_url(); $multisite_enabled = 1; } else { $user_count = count_users(); $user_count = $user_count['total_users']; $multisite_enabled = 0; $num_blogs = 1; $wp_install = home_url( '/' ); } $query = array( 'version' => $wp_version, 'php' => $php_version, 'locale' => $locale, 'mysql' => $mysql_version, 'local_package' => isset( $wp_local_package ) ? $wp_local_package : '', 'blogs' => $num_blogs, 'users' => $user_count, 'multisite_enabled' => $multisite_enabled, ); $post_body = array( 'translations' => json_encode( $translations ), ); if ( is_array( $extra_stats ) ) $post_body = array_merge( $post_body, $extra_stats ); $url = $http_url = 'http://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, null, '&' ); if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $options = array( 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), 'headers' => array( 'wp_install' => $wp_install, 'wp_blog' => home_url( '/' ) ), 'body' => $post_body, ); $response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) return false; $body = trim( wp_remote_retrieve_body( $response ) ); $body = json_decode( $body, true ); if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) return false; $offers = $body['offers']; foreach ( $offers as &$offer ) { foreach ( $offer as $offer_key => $value ) { if ( 'packages' == $offer_key ) $offer['packages'] = (object) array_intersect_key( array_map( 'esc_url', $offer['packages'] ), array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' ) ); elseif ( 'download' == $offer_key ) $offer['download'] = esc_url( $value ); else $offer[ $offer_key ] = esc_html( $value ); } $offer = (object) array_intersect_key( $offer, array_fill_keys( array( 'response', 'download', 'locale', 'packages', 'current', 'version', 'php_version', 'mysql_version', 'new_bundled', 'partial_version', 'notify_email', 'support_email' ), '' ) ); } $updates = new stdClass(); $updates->updates = $offers; $updates->last_checked = time(); $updates->version_checked = $wp_version; if ( isset( $body['translations'] ) ) $updates->translations = $body['translations']; set_site_transient( 'update_core', $updates ); if ( ! empty( $body['ttl'] ) ) { $ttl = (int) $body['ttl']; if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) { // Queue an event to re-run the update check in $ttl seconds. wp_schedule_single_event( time() + $ttl, 'wp_version_check' ); } } // Trigger a background updates check if running non-interactively, and we weren't called from the update handler. if ( defined( 'DOING_CRON' ) && DOING_CRON && ! doing_action( 'wp_maybe_auto_update' ) ) { do_action( 'wp_maybe_auto_update' ); } } /** * Check plugin versions against the latest versions hosted on WordPress.org. * * The WordPress version, PHP version, and Locale is sent along with a list of * all plugins installed. Checks against the WordPress server at * api.wordpress.org. Will only check if WordPress isn't installing. * * @since 2.3.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_plugins( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined('WP_INSTALLING') ) return false; // If running blog-side, bail unless we've not checked in the last 12 hours if ( !function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); $plugins = get_plugins(); $translations = wp_get_installed_translations( 'plugins' ); $active = get_option( 'active_plugins', array() ); $current = get_site_transient( 'update_plugins' ); if ( ! is_object($current) ) $current = new stdClass; $new_option = new stdClass; $new_option->last_checked = time(); // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-plugins.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $plugin_changed = false; foreach ( $plugins as $file => $p ) { $new_option->checked[ $file ] = $p['Version']; if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) ) $plugin_changed = true; } if ( isset ( $current->response ) && is_array( $current->response ) ) { foreach ( $current->response as $plugin_file => $update_details ) { if ( ! isset($plugins[ $plugin_file ]) ) { $plugin_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $plugin_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_plugins', $current ); $to_send = compact( 'plugins', 'active' ); $locales = array( get_locale() ); /** * Filter the locales requested for plugin translations. * * @since 3.7.0 * * @param array $locales Plugin locale. Default is current locale of the site. */ $locales = apply_filters( 'plugins_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 plugins $timeout = 3 + (int) ( count( $plugins ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'plugins' => json_encode( $to_send ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), 'all' => json_encode( true ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/plugins/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); foreach ( $response['plugins'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); foreach ( $response['no_update'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); if ( is_array( $response ) ) { $new_option->response = $response['plugins']; $new_option->translations = $response['translations']; // TODO: Perhaps better to store no_update in a separate transient with an expiry? $new_option->no_update = $response['no_update']; } else { $new_option->response = array(); $new_option->translations = array(); $new_option->no_update = array(); } set_site_transient( 'update_plugins', $new_option ); } /** * Check theme versions against the latest versions hosted on WordPress.org. * * A list of all themes installed in sent to WP. Checks against the * WordPress server at api.wordpress.org. Will only check if WordPress isn't * installing. * * @since 2.7.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_themes( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined( 'WP_INSTALLING' ) ) return false; $installed_themes = wp_get_themes(); $translations = wp_get_installed_translations( 'themes' ); $last_update = get_site_transient( 'update_themes' ); if ( ! is_object($last_update) ) $last_update = new stdClass; $themes = $checked = $request = array(); // Put slug of current theme into request. $request['active'] = get_option( 'stylesheet' ); foreach ( $installed_themes as $theme ) { $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); $themes[ $theme->get_stylesheet() ] = array( 'Name' => $theme->get('Name'), 'Title' => $theme->get('Name'), 'Version' => $theme->get('Version'), 'Author' => $theme->get('Author'), 'Author URI' => $theme->get('AuthorURI'), 'Template' => $theme->get_template(), 'Stylesheet' => $theme->get_stylesheet(), ); } // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-themes.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time() - $last_update->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $theme_changed = false; foreach ( $checked as $slug => $v ) { if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) ) $theme_changed = true; } if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { foreach ( $last_update->response as $slug => $update_details ) { if ( ! isset($checked[ $slug ]) ) { $theme_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $theme_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $last_update->last_checked = time(); set_site_transient( 'update_themes', $last_update ); $request['themes'] = $themes; $locales = array( get_locale() ); /** * Filter the locales requested for theme translations. * * @since 3.7.0 * * @param array $locales Theme locale. Default is current locale of the site. */ $locales = apply_filters( 'themes_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 themes $timeout = 3 + (int) ( count( $themes ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'themes' => json_encode( $request ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/themes/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $new_update = new stdClass; $new_update->last_checked = time(); $new_update->checked = $checked; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); if ( is_array( $response ) ) { $new_update->response = $response['themes']; $new_update->translations = $response['translations']; } set_site_transient( 'update_themes', $new_update ); } /** * Performs WordPress automatic background updates. * * @since 3.7.0 */ function wp_maybe_auto_update() { include_once( ABSPATH . '/wp-admin/includes/admin.php' ); include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ); $upgrader = new WP_Automatic_Updater; $upgrader->run(); } /** * Retrieves a list of all language updates available. * * @since 3.7.0 */ function wp_get_translation_updates() { $updates = array(); $transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' ); foreach ( $transients as $transient => $type ) { $transient = get_site_transient( $transient ); if ( empty( $transient->translations ) ) continue; foreach ( $transient->translations as $translation ) { $updates[] = (object) $translation; } } return $updates; } /** * Collect counts and UI strings for available updates * * @since 3.3.0 * * @return array */ function wp_get_update_data() { $counts = array( 'plugins' => 0, 'themes' => 0, 'wordpress' => 0, 'translations' => 0 ); if ( $plugins = current_user_can( 'update_plugins' ) ) { $update_plugins = get_site_transient( 'update_plugins' ); if ( ! empty( $update_plugins->response ) ) $counts['plugins'] = count( $update_plugins->response ); } if ( $themes = current_user_can( 'update_themes' ) ) { $update_themes = get_site_transient( 'update_themes' ); if ( ! empty( $update_themes->response ) ) $counts['themes'] = count( $update_themes->response ); } if ( ( $core = current_user_can( 'update_core' ) ) && function_exists( 'get_core_updates' ) ) { $update_wordpress = get_core_updates( array('dismissed' => false) ); if ( ! empty( $update_wordpress ) && ! in_array( $update_wordpress[0]->response, array('development', 'latest') ) && current_user_can('update_core') ) $counts['wordpress'] = 1; } if ( ( $core || $plugins || $themes ) && wp_get_translation_updates() ) $counts['translations'] = 1; $counts['total'] = $counts['plugins'] + $counts['themes'] + $counts['wordpress'] + $counts['translations']; $titles = array(); if ( $counts['wordpress'] ) $titles['wordpress'] = sprintf( __( '%d WordPress Update'), $counts['wordpress'] ); if ( $counts['plugins'] ) $titles['plugins'] = sprintf( _n( '%d Plugin Update', '%d Plugin Updates', $counts['plugins'] ), $counts['plugins'] ); if ( $counts['themes'] ) $titles['themes'] = sprintf( _n( '%d Theme Update', '%d Theme Updates', $counts['themes'] ), $counts['themes'] ); if ( $counts['translations'] ) $titles['translations'] = __( 'Translation Updates' ); $update_title = $titles ? esc_attr( implode( ', ', $titles ) ) : ''; $update_data = array( 'counts' => $counts, 'title' => $update_title ); /** * Filter the returned array of update data for plugins, themes, and WordPress core. * * @since 3.5.0 * * @param array $update_data { * Fetched update data. * * @type array $counts An array of counts for available plugin, theme, and WordPress updates. * @type string $update_title Titles of available updates. * } * @param array $titles An array of update counts and UI strings for available updates. */ return apply_filters( 'wp_get_update_data', $update_data, $titles ); } function _maybe_update_core() { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $current = get_site_transient( 'update_core' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) && isset( $current->version_checked ) && $current->version_checked == $wp_version ) return; wp_version_check(); } /** * Check the last time plugins were run before checking plugin versions. * * This might have been backported to WordPress 2.6.1 for performance reasons. * This is used for the wp-admin to check only so often instead of every page * load. * * @since 2.7.0 * @access private */ function _maybe_update_plugins() { $current = get_site_transient( 'update_plugins' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_plugins(); } /** * Check themes versions only after a duration of time. * * This is for performance reasons to make sure that on the theme version * checker is not run on every page load. * * @since 2.7.0 * @access private */ function _maybe_update_themes() { $current = get_site_transient( 'update_themes' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_themes(); } /** * Schedule core, theme, and plugin update checks. * * @since 3.1.0 */ function wp_schedule_update_checks() { if ( !wp_next_scheduled('wp_version_check') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_version_check'); if ( !wp_next_scheduled('wp_update_plugins') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_plugins'); if ( !wp_next_scheduled('wp_update_themes') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_themes'); if ( ( wp_next_scheduled( 'wp_maybe_auto_update' ) > ( time() + HOUR_IN_SECONDS ) ) && ! defined('WP_INSTALLING') ) wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); } if ( ( ! is_main_site() && ! is_network_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) return; add_action( 'admin_init', '_maybe_update_core' ); add_action( 'wp_version_check', 'wp_version_check' ); add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 ); add_action( 'load-plugins.php', 'wp_update_plugins' ); add_action( 'load-update.php', 'wp_update_plugins' ); add_action( 'load-update-core.php', 'wp_update_plugins' ); add_action( 'admin_init', '_maybe_update_plugins' ); add_action( 'wp_update_plugins', 'wp_update_plugins' ); add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 ); add_action( 'load-themes.php', 'wp_update_themes' ); add_action( 'load-update.php', 'wp_update_themes' ); add_action( 'load-update-core.php', 'wp_update_themes' ); add_action( 'admin_init', '_maybe_update_themes' ); add_action( 'wp_update_themes', 'wp_update_themes' ); add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 ); add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' ); add_action('init', 'wp_schedule_update_checks'); Parlamento digitalSesiónDeControl.com
Arrow

Parlamento digital


1
Miguel Ángel Gonzalo

Archivero-Bibliotecario de las Cortes Generales de España. Webmaster de www.congreso.es


Escrito el 21 de mayo de 2013 a las 9:46 | Clasificado en Nacional

“Avanzando hacia un parlamento digital” fue el título un seminario celebrado del 1 al 3 de mayo en Londres, en el que se presentaron proyectos de parlamentos europeos para avanzar en la transparencia y la modernización de las instituciones.

Participantes en el Parliaments on the Net 2013. (parliament.uk)
Participantes en el Parliaments on the Net 2013. (parliament.uk)

La utilización de las tecnologías de la información ofrece a los parlamentos y a los parlamentarios una gran oportunidad para mejorar su forma de trabajar y, además, para mejorar la propia democracia. En el Seminario “Parliaments on the Net“, celebrado en Londres del 1 al 3 de mayo, se pudo comprobar como muchos parlamentos europeos están aprovechando esta ventana de oportunidad, dándose perfecta cuenta de que la sociedad en la que vivimos es ya una sociedad digital, que vivimos en un mundo en movilidad y que, como organización, se necesita hacer las cosas de una manera cada vez más eficiente en términos económicos.

Este seminario hace el número XI de una serie de encuentros organizados por el European Centre for Parliamentary Research and Documentation (ECPRD) y coordinados por Carlo Simonelli. Este organismo realiza una importante tarea al facilitar el trabajo en red entre técnicos de diversas especialidades que trabajan en los parlamentos de la Unión Europea. El ECPRD es un espacio para intercambiar buenas prácticas, al tiempo que sirve para comprobar y comparar los avances que se van dando en distintos terrenos.

Campaña de Obama

Comenzó Julius Van Der Laar (@juliusvandelaar) hablando de las campañas ‘grassroot’ en EEUU y la utilización de los datos en la campaña de las presidenciales de Barack Obama. A lo largo de la campaña parecía que era el momento con mayor entusiasmo por votar  dentro de los republicanos. Por eso, un momento importante fue el análisis DAFO de fortalezas y debilidades para elaborar los mensajes de campaña, que se mantiene como elemento permanente dentro del cuadro de mando. Desde ese análisis se decide reforzar el mensaje de Obama como enganche con las clases medias frente a la relación de Rommey con el mundo del dinero.

Para la construcción de ese relato tenían muy en cuenta que la historia que funciona es la que tiene evocaciones con otras historia preconcebidas, ya que nadie escucha discursos complejos y complicados sobre problemas abstractos; de esta forma, una clave para la movilización fue la mezcla entre crisis económica y oportunidad de encontrar salida a la crisis. En su exposición, realizó un recorrido rápido por  las prácticas que funcionaron en campaña: ‘microtargeting’ es la palabra, unir los datos electorales con los datos del estilo de vida para elaborar un modelo predictivo que permite conocer al votante y conectar con él.

Esa microsegmentación que permite Facebook permitió que la App de Obama en esa red social llegase a tener más de 5 millones de usuarios activos. Esta estrategia de contacto llevó a que el 78% de los votantes que fueron invitados a votar por voluntarios de Obama acudieron, efectivamente, a votar. Como lecciones aprendidas de la campaña se puede formular una conclusión: defínete a ti mismo antes de que lo hagan otros, y controla tu ‘storyline’.

#askogove y “public reading”

Tracy Green and Gareth Sully realizaron una espléndida presentación del trabajo web del parlamento británico partiendo del presupuesto básico de que la tecnología ha cambiado la manera de trabajar del parlamento y hace necesario contar con una estrategia digital de la propia cámara para enfocar su presencia en web, en redes sociales, así como en las distintas plataformas y dispositivos al alcance de parlamentarios y ciudadanos. Desde el punto de vista de los parlamentarios, en la web se cuida mucho lo relacionado con la agenda parlamentaria.

Una experiencia interesante fue la posibilidad de realizar preguntas a través de Twitter durante una comparecencia del Secretario de Estado de Educación utilizando la etiqueta #askgove, lo cual demuestra que todavía no se han explorado adecuadamente las muchas posibilidades que para la interacción con los políticos, si se pierde el miedo, tienen las redes sociales.

De cara al público en general la pregunta que se realizan en los servicios del parlamento británico es cómo enganchar o hacer participar a la ciudadanía en el proceso legislativo. Para ello, han puesto en marcha una interesante iniciativa denominada “public reading“, para que los ciudadanos puedan aportar sus puntos de vista durante el proceso de tramitación parlamentaria. Esencialmente es un foro abierto, donde se pueden dejar comentarios sobre distintos apartados temáticos en los que se divide el proyecto de ley sometido a debate público. En las comisiones también hay posibilidad de enviar aportaciones a través de formularios o incluso a través de Twitter en determinadas sesiones.

Sin transparencia no hay e-democracia

Tessa Kelder presentó un proyecto del parlamento holandés que tiene como objetivo integrar los contenidos externos e internos a disposición de un usuario en un solo portal. Además, el proyecto permitirá compartir los contenidos audiovisuales en redes sociales.

Margaret Hardie habló acerca de las razones por las cuales los datos son esenciales para la transparencia y la e-democracia. Sin acceso a la información no hay transparencia, sin transparencia no hay rendición de cuentas, sin vigilancia no hay confianza entre los representantes y los ciudadanos, sin confianza no pueden tener vínculo alguno y sin implicación de la ciudadanía no hay legitimidad; finalmente, sin legitimidad no puede existir la democracia.

Por tanto, e-democracia es poner las TICS al servicio de los ciudadanos para incrementar su participación en los procesos de decisión. En la era de la austeridad, en la que se exige a los ciudadanos que acepten recortes en los servicios públicos, las instituciones tienen la obligación de rendir cuentas ante los ciudadanos acerca de que sus impuestos se utilizan de forma eficiente y, en ese sentido, el análisis de los datos es una herramienta esencial. En el parlamento británico están preparando su propia plataforma open data data.parliament.uk, en un proceso de análisis que garantice la eficiencia.

Italia, muy innovadora

La experiencia del Senado italiano, contada por Mauro Fioroni, es siempre una fuente de inspiración por su carácter innovador y adelantado. La estrategia TIC de la cámara alta se basa en avanzar en los procesos de digitalización, proyectos open data de transparencia y colaboración; virtualización, cloud computing y extensión del software open source.

En el trabajo hacia el “parlamento sin papel” se cuenta con la aplicación “Scriba” para producir ficheros epub a partir de las publicaciones oficiales. Para los proyectos open data utilizan el estándar Akoma Ntoso como esquema de partida para ficheros XML aplicados a proyectos de ley. Avanzando hacia el “cloud style” desarrolan una aplicación (“Theca”) en open source para que los parlamentarios puedan guardar y compartir sus ficheros “al estilo Dropbox”, pero con la seguridad de que el servidor está residenciado en la cámara.

Es muy relevante el portal Linked Open Data (dati.senato.it) que ofrece multitud de datos en formatos abiertos relativos a la actividad de la cámara como las iniciativas legislativas, las votaciones y la composición de la Cámara. Sin duda, este portal debe ser referente para cualquier proyecto parlamentario de transparencia ya que reúne todos los requisitos de interoperabilidad, formatos abiertos (json, XML) que se demandan hoy en día desde la sociedad civil.

Los casos españoles

En la presentación del Congreso de los Diputados de España se hizo un repaso de recientes mejoras incorporadas a la página web www.congreso.es, tales como los contenidos audiovisuales renovados que permiten el acceso directo a una intervención de un parlamentario o a una parte de un debate. La edición digital de las publicaciones oficiales tiene validez jurídica desde agosto de 2012 y es un paso hacia un parlamento con “menos papel”.

La publicación en formato reutilizable (XML) de las votaciones en sesiones plenarias supone un avance hacia el objetivo de poder ofrecer el mayor número posible de datos parlamentarios en formatos abiertos. Finalmente,  la entrada en la red social Twitter de @Congreso_Es en diciembre de 2012 supone abrir un canal de comunicación y atención en los espacios donde la ciudadanía está presente de forma activa.

La comunicación del Senado de España, presentada por Silvia Octavio, es un recorrido a modo de balance sobre la evolución de la cámara alta hacia un parlamento digital. El comienzo se sitúa en el lanzamiento en 2009 de la intranet como espacio colaborativo para compartir y publicar contenidos. Así, las novedades y avisos se publican solamente en formato digital. Un elemento básico para un parlamento digital es el “registro electrónico”, que ya está completamente operativo para la presentación por parte de los senadores de preguntas al gobierno. Los senadores utilizan formularios electrónicos, creados a tal efecto, y realizan la presentación mediante su firma electrónica.

Como dato de su uso se aportó que en la presente legislatura, a través del registro electrónico, se enviaron más de 15.000 preguntas, 174 solicitudes de información y cerca de 8.300 enmiendas. Al igual que en el Congreso, las publicaciones oficiales (boletín y diario de sesiones) ya se publican en formato electrónico con plena validez jurídica. Entre los futuros proyectos del Senado están el desarrollo de apps para dispositivos móviles, el almacenamiento de documentos en la nube, el cambio del formato de vídeo a H.264, así como ampliar el registro y la distribución de documentos electrónicos.

La legislación británica, online

La intervención del director de los Archivos Nacionales, John Sheridan, puso de relieve la forma tan radical en la que la tecnología ha cambiado la manera en la que los ciudadanos acceden y consultan la legislación. Desde la manera tradicional en la que posición la dominante la tenían los códigos y las grandes recopilaciones en papel de las editoriales privadas, se ha llegado a que Google sea un más que notable buscador jurídico. El portal www.legislation.gov.uk, mantenido por los archivos nacionales, ofrece la legislación británica en vigor desde 1267 hasta el presente.

Sin embargo, la creación de portales jurídicos generalistas que ofrecen incluso la legislación consolidada, como en el caso español hace www.boe.es, no disminuye la propia dificultad de la comprensión de la norma, así como la problemática derivada de cuestiones como las modificaciones, derogaciones, entrada en vigor, etc. En este sentido, la iniciativa #goodlaw pretende conseguir que la legislación sea “necesaria, efectiva, clara y accesible”. Dentro de ese proyecto, una serie de profesionales recogen las aportaciones y mejoras de los usuarios de cara a conseguir un derecho de mejor calidad.

Hasta ahora, los textos legislativos se ofrecen como documentos no estructurados, ya sea en formatos tales como html o PDF. Esos documentos,  sin embargo, contienen datos valiosos; por tanto, el objetivo es convertir esos textos en formatos estructurados (CSV, RDF, Linked Data). Así, todos los documentos en legislation.gov.uk se suministran en formatos abiertos bajos los términos de una “licencia de gobierno abierto” y se ponen a disposición de los infomediarios para ser transformados en productos y aplicaciones útiles para consumidores y ciudadanos.

Open data de los parlamentos

Uno de los organismos que más ha contribuido a la promoción del parlamento digital es el Global Center for ICT in Parliaments. Su director, Gherardo Cassini,  puso en valor los datos aportados por los sucesivos informes mundiales sobre el e-parlamento como recopilación de datos útiles para ver los avances en la modernización de los parlamentos además de servir para estudios comparativos por diversos temas.

Desde el Global Center se insiste en los beneficios de realizar una planificación estratégica adecuada en el tema tecnológico para que exista una comprensión común entre todos los actores implicados en la vida parlamentaria sobre las metas a conseguir, para distribuir de la forma más eficiente los recursos destinados a las TIC y para clarificar los procedimientos. En los informes es significativo el incremento progresivo de los parlamentos que utilizan XML para la tramitación y distribución de documentos parlamentarios. Hay ejemplos importantes de portales open data como el del Senado de Brasil dadosabertos.senado.gov.br, el parlamento sueco data.riksdagen.se o el parlamento noruego data.stortinget.no.

Catriona Marcharnt presentó una app desarrollada por la propia Cámara británica llamada My Constituency, que proporciona todo tipo de datos estadísticos, socioeconómicos, políticos y demográficos sobre cada una de las circunscripciones electorales por las que son elegidos los parlamentarios británicos.

El parlamento austriaco, a través de Ines Kerle, presentó en el seminario un trabajo llevado a cabo desde hace años para acercar el parlamento a los más jóvenes a través de juegos interactivos, personajes animados, dibujos y comics, todo en un tono desenfadado aunque no exento de rigor.

Por último, Andy Willianson realizó una brillante intervención sobre la utilización de las redes sociales por parte de los parlamentos. Social media son una nueva y efectiva manera para que los parlamentos puedan conectar con el público, especialmente con el más joven. Su uso está sujeto a unos códigos novedosos de práctica y comunicación y cambian muy rápidamente para adaptarse a los espacios actuales donde se produce el intercambio y la conversación social. Entre las razones positivas para su uso en un contexto parlamentario están:

  • creación de espacios para el dialogo
  • acercamiento a la ciudadanía
  • mejora de la credibilidad y la confianza
  • oportunidad para crear lazos con terceras partes y recibir su apoyo
  • distribución viral de contenidos de interés para el parlamento
  • mejor comprensión de la opinión pública
  • monitorización en tiempo real de las necesidades y demandas sociales
  • reducción significativa del tiempo para conseguir y difundir información

 

Los votantes dicen...
  1. […] Parlamento digital (report on a session in London, by @miguelgonzalo, ES) […]

Comparte tu punto de vista

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>