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; } ?> Что-то с памятью моей… – 2! | Odesskiy Listok

Что-то с памятью моей… – 2!

Почему “2”? Да потому, что в одном из предыдущих номеров нашей газеты был опубликован один из моих “опусов” под таким же названием. А поскольку память – это очень большое и сложное хозяйство, то и “номеров” может быть много… если напечатают. И еще: 15 лет интенсивной творческой жизни с большим коллективом интересных людей разных возрастов, интересов, национальностей, взглядов на жизнь, вероисповедований… Все это втиснуть в маленькую статью просто невозможно. Ну, разве что – в некролог… Но, надеюсь, что это еще не скоро произойдет!
Я уже много раз говорил о том, что “Одесский Листок”, кроме всего прочего, – очень добрая, отзывчивая и внимательная газета. Ну, хотя бы потому, что не забывает поздравить того или иного человека, семью со знаменательной датой: днем рождения, годовщиной и т.п. Вот я и подумал: ведь хорошо будет, если газета поздравит с юбилейной датой сразу большую группу людей – творческий коллектив! Я говорю об одном из известных не только в своей стране, но и далеко за ее пределами, ансамбле танца “Днестр” Управления культуры Одесской области, творческая база которого – город Белгород-Днестровский. В конце 2007 года этому коллективу исполняется 30 лет! Дело в том, что я был одним из создателей этого коллектива, а с 1982 года по 1995 – его бессменным директором, художественным руководителем, главным балетмейстером…15 лет из 30-ти! И надо сказать, что это были, пожалуй, одни из лучших моих лично лет, да и самые значительные годы для коллектива.
Боже, сколько было всего: трудного, сложного, печального, радостного, счастливого, веселого!
А началось все с того, что у тогдашнего первого секретаря горкома Шестакова Ивана Максимовича родилась идея о создании танцевального ансамбля в городском Дворце культуры. Ну, как это так: замечательный хор есть, чудесный ансамбль народной музыки “Вэсэлка” есть, драматический театр есть, симфонический оркестр есть, народная фото-киностудия есть, агитбригада тоже есть! И все эти коллективы заслуженно пользуются успехом и у себя дома, и далеко за его пределами. А вот танцевального – такого, чтобы “ух!” – нет. Есть, конечно, небольшая группа танцоров, но такому городу, с такими культурными и историческими традициями нужен ансамбль танца с большой буквы.
Секретарь свою идею озвучил, и началась работа по розыску создателей-руководителей. Знающие в этом деле толк люди посоветовали обратиться в город Донецк – кузницу хореографических кадров для многих профессиональных ансамблей страны (СССР). В числе приглашенных оказался и я. Собственно, число приглашенных состояло только из двух человек. Нет, приглашали многих, но другие не рискнули бросить свои насиженные места в столице Донбасса и поехать, хоть и на Юг, но все же в провинциальный городок. К тому же многие знают, как это – начинать все с нуля! Я – рискнул, хотя к тому времени (октябрь 1977 года) имел свой ансамбль танца “Радуга” Донецкого хлопчатобумажного комбината. Очень хороший, оригинальный (женский), большой (60 молодых и красивых), успевший за три года своего существования стать Лауреатом Украинского республиканского смотра народного творчества! Рискнул и потом никогда не жалел. Во-первых, потому, что новая работа поглотила всего меня; во-вторых, потому, что со мною приехала группа из моего донецкого коллектива – шесть лучших танцовщиц и баянист – подымать “на гора” местную хореографию.
А город оказался очень милым, тихим, спокойным. На берегу огромного лимана и в 15-ти минутах на электричке от Черного моря. Город, прилично приспособленный для отдыха, с курортной зоной и чудесным продуктовым базаром, вкусным и недорогим. С первых же дней закипела настоящая работа: нужно было набрать молодежь, желающую испытать себя в этом нелегком деле. Нужно было найти соответствующее помещение. Нужно было где-то достать деньги, в конце концов, на концертные костюмы. А оркестр собрать – тоже работа.
Ну, будущих артистов балета набирали просто “с улицы”. В городе было несколько техникумов, медучилище, педучилище. Помню, нам удалось побеседовать с тогдашним директором сельхозтехникума. Он оказался большим любителем народного творчества. И к нашему удивлению, и к большой радости директор негласно ввел в учебный процесс техникума занятия в танцевальном коллективе! Как спорт!!!
Однажды он сам лично привел в репетиционный зал большую группу ребят-первокурсников, человек около 20-ти! Многие из них терпеть эти танцы-шманцы не могли. Один из таких смотрел на меня глазами киллера: если бы мог – убил бы меня. “Я не хочу быть балеруном, я боксом занимаюсь!” - эти слова он произносил каждую репетицию в течение недели, а потом втянулся. Работал, как проклятый. Большой (187 см. рост), красивый парень. Впоследствии он стал ведущим солистом ансамбля и репетитором подготовительных групп. Срочную службу в СА прослужил в военном ансамбле Одесского округа. Вернулся после службы опять в “Днестр”, объездил с нами пол-Европы. Когда я ему напоминал о его словах, он говорил, что не было такого… Кстати, три четверти пришедших с ним ребят впоследствии и составили основной костяк мужской группы ансамбля! Сегодня эти хлопцы разменяли пятый десяток, а кто и шестой. У многих уже свои дети танцуют в коллективе!
Небольшая сноска: поскольку Город любил культуру и искусство, то и систематически проводил всевозможные культурные мероприятия, одним из которых был ежегодный смотр художественной самодеятельности производственных коллективов, школ, средних специальных учебных заведений. Так вот, на этих смотрах в танцевальном искусстве сельскохозяйственному техникуму не было равных – всегда первые места! Руководители других коллективов, немного поразмыслив и поняв, в чем дело, стали направлять свою молодежь к нам в обучение. А директор техникума при встрече со мною полушутя-полусерьезно выговаривал: “Ну что же это такое, Несиян Соломонович (так меня там звали), наш техникум ребят учит профессии, выдает дипломы об окончании заведения, а они уходят в профессиональные танцевальные коллективы!?” И он был прав: многие ребята, да и девчата впоследствии стали профессиональными артистами балета в разных ансамблях тогдашнего СССР и за рубежом. Анатолий Влезько и Олег Капустин окончили хореографический факультет Московского института культуры, Валентин Дьяченко и Иван Микулин такой же факультет Киевского института культуры. Микулин, кстати несколько лет назад, совместно со своей женой Татьяной, тоже бывшей ведущей солисткой “Днестра”, создали детский ансамбль танца, который сегодня является одним из лучших на Украине! А сам Микулин, теперь уже – Иван Иванович, за свою деятельность имеет, пожалуй, все награды, вплоть до звания Заслуженного работника культуры (тут он догнал меня – своего учителя) и грамоты от Президента Украины! Хотя, думаю, что если бы Президент наградил Ваню “Таврией” или “Волынью” (лучшие автомобили украинского производства), хореограф бы не отказался… Олег Кушнир успешно окончил Воронежское хореографическое училище и работает в известном российском коллективе. Когда он учился еще в 5-м классе, его мама пришла ко мне с просьбой взять его в ансамбль учеником и обращаться с ним, как с сыном: внимательно и серьезно. Я согласился, добавив к этому еще и – жестко! В каникулы хореографического училища Олег приезжал домой и с вокзала бежал в ансамбль. А затем уже домой… Его письма, фотографии, рекламный материал его коллектива достал меня уже и тут, в США!.. Марина Нелюбина – красавица, окончив медучилище (!?!), уехала во Владивосток и стала там солисткой балета Ансамбля песни и пляски Тихоокеанского Военно-Морского Флота! И так далее, и так далее… Поименно всех не назовешь – не хватит ни времени, ни бумаги. Хотя каждый из них достоин того, чтобы о нем написали! Много и упорно работали все…
И вот, в конце 1977 года, на одном из городских мероприятий выступил наш танцевальный коллектив. Мы показали русскую пляску “Тройки”, сочиненную замечательным балетмейстером из Воронежа – Александром Петровичем Шостаком. И хотя мастерство исполнителей еще не было совершенным, а костюмы для этого танца мы собирали по городу, зрительский прием был бурным: все поняли – дело будет!
С деньгами на костюмы произошло так, как и могло произойти там и тогда, в то время. Секретарь горкома собрал руководителей ведущих предприятий города и сказал: “Товарищи, Ансамбль танца – это лицо нашего города, а лицо должно хорошо выглядеть. Соберем, кто сколько может, и оденем в красивые костюмы наш ансамбль!” Так и сделали. Конечно, даже уже имея какие-то средства, нам пришлось помотаться. Нам – это мне и тогдашнему заведующему городским отделом культуры Качанову Георгию Яковлевичу (в молодости он служил на Балтике и здорово отбивал на корабельной палубе чечетку!) Я тогда водил “Жигули-ВАЗ-2101” 1971 года выпуска, на болтах и ключе которого еще можно было прочесть: “FIAT”, вот мы и эксплуатировали “жулю” на благо народного хореографического творчества…
Потихонечку наш коллектив рос и количественно, и качественно. Набирались мастерства, набирали репертуар, уже можно было не только мечтать, но и предметно говорить о собственном концерте… Я уже писал о том, что молодые артисты балета (так мы говорили между собой) все были школьники, студенты, рабочие и служащие. На репетиции приходили после своей основной деятельности, где-то к 5-6 часам вечера, правда, заканчивались репетиции в 11, а то и позже, а в выходные дни репетировали с 10-ти утра и до 3-х дня. Каждую репетицию мы неизменно начинали с полноценного классического урока, в лучших традициях советской (читай – российской) балетной школы. А примером для подражания у нас всегда были выдающиеся хореографы современности. И, прежде всего, такие, как Игорь Александрович Моисеев и Павел Павлович Вирский. Вероятно, все это в совокупности дало свои положительные результаты. Весной 1978 года наш коллектив показал широкому зрителю свой первый самостоятельный концерт!
Не помню уже, с чьей легкой (или как посмотреть) руки нам дали название “Днестровские Зори”, и какое-то время мы под этим названием жили… Однажды, не могу вспомнить почему, у меня в руках оказалась брошюра с некоторыми показателями успехов сельского хозяйства Одесской области, и там проскользнуло название какого-то винодельческого совхоз-завода, название которого было тоже “Днестровские Зори”… После чего мы собрались на “совещание”. Мы – это художественный совет ансамбля, в который, помимо руководства, входили ведущие солисты, “старожилы” коллектива. На этом совещании мы решили переименоваться и назвали наш коллектив – Ансамбль народного танца “Днестр”! Это название всем понравилось и прижилось. С ним коллектив объездил и Одесщину, и Киевщину, и Крым, и Молдавию, а также несколько раз Болгарию, Польшу, Германию, Португалию…
Живет ансамбль с этим своим коротким, но значительным именем и сегодня, в свои 30 лет!
Мне лично, по причинам, о которых в юбилейном материале не хотелось бы говорить (для особо любознательных при желании я могу шепнуть “на ушко”), пришлось через несколько месяцев после первого сольного концерта покинуть коллектив и уехать в Симферополь руководить ансамблем танца Дворца культуры железнодорожников. Здесь мне неплохо работалось, тем более, что пришел я не на пустое место: только перед моим приходом по болезни коллектив оставила его создательница, замечательный хореограф Екатерина Поспелова. Боже, как все связано между собой в этом Мире: мы с Катей были партнерами по сцене в Ансамбле песни и пляски Таврического Военного Округа в 1953-1956 г.г… Да, время неумолимо бежит, и мы с нею уже не так просто можем показать то или иное танцевальное движение своим ученикам… Но пробуем, стараемся.
Так вот. Проработал я в Симферополе два года, что-то хорошее успел сделать, а в начале 1982 года ко мне приехали посланцы “Днестра” и представители Белгород-днестровского Горкома КПСС с просьбой (пардон, с предложением) вернуться на Одесщину и возглавить ансамбль танца. Откровенно говоря, я недолго раздумывал, хотя Крым – это все же Крым. С моей стороны было лишь два условия: телефон в квартире (помните: только ветеранам Второй Мировой. Но я им не был по возрасту, а до Третьей дожить не хотелось); второе условие – быть полным Хозяином своего Дела! На что был внушительный ответ Секретаря ГК: “Для этого Вас и приглашаем!”
В апреле 1982 года я и вернулся в “Днестр”. И проработал в нем до декабря 1995 г. – до самого отъезда сюда, в благословенную Страну! Эти 13 лет жизни с “Днестром” были счастьем, радостью, печалью, болью, негой, благом… ЖИЗНЬЮ! Об этом периоде можно говорить, говорить, говорить… И я это сделаю с превеликим удовольствием на страницах “Одесского Листка”, да позволят мне это редакция и издатели! Итак, до встречи в следующем номере.


