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 >= 1576094772 AND uid = 0 in /home/hepa/public_html/new/includes/database.mysql.inc on line 121.

[Продолжение, начало в №№ 135-146]

Работая на курсах в Доме народного творчества, я имел достаточно свободного времени, поскольку загрузка моя занятиями была не ежедневной. Поэтому, когда мне предложили вести уроки пения и хор в школе-интернате номер 3 для детей с сердечно-сосудистыми заболеваниями, я согласился. Эта школа находилась в районе 16-й станции Большого Фонтана; одесситы знают, что ехать туда надо, примерно, час. Когда я впервые переступил порог этой школы, я понял, что оставить этих детей я уже не смогу. Ребята с бледными лицами, почти синими губами и с пытливыми глазами покорили меня. Я проработал там более пяти лет и, если бы не обстоятельства, о которых я расскажу ниже, то работал бы там еще долгое время.

В школе-семилетке насчитывалось 180 учеников, из которых 25 каждый месяц направлялись в санатории на лечение. В отведенные мне два дня в неделю я, с аккордеоном за плечами и рулонами обойной бумаги, на которых были записаны слова песен, переходил из класса в класс. Думаю, что мои уроки детям нравились. Несмотря на то, что дети на репетиции хора приходили по желанию, а не по принуждению, на хоре после обеда собиралось примерно 80 процентов учеников.

За время своей работы в интернате я с ребятами выучил, кроме большого количества песен, три хоровые сюиты с моей музыкой: «Наша школа-интернат», «Одесса, мой город родной» и «Идем дорогой Ленина», каждая из которых состояла из семи-десяти песен. И, кроме этого, вместе с режиссером мы поставили музыкальный спектакль: «Знаем правила движенья, как таблицу умноженья».

Спасибо директору школы Алле Ивановне, принимавшей активнейшее участие во всех этих мероприятиях. Когда перед очередными смотрами нужна была более активная подготовка, она освобождала детей от последних уроков, и мы репетировали до «потери сознания».

На районных, городских и даже областных смотрах хор школы ниже второго места не занимал.

Однажды Алла Ивановна меня предупредила: «Начинается республиканское совещание директоров школ-интернатов, а в заключительный день совещания участники приедут к нам в интернат послушать хор. Вы уж не подкачайте, Ким Иосифович…».

…Директора школ-интернатов расселись с одной стороны зала, а хор вошел через двери с противоположной стороны.

Ребята волновались. Я улыбнулся им:

- С Богом, дети мои! - как говорил наш «дед».

И полилась сюита «Наша школа-интернат». С каждой песней дети чувствовали себя все уверенней и раскованней. Потом мы показали наше музыкальное представление «Знаем правила движенья…».

После концерта началось обсуждение. Кто хвалил, кто критиковал, мол, много энергии затрачивают эти больные сердцем дети. Встал директор одесской школы-интерната №4 Богданов:

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

Эта фраза запомнилась мне на всю жизнь…

А через несколько дней дома раздается телефонный звонок:

- Добрый день, Ким Иосифович! С Вами говорит директор школы-интерната №4 для детей-сирот Дмитрий Степанович Богданов. Вы бы не смогли приехать к нам в школу посмотреть кое-что и дать кое-какой совет нашему учителю пения? Приезжайте, я Вас жду.

Мы условились о времени встречи, и я приехал в интернат. Директор школы поводил меня по всем кабинетам четырехэтажного здания, показал мне мастерские, санчасть, общежитие. Войдя в один из просторнейших классов, он сказал:

- А это будет ваш кабинет пения. Все необходимые условия, предлагаемые вами, будут выполнены.

- Быка – за рога, Дмитрий Степанович?

Когда мы выходили из класса, я увидел на доске объявлений: «Сегодня, после обеда, в 14 часов, в зале состоится встреча с композитором Кимом Юзановым». Действительно, «Быка – за рога».

- Давайте пока зайдем ко мне в кабинет и чего-нибудь перекусим, - сказал Дмитрий Степанович.

