/*
* 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
Сообщение Kaiser Wilhelm II and Tsar Nicholas II, 1905 появились сначала на Old Pictures.
]]>Kaiser Wilhelm II initiated that negotiations trying to create a bloc of states against England. Relations between Russia and England at that time were hostile. Here’s why Nicholas II accepted this proposal of the German Emperor.
Emperors also had plans to induce France to join the alliance.
Russian ruler signed the agreement with Wilhelm II on the island of Bjorke, without notifying the Minister of Foreign Affairs Lamsdorf.
This treaty contradicted Russia’s obligations within the Franco-Russian alliance. And Lamzdorf managed to convince the tsar to send William II a soft refusal, citing formal obligations towards France. The treaty was actually annulled by a letter from Nicholas II to Wilhelm II of November 13, 1905.
Сообщение Kaiser Wilhelm II and Tsar Nicholas II, 1905 появились сначала на Old Pictures.
]]>Сообщение WWI Christmas truce in 1914: pictures and facts появились сначала на Old Pictures.
]]>Later reporters will call it a WWI Christmas truce of 1914. Of course, the decorations were primitive as they can be during wartime. The sparkling copper leading belts from shells decorated the Christmas trees. Garlands replaced bandages and telegraph tapes.
But the fact itself did not fit in with the atmosphere of the hopeless massacre that had prevailed here for the past few months! Very soon, Brits heard the German Christmas song, Stille Nacht.
The shooter of the Royal Scottish Guards Graham Williams recalled that evening much later:
I was in the trench, watching the German line of defense. I was thinking about how different this holy night was from those that I had before … When suddenly lights appeared here and there near the German trenches. The light came from the candles lit on Christmas trees. The candles burned evenly and brightly in the calm and frosty evening air. Other sentries rushed to wake the sleeping people. “Look what is happening!”
And at that moment, the enemy began to chant Stille Nacht, Heilige Nacht. In fact, it was the first time I heard then this hymn, which was not so well known in our country. The Germans finished singing, and we thought we had to respond with something. And we sang the psalm First Nowell, and when we finished, there was friendly applause from the German side. They followed with another Christmas song, beloved by the Germans – O Tannenbaum. The Kaiser’s soldiers began to go out to the neutral zone with exclamations: “Merry Christmas, British!” They carried gifts in their hands instead of weapons.
Here’s how the Germans and the British soldier began to go out to no man’s land to celebrate WWI Christmas truce of 1914. An English officer recalls:
I looked out of the trench and saw four German soldiers emerging from their trenches and heading in our direction. I ordered two of my men to meet the “guests”, but without weapons, since the Germans were not armed. But my guys were afraid to go, so I went alone. When the Germans approached the barbed wire, I saw that they were three privates. One of them said in English that they only want to wish us a Merry Christmas.
I asked what order the Germans received from the officers since they walked in our direction. They replied that there was no order, they went without permission. We exchanged cigarettes. When I returned to the position, the trenches were empty. I was surprised to find a crowd of 100-150 British and German soldiers. They laughed and celebrated. After a while, I noticed two German officers and through an interpreter told them that they should meet in a no man’s land and without weapons. One of the enemies admitted that he dreamed of an imminent end to the war, and I agreed with him.
The soldiers of both armies received Christmas parcels from home. They could exchange small gifts: food, tobacco, various alcohol, even buttons, and hats were used. More than one hundred thousand Germans, British and French along the entire Western Front, stopped killing each other that night. Right between the lines of the trenches, the military priests performed the Christmas service.
Instead of organs of city cathedrals, soldiers sang. Former enemies together collected and buried the bodies of the killed, decomposed for months in funnels. They performed funeral services and prayers together.
In some front sectors, the truce lasted only one night, but in some places, the WWI Christmas truce of 1914 lasted a week until the New Year. It turned out that propaganda clichés are inexpensive: having started to communicate, the “Hans” and “Tommy” quickly realized that their opponents were not all the fiends from hell. Hatred disappeared, giving way to the friendliness of people in an equally bad situation.
After the nightly Christmas services and the exchange of gifts, the miracles continued on the very day of Christmas. The soldiers came out of the trenches again and began to play football in the no-man land!
The bars of the gate were stakes in the ground. A stew can could serve as a ball. Each team could have an arbitrarily large number of players: no one really cared about the rules.
Ironically, the soldiers played football near Ypres’s town, which will give a name to the most deadly gas of WWI. The Yperite gas, or the Mustard gas, was dangerous because no WWI gas mask could stop it.
When information about the soldier’s willfulness reached the authorities, the reaction on the WWI Christmas truce of 1914 was immediate. The guilty were punished, and the fire began. The commander of the British II Corps, General Horatio Smith-Dorren, issued an order prohibiting any communication with the enemy. The commander of the Scottish Guards, Sir Ian Calhoun, was nearly shot for “aiding the enemy.” Only the personal intervention of King George V saved an officer. The King considered it unethical to shoot a knight and a relative of his prime minister.
By the way, some germans expressed dissatisfaction with the “outrageous” fact of fraternization with the enemy. The little known corporal from the 16th Bavarian Reserve Infantry Regiment was the one among them. Corporal’s name was Adolf Hitler.
For almost a week, governments and military censorship managed to hide information about the unauthorized Christmas truce in 1914. But still, the truth soon surfaced: the New York Times reported on an unusual event, and in early January, the British Daily Mirror and Daily Sketch reprinted American photographs.
Governments tried to suppress any attempts to reconcile the soldiers on major Christian holidays in advance. Since 1915, the British artillerymen were ordered to increase the intensity of German positions on the eve of Easter and Christmas.
Commandant reshuffled units in different sectors of the front in order to prevent the establishment of any comradely ties with the Germans. There was no more such a Christmas truce as it was in 1914.
Сообщение WWI Christmas truce in 1914: pictures and facts появились сначала на Old Pictures.
]]>Сообщение German WWI submarine UB122 that spent 92 years underwater появились сначала на Old Pictures.
]]>The end of the story of this German WWI submarine wasn’t heroic in any way. The vessel, which never fired any of its ten torpedoes, was handed over to the British, who decided to melt it down. However, upon entering the Thames estuary, the towing ropes collapsed, and the submarine suddenly sailed away. The escape ended at the swampy coast of Kent.
And yes, we remember that this German WWI submarine ended its days just like UB122, but at a different British shore.
The history of this submarine surfaced at the end of 2013. Strong December tides pulled the boat closer to the shore.
Historians identified the submarine only after its inspection. According to archival records, in total, six German submarines were lost during the towing! Three of them – U122, U123, and UB122 – all this time were hiding somewhere in the local shallows.
Three British and 41 German boats sunk during WWI around this British coastal area.
WWI is usually called the ‘first modern war’ – and the naval war. Many technologies were used for the first time. U-boat tech was one of them. Effective submarine combat was an especially new aspect of war. Germany concentrated on U-Boat production to fight the greater British flotilla and put pressure on its Atlantic units. German submarines had a massive surprise effect during the first years of WWI.
Сообщение German WWI submarine UB122 that spent 92 years underwater появились сначала на Old Pictures.
]]>Сообщение WWI German submarine on the beach появились сначала на Old Pictures.
]]>After the end of the war, France took control over the SM U-118. Nonetheless, U-boat didn’t reach the French shore. While a French ship was towing it, the cable broke, and the boat was carried to the beach near the British resort of Hastings.
As you may guess, the WWI German submarine’s appearance on the beach of a small brit town was a major event for locals. So the boat became the main city attraction. The local authorities even organized paid excursions inside the sunbathing submarine. Army engineers dismantled U-boat only in 192. But the residents of Hastings still store various parts of the SM U-118 in their houses. Well, some submarines, like this Soviet one, live a really bizarre life.
Submarines were the deadliest weapon in the Germans’ hands. Their submarine was much more advanced than the ones used by Entente forces. The typical U-boat was 214 feet long, carried 35 men and 12 torpedoes. It could stay underwater for two hours, but its speed and maneuvering were limited. Those submarines caused significant damage to British and French fleets during the first period of WWI.
In May 1915, several New York newspapers distributed a notice by the Germany officials. It literally warned Americans not to travel to the UK as it was under the blockade. Interestingly, the statement shared the same newspaper page with an advertisement for the British-owned Lusitania ocean liner’s coming voyage from New York to Liverpool. On May 7, the WWI German submarine sank the Lusitania near Ireland. Of the 1,959 passengers, 1,198 were killed, including 128 Americans.
Сообщение WWI German submarine on the beach появились сначала на Old Pictures.
]]>Сообщение Ernest Hemingway recuperating after his injury during WW1 появились сначала на Old Pictures.
]]>Ernest Hemingway participated in WWI as a volunteer. Writer’s war history didn’t mean to be heroic as he served in Italy as an ambulance driver with the American Red Cross. In June 1918, while operating a mobile kitchen distributing chocolate and cigarettes for combatants, he was wounded by an Austrian shell explosion. “Then there was a flash, as when a blast-furnace door is twirled open, and a cry that started white and went red,” Hemingway recalled his injury in a letter home.
Hemingway ignored his wounds and transported an injured Italian officer to safety. He caught another bullet from the machine-guns while doing this heroic deed. Later Hemingway got the Silver Medal of Valor from the Italian Ministry of Defence for this historical episode.
Hemingway spent over a year in Europe but he fell in love with the Old Continent. He visited many European countries later, including Italy, Spain, and France, looking for inspiration and new characters for his books.
Hemingway remembered those events later in Men at War: “When you go to war as a kid, you have a high illusion of immortality. Other guys get killed; not you. . . . Then when you catch your bullet for the first time, you lose that illusion, and you know it can happen to you. After being severely wounded two weeks before my nineteenth birthday, I had a bad time until I figured out that nothing could happen to me that had not happened to all men before me. Whatever I had to do, men had always done. If they had done it, then I could do it too, and the best thing was not to worry about it.”
Rehabilitation took long six months in a Milan hospital. During that period, Hemingway fell in love with Agnes von Kurowsky, an American Red Cross nurse. The rumor has it that this Hospital of Milan was full of wine and cats, and injured soldiers spent their time with pets. Who knows, maybe those six months made Ernest Hemingway a famous cat-lover. This romantic event completed the transformation of Ernest Hemingway from a young boy from Oak Park, Illinois, to a different, adult man. WW1 granted him invaluable life experience that included combat and love. Changes in his character were exciting.
Сообщение Ernest Hemingway recuperating after his injury during WW1 появились сначала на Old Pictures.
]]>Сообщение The Chicago race riots of 1919 in pictures появились сначала на Old Pictures.
]]>Some pictures show the horrible scenes of dead body removals (Chicago riots of 1919 resulted in 38 deaths and 500 injuries). Other photos captured the policemen and national state guards that tried to bring order to the streets. Some pictures are just rare snapshots of Chicago’s dwellers who attempted to survive the chaos of the civil protests.
Сообщение The Chicago race riots of 1919 in pictures появились сначала на Old Pictures.
]]>Сообщение A Pyramid of German Helmets in Front of Grand Central появились сначала на Old Pictures.
]]>This pyramid at Grand Central was a pure propagandistic act promoting the 5th War Loan. The government widely raised funds for military purposes during the wartime, and these loans had different promotions (like WW1 posters), and creative ideas like this pyramid. So this bright image is another page in the history of the New York Central Terminal.
A pyramid consisted of 12,000 helmets neighboured other samples of captured German war equipment, like cannons. While many of the image’s details have been confirmed, the figure that was placed at the top of the pyramid is still subject to speculation. Some commenters believe that it’s Nike, the Goddess of Victory. There are also two cannons located on the left and right of the helmet pyramid.
Check our History of WW1 gas masks in photos.
Сообщение A Pyramid of German Helmets in Front of Grand Central появились сначала на Old Pictures.
]]>Сообщение History of WW1 gas masks in photos появились сначала на Old Pictures.
]]>War history didn’t know gas attacks before WW1, and these photos will show you how combatants, civils, and sometimes animals, protected themselves with gas masks against this new mortal threat.
Germans were the first to realize the efficiency of the gas attacks, but other countries followed them very soon. The very first german forces used chemical shells on April 22 versus the french division. Russian forces faced the green gas threat on May 31, 1915. A greenish cloud that appeared above the trenches at about 3:30 a.m. was mistaken for a well-known smoke screen, usually followed by an attack. Therefore, reserves tightened around the front line, and the forward line as crowded as possible.
Two Russian regiments were virtually destroyed as a result. Losses included 16 officers and 3147 soldiers. Total casualties on the entire front sector hit eight thousand.
All allied countries started their researches towards any protection from gas attacks. Russian scientists played an exceptional role in the history of chemical warfare, and in particular, in the history of the development of gas masks.
Both in the pre-war period and during the war of 1914-1918, there were many outstanding world-famous scientists among the Russian professors. Most of them were involved in defense researches.
Check other war history photos: Crimean War.
The best mean of protection involved activated charcoal, which performed as a natural filter for gas masks. The crush-testing was pretty simple: sulfur was burned in an empty room, and when the concentration of sulfur dioxide reached a level at which it was impossible to enter the room without a gas mask, people came into it with worn gauze bandages, between the layers of which fine-grained activated charcoal was wrapped. Charcoal showed the best result when used with a tight fit of a gas mask.
Nonetheless, the history of the gas mask is not that simple. Russians somewhat improved gas masks and adjusted them to the gas attacks protection then invented them. Let’s note that the modern gas mask was designed in 1912 by the American Garret Morgan. True, it was intended to protect firefighters and engineers during toxic environments works. Lewis Haslet claimed the first American patent for a “lung protection device” in 1849. The German Alexander Drager patented his gas mask design in America in 1914. All of these history devices are here, in this gas masks photos collection.
Check other war history photos: Korean War.
Сообщение History of WW1 gas masks in photos появились сначала на Old Pictures.
]]>Сообщение US WWI propaganda posters появились сначала на Old Pictures.
]]>The US entered war I in 1917 in alliance with the good Britain and France. By this time the US economy was one the largest in the world, but nevertheless the government needed to raise funds to support the military activity in Europe in all possible ways, including selling bonds to the citizens of the US. Here’s how the art of the propaganda came in help. The United States was already a leader and trendsetter in the recently discovered art of movie making and therefore the new profession of economic advertising. So it was just a matter of time when such effective newly discovered technologies will become an instrument in the shaping of the American people’s minds and therefore the altering of popular opinion into a pro-war position. The idea of participating in the war ‘over there’ had to be planted into citizen’s minds and result into recruitment to the army itself or funding the war activities with their dollars.
The visual part of this propaganda consisted mainly of posters. The simple attention grabbing slogan and the self speaking illustration served well, convincing people to support the army. They might be pasted on the edges of buildings, put within the windows of homes, tacked up in workplaces, and resized to seem above car windows and in magazines.
In 1917 the U.S. government’s public information committee formed a Division of Pictorial Publicity, and their main goal was to use the advertising techniques in messaging the war news. The committee, headed by former investigative journalist George Creel, emphasised the message that America’s involvement within the war was entirely necessary in achieving the salvation of Europe from the German and enemy forces.
In his book titled “How we Advertised America,” Creel admitted that the committee was called into existence to form WWI a fight that might be a “verdict for mankind”. He called the committee a voice that was created to plead the justice of America’s cause before the jury of popular opinion . Creel also refers to the committee as a “vast enterprise in salesmanship” and “the world’s greatest adventure in advertising”. Needless to say that the committee’s message resonated deep within every American community and also served as a corporation liable for carrying the complete message of yank ideals to each corner of the civilized globe. The isolationism that was once popular across the US public opinion was replaced with understanding of the importance of the events that took place in Europe and necessity of the US government to participate in them.
142 years young and still strong Uncle Sam is going to war
Сообщение US WWI propaganda posters появились сначала на Old Pictures.
]]>Сообщение Germany, 1923. Hyperinflation. Kids are playing with money packs because toy blocks are too expensive появились сначала на Old Pictures.
]]>Germany, 1923. Hyperinflation made paper notes so worthless that these kids used them as building blocks. By November 1923, the US dollar was worth 4,210,500,000,000 German marks.
WWI ended on November 11, 1918, with the capitulation of Germany and its allies. The Versailles Peace Treaty of 1919 consolidated its declassified status: demilitarization, territorial concessions, loss of colonies and foreign investments, reparations. WWI battles didn’t touch Germany’s territory, and aviation at that time could not yet cause any serious destruction. However, Germany was severely exhausted by the war. The monarchy was crushed, and the fragile republic faced enormous economic and political difficulties. Politicians tried to relieve international obligations many times during the numerous summits and negotiations but failed.
The government used direct monetary emission, loading the Reichsbank (central bank) with its obligations. By the end of the war, the money supply exceeded the pre-war numbers by 5 times.
Germans never experienced heavy money inflation.
The prices began to climb in 1919. The inflation caused political turbulence in 1919-1922. By July 1922, the mass of banknotes had increased more than 7 times compared to the moment of the cease-fire. The price level increased 40 times, and the dollar exchange rate even 75 times. By June 1923, the money supply had increased by about 90 times, prices by 180 times, and the dollar exchange rate by 230 times.
The inflationary agony began in the summer of 1923. In the four months before the end of November, the money supply increased 132,000 times, the price level increased 854,000 times, and the dollar exchange rate almost 400,000 times. The history of paper money did not know of such magnitude of depreciation; only inflation in Soviet Russia had a similar scale.
Reichsbank banknotes in circulation by mid-November hit 500 quintillions. Every month, the government printed more and more banknotes. The most “expensive” in the end was the 100 trillion mark. True, it has “100 billion” printed on it. In fact, this banknote costs less than $25. The blocks of the ‘millions’ banknotes became useless.
Сообщение Germany, 1923. Hyperinflation. Kids are playing with money packs because toy blocks are too expensive появились сначала на Old Pictures.
]]>