5484

О барометре в свободном падении

Говорите, программа рассчитывает принадлежность клетки к одной или другой группе по цвету фона? Ха! Нас этим не удивить.

Начало девяностых, олимпиада по информатике для школьников в далёкой провинции России. Одно из заданий: построить и вывести на экран решение задачи о выпуклой оболочке для произвольного массива из не менее чем трёх точек в двухмерном пространстве, никакие три из которых не лежат на одной прямой. Решением должен быть список точек, составляющих эту выпуклую оболочку, в произвольном порядке. В качестве бонуса можно было продемонстрировать всю эту чушь в графическом виде.

Для справки: задача важная, нужная и популярная, и решений у неё есть много. Одно из решений приведено в книге «Алгоритмы: построение и анализ» Т. Кормена, являющейся университетским учебником для большинства вузов, начиная с MIT. Но в девяностых на окраине России про Кормена ещё не знали, и пришлось выкручиваться своими силами.

Насколько я понимаю, от нас ожидалось что-то вроде алгоритма Грэхема: взять самую левую точку, которая гарантированно будет включена в эту выпуклую оболочку, построить векторы ко всем остальным точкам, выбрать из них самый правый, перейти на выбранную точку, повторить. Если уже выбраны две точки, ситуация облегчается: сумма нормированных векторов будет тем больше, чем больше они сонаправлены. Проблема только в выборе второй точки, потому что не на чем построить самый первый вектор. Но если самая первая точка — крайняя левая, то можно взять вертикальный вектор (добавить мнимую точку с той же координатой X, но с запредельным Y): все остальные точки будут гарантированно справа. Но векторы у меня вылетели из головы, а с тригонометрией и выбором самого маленького угла относительно только что построенной прямой я просто запутался. Время поджимало, и надо было сдать хоть какое-то решение. Результат поразил даже меня самого.

Итак, для получения бонусных очков надо показать всё это графически. Отлично: выводим на экран все введённые точки, между всеми ними рисуем линии. Тогда линии, составляющие выпуклую оболочку, тоже будут нарисованы. Теперь берём какую-нибудь точку, расположенную вне этой оболочки ([639, 479] кажется подходящим кандидатом) и выполняем заливку FloodFill кавайно-малиновым цветом. Заливка упрётся в линии выпуклой оболочки. Теперь ещё раз пройдёмся по всем возможным линиям, отрисовывая их уже чёрным цветом — с точки зрения пользователя линии сотрутся. На экране останется малиновый фон с чёрной кляксой посередине, а граница между ними как раз и будет внешней оболочкой. Бонусное задание выполнено.

Теперь для каждой точки найдём цвета восьми окружающих её пикселей. Если среди них окажутся малиновые, вызовем сложный комплекс проверок, призванный ответить на вопрос, является ли точка частью внешней оболочки или же просто лежит рядом с границей. Я не помню, как я обрабатывал граничные случаи, — кажется, сдвигал точку на пиксель в сторону чёрного цвета, перерисовывал и смотрел на разницу, — но в конечном итоге я находил все точки выпуклой оболочки (плюс, возможно, несколько лишних, лежащих совсем рядом с границей и не отсеянных дополнительными проверками). В конце концов я очищал экран и рисовал выпуклую оболочку набело, одной линией: мол, смотрите, завидуйте. Весь процесс занимал несколько минут.

Монстрообразная программа состояла из нескольких десятков функций с «говорящими» именами типа CheckThis и Try12. Комментариев по делу не было: мне было не до них. Переменные имели имена, в которых начал путаться я сам. Глобальные и локальные были замешаны в гремучую смесь. Времени на отладку и на доводку этого чуда до ума просто не хватило. Работает? Сдаём!

Комиссия долго совещалась по поводу оценки этого творения, но в конце концов согласилась, что задачу я выполнил, и начислила мне за неё какое-то количество баллов. Думаю, не в последнюю очередь на их решение повлиял рассказ про Нильса Бора, решающего задачу об измерении высоты башни с помощью барометра, который я по памяти вбил в комментарий в начале программы. По сумме баллов я занял на этой олимпиаде первое место.

Дома, в спокойной обстановке, я переписал решение как надо, с векторами и определением углов. Потом, переехав в другую страну и обучаясь на факультете компьютерных наук, я обнаружил ещё несколько решений этой задачи, в том числе очень оригинальный и довольно быстрый алгоритм Чана, созданный как раз в середине девяностых. Переписанная программа заняла в несколько раз меньше места, работала не в пример быстрее и выглядела куда элегантнее. А самое обидное, что реализация этого решения (даже с учётом повторения темы «векторы» в учебнике математики) заняла меньше времени.

