Лучший способ избежать спора
устранить оппонента. Пословица «новых русских»
Недавно у нас возникла необходимость создать программы для управления UPS (блоком бесперебойного питания) соседней машины. А именно, перезагружать ее, как только она зависнет из-за аппаратных проблем.
Мы задались вопросом, как же определить сам факт зависания. Было принято решение изредка «пинговать» эту машину с соседнего Windows-компьютера: если она некоторое число раз не откликается, посылать на UPS команду выключения-включения. На чем писать, мы решили довольно быстро. Утилиты для работы с COM-портом UPS были написаны на Паскале, а все остальное на Perl, точнее, ActivePerl для Windows.
Чем хорош Perl, так это тем, что для него есть библиотеки практически на все случаи жизни. Их можно найти на http://www.cpan.org. Там есть такой модуль, называется Net::Ping. Его-то я и установил, решив, что альтернативное решение вызывать утилиту командной строки ping прямо из программы слишком расточительно. Я вставил в программу код наподобие следующего:
my $p=Net::Ping->new();
$p->ping($host, 2);
Я запустил программы, и UPS тут же взбунтовался и начал включаться и выключаться с молниеносной скоростью! После получасовых разбирательств я с удивлением выяснил, что хваленый модуль Net::Ping попросту не работает. А именно, ping() всегда возвращает ложное значение. В чем же дело? Заглянув в исходники, полученные с CPAN, я с негодованием обнаружил там примерно такой код:
sub ping
{ my ($host)=@_;
if($system eq "Windows") {
my $s=`ping $host`;
return $s=~m/\(0% loss/s;
}
...
}
Мы можем теперь лишь зааплодировать разработчикам. Мало того, что они используют тот самый медленный способ, вызывают новый процесс ping.exe, они еще и неправильно проверяют выходные данные утилиты. В самом деле, вот что выдает ping на моей машине:
Обмен пакетами с localhost [127.0.0.1] по 32 байт:
Ответ от 127.0.0.1: число байт=32 время<10мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<10мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<10мс TTL=128
Ответ от 127.0.0.1: число байт=32 время<10мс TTL=128
Статистика Ping для 127.0.0.1:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время передачи и приема:
наименьшее = 0мс, наибольшее = 0мс, среднее = 0мс
Естественно, в русской версии Windows слова «loss» нет: его заменяет слово «потерь». Именно поэтому функция и возвращала ложное значение, даже если ping проходил успешно. А всего-то и требовалось не указывать это проклятущее «loss», а просто оставить m/\(0%/s, что и было сделано в конечном счете.
Мораль сей статьи проста: хотя на CPAN имеются целые залежи модулей, установив один из них и обнаружив неправильную работу программы, не торопитесь грешить на свой код: возможно, ошибка в чужом модуле. Следующий очерк был взят с сайта http://www.ricn.ru и с очевидными орфографическими (и цензурными) исправлениями помещен здесь. Автор, к сожалению, мне неизвестен. Было бы очень приятно с ним познакомиться.
Для всех, у кого время от времени появляется плохое настроение, прежде всего нужно согнать свою злость на ком-то. Не делайте это на вашем знакомом, но делайте на незнакомом!
* * *
Я сидел у стола и вдруг вспомнил, что нужно сделать очень важный звонок. Я нашел номер и набрал его. Мужчина приятно сказал:
Слушаю...
На что я вежливо ответил:
Меня зовут Дмитрий и я хотел бы поговорить с Владимиром Ивановым.
Внезапно трубку с грохотом повесили, даже не ответив! Я не мог поверить, что кто-то может быть настолько груб. Я постарался найти точный телефонный номер Владимира и выяснил, что последняя цифра была неправильной. После разговора с Владимиром я снова набрал неправильный номер телефона. Когда уже знакомый мужчина поднял трубку, я зверски закричал: «Ты ослиная ж*!», и повесил трубку. Возле этого номера я написал слова «ослиная ж*» и оставил этот листочек на самом видном месте на письменном столе.
Теперь всякий раз, когда у меня было плохое настроение или же я просто заполнял налоговые декларации, я звонил своему «знакомому» и каждый раз кричал: «Ты ослиная ж*!» Это подбадривало меня каждый раз и сглаживало плохое настроение.
Вскоре телефонная компания предложила услуги автоматического определения номера (АОН). Для меня это было настоящим крахом, потому что я больше не мог звонить Ж*. Но однажды у меня в голове возникла гениальная мысль. Я набрал номер Ж* и услышал его голос:
Слушаю...
На это я ответил так:
Здравствуйте. Я сотрудник телефонной компании. Мне поручено узнать ваше мнение о качестве сервиса автоматического определения номера. Вы знакомы с этим сервисом?
Нет! ответила Ж* и громко повесила трубку.
Я быстро позвонил ему еще раз и крикнул:
Это потому, что ты ослиная ж*!
Причиной этого пролога является желание показать вам, что если у вас плохое настроение, то не нужно расстраиваться. Вы можете с этим быстро покончить, просто набрав номер 123-45-67.
* * *
Неуклюжая старушка возле супермаркета очень долго старалась выехать из своего парковочного места. Я уже перестал думать, что она вообще собирается это делать. Наконец, машина начала двигаться. Облегченно вздохнув, я отъехал немножко назад, чтобы дать ей побольше места для разворота. Здорово! Я думал, что она уже окончательно собирается уезжать. Вдруг откуда ни возьмись выезжает черный BMW и словно на крыльях влетает на мое место. Я начал сигналить и кричать: «Дружище, ты не можешь это просто так сделать! Это мое место! Я был первый!» Мужик вылез из своей BMW, абсолютно игнорируя меня. Он пошел в сторону супермаркета, делая вид, что не слышит меня. Я подумал, что он ослиная ж*, ведь в мире есть очень много ослиных ж*. Я заметил наклейку «Машина для продажи» на заднем стекле. Я записал номер телефона и нашел другое парковочное место. Несколько дней спустя я сидел в офисе возле письменного стола. Я только что позвонил Ж* по номеру 123-45-67 и крикнул: «Ты ослиная ж*!» (теперь это делать очень просто, поскольку я добавил номер Ж* в память телефона). Далее я вспомнил телефон мужика, что продавал свой черный BMW. Я набрал его номер, и голос ответил:
Слушаю.
Это вы продаете отличный черный BMW?
Да, это я.
Можете сказать, где я могу вас найти и осмотреть машину?
Да, я живу на Пушкинской 8, первый подъезд справа, квартира 7.
Отлично, как ваше имя?
Меня зовут Николай Малый. Можно просто Колян.
Хорошо, Колян. Когда я могу вас застать дома?
Вечером. Лучше после семи.
Слушай, Колян, хочешь я тебе кое-что скажу?
Да.
Колян, ты ослиная ж*!
Я громко повесил трубку. Несколько дней спустя, около семи вечера, я набрал телефон Ж* 123-45-67. Приятный голос ответил:
Слушаю.
Я закричал: «Ты ослиная ж*!», но не повесил трубку. Ж* спросила:
Эй, вы еще там?"
Конечно, ж*.
Послушайте, прекратите, пожалуйста, мне звонить.
Нет, ответил я.
Как вас зовут, дорогой? спросила Ж*.
Меня зовут Николай Малый. Можно просто Колян.
Где вы живете, Николай?
Я живу на Пушкинской 8, первый подъезд справа, квартира 7.
Я уже иду, сказала Ж*, тебе лучше начинать молиться, придурок!
Ага, очень испугался, ослиная ж*! ответил я.
Позже я набрал номер Коляна. Колян ответил:
Слушаю.
Колян, ты самая натуральная ослиная ж*!
Если бы я знал где ты, я б тебя...
Что ты, ослиная ж*?
Я б тебя убил!
Отлично, у тебя есть шанс. Я к тебе иду, ослиная ж*!
Я повесил трубку и набрал номер милиции. Я сообщил, что на Пушкинской 8 я убью моего квартиросъемщика, как только он вернется домой. Другой звонок я сделал на канал новостей, сообщив, что на Пушкинской 8 очередные разборки мафии. Позже я сел в свою машину и поехал на Пушкинскую посмотреть, что там творится. Фантастика! Наблюдение за тем, как два придурка выбивали один из другого мозги в присутствии шести бронированных машин ОМОНа, милицейского вертолета и кучи репортеров, было одним из наиболее удивительных переживаний в моей жизни.
Рекламный блок
Важное объявление:
автор категорически против копирования и распространения в Интернете всех статей «Куроводства» с возрастом, меньшим 6 месяцев. Печальный опыт «расползания» чрезвычайно устаревших ошибочных версий статьи про Apacheдействительно объясняет такое решение.
Орфография на «Куроводстве»:
если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмитеCtrl+Enter. Выделенный текст будет немедленно отослан вебмастеру, а Вы даже ничего и не заметите настолько быстро все произойдет.
На заметку:
если вы уже вскипели насчет дизайна этой страницы, то присмотритесь повнимательнее к названию, почитайте FAQ, сходите по лебедевским
местам, как это уже предлагалось выше. Можно ли считать пародию плагиатом? Надеюсь, что нет.