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

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

В числе профессоров Ришельевского лицея было несколько знаменитых ученых и чудаков. Ко вторым, в частности, относился профессор химии, ученик известного шведского ученого И. Берцелиуса – Гаасгаген, коверкавший русский язык и уверявший лицеистов, что корабли для прочности обивают медом (вместо «медью»).

При шоссировании городских улиц укатывание щебня производилось чугунным катком громадных размеров и веса, в который впрягались двенадцать пар волов. При ненадобности этот каток оставляли где-нибудь на свободной площадке без всякого присмотра, так как утащить его было невозможно.
И вот как-то служащие Тираспольской заставы увидели, что каток выезжает за пределы города в сопровождении бессарабских молдаван. На вопрос, куда везут каток, они отвечали: «В Кишинев». После дальнейших расспросов выяснилось, что какие-то два человека уговорили молдаван, продавших в Одессе древесный уголь, отвезти каток в Кишинев за 100 рублей. Для обеспечения гарантийной доставки они взяли с молдаван задаток 25 рублей с условием, что этот залог вместе со 100 рублями будет им возвращен в Кишиневе после доставки туда катка.
Обманутых молдаван заставили отвезти каток обратно на его место, а сами мужики возвращались в Кишинев с волами, кнутами и без 25 рублей.

При порто-франко все заграничные товары не облагались пошлиной. Благодаря этому продовольственные и промышленные товары и предметы роскоши отличались дешевизной. Это привлекало в Одессу богатых людей со всей России. Благоденствовали и рабочие, заработки которых были до того велики, что некоторые биндюжники прикуривали рублевыми бумажками, а один подгулявший биндюжник – даже десятирублевкой.

При вывозе из города иностранных вещей, не бывших в употреблении, на таможне взимали пошлину. Самой неприятной таможней была Херсонская при надзирателе Педашенко, отличавшемся грубым обращением с проезжающими. Но в оправдание своего поведения он всегда представлял отобранные предметы, которые обманным путем пытались провезти, как контрабанду.
Чаще всего попадались женщины. Одна спрятала под платьем небольшие стенные часы. К ее несчастью, во время досмотра они стали бить двенадцать раз, чем и выдали контрабандистку.
Другая подвесила куда-то целую головку сахара. Шпагат, которым сахар был привязан к телу, оборвался в таможне, и головка грохнула на пол из-под юбки.
Иногда попадались дамы, обматывавшие свое тело материей или кружевами. Поэтому надзиратель Педашенко позволял себе без всякой церемонии щупать толстых женщин, допрашивая их: «А що це у вас – натуральнэ, чи фальшивэ?»

Вскоре после вступления на должность градоначальник Александр Иванович Казначеев получил от управляющего местного откупщика (сборщика налогов с населения) пакет с тысячью рублями.
Казначеев пришел в бешенство от такой дерзости и хотел строго наказать оскорбителя. Но в это время вошел в кабинет его старый друг, директор Одесского театра барон Рено и, узнав в чем дело, стал успокаивать Казначеева, рассказав, что такие поступки откупщиков практикуются повсеместно.
Зная слабость градоначальника – его щедрость по отношению к бедным – барон в наказание предложил практическую меру – принять деньги с благодарностью, как приношение в пользу бедных людей города, с обязательством повторять его ежегодно к праздникам Рождества Христова и Святой Пасхи.
Казначееву эта мера наказания понравилась, и он привел ее в исполнение.

Когда-то на бульваре у подножия памятника Дюку де-Ришелье стояла медная сигнальная пушка. В один из дней пушка исчезла. Все старания полиции найти ее были тщетными. Позже стало известно, что пушку распилили на части и медь употребили в дело. Полиция и градоначальник были в отчаянии от этого скандального происшествия.
Через некоторое время после этого случая к градоначальнику на прием попросился из тюремного замка арестант для секретного разговора. Случаи, когда арестанты сообщали какую-нибудь тайну лично градоначальнику без свидетелей, уже бывали и раньше.
Арестант – опасный преступник в цепях – был приведен в кабинет градоначальника под конвоем. Он заявил, что может указать свидетеля, который видел, кто и когда уворовал пушку. За открытие «секрета» он потребовал 5 рублей. Градоначальник согласился и приказал полицмейстеру отправиться вместе с арестантом туда, куда тот укажет.
Арестант привел полицию на бульвар и, как на свидетеля кражи, указал на Дюка де-Ришелье, у ног которого раньше стояла пушка. Градоначальника вначале охватил гнев, но потом он расхохотался и выдал остроумному и находчивому арестанту 5 рублей.

