Приняли коммит в bc

Как-то быстро и неожиданно мой коммит, ускоряющий функцию band(), приняли в репозиторий bc. Что ещё круто, основываясь на той же идее, автор ускорил функции bnotn(), bor() и bxor(). Я тоже думал ими заняться, если мой коммит примут, а он уже сам всё сделал. Отлично!

Комментарий пользователя gavinhoward: он принимает изменения, но планирует настроить стиль — файл lib2 будет встраиваться как строка, чтобы убрать лишние символы.

2 комментария

Загадочный звук

Думаю, ни за что не догадаетесь. Что производит этот загадочный звук у нас в квартире? Звук не разовый, тихий, раздаётся в квартире в одном и том же месте. Завтра напишу правильный ответ.

Добавлено: правильный ответ такой: эти звуки издают ахатины, домашние питомцы нашей дочери. Не знаю чем конкретно они это делают, возможно это звук трения панциря о стенки террариума.

Рука держит крупного ахатинового улитка с тёмно-коричневой раковиной в полоску; на фоне — окно и комнатные растения.

14 комментариев

Дневной гедонизм

Вчера впервые, кажется, в жизни, «уснул под телик». Не совсем под телик — поставил на ноуте двухчасовую лекцию Алексея Семихатова, доктора физико-математических наук и так сладко под неё заснул… После этого ходил живчиком до самой ночи. Дневной сон — пять из пяти, рекомендую.

Много слышал о благодатном воздействии дневного сна на организм, у нас на работе молодёжь повально кемарит в комнате отдыха, но считал, что во мне эта способность генетикой не обеспечена, — не могу уснуть днём, хоть убей. А тут уснул на интересной, в общем-то, для меня теме — физике. Видимо у Алексея такой убаюкивающий голос.

Дочка, кстати, тоже с ностальгией вспоминает садик — не ценила, говорит, что можно было спать днём, а сейчас очень этого не хватает.

Попробую в следующие выходные ещё его послушать, надеюсь толерантность к его голосу не разовьётся. Хочется такого же заряда бодрости каждые выходные.

2 комментария

Препараты для микроскопа

Микроскопический срез листа растения с видимыми клетками, окрашенными в синий и фиолетовый цвета, отображённый на экране цифрового микроскопа «Сяоли» на фоне розовых цветов.

Нам с дочкой очень нравится смотреть на всякие штуки через микроскоп. Мы пробовали рассматривать как всякую найденную мелочь, так и готовые препараты, которые шли в комплекте. Последние, конечно, сильно интереснее. На фотографии как раз один из них.

Когда я учился в школе, мы готовили препараты сами. Смутно помню, что там надо было делать срез, потом чем-то капать на предметное стекло, накрывать какой-то мелкой стекляшкой сверху и смотреть. Но с той поры утекло много воды и сейчас я препараты, конечно же, самостоятельно делать не умею. Поэтому решил прикупить что-нибудь новенькое-готовенькое — на одно и тоже смотреть-то уже надоело.

Купил первое попавшееся, дёшево и много. Тему не изучил, каюсь. Ну хоть стоило копейки.

Пришёл какой-то мусор, собранный, очевидно, с пола подвала, где эту фигню делают безвестные китайцы. Кроме того, на стекле китайцы сэкономили, использовав вместо этого какой-то мутноватый пластик.

Вывод: экономить не надо, а надо вдумчиво читать отзывы, выбирая только то, что сделано на стекле.

22 комментария

«Офис» под «Мак»

Ну почему микрософтский «Офис» на «Маке» всегда ведёт себя, как слон в посудной лавке? Ситуация с годами, конечно, меняется к лучшему, но по-прежнему есть где поплеваться. Из плюсов — свежайшая 16-я версия хотя бы стала смотреться естественно, а не так, будто я её запускаю через виртуалку с Виндоуз.

