«Новый Завѣтъ» почти как новый

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

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

Рука в сером свитере держит старую потёртую книгу с тиснёным православным крестом на обложке, на фоне зелёной травы и кустов.

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

Открытая старая книга с текстом Евангелия от Матфея, глава 5, видны стихи 1–18, включая Нагорную проповедь, на фоне окна.

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

Китайская Nvidia A100

У одного из клиентов в качестве оборудования для запуска нейросетевых моделей обнаружилось чудо-чудное — две карты Nvidia A100 96GB. Чудо заключается в том, что согласно спецификации на сайте производителя таких карт не существует — бывают только на 40 и 80 гигабайт, да и 500 Ватт они не кушают.

Скриншот NVIDIA-SMI v570.144: две видеокарты NVIDIA PG506-232, драйвер 570.144, CUDA 12.8; GPU0 — 41°C, 110W/500W, 0% util; GPU1 — 38°C, 105W/500W, 2% util; память 9

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

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

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

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

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

«Снежинки»

Литература» (диалог): грубые крики, затем вопрос о речи и ответ — это драма Горького «На дне». Подпись: Донъ Базилио.
Журнал «Осколки», №12, 1903 год

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

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

А я вот не уверен, что сами люди принципиально изменились.

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

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

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

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

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

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

Но интернет рос, и рос стремительно.

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

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

И всё же в относительных величинах само человечество вряд ли стало более «снежинистым».

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

Социальные сети

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

Тут я понял, что, кроме «Хабра», ничего похожего на социальные сети я не смотрю и не читаю, а на «Хабре» про Трампа не пишут.

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

Конечно, есть ещё каналы в «Телеграме», но у меня там сплошное айти, нейросети, парочка интересных гиков и Бирман — моё окошко в мир дизайна.

В общем, я сижу в тщательно выстроенном информационным пузыре.

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

Откуда Степанищевы в Омске

Три года назад я выкупил на одном аукционе старинную табличку с надписью «Александръ Александровичъ Степанищевъ». У меня была задумка повесить её где-нибудь в квартире.

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

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

Страница метрической книги с записью о рождении: «Ошейский священник Дмитрий 62 — От колодки», ниже — имя «Иванов Степанов» и «Протоиерей Платон».
Исторический архив Омской области, фонд №16, опись №2, дело №151, стр. 260

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

Всё, что я смог выписать, даёт интересную картину: почти все найденные Степанищевы являются потомками некого Варфоломея. Лишь один человек выбивается из общей картины — умерший в 1850-м году в возрасте 62 лет Дмитрий Иванович.

Я думаю, это отец Варфоломея, отчество-то его неизвестно. По возрасту противоречий нет — Дмитрий Иванович родился около 1788 года, а единственный отпрыск Варфоломея с известной датой рождения — в 1825. Тридцать семь лет разницы между сыном и внуком вполне реальное дело — пока изучал бумаги, видел неоднократно браки семнадцатилетних.

Я думаю, что семью Степанищевых отправили в Омск в ссылку. Но чью именно?

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

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

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

Питание для Nvidia Tesla H100 NVL

Хочу записать себе новые знания.

Видеокарта Nvidia Tesla H100, про которую я вчера писал, вставляется в шину PCIe пятого поколения. Оттуда она может получить максимум 75 Ватт, тогда как карте надо больше. Она может работать, согласно спецификации, в одном из двух режимов — с потреблением 310 или 400 Ватт в пике.

Для этого используется вот такой кабель. Ток, который он может подвести от разъёма материнской платы, ограничен сечением проводов внутри кабеля. Оно может различаться в зависимости от производителя. Но как карта узнаёт сколько мощности ей можно получить, чтобы не пережечь кабель?

Оказывается, для этого используется специальный интерфейс, четыре контакта которого видно слева.

Два провода из четырёх кодируют ток, который может отдавать кабель, остальные два сейчас не используются. Сигналы 0 и 1 на этих проводах означают мощность от 151 до 300 Ватт, 1 и 0 — от 301 до 450.

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

