gifts2017

Апрельские "нешутки", записанные в пятницу не 13-го

Опубликовал Даниил Матвеев (cargobird) в раздел Программирование - Практика программирования

Пара баек из жизни незадачливого кодера или почему падал сервер.

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

Байка №1. Непроверенный кусок кода или "злобный копипаст".

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

Тут кодер смутно припоминает, что вчера вечером он внес небольшое изменение в код. Посмотрел, ага, именно он.

Функция ДляУправляемыхФормВернутьДеньНачалаОткрытияСписка() Экспорт
	ДеньНачалаОткрытияСписка = ДобавитьДниКДате(ТекущаяДата(), -3);
	// Учитываем пятницу и субботу
	Пока (ДеньНедели(ДеньНачалаОткрытияСписка) = 5) ИЛИ (ДеньНедели(ДеньНачалаОткрытияСписка) = 6) Цикл
		ДатаЗапретаИзменений = ДобавитьДниКДате(ДеньНачалаОткрытияСписка, - 1);
	КонецЦикла;
	
    Возврат ДеньНачалаОткрытияСписка;
КонецФункции

Скопипастил, а переменную внутри цикла заменить забыл. Приходит пользователь, открывает журнал документов и одно ядро занято, крутит бесконечный цикл. И так далее. "Бомба" срабатывает только по понедельникам и вторникам. Потом заменив одну переменную, сорок минут обновлял базу, отбиваясь от наседающих пользователей, желающих работать. Морали нет, всех время от времени клинит...

Байка №2. Размножающийся Paint.

Как-то кодеру дали очередное несложное задание: сваять макет ценника для акций, акции обозначаются галочками и текстом. Сколько акций, столько и галочек. PNG-файл с галочкой прилагается.

Кодер почесал в затылке, открыл Paint-ом файл, скопировал в буфер галочку, вставил в макет... и получил вместо галочки черный квадрат Малевича. Ладно, решил он, объедем на другой козе. Вставил в макет объект Paint, вставил в открывшийся Paint галочку, закрыл, посмотрел - хорошо получилось. Сдал задачу коллеге-заказчику.

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

Подробный анализ ситуации показал, что для вывода каждого ценника на экран, для каждой галочки в этом ценнике, сервер трудолюбиво открывал свой Paint, таким образом размножая Paint в процессах в геометрической прогрессии. Белые экраны конфигуратора и предприятия на тормозящем сервере представляли собой зрелище не для слабонервных. Закрытие сформированного табличного документа с ценниками закрывало все Paint-процессы.

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

Продолжение следует...

См. также

Подписаться Добавить вознаграждение

Комментарии

1. script Мальчинко (script) 04.04.15 07:57
Коды разные важны - коды разные нужны
maxkisa; amon_ra; cargobird; +3 Ответить
2. Михаил Варовин (varovinm) 09.04.15 08:17
Ну с пэинтом ты погарячился, Сэнсэй :)
3. Даниил Матвеев (cargobird) 09.04.15 11:18
(2) varovinm, Миша, рад тебя здесь видеть)
Ага, это возможная тема для очередной статьи "Сборник неочевидных затыков для бывалого программиста")
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа