1. Пусть программа зависла. Она вела логи и видно, в какой момент она зависла. Более старшая управляющая программа тоже вела логи. Логи надо сопоставить. Но прежде, чем делать выводы, следует сверить часы! В моём случае разница составляла две минуты (разные компьютеры, единого сервера синхронизации времени нет, интернета в локалке нет). Это была критичная разница: примерно через две минуты после зависания я выключил программу. Если бы время было одинаковым, отчёт об ошибке старшей программы сигнализировал бы о том, что зависание было старшей программой определено ещё в момент зависания. А разница в две минуты означала, что старшая программа отреагировала не на зависание, а на то, что я младшую программу прибил.
2. Пусть у нас есть система реального времени: мы посылаем куда-то запросы, при этом гарантируется, что операция выполнится, скажем, за 10 мс. В этом случае, если надо провести несколько операций, можно просто подождать 10 мс, а потом слать следующий запрос. Оказалось, что лучше этого всё равно не делать. Если есть техническая возможность, надо сначала проверить, выполнилась ли предыдущая операция. Тут есть две причины. Первая -- операция могла закончиться с ошибкой, поэтому следующую пока слать нельзя. А вторая -- хотя изготовитель и гарантировал 10 мс, по факту в редких случаях может оказаться больше. Особенно если изготовитель -- я.
Сел в электричку. С местами туговато. А это была та самая ростовская электричка, где по два контролёра и два охранника. Я выбрал свободное место и сел на него. Один из охранников сидел от меня через проход. У нас состоялся такой разговор: Охранник: Тут занято. Я: Что? Охранник: Тут занято, идите сидеть в другой вагон! Я: Что? Почему? Охранник: В соседнем вагоне девушки лежат на трёх сиденьях сразу. Сгоняйте их и сидите там.
Я смотрю рядом с собой. Там ещё одно пустое место. А дальше чей-то бесхозный рюкзак.
Я: Это что, все три места в ряду заняты? Охранник: Да.
В этот момент за меня вступилась контролёр.
Контролёр: Сидите, мужчина, где сидите.
На этом разговор был закончен.
А потом я понял, в чём было дело. Контролёры и охранники заняли вместе двенадцать сидений -- четыре скамейки по три. Разложили там свои вещи и сидели там, когда у них был перерыв в работе. Но даже с таким подходом они могли обойтись всего шестью местами, а не двенадцатью!
Несколько раз видел/сталкивался с ситуацией, когда несёшь на кассу товар со скидкой, а её уже нет, просто "ценник ещё не обновили".
А сегодня я впервые увидел, как мужику продали пиво по скидке, которая только что появилась. Ценник тоже обновить не успели. Он не возражал, но взял ещё две бутылки.
Однажды я понял, что передачи в машине не обязательно переключать по очереди. Надо включать ту передачу, которая соответствует скорости (оборотам). И вверх, и вниз. Например, можно разогнаться побольше на первой, а потом сразу воткнуть третью. Я так иногда делаю при выезде из переулка на магистраль, когда надо как можно быстрее набрать скорость (на первой передаче машина лучше ускоряется). Может быть, это вредно для машины, не знаю.
И вот меня везёт такси -- и я понимаю, что водитель постоянно слишком долго едет на предыдущей передаче. А потом я замечаю, что он со второй сразу переключается на четвёртую!
-- Ой, а вы сразу второй на четвёртую переключаетесь? -- Ага. -- А в этом есть какой-то замысел? -- А третья передача не работает! Гонки на этой машине на спор устраивали -- и доломали.
Стрёмно, когда от ПО требуется надёжность. Особенно в момент тестирования в присутствии заказчика. А вдруг всё повиснет и сломается? Это тревожность.
Следующие тревожности ощущаются по-разному: 1. Я не знаю, остались баги в ПО или нет. (разумеется, остались) 2. Я знаю, что в ПО есть баг, знаю, как он проявляется, но не понимаю, какова его причина. 3. Я знаю, что в ПО есть баг, знаю, в чём причина, но ещё не исправил.
Если одно и то же действие может быть инициировано из разных источников (по внешнему сигналу, по кнопке и т.п.), то пути, которые приводят к выполнению действия, должны быть максимально слиты. То есть, участки кода, которые различаются, должны быть короткими. Иначе возможна ситуация, когда система будет вести себя по-разному при ручном и при внешнем управлении. А это очень плохо.
Пока надо просто просматривать некоторые файлы и иногда их копировать -- Проводник винды подходит хорошо. Я к нему даже как-то привык. Ну да, открыто 150 окон, из них 75 друг друга дублируют. Ну да, нужную папку тяжело найти. Но ладно.
А вот когда работать с файлами нужно активно, быстро и в больших количествах, Проводник показывает себя с плохой стороны.
Я подумал одну минуту и поставил тотал коммандер. Ох!
Как же приятно оказалось работать с файлами в классическом двухпанельном менеджере. Вжик-вжик и всё готово. А главное, что мигом восстановились рефлексы из детства, куда жать. Norton Commander 4 даром не прошёл.
Я: Да что вы так волнуетесь! Испытания наша установка с первого раза всё равно не пройдёт. Косвенный начальник: Если не пройдёт, то нас выебут. Точнее, меня! выебут. А мне уже надоело.
Когда приехал один из побочных начальников, он решил накормить нас в ресторане.
Возвращались с об'екта поздно, в заведение попали около полуночи. Был вечер субботы. В заведении проходило что-то вроде сельской дискотеки.
Я ел и всё это наблюдал. Словами описать я это не могу.
Я: Я крайне озадачен. Начальник: Ты думаешь, это только здесь происходит? Я: Нет, конечно. Начальник: Это происходит повсеместно. И то, что ты столкнулся с этим именно здесь, ничего не значит.