/**
 * @package Akismet
 */
/*
Plugin Name: Akismet
Plugin URI: http://akismet.com/
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from comment and trackback spam</strong>. It keeps your site protected from spam even while you sleep. To get started: 1) Click the "Activate" link to the left of this description, 2) <a href="http://akismet.com/get/?return=true">Sign up for an Akismet API key</a>, and 3) Go to your <a href="plugins.php?page=akismet-key-config">Akismet configuration</a> page, and save your API key.
Version: 2.5.3
Author: Automattic
Author URI: http://automattic.com/wordpress-plugins/
License: GPLv2 or later
*/

/*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

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 Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

define('AKISMET_VERSION', '2.5.3');
define('AKISMET_PLUGIN_URL', plugin_dir_url( __FILE__ ));

/** If you hardcode a WP.com API key here, all key config screens will be hidden */
if ( defined('WPCOM_API_KEY') )
	$wpcom_api_key = constant('WPCOM_API_KEY');
else
	$wpcom_api_key = '';

// Make sure we don't expose any info if called directly
if ( !function_exists( 'add_action' ) ) {
	echo "Hi there!  I'm just a plugin, not much I can do when called directly.";
	exit;
}

if ( isset($wp_db_version) && $wp_db_version <= 9872 )
	include_once dirname( __FILE__ ) . '/legacy.php';

include_once dirname( __FILE__ ) . '/widget.php';

if ( is_admin() )
	require_once dirname( __FILE__ ) . '/admin.php';

function akismet_init() {
	global $wpcom_api_key, $akismet_api_host, $akismet_api_port;

	if ( $wpcom_api_key )
		$akismet_api_host = $wpcom_api_key . '.rest.akismet.com';
	else
		$akismet_api_host = get_option('wordpress_api_key') . '.rest.akismet.com';

	$akismet_api_port = 80;
}
add_action('init', 'akismet_init');

function akismet_get_key() {
	global $wpcom_api_key;
	if ( !empty($wpcom_api_key) )
		return $wpcom_api_key;
	return get_option('wordpress_api_key');
}

function akismet_verify_key( $key, $ip = null ) {
	global $akismet_api_host, $akismet_api_port, $wpcom_api_key;
	$blog = urlencode( get_option('home') );
	if ( $wpcom_api_key )
		$key = $wpcom_api_key;
	$response = akismet_http_post("key=$key&blog=$blog", 'rest.akismet.com', '/1.1/verify-key', $akismet_api_port, $ip);
	if ( !is_array($response) || !isset($response[1]) || $response[1] != 'valid' && $response[1] != 'invalid' )
		return 'failed';
	return $response[1];
}

// if we're in debug or test modes, use a reduced service level so as not to polute training or stats data
function akismet_test_mode() {
	if ( defined('AKISMET_TEST_MODE') && AKISMET_TEST_MODE )
		return true;
	return false;
}

// return a comma-separated list of role names for the given user
function akismet_get_user_roles($user_id ) {
	$roles = false;
	
	if ( !class_exists('WP_User') )
		return false;
	
	if ( $user_id > 0 ) {
		$comment_user = new WP_User($user_id);
		if ( isset($comment_user->roles) )
			$roles = join(',', $comment_user->roles);
	}

	if ( is_multisite() && is_super_admin( $user_id ) ) {
		if ( empty( $roles ) ) {
			$roles = 'super_admin';
		} else {
			$comment_user->roles[] = 'super_admin';
			$roles = join( ',', $comment_user->roles );
		}
	}

	return $roles;
}

// Returns array with headers in $response[0] and body in $response[1]
function akismet_http_post($request, $host, $path, $port = 80, $ip=null) {
	global $wp_version;

	$akismet_ua = "WordPress/{$wp_version} | ";
	$akismet_ua .= 'Akismet/' . constant( 'AKISMET_VERSION' );

	$content_length = strlen( $request );

	$http_host = $host;
	// use a specific IP if provided
	// needed by akismet_check_server_connectivity()
	if ( $ip && long2ip( ip2long( $ip ) ) ) {
		$http_host = $ip;
	} else {
		$http_host = $host;
	}
	
	// use the WP HTTP class if it is available
	if ( function_exists( 'wp_remote_post' ) ) {
		$http_args = array(
			'body'			=> $request,
			'headers'		=> array(
				'Content-Type'	=> 'application/x-www-form-urlencoded; ' .
									'charset=' . get_option( 'blog_charset' ),
				'Host'			=> $host,
				'User-Agent'	=> $akismet_ua
			),
			'httpversion'	=> '1.0',
			'timeout'		=> 15
		);
		$akismet_url = "http://{$http_host}{$path}";
		$response = wp_remote_post( $akismet_url, $http_args );
		if ( is_wp_error( $response ) )
			return '';

		return array( $response['headers'], $response['body'] );
	} else {
		$http_request  = "POST $path HTTP/1.0\r\n";
		$http_request .= "Host: $host\r\n";
		$http_request .= 'Content-Type: application/x-www-form-urlencoded; charset=' . get_option('blog_charset') . "\r\n";
		$http_request .= "Content-Length: {$content_length}\r\n";
		$http_request .= "User-Agent: {$akismet_ua}\r\n";
		$http_request .= "\r\n";
		$http_request .= $request;
		
		$response = '';
		if( false != ( $fs = @fsockopen( $http_host, $port, $errno, $errstr, 10 ) ) ) {
			fwrite( $fs, $http_request );

			while ( !feof( $fs ) )
				$response .= fgets( $fs, 1160 ); // One TCP-IP packet
			fclose( $fs );
			$response = explode( "\r\n\r\n", $response, 2 );
		}
		return $response;
	}
}