Окно Microsoft AutoUpdate с надписью «Инициализация. Подождите.», кнопкой «Проверить наличие обновлений» и чекбоксом «Автоматически обновлять приложения Майкрософт».

Жирный минус в том, что она всё время запускает какой-то автообновлятор неотключаемый (при попытке его принудительно убрать из автостарта, всё ломается), который постоянно выпрыгивает мне на передний план во время работы. Добро бы он обновил мне «Офис» и пропал, но он этого сделать не может — всё время выдаёт какие-то невнятные ошибки, в какой стране я бы не находился.

4 комментария

Собрались в отпуск

Я как-то не особо умею равномерно распределять отпуска, поддерживая уровень утомления на приемлемом уровне. У меня это всегда что-то стремительное, почти моментальное, когда я вдруг понимаю, что безмерно устал и уже целую вечность не был в отпуске.

Вот и в этот раз так, я вдруг со всей отчётливостью понял, что со времени последнего отпуска прошло уже девять месяцев, и засобирался. Одним днём выбрал направление, потом быстро обсудили с женой отели, оплатили, доплатили за ранний заезд и поменяли деньги. Осталось дождаться отлёта.

С этого момент жизнь как-то понеслась вскачь. Дочка утверждает, что время для неё, напротив, как будто замедлилось, но у меня с этими хлопотами это не так. Оказалось, что у меня для отдыха нет целой кучи необходимых предметов. Поэтому я всё время что-то выбираю и заказываю — у меня растущий организм и из всех имеющихся предметов я уже немного вырос.

Сам виноват, конечно, в новогодние праздники расслабился, забил на спорт и до недавнего времени не занимался. Теперь потихоньку возвращаюсь назад, но — потихоньку. В отпуске буду заниматься интенсивнее. Где много отдыха, там и нагрузку себе можно позволить побольше.

6 комментариев

Суббота

Неделя эта была какой-то очень напряжённой. Много встреч, много говорильни, столько событий, что несколько раз встречи приходилось ставить на обед. Внутри всех этих событий время как будто невероятно долго тянулось, а когда всё кончилось, случилось это как-то неожиданно.

Проснулся сегодня в семь от того, что пришёл какой-то пуш. На экране смартфона краем глаза заметил время, подумал, что проспал — в будни-то я встаю в 6³⁰. Лихорадочно соображая, пытаюсь понять как это случилось и как теперь моментально собрать дочку на школьный автобус, в то же время покормив, но, к счастью, замечаю на том же экране ещё и день недели.

Ложиться обратно не стал, пошёл жену поздравлять с праздником, она давно уже встала.

Оставить комментарий

«Война и миръ»

Кому лень читать: Толстой в названии романа использовал два антонима: «война» и «мир». Под «миром» не имелась ввиду «вселенная»

Время от времени читаю где-нибудь, что Лёв Толстой, когда писал книгу «Война и мир», имел ввиду не «мир», который антоним «войны», а «мир», который синоним «вселенной». Вроде этот нюанс потерялся после реформы русского языка, которая сравняла буквы «і» и «и» — два разных значения писались с разными буквами.

Я, если ничего не путаю, когда-то разобрался в этом вопросе, но недавно понял, что не помню к каким выводам тогда пришёл. У меня в памяти осталась пометка «всё не так просто» без самого понимания что там «не так». Поэтому решил разобраться ещё раз и на этот раз записать свои мысли во внешнюю память — на сайт.

Для начала надо найти дореволюционное издание «Войны и мира», чтобы посмотреть как там было написано. Я нашёл первое издание. Отсутствие кратки у «й», видимо, какая-то ошибка — во втором томе и дальше она есть.

Название романа Льва Толстого «Война и миръ» шрифтом с засечками на светлом фоне.
Л. Н. Толстой, «Война и миръ», Типографія Т. Рисъ, Москва, 1868

Как видим, тут «миръ», через «и». Означает ли это слово «вселенная»?

