nikalexxx
498 subscribers
411 photos
6 videos
1 file
152 links
Александр Николаичев.Программирую фронтенд инфраструктуры Яндекса, рисую и люблю математику.
https://nikalexxx.github.io
Download Telegram
Вот пример, как парсится начало стихотворения Пушкина
Приглашаю на чемпионат по программированию от Яндекса!

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

Регистрация для всех
https://yandex.ru/cup/

Регистрация только для яндексоидов: https://t.me/+W2sqObl-ULA2Y2Yy
Полностью собраный пакет в cjs для работы с языком разметки. esm тоже есть конечно, но для картинки не так красиво)

Включает в себя сгенерированные лексер и парсер (генерация ANTLR4), а также преобразование в целевой вид AST. Сборка через vite с помощью lib mode.

Типы ts для AST генерируются из proto файлов с помощью protoc. Таким образом можно из одного описания получить типы/структуры для разных языков. Следующий на очереди — python, после него go.

Допишу тесты и ридми и выпущу в npm, следите за новостями! После пакета будет плагин для vscode и документация.
Встречайте https://www.npmjs.com/package/@bookbox/markup 🎉🎉🎉

npm пакет готов, исходный код тут https://github.com/bookbox-format/bookbox/tree/master/grammar
Представляет функции parse и stringify для bookbox markup language

Основной код обхода сгенерированного ast тут https://github.com/bookbox-format/bookbox/blob/master/grammar/typescript/src/model/ast.ts

Пришлось чуть усложнить грамматику, добавив корневое правило file, чтобы обрабатывать лишние закрывающие фигурные скобки и текст после них. https://github.com/bookbox-format/bookbox/blob/master/grammar/bookbox_parser.g4#L7

proto файл для ast https://github.com/bookbox-format/bookbox/blob/master/grammar/markup.proto
прото формат приучает к продумыванию полей, так как сильно ограничивает структуру, всем советую)
Летом читал лекцию по инфрастуктуре в рамках летних школ Яндекса, но совсем забыл поделиться. Исправляюсь)

Видео https://www.youtube.com/live/oUQauacFpBY?feature=shared

Презентация в pdf https://disk.yandex.ru/i/rbxdyks4HAjjbw

В этом году представлял этот материал впервые, возможно он "по верхам". Но постарался сделать качественно и объять основные моменты.
И это не просто docker push 😉
Подумал, что редко пишу сюда о своей работе, чуть приоткрою завесу. В основном показываю пет проекты. А вот на картинке собственно мой календарь.

Цветные прямоугольники — это рабочие встречи. Разные типы означают разные категории встреч (салатовые например это формат 1-1, синие про инфраструктуру, зеленые — обычные). Как видно, иногда они налезают друг на друга, иногда идёт даже 4 встречи в одно и то же время. Конечно, я не клонировал себя, чтобы везде успевать (Вы всё успеваете, в чём ваш секрет? А я не успеваю). Во многих встречах я опциональный участник в качестве наблюдателя.

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

Чем же я занимался весь день: кодил, выкатывал, планировал спринт, планировал семестр, расписывал задачи, спорил о дизайне, спорил о приоритете проектов, смотрел перспективных стажеров, и ещё раз кодил.

Ещё один день прошёл
Расширение для vscode почти готово, завтра опубликую.

На первой картинке фрагмент файла для грамматики textmate. Его я писал вручную, так как там были сложности с автоматической генерацией.

Во-первых, популярных конверторов из antlr4 в textmate нет. Во-вторых, не факт что есть однозначное соответствие, по крайней мере я это не доказывал.

Я придумал примерный алгоритм перевода грамматик, по сути исполнил его вручную. Если коротко, все последовательности терминалов надо свернуть в регулярку, а последовательность нетерминалов постепенно срезать с двух концов при помощи begin и end.

На второй картинке пример файла text.bbm с подсветкой. Контент взят из доки yt https://ytsaurus.tech/docs/ru/user-guide/dynamic-tables/dyn-query-language#obrashenie-k-kontejneram

Есть небольшие проблемы с экранированием фигурных скобок в блоках. В маркдауне для блоков кода используются три косые кавычки, что достаточно редкое сочетание. Я пока добавил тройные фигурные скобки в дополнение к двойным. Но возможно их уберу, если придумаю что получше.
https://marketplace.visualstudio.com/items?itemName=bookbox-format.bookbox-markup-language

Как обычно, всё чуть затянулось. Неделю отвлекся от разработки расширения. Но наконец оно готово!

После установки просто создайте текстовый файл в vscode с расширением .bbm и всё заработает. Подсветка синтаксиса полностью повторяет грамматику языка. У файлов также появится иконка в дереве файлов.

Сейчас наконец дошли руки начать писать именно в файлах bbm первую главу книги "Языки и исчисления", буду выпускать как я и говорил ранее по главе за раз.
Напоминаю, что прямо сейчас идёт Yandex Cup, чемпионат по программированию, который мы вместе с коллегами Яндексоидами готовим для вас

https://yandex.ru/cup/frontend

Успейте принять участие до 20 октября. В треке фронтенда на первом этапе попробуйте в числе прочих решить мою задачку "Бамбуковые палочки". Если наберете полный балл (пока никому не удалось с понедельника), напишите.