// filter handler used to return a spam result to pre_comment_approved
function akismet_result_spam( $approved ) {
	// bump the counter here instead of when the filter is added to reduce the possibility of overcounting
	if ( $incr = apply_filters('akismet_spam_count_incr', 1) )
		update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr );
	// this is a one-shot deal
	remove_filter( 'pre_comment_approved', 'akismet_result_spam' );
	return 'spam';
}

function akismet_result_hold( $approved ) {
	// once only
	remove_filter( 'pre_comment_approved', 'akismet_result_hold' );
	return '0';
}

// how many approved comments does this author have?
function akismet_get_user_comments_approved( $user_id, $comment_author_email, $comment_author, $comment_author_url ) {
	global $wpdb;
	
	if ( !empty($user_id) )
		return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->comments WHERE user_id = %d AND comment_approved = 1", $user_id ) );
		
	if ( !empty($comment_author_email) )
		return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_author_email = %s AND comment_author = %s AND comment_author_url = %s AND comment_approved = 1", $comment_author_email, $comment_author, $comment_author_url ) );
		
	return 0;
}

function akismet_microtime() {
	$mtime = explode( ' ', microtime() );
	return $mtime[1] + $mtime[0];
}

// log an event for a given comment, storing it in comment_meta
function akismet_update_comment_history( $comment_id, $message, $event=null ) {
	global $current_user;

	// failsafe for old WP versions
	if ( !function_exists('add_comment_meta') )
		return false;
	
	$user = '';
	if ( is_object($current_user) && isset($current_user->user_login) )
		$user = $current_user->user_login;

	$event = array(
		'time' => akismet_microtime(),
		'message' => $message,
		'event' => $event,
		'user' => $user,
	);

	// $unique = false so as to allow multiple values per comment
	$r = add_comment_meta( $comment_id, 'akismet_history', $event, false );
}

// get the full comment history for a given comment, as an array in reverse chronological order
function akismet_get_comment_history( $comment_id ) {
	
	// failsafe for old WP versions
	if ( !function_exists('add_comment_meta') )
		return false;

	$history = get_comment_meta( $comment_id, 'akismet_history', false );
	usort( $history, 'akismet_cmp_time' );
	return $history;
}

function akismet_cmp_time( $a, $b ) {
	return $a['time'] > $b['time'] ? -1 : 1;
}

// this fires on wp_insert_comment.  we can't update comment_meta when akismet_auto_check_comment() runs
// because we don't know the comment ID at that point.
function akismet_auto_check_update_meta( $id, $comment ) {
	global $akismet_last_comment;

	// failsafe for old WP versions
	if ( !function_exists('add_comment_meta') )
		return false;

	// wp_insert_comment() might be called in other contexts, so make sure this is the same comment
	// as was checked by akismet_auto_check_comment
	if ( is_object($comment) && !empty($akismet_last_comment) && is_array($akismet_last_comment) ) {
		if ( intval($akismet_last_comment['comment_post_ID']) == intval($comment->comment_post_ID)
			&& $akismet_last_comment['comment_author'] == $comment->comment_author
			&& $akismet_last_comment['comment_author_email'] == $comment->comment_author_email ) {
				// normal result: true or false
				if ( $akismet_last_comment['akismet_result'] == 'true' ) {
					update_comment_meta( $comment->comment_ID, 'akismet_result', 'true' );
					akismet_update_comment_history( $comment->comment_ID, __('Akismet caught this comment as spam'), 'check-spam' );
					if ( $comment->comment_approved != 'spam' )
						akismet_update_comment_history( $comment->comment_ID, sprintf( __('Comment status was changed to %s'), $comment->comment_approved), 'status-changed'.$comment->comment_approved );
				} elseif ( $akismet_last_comment['akismet_result'] == 'false' ) {
					update_comment_meta( $comment->comment_ID, 'akismet_result', 'false' );
					akismet_update_comment_history( $comment->comment_ID, __('Akismet cleared this comment'), 'check-ham' );
					if ( $comment->comment_approved == 'spam' ) {
						if ( wp_blacklist_check($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent) )
							akismet_update_comment_history( $comment->comment_ID, __('Comment was caught by wp_blacklist_check'), 'wp-blacklisted' );
						else
							akismet_update_comment_history( $comment->comment_ID, sprintf( __('Comment status was changed to %s'), $comment->comment_approved), 'status-changed-'.$comment->comment_approved );
					}
				// abnormal result: error
				} else {
					update_comment_meta( $comment->comment_ID, 'akismet_error', time() );
					akismet_update_comment_history( $comment->comment_ID, sprintf( __('Akismet was unable to check this comment (response: %s), will automatically retry again later.'), $akismet_last_comment['akismet_result']), 'check-error' );
				}
				
				// record the complete original data as submitted for checking
				if ( isset($akismet_last_comment['comment_as_submitted']) )
					update_comment_meta( $comment->comment_ID, 'akismet_as_submitted', $akismet_last_comment['comment_as_submitted'] );
		}
	}
}

