Обновить
4
0

Пользователь

Отправить сообщение

Самый обобщённый живучий алгоритм

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели2.1K

Путь от костылей к универсальному живучему алгоритму

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

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

Пропустить обложку через вентилятор

Project Euler. Векторное программирование и задача номер 1

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели2.9K

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

Читать далее

Я купил детский ARM-ноутбук за 500 рублей, чтобы поставить на него Linux

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели53K

Сегодня компьютером на x86-совместимом процессоре едва ли можно кого-то удивить с гиковской точки зрения. Другое дело — обучающий ноутбук для детей, который работает на интересном и необычном ARM-процессоре от небезызвестной компании VIA. И хотя для запуска произвольных программ его необязательно было хакать — всем гикам известно, надо было ставить Linux!

К чему приводит давняя детская мечта об обучающем ноутбуке, что скрывается внутри устройства за 500 рублей и как на всё это накатить Linux с дуалбутом в родную систему — читайте в сегодняшней подробной статье!

Читать далее

Эксперимент: смогут ли бесплатные чат-боты написать Sci-Fi роман, достойный публикации на Литресе

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели2.1K

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

Читать далее

Пример прямой эволюции человека — кость инков

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели9.6K

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

Читать далее

От Аристотеля до Тьюринга: что такое функциональное программирование и как оно облегчает жизнь

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели9.1K

Привет, меня зовут Марат Зимнуров, я тимлид в кросс-функциональной команде HR Admin Tech Авито. Тема функционального программирования не обделена вниманием — и все же тяжело найти действительно понятный и структурно изложенный разбор данного инструмента. Нет нормального гайда для старта — ни у нас, ни на Западе. Многие говорят про иммутабельность и монады, но путаются в основах. В статье разбираю, что такое функциональное программирование на самом деле и зачем оно нужно.

Читать далее

Конечный автомат, машина Тьюринга, порождающая грамматика и компьютер: в чём разница

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели2.2K

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

А в конце мы немного пофилософствуем на тему, что же такое программа и что такое семантика.

Читать далее

Тайны сердца на ЭКГ

Время на прочтение6 мин
Охват и читатели3K

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

Само функционирование человеческого организма является следствием биоэлектрических процессов. Наш организм — своеобразная электростанция, которая всегда с тобой (возможно, вам в детстве доводилось играть с маломощными светодиодами, которые начинали светиться от соприкосновения с кожей?). Основные источники электрического тока в нашем организме — нервная система и мышечная ткань. Нервная система представляет собой сложную электрическую сеть, по которой ежесекундно передаются тысячи импульсов. Эти импульсы генерируются нейронами в ответ на внешние раздражители. Фактически, именно благодаря им мы способны ощущать и осознавать окружающий мир.

Читать далее

Создаём DSL для моделирования данных

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели1.2K

Всем привет! Продолжаем делиться тем как мы разрабатываем наш инструмент моделирования. К предыдущей статье было много вопросов о том можно ли модели хранить и редактировать в текстовом виде, как насчёт architecture as code, code first и т. д. Мне хотелось бы написать, что мы добавили эту фичу в текущем релизе, но нет, пока есть только такая демка с исходниками. И в этой статье я расскажу как она сделана, как запилить свой предметно‑ориентированный язык (DSL) и текстовый редактор для него.

Читать далее

Гайд на полиморфизм. Rust

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели3.3K

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

Читать далее

QapGen: Создаём мощные парсеры на C++

Время на прочтение36 мин
Охват и читатели3.1K

QapDSLv2 — это язык который транслируется в обычный C++ код. Он позволяет удобно и компактно задавать грамматики/правила разбора кода программ, значительно упрощая разработку компиляторов/анализаторов/трансляторов.

QapGen — это генератор дерева_лексеров/парсеров описанных на QapDSLv2. Сама грамматика QapDSLv2 описана на QapDSLv2 на 100%. Поэтому QapGen как основной читатель этой грамматики сам генерирует часть своего кода(весь парсер QapDSLv2).

Основные фишки QapDSLv2 + QapGen — это:

1) Отсутствие этапа токенизации — дерево лексеров разбивает входной поток на лексемы и сохраняет их в строго типизированных древовидных С++ структурах пропуская этап токенизации.

2) Генерация оптимизированного кода полиморфных лексеров.

3) Полное сохранение всех лексем(даже разделители сохраняются, такие как пробелы/переходы на новую строку и комментарии) в результирующем дереве.

4) Возможность сохранить как оригинальное дерево, так и модифицированное обратно в код/текст без потери разделителей/комментариев.

5) Автоматическая генерация кода посетителей(это такой паттерн проектирования).

А теперь пример самой сочной части(рекурсивно самоописывающийся код):

structt_target_struct:i_target_item{
structt_keyword{
stringkw=any_str_from_vec(split("struct,class",","));
" "? // optional separator
};
structt_body_semicolon:i_struct_impl{";"};
structt_body_impl:i_struct_impl{
"{" // жрём скобочку
vector<TAutoPtr<i_target_item>>nested?; //рекурсия!
" "?
vector<TAutoPtr<i_struct_field>>arr?; // парсим поля
" "?
TAutoPtr<t_cpp_code>c?; // остальной С++ код
" "?
"}"
};
structt_parent{
stringa_or_c=any_str_from_vec(split("=>,:",","));
" "?
t_namename;
};
//точка входа в парсер:
TAutoPtr<t_keyword>kw?; //парсимstruct/class
t_namename; //парсим имя
" "?
TAutoPtr<t_parent>parent?;
" "?
TAutoPtr<i_struct_impl>body;
};

Читать далее

Как создать свой парсер и AST-генератор на C++ с минимальными усилиями: знакомьтесь с QapDSLv2

Время на прочтение18 мин
Охват и читатели1.3K

QapDSLv2: Новый стандарт AST-heavy парсинга

QapDSLv2 обеспечивает:

Молниеносное построение AST

Полное сохранение структуры исходного кода

Простоту интерпретации и модификации грамматик

Забудьте о любы других парсерах! С помощью QapDSLv2 можно создавать компиляторы/анализаторы/форматировщики кода за минуты/часы.

Парсеры и генерация абстрактных синтаксических деревьев (AST) — это обычно долго, сложно и требует тонны шаблонного кода. Но что если я скажу, что теперь можно описывать грамматики и структуры данных одновременно и получать готовый, оптимизированный C++ код автоматически?

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

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

Готовы ускорить разработку и вывести свои проекты на новый уровень?

QapGen — мощный генератор парсеров, построенный на основе QapDSLv2, который из грамматик QapDSLv2 сразу создаёт высокопроизводительный C++ парсер с типизированным AST, описанным прямо в грамматике.

t_sep{
stringbody =any(" \t\r\n");
}
using" "ast_sep;
t_value{
TAutoPtr<i_value> body;
" "?
}
t_comma_value{
","
t_value body;
" "?
}
t_array:i_value{
"["
" "?
t_value first?;
vector<t_comma_value> arr?;
"]"
" "?
}

Читать далее

Реализм против платонизма. Неполнота Гёделя, неразрешимость Тьюринга и физические основания математики

Уровень сложностиСредний
Время на прочтение56 мин
Охват и читатели6.4K

Многие интеллектуалы склонны называть математику «царицей наук» и преподносить её теоремы как абсолютную истину, полученную чисто логическим дедуктивным выводом безотносительно физической реальности, не опираясь на эмпирические данные. Якобы математические объекты существуют вне пространства-времени, в разуме Бога или в платоновском мире идей, а мы лишь открываем вечные истины: числа и арифметические операции, геометрические фигуры, аксиомы и теоремы, а также правила вывода и доказательства истинности или ложности любых математических утверждений. Говорят, наше сознание имеет прямой доступ к этому миру математических абстракций посредством интуиции – не иначе, как божественного откровения или снисхождения самой истины, открывающейся только тем, кто её достоин.

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

Читать далее

Когда 42 — это цифра: шумеро-вавилонская система счисления с глиняных табличек

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели2.2K

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

Читать далее

Играю я для души, а так у меня бизнес есть. Собрал 22 игры для прокачки навыков предпринимателя

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели24K

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

Кидайте свои примеры в комментарии - какие игры именно вам помогли прокачать свои навыки предпринимателя? Буду дополнять общий список из ваших предложений.

Читать далее

Сложение с подвохом: что мы до сих пор не понимаем в 1 + 1? Гипотеза Эрдеша о множествах без суммы

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели4.8K

Возьмём, к примеру, сложение. Одна из первых истин, которые мы усваиваем: 1 плюс 1 — это 2. Казалось бы, операция элементарная. Но даже она продолжает порождать у математиков вопросы без чётких ответов. Какие глубинные закономерности заложены в сложении? — до сих пор остаётся открытым. «Это фундаментальная операция, — отмечает Бенджамин Бедерт, аспирант Оксфорда, — и тем не менее в ней до сих пор много загадок».

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

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

Читать далее

Регулярные выражения простыми словами. Часть 3

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели6.5K

Разработчики делятся на три типа: тех, кто уже понимает регулярные выражения и порой решает сложные задачи одной строкой; тех, кто все еще боится их и всячески избегает; и тех, кто уже прочитал первую и вторую части этой серии статей и полон оптимизма разобраться с этими магическими письменами. Эта статья специально для третьих, чтобы обратно их напугать, ведь в этой части мы рассмотрим одну из самых сложных, но в буквальном смысле захватывающих тем.
Читать дальше →

Полный гид по 50 идеям, которые формируют современное мышление: от А до Я

Уровень сложностиПростой
Время на прочтение32 мин
Охват и читатели21K

Привет, Хабр! Представьте, что ваш мозг — это IDE, в которой 95% крутых плагинов попросту спят. Мы часто слышим об «Антихрупкости» или «FOMO», но сейчас этого стало настолько много, что я решил аггрегировать всё в одну статью, с примерами, чтобы всем было понятно.

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

Читать далее

Будущее ИИ — формальные грамматики

Уровень сложностиПростой
Время на прочтение19 мин
Охват и читатели1.7K

Почему даже самая мощная LLM иногда выдаёт бессмысленные фразы и противоречия? Всё дело в экспоненциальном росте вариантов (N^M) и свободном копировании человеческих ошибок. Читайте статью, чтобы узнать, как мы с помощью формальных грамматик превращаем хаотичную генерацию в управляемый синтез, усиливая роль семантики и соблюдая структурные правила.

Читать далее

Метод кросс-энтропии: простейшая эвристика для сложнейших задач

Уровень сложностиПростой
Время на прочтение22 мин
Охват и читатели3.6K
Сколько эвристик вы знаете? Муравьи, отжиг, генетика, рой частиц, пчелы, светлячки, кукушки, гуси, совы, летучие мыши, осьминоги, дельфины, киты, шимпанзе, гориллы, львы, слоны, гравитация, электромагнетизм, вода, музыка… количество эвристик уже давно перевалило за полсотни. Все они вдохновлены природными процессами и явлениями, что делает их наглядными и понятными.

Но есть и строго математические методы, например, Байесовская (регрессия Гаусовских процессов) или информационно-геометрическая. Однако, есть один математический метод, выделяющийся на фоне абсолютно всех эвристик своей невероятной простотой и гибкостью, которая оказывается незаменимой в решении самых сложных комбинаторных задач и задач стохастического программирования — это метод кросс-энтропии.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность