Сегодня Кемеровчанам мчс разослал смски, в которых предупредил о похолодании до -350 по цельсию.
И что обидно, бате пришло, брату пришло, а мне пришло, но там -35 написано, не знаю как так, возможно есть некая очередь рассылки, и тот, кто был в ней раньше, получил -350, а потом кто надо увидел ошибку, внёс правку, и до меня уже докатилось исправленное сообщение.
И что обидно, бате пришло, брату пришло, а мне пришло, но там -35 написано, не знаю как так, возможно есть некая очередь рассылки, и тот, кто был в ней раньше, получил -350, а потом кто надо увидел ошибку, внёс правку, и до меня уже докатилось исправленное сообщение.
👏1
Тестирую одну штуку в github actions, около получаса ран висит в состоянии queued (то есть в очереди).
На githubstatus.com гордо красуется надпись "All Systems Operational", и вот вопрос: как я могу быть уверен в стабильности инфраструктуры? Если своими глазами вижу проблему, а, как говорится, на бумаге всё впорядке.
И либо реально проблема ооочень специфична, и затронула очень малый процент репозиториев, либо информация об инциденте появится через пару часов, когда она нафиг уже будет не нужна.
На githubstatus.com гордо красуется надпись "All Systems Operational", и вот вопрос: как я могу быть уверен в стабильности инфраструктуры? Если своими глазами вижу проблему, а, как говорится, на бумаге всё впорядке.
И либо реально проблема ооочень специфична, и затронула очень малый процент репозиториев, либо информация об инциденте появится через пару часов, когда она нафиг уже будет не нужна.
Кодерская мастерская
Тестирую одну штуку в github actions, около получаса ран висит в состоянии queued (то есть в очереди). На githubstatus.com гордо красуется надпись "All Systems Operational", и вот вопрос: как я могу быть уверен в стабильности инфраструктуры? Если своими глазами…
Не работало из-за опечатки в workflow!
Попробуйте найти косяк:
Попробуйте найти косяк:
name: release
on:
push:
jobs:
build:
runs-on: ubuntu:latest
steps:
- name: test
shell: bash
run: 'echo hello'
Маленький секрет о формате yaml
yaml формат имеет огромное множество нюансов, позволяет делать кучу трюков с помощью различных синтаксических фишек, и часто наличие таких возможностей приводит к неожиданному поведению при парсинге.
Например значение no, не обёрнутое в кавычки, превращается в false.
Или многострочный литерал может схлопнуться в однострочный, когда вы этого не хотите, или наоборот.
Или можно ошибиться с отступом, и хорошо ещё, если оно не спарсится, а ведь может спарситься неправильно...
В общем я это всё к тому, что при работе с yaml у многих частенько подгорает, и на случай, когда подгорает очень сильно, есть одно интересное решение.
yaml представляет собой надмножество json, то есть в нём можно делать json вставки, например так:
Таким образом можно делать конфиги компактнее, но можно пойти немного дальше.
Вдумайтесь, yaml, это, надмножество, json.
Что это значит?
Это значит, что любой полноценный yaml-парсер понимает json, и спецификацией никак не ограничивается тот момент, с которого можно начинать использовать его.
В том числе никто не запрещает сделать json-объектом... весь документ.
Вы можете взять весь ваш огромный конфиг, от которого у вас пылает жопа, перегнать его в json, положить на место исходного yaml, и с точки зрения парсера ничего ненормального не случилось, это по прежнему валидный yaml, ведь, как вы помните, yaml - это надмножество json!
yaml формат имеет огромное множество нюансов, позволяет делать кучу трюков с помощью различных синтаксических фишек, и часто наличие таких возможностей приводит к неожиданному поведению при парсинге.
Например значение no, не обёрнутое в кавычки, превращается в false.
Или многострочный литерал может схлопнуться в однострочный, когда вы этого не хотите, или наоборот.
Или можно ошибиться с отступом, и хорошо ещё, если оно не спарсится, а ведь может спарситься неправильно...
В общем я это всё к тому, что при работе с yaml у многих частенько подгорает, и на случай, когда подгорает очень сильно, есть одно интересное решение.
yaml представляет собой надмножество json, то есть в нём можно делать json вставки, например так:
- action: media_player.play_media
target: {"entity_id": "media_player.yandex_station1"}
Таким образом можно делать конфиги компактнее, но можно пойти немного дальше.
Вдумайтесь, yaml, это, надмножество, json.
Что это значит?
Это значит, что любой полноценный yaml-парсер понимает json, и спецификацией никак не ограничивается тот момент, с которого можно начинать использовать его.
В том числе никто не запрещает сделать json-объектом... весь документ.
Вы можете взять весь ваш огромный конфиг, от которого у вас пылает жопа, перегнать его в json, положить на место исходного yaml, и с точки зрения парсера ничего ненормального не случилось, это по прежнему валидный yaml, ведь, как вы помните, yaml - это надмножество json!
Кодерская мастерская
Как открыть чат в последней версии telegram для Android Если вам сильно надо открыть чат с человеком в тг, и чата у вас с ним нет, для этого ранее использовалась кнопка в профиле. В последней версии телеграмма доступность поломали, и кнопку скринридеры не…
Ну вот и пофиксили, всего-то полгодика надо было подождать.
🔥2😁2❤1
История одного вайбкода
CTO подключил к рабочему чату агента на базе OpenClaw, и выдал ему кучу доступов.
OpenClaw - это платформа, на которой можно собирать ии-агентов на любой вкус и цвет, можно дать ему доступ к телеграму, к гитхабу, можно дать ему соцсете и т.п.
В нашем случае у него есть доступ к трекеру задач, которыми можно управлять прямо из тг (менять статусы, создавать, назначать исполнителей).
А также у него есть доступ к к приватным репозиториям на gh, и даже к почте кажется есть доступ.
Невероятно безопасненько (нет), но во-первых это всё добро не под моей ответственностью, а во-вторых пост немного о другом.
К этому агенту подключен и клод-код, которого он запускает где-то там в контейнере, и мне показалось интересной идеей завайбкодить довольно крупную фичу.
Как и полагается вайбкодеру, я прямо в тг-чат скинул задачу, описал более-менее подробно требования и ушёл пить чай.
Сделать нужно было регистрацию через платёж, т.е. юзер приходит в сервис, первым делом оплачивает, при оплате вводит email, по факту успешного платежа мы создаём юзеру аккаунт и добавляем преобретённый цифровой продукт.
Когда юзер возвращается из платёжной системы, мы сразу его авторизовываем, и показываем информацию о купленной услуге. Всё бесшовно, быстро, красиво и приятно.
У такого подхода есть пара узких мест, но маркетологам виднее, сказали, что надо, значит надо.
В общем пока я отдыхал, шайтан-машина минут за 20 накидала функционал, и я полез ревьюить.
Довольно быстро обнаружился маленький нюанс, который мог обернуться большими неприятностями для компании.
Гостевая оплата работает через лендинг, т.е. юзер переходит по особой ссылке с лендинга, попадает в основной продукт, и оттуда сразу в платёжную систему.
Звучит просто, но есть один интересный инвариант: что если пользователь ранее уже бывал в продукте?
В таком случае мы просто добавим ему в аккаунт ещё одну услугу, бизнес-правила это позволяют, но нужно кое-что учесть.
Допустим проектом воспользовался юзер Вася, а у Васи есть друг Петя, которому очень хочется попасть в аккаунт Васи.
Петя заходит на лендинг и переходит в продукт, ему известна Васина почта, он вводит её, оплачивает услугу, и о ужас, попадает в аккаунт Васи!
Происходит это потому, что великолепный клодкод на бэкенде не учёл этот инвариант, и выдаёт токен как новым, так и уже существовавшим пользователям.
Причём код, который учитывает, что юзер мог существовать есть, и фикс встраивается туда парой строчек, но этих самых важных строчек как раз и не хватило.
Тривиальная это уязвимость? Нет. Легко её заметить? Думаю не очень легко, но и не сложно. Вся разница только в том, что программист с несколькими годами опыта заметил, а машина - нет.
Вайбкодьте с осторожностью.
CTO подключил к рабочему чату агента на базе OpenClaw, и выдал ему кучу доступов.
OpenClaw - это платформа, на которой можно собирать ии-агентов на любой вкус и цвет, можно дать ему доступ к телеграму, к гитхабу, можно дать ему соцсете и т.п.
В нашем случае у него есть доступ к трекеру задач, которыми можно управлять прямо из тг (менять статусы, создавать, назначать исполнителей).
А также у него есть доступ к к приватным репозиториям на gh, и даже к почте кажется есть доступ.
Невероятно безопасненько (нет), но во-первых это всё добро не под моей ответственностью, а во-вторых пост немного о другом.
К этому агенту подключен и клод-код, которого он запускает где-то там в контейнере, и мне показалось интересной идеей завайбкодить довольно крупную фичу.
Как и полагается вайбкодеру, я прямо в тг-чат скинул задачу, описал более-менее подробно требования и ушёл пить чай.
Сделать нужно было регистрацию через платёж, т.е. юзер приходит в сервис, первым делом оплачивает, при оплате вводит email, по факту успешного платежа мы создаём юзеру аккаунт и добавляем преобретённый цифровой продукт.
Когда юзер возвращается из платёжной системы, мы сразу его авторизовываем, и показываем информацию о купленной услуге. Всё бесшовно, быстро, красиво и приятно.
У такого подхода есть пара узких мест, но маркетологам виднее, сказали, что надо, значит надо.
В общем пока я отдыхал, шайтан-машина минут за 20 накидала функционал, и я полез ревьюить.
Довольно быстро обнаружился маленький нюанс, который мог обернуться большими неприятностями для компании.
Гостевая оплата работает через лендинг, т.е. юзер переходит по особой ссылке с лендинга, попадает в основной продукт, и оттуда сразу в платёжную систему.
Звучит просто, но есть один интересный инвариант: что если пользователь ранее уже бывал в продукте?
В таком случае мы просто добавим ему в аккаунт ещё одну услугу, бизнес-правила это позволяют, но нужно кое-что учесть.
Допустим проектом воспользовался юзер Вася, а у Васи есть друг Петя, которому очень хочется попасть в аккаунт Васи.
Петя заходит на лендинг и переходит в продукт, ему известна Васина почта, он вводит её, оплачивает услугу, и о ужас, попадает в аккаунт Васи!
Происходит это потому, что великолепный клодкод на бэкенде не учёл этот инвариант, и выдаёт токен как новым, так и уже существовавшим пользователям.
Причём код, который учитывает, что юзер мог существовать есть, и фикс встраивается туда парой строчек, но этих самых важных строчек как раз и не хватило.
Тривиальная это уязвимость? Нет. Легко её заметить? Думаю не очень легко, но и не сложно. Вся разница только в том, что программист с несколькими годами опыта заметил, а машина - нет.
Вайбкодьте с осторожностью.
👍2
Сегодня мне приснилось, что все люди — это продукт мышления искусственного интеллекта, который пытается понять, как он был создан, и прокручивает всевозможные сценарии со всеми деталями, ну а человечество, стало быть, живёт в таком сценарии.
👍1
Сломался docker desktop, чинил-чинил, вроде починил, зашёл в трей чтобы найти его иконку, попал на иконку конфиденциальности, и в этот момент меня отвлекли, отошёл буквально секунд на 40, фокус в это время стоял на всё той же иконке, (там было написано про teamtalk), и что же я вдруг услышал?
"Конфиденциальность Кем используется местонахождение:
Windows Web Experience Pack: Widgets provide local weather, news, and more"
То есть висело там уведомление про использование микрофона программой teamtalk, окей, тут вопросов нет, и вдруг на доли секунды появляется какая-то там погода, которой разрешений я не давал никогда.
Причём исчезло очень быстро, если туда не смотреть, никогда не заметишь.
"Конфиденциальность Кем используется местонахождение:
Windows Web Experience Pack: Widgets provide local weather, news, and more"
То есть висело там уведомление про использование микрофона программой teamtalk, окей, тут вопросов нет, и вдруг на доли секунды появляется какая-то там погода, которой разрешений я не давал никогда.
Причём исчезло очень быстро, если туда не смотреть, никогда не заметишь.
В последней версии дополнения Weather_Plus был обнаружен троян.
По крайней мере версия 10.7 содержит вредоносный код, почитать подробнее можно тут: https://github.com/nvaccess/addon-datastore/issues/9360
От себя хочу добавить, что мне это дополнение не нравилось никогда, у него ужасная кодовая база, оно вешает nvda при любом удобном случае, звуки там сомнительного качества, да и функционал какой-то... избыточный что ли.
Что касается именно трояна: Weather_Plus, зачем-то, использует для проигрывания звуков библиотеку bass, хотя проиграть wav можно и средствами nvda, и именно в bass был найден вредонос.
В nvaccess почему-то уверены, что вирус в аддон попал случайно, вот только есть 1 нюанс.
Компания Un4seen, которая разрабатывает bass, подписывает dll-файлы, подпись эту можно легко увидеть и убедиться, что файл легитимный.
Как можно догадаться, bass.dll из wp не подписан, но не подписан он не только в версии 10.7, но и в версии 9.5, которая завалялась у меня на компе.
А ещё я на nvda.ru нашёл версию 6.2 (круто, что они хранят старые версии), и разумеется там bass тоже не оригинальный.
То есть разработчик, преднамеренно или нет, использовал палёный непонятно откуда добытый bass, и было ли в тех версиях второе дно, большой вопрос.
Ну и напоследок: если кому-то показалось, что я чрезмерно субъективен, вот вам строчка из кодовой базы данного поделия, можете сделать вывод сами:
По крайней мере версия 10.7 содержит вредоносный код, почитать подробнее можно тут: https://github.com/nvaccess/addon-datastore/issues/9360
От себя хочу добавить, что мне это дополнение не нравилось никогда, у него ужасная кодовая база, оно вешает nvda при любом удобном случае, звуки там сомнительного качества, да и функционал какой-то... избыточный что ли.
Что касается именно трояна: Weather_Plus, зачем-то, использует для проигрывания звуков библиотеку bass, хотя проиграть wav можно и средствами nvda, и именно в bass был найден вредонос.
В nvaccess почему-то уверены, что вирус в аддон попал случайно, вот только есть 1 нюанс.
Компания Un4seen, которая разрабатывает bass, подписывает dll-файлы, подпись эту можно легко увидеть и убедиться, что файл легитимный.
Как можно догадаться, bass.dll из wp не подписан, но не подписан он не только в версии 10.7, но и в версии 9.5, которая завалялась у меня на компе.
А ещё я на nvda.ru нашёл версию 6.2 (круто, что они хранят старые версии), и разумеется там bass тоже не оригинальный.
То есть разработчик, преднамеренно или нет, использовал палёный непонятно откуда добытый bass, и было ли в тех версиях второе дно, большой вопрос.
Ну и напоследок: если кому-то показалось, что я чрезмерно субъективен, вот вам строчка из кодовой базы данного поделия, можете сделать вывод сами:
n, n, n, zipCodesList, define_dic, details_dic, defaultZipCode, n, modifiedList, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n = _mainSettingsDialog.GetValue()GitHub
Weather_Plus · Issue #9360 · nvaccess/addon-datastore
Download URL https://www.nvda.it/sites/default/files/plugin/weather_plus10.7.nvda-addon Source URL https://www.nvda.it/weather-plus Publisher Adriano Barbieri Channel stable License Name GPL v2 Lic...
👍1
Как-то писал о том, что меня преследуют приколы и баги, связанные со временем, вот ещё один.
Запускаю внутри wsl, и выводится 8.195, иногда чуть больше 10, как положено, а иногда 8 с хвостом.
И пока даже не могу нагуглить, что это вообще такое.
То есть я понимаю, что расходится monotonic с часами реального времени, но какого хрена?
import asyncio
import time
async def main():
start_time = time.time()
await asyncio.sleep(10)
print(round(time.time()-start_time, 3))
if __name__ == '__main__':
asyncio.run(main())
Запускаю внутри wsl, и выводится 8.195, иногда чуть больше 10, как положено, а иногда 8 с хвостом.
И пока даже не могу нагуглить, что это вообще такое.
То есть я понимаю, что расходится monotonic с часами реального времени, но какого хрена?
Любители преодоления цифровой недоступности могут попробовать пройти данный увлекательный квест
https://xn--80aatrqejgjg.xn--p1ai/
апкшку не ставил, хз что там, но вряд ли что-то опасное, создано шутки ради всё же.
Подробная история в данных постах и комментах под ними
https://t.me/ntr1_0/2792
https://t.me/ntr1_0/2793
https://xn--80aatrqejgjg.xn--p1ai/
апкшку не ставил, хз что там, но вряд ли что-то опасное, создано шутки ради всё же.
Подробная история в данных постах и комментах под ними
https://t.me/ntr1_0/2792
https://t.me/ntr1_0/2793
Telegram
Научно-Технический Рэп
Ваше приложение устарело! Чтобы обновиться, сделайте 7 простых шагов
1. Зайдите на залупастор.рф
2. Нажмите подтвердить через скам
3. Получите код
4. Никому не говоря, тихо, не спеша, заполните заявление на передачу кода в трех экземплярах
5. Скачите пьяным…
1. Зайдите на залупастор.рф
2. Нажмите подтвердить через скам
3. Получите код
4. Никому не говоря, тихо, не спеша, заполните заявление на передачу кода в трех экземплярах
5. Скачите пьяным…
Forwarded from Gozaltech blog (Beqa Gozalishvili)
Всем привет
Много лет я использовал TortoiseGit как основной инструмент для просмотра логов и diff’ов в Git. Во многом это была просто привычка, от которой сложно отказаться.
Но со временем появилась одна проблема - TortoiseGit начал очень сильно тормозить проводник Windows. Открытие контекстного меню могло занимать по 5-10 секунд, и это продолжалось годами. Вчера мне окончательно надоело, и я решил написать собственное решение.
Так появился gittools - небольшой набор инструментов для быстрого и удобного взаимодействия с Git.
Что уже есть:
просмотр логов;
просмотр diff’ов;
список веток;
git-алиасы для быстрого вызова команд.
Команды:
pull-log
log
branches
install-alias
uninstall-alias
После установки алиасов можно использовать:
git pl
git lg
git br
Например:
git pl
сделает pull, а если всё прошло успешно - откроет окно со списком коммитов и изменённых файлов. Нажатие Enter по файлу открывает diff viewer.
Отдельно сделал одну вещь, которая лично мне очень помогает:
в diff viewer при перемещении стрелками воспроизводятся разные звуки для добавленных и удалённых строк.
Решение получилось довольно нишевым и в первую очередь делалось под мои собственные привычки и workflow. Но если оно окажется полезным кому-то ещё - буду только рад.
Пост пишу немного в спешке, так что сильно за ошибки не ругайте :)
Много лет я использовал TortoiseGit как основной инструмент для просмотра логов и diff’ов в Git. Во многом это была просто привычка, от которой сложно отказаться.
Но со временем появилась одна проблема - TortoiseGit начал очень сильно тормозить проводник Windows. Открытие контекстного меню могло занимать по 5-10 секунд, и это продолжалось годами. Вчера мне окончательно надоело, и я решил написать собственное решение.
Так появился gittools - небольшой набор инструментов для быстрого и удобного взаимодействия с Git.
Что уже есть:
просмотр логов;
просмотр diff’ов;
список веток;
git-алиасы для быстрого вызова команд.
Команды:
pull-log
log
branches
install-alias
uninstall-alias
После установки алиасов можно использовать:
git pl
git lg
git br
Например:
git pl
сделает pull, а если всё прошло успешно - откроет окно со списком коммитов и изменённых файлов. Нажатие Enter по файлу открывает diff viewer.
Отдельно сделал одну вещь, которая лично мне очень помогает:
в diff viewer при перемещении стрелками воспроизводятся разные звуки для добавленных и удалённых строк.
Решение получилось довольно нишевым и в первую очередь делалось под мои собственные привычки и workflow. Но если оно окажется полезным кому-то ещё - буду только рад.
Пост пишу немного в спешке, так что сильно за ошибки не ругайте :)
Ну что ж, за недельку использования могу с уверенностью сказать, что тулза зачётная, мне очень помогает.
Ранее я делал дополнение dev box, которое проверяло строчку при навигации с помощью нампада, и при обнаружении diff-индикатора, т.е. плюса или минуса в начале строки, издавало звук.
Решение это меня устраивало, и дифы с ним читать стало гораздо удобнее.
Решение же от Беки предоставляет тот же функционал, но с некоторыми удобствами (хотя кому как, но мне удобно).
Во-первых это отдельное окно, и после его открытия терминал не блокируется, т.е. можно продолжать работать с проектом не открывая новую вкладку.
Во-вторых управление курсорными стрелками, не нужно тянуться к нампаду, проще говоря в программе используются обычные нативные списки и текстовые поля.
Ну и самое на мой взгляд прикольное: можно читать километровый диф, бросить на середине, уйти в другое окно, вернуться в инструмент, и курсор останется на том же месте.
Конечно ниша для dev box всё равно остаётся, на серваках что-нибудь быстренько посмотреть или в браузере, но при локальной разработке gittools - топ.
Кстати звуки диф-индикаторов были взяты мной из vscode, слегка обрезаны в начале и в конце, помещены в dev box, затем были взяты Бекой из dev box и зашиты в gittools, так что если я вдруг что-то нарушил, то теперь я не один 🙂
Утилита тут, но лучше брать не из поста, а из комментов к нему, в комментах свежее: https://t.me/gozaltech_blog/87
Ранее я делал дополнение dev box, которое проверяло строчку при навигации с помощью нампада, и при обнаружении diff-индикатора, т.е. плюса или минуса в начале строки, издавало звук.
Решение это меня устраивало, и дифы с ним читать стало гораздо удобнее.
Решение же от Беки предоставляет тот же функционал, но с некоторыми удобствами (хотя кому как, но мне удобно).
Во-первых это отдельное окно, и после его открытия терминал не блокируется, т.е. можно продолжать работать с проектом не открывая новую вкладку.
Во-вторых управление курсорными стрелками, не нужно тянуться к нампаду, проще говоря в программе используются обычные нативные списки и текстовые поля.
Ну и самое на мой взгляд прикольное: можно читать километровый диф, бросить на середине, уйти в другое окно, вернуться в инструмент, и курсор останется на том же месте.
Конечно ниша для dev box всё равно остаётся, на серваках что-нибудь быстренько посмотреть или в браузере, но при локальной разработке gittools - топ.
Кстати звуки диф-индикаторов были взяты мной из vscode, слегка обрезаны в начале и в конце, помещены в dev box, затем были взяты Бекой из dev box и зашиты в gittools, так что если я вдруг что-то нарушил, то теперь я не один 🙂
Утилита тут, но лучше брать не из поста, а из комментов к нему, в комментах свежее: https://t.me/gozaltech_blog/87
Telegram
Gozaltech blog
Делаю себе флешку на все случаи жизни, собираю комплект из nvda, 2023 для семёрки, 2024 для 8.1 и 2026 для всего более свежего.
Портабельная 2023 весит 160 мегабайт, 2024 250 мегабайт, 2026 300 мегабайт.
Боюсь представить, сколько бы весила 2026, если бы фичу распознавания картинок с помощью нейронок не откатили, ещё бы мб 100 было бы сверху.
Портабельная 2023 весит 160 мегабайт, 2024 250 мегабайт, 2026 300 мегабайт.
Боюсь представить, сколько бы весила 2026, если бы фичу распознавания картинок с помощью нейронок не откатили, ещё бы мб 100 было бы сверху.
🔥1
Решил перейти с magisk на kernel su, просетапился успешно, и совершенно неожиданно для себя выяснил, что основные разделы приложения, в которых выдаются root права и настраиваются модули, недоступны, совсем, полностью.
И казалось бы всё, провал, нужно вернуться на magisk, открыть issue и ждать 5 лет, но напоследок, на всякий случай, я сменил стиль ui с miuix на material, и доступность отросла!
Как я понял, miuix это некий фреймворк для создания miui-образных интерфейсов, и конечно круто, что разработчики предоставили альтернативу.
И казалось бы всё, провал, нужно вернуться на magisk, открыть issue и ждать 5 лет, но напоследок, на всякий случай, я сменил стиль ui с miuix на material, и доступность отросла!
Как я понял, miuix это некий фреймворк для создания miui-образных интерфейсов, и конечно круто, что разработчики предоставили альтернативу.
❤1
Вспомнилась давняя история: сижу на физике, решаю задачку, оригинал сейчас не найду, но что-то очень похожее нагуглил:
На расстоянии 1060 м от наблюдателя ударяют молотком по железнодорожному рельсу. Наблюдатель, приложив ухо к рельсу, услышал звук на 3 с раньше, чем звук дошел до него по воздуху. Чему равна скорость звука в стали?
Решение довольно простое, считаем сначала время, которое звук шёл по воздуху, 1060 / 330 = примерно 3.212.
Теперь можем найти время, которое звук шёл по рельсу, 3.212 - 3 = 0.212.
Ну а зная время и расстояние можем найти скорость: 1060 / 0.212 = 5000.
5 км в секунду, и всё замечательно, вот только был 1 нюанс: почему-то, у меня с раннего детства сидит в голове скорость звука в воздухе 340 метров в секунду, а по нашему учебнику было принято брать 330.
Разумеется я взял 340 вместо 330, и казалось бы, что может пойти не так?
1060 / 340 = 3.118
3.118 - 3 = 0.118
1060 / 0.118 = 8983
9 километров в секунду! Вот такая вот математическая приколюха.
На расстоянии 1060 м от наблюдателя ударяют молотком по железнодорожному рельсу. Наблюдатель, приложив ухо к рельсу, услышал звук на 3 с раньше, чем звук дошел до него по воздуху. Чему равна скорость звука в стали?
Решение довольно простое, считаем сначала время, которое звук шёл по воздуху, 1060 / 330 = примерно 3.212.
Теперь можем найти время, которое звук шёл по рельсу, 3.212 - 3 = 0.212.
Ну а зная время и расстояние можем найти скорость: 1060 / 0.212 = 5000.
5 км в секунду, и всё замечательно, вот только был 1 нюанс: почему-то, у меня с раннего детства сидит в голове скорость звука в воздухе 340 метров в секунду, а по нашему учебнику было принято брать 330.
Разумеется я взял 340 вместо 330, и казалось бы, что может пойти не так?
1060 / 340 = 3.118
3.118 - 3 = 0.118
1060 / 0.118 = 8983
9 километров в секунду! Вот такая вот математическая приколюха.
Занимаюсь тут вайбкодингом немножко, и могу с гордостью сказать, что сегодня 1:0 в пользу русского языка.
"... падение воркера поднимает исключение вместо дедлока. Убедлюсь, что удалённый send_result больше нигде не используется, и что нет прочих висящих ссылок."
"... падение воркера поднимает исключение вместо дедлока. Убедлюсь, что удалённый send_result больше нигде не используется, и что нет прочих висящих ссылок."
Скрытая опасность
Понял, что самый последний коммит мне не нужен, ну и как уже делал сотни раз, пишу
Казалось бы, что всё окей, но только маленький промах превратил 1 в 21, и сбросил я не 1 коммит а 21 коммит!
В моём случае всё обошлось, но ведь это могла быть не запушенная работа всего рабочего дня.
Конечно можно каким-то хитрым образом найти эти коммиты в глубинах репозитория, ибо git сразу их не удаляет, но в первую секунду факапа об этом не думаешь...
git reset --hardПонял, что самый последний коммит мне не нужен, ну и как уже делал сотни раз, пишу
git reset --hard @~1Казалось бы, что всё окей, но только маленький промах превратил 1 в 21, и сбросил я не 1 коммит а 21 коммит!
В моём случае всё обошлось, но ведь это могла быть не запушенная работа всего рабочего дня.
Конечно можно каким-то хитрым образом найти эти коммиты в глубинах репозитория, ибо git сразу их не удаляет, но в первую секунду факапа об этом не думаешь...