/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Добавить комментарий | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Добавить комментарий

Орша 1514 года

Автор 26 лет своей жизни носил погоны, не понаслышке знает как работает артиллерия. Кроме этого, он добросовестно проработал все русские и литовские летописи того времени, труды польских, русских и советских историков, касавшихся этой темы. Им изучены труды по истории пехоты, конницы, артиллерии и военных потерь. Автором проштудированы уставы и наставления, регламентирующие деятельность войск давних времен. К своему удивлению автор не встретил ни одного внятного упоминания западными авторами Оршанских событий 1514 года. А ведь как нам внушали оппозиционные авторы, эти события на Западе приняли за образец военного искусства...

Бой престижа
Для правильного понимания некоторых из описываемых исторических событий надо окунуться еще глубже в историю. Все знают, что существовало большое монархическое государство Киевское великое княжество, составными частями которого правили члены одной семьи. В силу объективных причин великое государство распалось на более мелкие образования, в которых находились близкие по крови, духу и вере люди. В результате татаро-монгольского нашествия русские княжества были значительно ослаблены, за исключением северо-западных земель, куда захватчики попросту не добрались. Для Литвы наступил период расцвета – кто-то из соседей сдавался добровольно, тех же, кто сопротивлялся – принуждали силой. Литва в этот момент была языческой, Русь – православной, Польша – католической. Польша была достаточно сильным государством, поэтому Литва стала захватывать восточные и южные земли, где человеческий потенциал после татаро-монгольского разорения восстановился очень и очень нескоро. Трижды Великий Князь Литовский Ольгерд предпринимал попытки захватить и Москву. Города он захватить не смог, но пригороды пожег, а людей увел в плен (в рабство). Только неудачный бой под Любутском заставил Ольгерда отказаться от дальнейших враждебных намерений в отношении Москвы и заключить с нею мир. Современники говорили, что «Москва потерпела от Ольгерда такое бедствие, какого не испытывала со времени нашествия Батыя» (Н.И. Костомаров). Для борьбы с давлением с Запада был образован в 1375 г. общерусский союз куда, кроме великого князя владимирского и московского, входили князья суздальско-нижегородские, ярославльские, городецкий, ростовские, белозерский, моложский, стародубский, брянский, кашинский, новосильский, оболенский, тарусский, смоленский и др. «Чрезвычайно интересно, что в общерусский союз включен и князь смоленский. В докончании имеется следующая статья: «А пойдут на нас Литва, или на Смоленского на князя на великого, или на кого на нашу братью на князей, нам ся их боронити, а тобе с нами всим содиного». (Л.В. Черепнин). В 1395 г. Витовт скидывает смоленского князя с престола и ставит своего наместника. Осенью 1401 г. «…князь Юрьи взя Смоленск и седе в своей отчине». Помогал ему в этом Олег рязанский. Дважды (в 1401 г и 1404 г.) Витовт тщетно, даже с помощью пушек пытался взять Смоленск. После отражения очередной попытки князь смоленский Юрий отправился в Москву, «бил челом» Василию Дмитриевичу, «служити даючися ему со всем своим княжением». (ПСРЛ т. XVI). К сожалению возможности оказать помощь в то время у московского князя не было и после очередного приступа, в отсутствие своего князя, нашлись люди которые сдали город. Смоленский князь остался на Руси с громадным желанием отомстить врагу. В русском войске под стенами Смоленска в 1514 г. были и потомки смоленского князя Юрия. После этого скажите мне – кто здесь захватчик? Или отобрать у бандита свое кровное называется грабежом?

К тому же еще раз подчеркну – Литва вначале была языческая. В силу этого не она навязывала религиозные воззрения, а, наоборот, перенимала их, т.е. переходила в духовное подчинение присоединенному племени. Так полоцкие князья, независимо от происхождения, были союзниками русских. Плохо пошли дела, когда литовская верхушка, следом за Ягайло, перешла в католицизм. Для католиков православный – схизматик, т.е. еретик, недочеловек. Поэтому до сих пор православного, переходящего в католицизм перекрещивают. Бог-то вроде бы один – Христос, но вопрос заключен не в нем, а в подчинении. Для нас этот вопрос потерял свою остроту, а в описываемое время это был вопрос, в прямом смысле, жизни и смерти. Поэтому, каждый должен поставить перед собой вопрос: «Какому богу ты молишься?», т.е. – кому подчиняешься, не только в прямом, но и в переносном смысле. Если поймете это, то тогда поймете причину ожесточенности религиозных войн.