add_action( 'wp_insert_comment', 'akismet_auto_check_update_meta', 10, 2 );


function akismet_auto_check_comment( $commentdata ) {
	global $akismet_api_host, $akismet_api_port, $akismet_last_comment;

	$comment = $commentdata;
	$comment['user_ip']    = $_SERVER['REMOTE_ADDR'];
	$comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
	$comment['referrer']   = $_SERVER['HTTP_REFERER'];
	$comment['blog']       = get_option('home');
	$comment['blog_lang']  = get_locale();
	$comment['blog_charset'] = get_option('blog_charset');
	$comment['permalink']  = get_permalink($comment['comment_post_ID']);
	
	$comment['user_role'] = akismet_get_user_roles($comment['user_ID']);

	$akismet_nonce_option = apply_filters( 'akismet_comment_nonce', get_option( 'akismet_comment_nonce' ) );
	$comment['akismet_comment_nonce'] = 'inactive';
	if ( $akismet_nonce_option == 'true' || $akismet_nonce_option == '' ) {
		$comment['akismet_comment_nonce'] = 'failed';
		if ( isset( $_POST['akismet_comment_nonce'] ) && wp_verify_nonce( $_POST['akismet_comment_nonce'], 'akismet_comment_nonce_' . $comment['comment_post_ID'] ) )
			$comment['akismet_comment_nonce'] = 'passed';

		// comment reply in wp-admin
		if ( isset( $_POST['_ajax_nonce-replyto-comment'] ) && check_ajax_referer( 'replyto-comment', '_ajax_nonce-replyto-comment' ) )
			$comment['akismet_comment_nonce'] = 'passed';

	}

	if ( akismet_test_mode() )
		$comment['is_test'] = 'true';
		
	foreach ($_POST as $key => $value ) {
		if ( is_string($value) )
			$comment["POST_{$key}"] = $value;
	}

	$ignore = array( 'HTTP_COOKIE', 'HTTP_COOKIE2', 'PHP_AUTH_PW' );

	foreach ( $_SERVER as $key => $value ) {
		if ( !in_array( $key, $ignore ) && is_string($value) )
			$comment["$key"] = $value;
		else
			$comment["$key"] = '';
	}

	$query_string = '';
	foreach ( $comment as $key => $data )
		$query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';
		
	$commentdata['comment_as_submitted'] = $comment;

	$response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
	$commentdata['akismet_result'] = $response[1];
	if ( 'true' == $response[1] ) {
		// akismet_spam_count will be incremented later by akismet_result_spam()
		add_filter('pre_comment_approved', 'akismet_result_spam');

		do_action( 'akismet_spam_caught' );

		$post = get_post( $comment['comment_post_ID'] );
		$last_updated = strtotime( $post->post_modified_gmt );
		$diff = time() - $last_updated;
		$diff = $diff / 86400;
		
		if ( $post->post_type == 'post' && $diff > 30 && get_option( 'akismet_discard_month' ) == 'true' && empty($comment['user_ID']) ) {
			// akismet_result_spam() won't be called so bump the counter here
			if ( $incr = apply_filters('akismet_spam_count_incr', 1) )
				update_option( 'akismet_spam_count', get_option('akismet_spam_count') + $incr );
			wp_redirect( $_SERVER['HTTP_REFERER'] );
			die();
		}
	}
	
	// if the response is neither true nor false, hold the comment for moderation and schedule a recheck
	if ( 'true' != $response[1] && 'false' != $response[1] ) {
		add_filter('pre_comment_approved', 'akismet_result_hold');
		wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' );
	}
	
	if ( function_exists('wp_next_scheduled') && function_exists('wp_schedule_event') ) {
		// WP 2.1+: delete old comments daily
		if ( !wp_next_scheduled('akismet_scheduled_delete') )
			wp_schedule_event(time(), 'daily', 'akismet_scheduled_delete');
	} elseif ( (mt_rand(1, 10) == 3) ) {
		// WP 2.0: run this one time in ten
		akismet_delete_old();
	}
	$akismet_last_comment = $commentdata;
	return $commentdata;
}

add_action('preprocess_comment', 'akismet_auto_check_comment', 1);