Давайте посмотрим на это слово в контексте. 19 февраля 1878 года между Российской и Османской империями был заключён мирный договор, завершивший русско-турецкую войну 1877—1878 годов. Правительств выпустило по этому поводу извещение, где слово «мир», как противоположность войне, написано через «и».

Заголовок: «Полный текст прелиминарнаго мирнаго договора между Россіей и Турціей, подписаннаго въ Санъ-Стефано 19 февраля (3 марта) 1878 года.» Слово «мирнаго» выделено жёлтым.
«Миръ 19 Февраля 1878 года. Правительственное извѣщеніе», Типографія И. И. Родзевича, Москва, 1878

То есть Толстой в названии своего романа слово «вселенная» ввиду не имел. Откуда же у разбираемого заблуждения ноги растут? Вероятно смуту внесла поэма Владимира Маяковского «Война и міръ», где слово «мир» как раз было написано через десятичную «и» и означало «вселенная».

Название романа Льва Толстого «Война и миръ» на старой бумаге.
В. Маяковскій, «Война и міръ», издательство «Парусъ», Петроград, 1917

А было ли вообще слово «міръ» из-за которого весь сыр-бор? Маяковский был горазд выдумывать слова, может и это слово он придумал?

Я нашёл несколько примеров употребления слова «міръ», как во времена Маяковского, так и задолго для него, но в качестве характерного примера выбрал переводной роман Герберта Уэллса «Освобожденный міръ». Тут слово «міръ» явно использовано в значении «вселенная». Если бы это было не так, вместо слова «міровой» использовалось бы «мирный».

Отрывок из текста о книге «Освобожденный мир», написанной в 1913 г., с выделением слов «мировой» и «мир»; упоминается публикация в журналах «English Review» и «Завѣты».
Г. Уэллсъ, «Освобожденный міръ. Повесть о человѣчествѣ», Универсальная библіотека, Москва, 1919

6 комментариев

Обфускация кода

Есть такой метод защиты кода от исправлений и анализа — обфускация. Это когда мы удаляем из кода форматирование, комментарии и все осмысленные названия исправляем на бессмысленные. Обфускацию используют не только для этого, но для нашего разговора это несущественно.

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

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

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

Скриншот diff-изменений в файле doom.bc: удалены переменные i, cz, tx и др., добавлены flash_type, dir_x, sprite_height и другие для функции tick().
Деобфускация портированного кода, которую мне помог сделать «Госпромпт», ниже в коде эти переменные тоже переименованы

Пару слов о том, какая защита могла бы сработать против чтения кода нейросетями. Надо поступать ровно обратным образом — давать сущностям максимально подробные, но неправильные имена и комментарии. Мои эксперименты показывают, что такой метод пока имеет право на существование. Нейросети очень сильно ориентируются на смысл в названиях и промтами такое поведение крайне сложно купировать.

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

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

11 комментариев

Что ты видишь, когда закрываешь глаза?

Если я не могу заснуть, то я не считаю барашков, у меня другой сюжет.

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

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

Не помню как и почему, но несколько лет назад лабиринт и корабль уступили место бездонной огромной яме, в которую я падаю, при этом падаю довольно медленно и без ускорения.

Пролетая мимо меня, в яму так же падают всякие полезные штуки, самые полезные из которых — арбалеты, при помощи которых можно было выстрелить в уходящие вверх стены болтами с привязанными к ним верёвками. Поймав несколько таких в самом начале сна, я сплетаю верёвки между собой, перестаю падать и начинаю обустраивать быт, вплетая падающие предметы в свою верёвочную паутину.

Один раз я не мог заснуть настолько долго, что построил целый дом. Правда он качался и надёжным не выглядел, но во сне я был рад. Но, как правило, я засыпаю быстрее.

Кстати, даже сейчас, когда я всё это описываю, начинаю хотеть спать.

А вы используете что-то такое, чтобы уснуть?

6 комментариев

DeepSeek R1 на A100

Как я уже писал, мы попробовали позапускать «Дипсик Эр1» на разных конфигурациях графических ускорителей NVIDIA A100. Запускали не полную модель, а квантизованную. Неясно насколько она глупее на наших задачах, бегло попробовали разные тесты, как будто бы от квантизации она пострадала несильно.

Я собирался написать об этом ещё раз, когда мы разберёмся с подходящей конфигурацией, но как-то позабыл.

Скриншот вывода nvidia-smi: 4 GPU NVIDIA A100 80GB PCIe, драйвер 570.86.15, CUDA 12.8; процессы ollama используют ~72–76 ГБ видеопамяти на каждом GPU.

Выводы следующие.

Для того, чтобы модель поместилась в видеопамять, суммарно нужно около 150 гигабайт. То есть две Nvidia A100 по 80 ГБ подходят. Эта конфигурация позволяет работать одному пользователю в один момент времени. Остальные будут ждать, когда ресурс освободится. Соответственно, конфигурация, которая у меня на скриншоте, может отвечать одновременно двум пользователям.

При этом оперативная память почти не используется. Её можно выделять очень мало.

Если модель в видеопамять не умещается, она может загружаться в оперативную память, но при этом скорость её работы сильно падает, не советую.

Ядер центрального процессора при этом много не надо. Иногда по непонятной причине они нагружаются, но не сильно. Около пары десятков ядер хватает за глаза, можно было уменьшать, но мы этот параметр не крутили.

Покупать при этом, конечно же, надо не A100, а H100, у них сейчас самое выгодное соотношение цена/вычислительная мощность. Ждать их дольше, но оно того стоит.

6 комментариев

Лидар и «Тесла»

Компания «Тесла» очень упорствует в своём нежелании использовать лидар в автомобилях для нужд автопилота. Их аргументы — это дорого, уродливо и не нужно — достаточно видеокамер.

Я совершенно не специалист, но знаю, благодаря своему копательскому хобби, что лидары, например, используют для сканирования земной поверхности, чтобы находить скрытые в лесах строения. На мой взгляд, это значит, что лидары могут быть полезны, например, в тумане — то есть там, где препятствие в видимом диапазоне чем-то скрыто.

Так я рассуждал, но думал, что, возможно, в моих размышлениях где-то есть изъян, который видят специалисты из «Теслы».

Вчера в новом ролике глубокообожаемого в кругу нашей семьи инженера Марка Робера, появилось тестирование автомобиля с лидаром и «Теслы» в различных сложных условиях — тумане, под шквальным дождём и даже с реалистично нарисованным на огромном плакате продолжением дороги.

Сравнение LiDAR и Tesla: LiDAR успешно распознаёт все 6 сцен (пешеход, скейтбордист, туман, дождь, фары, дорожный знак), Tesla — только 3 (пешеход, скейтбордист, фары).

Я всё не описываю, ролик имеет смысл посмотреть целиком, выделил лишь те условия, где камеры «Теслы» оказались бесполезными. Лидар, кстати, справился на «отлично» во всех случаях.

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

Резюме: лидар, наверное, действительно дорогая штука и вписать в дизайн его сложно, но всё-таки он даёт автомобилю суперспособность — видеть препятствия в сложных случаях.

4 комментария

Родной двор

Смотрели с дочкой с утра ролик про то, как какой-то чел полностью нарисовал в «Анриле» свой собственный двор. Увлекательно выглядит. Видно, что сделано с большой любовью, он даже звуки подобрал и добавил в сцену. На всё у него ушло двадцать дней с нуля — опыта у него во всех инструментах до этого проекта не было.

Мужчина в фиолетовой толстовке и синих джинсах стоит спиной к камере на асфальтированной дорожке, глядя на гаражи с номерами 3 и 5.

Я, конечно, сразу стал примерять что бы я такое мог сделать, тем более и дочка рядом говорит — давай, папа, попробуем. Я трезво оцениваю своё свободное время, поэтому даже и пробовать не буду, но фантазия заработала на полную.