Адаптер питания NVIDIA с одним 12-контактным разъёмом и двумя 8-контактными, в чёрной оплётке, на сером фоне.

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

Nvidia Tesla H100 NVL

Вот так выглядит видеокарта Nvidia Tesla H100 NVL — одна из трёх карт, на которых мы гоняем различные модели искусственного интеллекта. Сбоку видно, что она большая, но и толщина у неё огого — в два пальца. Извините, что не достал, страшно доставать карту стоимостью в несколько миллионов из антистатического пакетика — вдруг статикой убъёшь.

На этой карте мы гоняем небольшие пока модели — примерно 30—32 миллиарда параметров (Qwen3, Magistral, Mistral, T-Pro 2 и так далее), но в перспективе там будет работать что-то побольше — ≈600 миллиардов или около того.

К слову, взаимодействие с хвалёной моделью T-Pro 2 (её делал Т-Банк) меня как-то разочаровало — медленная и иногда циклится на цифрах. Я попробовал её, помимо всего прочего, на написании эскуэль-запросов, так она иногда вместо имён таблиц внезапно начинает генерить огромные числа. Я ни разу не дождался конца, поэтому не знаю есть ли там вообще конец.

Рука в сером рукаве держит серебристый фольгированный пакет с наклейкой, на фоне стены с изображением белой птицы и цветного ковра.

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

Очеловечивание ИИ

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

Потом люди несут это дальше, думая, что эти глаголы адекватно описывают процессы, тогда как модель ничего не считает и не советует, она текст генерирует.

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

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

Свет и экономия

Сегодня забирали дочку из Лениногорска — она там гостила у моих родителей. Пока поднимались к ним в квартиру, я обратил внимание на дырки в подъездном щитке. Интересно, многие ли из тех, кто живут в этом доме, помнят почему они есть только на чётных этажах?

Это следствие какого-то местного эксперимента по экономии электроэнергии. Проводили его, ориентировочно, в конце 80-х. Дешёвых датчиков движения тогда не существовало, а свет в подъезде горел круглосуточно.

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

Красная текстурированная поверхность с тремя чёрными точками в центре и вертикальной полосой слева.

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

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

Через какое-то время кнопки убрали — то ли что-то сломалось и менять не стали, то ли экономия была несущественной. От них и остались дырки в щитке — две от крепления и одна от провода.

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

«Телеграм Макс»

Хотите поменять иконку стремительно становящегося нам чужим «Телеграма» на иконку доморощенного «Макса»? Под «МакОСью» это сделать проще простого.

Всего несколько шагов:

  1. если у вас в настройках «Телеграма» выбрана нестандартная иконка, идём в настройки («⌘+,»), меняем на стандартную;
  2. заходим в папку, где у нас лежит «Телеграм» («⌘+клик» на иконке приложения);
  3. открываем «Свойства» («⌘+I») этого приложения;
  4. скачиваем мессенджер «Макс», запускаем инсталлятор;
  5. прямо из инсталлятора иконку «Макса» тянем в левый верхний угол свойств приложения «Телеграм», туда, где иконка;
  6. в программе Finder нажимаем кнопку «извлечь» («⏏») около надписи «MAX» в левом меню, сам файл удаляем, он нам больше не понадобится.

Всё, у «Телеграма» теперь максовская иконка.

Панель задач macOS с иконками Finder, Почта, Календарь, терминал, Qwant, Notion, Opera, Photoshop и Корзиной; всплывающая подсказка «Telegram» над иконкой Qwant.

1 комментарий

«Мышастик»: приделал антенну

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

Заказал антенну на требуемую частоту, подходящий «пигтейл» (провод от антенны к плате) , разобрал, выломал заглушку, отключил встроенную антенну, вкрутил и подключил внешнюю, собрал всё обратно.

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