После «перекуса» мы отправились в зал. Это был просторный, широкий, довольно большой для такой школы зал с великолепной сценой. Помещение стало наполняться детьми. Я внимательно наблюдал за ними: «Что это за дети такие, сироты?»

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

- Ну, - после моего выступления сказал Дмитрий Степанович, - вы видите, как эти несчастные дети нуждаются в вашей душевной теплоте, нуждаются в человеке, который обогрел бы их лаской. О переводе вас в нашу школу не беспокойтесь, а учителя пения для интерната №3 я найду. Нам очень нужен такой специалист, как вы. Соглашайтесь.

Я проработал на прежнем месте до тех пор, пока не нашли мне замены.

Класс, который мне выделили на новом месте, был таким большим, что вмещал с одной стороны большое количество столов, а с другой – помосты в виде хоровых станков, на которых стояли стулья. Эти станки были изготовлены в течение месяца школьными столярами. Условия для работы были отличными, да и дети (а это была десятилетка) были тоже прекрасными.

Однажды я узнал, что в Одессе находится композитор Владимир Шаинский, написавший много замечательных песен для детей. Он привез свою оперетту для театра.

Созвонившись с ним, я отправился к нему в гостиницу, рассказал о наших детях и пригласил его в интернат. Он тут же согласился на встречу.

Зал наш был переполнен. Шаинский пел свои песни одну за другой, ученики подпевали.

- Дети, я немного устал, - сказал он, погодя. - Может быть, кто-нибудь хочет что-то сказать?

Поднялась девочка, участница хора:

- Владимир Яковлевич, ваши песни мы всегда поем с большим удовольствием и на уроках пения, и просто так. Мы даже на мелодию ваших песен написали свои слова. Хотите послушать?

- Конечно, - ответил он.

И весь зал запел под аккомпанемент аккордеона:

Вместе весело нам жить (в интернате), – 3 раза

Мы умеем здесь дружить (в интернате). – 3 раза

Очень любим петь мы песни современные,

Петь готовы все уроки с переменами.

Коль уроки состояли бы из пения, -

То у нас на них хватило бы терпения.

Во время пения Шаинский пританцовывал со свойственным ему темпераментом.

- Владимир Яковлевич, - обратилась к нему другая девочка. - Наш Ким Иосифович написал слова и музыку специально для нашего интерната.

Я снова взял аккордеон, и зал снова запел, но пел на этот раз не так, как обычно, а с чувством гордости за свою школу и за свою песню. «Наш интернат для нас родимый дом», - скандировали они, видимо, желая подчеркнуть каждым словом, что и у них «есть своя песня».

Через некоторое время директора Богданова повысили в должности, и он стал заведующим областным отделом народного образования. В школу пришла новая директриса, и все пошло вкривь и вкось: если прежде мой кабинет был только кабинетом музыки, то теперь она разрешила проводить там и другие уроки. Конечно, в этом было мало приятного: на других уроках дети ломали стулья, разрисовывали столы, и т.д. Мы с ней стали конфликтовать (она оказалась ярой антисемиткой), и я вынужден был подать заявление об уходе из школы.

[Читайте продолжение в будущих номерах газеты]


Учёба в Донецком музыкальном училище

Дорогой автор - Ким Иосифович Юзанов, в 1960 - 1963гг Вы были моим педагогом по классу хорового дирижирования. Знаю, что Вы сейчас проживаете в Нетании и по-прежнему работаете с хоровыми коллективами. Сообщите свой e-mail. Хотелось бы поделиться с Вами делами прошлыми и теперешними. С приветом и добрыми пожеланиями! Леонид

Дорогой Ким Иосифович! С большой радостью узнал, что живёте, в Нетании, здравствуете и даже продолжаете работать - руководите хором ветеранов,репатриантов из республик бывшего СССР. Я ваш бывший ученик по классу хорового дирижирования в Донецком музыкальном училище. Сообщите свой e-mail, очень хотелось бы обменяться впечатлениями о нашей прошлой и теперешней жизни! С приветом и самыми добрыми пожеланиями! Ваш Леонид


Email Кима -

Email Кима - yuzanov@gmail.com


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