/*
* 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
Сообщение 50 amazing and bizarre photos появились сначала на Old Pictures.
]]>His bizarre photos selection features both a photo of Hitler in Tyrolean shorts, a dinner for soldiers with crippled faces, and a married American nine-year-old girl with her twenty-two-year-old guy.
Most of these bizarre photos are documentary, but they grab the attention of the casual viewer.
Rob Moorees describes the origin of his collection as follows. He was called to digitize the large Dutch archive “Spaarnestad” located on the outskirts of Amsterdam. As he was finding more and more amazing and bizarre photos in the archive, Rob as permission to separate them from the rest. As a result, the researcher saved up an impressive amount of unusual photos on his laptop and began to publish them on the Internet and specialized magazines.
Rob even organized few exhibitions and printed a photo album titled “Life is a strange thing.” Moorees emphasizes that he deliberately did not categorize his bizarre photos according to any criteria. He wants each of the photographs in his archive to be not just part of a series or a thematic collection, but to have an inherent personality and self-worth in the photo. This effect is enhanced because most of the photographs in the archive belong to unknown photographers. Muris compares this situation with the works of the great artists of the past. We don’t remember anything about them but their paintings, their masterpieces, their vision of the world…
Here are some more bizarre diving suits from the past: It`s not a robot, it was a diving suit in 1911
Сообщение 50 amazing and bizarre photos появились сначала на Old Pictures.
]]>Сообщение Nine European kings in one photo, May 1910 появились сначала на Old Pictures.
]]>Nonetheless, there was no high tension between monarchs on May 20, 1910. On this day, masters of the W&D Downey photo studio took this historical image of Nine European Kings at Windsor Castle.
They never gathered together before this day.
Standing: King Haakon VII of Norway, King Ferdinand I of Bulgaria, King Manuel II of Portugal, German Emperor and King of Prussia Wilhelm II, King George I of Greece, and King Albert I of Belgium.
Sitting: King of Spain Alfonso XIII, King of Great Britain and Ireland, George V, and King of Denmark Frederick VIII.
There was a reason for all these nine kings to pose for a single photo. All of them were connected with family bonds. For example, Frederik VIII of Denmark (sitting, far right) was a daddy of Haakon VII of Norway (top left). The German ruler Wilhelm II of Germany (top, 3rd from the right) was a cousin of both George V of the United Kingdom (bottom center) and Queen Maud of Norway, who was wife to Haakon VII of Norway and sister to George V of the United Kingdom. Let’s not forget that Haakon VII of Norway and George V of the United Kingdom were brothers-in-law. George V of the UK and Queen Maud of Norway’s mother was incidentally Alexandra of Denmark, sister to Frederik VIII of Denmark. Here’s how Frederik VIII of Denmark was also the uncle of George V of the United Kingdom.
Again, George was a grandson of Queen Victoria and Prince Albert and the first cousin of Russian King Nicholas II of Russia and Kaiser Wilhelm II of Germany. By the way, Nicholas II also could be present in this photo, but he didn’t manage to come in time.
All these elegant and brilliant representatives of their dynasties came together to send off the last journey of the English king Edward VII. They do not yet know what awaits them in the very near future.
The revolutions and social transformations will remove four of nine of these monarchs. One of them will be killed (George I of Greece was shot in March 1913 in Thessaloniki).
In less than five years, Britain and Belgium will fight side by side against Germany and Bulgaria in WWI. Peter of Serbia (another king missing in this photo of the nine) will fight on King George’s side.
Only five of these nine monarchies will survive Norwegian, Spanish, English, Danish, and Belgian.
Сообщение Nine European kings in one photo, May 1910 появились сначала на Old Pictures.
]]>Сообщение Adolf Hitler during WW1: historical facts and pictures появились сначала на Old Pictures.
]]>It’s safe to say that Adolf Hitler was a mediocre personality before WWI. His parents were typical representatives of the middle class in the Austrian Empire. Young Adolf didn’t use a chance to start any decent career in pre-war Austria and relocated to Germany. Hitler positioned himself as an intellectual Austrian Empire’s German elite but never found any way how to make money with this mindset. Historians claim that Adolf selected that military career will fit him best. And the main reason why Hitler preferred the German army service to Austrian was a reluctance to serve alongside Czechs, Croats, and Jews, whom he disliked.
This photo appeared in various samples of german propaganda during the 1930s. It showed how close Adolf Hitler was with ordinary people before WW1. Munich photographer Heinrich Hoffmann took this photo at a demonstration in support of the war against Russia in Munich’s Odeonsplatz on August 2, 1914. Nevertheless, various historians doubt that it was a real photo with Adolf Hitler. They state that Hoffmann handled the image to highlight the soon-to-be-dictator. While the original negative of this picture was lost, it’s hard to prove if it was real. Other photos of that period show Hitler with a more massive mustache. The fashion of shaping facial hair down to a “toothbrush” is linked to the wearing of gas masks. Tiny mustache allowed to wear gas protection more comfortably; Taking to account the history of gas masks usage, we may conclude that it was unlikely that Adolf Hitler could have a tiny mustache in 1914.
Hitler had avoided the Austrian enlist for nationality reasons mentioned above. At the same time, he didn’t miss a chance to join the Bavarian army. Thus we cannot accuse Hitler of acting cowardly.
By the way, while being a part of Germany, Bavaria secured its independent army. The Austrian-born Adolf Hitler requested the right to join that army. On August 16, 1914, he entered the barracks of the 16th Bavarian Reserve Regiment.
It didn’t take to long for Hitler to get into the real WW1 massacre. During the first couple of months, he participated in the most horrible battles the German troops encountered.
In October 1914, German and British divisions expanded the front line, as they rushed to close the gap between their positions and the sea. Reserve armies, including the 16th Bavarian Reserve, relocated to Ypres.
In late October, those units assaulted the exhausted but experienced veterans of the British Expeditionary Division. The fresh German recruits experienced a terrible defeat. The 16th engaged in an encounter with 3,600 men. Only 611 unwounded survivors left in just five days. In two weeks, Hitler’s platoon of 250 soldiers was down to 42.
The losses were devastating. Those young men who survived called this battle the Massacre of the Innocents.
But Hitler proved himself as a brave soldier. He got a promotion to lance-corporal and recommended for the Iron Cross Second Class.
While serving in Bavarian Reserve, Hitler felt happy for the first time in his life. It was a perfect chance for social progression.
Hitler obtained a decent amount of medals and honor during the rest of WW1.
There’s no surprise that every german who served with Hitler told about his bravery. Please note, that many of that memoir dated earlier than Adolf Hitler took power in Germany. His former officers remembered him as a “reckless attacker” and “honorable nature.” Well, WW1 discovered the best sides of Hitler.
Hitler served as a runner, communicating messages back and forth between the trenches and commanders. His political opponents used this fact to undermine his reputation. They said he had not faced the risks of the front line, and he wasn’t in the trench during french raids. In fact, they were wrong.
Messengers did not participate in the bloody trench onslaughts. But they didn’t take a rest a stay safe at the same time. Artillery bombardments, gunfire, and gas, could finish the runners’ life immediately. For example, three out of the eight messengers in Hitler’s unit were killed and a fourth severely wounded during the first couple of days of real action.
Hitler was wounded several times during WW1. The battle near Bapaume in 1916 caused the most severe damage to his health. The fragment of shell immobilized his leg, and Adolf had stayed behind. He couldn’t leave the battlefield without assistance on that day. The wound was so bad that recuperation took long five months.
Hitler spent all WW1 time on the West Front, from October 1914 to October 1918. They’re not so many combatants with greater war hours count. But Hitler liked his WW1 experience. He spoke about it as it was the greatest of all adventures. Being part of something greater, serving with personalities he admired, it was a powerful life action for a young man.
Hitler never thought that WWI was a historical tragedy of humanity. It was a heroic battle that he participated in with comrades, and essential in a way his civilian life had never been.
Hitler spent several months on the quiet lines near Alsace. The rest of the war he served near Ypres. It was the snowiest, swampiest, most violently contested area of the front.
Heavy shelling, non-stop machine gun fire, and trench attacks became a daily routine. Hitler’s division encountered in the battles of Ypres, the Somme, and Arras – fights recognized with horror for their cold desolation and terrible losses.
On October 13, Hitler was in the Avangard trenches when the British started a gas attack. The gas flowed unnoticed into his burrow overnight. At dawn, he traveled toward the corps base with a note. The gas blinded Hitler, and he denied any try to hospitalize him.
Hitler’s war experience was remarkable. In four years of service, he took part in twelve battles and twenty-five other stints of trench duty.
The war developed military Hitler. The worst horrors of war were somehow linked with the best days of his life.
Сообщение Adolf Hitler during WW1: historical facts and pictures появились сначала на Old Pictures.
]]>Сообщение Serbia in WW1: photos and facts появились сначала на Old Pictures.
]]>WW1 is a significant chapter in the History of Serbia. This young Slavic state was in the middle of historical events from the first days of the war. WW1 started when the Austro-Hungarian Empire declared war on Serbia. It happened right after 19-year old Serbin Gavrila Princip triggered the action: assassinated Franz Ferdinand, the prince of Austria. The young revolutionary couldn’t even imagine what kind of historical tornado he called in his home country. Serbia desperately fought till the last day of WW1, losing at least a quarter of its population dead or lost.
Serbia covered a long way to its independence from the Osman Empire. Serbians initiated three uprisings against the Muslim rulers at the begging of the 19th century. As a result, the sultan recognized Milos Obrenoviche as a ruler of Serbia in 1815. But the formal independence came in 1878, after the war between Russia and the Osman Empire.
While gaining independence, a lot of Serbians dreamed of uniting all of the south Slavic people under the rule of Belgrade. Some of those Slavic territories were a part of the Austro-Hungarian Empire. Vien set the region on fire, supporting numerous conflicts between Slavic states of Balkan region during so-called Balkan wars of 1912-1913
There’s a historical fact that WW1 started right after Gavrilo Princip murdered Franz Ferdinand in Sarajevo in 1914. But the truth is that WW1 had to begin in one way or another. Austro-Hungary was preparing for it, Germany was preparing for it… Countries of Antanta did so too. It was a matter of time.
The first weeks of WW1 had brought some mixed success to the army of Serbia. Combat operations in this sector of the front went on with varying success. After winning some battles in August 1914, including the one in the region of the Tser ridge, Serbians couldn’t resist overwhelming Austria. The Austrian troops took the Serbian capital in November 1914, despite the active help from Russian and French soldiers.
King Peter joined the army of Serbia in November 1914. He couldn’t act like french trench raiders, but he managed to ignite the inner fire in his troops that suffered poor morale. Peter ordered a new offensive. Serbian started it on December 3, 1914. During the 12 days of fighting on the river Kolubare and river Drina, they defeated the Austro-Hungarian troops. On December 15, the Serbians took Belgrade back. Not a single Austro-Hungarian soldier remained on Serbian territory; more than 50 thousand prisoners were captured, 126 cannons, 70 machine guns, and many other trophies.
The fails of 1915
Serbia passed through two major historical blows during the battles of WW1 in 1915. It all started when the German forces joined the Austro-Hungarians in October 1915. Austro-Hungarian and German troops suppressed the fierce resistance of Serbians and retook Belgrade on October 9. Serbs retreated to the south.
The second blow came from the Balkanian brothers. On October 14, Bulgaria entered WW1 on the side of Germany. Bulgarians invaded Serbia on the morning of the next day.
Lost battles forced the French command to transport the Serbian army to Italy, and then to Tunisia. Serbian units restructured there and subsequently returned to the front. This relocation required massive naval support. The helping hand came from France and England.
Serbs continue to fight on the Thessaloniki front
Serbs continued resistance in Albania on the so-called Thessaloniki front. France reinforced the Serbians with their divisions in May 1916. In total, the Serbian troops numbered 130,000 people. The allied forces in the Balkans reached 300,000.
Antanta troops received significant superiority by the end of the summer of 1918. They initiated a new offensive with extensive usage of gas attacks on the Thessaloniki front. Demoralized Bulgaria could overcome this defeat and capitulate on September 29. Serbian army victoriously entered Belgrade on October 18, 1918. It was a new glorious page in Serbian history – Belgrade became the capital of the Kingdom of Serbs, Croats, and Slovenes (since 1929 – Yugoslavia).
Сообщение Serbia in WW1: photos and facts появились сначала на Old Pictures.
]]>Сообщение Trench raiders wearing gas masks during WW1 появились сначала на Old Pictures.
]]>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 sides of WW1 widely used gas attacks until the last days of the war, due to their effectiveness. Here’s why gas masks were the only way to survive for infantry, civilians, and even animals during the war action.
Сообщение Trench raiders wearing gas masks during WW1 появились сначала на Old Pictures.
]]>