В качестве антенны взял двадцатисантиметровую китайскую «GIZONT» на частоту 868 МГц — это частота казанской сети, а «пигтейл» — «SMA female — U.FL (IPX)». Китайцы обещают усиление 10 dBi, но врут, небось, как обычно.

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

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

Чёрное устройство LilyGO T-Keyboard с антенной на фоне паттерна из мышей; на экране Meshtastic: «Нет новых сообщений», 10 из 45 узлов онлайн, LoRa 868.825 МГц, дата 23.07.25.

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

Склеп

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

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

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

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

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

Чёрная гранитная надгробная плита с арочным углублением и надписью «ПОКОЙНИЙ ДУХЪ ВЪ РАЙѢ БЫТИ ПОЖЕЛАЕТЪ» стоит в высокой траве среди кустов.
Разрушенная могила Василия Михайловича Калсанова (умер 7 октября 1897 года по старому стилю)
Груда обломков кирпича и деревянных досок на земле у разрушенной кирпичной стены.
Разорённый склеп под могилой. Доски, думаю, — постамент, на котором лежал гроб

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

Интересен склеп под могилой купца Василия Михайловича Калсанова. По свидетельству моего друга там когда-то стоял гроб, обитый бархатом, в котором были кости. В детстве они залезали туда с друзьями. Сейчас там видно только какие-то доски.

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

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

Парадокс Степанищева-Вихлянского

Учёным ещё только предстоит подробно изучить парадокс Степанищева—Вихлянского. Он назван в честь двух друзей, которые всю неделю предвкушают поход на выходных, затем накануне начинают сомневаться, а в день похода, встав в 4—5 утра, проклинают всё на свете, грозя плюнуть на планы и лечь спать.

И лишь доехав до места и расположившись, радуются, что не смалодушничали ни на одном из этапов.

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

Ковыряю bc

Ковырял сегодня bc на досуге, ту версию, которая помощнее. Что-то не очень мне нравится как он написан. Я добавлял в язык одну конструкцию и одну функцию. Конструкцию удалось добавить быстро, а с функцией я возился не один час.

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

Скриншот вывода команды git diff | fgrep -i pop_stack в терминале, показывающий добавление кода для обработки ключевого слова pop_stack в языке bc.

Лучше расскажу что именно я придумал добавить в язык. В bc есть несколько глобальных переменных, которые очень много на что влияют. Две, наверное, самые важные — это ibase и scale. Очень часто их приходится сохранять в начале и восстанавливать в конце своих функций, особенно библиотечных.

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

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

define c(x){
    auto b,s
    b=ibase
    ibase=A
    s=scale
    scale*=1.2
    x=s(2*a(1)+x)
    scale=s
    ibase=b
    return(x/1)
}

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

Функция косинуса с этими новыми возможностями выглядела бы так:

define stack c(x){
    ibase=A
    scale*=1.2
    x=s(2*a(1)+x)
    pop_stack()
    return(x/1)
}

Завтра ещё потестирую и попробую закинуть код автору bc, вдруг понравится изменение.

Добавлено позднее: Автор bc написал, что идея у меня интересная, но его жизнь серьёзно изменилась и теперь он не будет заниматься проектом бесплатно. Видимо крепко его прижало. Учитывая низкую популярность bc, можно сказать, что этот проект умер, если у него не найдётся новый мантейнер, что маловероятно.

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

Brew: x86 → ARM

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

Несколько лет назад «Эпл» сменила процессоры Интела в своих устройствах на чипы собственной разработки, основанные на архитектуре ARM. Эта архитектура бинарна не совместима с процессами Интела и, чтобы все программы программы остались работоспособными, в состав операционной системы включили специальный транслятор. Он на лету преобразовывает машинный код. О чего, конечно, страдает производительность.

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

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

Начал с очень известной утилиты ffmpeg, которую я использую, чтобы конвертировать видео. В последнее время чаще всего — чтобы сконвертировать скаченное с «Ютуба» для дочки. Стараюсь ей подкидывать что-нибудь одновременно интересное и развивающее.

