/*
* Plugin Name: APCu Object Cache
* Description: APCu backend for the WP Object Cache.
* Based on Plugin named APCu Object Cache Backend
* Plugin URI: https://wordpress.org/plugins/apcu/
* Author: Pierre Schmitz
* Author URI: https://pierre-schmitz.com/
* Plugin URI: https://wordpress.org/plugins/apcu/
*
*
* @Authors James Dugger, Jonathan Bardo
* @copyright 2017 GoDaddy Inc. 14455 N. Hayden Road Scottsdale, Arizona
*/
$oc_logged_in = false;
foreach ( $_COOKIE as $k => $v ) {
if ( preg_match( '/^comment_author|wordpress_logged_in_[a-f0-9]+|woocommerce_items_in_cart|PHPSESSID_|edd_wp_session|edd_items_in_cartcc_cart_key|ccm_token/', $k ) ) {
$oc_logged_in = true;
break;
}
}
$oc_blocked_page = ( defined( 'WP_ADMIN' ) || defined( 'DOING_AJAX' ) || defined( 'XMLRPC_REQUEST' ) || 'wp-login.php' === basename( $_SERVER['SCRIPT_FILENAME'] ) );
function wpaas_is_using_apcu() {
return version_compare( PHP_VERSION, '5.6.0', '>=' ) && function_exists( 'apcu_fetch' );
}
if ( 'cli' !== php_sapi_name() && ! $oc_logged_in && ! $oc_blocked_page && wpaas_is_using_apcu() ) :
/**
* Save the transients to the DB. The explanation is a bit too long
* for code. The tl;dr of it is that we don't have a single 'fast cache'
* source yet (like memcached) and so some long lived items like transients
* are still best cached in the db and then brought back into APC
*
* @param string $transient
* @param mixed $value
* @param int $expire
* @param boolean $site = false
*
* @return bool
*/
function wpaas_save_transient( $transient, $value, $expire, $site = false ) {
global $wp_object_cache, $wpdb;
// The 'special' transient option names
$transient_timeout = ( $site ? '_site' : '' ) . '_transient_timeout_' . $transient;
$transient = ( $site ? '_site' : '' ) . '_transient_' . $transient;
// Cap expiration at 24 hours to avoid littering the DB
if ( $expire == 0 ) {
$expire = 24 * 60 * 60;
}
// Save to object cache
$wp_object_cache->set( $transient, $value, 'options', $expire );
$wp_object_cache->set( $transient_timeout, time() + $expire, 'options', $expire );
// Update alloptions
$alloptions = $wp_object_cache->get( 'alloptions', 'options' );
$alloptions[ $transient ] = $value;
$alloptions[ $transient_timeout ] = time() + $expire;
$wp_object_cache->set( 'alloptions', $alloptions, 'options' );
// Use the normal update option logic
if ( ! empty( $wpdb ) && $wpdb instanceof wpdb ) {
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
if ( $site && is_multisite() ) {
$wpdb->query(
$wpdb->prepare(
"INSERT INTO `{$wpdb->sitemeta}` ( `option_name`, `option_value`, `autoload` ) VALUES ( %s, UNIX_TIMESTAMP( NOW() ) + %d, 'yes' ) ON DUPLICATE KEY UPDATE `option_name` = VALUES ( `option_name` ), `option_value` = VALUES ( `option_value` ), `autoload` = VALUES ( `autoload` );",
$transient_timeout,
$expire
)
);
$wpdb->query(
$wpdb->prepare(
"INSERT INTO `{$wpdb->sitemeta}` ( `option_name`, `option_value`, `autoload` ) VALUES ( %s, %s, 'no' ) ON DUPLICATE KEY UPDATE `option_name` = VALUES ( `option_name` ), `option_value` = VALUES ( `option_value` ), `autoload` = VALUES ( `autoload` );",
$transient,
maybe_serialize( $value )
)
);
} else {
$wpdb->query(
$wpdb->prepare(
"INSERT INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES ( %s, UNIX_TIMESTAMP( NOW() ) + %d, 'yes' ) ON DUPLICATE KEY UPDATE `option_name` = VALUES ( `option_name` ), `option_value` = VALUES ( `option_value` ), `autoload` = VALUES ( `autoload` );",
$transient_timeout,
$expire
)
);
$wpdb->query(
$wpdb->prepare(
"INSERT INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES ( %s, %s, 'no' ) ON DUPLICATE KEY UPDATE `option_name` = VALUES ( `option_name` ), `option_value` = VALUES ( `option_value` ), `autoload` = VALUES ( `autoload` );",
$transient,
maybe_serialize( $value )
)
);
}
$wpdb->suppress_errors( $flag );
}
return true;
}
function wpaas_prune_transients() {
global $wpdb;
if ( ! empty( $wpdb ) && $wpdb instanceof wpdb && function_exists( 'is_main_site' ) && function_exists( 'is_main_network' ) ) {
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
// Lifted straight from schema.php
// Deletes all expired transients.
// The multi-table delete syntax is used to delete the transient record from table a,
// and the corresponding transient_timeout record from table b.
$time = time();
$wpdb->query( "DELETE a, b FROM $wpdb->options a, $wpdb->options b WHERE
a.option_name LIKE '\_transient\_%' AND
a.option_name NOT LIKE '\_transient\_timeout\_%' AND
b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
AND b.option_value < $time" );
if ( is_main_site() && is_main_network() ) {
$wpdb->query( "DELETE a, b FROM $wpdb->options a, $wpdb->options b WHERE
a.option_name LIKE '\_site\_transient\_%' AND
a.option_name NOT LIKE '\_site\_transient\_timeout\_%' AND
b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )
AND b.option_value < $time" );
}
$wpdb->suppress_errors( $flag );
}
}
/**
* If another cache was flushed or updated, sync across all servers / processes using
* the database as the authority. This uses the database as the authority for timestamps
* as well to avoid drift between servers.
* @return void
*/
function wpaas_init_sync_cache() {
global $wpdb;
if ( empty( $wpdb ) || ! ( $wpdb instanceof wpdb ) ) {
return;
}
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
$result = $wpdb->get_results(
"SELECT option_name, option_value FROM `{$wpdb->options}` WHERE option_name = 'gd_system_last_cache_flush' UNION SELECT 'current_time', UNIX_TIMESTAMP( NOW() ) AS option_value;",
ARRAY_A
);
$wpdb->suppress_errors( $flag );
if ( empty( $result ) ) {
return;
}
$master_flush = false;
foreach ( $result as $row ) {
switch ( $row['option_name'] ) {
case 'current_time' :
$current_time = $row['option_value'];
break;
case 'gd_system_last_cache_flush' :
$master_flush = $row['option_value'];
break;
}
}
$local_flush = wp_cache_get( 'gd_system_last_cache_flush' );
if ( false === $local_flush || $local_flush < $master_flush ) {
wp_cache_flush( true );
wp_cache_set( 'gd_system_last_cache_flush', $current_time );
}
}
/**
* Start default implementation of object cache
*/
if ( ! defined( 'WP_APC_KEY_SALT' ) ) {
define( 'WP_APC_KEY_SALT', '' );
}
function wp_cache_add( $key, $data, $group = '', $expire = 0 ) {
global $wp_object_cache;
if ( 'transient' == $group ) {
wpaas_save_transient( $key, $data, $expire );
return $wp_object_cache->add( "_transient_$key", $data, 'options', $expire );
} elseif ( 'site-transient' == $group ) {
wpaas_save_transient( $key, $data, $expire, true );
return $wp_object_cache->add( "_site_transient_$key", $data, 'site-options', $expire );
} else {
return $wp_object_cache->add( $key, $data, $group, $expire );
}
}
function wp_cache_incr( $key, $n = 1, $group = '' ) {
global $wp_object_cache;
return $wp_object_cache->incr2( $key, $n, $group );
}
function wp_cache_decr( $key, $n = 1, $group = '' ) {
global $wp_object_cache;
return $wp_object_cache->decr( $key, $n, $group );
}
function wp_cache_close() {
return true;
}
function wp_cache_delete( $key, $group = '' ) {
global $wp_object_cache, $wpdb;
if ( 'transient' == $group ) {
if ( ! empty( $wpdb ) && $wpdb instanceof wpdb ) {
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
$wpdb->query(
$wpdb->prepare(
"DELETE FROM `{$wpdb->prefix}options` WHERE option_name IN ( %s, %s );",
"_transient_{$key}",
"_transient_timeout_{$key}"
)
);
$wpdb->suppress_errors( $flag );
}
$wp_object_cache->delete( "_transient_timeout_$key", 'options' );
// Update alloptions
$alloptions = $wp_object_cache->get( 'alloptions', 'options' );
unset( $alloptions["_transient_$key"] );
unset( $alloptions["_transient_timeout_$key"] );
$wp_object_cache->set( 'alloptions', $alloptions, 'options' );
return $wp_object_cache->delete( "_transient_$key", 'options' );
} elseif ( 'site-transient' == $group ) {
if ( ! empty( $wpdb ) && $wpdb instanceof wpdb ) {
$table = $wpdb->options;
if ( is_multisite() ) {
$table = $wpdb->sitemeta;
}
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
$wpdb->query(
$wpdb->prepare(
"DELETE FROM `{$table}` WHERE option_name IN ( %s, %s );",
"_transient_{$key}",
"_transient_timeout_{$key}"
)
);
$wpdb->suppress_errors( $flag );
}
$wp_object_cache->delete( "_transient_timeout_$key", 'site-options' );
// Update alloptions
$alloptions = $wp_object_cache->get( 'alloptions', 'options' );
unset( $alloptions["_site_transient_$key"] );
unset( $alloptions["_site_transient_timeout_$key"] );
$wp_object_cache->set( 'alloptions', $alloptions, 'options' );
return $wp_object_cache->delete( "_site_transient_$key", 'site-options' );
}
return $wp_object_cache->delete( $key, $group );
}
function wp_cache_flush( $local_flush = false ) {
global $wp_object_cache, $wpdb;
if ( ! $local_flush ) {
if ( ! empty( $wpdb ) && $wpdb instanceof wpdb ) {
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
$wpdb->query( "INSERT INTO `{$wpdb->options}` (`option_name`, `option_value`, `autoload`) VALUES ( 'gd_system_last_cache_flush', UNIX_TIMESTAMP( NOW() ), 'no' ) ON DUPLICATE KEY UPDATE `option_name` = VALUES ( `option_name` ), `option_value` = VALUES ( `option_value` ), `autoload` = VALUES ( `autoload` );" );
$wpdb->suppress_errors( $flag );
}
}
return $wp_object_cache->flush();
}
function wp_cache_get( $key, $group = '', $force = false ) {
global $wp_object_cache, $wpdb;
if ( 'transient' == $group ) {
$alloptions = $wp_object_cache->get( 'alloptions', 'options' );
if ( isset( $alloptions["_transient_$key"] ) && isset( $alloptions["_transient_timeout_$key"] ) && $alloptions["_transient_timeout_$key"] > time() ) {
return maybe_unserialize( $alloptions["_transient_$key"] );
}
$transient = $wp_object_cache->get( "_transient_$key", 'options', $force );
$timeout = $wp_object_cache->get( "_transient_timeout_$key", 'options', $force );
if ( false !== $transient && ! empty( $timeout ) && $timeout > time() ) {
return maybe_unserialize( $transient );
}
if ( ! empty( $wpdb ) && $wpdb instanceof wpdb ) {
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
$result = $wpdb->get_results(
$wpdb->prepare(
"SELECT option_name, option_value FROM `{$wpdb->options}` WHERE option_name IN ( %s, %s ) UNION SELECT 'current_time', UNIX_TIMESTAMP( NOW() ) AS option_value;",
"_transient_{$key}",
"_transient_timeout_{$key}"
),
ARRAY_A
);
$wpdb->suppress_errors( $flag );
if ( ! empty( $result ) ) {
$transient = false;
$timeout = false;
$current_time = time();
foreach ( $result as $row ) {
switch ( $row['option_name'] ) {
case "_transient_$key" :
$transient = $row['option_value'];
break;
case "_transient_timeout_$key" :
$timeout = $row['option_value'];
break;
case 'current_time' :
$current_time = $row['option_value'];
break;
}
}
if ( false !== $transient && ! empty( $timeout ) && $timeout > $current_time ) {
return maybe_unserialize( $transient );
}
}
}
return false;
} elseif ( 'site-transient' == $group ) {
$transient = $wp_object_cache->get( "_site_transient_$key", 'options', $force );
$timeout = $wp_object_cache->get( "_site_transient_timeout_$key", 'options', $force );
if ( false !== $transient && ! empty( $timeout ) && $timeout > time() ) {
return maybe_unserialize( $transient );
}
if ( ! empty( $wpdb ) && $wpdb instanceof wpdb ) {
$table = $wpdb->options;
if ( is_multisite() ) {
$table = $wpdb->sitemeta;
}
$flag = $wpdb->suppress_errors;
$wpdb->suppress_errors( true );
$result = $wpdb->get_results(
$wpdb->prepare(
"SELECT option_name, option_value FROM `{$table}` WHERE option_name IN ( %s, %s ) UNION SELECT 'current_time', UNIX_TIMESTAMP( NOW() ) AS option_value;",
"_site_transient_{$key}",
"_site_transient_timeout_{$key}"
),
ARRAY_A
);
$wpdb->suppress_errors( $flag );
if ( ! empty( $result ) ) {
$transient = false;
$timeout = false;
$current_time = time();
foreach ( $result as $row ) {
switch ( $row['option_name'] ) {
case "_site_transient_$key" :
$transient = $row['option_value'];
break;
case "_site_transient_timeout_$key" :
$timeout = $row['option_value'];
break;
case 'current_time' :
$current_time = $row['option_value'];
break;
}
}
if ( false !== $transient && ! empty( $timeout ) && $timeout > $current_time ) {
return maybe_unserialize( $transient );
}
}
}
return false;
} else {
return $wp_object_cache->get( $key, $group, $force );
}
}
function wp_cache_init() {
global $wp_object_cache;
if ( mt_rand( 1, 100 ) == 42 ) {
wpaas_prune_transients();
}
add_action( 'muplugins_loaded', 'wpaas_init_sync_cache' );
$wp_object_cache = new APCu_Object_Cache();
}
function wp_cache_replace( $key, $data, $group = '', $expire = 0 ) {
global $wp_object_cache;
return $wp_object_cache->replace( $key, $data, $group, $expire );
}
function wp_cache_set( $key, $data, $group = '', $expire = 0 ) {
global $wp_object_cache;
if ( defined( 'WP_INSTALLING' ) == false ) {
if ( 'transient' == $group ) {
return wpaas_save_transient( $key, $data, $expire );
} elseif ( 'site-transient' == $group ) {
return wpaas_save_transient( $key, $data, $expire, true );
} else {
return $wp_object_cache->set( $key, $data, $group, $expire );
}
} else {
return $wp_object_cache->delete( $key, $group );
}
}
function wp_cache_switch_to_blog( $blog_id ) {
global $wp_object_cache;
return $wp_object_cache->switch_to_blog( $blog_id );
}
function wp_cache_add_global_groups( $groups ) {
global $wp_object_cache;
$wp_object_cache->add_global_groups( $groups );
}
function wp_cache_add_non_persistent_groups( $groups ) {
global $wp_object_cache;
$wp_object_cache->add_non_persistent_groups( $groups );
}
class GD_APCu_Object_Cache {
private $prefix = '';
private $local_cache = array();
private $global_groups = array();
private $non_persistent_groups = array();
private $multisite = false;
private $blog_prefix = '';
public function __construct() {
global $table_prefix;
$this->multisite = is_multisite();
$this->blog_prefix = $this->multisite ? get_current_blog_id() . ':' : '';
$this->prefix = DB_HOST . '.' . DB_NAME . '.' . $table_prefix;
}
private function get_group( $group ) {
return empty( $group ) ? 'default' : $group;
}
private function get_key( $group, $key ) {
if ( $this->multisite && ! isset( $this->global_groups[ $group ] ) ) {
return $this->prefix . '.' . $group . '.' . $this->blog_prefix . ':' . $key;
} else {
return $this->prefix . '.' . $group . '.' . $key;
}
}
public function add( $key, $data, $group = 'default', $expire = 0 ) {
$group = $this->get_group( $group );
$key = $this->get_key( $group, $key );
if ( function_exists( 'wp_suspend_cache_addition' ) && wp_suspend_cache_addition() ) {
return false;
}
if ( isset( $this->local_cache[ $group ][ $key ] ) ) {
return false;
}
// FIXME: Somehow apcu_add does not return false if key already exists
if ( ! isset( $this->non_persistent_groups[ $group ] ) && apcu_exists( $key ) ) {
return false;
}
if ( is_object( $data ) ) {
$this->local_cache[ $group ][ $key ] = clone $data;
} else {
$this->local_cache[ $group ][ $key ] = $data;
}
if ( ! isset( $this->non_persistent_groups[ $group ] ) ) {
return apcu_add( $key, $data, (int) $expire );
}
return true;
}
public function add_global_groups( $groups ) {
if ( is_array( $groups ) ) {
foreach ( $groups as $group ) {
$this->global_groups[ $group ] = true;
}
} else {
$this->global_groups[ $groups ] = true;
}
}
public function add_non_persistent_groups( $groups ) {
if ( is_array( $groups ) ) {
foreach ( $groups as $group ) {
$this->non_persistent_groups[ $group ] = true;
}
} else {
$this->non_persistent_groups[ $groups ] = true;
}
}
public function decr( $key, $offset = 1, $group = 'default' ) {
if ( $offset < 0 ) {
return $this->incr( $key, abs( $offset ), $group );
}
$group = $this->get_group( $group );
$key = $this->get_key( $group, $key );
if ( isset( $this->local_cache[ $group ][ $key ] ) && $this->local_cache[ $group ][ $key ] - $offset >= 0 ) {
$this->local_cache[ $group ][ $key ] -= $offset;
} else {
$this->local_cache[ $group ][ $key ] = 0;
}
if ( isset( $this->non_persistent_groups[ $group ] ) ) {
return $this->local_cache[ $group ][ $key ];
} else {
$value = apcu_dec( $key, $offset );
if ( $value < 0 ) {
apcu_store( $key, 0 );
return 0;
}
return $value;
}
}
public function delete( $key, $group = 'default', $force = false ) {
$group = $this->get_group( $group );
$key = $this->get_key( $group, $key );
unset( $this->local_cache[ $group ][ $key ] );
if ( ! isset( $this->non_persistent_groups[ $group ] ) ) {
return apcu_delete( $key );
}
return true;
}
public function flush() {
$this->local_cache = array();
// TODO: only clear our own entries
apcu_clear_cache();
return true;
}
public function get( $key, $group = 'default', $force = false, &$found = null ) {
$group = $this->get_group( $group );
$key = $this->get_key( $group, $key );
if ( ! $force && isset( $this->local_cache[ $group ][ $key ] ) ) {
$found = true;
if ( is_object( $this->local_cache[ $group ][ $key ] ) ) {
return clone $this->local_cache[ $group ][ $key ];
} else {
return $this->local_cache[ $group ][ $key ];
}
} elseif ( isset( $this->non_persistent_groups[ $group ] ) ) {
$found = false;
return false;
} else {
$value = @apcu_fetch( $key, $found );
if ( $found ) {
if ( $force ) {
$this->local_cache[ $group ][ $key ] = $value;
}
return $value;
} else {
return false;
}
}
}
public function incr2( $key, $offset = 1, $group = 'default' ) {
if ( $offset < 0 ) {
return $this->decr( $key, abs( $offset ), $group );
}
$group = $this->get_group( $group );
$key = $this->get_key( $group, $key );
if ( isset( $this->local_cache[ $group ][ $key ] ) && $this->local_cache[ $group ][ $key ] + $offset >= 0 ) {
$this->local_cache[ $group ][ $key ] += $offset;
} else {
$this->local_cache[ $group ][ $key ] = 0;
}
if ( isset( $this->non_persistent_groups[ $group ] ) ) {
return $this->local_cache[ $group ][ $key ];
} else if ( function_exists( 'apcu_inc' ) ) {
$value = apcu_inc( $key, $offset );
if ( $value < 0 ) {
apcu_store( $key, 0 );
return 0;
}
return $value;
}
return false;
}
public function replace( $key, $data, $group = 'default', $expire = 0 ) {
$group = $this->get_group( $group );
$key = $this->get_key( $group, $key );
if ( isset( $this->non_persistent_groups[ $group ] ) ) {
if ( ! isset( $this->local_cache[ $group ][ $key ] ) ) {
return false;
}
} else {
if ( ! isset( $this->local_cache[ $group ][ $key ] ) && ! apcu_exists( $key ) ) {
return false;
}
apcu_store( $key, $data, (int) $expire );
}
if ( is_object( $data ) ) {
$this->local_cache[ $group ][ $key ] = clone $data;
} else {
$this->local_cache[ $group ][ $key ] = $data;
}
return true;
}
public function reset() {
// This function is deprecated as of WordPress 3.5
// Be safe and flush the cache if this function is still used
$this->flush();
}
public function set( $key, $data, $group = 'default', $expire = 0 ) {
$group = $this->get_group( $group );
$key = $this->get_key( $group, $key );
if ( is_object( $data ) ) {
$this->local_cache[ $group ][ $key ] = clone $data;
} else {
$this->local_cache[ $group ][ $key ] = $data;
}
if ( ! isset( $this->non_persistent_groups[ $group ] ) ) {
return apcu_store( $key, $data, (int) $expire );
}
return true;
}
public function stats() {
// Only implemented because the default cache class provides this.
// This method is never called.
echo '';
}
public function switch_to_blog( $blog_id ) {
$this->blog_prefix = $this->multisite ? $blog_id . ':' : '';
}
}
if ( function_exists( 'apcu_inc' ) ) {
class APCu_Object_Cache extends GD_APCu_Object_Cache {
function incr( $key, $offset = 1, $group = 'default' ) {
return parent::incr2( $key, $offset, $group );
}
}
} else {
class APCu_Object_Cache extends GD_APCu_Object_Cache {
// Blank
}
}
endif;
Warning: Cannot modify header information - headers already sent by (output started at /usr/hosting/oldpics.net/html/wp-content/object-cache.php:1) in /usr/hosting/oldpics.net/html/wp-includes/feed-rss2.php on line 8
Сообщение Amazing Russia of the 1990s in 23 pictures появились сначала на Old Pictures.
]]>Jean-Paul Guillotho traveled to Russia several times, from 1991 to 1996. Russia definitely said bye-bye to the Soviet Union in the 1990s, but some of these pictures stilled the transition moment.
Check out our photo selection of Moscow photography of the 1950s and some pictures from the late 1980s. Both photos sets are made by foreigners too.
Сообщение Amazing Russia of the 1990s in 23 pictures появились сначала на Old Pictures.
]]>Сообщение Vintage pictures of the Soviet Moscow of the 1950s появились сначала на Old Pictures.
]]>In 1956 Jacques Dupaquie reached Moscow. When speaking of his feelings about Moscow, he said that ‘It’s hard to believe that half of the buildings are wooden”. A French communist also couldn’t believe that soviet people live in such poverty.
You can experience the contrast between European and Moscow lifestyles with our set of photos of Dior Models during their visit to the USSR.
In thirty years, another European will visit Moscow. His photo set of the Soviet Capital before the collapse of the USSR you can find here.
Сообщение Vintage pictures of the Soviet Moscow of the 1950s появились сначала на Old Pictures.
]]>Сообщение Nudists on the beach of Soviet Moscow, 1920s появились сначала на Old Pictures.
]]>Overall, you could do anything if you’ll call it the fight vs. bourgeois values. It’s hard to imagine nowadays, but that was the focus of the Bolshevik revolution in 1917. And yes, even to sunbathe naked near the Kremlin in Moscow, the Soviet capital! That’s what we see in this photo.
There was a special social group of nudists that called themselves “No shame!” The group members believed that nudity was a pure embodiment of democracy and universal equality. Somehow it corresponded with the values of the young communist state.
“No-shamers” had a habit of appearing naked in public. Sometimes they were going full-commando, sometimes they wore a red ribbon with the words “No shame!” This unusual freedom couldn’t last long in Soviet Moscow. When Joseph Stalin took power by the beginning of the 1930s, no-shamers quickly moved to the marginal corner of social life.
Take a look at the Soviet Moscow in just thirty years, in the 1950s.
Сообщение Nudists on the beach of Soviet Moscow, 1920s появились сначала на Old Pictures.
]]>Сообщение Pictures of Soviet Moscow by a British tourist появились сначала на Old Pictures.
]]>In 1986, Roger George Clark, a casual photographer from the UK, arrived in Moscow. He wandered the streets for a long time and took plenty of excellent pictures of the Soviet lifestyle.
He returned to the Soviet Moscow a year later, in the summer of 1987. The city impressed him with the lunch breaks in restaurants, the poor selection of goods in the stores, and signature Soviet queues. Clarke claims he even saw a queue of people who were waiting to take their place in the queue at the mausoleum of the Soviet leader Lenin at Red Square.
You can compare these photos to some of the vintage pictures of New York.
Compare this 1980s pictures of Moscow with the famous 1950s series.
Oldpics publishes pictures of Soviet Moscow with the original captions and remarks by Roger George Clark.
Here you can check what Moscow looked like in the 1950s.
The relationships between East and West improved dramatically in the 1980s. There was no longer the feeling that foreigners are banned from Russia as it was for decades before.
You have to be ready to walk a lot if you want to see the Soviet Moscow. When you dive into the subway or ride a tram or bus, go to shops, cafes, and parks, you will learn a lot about Russian people.
Clarkes had mixed impressions of Moscow residents. On the one hand, he found the Soviet people open and friendly.
“Early in the evening, when I was walking down the street on October 25, I met two young cadets. They carried red carnations. Can I take a photo of them? No problem. To my surprise, they spoke English, and we chatted for a couple of minutes. I took some pictures and released one of the best portraits from Moscow trips. They were friendly and relaxed. And this was true during most of my time in Moscow. I found that I could wander with the camera and take pictures of what I liked and how I liked it. Just like in the UK. “
On the other hand, the conditions in which Soviet people lived disappointed a photographer.
And the queues … Did you queue up for the train, did you queue for the museum, did you queue up at the store? The line was a national tradition. There were two lines to the Lenin’s tomb – a line for a line.
The lack of merchandise in stores was terrible. The Central Store at the Red Square sold only products that you could find in a shabby street market. If everything was so bad at the most important store in Russia, then how was it elsewhere. The shelve samples were useless, and the packaging was dull.
The poor goods selection and poor quality reminded me of post-war London. That was a short period of austerity when everything was in short supply. The consumer boom never happened in the Soviet Union. “
VDNH is the Soviet version of the 1951 UK festival, or, more precisely, the world trade fair of the 1930s. Masses of models and diagrams in huge pavilions. Nuclear power, electricity, space travel, agriculture, etc. And fountains abound. Thousands of people crowded the exhibit. Families enjoyed the day off, young men in jeans and soldiers in military uniforms. The exhibition showed how communism was supposed to look, but it was a utopia. It was a monument to the communist future, which will not exist. The exhibition felt strongly provincial and outdated. The exhibits looked impressive, but there was no style and sophistication – everything is unfinished.
This provincialism – this lack of elegance – manifested itself throughout Moscow. It was hard to believe that this was the capital of the second most powerful country on earth. The masonry collapsed, and the paint on buildings peeled off. Between the vast modern quarters were hundreds of 18th and 19th-century mansions and houses in Moscow, with mysterious courtyards, shaded trees, and even the occasional wooden building from ancient times. Gorky Park looked abandoned. No pop and folk art, as you see in the UK. The cafe looked boring. The public vending machines with a couple of glasses to share with other customers made me shudder. Tell them about hygiene! People came up, took such a glass, rinsed with cold water, and drank from it!
Donskoy Monastery. The historical heritage fell into desolation and collapsed. It was evident that during all the years of Soviet power, nothing was repaired.
Apart from space rockets, there was nothing futuristic here. Something was terribly wrong. The melancholic air hung over the city even in summer, and my camera captured it. However, people spoke more freely with foreigners and didn’t mind to pose for a photo.
Сообщение Pictures of Soviet Moscow by a British tourist появились сначала на Old Pictures.
]]>Сообщение Dior Models in Moscow, 1959 появились сначала на Old Pictures.
]]>Take a look at how Soviet Moscow looked like in the late 1980s.
In 1959, the Soviet Union officially allowed fashion shows. That allowed Madame Suzanne Lulling, the Head of Dior Salon at the time, to take the opportunity to organize a fashion show in Moscow.
Under the directorship of Yves Saint Laurent, the new head of Dior, the Parisian brand held a five-day fashion show featuring 12 models, at the House of Culture’s “Wings of the Soviets.”
Attendance at the Dior show was by ticket. 11,000 invitations for “défilé” were distributed only among the higher members of Communist party and to the Soviet elite.
As a part of the show and to allow regular people to have a look at the Dior models in their beautiful outfits, the organizers arranged a walk through the center of Moscow.
3 out of 12 models took part in the walk and photo shoot.
They visited Red Square, local markets, adjacent streets, and the
the USSR’s premier department store GUM.
The main Soviet newspaper of that time “Pravda” wrote that some of the styles were too open and short, and that they would not look nice on women who are stout and of short stature. It was evidently taken for granted that the majority of Soviet women were stout and not tall.
Other magazine wrote: “Bourgeois fashion makers come up with such styles that the woman has difficulty walking and must wrap herself around her man.”
Сообщение Dior Models in Moscow, 1959 появились сначала на Old Pictures.
]]>