А если было бы время, что можно было бы сделать?

Выбор тут невелик — либо родительский двор, где я жил с начальной школы до окончания техникума, либо бабушкин дом. Вторая бабушка жила в квартире и во дворе я там почти не бывал, так что воспоминаний о нём мало.

Проще всего, конечно, было бы повторить бабушкин дом — по сравнению со двором площадь там невелика, да и растительности побольше, а её «сажать» проще всего. Референсных снимков тоже должно быть навалом, а то, чего нет на снимках, можно восстановить по памяти — мы с братишкой пропадали там почти каждый день летом.

Схема участка на клетчатой бумаге: извилистая линия (возможно, дорога или граница), обозначения «с-высота», «1 пикет - 1 м», «с1,2», «с1,5», точки и крестики, рукописные пометки.

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

Обозначено там мало — тропинка от внутреннего дворика дома до бани с моим самодельным «домиком» за ней, кусты малины и смородины и деревья — ближе к дому вишня и калина, по остальной площади — яблони и тёрн, а около бани росла огромная черёмуха. Всё остальное пространство занимали грядки — огурцы, помидоры, патиссоны, лук, клубника, щавель, наверное что-то ещё. Два прямоугольника около бани и на противоположном конце карты — сваренные металлические ёмкости. В них запасалась вода для полива.

В общем, понесла меня моя фантазия. Было бы больше времени или умей с пользоваться этими инструментами, наверняка бы занялся.

2 комментария

Бубарочка

Недавно разговаривал с мамой по телефону — вспоминали её бабушку, мою прабабушку Евдокию Никаноровну. Мы, конечно, никогда не обращались к ней по имени-отчеству: насколько я помню, она всегда была для нас просто «бабушкой старенькой» — маленькой, совсем седой старушкой. Она ушла из жизни в 1999 году, прожив 96 лет. Я её довольно хорошо помню, но у мамы, разумеется, сохранилось куда больше воспоминаний.

В разговоре маме вспомнилось, что прабабушка отличалась особой аккуратностью — всегда одевалась строго и опрятно, часто сама шила себе одежду. «Бывало, утром сошьёт новый передничек, а к обеду уже щеголяет в нём по двору! Говорила: „Посмотри какая я бубарочка!“».

Слово «бубарочка» я даже сначала не расслышал, попросил маму мне написать. Позже оказалось, что «бубарочка» — это диалектное «бабочка». В интернете написано, что оно ещё в ходу, например, в Ярославле.

Не помню, чтобы когда-либо раньше слышал это слово. Интересно, откуда оно в лексиконе прабабушки? Как будто для Самарской губернии, где она родилась, оно не характерно. В 19-м веке её предков перевезли из-под Курска, может это слово приехало оттуда?

Чёрно-белая фотография большой семьи: мужчины, женщины и дети разных возрастов позируют на улице у забора и кустов, некоторые сидят, другие стоят.
Евдокия Никаноровна в окружении родственников, в белом платочке. Интересная фотка — поют они что ли?

9 комментариев

Сжатие и картинки

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

Поступают иначе — в браузер и сервер вносят реализацию сжатия и распаковки и те же самые текстовые данные начинают передаваться чуточку быстрее.

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

Например, в PNG это DEFLATE, в GIF — LZW.

В принципе, никто не мешает наложить встроенный в браузер алгоритм сжатия на формат графики, — протокол передачи это позволяет. Я уже экспериментировал подобным образом с форматом GIF, так как оказалось, что этот формат позволяет выключить встроенное сжатие. То есть я как бы выкидывал используемый в GIF древний LZW и заменял его на более современный DEFLATE, реализованный в браузере.

Скриншот списка файлов: picture.avif.br, .zst, .avif, .webp, .gif.br, .png. Все по 1 КБ. Типы: Документ, AV1, WebP, PNG.

Тогда этот эксперимент ничего не дал, но недавно я его повторил. Только вместо DEFLATE использовал brotli, ещё более свежий алгоритм. GIF, в этом случае, стал меньше PNG. Это, кстати, не всегда так происходит, но в этом случае повезло. Я попробовал ещё и zstd, он ещё новее, но он жмёт хуже brotli, его достоинство в скорости.

Любопытно ещё, что когда я сжал через brotli картинку, сконвертированную в формат AVIF, она стала ещё меньше. Я такого не ожидал, мне казалось, что современные бинарные форматы делаются максимально экономно.

В общем, схема со сжатием графики в браузере, как будто бы, имеет право на существование.

Атрибут LANGUAGE

Просматривал тут публичные репозитории некого соискателя одной из наших вакансий, обратил внимание, что у него там, помимо всего прочего, лежат решённые задания со «Стэпика». Заглянул из любопытства, никаких особенных выводов не сделал, но удивился, что в тегах одного задания у него script содержит атрибут language. Это что же, его до сих пор учат писать?

Мне стало любопытно — он вообще сейчас какое-то значение имеет? Браузеры на него ориентируются? Когда-то он вполне имел смысл — у «Эксплорера», например, там мог стоять VBScript или, например, JScript.Encode — зашифрованный текст программы на ДжейСкрипте, это такой диалект ДжаваСкрипта от Микрософта.

Проверил. В документации он считается устаревшим, но если подставить туда неизвестное браузеру значение, скрипт не выполняется. В принципе, это логично. В интернете вполне могут встречаться ещё и древние сайты, использующие другие языки, зачем выполнять то, что браузер выполнить не может?

А что же считается верным значением для ДжаваСкрипта? В угадайку играть не хотелось, скачал исходники «Хромиума», посмотрел что там используется. Как оказалось, подставить можно следующие значения (регистр значения не имеет):

  • javascript или x-javascript — это понятно, единственный сюрприз, что можно поставить «экс» перед словом;
  • ecmascript или x-ecmascript — тоже понятно, ДжаваСкрипт — расширение этого языка;
  • jscript — диалект языка в «Эксплорере», считается, что другие браузеры сейчас его тоже «знают», хотя на деле есть нюансы, но всем уже всё равно;
  • от javascript1.0 до javascript1.5 — когда-то указанием версии можно было разделять скрипты по уровню поддержки языка в браузере;
  • livescript — старое название языка «ДжаваСкрипта», я ещё помню времена, когда это значение использовалось, хотя и редко.

Сейчас, конечно, это скорее археология, чем какое-то нужное знание.

Дочка у подруги

Скриншот переписки: Евгений спрашивает «Как у тебя дела, дочка?», Ева отправляет голосовое сообщение, Евгений уточняет: «Это ты «отлично» сказала?) рано отпустила палец».

Дочка сегодня впервые в жизни осталась у школьной подруги с ночёвкой. Две недели недели до этого она болела, в школу не ходила, видимо очень соскучилась. Созванивались с друг другом каждый вечер, болтали по часу и более и как-то пришла им в голову идея, чтобы Ева приехала в гости ночевать.

Видимо они там плотно заняты — дочь нашла время только записать мне скомканное, но полное радости «отлично». Позже мы с женой позвонили, у неё всё хорошо, играют, разговор был не особо долгий — видно было, что не терпится вернуться к играм.

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

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

Физика и «Энканто»

Смотрели сегодня вечером с дочкой мультфильм «Энканто». Там есть момент, где главная героиня с трудом поднимается по очень и очень длинной лестнице. В конце она идёт еле-еле, но всё же добирается до верха, пересекает опасную пропасть, а в потом случайно роняет вниз камень. Примерно на этом моменте дочка спросила меня — насколько, по моему мнению, длинную лестницу пришлось преодолевать героине.

Девочка в ярком платье стоит на краю обрыва, глядя вниз, рядом с ней — попугай и верёвка, закреплённая в скале.

Я подумал, — тут камень падает со звуком, высоту же можно просто вычислить! Пришлось, правда, вспоминать физику.

У нас есть формула свободного падения: h = ¹⁄₂ × g × t². Время за которое звук дошёл от точки падения до нас — h / v, где v = 343 м/с. Время мы с дочкой замерили секундомером — 7,43 секунды.

Получается, 7,43 = t + h / v. Подставляем одну формулу в другую: t + (¹⁄₂ × g × t²) / v = 7,43. Упрощаем: t + gt² / 2v = 7,43. Подставляем: g ≈ 9,8 м/с² и v = 343 м/c. Получается: t + 9,8t² / (2 × 343) = 7,43. Единицы измерения я использовать не буду, мне лень.

Отсюда получается следующее квадратное уравнение: 0,01428571429×t² + t − 7,43 = 0. Его решение даёт нам два значения: -76,77439 и 6,77439. Отрицательное значение отбрасываем, оставляем только положительное.

Это время за которое упал камень с поправкой на скорость звука, которому надо было ещё до нас долететь. Теперь находим высоту по формуле h = ¹⁄₂ × gt². Если подставить все цифры, h ≈ ¹⁄₂ × 9,8 × (6,77439)², получается примерно 225 метров.

Если принять высоту этажа около трёх метров, то это высота 75-этажного дома. Судя по информации в интернете, количество ступенек между этажами обычно около 11, значит это около 825 ступеней 1650 ступеней, так как пролёта между этажами — два.

Много пришлось подниматься.

8 комментариев

Поправил ошибку в bc

Вчера часа проснулся около часа ночи, сна ни в одном глазу. Ворочался-ворочался, думаю надо бы заняться чем-нибудь, мозг утомить. Решил почитать исходный код bc. Он остался у меня с того раза, когда я коммитил туда своё предложение по ускорению функции band().

Бродил по коду туда-сюда, читал случайные куски, пока не дошёл до кусочка, проверяющего дублирующиеся параметры у функции. Вот это место:

for (i = 0; i < f->autos.len; ++i)
{
	// Get the auto.
	BcAuto* aptr = bc_vec_item(&f->autos, i);

	// If they match, barf.
	if (BC_ERR(idx == aptr->idx && type == aptr->type))
	{
		const char* array = type == BC_TYPE_ARRAY ? "[]" : "";

		bc_error(BC_ERR_PARSE_DUP_LOCAL, line, name, array);
	}
}

Посмотрел что тут происходит и заметил, что в перечислении, описывающем виды параметров, вообще-то три значения — скаляр, массив и массив, передающийся по ссылке. При этом код выше написан так, как будто их только два. Небольшой тест показал, что так и есть. Следующий код должен порождать ошибку, между тем, он выполняется как ни в чём не бывало:

define a(*t[], t[]) {}

Подумал, что уже достаточно утомился, чтобы лечь спать, но не тут-то было! Стоило закрыть глаза, как мозг начал продумывать как поизящнее исправить этот баг. Пришлось снова открыть ноутбук и править.

Уже утром я прочитал сообщение по моему коммиту — автор bc попросил отформатировать код и написать небольшой тест. Я всё исправил и теперь ещё немного моего кода есть в этой прекрасной утилите!

6 комментариев

Странности bc

Чем больше узнаёшь bc, тем больше в нём находишь странностей. Особенно меня поражают массивы.

Например, как вы думаете, чему равна длина массива, в который мы ещё ни разу не инициализировали? Правильно, единице. Почему? Да чёрт его знает, так в коде написано:

void
bc_array_init(BcVec* a, bool nums)
{
    BC_SIG_ASSERT_LOCKED;

    // Set the proper vector.
    if (nums) bc_vec_init(a, sizeof(BcNum), BC_DTOR_NUM);
    else bc_vec_init(a, sizeof(BcVec), BC_DTOR_VEC);

    // We always want at least one item in the array.
    bc_array_expand(a, 1);
}

Или вот такой код:

define void f(*a[]) {
    . = a[99]
}