Разница между утилитой, выполняющейся через транслятор, и нативным вариантом на скриншоте. Сконвертировал одно и то же видео два раза. Скорость конвертации — 23 кадра в секунду против 48. Очень серьёзная разница, как мне кажется.

Скриншот консоли FFmpeg: два блока вывода mp4 с одинаковым количеством кадров (14630), но разным fps (23 и 48), скоростью кодирования (0.757x и 1.6x) и битрейтом (~12888 kbits/s).

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

Анекдоты

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

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

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

Недавно, чтобы подтолкнуть её побольше читать, я ей заказал сборник школьных анекдотов. Заказал через «Озон» сразу в Лениногорск, где она гостит у дедушки и бабушки. Сегодня вечером бабушка написала: «читает анекдоты и хохочет. Нам с дедом тоже читала».

Похоже сработало, надо будет ещё заказать.

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

«Мышастик» и широковещательные пакеты

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

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

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

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

Схема распространения широковещательного пакета (broadcast) между устройствами Bolknote.ru, Omet Guy, Kaban Guy и Forever Alone; используется для чатов.

В общем, внимание на картинку.

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

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

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

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

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

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

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

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

Жюри

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

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

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

Выручай-комната

В Айти-парке Казани, где я работаю, на первом этаже есть дверь, ведущая, как я её называю, в «выручай-комнату». Если кто не помнит, в «Гарри Поттере» была такая зачарованная комната, дверь в которую появлялась только тогда, когда мимо трижды пройдёт человек, испытывающий огромную потребность в помощи.

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

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

Серая металлическая дверь с чёрной ручкой и табличкой «ЭКОПУНКТ. Сортируем вместе» на белой стене, рядом жёлтый пожарный извещатель.

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

99 бутылок: HolyC

История появления языка, на котором написана сегодняшняя «песня о пиве», довольно занятна.

Его автор, Терри Дэвис — гениальный одиночка и бывший инженер компании Ticketmaster, который посвятил более десяти лет созданию собственной операционной системы TempleOS. Страдая от шизофрении, он считал, что действует по воле Бога, который лично поручил ему создать «божественную ОС». Несмотря на тяжёлое психическое состояние, Дэвис самостоятельно написал компилятор, ядро, графическую оболочку и язык программирования — в полном одиночестве и с поразительной продуктивностью.

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

Во-первых, конечно, это собственная система типов, простая и понятная — значение либо выводится (auto), либо сразу видно сколько бит оно занимает, а так же знаковое оно или нет — U8, I8, U16 и так далее. Тип U0, как легко догадаться — аналог void.

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

Чуть менее заметная деталь — оператор case может не иметь аргумента, в таком случае используется автоикрементное значение, начинающееся с нуля. В HolyC вообще довольно много интересного синтаксического сахара.

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

// "99 Bottles of Beer," written in HolyC on July 9, 2025
// by Evgeny Stepanishchev (https://bolknote.ru)

auto Bottle(U8 b)
{
  U8 *bottles, *ret;

  switch (b) {
    case:
      bottles = StrNew("No bottles");
      break;
    case:
      bottles = StrNew("1 bottle");
      break;
    default:
      bottles = StrPrint(NULL, "%d bottles", b);
      break;
  }

  ret = StrMerge(bottles, " of beer");
  Free(bottles);
  return ret;
}

U0 Main()
{
  U8 *bottles, b = 99;

  while (b) {
    bottles = Bottle(b);
    "%s on the wall, %1$s!\n", bottles;
    Free(bottles);

    bottles = Bottle(--b);
    "Take one down, pass it around,\n";
    "%s on the wall!\n\n", bottles;
    Free(bottles);
  }

  "No more bottles of beer on the wall,\n";
  "No more bottles of beer!\n";
  "Go to the store and buy some more,\n";
  "99 bottles of beer on the wall!\n";
}

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