Открываю Query Analyzer, пишу запрос «SELECT * FROM …», втыкаю наушники, тыркаю на зелёную стрелочку Execute query и возмущаюсь:
— @#$, чё не играет?!
Всего историй: 154
Открываю Query Analyzer, пишу запрос «SELECT * FROM …», втыкаю наушники, тыркаю на зелёную стрелочку Execute query и возмущаюсь:
— @#$, чё не играет?!
Архивы и бэкапы в автоматическом режиме? От лукавого всё это.
После института я устроился по специальности инженером-электроником на завод. Обслуживаю приличный участок цеха, чтоб он всегда работал в автоматическом режиме. Вся информация и управление завязаны на два сервера под Win2003, установленные на Главном Пульте. Начальство жлобится на нормальный антивирус, но это в порядке вещей («Кроме вас, к нему никто не подходит, вот вы и ставьте»). Поразил меня процесс создания архива.
Каждую ночь (работаем посменно) приходит специально обученный человек и делает архив температурных режимов. Открывает программу, вызывает график температуры заготовок и делает его скриншот, сохраняя это добро в Пейнте. Файлов таких в день — не менее тридцати. Раз в неделю начальник участка просит скинуть эти файлы ему на флешку (серваки не в сети) и отправляет их заказчику: «Режим выдержан!»
И всё бы хорошо, но скриншоты делают в BMP-формате, и полтора гига за неделю легко набирается. Сейчас на сервере только под архив занято уже более 45 ГБ. Вот я и думаю, когда система рухнет от недостатка места? На мои робкие попытки посоветовать сохранять в JPG или PNG был ответ: «Надо делать так, как учили».
Ах да: на серверах стоит база данных под SQL, куда автоматом пишутся режимы, но что их можно оттуда достать и отправить заказчику, кроме меня, боюсь, никто и не знает.
Однажды пришлось мне настраивать SMS-уведомления сотрудникам компании о предстоящих мероприятиях. Ну, как обычно: делаю выборку телефонов и имён из БД, перебираю массив и отсылаю сообщение: «%name%, напоминаем вам, что…» Вследствие того, что у одного пользователя может быть больше одного телефонного номера, сделал ещё один перебор массива с номерами внутри массива с сотрудниками. Поставил LIMIT 1 в SQL-запросе, проверил на себе — всё работает. Убрал лимит и запустил скрипт.
Заподозрил
В 2005 году я делал с товарищем курсовую: программа искала в локальной сети все расшаренные папки и загоняла список найденного в БД. Решили делать всё это на только что появившейся Visual Studio 2005 Beta 2; БД была, соотвественно, SQL Server 2005.
Новая Студия ставилась на винду не ниже XP, а в компьютерных классах царствовала 2000. Единственный комп, на котором была ХР, обладал 256 метрами памяти. Не буду описывать неимоверные тормоза, которые возникали, когда на этот компьютер заходили по RDP: в аудитории с нужным компом часто были занятия, и нас прогоняли.
Но вот программа готова. После пары часов сканирования сети проверяем, как быстро происходит поиск нужной информации в БД. О ужас: при первом же запуске запрос обрабатывается порядка десяти секунд, что никуда не годится. Повысить скорость едва ли удалось бы.
Лаборант принял работу в таком виде при условии, что мы повысим скорость поиска, но главным препятствием был преподаватель, которому тоже было необходимо показать программу перед защитой. Тут уж никакие оправдания не помогли бы, если всё так тормозит.
Пошли на хитрость: до того, как показывать работу, сделали запрос к БД, и результаты, естественно, закешировались. При преподе я ввёл в поле поиска слова, которые якобы пришли мне в голову только что. Естественно, запрос исполнился в мгновение ока. Препод был доволен, а я молился со скрещёнными пальцами, чтобы он не попросил поискать что-нибудь ещё. К счастью, пронесло.
Работаю гейм-дизайнером в крупном издательстве социальных игрушек. Про свой технический бэкграунд никому обычно не рассказываю, поэтому часто сталкиваюсь с забавными ситуациями и могу сказать, что многие кодеры любят дурить нашего брата. К примеру, типичная просьба «А вы не можете сделать выборку чуть поточнее?» обычно встречается квадратными глазами, праведным гневом и рассказами про то, что это дни, недели, а иногда и месяцы работы.
Но я могу спросить и иначе: «А не добавить ли вам AND и условие в SQL-запрос, чтобы получить желаемое?» Ответа ждать приходится обычно долго: подобный вопрос действует на знатоков баз данных гипнотизирующе. Потом гордые разработчики пасуют, а общие трудозатраты по их оценке снижаются до минут, если не до секунд.
Работаю сисадмином, рядом со мной сидит программер. Он весь день писал базу данных, отрывался только налить чай, покурить и пообедать. Дописал, тестит — работает! Ну, думаю, отметим это маленькое событие пивком после работы. Угу… Программер ставит курсор на форму, плавно нажимает Delete и Enter.
Я никогда так сильно не переживал о психическом состоянии коллеги. Лемуры со своим выражением глаз просто нервно курили в сторонке.
Общался с товарищем. У него проблема: начальство хочет, чтоб он за месяц перевёл имеющийся чужой проект с Информикса на Оракл. Я придумал красивый пример на понятном для урководства языке.
Перевести систему с одного SQL-сервера на другой — почти то же, что перевести машину с бензина на электричество. Ускорить, обеспечить ту же функциональность и обязательно сохранить внешний вид.
Решение «в лоб»: стартер есть, крутит что надо, аккумулятор — тоже. Может даже шевельнуть машину. Мощи, правда, маловато. В тестовом режиме поработает от розетки. Почти получилось, почти быстро. Так, теперь обеспечить автономную работу… Упс. Батареи явно не хватает. Аккумулятор требуемой ёмкости — чудовищно дорогой, тяжёлый и большой, ставить его некуда. Мотор вырежем — он уже не нужен, — а вместо него батарею всунем. Хм, с чем совместить трансмиссию? Ладно, стартер прямо на диск сцепления, всего лишь немного крепления доработать. О, и радиатор не нужен. Вместо него дыра некрасивая, зато аккумулятора хватит на 100 км.
Пробный пробег. Круто. Медленно, правда, и не на 100, а на 40 км хватило. Так, ставим на зарядку. Заряжаем, заряжаем, зар… Р-р-р! Сколько можно!
Второй пробный запуск. Поехали. «Бензин» кончается на трассе. Но — не зальёшь. Эвакуатор. Втык. Психи. В салоне вместо заднего сиденья ставим бензиновый генератор. Тихо гудит, тихо едет. Электричество для езды используется? Задание выполнено!
В нашу программистскую фирму прислали базу данных немецкого клиента для тестирования, чтобы убедиться, что программа работает хорошо с реальными данными. Тестировщики — люди весёлые: сразу нашли в базе некоего Шварцкопфа и уволили, внеся комментарий: «За крашеные волосы».
Дальше — больше. Некоего Альберта Шпеера отстранили от работы в ночную смену, указав в комментарии: «Подозревается в связях с Гитлером». Работа спорилась, геноцид шёл. Целый отдел был уволен с пометкой на немецком языке: «В газенваген».
Апогеем стало разжалование директора в завхозы, введение должности «Оберштурмбанфюрер» и принятие на неё (как вы уже наверняка догадались) Макса фон Штирлица.
Элемент реальности в игру тестировщиков внёс туповатый чувачок, который захотел проверить, как работает почтовый сервер. Всем вышеозначенным персонажам, а также их менеджерам вышеуказанные комментарии ушли по электронной почте — увы, настоящей.
Дали мне на неделе PHP-скриптик на оптимизацию. Скриптик простенький, предназначенный для переноса информации из XML-файлов в SQL-базу, хотя и в промышленных масштабах. Только предоставленый вариант выжирал подчистую всю предоставленую ему оперативку и сдыхал, обработав пару десяков файлов из нестольких тысяч. И это должно было обслуживать сайт одного из главных государственных судов!
После полутора суток разбора скрипта решил переписать с нуля. Опитимизировать было нечего: количество запросов превышало необходимое в десять раз, база вообще не имела индексированных полей. А хуже всего то, что горе-прогеры банально не знали SQL UPDATE, и код был испещрён командами DELETE и INSERT.
Звонок из бухгалтерии. Сам я работаю в смежном, финансовом отделе, но по причине генетически заложенного непонимания между отделом IT и нашими бухами за помощью частенько обращаются ко мне, так как я имел неосторожность показать свои знания в айтишной сфере.
— У меня форма в Аксессе не работает.
Мысленно радуюсь прогрессу: ещё год назад, заикнись я о том, что данные надо хранить в базах данных, а не в электронных таблицах, меня бы сожгли как еретика. Включаю режим телепатии, начинаю разбираться. Заметьте, я не вижу ни самой формы, ни таблицы, откуда берутся данные. Долго пытаюсь добиться от буха правды.
Просветление достигнуто. С упавшим сердцем я понимаю, что данные по-прежнему хранятся в Экселе (в XLS-файле и была ошибка), а к ним каким-то образом прикручена формочка из Аксесса. В общем-то, пройдя курс BDSM, думаю, что смог бы вытворить что-нибудь подобное, но есть вопрос: зачем?