function akismet_delete_old() {
	global $wpdb;
	$now_gmt = current_time('mysql', 1);
	$comment_ids = $wpdb->get_col("SELECT comment_id FROM $wpdb->comments WHERE DATE_SUB('$now_gmt', INTERVAL 15 DAY) > comment_date_gmt AND comment_approved = 'spam'");
	if ( empty( $comment_ids ) )
		return;
		
	$comma_comment_ids = implode( ', ', array_map('intval', $comment_ids) );

	do_action( 'delete_comment', $comment_ids );
	$wpdb->query("DELETE FROM $wpdb->comments WHERE comment_id IN ( $comma_comment_ids )");
	$wpdb->query("DELETE FROM $wpdb->commentmeta WHERE comment_id IN ( $comma_comment_ids )");
	clean_comment_cache( $comment_ids );
	$n = mt_rand(1, 5000);
	if ( apply_filters('akismet_optimize_table', ($n == 11)) ) // lucky number
		$wpdb->query("OPTIMIZE TABLE $wpdb->comments");

}

add_action('akismet_scheduled_delete', 'akismet_delete_old');

function akismet_check_db_comment( $id, $recheck_reason = 'recheck_queue' ) {
    global $wpdb, $akismet_api_host, $akismet_api_port;

    $id = (int) $id;
    $c = $wpdb->get_row( "SELECT * FROM $wpdb->comments WHERE comment_ID = '$id'", ARRAY_A );
    if ( !$c )
        return;

    $c['user_ip']    = $c['comment_author_IP'];
    $c['user_agent'] = $c['comment_agent'];
    $c['referrer']   = '';
    $c['blog']       = get_option('home');
    $c['blog_lang']  = get_locale();
    $c['blog_charset'] = get_option('blog_charset');
    $c['permalink']  = get_permalink($c['comment_post_ID']);
    $id = $c['comment_ID'];
	if ( akismet_test_mode() )
		$c['is_test'] = 'true';
	$c['recheck_reason'] = $recheck_reason;

    $query_string = '';
    foreach ( $c as $key => $data )
    $query_string .= $key . '=' . urlencode( stripslashes($data) ) . '&';

    $response = akismet_http_post($query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port);
    return $response[1];
}