Варфоломеевская ночь произошла в 1572 г. во время жизни Ивана Грозного. Так за всю его жизнь погибло меньше людей, чем в Париже (центре культуры!) за одну ночь. И после этого нас чему-то учат!
А ведь многое во взаимоотношениях двух братских государств могло пойти по иному, более благоприятному сценарию. Даю слово академику Л.В. Черепнину: «Оказывается, предполагался брак Ягайла с дочерью московского князя. На этот счет состоялось специальное соглашение Дмитрия Донского с матерью Ягайла, вдовой Ольгерда – Иулианией Александровной (дочерью тверского князя Александра Михайловича). Сведения об этом документе, также совершенно незнакомом исследователям, сообщает все та же опись 1626 г.: «Грамота великого князя Дмитрея Ивановича и великие княгини Ульяны Ольгердовчи, докончанье о женитьбе великого князя Ягайла Ольгердова, женитися ему у великого князя Дмитрея Ивановича на дочери, а великому князю Дмитрею Ивановичю дочь свою за него дати, а ему великому князю Ягайлу быти во их воле и креститися в православную веру и крестьянство свое объявити во все люди». Представляете, насколько бы раньше были бы разгромлены разные ханы, немецкий Орден, не хозяйничали бы поляки в Москве в 1612 г. и т.д. и т.п. К сожалению Ягайло прельстила королевская корона…

Так что, уважаемый читатель, то, что для нас туманно за давностью лет, за недостатком источников, а часто заведомой фальсификацией событий, было абсолютно ясно и понятно людям того времени.
Легендарная личность Козьма Прутков поучает нас: «Подвергай все сомнению», а от себя добавим – и сравнению. Как вы догадались, разговор пойдет о, якобы невероятной, численности русских войск. Здесь, смею вас заверить, что ни слово – то ложь. Давайте вместе поразмышляем. Территориально граница с Литвой находилась около Можайска, т.е. в 100 км от Москвы. Смоленщина и Брянщина были под Литвой, а далее граница тянется до Рязани. За Волгой – Казанское ханство. Против Новгорода и Пскова расположены земли враждебного Ливонского Ордена. На Севере простирались довольно обширные, но абсолютно пустынные земли, которые только отвлекали людские ресурсы для своего освоения. Весь людской потенциал средневековой Руси был в десятке современных областей вокруг Москвы. К тому же плотность населения здесь была ниже, чем в соседней Литве. По людским ресурсам ВКЛ было почти вдвое богаче ВКМ. Но в средние века численность армий зависела даже не от этого. Говорит величайший военный историк Ганс Дельбрюк: «…Численность войска определяется не общей численностью народной массы, а наличием особого военного сословия». Другой известный немец Карл фон Клаузевиц (кстати стажировался в русской армии в 1812 г.), добавляет: «Крупные и мелкие монархи средних веков вели свои войны при помощи ленных ополчений. …Вооружение и тактика основывались на кулачных началах, на единоборстве, а, следовательно, были мало пригодны для действия в крупных массах». И ВКЛ и ВКМ были феодальными государствами со всеми свойственными им атрибутами, правда, с национальной окраской. У одних военно-служивый класс назывался шляхтой, а у других – помещиками. Комплектование же армий было абсолютно одинаковым – дворянское ополчение, и людская разверстка также одинаковая. Статут ВКЛ 1529 г. говорит: «…обязан…нести военную службу и снаряжать на военную службу столько людей, сколько в то время будет признано нужным по земскому постановлению…» И далее цитирую по книге «Нарысы исторii Беларусi» части первой: «Згодна з рашэннямi сеймаў 1528 i 1529 гг. адзiн узброены коннiк павiнен быў выстаўляцаа з восьмi сялянскiх «службаў». Калi шляхцiц меў меньш васьмi службаў або наогул не меў сялян, то ён з'являўся ў войска асабiста». А что же в России? «…всем от поместий и от отчин ото ста четвертей ставити на войну человека совсем гожаго,… а кто быти сам не может, ни сына не пошлет, тому слати холопа от двухсот четвертей с конем с полным доспехом и запасом…». Это выписка из Судебника Ивана IV. Как же совместить «службы» и «четверти»? Сто четвертей равнялись 50 десятинам. Милов Л.В, пишет, что в средней крестьянской семье было примерно 2 мужские ревизские души. На одну душу приходилось 3-3,5 десятины, а значит на двор – 6-7 десятин. Вот и получается 8 хозяйств на 50 десятин. Так было ли в чем преимущество ВКМ? Да было! Было то, против чего так рьяно выступает наша современная оппозиция – четкая централизация государственной власти и объединяющая всех здоровая национальная идея. Крамола же изводилась быстро и радикально. Потому-то выжило и окрепло московское государство, окруженное со всех сторон врагами. Но как только в начале XVII века централизованная власть ослабла, а у руля встали олигархи – бояре, так сразу же Москва была захвачена поляками. И только народное вмешательство вернуло России прежнюю силу вместе с избранием нового царя. С Речью Посполитой же произошло все наоборот. И Крылов, обращаясь к уму взрослых людей, писал: «Как ни приманчива свобода, но для народа не меньше гибельна она, когда разумная ей мера не дана», Игры в неправильно понятную демократию со знаменитым шляхетским «не позволям!» уничтожили одно из сильнейших в Европе государств. Польский историк Ю.А. Геровский писал: «При Стефане Батории Речь Посполитая выставляла во время военных компаний до 60 тыс. хорошо оснащенного набранного войска, что делало ее одной из первых держав в этой части Европы», И так, какова все же численность московского войска? Советский историк Е.А. Разин, уточняя цифры Середонина и Чернова, считает, что число дворян и детей боярских было около 20 тыс. человек, а вся поместная конница могла иметь 30-35 тыс. человек. А теперь послушаем снова Клаузевица: «Количество вооруженных сил, которые правительства могли выставить, являлось в достаточной степени определенной данной, и ее можно было взаимно учитывать». Далее Клаузевиц уточняет: «Денежные доходы, казначейская наличность и кредит противника были известны: известна была и величина армии. Значительное увеличение последней в момент объявления войны являлось невыполнимым». Знал о мобилизационных возможностях ВКМ и король Сигизмунд. Все польско-литовские источники согласно говорят о начале подготовки короля Сигизмунда к новой кампании с августа 1513 г. Был введен новый налог и собраны хорошие деньги на закупку 10 тысяч польских конных и 2 тысяч пеших наемников. Были приобретены орудия, аркебузы, порох, пули и т.д. и т.п.