Какой будет мораль? А не будет никакой морали. Разве что повторение общеизвестной истины: озаботьтесь проектированием перед тем, как начать писать код.

5483

Линукс — это ко мне

Работаю техником в крупной компании. Езжу по абонетам, починяю интернет. Сижу как-то с утра в офисе, жду, пока раздадут заявки. Заходит к нам блондинка из отдела продаж. Ну, думаю, опять будет чистить мозги на тему «приведи клиента». Хотя нет, у нее в руках ноут. Хм.

— По линуксу тут к кому обратиться?

— По линуксу — ко мне.

Я оживился, поставил новенький HP к себе на стол. Судя по наклейке, на нём предустановлена SUSE 11. Включаю, попутно спрашиваю, в чём дело. Говорит, что ноутбук будет демонстрировать скорость нашего интернета клиентам. Просит настроить инет, по-нашему — PPTP VPN. «Сусь» приветствует меня и просит залогиниться.

— Какой логин-пароль?

— Не зна-а-аю…

Вспоминаю, что видел подобное в магазинах. Стоит на витрине ноут с линуксом, просит залогиниться. Продавцы на вопрос о пароле руками разводят. Скоро надо уезжать работать — не переустанавливать же… Ни LiveCD, ни загрузочной флешки под рукой нет. Как же попасть в систему? И тут я вспомнил простой, как апельсин, но идеально работающий метод.

1) Перезагружаемся.

2) В GRUB жмём «E» — редактирование параметров загрузки.

3) Дописываем: «rw single init=/bin/bash».

4) Грузимся.

Я без проволочек попал в рутовую консоль. Добавил юзера, сменил админский пароль, загрузился, залогинился. Теперь нужно установить поддержку PPTP (в графике, на апплетике; не учить же блондинку работе в консоли — замучаюсь). Весь инет в офисе — только по PPTP. Получается замкнутый круг. Беру рабочий ноут, подключаюсь к вайфаю, подключаю VPN. Делаю из него, одним словом, обратный роутер: по вайфаю принял, по кабелю раздал.

sysctl -w net.ipv4.ip_forward="1"

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

aptitude install dnsmasq

Объединяю ноуты патч-кордом, вбиваю настройки. Работает. Долго и мучительно насилую YaST и таки устанавливаю поддержку VPN. Сдаю ноут и бумажку с паролями хозяйке.

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

5482

Связь «многие ко многим»

Монтажником я проработал немало. Встречал и гуаняные чердаки, и первые этажи 17-этажек домов, и жильцов с матами и милицией. Славное и интересное было время. В моём обычном пятиэтажном доме в городе, которому вот-вот будет тысяча лет, расположились два провайдера домовых сетей и моя локалка компов на пятнадцать.

В один прекрасный момент интернет пропал. Чуя неладное, лезу на крышу. Все провода обоих провайдеров порезаны на двухметровые куски. Звоню в саппорт (первый раз за два года) — естественно, берёт трубку девушка. Объясняю ситуацию: порезаны все провода. Спрашиваю, есть ли свободные ремонтники с километром провода и как скоро их ждать. Ни за что не угадаете, что я услышал в ответ! «Вы испытываете проблемы с выходом в интернет или локальную сеть? Нажмите „Пуск“...»

В моей бухте оставалось ещё немного кабеля. Протянул, скрутил всех своих, поспорил с другом, что ремонтники придут не раньше, чем через неделю, и отправился пить пиво.

Ремонтники, два парня непонятной наружности, судя по всему, недавно из армии, пришли через пять дней с одной неполной бухтой, посмотрели, ушли. Через восемь дней снова они, но уже подготовленные, скрутили все отрезанные концы и протянули десяток проводов от девятого подъезда к моему пятому. Сразу и не обратил внимания; думал, спор я выиграл, пойду в интернетах посижу. Фигушки: через двадцать минут инет отвалился. Вылезаю, спрашиваю, что только что делали? «Ничего, уже закончили, стяжками пристёгиваем». Возвращаюсь. Линк на роутере какой-то странный, как будто на него подали 230 В напрямую и качают со скоростью три терабита. Обратно на крышу — ремонтников уже и след простыл.

Молодцы смотали три 26-портовых свитча с DHCP двух провайдеров между собой десять раз. Думаю, читателям этого сайта не надо объяснять, почему интернет перестал работать. Громко проклиная этих Алешёнек, порезал скрутки и снова получил стабильный линк. В таких пятиэтажках провода идут в подъездное окно, потом дальше по щиткам — совершенно очевидно, что вторые концы проводов (от пользователей) так и остались без внимания «квалифицированных ремонтников». Интернета в доме так и нет. История продолжается.

5481

Ословедение