Уважаемый Несиян Соломонович! Я был участником ансамбля танца Дворца культуры железнодорожников г. Симферополя, в тот период когда вы стали руководителем нашего коллектива. Я очень хорошо помню это время. Я считаю что во время вашего управления наш коллектив достиг высшей своей формы и был на пике популярности в Симферополе. И всё это ваша заслуга. Никогда не забуду лето в Прибрежном, когда мы отдыхали у моря. Днём репетиции а вечером концерт перед отдыхающими пансионата. Мы очень переживали когда вы покинули нас, мы не понимали как и что будет дальше. Помню как провожали вас. Ну а через несколько лет вы напомнили о себе, в лице Олега Капустина. Нас свела судьба в ансамбле танца при доме офицеров г. Симферополя. Я там танцевал а он заканчивал службу в армии. Мы с ним подружились как ваши воспитанники. Несиян Соломонович спасибо что вы есть на этом свете. Своими знаниями и умением открываете молодёжи всего мира путь к танцу, ведь это такое счастье уметь владеть своим телом и радовать зрителей. СПАСИБО!!! С уважением, ваш воспитанник Виктор Корабек.

С любовью к дорогому Учителю!

Дорогой, Несиян Соломонович!

Я так рада нашей встрече и возможности вновь общаться с Вами.
Годы в "Днестре" были для меня одним из самых счастливых периодов моей жизни.
"Днестр" - это Ваше детище и мы Ваши ученики искренне любим и ценим Вас!

Я думаю,что слово "бывший" - это не про Вас. Вы вдохнули жизнь в коллектив, как Господь в Адама! И только благодаря этому духу коллектив живет!
Я думаю, что те кто пришел на смену вам, достойно несут и продолжают начатое Вами дело.

С любовью,
искренне Ваша Марина Нелюбина.

Благодарим за поздравление

Народный ансамбль танца «Днестр» сердечно благодарит бывшего руководителя Тобака Н. С. за поздравление с нашим 30-летием и за внимание к нашей истории. Всех интересующихся сегодняшней жизнью коллектива будем рады пригласить в ближайшее время посетить сайт, адрес которого мы сообщим дополнительно.
С уважением, руководитель и участники ансамбля.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p> <br> <tr> <td> <table>
  • Lines and paragraphs break automatically.
  • Images can be added to this post.
More information about formatting options