Сестра пишет книгу. Пересказывает мне куски. Пересказывает, конечно, не по порядку. В результате, я знаю то, что не положено. А то, что положено -- не знаю. Возникают вопросы. Я их задаю. Но ответы меня не устраивают!
-- А почему Петя оказался в это время и в этом месте? -- Это ещё не известно.
-- И кто был убийцей Лоры Палмер? -- Я ещё не придумала.
Это совсем не то же, что ждать очередную серию онгоинга или главу манги. Когда ждёшь очередную серию, то предполагаешь, что работы уже ведутся. Что если не режиссёр, то хотя бы автор знает, что будет дальше. План уже составлен.
В данном же случае меня интересует то, что попросту ещё не существует. Это как... попытаться открыть дверь, но обнаружить, что она нарисованная.
В фильтрах яндекс-маркета не достаёт одной очень важной функции -- исключения из выдачи указанного пункта.
Допустим, есть поле "изготовитель", и там четыре изготовителя: Рога, Копыта, Клан Фут и Aperture Science. Я хочу увидеть всё, кроме Копыт. Для этого надо поставить галочки всюду, и только напротив Копыт не поставить. Это выполнимо. А если изготовителей не четыре, а двадцать четыре?
Заливал коллеге какую-то дичь про кривизну Вселенной, про её размеры и замкнутость. Коллега поддакивал, даже что-то говорил про расширение с ускорением, но потом состоялся следующий диалог.
Он: Но ведь у Вселенной есть где-то центр! Я: Где?
Вопрос о центре вселенной, честно говоря, я и сам разобрал не сразу. И не уверен, что даже сейчас его правильно понимаю. Однако ответ может быть правильный, полуправильный и неправильный.
Он: Солнце!
Я рассмеялся.
Он: Ну ладно, если звёзд будет очень много, то центр их масс и будет центром вселенной. Я: А может, галактики? Он: А чем вселенная отличается от галактики?
Это очень важный момент. С ним можно встретиться и в преподавании, и в бытовых разговорах. Когда рассказываешь что-то, то предполагаешь, что собеседник имеет примерно ту же базу, что и ты. Однако это предположение может быть ошибочным по крайней мере в двух вариантах: 1. Собеседник может понимать одну часть рассказов, но иметь пробел в другой, из-за чего можно неожиданно обнаружить, что собеседника надо дополнительно готовить к продолжению разговора. 2. Намеренно или случайно собеседник может правильными ключевыми словами убедить, что он знаком с темой. Но это может быть не так.
Так или иначе, вернёмся к космической тематике. Прежде чем начинать думать о том, где же расположен центр вселенной, надо приблизительно понять, какие об'екты существуют во вселенной, каков их масштаб и каков масштаб расстояний между ними. Вот лучшая инфографика по теме, что я нашёл.
Иногда проще написать длинный пост, который писать лень, чем написать короткий, но придумывать его полчаса.
В январе у машины отказали тормоза. Починили их довольно быстро. Был отказ главного тормозного цилиндра. Через его поршни в неизвестном направлении утекла вся тормозная жидкость.
На днях менял колёса на летние и внимательно осмотрел задний тормозной барабан слева. На нём были явные подтёки. Я думал, уж не масло ли вытекает из заднего моста? Но папа дал мне идею, что это как раз может быть тормозная жидкость.
Я решил проверить уровень тормозной жидкости. А как это сделать? Сквозь бачок ничего не видно -- то ли он полный, то ли пустой. Сверху на бачке какие-то провода. Я знал, что нарушать герметичность тормозной системы нельзя, поэтому ссал открывать бачок. Но после чтений интернетов решил, что открыть и посмотреть в него всё-таки можно, потому что герметичность системы находится совсем в другом месте.
Открыв бачок, я обнаружил, что тормозной жидкости там полно. Но она... та-дам! Прозрачная! Как можно было придумать делать тормозную жидкость прозрачной? Ведь сквозь полупрозрачный бачок не видно, что там налито! Да, когда жидкость стареет, она становится тёмной, но это происходит далеко не сразу. Все другие жидкости в машине цветные, что облегчает понимание, что и где течёт и сколько где находится. Ээх.
Итак, вернёмся к проводам. А зачем на бачке провода-то? А это датчик с поплавком. Контроль уровня. Я прочитал, что если тормозной жидкости мало, то у меня должна загореться лампа. Однако когда у меня был отказ тормозов -- лампа не загорелась. А почему?
Я решил проверить датчик. С открытой крышкой опустил поплавок вниз и стал смотреть. Лампы не горят. А что и где должно гореть? Надо посмотреть схему.
Я открыл схему и долго водил по ней пальцем. Результаты получились такие. На приборной панели у меня стояла лампа стояночного тормоза. А сбоку от приборной панели был блок из двух ламп: "обогрев заднего стекла"+"отказ тормозов". Однако я, когда ставил зеркала с подогревом, хотел индикатор подогрева зеркал отдельно от индикатора обогрева заднего стекла. Я переключил лампу отказа тормозов на лампу подогрева зеркал!
Осталось ответить на последний вопрос. Почему я совершил такой неразумный поступок? Я стал вспоминать, как я устанавливал зеркала и как принимал это решение. Дело в том, что лампа отказа тормозов имела двойное назначение. К ней шло два провода -- от поплавка и от... стояночного тормоза. Поэтому когда я включал ручник, у меня загорались сразу две лампы -- на приборной панели и сбоку. Я посмотрел на схему, увидел, что провода идут и на эту лампу, и на лампу на приборной панели, и счёл, что это ненужное дублирование. Какой умник придумал дублировать стояночный тормоз? Поэтому я переключил боковую лампу на собственные нужды.
Но это было не полное дублирование, а частичное. Да, действительно, сигнал от обоих датчиков шёл на обе лампы. Но на одном из проводов был установлен диод, который приводил к тому, что одна из ламп выполняла обе функции (боковая), а другая лампа только одну (на приборной панели) -- а именно, показывала стояночный тормоз. И, честно говоря, я не знаю, какое из решений хуже: дублирование или частичное совмещение. При оригинальной схеме получается, что только совместное наблюдение двух ламп даёт информацию о том, отказали тормоза или нет.
Надо подумать теперь, как вернуть лампу отказа тормозов в строй.
То, что я напишу ниже, не очень полезно, но зато приятно!
Вы заходите на телеграм-канал, там есть комментарии. Вы оставляете комментарий. Его читают другие и ставят свои плюсы и минусы. Но вы про них просто так не узнаете! Если на ваш комментарий отвееетят, и если вы перейдёте в конкретную дискууууссию, то вы увидите, что вам понаставили. Как же узнать о своих поклонниках в ином случае?
Зайдите на канал и нажмите три точки -> View discussion (а на смартфонах ткните в название канала, а потом на круглую кнопку с иконкой в виде реплики). Видите в правом нижнем углу сердечки? Прокликайте их. Это ваши сердечки.
Было у меня две железки, изготовленных в соседней организации. Одна чуть более старая, другая чуть более новая.
Старая находилась внутри установки и работала неправильно. У меня было джва варианта: 1. Перепрошить старую железку новой прошивкой, надеясь, что там баг исправлен. 2. Заменить старую железку новой железкой, где прошивка уже новая.
Я решил пойти по второму пути, но старую всё равно пришлось бы прошивать, поэтому я связался с разработчиком и попросил последнюю версию прошивки. Когда-то, несколько месяцев назад, мы отлаживали эту железку, и разработчик присылал мне этих прошивок очень много. Но какая же из них была правильная? Последняя по дате-времени? Не факт! Лучше пусть сам мне пришлёт то, что надо.
Разработчик предложил мне своеобразное решение. Прошивка в данном устройстве не шифруется и не заблокирована от считывания. Можно скачать прошивку с новой железки и прошить в старую.
Тем не менее, я настоял на свежей сборке.
Сначала это показалось мне капризом. Типа, борьба за перфекционизм. Или желание перевесить часть работы на другого.
Но потом я обнаружил целых две причины, почему прошивать заведомо известные версии прошивок -- это правильно.
Первая причина: оказалось, что баг присутствует в новой железке тоже. Это означало одно из двух: либо прошивка новой железки всё же недостаточно новая, либо баг сохранился в новой прошивке. И при том, и при другом случае копирование прошивки из одной железки в другую не улучшило бы ситуацию. Поэтому лучше сразу заливать заведомо известную новую версию. Это исключит вероятность проявления тех багов, которые уже были исправлены ранее.
Вторая причина: если баг сохраняется даже в последней версии прошивки, тогда мы будем знать, что именно эта версия прошивки содержит баг. И, та-дам! У нас есть исходный текст, из которого мы только что прошивку собрали. С этим можно работать.
Частично такие проблемы можно (и нужно!) решать административным способом: а именно, каждая "стабильная" версия прошивки должна внутри себя содержать свой идентификатор, а разработчик должен иметь возможность вернуться к любой из выпущенных версий. Но мы живём не в сказке, а в реальности. И, увы, в реальности разработчики могут следить за коммитами, но могут не следить за их нумерацией в тексте прошивки. Эта ситуация усугубляется, если разработчик находится в отладочном угаре. В таких случаях я и сам номер версии не ставлю. Не до того.
Евгений Евгеньевич, наш доктор наук, иногда пишет стишки. Я тоже пишу, но никому не показываю. А он показывает.
Я с ним поговорил на эту тему. Оказалось, что наш подход радикально отличается. Таланта у меня нет, я могу на четверостишие потратить час, и для меня это сборка паззла. "Так, эта деталька не подходит, меняем. Что у нас ещё в коробке?" Он же может написать четверостишие за 15 минут.
Но интереснее эффект, который у него происходит после написания стишка. Он говорит, что когда уже всё готово, то у него появляется ощущение, что день прожит не зря, поэтому пропадает мотивация делать какие-либо другие дела...
Чтобы узнать, какой ты капибара, надо ответить на несколько вопросов.
Ну и вопросы типа э... "Считаете ли вы, что смысл жизни в том, чтобы вкусно покушоц? Ответьте от по шкале 1 до 5".
И ты начинаешь думать. Так, я всегда всем рассказываю, что если смысл жизни и есть, то он в еде. Я сам пришёл к такому выводу пять лет назад и записал тезис у себя в голове. Так что надо отвечать 5.
Но постойте, давайте подумаем, действительно ли я так думаю сейчас? Если начать логическую цепочку, которую я крутил тогда, то окажется, что она уже давно рассыпалась. Пора ли менять записанный в голове тезис? Наверное, надо отвечать 1. Смысл жизни в том, чтобы голодать.
А если рассуждать не логически, а эмоционально. Что я чувствую? Там вообще что-то третье. И хорошо, если оно там есть. Некоторые вопросы такие, что сколько их не верти, ответ будет "не знаю", "не понимаю вопрос" или "никогда не задумывался". Но такого варианта нет.
Когда-то я начинал "Процесс", но бросил, потому что слишком страшно было. Времена меняются. Возможно, сейчас будет читать не так уж и страшно.
Но ладно. "Превращение". Проснувшись утром после беспокойного сна, Грегор Замза обнаружил, что превратился в страшное насекомое.
Что же дальше? Грегор сохранил сознание, но лишился тела. Вся семья вынуждена из-за этого поменять свои привычки. За ним следят как могут. Я очень хорошо знаю этот бытовой сюжет. Я сам в нём участвовал. Моя бабушка в последние годы жизни страдала от деменции. А последние её месяцы были весьма похожи на сюжет "Превращения". Только у неё всё было наоборот -- сохранив тело, она лишилась разума. Но так ли существенна для семьи Замзы была разница? То, что Грегор сохранил сознание, для них совершенно неочевидно.
Второй слой истории -- это переживания самого Грегора. Думаю, тут тоже можно придумать какой-нибудь бытовой сюжет, но давайте не будем о грустном. Превратившись в насекомое, Грегор узнает о семье и о себе то, что он бы не узнал другим способом. Он мнил себя всеобщим благодетелем, благодаря которому вся его семья процветает. На деле -- семья сидит у него на шее. Его успехи на работе малы, а отношение начальства очень плохое.
Ну и вот, теперь он -- насекомое. Теперь он может э... "пожить для себя". По работе ничего не требуют, семью обеспечивать не надо. Свободы у него, правда, тоже нет. И я всё-таки скажу, что это за бытовой сюжет. Это японский хикикомори.
Я, безусловно, домысливаю. Но у меня появилась идея о том, почему же он превратился. Это не внешние обстоятельства. Это внутреннее превращение. Он всю жизнь находился под психологическим давлением и... не выдержал.
Сколько я анимы посмотрел, а описаний не сделал. Надо себя заставлять! Читателям обзоры не очень интересны, но они интересны мне самому. Это учёт.
О чём
Это второй сезон сериала про злую девочку-волшебницу и добрую демоницу, которые должны враждовать, но вместо этого няшно дружат.
Что думаю
От первого сезона я был в восторге. Со вторым всё не так. Он какой-то рваный. Нам показывают несколько важных сюжетных моментов -- приблизительно в начале, в середине и в конце. Но все эти моменты очень плохо склеены какими-то филлерами. Кроме того, они не об'единяются в общую картину. Может быть, меня уже память подводит, но мне кажется, что первый сезон был структурирован гораздо лучше.
Я был рад провести время с любимыми персонажами, но вынужден сообщить, что качество сезона упало.
Рекомендации
Ну, тем кто первый сезон не видел -- точно можно не смотреть. Тем же, кто первый сезон видел... не уверен, что стоит смотреть второй.
Если мы в программе хотим посчитать большой интервал времени, можно обратиться к системным часам. Прошло пять лет с момента запуска программы или не прошло? Сейчас узнаем.
Если мы измеряем небольшие интервалы -- к нашим услугам таймеры. В Windows это, как правило, QueryPerformanceCounter().
В микроконтроллерах "человеческие" часы с минутами и часами не всегда доступны и не всегда удобны. Есть отдельные блоки таймеров, позволяющие считать промежутки времени и с увеличением счётчика, и с уменьшением, и с подвывертом. А есть счётчик тактов процессора.
Вот это убойная вещь. Блоки таймеров сначала надо настроить, потом запустить, потом за ними следить. Или настроить прерывание.
Счётчик тактов работает проще. Считываем первый раз -- начало интервала. Считываем второй -- конец интервала. Вычитаем и получаем искомое.
Мне надо было отмерять таймаут по 30 секундам. Прошло 30 секунд -- завершаем операцию. Частота МК -- 200 МГц. Сколько тактов мы насчитаем за 30 секунд? Очевидно, 30*200'000'000=6'000'000'000. И да, я поставил разделитель между тысячами.
Счётчик я сделал, но от срабатывал неправильно. Когда я получал число миллисекунд, оно оказывалось равно 21474. Это слишком мало.
21 секунда... а сколько это в тактах процессора? И это было 4'294'800'000. Хм, четыре с небольшим миллиарда. Где я уже видел это число?
А число 4'294'967'296 вам ни о чём не говорит? Это двойка в 32 степени.
Счётчик тактов процессора 32-разрядный и переполняется каждую 21 секунду! А 30 секунд это 6 миллиардов, и такое число не помещается в 32-разрядную сетку.
То есть, засечь более длинные интервалы таким способом попросту невозможно. В этом и была причина ошибки.
И эта ошибка не исправима. Надо переделывать подход. Скорее всего, придётся настраивать "настоящий" таймер.
Когда я много лет назад тусил на ннм-клубе, там был модератор, который в общении был очень мягким. Но это не значило, что его требованиями можно было пренебрегать.
"А можно ли в релизе сделать так-то и так-то?" "Не стоит"
Неподготовленный человек может подумать, что такая формулировка половинчатая: вроде и нельзя, но если очень хочется, то можно. Но это было не так. Каждый, кто не соблюдал мягкие требования модератора, узнавал, что такие "советы" к исполнению обязательны. И у модератора было достаточно возможностей, чтобы это обеспечить.
***
Но давайте поговорим о другом. О юзер мануалах. Читатель юзер мануала не знаком с автором юзер мануала. Поэтому он не знает, это у автора просто стиль такой мягкий, или действительно рекомендации -- всего лишь рекомендации? Вот какой у меня пример.
Открываю альфа-версию руководства к одной из железок, которую мы сделали. Читаю:
"При проведении измерения рекомендуется избегать сейсмических воздействий на установку, поскольку это может привести к некорректным результатам"
Может привести... а может и не привести. Рекомендуется избегать... но можно и не избегать? А что на самом деле?
А на самом деле -- если вы хоть пальцем по столу проведёте, то установка с ума сойдёт и прервёт измерение. Или нужна виброзащита, или нужно во время измерения стоять и не дышать. То есть, такая мягкая формулировка сбивает с толку. Она не отражает реальный уровень влияния сейсмики на процесс измерения. По моему настоянию эту формулировку изменили. Теперь там написано:
"Во время измерения недопустимо сейсмически воздействовать на установку. При наличии сейсмических помех результаты будут ошибочными, а измерение прервётся досрочно".
Зашла девушка из соседнего отдела (но другого, не того, где сильные программисты).
-- А где ваш начальник? -- Он ушёл пять минут назад. -- А где студенты? -- Они ушли одну минуту назад. -- Да что ж такое! Мне сегодня весь день не везёт!
И ушла. Вернулась она через джва часа. К тому моменту я остался один. (гусары, молчать!)
-- А можно у вас два листочка напечатать? У нас принтер не работает. -- Можно. Но... с принтером у нас тоже могут быть проблемы.
У нас действительно принтер печатает не каждый раз. Он сетевой, и иногда с некоторых компьютеров документ просто висит в очереди, а эффекта нет. В этом случае единственный способ -- перезапустить компьютер.
У меня уже был такой висящий документ, поэтому я сразу начал с перезагрузки компьютера. Перезагружалось всё очень медленно. Потом медленно открывался браузер.
-- Ты же программист! Почему у тебя всё так медленно работает?
С одной стороны, мне стало стыдно. А с другой стороны... я тебе по доброте душевной пытаюсь документ напечатать, а у тебя ещё и претензии? Это что такое? Я ответил:
-- Именно поэтому медленно и работает.
Но на самом деле поведение компьютера было нетипично. Браузер открывался раз в пять медленнее обычного. Потом я не мог открыть почту, куда она прислала документ. Потом почту я открыл, но документ не удавалось скачать. Я открыл диспетчер, там оказалось, что браузер занял уже 4 гб памяти и 1 ядро целиком, это спустя 5 минут после старта! Кончилось это тем, что мне пришлось запускать другой браузер, который предназначен для других целей. Там всё получилось. Я напечатал листочки и она ушла.
И после её ухода всё стало летать.
***
Я могу только подозревать, в чём было дело. Но как оккультист могу сделать предположение. Эта девушка занимается йогой. Надо было её спросить, не проводила ли она в последнее время медитаций в местах... скажем так, подозрительных? О кладбищах я даже не говорю. Какая-нибудь лесная полянка, которая симпатично выглядит, но почему-то никем не используется, как вам такое?
Я не раз писал, что у меня арахнофобия. А точнее, меня пугают только сенокосцы.
У меня подозрение, что это связано со сценой из первой Матрицы, которую я смотрел в детстве. Помните, когда Нео устанавливали жучок в пупок? Это и представить-то страшно.
Что вызывает у меня страх кроме сенокосцев? Всё, что похоже. Водомерки. Длинноногие комары. Однажды я испугался летающей пушинки от растения.
А недавно я смотрел видео с жирафами. Пока жирафы стояли на месте, всё было нормально. Но когда жирафы побежали -- и стали перебирать своими длинными тонкими ногами, то я почувствовал, что да. Что это огромный сенокосец!
В соседнем отделе понадобился функционал, близкий к тому, что мы уже сделали. Мы добрые, мы дали им несколько файлов с исходным кодом, который делает то, что им надо, и готовую DLL-библиотеку. В исходном коде есть тёмные места, с которыми не разобраться без наших об'яснений, но нам сказали, что у них сильный программист. DLL-библиотека двоичная, но как раз та часть, которая касается её использования, у них была полностью.
Потом зовут, нужен совет. Я пришёл, смотрю, что они написали. А там написано: