Pull to refresh
4
0
Send message

Создание DSL на Python с библиотекой textx

Level of difficultyEasy
Reading time6 min
Views5K

Для описания объектов и процессов в терминах бизнес-логики, конфигурирования и определения структуры и логики в сложных системах популярным подходом является использование предметно-специфических языков (Domain Specific Language - DSL), которые реализуются либо через синтаксические особенности языка программирования (например, с использованием средств метапрограммирования, аннотаций/декораторов, переопределения операторов и создания инфиксных операторов, как например в Kotlin DSL) или с помощью применения специализированных инструментов разработки и компиляторов (например, Jetbrains MPS или парсеров общего назначения, таких как ANTLR или Bison). Но существует также подход реализации DSL, основанный на синтаксическом разборе и одновременной кодогенерации для создания исполняемого кода по описанию и в этой статье мы рассмотрим некоторые примеры использования библиотеки textx для создания DSL на Python.

Читать далее
Total votes 13: ↑13 and ↓0+13
Comments1

Математическая продлёнка. Из чего сделаны Пифагоровы штаны

Level of difficultyEasy
Reading time10 min
Views7.6K

Поводом для написания этой заметки послужила новость, облетевшая мир 18 марта этого года: две школьницы из Нового Орлеана, Кальцея Джонсон и Не`Кия Джексон «впервые доказали теорему Пифагора», опираясь на теорему синусов. В России эту новость встретили с иронией и стёбом, но не бывает плохих поводов поговорить о хороших теоремах.

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

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

Читать далее
Total votes 40: ↑40 and ↓0+40
Comments8

Инструменты анализа эффективности работы приложения. PerfView

Reading time15 min
Views12K

Иногда приходится разбираться, почему .NET приложение работает "плохо". Не так, как мы ожидали. Тупит, медленно работает, зависает, запросы «не исполняются», утекает память или потребляется слишком много CPU.

Есть множество способов, как разбираться в таких ситуациях. Сегодня мы немного обсудим, что это за способы. Когда и какой способ нужно использовать. И более детально рассмотрим один из инструментов: PerfView.

Читать далее
Total votes 23: ↑23 and ↓0+23
Comments5

Теория вероятностей в машинном обучении. Часть 1: модель регрессии

Reading time28 min
Views26K

В данной статье мы подробно рассмотрим вероятностную постановку задачи машинного обучения: что такое распределение данных, дискриминативная модель, i.i.d.-гипотеза и метод максимизации правдоподобия, что такое регрессия Пуассона и регрессия с оценкой уверенности, и как нормальное распределение связано с минимизацией среднеквадратичного отклонения.

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

Данная серия статей не является введением в машинное обучение и предполагает знакомство читателя с основными понятиями. Задача статей - рассмотреть машинное обучение с точки зрения теории вероятностей, что позволит по новому взглянуть на проблему, понять связь машинного обучения со статистикой и лучше понимать формулы из научных статей. Также на описанном материале строятся более сложные темы, такие как вариационные автокодировщики (Kingma and Welling, 2013), нейробайесовские методы (Müller et al., 2021) и даже некоторые теории сознания (Friston et al., 2022).

Читать далее
Total votes 23: ↑23 and ↓0+23
Comments0

Ура, Сенет: история настольных игр

Reading time13 min
Views6.5K

В январе 2022 года археологи обнаружили в долине Кумайра (Оман) каменную настольную игру, возраст которой составляет около 4 тыс. лет. На игровое поле нанесена разметка в виде сетки и в нём проделаны отверстия для фигурок. Вероятно, находка археологов является предшественницей древней ближневосточной игры, известной как «Царская игра Ура».

Читать далее
Total votes 25: ↑24 and ↓1+33
Comments4

Вычисление значения частоты любой ноты и интересное звучание «псевдонатурального» строя

Reading time4 min
Views15K

Какие у нот частоты? Почему они такие? Как рассчитать частоту любой ноты в любом аккорде? Как добиться необычного звучания? Когда новый релиз у Моцарта?

Узнать о нотах больше
Total votes 18: ↑14 and ↓4+15
Comments36

Hex: Мастерим бота

Reading time29 min
Views2.9K
— Стало быть, эта штуковина только выглядит так, будто умеет думать? — Э… да.
— А на самом деле не думает? — Э… нет.
— То есть просто создаёт впечатление, будто бы думает, а на самом деле это всё показуха?
— Э… да. — Ну точь-в-точь как все мы.

                    Терри Пратчетт "Санта-Хрякус"

Триумфальные победы AlphaGo (и впоследствии AlphaZero) всколыхнули интерес общественности как к нейросетям, так и к настольным играм. Конечно, есть люди, которые считают, что AlphaZero «побеждает нечестно», поскольку на самом деле учится не совсем с нуля, а использует поиск Монте-Карло, в дополнение к тому, что ему советует нейросеть (говоря серьёзно, использование языковых моделей, в применении к настольным играм, выглядит интригующим и я желаю всяческих успехов в этом направлении), но хочется поэкспериментировать с чем-то не требующим грандиозных вычислительных мощностей и получить на выходе что-то, пусть и не играющее «на уровне Бога», но вполне пригодное для того чтобы играть с ним было интересно.

Мне важен результат и я готов использовать минимакс, Монте-Карло или даже нейросети, лишь бы добиться хоть какого-то успеха (особенно с учётом некоторых ограничений накладываемых JavaScript на производительность, по сравнению с компилируемыми языками и массовым использованием GPU). Разумеется, начинать эксперименты с Го несколько самонадеянно. К счастью, это не проблема. Я знаю много других игр.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments10

Задача про пьяницу

Level of difficultyMedium
Reading time9 min
Views33K

В книге «Пятьдесят занимательных вероятностных задач с решениями - Ф. Мостеллер» есть интересная задача про пьяницу, который с вероятностью p делает один шаг к обрыву и с вероятностью 1-p один шаг от обрыва. Пьяница стоит на расстоянии одного шага от обрыва. Что можно сказать про вероятность того, что он упадет?

Читать далее
Total votes 101: ↑101 and ↓0+101
Comments72

Пользовательские типы и std::format в C++20

Reading time8 min
Views17K

std::format — очень полезное (и серьезное) нововведение C++20, позволяющее нам форматировать текст в строки удобным и эффективным образом. Оно привносит в язык форматирование в стиле Python в сочетании с безопасностью и простотой использования.

В этой статье я расскажу, как реализовать пользовательские средства форматирования (форматтеры) в соответствии с новой std::format архитектурой.

Читать далее
Total votes 13: ↑11 and ↓2+12
Comments11

Руководство по CMake для разработчиков C++ библиотек

Reading time18 min
Views90K

Данное руководство позволит читателю составить полную картину того, как организовать сборку C++ библиотек с использованием современных возможностей CMake. Предполагается, что читатель имеет представление о базовых понятиях из мира CMake и динамических/статических C++ библиотек, так как в руководстве они могут не объясняться.

Читать далее
Total votes 71: ↑71 and ↓0+71
Comments49

.Net Microservices The Hardcore Way: туториал от инженеров Microsoft, получаем PROD опыт

Reading time4 min
Views13K

Для тех кто хочет погрузиться в проектирование .Net микросервисов, Kubernetes, Azure и Azure DevOps процессы. 

Читать далее
Total votes 16: ↑14 and ↓2+14
Comments7

Entity Framework Core и высокая производительность

Reading time15 min
Views27K

Entity Framework Core является рекомендованным и самым популярным средством взаимодействия с реляционными базами данных на платформе ASP NET Core. Это мощный инструмент который подходит для большинства сценариев, но, как и любой другой инструмент имеет свои ограничения. Долгое время бытовало мнение (и не безосновательно) что Entity Framework не подходит для высоконагруженных систем и в таких сценариях лучше использовать Dapper. Но время идет и Entity Framework развивается, в том числе в плане оптимизации. Помимо улучшения производительности самой платформы .NET, Entity Framework Core для NET 6 имеет ряд настроек и возможностей, призванных значительно улучшить производительность. В этой статье мы рассмотрим Entity Framework Core с точки зрения производительности и сравним его с Dapper используя актуальные версии на момент июля 2022 года. Посмотрим насколько рекомендация "перепишите все на Dapper" актуальна :)

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

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments16

Простое руководство по атомарности в C++

Reading time9 min
Views16K

Часто возникает путаница с тем, что же понимается в компьютерных науках под «атомарностью». Как правило, атомарность – это свойство процесса, означающее, что он совершается за один шаг или операцию. Но в языке C++  атомарность определяется гораздо более специфичным образом. На самом деле, при использовании std::atomic  с классами и типами еще не гарантируется, что весь код будет подлинно атомарным. Хотя, атомарные типы и входят в состав языка C++, сами атомарные операции должны поддерживаться на уровне того аппаратного обеспечения, на котором работает программа. Эта статья – простое руководство, помогающее понять, что же представляет собой атомарность в C++.

Читать далее
Total votes 9: ↑7 and ↓2+6
Comments10

Tree-sitter: обзор инкрементального парсера

Reading time5 min
Views9K

Некоторые IDE и текстовые редакторы парсят исходный файл целиком при каждом изменении, что может тормозить на больших файлах, а некоторые делают это построчно с помощью регулярных выражений, что тоже тормозит и не даёт качественной подсветки кода, т.к. теряется контекст. Для решения этих проблем в недрах GitHub был создан tree-sitter - инкрементальный парсер, который используют всё больше и больше проектов. Давайте разбираться зачем и почему.

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments37

Гибкая индексация элементов в контейнере на С++ и при чём тут Boost.MultiIndex

Reading time9 min
Views9.8K

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

Мультииндекснуться
Total votes 26: ↑26 and ↓0+26
Comments22

Случайные блуждания и цепи Маркова в геймдизайне

Reading time12 min
Views14K

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

Всем привет, меня зовут Лев, я геймдизайнер из WhaleKit. И в этой статье мы разберем две математические концепции: цепи Маркова и случайные блуждания. Сразу замечу, что статья скорее «поп», чем «науч», поэтому часть доказательств выведенных формул будет опущена. После теории мы перейдем к реальным кейсам, где эти инструменты могут пригодиться, например:

 1. Сколько сундуков откроет игрок, если из сундуков могут выпасть еще сундуки;
2. Сколько золота уйдет на прокачку меча, если меч может ломаться;
3. Какая вероятность победить в денежном поединке.

Читать далее
Total votes 44: ↑44 and ↓0+44
Comments5

С++ без классов?

Reading time6 min
Views20K

(на картинке изображён С++ среди других функциональных языков)

Классы - это скорее всего первое, что добавил Страуструп в далёких 1980х, ознаменовав рождение С++. Если представить, что мы археологи древних плюсов, то косвенным подтверждением этого факта для нас будет this, который по прежнему в С++ является указателем, а значит, скорее всего, он был добавлен до "изобретения" ссылок!

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

В конце(СПОЙЛЕР) мы попытаемся превратить С++ в функциональный язык за несколько простых действий.

Для начала рассмотрим базовое применение классов:

Начать погружение
Total votes 12: ↑11 and ↓1+14
Comments47

Как написать рефлексию для C++

Reading time14 min
Views26K

C++ поистине противоречивый язык. Старый добрый С существует аж с 1972 года, С++ появился в 1985 и сохранил с ним обратную совместимость. За это время его хоронили ни раз и ни два, сперва Java, теперь его потихоньку продолжают хоронить Go и Rust. Все его недостатки пережеваны множество раз. Если вы пришли в мир С++ из других ООП языков, то здесь вы не найдете...

Читать далее
Total votes 30: ↑29 and ↓1+35
Comments44

Information

Rating
Does not participate
Registered
Activity