function akismet_cron_recheck() {
	global $wpdb;

	delete_option('akismet_available_servers');

	$comment_errors = $wpdb->get_col( "
		SELECT comment_id
		FROM {$wpdb->prefix}commentmeta
		WHERE meta_key = 'akismet_error'
		LIMIT 100
	" );
	
	foreach ( (array) $comment_errors as $comment_id ) {
		// if the comment no longer exists, remove the meta entry from the queue to avoid getting stuck
		if ( !get_comment( $comment_id ) ) {
			delete_comment_meta( $comment_id, 'akismet_error' );
			continue;
		}
		
		add_comment_meta( $comment_id, 'akismet_rechecking', true );
		$status = akismet_check_db_comment( $comment_id, 'retry' );

		$msg = '';
		if ( $status == 'true' ) {
			$msg = __( 'Akismet caught this comment as spam during an automatic retry.' );
		} elseif ( $status == 'false' ) {
			$msg = __( 'Akismet cleared this comment during an automatic retry.' );
		}
		
		// If we got back a legit response then update the comment history
		// other wise just bail now and try again later.  No point in
		// re-trying all the comments once we hit one failure.
		if ( !empty( $msg ) ) {
			delete_comment_meta( $comment_id, 'akismet_error' );
			akismet_update_comment_history( $comment_id, $msg, 'cron-retry' );
			update_comment_meta( $comment_id, 'akismet_result', $status );
			// make sure the comment status is still pending.  if it isn't, that means the user has already moved it elsewhere.
			$comment = get_comment( $comment_id );
			if ( $comment && 'unapproved' == wp_get_comment_status( $comment_id ) ) {
				if ( $status == 'true' ) {
					wp_spam_comment( $comment_id );
				} elseif ( $status == 'false' ) {
					// comment is good, but it's still in the pending queue.  depending on the moderation settings
					// we may need to change it to approved.
					if ( check_comment($comment->comment_author, $comment->comment_author_email, $comment->comment_author_url, $comment->comment_content, $comment->comment_author_IP, $comment->comment_agent, $comment->comment_type) )
						wp_set_comment_status( $comment_id, 1 );
				}
			}
		} else {
			delete_comment_meta( $comment_id, 'akismet_rechecking' );
			wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' );
			return;
		}
	}
	
	$remaining = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->commentmeta WHERE meta_key = 'akismet_error'" ) );
	if ( $remaining && !wp_next_scheduled('akismet_schedule_cron_recheck') ) {
		wp_schedule_single_event( time() + 1200, 'akismet_schedule_cron_recheck' );
	}
}
add_action( 'akismet_schedule_cron_recheck', 'akismet_cron_recheck' );

function akismet_add_comment_nonce( $post_id ) {
	echo '<p style="display: none;">';
	wp_nonce_field( 'akismet_comment_nonce_' . $post_id, 'akismet_comment_nonce', FALSE );
	echo '</p>';
}

$akismet_comment_nonce_option = apply_filters( 'akismet_comment_nonce', get_option( 'akismet_comment_nonce' ) );

if ( $akismet_comment_nonce_option == 'true' || $akismet_comment_nonce_option == '' )
	add_action( 'comment_form', 'akismet_add_comment_nonce' );

if ( '3.0.5' == $wp_version ) { 
	remove_filter( 'comment_text', 'wp_kses_data' ); 
	if ( is_admin() ) 
		add_filter( 'comment_text', 'wp_kses_post' ); 
}<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>simplepole</title>
	<atom:link href="http://mws.studio282.com/feed" rel="self" type="application/rss+xml" />
	<link>http://mws.studio282.com</link>
	<description>a story of a return to a complex plane</description>
	<lastBuildDate>Mon, 03 Sep 2007 20:54:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>motorways</title>
		<link>http://mws.studio282.com/archives/65</link>
		<comments>http://mws.studio282.com/archives/65#comments</comments>
		<pubDate>Mon, 03 Sep 2007 20:54:05 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[random rambling]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/65</guid>
		<description><![CDATA[Having decided to return to Poland by road with David we had quite an interesting experience of motorways across Europe &#8211; France, Germany, Czech and Poland. And of course now I have some experience of driving in Poland and the UK. Few observations came to me and I decided to record them here. There seems [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mws.studio282.com/wp-content/uploads/2007/09/466px-uk_motorway_symbolsvg.thumbnail.png" title="Motorway" alt="Motorway" align="right" border="0" hspace="8" vspace="8" />Having decided to return to Poland by road with David we had quite an interesting experience of motorways across Europe &#8211; France, Germany, Czech and Poland. And of course now I have some experience of driving in Poland and the UK. Few observations came to me and I decided to record them here.</p>
<p>There seems to be two schools of how to use multiple lanes. One is: get in the fast lane and stay in the fast lane. People subscribing to this point of view will &#8216;downgrade&#8217; lane only when nearly literally pushed by a car that is trying to go faster than them. This seems to be a domineering way of thinking &#8211; certainly Germany, UK and Poland subscribe to it. The alternative is you keep &#8216;higher&#8217; lane empty and use it only for overtaking. That puts more strain on the driver (or brakes the boredom, depends on the way one looks at it) and, I think, makes for a more pleasant way of driving. I think we have met this outlook practiced only in France.</p>
<p>We have also tried to draw some relationship between the traffic/quality of driving and paying for the motorways. In the UK the motorways are free and often suffer from traffic jams (or worse &#8211; think M25). In Germany similar &#8211; free motorways and some traffic jams. In France you pay for the privilege of using the motorways and, in our experience, they were quite jam free. In Czech you pay a cover fee when you enter the country and our experience was similarly inconclusive.</p>
<p>Poland however does not seem to follow any of the above logic. In the south where I live there is a mixture of free and toll motorways. The free ones are (for the time being) in a much better state &#8211; for instance Katowice-KrakÃ³w A4 motorway (toll) is for large stretches single-lane. So traffic jams are frequent. Katowice-WrocÅ‚aw part of A4 (free) is mostly jam free and good to drive &#8211; however beware, there are no petrol stations by the motorway for about 100km. One needs to leave motorway and enter a city (and get lost of course).</p>
<p>But all the bad motorways experiences are  compensated a bit by a polish habit of saying thank-you. Say, for instance, I let someone in front of me to join the traffic or change lanes, very often they will flash the hazard lights to say thank you. And even though it is nearly trivial, it can make your morning.</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/65/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>the state of polish popular economics</title>
		<link>http://mws.studio282.com/archives/63</link>
		<comments>http://mws.studio282.com/archives/63#comments</comments>
		<pubDate>Thu, 16 Aug 2007 16:57:46 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[random rambling]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/63</guid>
		<description><![CDATA[Recently I have read of a demand (one could not justify calling it a proposition) of the polish biggest trade unions that the Minimal Wage should be equal to 50% of the average wage. As my friends know I am not a great fun of the social state so I was not taken with the [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I have read of a demand (one could not justify calling it a proposition) of the polish biggest trade unions that the Minimal Wage should be equal to 50% of the average wage. As my friends know I am not a great fun of the social state so I was not taken with the idea.</p>
<p>However, putting socialist versus capitalist debate on side, is it not obvious that the two numbers belong to different realms? The minimum wage should be set in accordance with the social minimum. Whereas average wage (in a market economy) is a reflection of how well the economy is doing. Although I am not an economist I would venture a guess that such cross linking would exert harmful pressure.</p>
<p>And is it in the Trade Union interest to make employers reluctant to employ more people?</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/63/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>I don&#8217;t like flying</title>
		<link>http://mws.studio282.com/archives/53</link>
		<comments>http://mws.studio282.com/archives/53#comments</comments>
		<pubDate>Tue, 14 Aug 2007 19:15:03 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[day by day]]></category>
		<category><![CDATA[random rambling]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/53</guid>
		<description><![CDATA[In not too distant past once more I&#8217;ve embarked on the journey between the UK and Poland. As usual (well usual since budget airlines started flying to Poland) I took the plane. This time it was not just a quick visit so I was going with a proper suitcase. I must confess that the journey [...]]]></description>
			<content:encoded><![CDATA[<p>In not too distant past once more I&#8217;ve embarked on the journey between the UK and Poland. As usual (well usual since budget airlines started flying to Poland) I took the plane. This time it was not just a quick visit so I was going with a proper suitcase.</p>
<p><img src="http://mws.studio282.com/wp-content/uploads/2007/08/he514606-wizzair-a320.jpg" alt="Wizzair plane" /></p>
<p>I must confess that the journey did not start well &#8211; I was made to pay for extra luggage &#8211; 2kg in hand luggage by Wizzair! I though it was unfair and ridiculous but agreed to pay as I thought it will be less hassle &#8211; far from it. Go there, wait in the queue, go back, wait in the queue. It did not start well.  And it did not continued any better &#8211; unpack the hand luggage at security, go back and forth through the metal detector. Once on the other side I could buy a completely overpriced coffee, which wasn&#8217;t very good but was the only coffee on offer. Then the usual long wait, slight delay. Fortunately this time we didn&#8217;t miss our slot on the runway. Then the usual wait for the immigration questions, wait to collect baggage and finally out of the airport.</p>
<p>As I was going through the experience I have noticed that in the whole process of air-travel I did not enjoy any of it! And in fact I started seeing all the things put around the airport &#8216;experience&#8217; to make us hate all of it less &#8211; shopping, special treatment in first class, food. The bottom line, at least for me is this: the only good thing about air travel is that I can move from A to B quickly*, nearly everything that surrounds it is either negative or superfluous.</p>
<p>I don&#8217;t like flying. Ship me in a train.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>* Quickly is sometimes arguable here. Taken door-to-door time Paris &#8211; London is quicker by train (I think) and much more enjoyable.</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/53/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>thin red light</title>
		<link>http://mws.studio282.com/archives/51</link>
		<comments>http://mws.studio282.com/archives/51#comments</comments>
		<pubDate>Tue, 03 Jul 2007 22:48:07 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[day by day]]></category>
		<category><![CDATA[random rambling]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/51</guid>
		<description><![CDATA[Last month for various reasons (mostly as I am somewhat of a curiosity coming from the UK to Poland, when most people travel in the opposite direction) I had few opportunities to be speaking on local radio shows. One was live, others pre-recorded. Before you accuse me of become ever-so-concerned with popularity let me explain [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mws.studio282.com/wp-content/uploads/2007/07/microphone.thumbnail.gif" title="a mic" alt="a mic" align="right" border="0" hspace="8" vspace="8" />Last month for various reasons (mostly as I am somewhat of a curiosity coming from the UK to Poland, when most people travel in the opposite direction) I had few opportunities to be speaking on local radio shows. One was live, others pre-recorded. Before you accuse me of become ever-so-concerned with popularity let me explain that my main motivation was to gain some publicity for the school I am working for.</p>
<p>I have noticed a strange dose of bravery when speaking to a microphone. You see, you don&#8217;t see the crowds (well, OK all three people)  you are addressing. All you see and hear is a friendly journalist who is asking you questions. It is very easy to forget that you are heard by anonymous (that is until they quote your words back to you on the street or at a party) multitudes. And while it is fine to express not fully precise opinions in a private conversation, it is a dangerous to do so on air. And apart from a small red light in the studio not much reminds you of it.</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/51/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>a fraud</title>
		<link>http://mws.studio282.com/archives/49</link>
		<comments>http://mws.studio282.com/archives/49#comments</comments>
		<pubDate>Tue, 03 Jul 2007 22:29:50 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[random rambling]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/49</guid>
		<description><![CDATA[This was a quick read. Starting sometime on an easy-going Saturday and finishing during a lazy Sunday morning. The language is as captivating for me as that of Waugh (and his prose is a pure delight for me to read!). And even though I find the very English Brideshead more captivating and closer to my [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mws.studio282.com/wp-content/uploads/2007/07/416s1fcg6al_aa240_-1.thumbnail.jpg" title="The Great Gatsby" alt="The Great Gatsby" align="left" border="0" hspace="0" vspace="8" />This was a quick read. Starting sometime on an easy-going Saturday and finishing during a lazy Sunday morning. The language is as captivating for me as that of Waugh (and his prose is a pure delight for me to read!). And even though I find the very English Brideshead more captivating and closer to my own skin I think I saw for the first time the charm of the very American Long Island in Fitzgerald&#8217;s story.</p>
<p>I knew that with shutting of the covers, after finishing the last page I will not loose the feeling of sadness. Here is a story of a fraud. The great life-excuse: love, is not sufficient and the story does not end happily ever after. Here is a story of a solitary pursuit of a dream which vanishes upon closer inspection. The dream is too much of an illusion to survive the reality check. And the Great Gatsby sells his identity to become, or rather to pretend he is, someone who will win the prize. And hence the impossible choice: either he is not himself, he acts, and then cannot get close enough, real enough, to win and enjoy the prize. Or he stretches out his hand for the prize, but then he cannot keep his mask on and is disqualified. An impossible choice. A loose-loose situation.</p>
<p>What a privilege it is to be true to oneself.</p>
<p>F Scott Fitzgerald <em>The Great Gatsby</em></p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/49/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>difficulty in a video shop</title>
		<link>http://mws.studio282.com/archives/47</link>
		<comments>http://mws.studio282.com/archives/47#comments</comments>
		<pubDate>Mon, 18 Jun 2007 20:12:54 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[day by day]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/47</guid>
		<description><![CDATA[When Ian and Madeleine came to visit last weekend we had lovely few days of relaxing, catching up and generally leaving the madly rushing world behind us. With a help of stilton and a wonderful bottle of Rioja (hand imported by Nick to the UK, then brought to Poland) we remembered things past. And in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mws.studio282.com/wp-content/uploads/2007/06/ian_mad.jpg" title="Ian, Madeleine, Rioja and Stitlon"><img src="http://mws.studio282.com/wp-content/uploads/2007/06/ian_mad.thumbnail.jpg" title="Ian, Madeleine, Rioja and Stitlon" alt="Ian, Madeleine, Rioja and Stitlon" align="left" border="0" hspace="8" vspace="8" /></a>When Ian and Madeleine came to visit last weekend we had lovely few days of relaxing, catching up and generally leaving the madly rushing world behind us. With a help of stilton and a wonderful bottle of Rioja (hand imported by Nick to the UK, then brought to Poland) we remembered things past.  And in the mood of laziness we got a video out. And here was a small hic-up. We went to the video shop and were faced with the task of choosing a film. On top of the usual problem of having three people with six different views of what to watch between them, we also faced the problem of actually finding the films &#8211; of course they are listed under their translated titles. For Ian and Madeleine to be confused it is understandable. But I was confused too! I felt I didn&#8217;t know any of the titles. But in the tragedy of the situation there were moments of comedy, when one tried to reverse engineer translation of a given title.</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/47/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>flowers 24/7 &#8230; continued</title>
		<link>http://mws.studio282.com/archives/43</link>
		<comments>http://mws.studio282.com/archives/43#comments</comments>
		<pubDate>Thu, 14 Jun 2007 10:07:23 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[day by day]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/43</guid>
		<description><![CDATA[So last time I mentioned the 24/7 flower shop. I think I now know why it is open 24/7. When Bella and I were going to my sister&#8217;s house for a dinner we thought we would stop there and buy some flowers. To give them justice they had a superb choice and let Bella choose [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mws.studio282.com/wp-content/uploads/2007/06/logo.gif" title="Kwiaciarnia Roza Logo" alt="Kwiaciarnia Roza Logo" align="left" border="0" hspace="8" vspace="8" />So last time I mentioned the 24/7 <a href="http://www.roza-kwiaty.pl/">flower shop</a>. I think I now know why it is open 24/7.</p>
<p>When Bella and I were going to my sister&#8217;s house for a dinner we thought we would stop there and buy some flowers. To give them justice they had a superb choice and let Bella choose the flowers for the bouquet, which made her very happy. And then the problem started. We handed the chosen flowers to be made into a bouquet &#8230; and we waited &#8230; and waited &#8230;. and waited.</p>
<p><img src="http://mws.studio282.com/wp-content/uploads/2007/06/pan1.jpg" title="pan1.jpg" alt="pan1.jpg" align="right" border="0" hspace="8" vspace="8" />True, the result was beautiful, but it made us rather late for the dinner and it made our wallets significantly lighter. Advice given to us later by my sister was to phone in advance and order the flowers.</p>
<p>Indeed if it takes them so long to make the bouquets they better be open 24/7. But as they say, you cannot hurry artists.</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/43/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>windows and flowers</title>
		<link>http://mws.studio282.com/archives/41</link>
		<comments>http://mws.studio282.com/archives/41#comments</comments>
		<pubDate>Tue, 29 May 2007 20:05:44 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[day by day]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/41</guid>
		<description><![CDATA[So, I have lived in Poland for over a month now since my return from &#8216;exile&#8217;. I would like to offer you two, somewhat random, pieces of observational information. 1) a point of pride for any Polish housewife are clean windows. It must be said that they get dirty (and I mean really dirty) much [...]]]></description>
			<content:encoded><![CDATA[<p>So, I have lived in Poland for over a month now since my return from &#8216;exile&#8217;. I would like to offer you two, somewhat random, pieces of observational information.</p>
<p>1)  a point of pride for any Polish housewife are clean windows. It must be said that they get dirty (and I mean really dirty) much quicker than was my experience in the UK (where it was sufficient to clean them once in 6 months). They provide a seemingly endless topic of conversation: the best way of cleaning them, best time of day. The shops have a great deal of gadgets for this &#8211; special cloths, chemicals etc.</p>
<p>Proudly I washed my windows for the first time today. Now I can also join in the discussion!</p>
<p><a href="http://mws.studio282.com/archives/41/zabka/" rel="attachment wp-att-42" title="Zabka"><img src="http://mws.studio282.com/wp-content/uploads/2007/05/zabka_part1.jpg" title="Zabka" alt="Zabka" align="right" border="0" hspace="8" vspace="8" /></a>2)  shop opening hours are different, and more diverse than in the UK. High St shops close at 2pm on Sat and are closed on Sun. Tesco is open 24/7. A great network of corner shops (Å»abka &#8211; &#8216;Frog&#8217;) is open from 6am &#8211; midnight.  I am not sure about Big Shopping Centres, but I think they have long opening hours at the weekends.</p>
<p>And then a true surprise for me. There is a 24/7 flower shop. They sell just flowers and obviously are doing very well!</p>
<p>I think I must not be buying enough flowers as I have not seen the need for a 24/7 florist yet!</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/41/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>taken, blessed, broken and given</title>
		<link>http://mws.studio282.com/archives/39</link>
		<comments>http://mws.studio282.com/archives/39#comments</comments>
		<pubDate>Fri, 25 May 2007 22:15:02 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[random rambling]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/39</guid>
		<description><![CDATA[Few evenings ago I read, more less in one sitting, a book that Henryk recommended to me long time ago. Life of the Beloved by Henri Nouwen. The genesis of the book is in itself a story; a story of a remarkable friendship between a catholic priest and a secular jew. The challenge that birthed [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mws.studio282.com/wp-content/uploads/2007/05/lifeofthebeloved.jpg" title="Life of the Beloved" alt="Life of the Beloved" align="right" border="0" hspace="8" vspace="8" />Few evenings ago I read, more less in one sitting, a book that Henryk recommended to me long time ago. <em>Life of the Beloved</em> by Henri Nouwen. The genesis of the book is in itself a story; a story of a remarkable friendship between a catholic priest and a secular jew. The challenge that birthed the text was posed by Fred: write about the faith in a way that would be relevant and communicative for secular (&#8216;unchurched&#8217;)  New Yorkers.</p>
<p>Nouwen starts in a very similar place where Kenny Borthwick (thanks to David for this introduction) starts one of his talks: who we are in God&#8217;s eyes. The very basis, indisputable fabric of our identity. Kenny talks about unconditional father-love, Nouwen about being chosen, blessed. Nouwen uses the wonderful symbolism of eucharist &#8211; the bread and wine are taken, blessed, broken/shed and then given. And through these symbols we can observe and talk about our own life.</p>
<p>When I read this text I was ever so powerfully reminded of both how difficult it is for us, for me, to grasp and accept this and how utterly transforming this message is. Understanding this makes us revise what we think about suffering (being broken) and living &#8211; it makes us live for others (being given).</p>
<p>Starting with our identity being intimately rooted in the total undeserved unquivering acceptance. Ending with us delighting when we can truly invest, without calculating or hoping for any return, in lives of other people.</p>
<p>Henri J M Nouwen: Life of the Beloved</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/39/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>close to the dirt of earth</title>
		<link>http://mws.studio282.com/archives/37</link>
		<comments>http://mws.studio282.com/archives/37#comments</comments>
		<pubDate>Thu, 24 May 2007 20:18:53 +0000</pubDate>
		<dc:creator>marcin</dc:creator>
				<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://mws.studio282.com/archives/37</guid>
		<description><![CDATA[Couple of days ago I have finished reading Angela Carter&#8217;s Nights at the Circus. Despite it being Bella&#8217;s recommendation the book did not delight me, maybe it did entertain. Yes, I am not the greatest fan of magical realism (it is very much hit and miss with me, Satanic Verses being a miss and Ground [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://mws.studio282.com/wp-content/uploads/2007/05/0099388618.jpg" title="Nights at the Circus" alt="Nights at the Circus" align="left" border="0" hspace="8" vspace="8" />Couple of days ago I have finished reading Angela Carter&#8217;s <em>Nights at the Circus</em>. Despite it being Bella&#8217;s recommendation the book did not delight me, maybe it did entertain. Yes, I am not the greatest fan of magical realism (it is very much hit and miss with me, <em>Satanic Verses </em>being a miss and <em>Ground beneath her feet</em> a hit).</p>
<p>The text is skillful. Which, in truth, I think is damnation rather than praise on my lips. Just like lighting in a theater; when you notice it, something went wrong. The author changes the style and picks and mixes her literary tools. Skillful &#8211; yes. But I am reminded of <em>Kill Bill</em> &#8211; were there too many gadgets to use and the artists could not make their mind up?</p>
<p>This said there were some great passages, so one cannot deny &#8211; she writes well. I was just slightly nauseated. And alongside gripping, ornate paragraphs I found ones that were &#8230; dirty. I don&#8217;t mean that in a prudish way &#8211; rather, they were earthy, made of dust. Reading them brought a shadow of exhaustion (I felt similarly when I read <em>Money</em> by Martin Amis, but to a much lesser extent with Carter&#8217;s text).</p>
<p>Having re-read my opinion I must stress it is exactly that &#8211; my very subjective account of how I received the text. And is far from any balanced view.</p>
<p>Fevvers for me was too heavy of a beast to take off and fly.</p>
<p>Angela Carter: Nights at the Circus</p>
]]></content:encoded>
			<wfw:commentRss>http://mws.studio282.com/archives/37/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
