Implements an image recognition captcha.

"; break; case 'admin/modules#description': case 'admin/modules/textimage': case 'admin/textimage': $output = t('Implements an image recognition captcha.'); break; } return $output; } function textimage_captchachallenge(&$form) { $form['captcha_response'] = array ( '#type' => 'textfield', '#title' => t('Captcha Validation'), '#default_value' => '', '#required' => TRUE, '#validate' => array('_captcha_validate' => array()), '#description' => t('Please type in the letters/numbers that are shown in the image above.'), '#prefix' => 'Captcha Image: you will need to recognize the text in it.', ); return $form; } function textimage_captchavalidate(&$captcha_word, &$correct) { $captcha_word = drupal_strtolower($captcha_word); if (($_SESSION['captcha'] != '') && $captcha_word == $_SESSION['captcha']) { $correct = true; } else { $correct = false; form_set_error('captcha_response', t('The image verification code you entered is incorrect.')); } } /** * Implementation of hook_menu(). */ function textimage_menu($may_cache) { $items = array(); $suffix = ''; if (arg(2)!=null) $suffix='/'.arg(2); $items[] = array( 'path' => '_textimage/image'.$suffix, 'title' => t('textimage'), 'callback' => '_textimage_image', 'access' => user_access('access textimages'), 'type' => MENU_CALLBACK ); return $items; } function textimage_perm() { return array('access textimages'); } function textimage_settings() { $fonts_path = variable_get("textimage_fonts_path", ""); $images_path = variable_get("textimage_images_path", ""); //check for GD if (!function_exists(imagecreate)) drupal_set_message(t('Image library not available. Textimage needs the GD library extension to be installed. Please install GD.')); //check for TTF support elseif (!function_exists(imagettftext)) drupal_set_message(t('Your image library does not seem to have TrueType font support. Textimage will work, but will use the default inbuilt font.'),'status'); //check for valid font path elseif ($fonts_path!="" && !is_dir($fonts_path)) drupal_set_message(t('The current font path is invalid. The default font will be used.')); //check for valid image path if ($images_path!="" && !is_dir($images_path)) drupal_set_message(t('The current images path is invalid. No images will be used.')); //Fonts settings $form['fonts'] = array( '#type' => 'fieldset', '#title' => t('Fonts settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['fonts']['textimage_use_only_upper'] = array( '#type' => 'checkbox', '#title' => t('Use only Uppercase'), '#default_value' => variable_get('textimage_use_only_upper',0) ); $form['fonts']['textimage_fonts_path'] = array( '#type' => 'textfield', '#title' => t('TrueType Fonts Path'), '#default_value' => $fonts_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the Truetype (.ttf) fonts are stored. If you do not provide any fonts, the module will use the default font for text. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['fonts']['textimage_font_size'] = array( '#type' => 'textfield', '#title' => t('Font Size'), '#default_value' => variable_get('textimage_font_size',24), '#size' => 5, '#maxlength' => 2, '#description' => t('Font size of Captcha text (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_font_size")), ); $form['fonts']['textimage_char_spacing_max'] = array( '#type' => 'textfield', '#title' => t('Character Spacing'), '#default_value' => variable_get('textimage_char_spacing_max',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the kerning between letters in Captcha. Higher numbers indicate more spacing.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_spacing_max")), ); $form['fonts']['textimage_char_jiggle_amount'] = array( '#type' => 'textfield', '#title' => t('Character Jiggle'), '#default_value' => variable_get('textimage_char_jiggle_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of up and down movement in the Captcha letters. Higher numbers indicate more jiggling.'), '#validate' => array("_textimage_number_validate" => array("textimage_char_jiggle_amount")), ); $form['fonts']['textimage_char_rotate_amount'] = array( '#type' => 'textfield', '#title' => t('Character Rotation'), '#default_value' => variable_get('textimage_char_rotate_amount',5), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of rotation in the Captcha letters (in degrees, only works with non-default fonts).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_rotate_amount")), ); $form['fonts']['textimage_char_size_amount'] = array( '#type' => 'textfield', '#title' => t('Character Size Adjustment'), '#default_value' => variable_get('textimage_char_size_amount',2), '#size' => 5, '#maxlength' => 2, '#description' => t('Sets the amount of variation in size between the different letters in the Captcha (in pixels).'), '#validate' => array("_textimage_number_validate" => array("textimage_char_size_amount")), ); //Image settings $form['images'] = array( '#type' => 'fieldset', '#title' => t('Image settings'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['images']['textimage_images_path'] = array( '#type' => 'textfield', '#title' => t('Background Images Path'), '#default_value' => $images_path, '#size' => 30, '#maxlength' => 255, '#description' => t('Location of the directory where the background images are stored. If you do not provide a directory, solid colors will be used. Relative paths will be resolved relative to the Drupal installation directory.'), ); $form['images']['textimage_image_noise'] = array( '#type' => 'textfield', '#title' => t('Image Noise (pixels)'), '#default_value' => variable_get('textimage_image_noise',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random pixels) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_noise")), ); $form['images']['textimage_image_lines'] = array( '#type' => 'textfield', '#title' => t('Image Noise (lines)'), '#default_value' => variable_get('textimage_image_lines',4), '#size' => 5, '#maxlength' => 4, '#description' => t('Sets the amount of noise (random lines) in the Captcha image. Higher numbers indicate more noise.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_lines")), ); $form['images']['textimage_image_margin'] = array( '#type' => 'textfield', '#title' => t('Image Margin'), '#default_value' => variable_get('textimage_image_margin',10), '#size' => 5, '#maxlength' => 4, '#description' => t('Set a distance between the Captcha letters and the edges of the image.'), '#validate' => array("_textimage_number_validate" => array("textimage_image_margin")), ); $form['info'] = array( '#type' => 'fieldset', '#title' => t('Image and font information'), '#collapsible' => TRUE, '#collapsed' => FALSE ); if (isset($fonts_path)) { $imagefontinfo .= t('Number of fonts found: ').count(_textimage_font_list()); } if (isset($images_path)) { $imagefontinfo .= '
'.t('Number of background images found: ').count(_textimage_image_list()); } $gdinfo = gd_info(); $imagefontinfo .= '
'.t('GD Version: ').$gdinfo["GD Version"]; $imagefontinfo .= '
'.t(' FreeType Support: '); $imagefontinfo .= ($gdinfo["FreeType Support"]==true) ? 'True' : 'False'; $imagefontinfo .= '
'; $form['info']['captcha_info'] = array ( '#type' => 'item', '#value' => $imagefontinfo, ); return $form; } function textimage_settings_form_validate ($form_id,$form) { //check for valid font path if ($form['textimage_fonts_path'] !="" && !is_dir($form['textimage_fonts_path'])) form_set_error('textimage_fonts_path', t('The entered font path is invalid')); //check for valid image path if ($form['textimage_images_path'] !="" && !is_dir($form['textimage_images_path'])) form_set_error('textimage_images_path', t('The entered image path is invalid')); } function _textimage_number_validate ($field,$fieldName) { if (!is_numeric($field['#value'])) { form_set_error($fieldName,t("The value for")." ".t($field['#title'])." ".t("must be a number")); } } /** * Prints an image containing a textimage code. */ function _textimage_image() { //if we don't have GD2 functions, we can't generate the image if (!function_exists('imagecreatetruecolor')) return; // Set headers header('Expires: Mon, 01 Jan 1997 05:00:00 GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header('Content-type: image/png'); $string = _textimage_code(); // Get truetype font list $fonts = _textimage_font_list(); // Get the background images list $images = _textimage_image_list(); // Randomization amounts: $charSpacingMax = variable_get('textimage_char_spacing_max',10); // Letter spacing max (pixels) $charSpacingMin = max($charSpacingMax*.5,0); // Letter spacing minimum (pixels) $charJiggleAmount = variable_get('textimage_char_jiggle_amount',5); // Up and down randomization (pixels) $charRotateAmount = variable_get('textimage_char_rotate_amount',5); // Character rotation amount (degrees) $charSizeAmount = variable_get('textimage_char_size_amount',2); // Character size amount (pixels) $imageRotateAmount = variable_get('captcha_image_rotate_amount',12); // Image rotation amount (degrees) // Static amounts: $charInitialSize = variable_get('textimage_font_size',24); // Initial Font $imageNoise = variable_get('textimage_image_noise',4); // Amount of noise added to image $imageLines = variable_get('textimage_image_lines',4); // Amount of noise added to image $imageMargin = variable_get('textimage_image_margin',10); // Margin around image (pixels) // write text using a truetype font if (function_exists(imagettftext) && count($fonts) > 0) { // Initialize variables for the loop $characterDetails = array(); // contains the final info about each character // Build a list of character settings for the captcha string for ($i=0;$i $charSize, "angle" => $charAngle, "x" => $x, "y" => $y, "color" => $foreground, "font" => $font, "char" => $char ); // Increment the image size $imageWidth = $x + $charWidth; $imageHeight = max($imageHeight,$y+$charJiggleAmount); } // Create the image based off the string length and margin if (count($images) > 0) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth+2*$imageMargin, $imageHeight+2*$imageMargin); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Specify colors to be used in the image $foreground = imagecolorallocate($im, rand(0, 80), rand(0, 80), rand(0, 80)); foreach($characterDetails as $char) { // draw character imagettftext($im,$char['size'],$char['angle'],$char['x']+$imageMargin,$char['y']+$imageMargin,$foreground,$char['font'],$char['char']); } } else { // write text using a built-in font $x = 0; $y = 0; $imageWidth = 60 + drupal_strlen($string)*$charSpacingMax*.35; $imageHeight = 30 + $charJiggleAmount; // Create the image if (count($images) > 0 && function_exists(imagecolorallocatealpha)) { // We're going to be using an image, and need a tranparent background to start with $im = _textimage_create_transparent_image($imageWidth, $imageHeight); $noisecolor = imagecolorallocatealpha($im, 0, 0, 0, 127); } else { // Just make a plain-jane color brackground $im = imagecreatetruecolor($imageWidth, $imageHeight); $background = imagecolorallocate($im, rand(180, 250), rand(180, 250), rand(180, 250)); $noisecolor = $background; imagefill($im, 0, 0, $background); } // Add the text for ($i=0;$i 0) { // Prepare a larger image with a background image $im2 = _textimage_create_transparent_image($imageWidth, $imageHeight); } else { // Prepare a larger image with a solid color $im2 = imagecreatetruecolor($imageWidth, $imageHeight); imagefill($im2, 0, 0, $background); } $result = imagecopyresampled ($im2, $im, $imageMargin, $imageMargin, 0, 0, $imageWidth, $imageHeight, imagesx($im), imagesy($im)); $im = $im2; } // strikethrough imageline($im, rand(0, 120), rand(0, 120), rand(0, 120), rand(0, 120), $foreground); // Add Noise for ($x=0; $x<$imageWidth; $x++) { for ($row=0; $row<$imageNoise;$row++) { $y = rand(0,$imageHeight); imagesetpixel($im, $x, $y, $noisecolor); } } // Add Lines and Ellipses for ($x=0; $x<$imageLines;$x++) { imageline($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); imageellipse($im, rand(0, $imageWidth), rand(0, $imageHeight), rand(0, $imageWidth), rand(0, $imageHeight), $noisecolor); } // Fill image with a random background image if available if (count($images) > 0) { $image = $images[rand(0,count($images)-1)]; _textimage_apply_background_image($im,$image); } //output to browser imagepng($im); imagedestroy($im); } /** * Returns a random string for use in a captcha */ function _textimage_code() { $consts='bcdgjxvmnprst'; $vowels='aeiou'; for ($x=0; $x < 6; $x++) { mt_srand ((double) microtime() * 1000000); $const[$x] = drupal_substr($consts,mt_rand(0,drupal_strlen($consts)-1),1); $vow[$x] = drupal_substr($vowels,mt_rand(0,drupal_strlen($vowels)-1),1); } $string = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4]; $string = drupal_substr($string,0,rand(4,6)); //everytime we create a new code, we write it to session $_SESSION['captcha'] = drupal_strtolower($string); if(variable_get('textimage_use_only_upper',0)) $string = drupal_strtoupper($string); return $string; } /** * Returns an array of files with TTF extensions in the specified directory. */ function _textimage_font_list() { $fontdir = variable_get("textimage_fonts_path", ""); $filelist = array(); if (is_dir($fontdir) && $handle = opendir($fontdir)) { while ($file = readdir($handle)) { if (preg_match("/\.ttf$/i",$file) == 1) $filelist[] = $fontdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Returns an array of files with jpg, png, and gif extensions in the specified directory. */ function _textimage_image_list() { $imagesdir = variable_get("textimage_images_path", ""); $filelist = array(); if (is_dir($imagesdir) && $handle = opendir($imagesdir)) { while ($file = readdir($handle)) { if (preg_match("/\.gif|\.png|\.jpg$/i",$file) == 1) $filelist[] = $imagesdir.'/'.$file; } closedir($handle); } return $filelist; } /** * Overlays an image to the supplied image resource */ function _textimage_apply_background_image (&$imageResource,$imageFile) { $backgroundResource = image_gd_open($imageFile,substr($imageFile,-3)); // Copy the text onto the background $backX = imagesx($backgroundResource); $backY = imagesy($backgroundResource); $textX = imagesx($imageResource); $textY = imagesy($imageResource); $randomBackX = rand(0,$backX-$textX); $randomBackY = rand(0,$backY-$textY); // Place the text onto a random location of the background image imagecopyresampled($backgroundResource,$imageResource,$randomBackX,$randomBackY,0,0,$textX,$textY,$textX,$textY); // Crop the background image to the original image size imagecopyresampled($imageResource,$backgroundResource,0,0,$randomBackX,$randomBackY,$textX,$textY,$textX,$textY); } /** * Creates transparent image resources for images with graphic backgrounds */ function _textimage_create_transparent_image($x, $y) { $i = imagecreatetruecolor($x, $y); $b = imagecreatefromstring(base64_decode(_text_image_blankpng())); imagealphablending($i, false); imagesavealpha($i, true); imagecopyresized($i, $b ,0 ,0 ,0 ,0 ,$x, $y, imagesx($b), imagesy($b)); return $i; } function _text_image_blankpng() { $c = "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29m"; $c .= "dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADqSURBVHjaYvz//z/DYAYAAcTEMMgBQAANegcCBNCg"; $c .= "dyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAAN"; $c .= "egcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQ"; $c .= "oHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAADXoHAgTQoHcgQAANegcCBNCgdyBAAA16BwIE0KB3IEAA"; $c .= "DXoHAgTQoHcgQAANegcCBNCgdyBAgAEAMpcDTTQWJVEAAAAASUVORK5CYII="; return $c; } ?> «Я всегда вспоминаю Одессу с улыбкой и с особой душевной теплотой» | Odesskiy Listok