В 1848 году в Городском театре ставили оперу «Эрнани». Главные роли Эрнани и Эльвиры исполняли молодые, красивые, с восхитительными голосами и страстной игрой артисты, приведшие публику в неописуемый восторг. Крикам и аплодисментам не было конца.
В последнем действии, когда старик Сильва протрубил в рог – сигнал, по которому Эрнани поклялся лишить себя жизни, и тот стал прощаться с Эльвирой, восторг и напряжение публики дошли до предела. В зале послышались рыдания. Градоначальник – добрый и мягкосердечный человек – до того расчувствовался, что не мог перенести подобного финала и сгоряча крикнул на весь зал полицмейстеру, чтобы тот немедленно отправился на сцену и не допустил Эрнани до самоубийства.

В одесском театре появилась русская оперная труппа, в которой дебютировала знаменитая впоследствии артистка Лавровская. В опере «Жизнь за царя» она произвела такой фурор, что после спектакля публика выпрягла из ее кареты лошадей и, впрягшись в упряжку, повезла актрису в «Петербургскую» гостиницу. Коренными в этой упряжке были градоначальник и городской голова, а пристяжными – полицмейстер и какой-то студент. Сзади карету подталкивали студенты.

Был в Одессе знаменитый в свое время трактир-ресторан Алексеева, с оркестром в Казенном – Дерибасовском – саду у здания университета, славившийся своими блинами и кулебяками. Один из посетителей – адъютант генерал-губернатора – частенько туда заглядывал и задолжал большую сумму.
Алексеев долго ждал уплаты, просил, терпел, наконец, не выдержал и поехал к генерал-губернатору жаловаться на его подчиненного. В приемной встретил его адъютант, постоянно дежуривший здесь.
- Куда? – спросил он посетителя.
- Да вот, пришел жаловаться на вас его превосходительству.
В это время Анненков вышел в приемную. Узнав Алексеева, он кивнул ему и спросил о причине посещения. Но адъютант, опередив жалобщика, подскочил к генералу и бойко доложил, что Алексеев явился к его превосходительству с покорнейшей просьбой сделать честь пожаловать к нему на блины.
- С удовольствием, с удовольствием, - ответил Анненков и повернулся к другим посетителям.
Сконфуженный и озадаченный Алексеев ретировался. Тогда подбежал к нему адъютант и, провожая его до дверей, сказал: «Вот тебе урок, как на меня жаловаться! Если еще раз вздумаешь жаловаться, то блинами не отделаешься – я приглашу генерала со всей его свитой на обед».

Новороссийский генерал-губернатор князь М.С. Воронцов, аристократ в полном смысле этого слова, владея громадным состоянием и живя открыто, на широкую ногу, постоянно устраивал приемы, обеды и балы. Гостеприимство и любезность хозяев превышали всякие похвалы.
Но в одном князь был менее любезен – в отношении курения. Сам не курил и не переносил табачного дыма. По окончании званого обеда он обыкновенно обращался к мужскому обществу со следующей фразой: «Господа, кто имеет скверную привычку курить, прошу в отдельную комнату». После такого приглашения курящих не оказывалось.

Всем старожилам города были памятны общества в домах Скаржинского, Абазы, Папудова, графа Лидерса, графа Толстого и многих других, где гремели оркестры и было разливанное море шампанского.
Особенно памятны были костюмированные балы, на которых дамы и господа блистали в дорогих, стоимостью по нескольку тысяч рублей, нарядах. Здесь бывали великолепные костюмы: турецкий, весь в золоте, одалиски (наложницы гарема), русских бояр, костюмы «Солнце», «Полумесяц», «Ночь», «Лесной бес», «Звезда», «Моряк». На одном из балов появился костюм «Воздух» – до того прозрачный, что многие дамы тотчас уехали с бала. Зато целый рой мужчин окружал прелестницу.
Со времени этих забавных историй прошло много-много лет. Но...

На улице Водопроводной около знаменитой «Чумки» был установлен плакат с призывом: «Догоним и перегоним Америку», а дальше, за железнодорожным мостом, ГАИ предостерегала: «Не уверен – не обгоняй».

В артиллерийском училище был вывешен модный тогда плакат: «Наша цель – коммунизм».

В молочном магазине висело объявление: «Евреям сметану не продавать». Пожилой покупатель прорвался к завмагу. За столом сидел такой же пожилой еврей.
- Как вы могли повесить такое объявление? – с возмущением спросил покупатель.
- Скажите, а вы эту сметану пробовали? – вопросом на вопрос спокойно, по-одесски, ответил завмаг.

В операционной больной спрашивает:
- Доктор, а после удаления аппендицита я смогу играть на скрипке?
- Конечно, сможете.
- Надо же. Никогда не играл, а теперь буду.

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

Содержимое этого поля хранится скрыто и не будет показываться публично.
  • Допустимые 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.
Больше информации о возможностях форматирования