Сегодня узнал, что на Почте России, оказывается, нельзя оплатить наложенный платёж по банковской карте (а другие услуги можно).
Об'ясняется это якобы тем, что не всегда наложенный платёж проходит (например, из-за ошибки в реквизитах). А если платёж не прошёл -- надо вернуть деньги. И вот методом возврата денег на карту Почта России почему-то не владеет. Хотя вообще-то такая техника существует!
Об'ясняю маме, как принимать бытовую технику у курьера:
-- Вот, держи нож. Курьер придёт, поставит товар. Ты ему говоришь: "Распаковывайте товар". А он отвечает: "Сами распаковывайте". Тогда ты достаёшь нож...
Мгновение не всегда бывает прекрасно, но выяснить, каково же оно, бывает необходимо.
Есть микроконтроллер, на котором крутится прошивка. В прошивке происходит событие X, вызывающее срабатывание точки останова в интерактивном отладчике. Как посмотреть на осциллографе, какие данные бегали по линиям непосредственно перед событием?
Для начала, в осциллографе есть режим Single Sequence ("однократная последовательность"), который отображает сигналы в окрестности от момента срабатывания "триггера". А триггер -- это условие, которое проверяется перед тем, как начать запись сигналов. Обычно условие имеет вид "напряжение по каналу 3 должно упасть ниже 2,5 вольт" -- или что-то подобное. Это всё настраивается при помощи вращения ручек и нажатия кнопок.
Хорошо, если событие X, за которым мы охотимся, сопряжено с изменением состояния какой-нибудь заранее известной линии. Типа та падает из единички в нолик. Тогда к ней можно подключиться и использовать как триггер. Но если такой линии нет?
То её надо создать. Тут нам и пригодится тот самый светодиод, который мы запаяли три поста назад. В строчке перед точкой останова пишем, что светодиод надо включить/выключить. И подключаем канал осциллографа к его ножке. Вуаля.
Сцена была такая. Три дворника стояли в ряд на асфальте в глубокой луже. В руках у них были лопаты для снега. На улице был плюс.
Потом они начали делать так: первый дворник загрёб воду лопатой и метнул её на сугроб на газоне. В этот момент второй сделал то же. А за ним и третий. Они стали повторять это в цикле.
Это смотрелось так классно, что я достал смартфон и стал снимать их на видео. Один из них сразу встал. Второй продолжил своё дело. А третий пошёл ко мне.
-- Зачем снимаешь? -- Да так... интересно. Я никому показывать не буду.
И я ушёл. А потом уже подумал -- могли ведь и побить!
К сожалению, на видео их синхронная работа так и не попала.
Ещё со времён Half-Life 1 (а может и ещё раньше) в компьютерных играх для "тайного" перемещения между локациями используются вентиляционные ходы. И, что удивительно, входы в эти ходы всегда расположены так, что туда можно удобно забраться. И внутри их размер такой, что по ним удобно ползать. Естественно, ходы ведут именно туда, куда надо.
Но насколько это соответствует реальности, интересно?
Скажу честно, по вентиляциям я не специалист. Но то, что я видел, не пригодно для перемещения. Вентиляция во-первых, слишком узкая, а во-вторых, вертикальная.
Стоит обратиться к гуглокартинкам. Там всё-таки можно найти подходящие ходы. Но используются они для вентиляции помещений типа ангаров. Или для вентиляции магистрального уровня -- и в помещения всё равно выходят маленькие ходы. Вот, например:
Даже если вы проектируете малюсенькую платку с микроконтроллером, на ней в обязательном порядке должны присутствовать компоненты, позволяющие диагностировать её состояние во время работы. Как минимум, это: -- светодиод питания, который светится, когда на микроконтроллер (!) подано питание; -- светодиод, управляемый через GPIO микроконтроллера.
Лучше, если последних будет минимум две штуки (разного цвета). Первый надо зажигать, когда прошивка стартовала и произвела базовые настроечные действия. Второй надо зажигать, когда все блоки и устройства успешно инициализированы -- контроллер готов к работе.
Необходимость наличия такой диагностики связана с тем, что не всегда работа с платой осуществляется через интерактивный отладчик. Поэтому хорошо бы знать, жива плата вообще или нет. А если не жива, то на каком этапе фейл.
Если для финальной версии платы цветомузыка недопустима, светодиоды можно делать с'ёмными.
Заказали диван. Диван привезли. Оплачены под'ём на этаж и сборка.
Диван состоит из трёх деталей -- две большие и одна маленькая. Грузчики две большие несли пешком, а маленькую оставили у лифта внизу. Две большие собрали, подходят к выходу из квартиры. И один из грузчиков мне говорит:
Выбирали устройство... по документации. Чем качественнее руководство по программированию, тем лучше.
Начальник: И как тебе это устройство? Я: Инструкция крайне... лапидарная. Начальник: Лапидарная? Тебе череп не жмёт?
А потом я прочитал, что лапидарный это не просто "краткий", а "краткий И ясный". Инструкция была действительно короткая, но совершенно непонятная. Поэтому я из-за недостатка образованности употребил слово не к месту.
Я сидел в поезде метро, а передо мной стояла женщина несколько старше средних лет. Она пританцовывала и подпевала плееру. Что ж. Обычно люди так не делают, но... будем считать это вариантом нормы. Ну прёт человека!
И вдруг она сказала: -- Не пизди.
Говорила не мне. Ага, значит она всё-таки имеет психическое расстройство. Я таких людей побаиваюсь, которые в транспорте сами с собой разговаривают. Но агрессии эта женщина не проявляла.
Потом она продолжила напевать. Через минуту она снова сказала: -- Не пизди.
А через какое-то время: -- Какое нахуй долголетие??
Я приподнял на неё взгляд и обнаружил, что на куртке у неё было два значка. Один значок был "не отдадим Курилы", а другой был... Ghost Busters. Ага, может тогда она с призраком разговаривает? С кем не бывает. Правда значок был странный. На нём было фломастером написано VON, а лицо призрака с эмблемы было заклеено лицом человека, похожего на Собянина.
Потом место рядом со мной освободилось, она туда села, продолжив приплясывать (сидя) и подпевать, но больше не разговаривала.
А когда я собрался выходить, я увидел рядом с дверью телеэкран, который транслировал специальную метроверсию канала Москва 24. И там шёл ролик про программу "Московское долголетие".
Тогда-то я и понял, что всё это значило. Женщина разговаривала с телевизором!
-- А у вас нету случайно с собой кубика Рубика? -- Нету. Но могу завтра принести. Что же вы заранее не предупредили! -- Если бы я заранее знал, что он понадобится, я бы и сам принёс. (коллега хотел на его примере что-то об'яснить студентам)
Я думал, что это заклёпка крепления на поручень. Но потом оказалось, что это кнопка! (очередной пример отсутствия юзер-френдли... попробуй догадайся, что это!)
У старых валидаторов эта кнопка могла быть выведена на поручень (и часто на ней было написано "STOP"). Тут же кнопка входит в состав валидатора. Эта кнопка -- "информирование". Нажимаете кнопку, прикладываете билет -- и видите информацию об оставшихся поездках и сроке годности. Жалко, что не показывает последний проход.
У нас на работе есть один доктор наук, очень уважаемый. В узких кругах он известен как борец против гомеопатии, экстрасенсов и прочей антинаучной ерунды. Сегодня на работе его не было.
О чём разговор зашёл, я не помню, но вылился он в то, что одна женщина вдруг нам рассказала о том, что славянской цивилизации больше 6000 лет, и что Пётр I заменил древний славянский календарь на европейский. Эта информация показалась мне странной и я стал эту женщину расспрашивать, откуда она взяла такие сведения.
В качестве аргумента она сообщала, что нумерация лет в районе 6000 присутствует в летописях. Однако по моим сведениям календарь с годами в районе 5-7 тысяч соответствует отсчёту времени "от сотворения мира" -- и к славянам отношения не имеет.
Она сказала, что сейчас нагуглит, т.к. не помнит, где слышала. И нагуглила. Ох. Прочитала текст. На словах "Круголет Числобога" я сказал себе "стоп" и пошёл смотреть на сайт своими глазами. И там я увидел то, что ожидал увидеть. Это был сайт инглингов.
Я кратко об'яснил этой женщине, что то, что там написано -- ненаучно, а инглинги запрещены в России как экстремисты.
Коллеги меня похвалили и сказали, что я прям как наш доктор наук -- развенчатель мифов и борец за науку.
Это, конечно, было очень приятно, но странно. Ведь на самом деле моя голова полна антинаучной хуйни. Просто на работе про это не знают.
В мультиметре села батарейка. Так как она садилась уже давно, новая была на готове.
Раскрутил, вставил новую -- не работает. Вставил старую -- (еле-еле) работает. При помощи старой померил новую. 12 вольт с гаком -- батарейка нормальная.
Батарейки одинакового типоразмера. Разных фирм -- это да, но если батарейки приложить друг к другу -- визуально разницы не видно. Спойлер: но она была.
Потом я обнаружил, что если батарейку слегка перекосить, мультиметр будет работать. Попробовал под один из концов батарейки подложить бумажку -- чтобы она была перекошена. Но когда я закрутил винты, питание опять пропало. Крышка выпрямила батарейку несмотря на бумажку.
Тогда я догадался, что просто один из подпружиненных контактов держателя батарейки недостаточно подпружинен. Я его подогнул и всё заработало.
Но блин. Изготовители что, подгибали контакты под конкретную батарейку? А есл другая отличается на 0.5 мм, то уже всё, ага.
Собрался выйти из магазина, но заметил, что к двери (прозрачной) снаружи прислонился какой-то мужик. Стоит и разговаривает по телефону.
Я медленно надавливаю на дверь, отталкиваия его. "Извините пожалуйста, можно пройти?"
Мужик неохотно поддаётся, отвлекается от телефона и тут мне говорит: "А вы можете пять минут подождать?"
ЧИВО.
Но я уже вышел. И тогда уже понял, в чём дело -- с крыши скидывали снег, а этот мужик следил, чтобы никто не выходил.
Я, конечно, сделал неправильно. Надо было стоять и ждать, а я побежал. Но обсуждать это сейчас уже поздно. Снег в меня всё равно не попал.
А что мне не понравилось -- что следящий мужик был не юзер-френдли. Раз уж следишь -- не говори по телефону и будь готов заранее показать людям, что происходит, а не когда они уже вышли.
История началась... пару лет назад. Маме как-то раз кто-то позвонил и сказал, что у него есть какая-то горящая путёвка куда-то. Мама дала строгий наказ, что надо нам всем срочно сделать загранпаспорта. Ха.
Для начала меня с сестрой мама направила в МФЦ, чтобы мы узнали, что как. В интернете были инструкции по заполнению анкеты, но они были не совсем понятными. Самый страшный пункт анкеты -- "укажите все ваши места работы за последние десять лет". Жесть.
В МФЦ мы пришли и стали допрашивать специалистов по разным пунктам анкеты. Оказалось, что для хранения знаний в МФЦ применяются облачные технологии. О том, как заполнять один пункт, знал один человек. А о другом -- другой. Они постоянно ходили друг к другу консультироваться.
Мы выяснили всё, что хотели и... история с загранпаспортом почему-то застопорилась. То ли путёвка куда-то пропала, то ли мы обленились.
О загранпаспорте я вспомнил этим летом. Решил довести историю до конца. Для этого я зарегистрировался на Госуслугах. Тогда же я узнал, что есть двое госуслуг -- московские и федеральные. Они на разных сайтах и нужны для разного. Загранпаспорт делается через федеральные, при этом нужна "подтверждённая" учётная запись, т.е. надо пойти в специальное место и показать свой паспорт. Это всё я сделал.
Госуслуги я хвалю. Во-первых, заполнение анкеты на компьютере это гораздо проще, чем на бумаге, всем рекомендую. Во-вторых, там есть чат с живым человеком, который по существу отвечает на вопросы. Это правда. Ну а в-третьих, никуда дополнительно идти не надо -- только уже забирать готовый паспорт (хотя это компенсируется тем, что надо пойти куда-то, чтобы подтвердить учётную запись; но делать-то это надо лишь один раз).
Сроки, конечно, они задержали, но где-то месяца через два мне пришло письмо о том, что паспорт можно забирать. И тут я стал тормозить. То лень, то ещё что. К декабрю я до них дошёл.
При этом по ошибке я сначала пришёл в отделение полиции. Сказал им, что в интернете было написано, что надо прийти именно в ОВД. Они очень удивились, меня внутрь так и не пустили и сказали идти в МФЦ.
ОКАЗАЛОСЬ
что я неправильно прочитал интернет. Там было написано не ОВД, а ОВМ. Это разные вещи. И ОВМ расположен в здании МФЦ, хотя это отдельная структура, причём всё-таки относящаяся к МВД.
В МФЦ выяснилось, что никакого паспорта ещё нет -- и его напечатали прямо при мне. Они сказали, что теперь заранее редко печатают, потому что народ долго не забирает, а у них напечатанные паспорта копятся. Паспорт мне отдали, сделали запись в основном паспорте, я расписался везде, где надо.
Нас на работе иногда посылают в командировки в странные страны, в которые не всем хочется ехать. Я всегда отмазывался тем, что у меня нет загранпаспорта. Что теперь? Я решил об этом спросить. Зря.
-- А мне надо на работе сообщать о том, что у меня есть загранпаспорт? -- А вы что, на гос. службе работаете? -- Не знаю. Я в бюджетном НИИ. -- А у вас есть допуск к гос. тайне? -- Нету. -- Э... Надо спросить. [опять облачные технологии!]
Сначала тётка звонила по одному телефону, потом по другому, потом куда-то ушла. А когда вернулась, её ответ был таков:
-- Вроде как сообщать не нужно, но коллега заметил, что у вас заявление подано больше полугода назад, поэтому нужно делать повторную проверку в ФСБ. -- Э... вообще-то прошло только 5.5 месяцев, смотрите: раз-раз-раз (посчитал при ней). -- Хм, и правда. Но всё равно лучше сделать проверку. -- Окей. Мне что, паспорт отдавать обратно? -- Ну... да. -- А вы потом мне новый напечатаете или этот же отдадите? -- Этот же.
И паспорт я... отдал. При этом никакой бумаги об этом составлено не было. Уже потом я подумал -- вот я дурак же! Но было немного поздно. Тётка обещала позвонить через неделю.
Позвонила она, конечно, не через неделю, а побольше. Но это мелочи. Повторную проверку я прошёл -- паспорт можно было забирать.
В один из дней я по техническим причинам прогулял работу. И раз уж прогулял, решил зайти в МФЦ за паспортом. Прихожу, об'ясняю на респешне, чего я хочу. А мне отвечают:
-- А они сегодня работают до 16:45. А сейчас... э... 16:48. Приходите завтра.
АААА!
На третье посещение МФЦ мне всё же удалось забрать загранпаспорт окончательно. Фух.
-- И как настраивается, по какому интерфейсу работать? -- Он автоматически определяет по кабелю. Если в кабеле только три провода запаяно, то RS-232, а если все шесть -- то RS-422. -- Жесть. -- Не жесть, а медь.
То, что я напишу ниже, мне лично очевидно. Но когда начинаешь писать прошивки для микроконтроллеров -- это может быть ещё не очевидно. Так, на днях я обнаружил эту ошибку в прошивке у начинающего микроконтроллерщика. А за пару недель до этого -- у себя.
Воспользуемся классической терминологией -- Алиса отправляет Бобу сообщение. Сообщения. Одинакового формата, одно за другим.
Вариант первый -- в соответствии с договорённостью Боб ожидает получить сообщение длиной 8 байт. Однако после третьего байта Алиса внезапно умирает.
Когда Алиса воскресает, она, конечно, не помнит, что и кому она передавала, поэтому начинает передавать сообщение заново. Однако Боб об этом не знает. Получив первый байт нового сообщения, он записывает его как четвёртый байт старого сообщения! Фейл! Границы сообщений "сползают", в итоге Боб будет всё время получать неправильные сообщения и удивляться, почему не совпадает контрольная сумма.
Второй вариант -- Боб и Алиса договорились, что первым байтом сообщения будет 0x55. Однако либо Алиса сошла с ума -- и начала присылать неправильные сообщения, либо Боб подошёл к передатчику в середине сообщения, поэтому первым принятым байтом оказалось не 0x55, а, скажем, 0xAA. Если Боб не будет игнорировать ошибочное начало сообщения, а будет писать байты подряд, то он опять никогда не синхронизирует границы сообщений, как и в первом случае. Все сообщения будут признаны ошибочными из-за неправильной сигнатуры.
Действия тут очевидны: 1. В первом случае: если возникает пауза при передаче, то необходимо "забывать" недополученное сообщение и начинать приём заново. На практике это означает, что надо обнулять буфер приёма, если очередной байт (бит) был принят после паузы на линии. 2. Во втором случае сложнее. Если первый ожидаемый байт оказался неправильным, то буфер, конечно же, должен быть сразу обнулён. Однако, если сообщения сыпятся потоком, на восстановление синхронизации может уйти какое-то время, если сигнатура в сообщении присутствует не только в начале, но и в середине (может же случайно оказаться, что мы хотим передать сообщение 0x55 55 55 55 55 55 55 55?). Полностью эту ситуацию не побороть, можно только уменьшить количество потерянных сообщений, если, к примеру, увеличить длину сигнатуры, либо запретить её применение в остальной части сообщения.