Я всё это время с начала недели сижу в дежурном чате и отсматриваю новые решения. Некоторые участники смогли меня удивить, решая способами, которые я и сам не предполагал 😱. Возможно и вы удивите😉
Почти закончил первый параграф. С новым языком разметки bbm многое пришлось решать с нуля 🏋.

Например кастомные элементы. В "Языках и исчислениях" активно использовались кастомные tex команды, например чтобы обозначать теоремы и доказательства.

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

На второй картинке можно увидеть, что элемент def:proof просто обрамляет доказательство в треугольники (частый приём в математических книгах, иногда ещё в конце доказательства квадрат).

Пока это я сделал на typescript, но планирую сделать декларативно прямо на языке bbm.

До выпуска в прод мне осталось реализовать таблицы. Так как их не было в bookbox, но в книге они активно используются с самого начала для таблиц истинности.
В деревне Бердюково

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

Шершаво треснет береста
С поленницы второго ряда.
Дошли до клетки, скоро надо
Телегу в пять кубов достать.

На боровок закину ноги,
Грея крестец о кирпичи.
С палатьев край листа торчит,
На нём цепочка тавтологий.

Ищу в горнушке мой платок,
Случайно нож роняю с грядки.
По кухне запах идёт сладкий:
Ватрушкой занят весь шесток.

Ждут очереди колобушки,
Пока порубленные щи
Томятся в чугуне. Тащить
Пришлось из подпола избушки.

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

Слезаю с печи, ужарел.
Внизу с окна крестню видать.
Люди галашатся (штук пять)
У чипыжей на свой манер.

Там каждый затмевал другого:
То деревенский дурачок,
То попандопало, то старичок,
То прощелыга, то пузатый боров.

Ждут автолавку в понедельник,
А я махну в полоски наши.
Наевшись запеченной каши,
Ищу под веник можжевельник.

Конечно есть на чердаке
Берёзовый, есть и дубовый.
Ломали за старухой, новый
Же будет хвойный, в кипятке.

И в мае снова мы пойдём,
Как только восстановим лавы
После разлива речки малой.
Одним веселым майским днём

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

А дело разве в пирогах?
Уж точно нет, в загибах дело!
Смотрел на небо — багровело,
Моей деревни был закат.


Все слова здесь — настоящие! Эти слова частично местные регионализмы, частично просто используемые в сельской местности. Если этот пост соберёт суммарно 50 реакций, то я выложу словарь для всех непонятных слов.
Читаю "Принципы математики: новый взгляд" (Хинтикка). Тот самый случай, когда понимаешь, что кто-то пришёл к таким же выводам, как и ты сам, но намного раньше и написал ещё кучу книг.

Хинтикка предлагает расширить логику первого порядка до новой логики, которую он назвал дружественно независимая логика первого порядка. Расширение довольно естественно, оно заменяет линейный порядок кванторов на частичный. Делается это через собственную нотацию, в графовом представлении это я думаю было бы понятнее. Теория ветвящихся кванторов была бы деревом, а IF-логика (еще одно название от автора) была бы DAG.

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

Логику и метаматематику незаслуженно обходят стороной, считая, что там уже всё открыто, и лучше заняться "реальной" математикой, то есть анализом, топологией и тд. Между тем, основания математики чрезвычайно важны с точки зрения автоматизации доказательств, что есть будущее математики в целом.
Стрит-арт в Витебске вчера вечером 🧑‍🎨
Закончил большой пласт работ по записи книг для своего книжного формата на языке разметки bbm 🎉

Начинаю выпускать по главам книгу "Языки и исчисления" https://nikalexxx.github.io/?/books/vereshagin-shen-firstord

Можно посмотреть исходники — https://github.com/nikalexxx/nikalexxx.github.io/blob/master/data/books/data/vereshagin-shen-firstord/1/1/text.bbm

Из нового — добавил таблицы и доработал счётчики (их любят в книгах, как и обычные числовые счётчики, так и римскими числами например). Таблицы было добавлять нетривиально, так как они плохо ведут себя со скроллом, пришлось добавлять обёрток из дивов. Плюс таблицы ПЛОХО СКРОЛЛЯТСЯ внутри элемента с justify-content: center, поэтому его надо сбрасывать (обрезается начало таблицы).
Пикантные подробности css в исходниках https://github.com/bookbox-format/bookbox/blob/master/typescript-packages/view-html/src/htmlBook.css#L778

Остальные главы пойдут бодрее, мне осталось только обточить технику кастомных элементов (например theorem и proof).

Как закончу полировать язык разметки bbm, обновлю доку https://bookbox-format.github.io
Задача на вечер 👨‍🏫

Найти два положительных целых числа (в десятичной записи), у которых совпадают суммы цифр и произведения цифр. Также совпадает количество цифр и среди цифр нет нуля. И последнее, числа нельзя превратить друг в друга перестановкой цифр, то есть 123 и 213 не подойдут (сочетания цифр должны быть разными).

Решение не должно использовать грубый перебор, его нужно объяснить. Чем меньше числа получатся, тем лучше. За самое элегантное решение вышлю фирменную панаму Young&Yandex