«Я всегда вспоминаю Одессу с улыбкой и с особой душевной теплотой»

user warning: Table './odessapage/cms_sessions' is marked as crashed and last (automatic?) repair failed query: SELECT COUNT(sid) AS count FROM cms_sessions WHERE timestamp >= 1542087234 AND uid = 0 in /home/hepa/public_html/new/includes/database.mysql.inc on line 121.

«Я всегда вспоминаю Одессу с улыбкой и с особой душевной теплотой»

Одесса подарила литературе много писательских имен, среди которых было и имя К.Г. Паустовского. Он жил и работал в Одессе и навсегда оставил память о ней, отдав ей большую дань.
31 мая 2007 года исполнилось 115 лет со дня рождения писателя.

«Одесса – это Левант. Это Черное море, теплые ветры Босфора, бывшие греческие контрабандисты и негоцианты из Пирея. Итальянцы-гарибальдийцы, капитаны и портовые грузчики-банабаки. Богатства всех стран, влияние Франции, гетто на Молдаванке, бандиты, ценившие больше всего остроумие, седоусые рабочие с Пересыпи, итальянская опера, воспоминания о Пушкине, акации, желтый камень, цветы, любовь к анекдоту и страшное любопытство к каждой мелочи. Все это – Одесса».

К.Г.Паустовский