f(b[]); length(b[])

Чему будет равна длина массива b[]?

Правильный ответ — она будет равна ста. Потому что в функции, куда мы передали этот массив по ссылке, происходит чтение из 99-го (массивы начинаются с нуля) элемента. В коде bc ясно сказано:

// The bc spec says that if an element is accessed that does not
// exist, it should be preinitialized to 0. Well, if we access
// an element *way* out there, we have to preinitialize all
// elements between the current last element and the actual
// accessed element.
if (v->len <= idx)
{
    BC_SIG_LOCK;
    bc_array_expand(v, bc_vm_growSize(idx, 1));
    BC_SIG_UNLOCK;
}

Как только идёт обращение к несуществующему элементу массива, неважно, для чтения или записи, он получается значение «ноль».

В этих случаях я даже уже и не понимаю — баги это или нет. Вроде нет, но выглядит контринтуитивно.

12 комментариев

Давай, до свидания!

Да это уже невозможно, я прямо-таки чувствую, как чёртовы развлекательные ресурсы выжигают мою творческую энергию! Мне нужен какой-то «взрослый режим», по аналогии с детским, где развлекательные сайты можно было бы посещать за день только ограниченное время.

Стоит задуматься, как руки сами набирают адрес «Пикабу»! Если вы думаете, что это какое-то иносказание, что я шучу или преувеличиваю, ничего подобного! Я это говорю буквально. Сегодня добавил себе в hosts на ноуте строку, которая не даёт ресолвить адрес «Пикабу», чтобы это прекратить:

sudo tee -a /etc/hosts <<<"::1 pikabu.ru"

19 комментариев

RedBoot

У меня сегодня был очень длинный и довольно тяжёлый перелёт — летели около девяти часов в отпуск в Китай. Вылетели нашим вечером, прилетели их утром. Я не сплю в самолётах из-за старой травмы спины, полученной когда-то на спортивной гимнастике, поэтому пока пребываю в состоянии грогги, настолько устал.

В салоне самолёта, которым мы летели, в подголовники кресел встроена система развлечений, крайне тормозная, но неплохая. Я пытался с её помощью отвлечься от тягот полёта, пока, совершенно случайно не научился её перезагружать. Из-за низкой производительности не стал её исследовать (каждый раз она загружается примерно 15 минут), но что уловил — на старте запускается загрузчик «RedBoot», который запускает образ какого-то Линукса.

Само приложение, похоже, написано с использованием веб-технологий — под прогрессом загрузки время от времени мелькают строчки про CSS и предзагрузку картинок.

Экран развлекательной системы самолёта показывает загрузочное сообщение Linux (Red Hat), а не рабочий интерфейс; видны кнопки управления и порты USB/Ethernet на панели.

8 комментариев

TODO: попросить chatgpt сгенерировать сюда заголовок

Белый логотип в виде стилизованной буквы «W» внутри круга на чёрном фоне.
Я тут придумал, а Григорий Козырь нарисовал русскоязычный логотип для искусственного интеллекта — две буквы «И» в виде цифрового сигнала

Как-то удивительно быстро произошёл переход от «ух ты, какой ты молодец, я и не догадался засунуть эту проблему в языковую модель» к «ещё один умник, который засунул это в нейросетку».

Реально, у многих, включая меня, уже есть какое-то раздражение. То, что пишут языковые модели, в общем-то неплохо, но требует редактуры. Сгенерированный аль-дэнтэ текст кажется уже каким-то недостаточным. Сразу понимаешь, что человек, который тебе его дал, буквально несколько кнопок нажал, чтобы он появился, то есть сделал на «отвали». А «отвали», конечно, вызывает раздражение.

В общем, время, когда можно было, не редактируя, использовать то, что генерируют нейросети потихоньку проходит. Можно, конечно, серьёзнее работать с промтами, но это, как будто, пока более затратно, чем переработка текста человеком.

14 комментариев

← сюда туда →