Я учусь на первом курсе университета по специальности «юриспруденция». Первая лекция по информатике. Приходит препод, даёт нам всем чёрно-белый принтскрин Windows ХР и начинает рассказывать, что есть что. Ну, думаю, ладно, может, на практике будет лучше. Первая пара — учит открывать ярлыки на рабочем столе и копировать обьекты. Но на этом мучения не закончились: мы принялись изучать работу с офисными приложениями на основе 2003 версии пакета.

— %teacherName%, давайте я бесплатно пробник 2007 Офиса поставлю везде, с собой диск есть.

— Нет, не надо, мне этот нравится.

Я понимаю, что ей всё равно, что практически везде сейчас седьмой, а то и десятый Офис стоит, и студенты, которые с «тройкой» работать научились, с трудом будут переквалифицироваться на остальное.

На сладкое — «самая тяжёлая лабораторная работа», которой мы будем зачёт закрывать.

1. Как запустить программу Internet Explorer?

2. Как устанавливается связь с провайдером?

3. Из каких частей состоит URL-адрес?

4. Назовите элементы окна Internet Explorer.

5. Как устанавливается и для чего служит автономный режим работы?

6. Какие команды позволяет выполнять панель инструментов «Обычные кнопки»?

7. Какую информацию отображает строка состояния?

8. Для чего служит панель ссылок?

9. Для чего служит строка адреса?

10. Как выполняется выход из программы Internet Explorer?

Украина — страна технически отсталая, юристы в особенности, но не настолько же!

5480

Что за сарай?

Довольно долгое время занимался мелким ремонтом компов на вызовах. Среди клиентуры завелось много полезных знакомых, и один из них как-то обратился ко мне: «Дело есть». Расспросив, я выяснил, что нужно сделать одному депутату сайт. Ну, сайт — так сайт.

Выезжаю к потенциальному заказчику. За столом сидит увесистый дядька с ужасным настроением и решает какие-то дела по телефону. Обсудили с ним имя будущего детища, даже хостинг предварительно выбрали — и понеслась.

Сделал шаблон, притащил на флешке к заказчику. В шапке ему не понравилась картинка — был сарай какой-то для веса и демонстрации будущего вида.

— Чё это за сарай? На кой он мне тут нужен?

— Это просто для веса! Его мы заменим на то изображение, которое нужно вам.

— А на х#я он тут нужен-то? Зачем мне этот сарай?

С пятой попытки объяснил, что сарай убирается и заменяется на что угодно.

— Чё тут какие то бабочки делают? На кой мне они сдались?

— Да их тоже тут не будет! Я их разместил, чтобы вы могли увидеть, какого размера изображения будут. Можно больше, можно меньше.

— Ладно, с бабочками понял.

Погнали дальше, обсудили разные функции сайта и прочую сопутствующую хрень.

— Для начала мне нужны изображения.

— Дык возьми фотоаппарат да сфотографируй!

— Я ж не фотограф!

— Сайт ты делаешь — вот и фотографируй.

Проехались по местам, нащёлкали кадров. Я всё это дело отфотошопил и подогнал под размеры нужные, но оплаты за это дело так и не увидел.

Когда настало время закидываться на хостинг, бабло опять зажали, и я решил сложить всё на бесплатную площадку.

Работа потихоньку пошла, но люди, ответственные за предоставление материалов, всячески отмазывались: почта, дескать, не работает и всё такое.

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

5479

Засада под дождём в домашнем уюте

Работаю в небольшой фирме, точнее, корпорации: у шефы (она женского пола) небольшая мания величия. В подчинении 40 машин и 8 серверов. Контора расположена в полуподвале.

Однажды буквально из ниоткуда появились мыши. Может, из ближайшего продуктового? Сначала одна, потом ещё. Шефа отказалась обсуждать вопрос о «найме на работу» кота: она их терпеть не может. Разумеется, мы пробовали рассыпать отраву, ставить мышеловки, но как-то с утра наблюдали занимательнейшую картину: в центре комнаты на мышеловке сидит мышь и жрёт кусок хлеба с вдавленными в него зёрнами яда. СЭС заявку не приняло, так как это надо было делать через коммунальные службы, а заявку должны были подписать и арендаторы остальной части здания.

Возвращаюсь домой грустный: мышеловки не работают, яд не действует, на ультразвуковой излучатель выругался начальник отдела логистики: «Ещё пара минут работы этой х@#ни, и я уйду вместе с мышами!» Причём мыши-то как раз уходить и не думали. У дома меня перехватывает мой бывший однокашник, весельчак, балагур, заядлый рыбак и охотник, попутно — коллега по игре в D&D в мире Forgotten Realms. Наслушавшись его рассказов про охоту и рыбалку, я стал играть рейнджером, к чему мой друг относился с лёгкой иронией: все-таки я был «заочником», и сидеть в засаде под дождём предпочитал в домашнем уюте, а не под дождём. Так вот, видя мою кислую рожу, друг спрашивает, в чём дело. Отвечаю. Тот хмыкает и, узнав, что в субботу-воскресенье мы не работаем, просит остаться на работе в пятницу вечером и обещает, что придёт с помощью.