Константин Георгиевич Паустовский жил в Одессе в начале двадцатых годов. Он работал репортером в газете «Моряк», выпестовавшей Эдуарда Багрицкого и Илью Ильфа. Жил он тогда на Ланжероне в доме №8 по улице Черноморской у края высокого крутого обрыва над морем.
С ностальгической грустью вспоминает писатель тот особняк и ту улицу. «Я полюбил эту маленькую окраинную улицу и был уверен, что она самая живописная в мире... Иногда я возвращался из города в полном унынии из-за какой-нибудь неудачи. Но стоило мне войти в безлюдные переулки, окружавшие Черноморскую – Обсерваторный, Стурдзовский или Батарейный, – услышать шелест старых акаций, увидеть темный плющ на оградах, освещенных золотистым солнцем зимы, почувствовать веяние моря на своем лице, и тотчас же возвращались спокойствие и душевная легкость. Все эти переулки состояли из оград. Дома скрывались в глубине садов за глухими калитками. Переулки приводили на Черноморскую улицу...
С Черноморской улицы открывалось море – великолепное во всякую погоду. Слева внизу были хорошо видны Ланжерон и Карантинная гавань, откуда уходил, изгибаясь, обкатанный штормами старый мол. Справа крутые берега, поросшие лебедой и пыльной марью, шли к Аркадии и Фонтанам, к туманным пляжам...»
Сюда, как и прежде, доносится шум прибоя. Но нет уже жителей дома тех лет, и хотя его заселяют другие жильцы, память о том, что здесь жил писатель, жива до сих пор. Незадолго до отъезда из Одессы я посетил этот тихий уголок города и заглянул в тот дом. Маленького флигелька дворницкой внутри двора, который занимал писатель, уже не было. Но меня приятно удивила и растрогала память людей, теперь живущих в доме: в указателе жильцов дома была вписана и фамилия К.Г. Паустовского. И, несмотря на то, что улица Черноморская давно была переименована в улицу Гефта, на глухом каменном заборе недалеко от этого дома полуметровыми буквами кем-то была сделана надпись: «Улица Паустовского».
Константин Георгиевич очень любил море, и в частности, Черное море, он очень любил Одессу и сохранил навсегда добрую память о нашем городе. Колорит южного города, образы жителей того времени он запечатлел в своих повестях «Черное море», «Начало неведомого века». А повесть «Время больших ожиданий», полностью посвященная Одессе, окрашена особенной теплотой и мягким лиризмом. Именно эта книга сделала его одесситом в глазах не только граждан этого города, но и всего мира.
Константин Георгиевич говорил:
- Одесса – это, прежде всего, бурная жизнь. Одесса – это город ученых, музыкантов, актеров, писателей и поэтов. Багрицкий, Ильф, Петров, Катаев и мой учитель Бабель – одесситы. Одесса – город неисчерпаемого юмора... Что и говорить. Одесса единственный в своем роде и неповторимый город. Я всегда вспоминаю Одессу с улыбкой и с особой душевной теплотой.
«По языку, по культуре я – русский. А по происхождению украинец (по отцовской линии) и поляк (по материнской линии). Многое меня связывает с жизнью еврейского народа. Еврейские ребята были моими соучениками в гимназии, а потом – сокурсниками в университете. Евреи (по происхождению) были моими собратьями по перу, литературными наставниками в пору, когда я жил в удивительном городе Одессе. Достаточно назвать Исаака Бабеля. Еврейские имена присутствуют во многих моих книгах. И в этой новой повести («Повесть о жизни» - авт.) они тоже будут: те люди, что запомнились мне, когда наш полевой санитарный отряд останавливался в белорусских местечках и городах в 1916 году...»
Уже в школьные годы Паустовский писал стихи и рассказы. Вспоминая то время, он писал: «Я мечтал стать поэтом. Исписал десятки тетрадей, но стихи мои, как говорится, не пошли в набор. Только я все равно остался верен поэзии. Без любимых строк из Лермонтова, Фета, Пушкина, Блока, Байрона, Гейне я не представляю себе страницы новой повести. Не представляю я себе их и без украинских народных песен и дум, без романтических польских баллад, без русской песенной стихии».
Однажды Паустовский отправил свои стихи Ивану Алексеевичу Бунину, и вскоре получил ответ: «Думается, Ваш удел, Ваша настоящая поэзия – в прозе. Именно здесь, если Вы сумеете проявить достаточно упорства, уверен, сможете достичь чего-нибудь значительного. Пишите и впредь». Паустовский сразу же и навсегда последовал этому совету.
Из-за плохого зрения он писал в очках с сильно увеличивающими стеклами, низко склонив голову над листом бумаги, будто рассматривал что-то в лупу.
- Разве вы не пишете на машинке? – как-то спросили у него.
- Пишу только от руки, - ответил он. Машинка – свидетель, а творчество писателя – абсолютно интимное дело. Оно требует одиночества. Перед тем, как сесть за работу, надо собрать все силы души, надо перестать стесняться самого себя.
Наблюдательный жизнелюбец, он умел рассказать об увиденной им живой красоте, он писал о самом обычном, но о таком, которого мы не замечаем.
Страсть Паустовского к литературному труду сочеталась со страстью к путешествиям. Еще в детстве у него появилось пристрастие к географическим картам. «Я мог сидеть над ними по нескольку часов, как над удивительной книгой», - писал он. Он много ездил по стране, изъездил ее вдоль и поперек, бывал во многих странах, встречался со многими людьми различных профессий и возрастов, присматривался к ним, сам переменил много профессий и впитывал в себя все, что видел. Он работал вожатым московского трамвая, санитаром на тыловом санитарном поезде, на Брянском металлургическом заводе, в рыбачьей артели на Азовском море.
Когда в Соединенных Штатах была издана на английском языке книга Паустовского «Повесть о жизни», он написал такое письмо:
«Моим читателям Америки.
Я искренне рад, что мои книги будут читать в Америке. Я люблю и глубоко уважаю американский народ за многие его великолепные качества... Я люблю современных американцев и люблю их отцов и дедов, замечательных людей и пионеров Америки – тех, кого воспели Купер и Брет Гарт, Марк Твен и Джек Лондон, О.Генри и Эдгар По, Лонгфелло и Уитмен.
С раннего детства я завидовал жизни Тома Сойера и Гекльберри Финна. Эти провинциальные американские мальчики стали всечеловеческими и вечными образами такой же силы, как Дон-Кихот... Если бы это зависело от меня, то я жил бы еще долго, чтобы объехать всю землю и успеть написать все то, что я задумал».
Довелось побывать Константину Георгиевичу и в Одессе в грозные дни Отечественной войны как корреспонденту ТАСС. Он не имел военной подготовки, с детства страдал близорукостью, при каждой перемене погоды его мучили приступы астмы, лишавшие его сил и дыхания. Но 29 июня 1941 года – на седьмой день войны – он уже ехал в поезде на Южный фронт. Паустовский ездил к нашим войскам, день и ночь ведущим отчаянную борьбу с фашистами под Кишиневом и Тирасполем. В письме к своему другу Рувиму Фраерману он писал: «Что писать тебе? Полтора месяца я пробыл на Южном фронте, почти все время, не считая трех-четырех дней, на линии огня. Из москвичей видел Михалкова и Бориса Горбатова, в Одессе видел Олешу».
В июле 1941 года фашистская авиация бомбила город. Город ощетинился зенитными орудиями. В дом, где когда-то жил Пушкин, попала тонная фугаска. Редакция фронтовой газеты «Во славу Родины» перебралась на Большой Фонтан. В коллективе редакции тогда собралась немалая писательская группа, в которой были Борис Горбатов, Сергей Михалков, Илья Френкель, Илья Поляков.
В это время из-под Тирасполя приехал Паустовский. Константин Георгиевич был в военной гимнастерке, в сапогах, на голове видавшая виды пилотка. Были при нем еще каска и противогаз в брезентовом чехле. Он поселился в редакционном общежитии.
Про это время Михалков писал в одной из своих шуточных «внутриредакционных» стихотворений:
В степи под Одессой
Не так интересно,
В степи под Одессой
Бомбят...
Три очерка Паустовский опубликовал в газете «Во славу Родины»: «Рассказ бойца Петренко», «Боец Садыков» и «Разведчик Волков». Как вспоминает корреспондент упомянутой выше фронтовой газеты Н. Кружков, Паустовского мучили терзания города, который он любил и который знал веселым, несколько легкомысленным и жизнерадостным. Паустовский говорил: «Я люблю города, не похожие на другие. Каждый город, как и человек, должен иметь свой, только ему присущий облик. Мне дороги Киев, Москва – и вот Одесса. Она мне напоминает красивую женщину, нежную и ласковую. И очень больно видеть ее страдания... Вокруг Одессы все пахнет морем, его дыхание огромно. Нет, не верю, что немцы займут ее, не могу представить. Но если такая беда случится, то недолго они здесь пробудут, горячо им будет здесь».
И еще писатель вспоминал: «Это было в самом начале войны, в июле 1941 года. Я приехал в Одессу с фронта, из-под Тирасполя, на военном грузовике, соскочил с него около вокзала и пошел в «Лондонскую» гостиницу». Здесь Паустовский встретился с Юрием Олешей. Паустовский обмолвился, что «город изменился с начала войны, замер, и одесситы как будто потеряли свою традиционную живость».
- Че-пу-ха! - сказал Олеша раздельно и внятно, чеканя каждый слог. - Одесситы не сдаются и не умирают. Их остроумие замешано на бесстрашии. Их храбрость расцветает от острых слов.
И Юрий Карлович стал доказывать Константину Георгиевичу: «Одесситы и сейчас, во время войны, такие же мужественные, веселые и смешливые, как и всегда. Пойдемте, походим по городу, и я могу поручиться, что где-нибудь мы увидим старых, ни перед чем не сдающихся одесситов».
Они вышли из гостиницы, а когда началась воздушная тревога, зашли в первый же двор – типичный одесский «греческий» двор. В это время... «завыл самолет. Загремели взрывы и залпы зениток. Кто-то нервно отдернул занавески на венецианском окне, ударил ладонью раму, и она с треском распахнулась... В окно выглянул старый еврей в спущенных подтяжках и мятой рубахе. В руке он держал газету. Он, должно быть, спал и прикрывался этой газетой от мух. Взрывы и вой самолетов разбудили его. Он высунулся в окно, упираясь ладонями в подоконник. Красными от раздражения склеротическими глазами он смотрел на пролетевший низко с сатанинским воем самолет и крикнул с негодованием:
- Что? Опять? Босяки!!!
Он яростно плюнул вслед самолету, с треском захлопнул окно и задернул занавеску».
Одесситы всегда оставались одесситами…
Однажды я написал Константину Георгиевичу письмо, в конце которого обратился с просьбой дать мне на память свой автограф. Вскоре я получил долгожданный и желанный ответ. Всматриваясь в его подпись с разорванными буквами, я понял, что Константину Георгиевичу эта подпись далась с невероятным трудом. Вместе с автографом прибыло и письмо:
«Уважаемый Павел Михайлович!
Константин Георгиевич крайне тяжело болен – он перенес недавно пятый обширный инфаркт. Сейчас он лежит и ему запрещено читать и писать. Но для собирателя (мне было известно, что Константин Георгиевич не любит слова «коллекционер», что он называет увлеченных людей «собирателями») он сделал исключение (сказал, что сам собирал марки и что ценит эту страсть) и как мог подписал марку.
Если Вы учтете, что у здорового Константина Георгиевича зрение 18 диоптрий, то для лежащего без очков человека этот автограф – подвиг.
Рада исполнить просьбу отца и отослать Вам марку.
2. VI. 68 г. Г. Паустовская».
Письмо датировано вторым июня 1968 года, а через полтора месяца 14 июля этот удивительный писатель и человек, к величайшему сожалению, ушел из жизни.
Я бесконечно благодарен Константину Георгиевичу, который даже в очень тяжелые для себя дни нашел возможность и желание удовлетворить мою просьбу, и буду всегда помнить об этом.
Стараниями и энтузиазмом одесситов – читателей Паустовского – создано литературное товарищество «Мир Паустовского» и музей его имени в доме по улице Черноморской №6, рядом с домом, в котором он жил. 14 июля – день, когда ушел из жизни Константин Георгиевич, стал для многих одесситов Днем памяти писателя.
В 1998 году по случаю 30-летия кончины К.Г. Паустовского в музее Одесского военного округа была открыта посвященная ему экспозиция. Выбор места объясняется тем, что благодаря архивным поискам товарищества «Мир Паустовского» он посмертно был награжден медалью «За оборону Одессы».
Константин Георгиевич любил природу, жил в Тарусе, красивой весной и летом, осенью и зимой. Его одноэтажный низкий домик, составленный из нескольких сдвинутых срубов, утопал в яблоневом саду над береговым обрывом реки Таруски. «Больше всех времен года я люблю и жалею осень - писал он. - Может быть, за то, что ей очень мало отпущено времени для ее шелестящей и облетающей жизни».
Что-то очень грустное и щемящее сердце есть в этих словах.
К.Г. Паустовского похоронили в Тарусе под старым пышным деревом, и когда зарыли могилу, которая хорошо видна с Оки, ударила молния с такой ослепительной силой, что темная вода, другой берег и деревья стали белыми. И хлынул ливень...


Отправить новый комментарий

Содержимое этого поля хранится скрыто и не будет показываться публично.
  • Допустимые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <br> <tr> <td> <table>
  • Строки и параграфы переносятся автоматически.
  • Images can be added to this post.
Больше информации о возможностях форматирования