«…ротмистрам велел предупредить службу для того, чтобы вся Литва могла выдвинуться» (Бельский). Т.е. была объявлена частичная мобилизация. Польша, которая по Виленско-Радомскому акту 1401 года должна была защищать интересы Литвы, как свои собственные, не трогалась. Зато задействовались другие механизмы: «Перекопскому хану также подарки послал, чтобы был с ним в готовности» (Бельский). Вел Сигизмунд переговоры и с Плеттенбергом, Магистром Ливонского ордена. Тот бы и хотел, и сам русских ненавидел, но у самого силенок было маловато, а Великий магистр Тевтонского ордена был против союза с Польшей. Император же Максимилиан, на союз с которым все ссылаются, ввязываться в драку за чужие интересы не собирался и союз заключал для своего блага. Русский великий князь это знал, и союз заключал только для психологического давления на Польшу. Но выбора не было, – на безрыбье, говорят, и рак – рыба. Максимилиана беспокоило другое. Русский историк Соловьев пишет: «Максимилиан, видя слабость короля, боялся, чтобы Россия не подавила его. «Целость Литвы необходима для блага всей Европы: величие России опасно» - писал он Великому магистру Немецкому. И далее: «Не добро, что король прогонится, а царь всея Руси велик учинится!».

Итак, мы имеем к лету 1514 года, собранную в кулак, 35-ти тысячную армию одного государства и 35-ти тысячные вооруженные силы другого государства разбросанные по большой территории. Герберштейн, посол того самого Максимилиана, пишет: «…если он (московский государь) не ведет никакой войны, то все же каждый год обычно ставит караулы в местностях около Танаида и Оки, в количестве двадцати тысяч человек, для обуздания набегов и грабежей перекопских татар». Как видим, не все свои силы Москва могла бросить против Литвы. А были еще Казанское ханство, Ливонский орден…, и всем требовалось выделить хотя-бы понемногу от общих сил. Раскроем книгу Рязрядного приказа (Московское министерство обороны того времени) за 1514 год и увидим, что часть войск Московский великий князь держит под Великими Луками от ливонских немцев; часть – в Мещоре, Серпухове, Туле для обороны от крымских татар; часть – оставил в Москве, как стратегический резерв, да и Казани все может в голову стукнуть. Так на чьей же стороне был численный перевес? Хоть мобилизационные возможности у союзного польско-литовского государства были неизмеримо больше, король решил, что этого количества – ему достаточно. И был абсолютно прав. Так что же собирался завоевывать Василий III, а Сигизмунд I оборонять в кампанию 1514 года? Дадим снова слово военному знатоку Карлу фон Клаузевицу: «План войны наступающего государства состоял в те времена по преимуществу в том, чтобы овладеть той или другой неприятельской областью, план же обороняющегося стремился воспрепятствовать этому. План отдельной кампании сводился к захвату той или другой неприятельской крепости или же к тому, чтобы воспрепятствовать такому захвату. Обычно вся кампания заключалась в одной осаде…» Две предыдущих осады Смоленска вроде бы достаточно подтвердили выводы этого военного специалиста. Посмотрим же: кого и чему научили кампании 1512-1513 гг. Великий Князь Московский Василий III, убедившись, что без артиллерии такую крепость ему не взять, отливал, соответствующие этой задаче, пушки и готовил кадры артиллеристов. О пехоте упоминаний нет, хотя в прошлую кампанию отмечалось наличие 2000 пищальников. Думаю, что этот новый род войск не был обойден великокняжеским вниманием и в этот раз. А также он вызывает из-за границы, возможно с помощью Глинского, специалистов по взятию крепостей. Что же делает Сигизмунд I, кроме того, что мы уже видели? Смоленский замок выстоял две осады без особого для себя урона. «Был так полно и башнями и орудиями и всем необходимым хорошо снабжен, что ему было трудно из пушек и подкопом что-либо сделать, к тому же имел согласно необходимости достаточное число людей. Поэтому-то не очень из-за этой осады беспокоился король» (Бельский). Это была одна, но не главная причина поведения Сигизмунда I в кампанию 1514 года. Главной же причиной был самый обычный страх перед противником. Летом 1500 г. на реке Ведрошь московский воевода Даниил Щеня в равном бою вдребезги разбил армию ВКЛ под командованием К. Острожского, а самого взял в план. В плену к К. Острожскому, как православному, относились хорошо. Вскоре он дал присягу на верность Великому князю московскому – за что получил чин боярина и звание воеводы, обширные земли. Но власть-то, богатства вольности несоизмеримые! При всем своем желании не мог Великий князь московский возместить К. Острожскому – магнату ВКЛ его богатств, связей, блеска и т.п. Через некоторое время он сбежал в Литву, нарушив крестоцелование, что в то время было страшным преступлением. В Разрядной книге за 1508 г. читаем: «Воеводы с Королем под Оршею об реку Днепр сошлись, и полки с полками виделись, и Шемячич и Глинский и Воеводы от Днепра отступили и стояли в Дубровне 7 дней; а Король за реку ни сам не пошел, ни людей не послал». Т.е. король вместе со своими гетманами, вкупе с Острожским, который к этому времени сбежал из Москвы, побоялся, в аналогичной 1514 г. ситуации, вступить в открытый бой со значительными силами противника, но не превышающими численность войска ВКЛ. Эта боязнь сыграла решающую соль в кампании 1514 г. Что должен был сделать, но не осмелился Сигизмунд I? Дадим опять слово немцам. Клаузевиц пишет:

«…близлежащая и обороноспособная крепость должна служить для обороняющегося решительным мотивом, чтобы с самого начала отойти за нее и дать состояться решению по сю сторону ее», т.е. пользуясь содействием крепости. В доказательство Клаузевиц приводит свои примеры. Ганс Дельбрюк, описывая сражение при Павии в 1525 году, указывает, что только совместные усилия гарнизона осажденной крепости и деблокирующей армии смогли разгромить врага. Вот как надо было воевать Сигизмунду под Смоленском. Итак, формулируем причину: из боязни проиграть сражение и надеясь на неприступность крепости с ее наемным гарнизоном, Сигизмунд I бросил Смоленск на произвол судьбы, что позволило Василию III беспрепятственно проводить мероприятия по взятию крепости.

Окончание в следующем номере

Автор: 
Геннадий ШИЛИН
Номер газеты: 
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
2 + 7 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.