Не обманул: заявился после ухода коллег. Осмотрев вверенную мне территорию, в очередной раз хмыкнул, распаковал свой рюкзак, достал оттуда кучу каких-то диких прибамбасов то ли из фильма про инквизицию, то ли из анекдотов про Вовочку, то ли из армейских наставлений по инженерным заграждениям и расставил их по помещениям. Договорившись о том, что в понедельник придём к шести утра (мы с девяти работаем), разошлись: я домой, друг на рыбалку.

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

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

5478

Дежурный фотошопщик

Восемь утра. Мобильник начинает напевать голосом Высоцкого: «У тебя глаза — как нож…» Опять начальник, но я же сегодня еду в один из наших филиалов, чего он пристал? Поднимаю трубку: «Скорее езжай в офис. Тут срочное дело у бухов и в приёмной к тебе что-то важное».

Кое-как одевшись во что-то с виду чистое, еду в офис. Полтора часа дороги — и я на месте. Почти мигом. Бухи за чашкой чая сообщают, что у них вчера «контакт» не открывался, а сегодня открываются. В чём проблема? А в том, что мог и сегодня не открыться. Проверить с утра, прошла ли оплата за интернет, конечно, слабо.

Ладно, есть же ещё «очень важное дело» в приёмной. Дело действительно важное и, главное, очень срочное: нужно чьей-то дочке до завтра сделать коллаж из фотографий для лабораторной. Ну что же, сажусь делать, раз начальник приказал.

Мобильный звонит ещё раз. Гневный голос начальника отделения, в которое я так и не добрался по вине «важных дел», начинает угрожать, что самый главный босс будет посвящён в то, насколько я необязателен и как из-за меня не выполняется план работы.

Ещё один день эникейщика прожит зря. Зато лабораторная готова, что позволит чьему-то чаду лишний час-два посидеть за компьютером или у телевизора.

5477

Суд без электричества

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

О вопросе законности действий гаишников и перипетиях административного процесса умолчим — речь пойдёт о другом. Друг попал в беду, если так можно назвать заезд колёсами автомобиля на разделительную сплошную. В общем, его собирались превратить в пешехода на некоторое время. Из доказательств — только диск с фильмом, как друг объезжал ползущий по обочине грузовик. Все доводы друга и его адвоката ни к чему не привели, и судья назначил последнее слушание на последний день срока с просмотром диска и торжественным лишением прав, причём именно на вечер. Стоит добавить, что на одно и то же время мировые судьи, которые рассматривают эти дела, назначают по несколько процессов: являются-то далеко не все нарушители.

Оперативным путем узнаём, что славный сотрудник ГИБДД являться никуда не собирается: у него отпуск, и он планирует провести его на море, а не с «толстой злобной тёткой и водятлом, который правила не учит» (дословно). Оставим мнение гаишника на его совести. Всё внимание на то, что диск — вещь тонкая, совместимая с электронными приборами, обильно кушающими электричество.

Два дня подготовки — и установлено, что старая подстанция, от которой питается судебный участок, заодно обслуживает и соседний деревянный дом к расселению. Проводка искрит от ветра, дышит на ладан и всё такое. Уж не знаю как, но в 16:55 один из жителей дома включил новый обогреватель. Коротнуло в доме так, что защита сработала и на трансформаторе. Неисправность устранили только к десяти вечера, когда никто уже судиться не собирался. Всем переназначили аж на следующую неделю — секретарь при свете мобильного повестки новые выписывала.

А дальше — дело техники. Сроки вышли, права вернули, справедливость и находчивость восторжествовали над бюрократизмом и ленью. Спросите, почему ленью? А всё просто и печально: судья сама призналась, что ей проще лишить человека средства к заработку, чем с нуля набирать постановление о прекращении.

5476

«Кис-кис-кис», а не «XXX»!

Тестировал голосовой поиск от Гугла. Наигравшись сам, дал попробовать кошке, лежавшей рядом. Воспользовавшись моментом, пушистая намурлыкала руководство по FreeBSD.

5475

Нойзкор с открытым кодом

Завтра рано вставать? Будильника нет?

sleep 27240 && cat /dev/urandom > /dev/dsp

А, у вас шестидесятиваттные колонки? Значит, завтра рано вставать всему дому. Соображать-то у нас многие умеют, а вот додумать до конца, похоже, не умеет никто.