Существуют разные способы реализации синтаксических анализаторов для заданной грамматики. В статье рассматривается реализация комбинаторов синтаксического анализа на языке Kotlin для разбора контекстно-свободных и контекстно-зависимых языков.
User
Лишние знания бесполезны?
Мы постоянно обновляем программное обеспечение на своих компьютерах, мобильных телефонах и навигаторах. Устаревшее ПО может стать причиной ошибок в работе, а устаревшие карты могут завести нас не туда. Вы никогда не задумывались о том, что убеждения у вас в голове тоже могут быть устаревшими и требовать обновления? Но обязательно ли это? Может мы и так знаем достаточно?
Plane-based геометрическая алгебра для описания движения тел
Этот текст логически состоит из трёх частей. Сначала кратко расскажу про геометрическую алгебру с точки зрения математики. Потом расскажу как можно взять одну конкретную алгебру и использовать её для описания вращения и перемещения тел. И вишенка на торте - покажу, как будут выражаться физические сущности типа силы и момента, импульса, момента инерции и уравнений движения тел.
Замки, драконы и сундуки: как возник классический сеттинг игрового фэнтези? Часть 2: как трое великих переделали фэнтези
В прошлой статье мы вспомнили, как и почему в США середины 60-х годов оформился жанр фэнтези — и почему цикл о Конане Роберта Говарда оказал на него как минимум не меньшее влияние, чем «Властелин колец» Толкиена. Именно на почве увлечения «Конанинаной» в 1965 году оформился неформальный клуб писателей с говорящим названием «Гильдия мечников и чародеев Америки» (SAGA). Его ядром стали фанаты и продолжатели Говарда Лайон Спрэг де Камп, Лин Картер и Джон Джейкс. В 1966-1967-х годах публикация «продолжений» похождений Конана от де Кампа и Картера совпала с ростом популярности трилогии Толкиена и пиком контркультурных настроений среди американской молодёжи. Именно во второй половине 60-х фэнтези из увлечения немногих гиков превратилось в массово популярный у читателей жанр, но это происходило не только стараниями издателей Толкина и продолжателей Говарда.
Матрица компетенция/карьерного роста программистов
Как выглядят тайтлы и уровни у программистов в зарубежных компаниях, сколько надо лет опыта чтобы быть достойным их, ну и самое главное какая зарплата (до налогов) на этих уровня?
Я не претендую на истину в последней инстанции, это всего лишь мое видение, любые корректировки/добавки/комментарии - приветствуются
Разбираемся с стейблкойном на TON или как ваши средства могут заблокировать
19 апреля на конференции Token2049 после выступления Павла Дурова было объявлено о появлении стейблкойна от Tether в сети TON - USDt. Так как это централизованный стейблкойн эмитент подобного токена должен иметь контроль над средствами пользователей для соответствия требований регулятора, например, блокировать средства пользователя. В данной небольшой статье я расскажу как устроены токены на TON и какие возможности есть у эмитента стейблкойна.
Если вы уже знакомы с блокчейном TON и концепцией работы жеттонов, можете сразу переходить к абзацу Блокировка ваших средств, где рассматриваются механики стейблкойна, так как начнем мы в этой статье с азов.
Как устроены смарт-контракты в сети TON
Блокчейн TON асинхронный, смарт-контракты передают данные друг другу сообщениями. Контракты пишут на языке TACT и FUNC, логика написанная на этих языках вполне понятна без детального изучения, этим мы воспользуемся при обзоре контрактов стейблкойна. Но если же вы хотите разобраться глубже здесь есть бесплатные опенсорсные уроки.
Смарт-контракты на TON не предполагают хранения внутри себя больших словарей, вместо этого предполагается создавать мастер контракт, который может “воссоздавать”(адрес представляет собой хэш из начальной информации смарт-контракта и его кода, что делает возможным подобную механику) внутри себя адреса связанных контрактов и таким образом отправлять им сообщения, меня информацию в их хранилищах.
Как LLM учат понимать синтаксис
Скорее всего, вы поняли заголовок правильно, хотя в нём есть стилистическая ошибка — двусмысленность (кто-то учит LLM, или они учат кого-то?).
Человеческое понимание языка остается ориентиром и пока недостижимой целью для языковых моделей. При всей небезошибочности первого и при всех невероятных успехах последних. Например, человеку обычно не составляет труда однозначно трактовать двусмысленные фразы исходя из контекста. Более того, мы с удовольствием используем такие каламбуры в шутках разного качества. Из самого известного приходит на ум только “В Кремле голубые не только ели, но и пили” (предложите свои варианты в комментариях — будет интересно почитать). Есть ещё “казнить нельзя помиловать”, но эта двусмысленность разрешается запятой.
Самый известный пример в английском: “Time flies like an arrow; Fruit flies like a banana”.
Человек скорее всего после некоторых раздумий поймёт это как “Время летит как стрела, мухи любят банан” (хотя мне, например, понадобилось на это несколько секунд). Яндекс переводчик понимает эту фразу так: “Время летит как стрела, фрукты разлетаются как бананы”. Google translator демонстрирует зоологическую эрудированность: “Время летит как стрела; Фруктовые мушки, как банан”, а ChatGPT предлагает “Время летит как стрела; Мухи на фруктах летают как бананы”. В общем, никто не справился.
Spring Boot Starter: практически, принципиально и подробнее. Часть 1
Всем привет, меня зовут Сергей Соловых, я Java-разработчик в команде МТС Digital. За последние 2 года я написал и выпустил в продакшен более 30 микросервисов. Выдержать столь высокий темп помогло применение общепроектных решений и паттернов разработки.
Общепроектные решения — хорошая практика. Так можно создать единую основу для всех микросервисов, снизить риск ошибок и сосредоточиться на конкретных задачах, связанных с бизнес-логикой наших проектов. К тому же, микросервисы на единой основе легче интегрировать друг с другом, а это важно при разработке сложных систем.
В этом цикле статей я поделюсь выжимкой из материалов, накопленных мною в процессе создания микросервисов. Это будет полезно тем, кто только начинает разбираться, что же такое Spring Boot Starter и с чем его едят.
Первую часть мы посвятим созданию принципиального решения, которое позволит запустить стартер как подключаемую к другому Spring Boot-приложению библиотеку.
Путеводитель по Docker. От основ контейнеризации до создания собственного докера
Добрый день! Сегодня мы поговорим о контейнеризации, а именно о наиболее популярной на данный момент технологии её реализации - Docker. Также вашему вниманию будут представлены уязвимости при реализации данной технологии.
Сказ о том, как я эмулятор Intel 4004 на Python писал (часть 2)
Небольшой дисклеймер: перед прочтением данной статьи ознакомьтесь с первой частью, дабы вникнуть в суть происходящего. Желаю вам приятного прочтения :)
Это вторая часть о том, как я писал и продолжаю писать и улучшать эмулятор Intel 4004 с очень ограниченным функционалом на языке Python. В этот раз я решился переписать эмулятор с нуля, исправив довольно весомые ошибки предыдущего эмулятора..
Сказ о том, как я эмулятор Intel 4004 на Python писал
Рассказываю о том, как я решил написать эмулятор дедушки современных микропроцессоров - Intel 4004 с очень ограниченным функционалом на языке Python..
Менторство в IT. С чего начать и как стать успешным ментором
Всем привет! В этой статье я поделюсь нашим первым выпуском второго сезона рубрики "Открытый микрофон", в котором Николай Мухранов, старший системный аналитик в "Спортмастер Лаб" рассказал о менторстве в IT.
Коля - преподаватель курсов для системных аналитиков, ментор и наставник для студентов, проводит технические собеседования системных аналитиков, так что знает о менторстве не понаслышке!
Публикую расшифровку доклада и саму запись трансляции.
Также по теме мы подобрали экспертов, которые поделились своей экспертизой и мнением, их комментарии - ниже по тексту.
Искусство ETL. Пишем собственный движок SQL на Spark [часть 6]
В предыдущих сериях (FAQ • 1 • 2 • 3 • 4 • 5 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.
В данной части поговорим о том, как добавить в выражения SQL поддержку функций. Например,
SELECT
MAX(score1, score2, score3, score4, score5) AS max_score,
MIN(score1, score2, score3, score4, score5) AS min_score,
MEDIAN(score1, score2, score3, score4, score5) AS median_score,
score1 + score2 + score3 + score4 + score5 AS score_sum
FROM raw_scores INTO final_scores
WHERE ABS(score1 + score2 + score3 + score4 + score5) > $score_margin;
— тут у нас функции MAX
, MIN
и MEDIAN
принимают любое количество аргументов типа Double
и возвращают Double
, а ABS
только один такой аргумент.
Вообще, кроме общей математики, в любом уважающем себя диалекте SQL как минимум должны быть функции для манипуляций с датой/временем, работы со строками и массивами. Их мы тоже обязательно добавим. В classpath, чтобы движок мог их оттуда подгружать. До кучи, ещё и операторы типа >=
или LIKE
, которые у нас уже были реализованы, но хардкодом, сделаем такими же подключаемыми.
Уровень сложности данной серии статей в целом высокий. Базовые понятия в тексте совсем не объясняются, да и продвинутые далеко не все. Однако, эта часть несколько проще для ознакомления, чем предыдущие. Но всё равно, понимать её будет легче, если вы уже пробежались по остальным хотя бы по диагонали.
От потоков к корутинам: как и почему видоизменились примитивы синхронизации в языке Kotlin (Часть 1)
В этой статье мы рассмотрим, как и почему изменилась реализация примитивов синхронизации из стандартной библиотеки Java и пакета java.util.concurrent для Kotlin Coroutines и для языка Kotlin в целом.
Разберемся, какие реализации примитивов синхронизации потоков актуальны в контексте корутин, а какие надо использовать с осторожностью.
Оценим готовность текущих решений к использованию в Kotlin Multiplatform.
Разработаем аналоги нескольких полезных классов пакета java.util.concurrent, до которых еще не добрались разработчики корутин.
В рамках статьи будут разобраны следующие примитивы синхронизации: критические секции, атомарные переменные, реактивные переменные и барьерная синхронизация.
Дерево отрезков
Всем привет. В этой статье я расскажу про дерево отрезков. Очень мощной структуры данных, которая позволяет делать много разных операций над массивом чисел. Я постараюсь по полочкам разложить эту тему и объяснить возможности дерева отрезков. Также я разберу несколько нетривиальных задач на дерево отрезков. Помимо самого дерева отрезков я расскажу и про связанные темы: дерево Фенвика и разреженные таблицы.
Простейшая нейронная сеть, мой опыт и выводы
Мой маленький шажок на пути подготовки к написанию шахматного движка. Написание простейшей нейронной сети, выяснение, что это за зверь такой.
Как создать свой Spring Boot 3 — стартер?
Допустим, Вы разрабатываете несколько приложений или микросервисов на Java. Каждое из них уникальное, и содержит свою собственную бизнес логику. Однако, в каждом из них может быть необходимость использовать общую логику. Например, логику аутентификации, как это часто бывает в мире микросервисов.
Spring Boot starter'ы - отличный способ управлять созданием, развитием и поставкой общей кодовой базы. О том как создать свой Spring Boot 3 стартер и поговорим в этой статье.
Внутренний мир: Project Reactor
У многих из нас, при использовании какого-либо инструмента программирования, возникал вопрос: “Как? Как это работает?”. Часто при возникновении подобных вопросов я обращаюсь к гуглу, который популярным образом рассказывает общие принципы работы того или иного механизма. Но наверняка среди читателей есть те, которые, прочитав несколько статей, подумали: "Да, это интересно и, вроде, понятно. Но все таки, как оно работает?".
Внутренний мир: Java NIO
Привет, Хабр!
Парадигма «неблокируемого ввода/вывода» заинтересовала меня с того момента, как я о ней услышал. Идея возможности вызвать операцию чтения без блокировки вызывающего потока довольно привлекающая сама по себе.
Неблокируемый ввод/вывод был реализован в пакете java.nio
Java SE 1.4. К сожалению, в ежедневной практике нечасто приходится иметь дело с низкоуровневым I/O, и намного чаще при необходимости используются стримы из java.io
. В этой статье будет описано содержание Java NIO, несколько примеров и принцип работы неблокируемого I/O.
Как я склеил картон и продал на маркетплейсах на 50 млн в год
В 2020-м мой работодатель начал прижимать меня по условиям, я забрал команду, снял склад и запустил свое производство когтеточек. Казалось бы, ничего сложного: закупаешь клей, картон, и находишь людей, которые 5 000 раз в день готовы повторять одни и ту же операцию. Но есть нюансы.
Information
- Rating
- Does not participate
- Registered
- Activity