В двадцатом веке, который закончился будто совсем недавно, было много крутых и странных десятилетий. Но мое любимое, конечно, шестидесятые — декада, когда люди придумали, кажется, абсолютно все, от интернета и покорения космоса до стереозвука и нейросетей. Да, изначально все это были по большей части proofs of concept — но какие идеи, какие смелые эксперименты и какие немыслимые результаты! Кажется, люди склонны ретроспективно недооценивать 1960-е, думая, что это просто время хиппи, странной музыки и огромных ящиков с мигающими огоньками. Постараюсь набросать дорожную карту и объяснить, что именно меня так восхищает вот конкретно в этом десятилетии, куда (или, точнее, когда) я бы с удовольствием переселился отсюда.
Эта статья — первая в цикле про десятилетия, которые сформировали наш мир. Лайкайте, если понравилось и хотите следующие.
Читать далееНедавно я посмотрел интересное видео YouTube‑канала «Physics for the Birds». Это видео посвящено матрицам, но для объяснения некоторых операций с матрицами автор использовал флаги. Он показал, как можно разбить флаги по осям, чтобы представить их в виде матриц и сэкономить место на диске. В конце этот пример был применён к реальным матрицам и вычислениям с ними.
Однако это видео дало мне вдохновение: часто флаги бывают очень простыми — несколько разноцветных полос, распространённые элементы наподобие звезды, полумесяца или креста. Если использовать какую‑нибудь схему кодирования, то удастся ли описать флаг Франции
в формате «три полосы: синяя, белая, красная», чтобы декодеру и рендереру достаточно было всего нескольких бит? Как может выглядеть такое кодирование?
Я решил создать нечто подобное.
Читать далееВчера переехал на свой сервер. Сегодня утром обнаружил, что сайт у меня не открывается. Ни из дома, ни с телефона.
Сервер при этом в Москве, у российского хостера. И с ним всё в порядке.
Дальше про то, как я полдня искал причину, какие шесть версий проверил и выбросил, и чем всё кончилось. Если симптомы похожие, в конце готовая методика: что запускать и как читать результат.
Читать далееПятиклассник имеет полное право писать всероссийскую олимпиаду за 9 класс. За младший класс нельзя, за старший — сколько угодно, это прямо прописано в порядке проведения. Почти никто этим не пользуется.
А смысл начинается именно с девятого: региональный этап проводится только для 9-11 классов, и до него олимпиада не даёт ни льгот, ни денег. Отсюда наша стратегия — пять попыток вместо одной.
В статье: что нейросети сделали со школьным этапом, сколько регионы платят за победу (разброс почти в сто раз) и чем закончилась наша попытка набрать бесплатную группу — уведомили 400 человек, пришло ноль.
Читать далееВ предыдущих материалах я рассказывал о разработке робототехнических систем и отдельных узлов управления. В этот раз задача — разработка мобильной платформы для робота-сборщика клубники.
Предполагается, что такой робот перемещается вдоль рядов растений, останавливается в рабочих позициях для сбора ягод и должен уметь реагировать на препятствия, появляющиеся на пути.
Полноценный робот-сборщик — достаточно большая система. В неё должны входить как минимум:
Читать далееСреди тех, кто работает с мультиаккаунтингом, да и вообще использует прокси, существует такая страшилка: если приложение, через которое вы проксируете трафик (читай — антидетект-браузер), не поддерживает UDP (или базово не контролирует сетевые маршруты), ваш реальный IP-адрес может утечь — и тогда сама идея использования прокси теряет смысл. Вы хотите скрыть реальный IP-адрес, но из-за отсутствия поддержки UDP, наоборот, раскрываете его.
Читать почему ваш IP-адрес может утекатьПоследнее время у меня странное состояние. Что-то между усталостью и выгоранием. Старый мир разработки буквально уходит из-под ног, а новый еще до конца не отстроился и можно только догадываться каким он будет. Непонятно, какие навыки будут иметь ценность через год, как теперь оценивать собственную работу и куда вообще двигаться дальше.
И чем больше я на это смотрю, тем чаще думаю: возможно, в текущих реалиях делать свой продукт уже не такая рискованная идея, как казалось раньше.
Читать далееWebGPU даёт прямой доступ к современным возможностям видеокарты: не только к рендерингу, но и к вычислениям общего назначения через compute shaders.
Но насколько далеко это можно довести в обычном браузере? Что произойдёт, если вычисления — это полноценная симуляция с десятками миллионов объектов? Разберемся в этой статье.
Читать далееПублике не доступны внутренние модели фронтиер лабораторий. Я не очень верю про конспирологию в духе «у OpenAI в подвале сидит настоящий AGI, а наружу выдают обрезанный ChatGPT». Модель, которой пользуются её собственные исследователи, и модель, которую она продает вам через API, не обязаны быть одной и той же. Фронтиер лаба создает не одну нейросеть, а фабрику моделей: research-чекпоинты > экспериментальные модели > reward-модели > модели-учителя > модели для генерации синтетических данных > модели-evaluators > дистиллированные студенты > production-модели, и наружу попадает только последний элемент цепочки.
Зачем нужна дистилляция
Допустим, вы обучили чудовищно дорогую модель, которая хорошо рассуждает, пишет код и решает математику, но каждый запрос к ней стоит огромных вычислений. Для исследователя внутри компании это рабочий инструмент, и он того стоит, если на кону триллионные рынки. Для продукта со 100 млн пользователей масштабировать доступ к таким моделям выгодно, поэтому вместо того чтобы гонять её на каждом запросе, её делают учителем: она генерирует качественные ответы, решения, траектории ризонинга, синтетические данные, иногда сами распределения вероятностей, а на этом поведении обучается студент поменьше, которому не нужно воспроизводить учителя целиком, достаточно перенести нужные возможности. Это одна из форм дистилляции знаний, и практика настолько распространенная, что OpenAI прямо предоставляет разработчикам официальный Model Distillation workflow: брать ответы более сильной модели, например GPT-4o или o1-preview, и обучать на них модель дешевле. Формулировка самой OpenAI довольно точная: взять продвинутую модель и получить сопоставимое качество на конкретной задаче при существенно меньшей стоимости. Из этого следует довольно простая вещь: лучшая research-модель и лучшая production-модель оптимизируются по разным функциям, потому что research-модель максимизирует возможности, а production-модель приходится одновременно вытягивать по intelligence, latency, стоимости GPU, throughput, reliability и safety.
Читать далее7 000 лайков, сотня плейлистов — и ни один сервис переноса не справился: у Яндекс Музыки нет API, а Spotify с 2025 года пускает в Extended quota только юрлица с 250k MAU и режет всех остальных суточной квотой. Разбираю, почему ломаются посредники, и показываю код: журнал прогресса с fsync, корректная обработка 429 без urllib3, матчинг треков по длительности вместо первого результата поиска, и три бага тихой потери данных, которые нашлись по дороге.
Читать далееНа одном из проектов (4Х историческая стратегия) появилась задача убрать часть логики в потоки, отдав им снапшот игрового состояния, чтобы пока основной поток считает свой тик, остальные (AI, поиск пути, UI и др) могли крутить свою логику, вроде "кто стоит в этой локации" и делать это без блокировок или риска увидеть половину чужой записи. Чтобы реализовать такую систему, надо придумать как получить обратный индекс полка по локации, причем сделать поиск дешевым для потоков, т.е. у потока должен быть свой снапшот состояния некоторой части игрового мира на момент старта апдейта (кадра, тика логики, дня, месяца и т.д)
Общепринятая практика - это сделать данные иммутабельными на время кадра, и построить нужный индекс один раз на старте, а дальше дать читателям возможность работать с ним. И вообщем от ребят, которые делали эту задачу на ревью прилетел вот такой код (выделю тут только основную часть):
std::vector<std::vector<unsigned int>> regiments(location_count);
Такая структура называется jagged array, массив массивов (зачем она и как с ней работать я показывал в книге Game++), или, если вам ближе академическая терминология, CSR (compressed sparse row) немного другая форма записи таких массивов, либо разреженные матрицы. И такие структуры довольно частое явление в играх, если у вас много локаций и вам надо узнать какой лут разложен в каждой локации, какие армии принадлежат каждой области, или какие монстры живут в локации, какие локации входят в область, какие области в регион, или почекать соседей локации на карте, adjacency region, на чем строится весь поиск путей и вся заливка областей в глобальных стратегих;
Читать далееЯ тут недавно пытался попасть на бесплатные курсы от Aston, но получил отказ с такой формулировкой.
Денис, добрый день! После изучения вашей анкеты, к сожалению, мы не готовы пригласить вас к дальнейшему рассмотрению на обучение в компании. У нас очень большой поток кандидатов на курсы. В данный момент взяли в рассмотрение участников с показателями выше. Ваша анкета будет сохранена, возможно, вернемся к вашей кандидатуре, при наборе на следующий поток. Благодарим за внимание к нашей компании.
Хотя я даже не понял, как смогли оценить мои показатели и в чем они измерялись, если не давали ни тестового задания, ни собеседования. В анкете у них несколько вопросов и уровень образования. Но да ладно, это тема отдельной статьи.
Сегодня хочу попробовать пройти тестовое задание от клауд.ру. Оно охватывает тот самый стек для devops, linux, docker, git, kubernetes.
На первый взгляд, задание кажется не таким уж и сложным, однако, дьявол кроется в деталях и есть неоднозначное право выбора, которое будет зависеть от ситуации.
Тестовое задание состоит из 4 задач, начнем с первой.
Читать далееПочему одни технически сложные проекты доходят до рабочего результата, а другие годами сжигают бюджеты и остаются на бумаге? История Разностной машины Бэббиджа — почти современный кейс про разрастание требований, инженерный перфекционизм и цену решений, которые слишком долго откладывают финальную сборку.
Читать историюТри атрибута, которые меняют результат компиляции. Один запускает метод раньше Main. Второй передаёт текст выражения вместо результата. Третий ускоряет stackalloc в 50 раз.
Все три описаны в документации и применяются внутри .NET. А в рабочем коде я их ни разу не видел.
Читать далееРанее в «Базовые модели надежности отказоустойчивого кластера» [2] были показаны теоретические подходы к построению моделей (непрерывная цепь Маркова, CTMC, Continuous‑Time Markov Chain) отказоустойчивого кластера (fault‑tolerant cluster).
Предлагаемый ниже практикум «Промпт‑инжиниринг для моделей надежности отказоустойчивого кластера» имеет цель популяризации практических расчетов надежности «подручными средствами» — через ИИ/AI (искусственный интеллект через AI‑чат, например, ChatGPT). Задача — формализовать промпты для формирования модели надежности и проведения по ней расчета стационарного коэффициента готовности, Кг.
Промпт (prompt) — запрос, текстовая инструкция, которую пользователь даёт нейросети.
Промпт‑инжиниринг — практика проектирования, итерации и верификации текстовых инструкций (промптов) для получения предсказуемых, точных и воспроизводимых результатов от больших языковых моделей (LLM).
Коэффициента готовности, напомним [1], что Кг — численно равен вероятности застать систему (в данном случае кластер) в одном из ее работоспособных состояний (сложение вероятностей каждого такого состояния). Предлагаемые подходы могут быть применены и для других сложных резервируемых структур с учетом ограничений СТМС: случайный процесс «без памяти» с дискретными состояниями и непрерывным временем, а также экспоненциальное распределение времён до отказа/восстановления, независимость отказов компонентов, см. [6], [7].
Специализированные для расчетов надёжности пакеты RAS (Reliability, Availability, and Serviceability) типа SHARPE, MEADEP, RAScad, CARMS, RAPTOR и тому подобное позволяют строить и рассчитывать сложные модели. Есть более простые системы (и бесплатные), которые можно использовать для рассмотренных ранее моделей надежности отказоустойчивого кластера, например, relind.ru. Можно использовать универсальные средства (не специализированные под расчет надёжности), например, для расчета марковских цепей, или расчеты делать непосредственно в Matlab и Mathcad и подобных. Однако все это требует достаточно высокий «порог входа» и имеет встроенные в конкретный soft‑продукт ограничения, как, по существу, так и по визуализации.
Читать далееПосле вчерашнего выпуска Linux 7.3-rc3 в код было включено важное исправление, устраняющее скрытую ошибку, приводившую к потере данных в пользовательском пространстве, которая существовала в ядре на протяжении последних трёх лет.
В начале месяца была обнародована информация о данной ошибке, а также опубликована небольшая программа на языке C, позволяющая ее воспроизвести. Если ядро работает с включенной поддержкой «transparent hugepages» (THP) и с ограничениями через cgroup, то записи, выполняемые после вызова MADV_FREE, могут быть полностью потеряны.
Эта ошибка не является гипотетической, она проявилась в производственной среде. Для её проявления требуется определённое сочетание использования «transparent hugepages» (THP), вызова MADV_FREE и высокой нагрузки на механизм освобождения памяти. Этот патч исправляет ошибку и сводится к изменению всего одной строки кода.
Патч был включён в рамках слияния x86/urgent на этой неделе. Он также помечен для обратного портирования в текущие поддерживаемые стабильные версии ядра. Ошибка появилась ещё в июле 2023 года и присутствовала в выпусках ядра, начиная с Linux 6.6.
Почему миллионы начинающих пользователей боятся «нажать не туда», а видеоуроки не формируют практических навыков? Рассказываю, как создала интерактивный симулятор настольных ОС (Windows 10, 11 и Linux) с уроками и мини-играми и как это помогает безопасно осваивать компьютерную грамотность прямо со смартфона.
Читать далееМне в комментариях объяснили, что кетчуп и гречку одной линейкой мерить нельзя. Согласился, полез делать - и застрял на первом же шаге: категории в базе такие, что среднее по ним считать бессмысленно.
Читать далееЕсли говорить о внедрении систем видеомониторинга на стройку, то здесь стоит отметить важный фактор. Речь идёт об обучении модели непосредственно для внедрения на объект. В этом материале расскажу про данные, классы, разметку, особенности датасета и другие параметры, которые стоит учитывать при масштабировании системы.
Минимальный объём данных, необходимых для работы
Основываясь на своём опыте, скажу, что для обучения одного класса необходимо примерно 3-4 тысячи размеченных изображений. Это число не будет универсальным минимумом для любой нейросети, это больше рекомендуемый стартовый объём в рамках того подхода, с которым мы работаем.
Сложность классов, а также разнообразие условий здесь играют важную роль. Если объект крупный и его легко различить, то нам потребуется одно покрытие. Если же объект маленький и находится на заднем плане, то в таком случае необходимо другое покрытие. Иногда приходится использовать сотни тысяч реальных размеченных кадров, и тогда, как правило, применяется аугментация. Чтобы проверить, готова ли модель к production, нужно прогнать её на тестовой выборке. Если данных много - это хорошо, но важно понимать, представлены ли в этих данных условия, в которых системе предстоит работать.
Читать далееРазбираю находку из технического аудита сервиса аренды авто: вебхук /payments/webhook/yukassa помечал бронь оплаченной по одному полю из тела запроса, которое присылает клиент, а не банк. Файл аудита датирован 5 июля 2026, фикс смержен 8 июля — привожу код до и после, тесты и то, что мы сознательно не стали чинить в этом же PR.
Читать далее