Обновить
1456.59

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

3D-шейдер реального времени на Game Boy Color

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

Я написал игру для Game Boy Color, которая рендерит изображения в реальном времени. Игрок управляет источником света и вращает объект.

Поиграть в неё можно здесь: https://blog.otterstack.com/posts/202512-gbshader/data/teapot.html

Посмотреть код и скачать ROM можно здесь: https://github.com/nukep/gbshader

Читать далее

Новости

Заметки на полях: Изолируем Lua окружение в C++ приложении. Часть 3/3

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

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

В этой части разберём как из кубиков с буквами 'О', 'П', 'Ж' и 'А' while true do end

...составить слово "СЧАСТЬЕ".

Структуры данных на практике. Глава 5: Связанные списки — убийцы кэша

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

«Связанные списки — это goto структур данных.», — авторство приписывают разным системным программистам.

История из учебника

Все студенты, изучающие computer science, узнают о связанных списках на первом курсе по структурам данных. Их описание звучит привлекательно:

Преимущества (согласно учебникам):

- Вставки и удаления за O(1) в известных позициях

- Динамический размер: увеличиваются и уменьшаются согласно необходимости

- Пространство не тратится впустую: можно распределять ровно столько, сколько нужно

- Гибкость: простота реализации стеков, очередей и других структур

Недостатки (согласно учебникам):

- Поиск за O(n): необходим обход, начиная с головы списка

- Лишняя память: указатели добавляют оверхед

- Невозможность произвольного доступа: нельзя выполнять переходы в произвольные позиции

Вывод из учебника: «Используйте связанные списки, когда требуются частые вставки/удаления и не нужен произвольный доступ».

Вроде бы звучит разумно?

Проверка реальностью

А вот, чего учебники нам не говорят: связанные списки — это почти всегда плохой выбор.

Не потому, что ошибочен анализ «О» большого, в нём всё правильно, а потому, что он неполон. Он забывает про оборудование.

Читать далее

Я дал 100 AI-агентам равный бюджет — они изобрели кредиты под 15%

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

Дал 100 AI-агентам по 1000 токенов и одну цель — набрать максимум очков. Не программировал ни торговлю, ни кредиты, ни специализацию. Через двое суток агент №23 попросил у агента №91 займ под 15%. К 72-му часу — три банкира, 12 банкротов и коэффициент Джини 0.71. Внутри — код на Python, логи, распределение ресурсов. И честный разбор того в чем я до сих пор не уверен.

Читать далее

Избавляемся от утечек памяти в Angular с withExperimentalAutoCleanupInjectors

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

В версии Angular 21.1 появилась экспериментальная функция маршрутизатора withExperimentalAutoCleanupInjectors. Эта настройка для решения давней, печально известной архитектурной особенности, связанной с управлением памятью при навигации между страницами.

Читать далее

Как запустить новый XBox 360 рекомпилятор RexGlue

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

Инструкция по сборке нового XBox 360 статического рекомпилятора RexGlue https://github.com/rexglue/rexglue-sdk

Читать далее

Open Source: Зачем это тебе на самом деле?

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

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

Рассказываем, как найти актуальный проект, не утонуть в заброшенных Issue и грамотно отправить свой первый PR. А если вы сами развиваете проект то узнаете, как дать ему шанс получить: звёзды, обсуждение, интерес со стороны других разработчиков и первые контрибьюты в дружелюбной среде.

▶ Войти в Open Source

Три аккаунта ChatGPT и один прокси: как перестать следить за лимитами

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

У меня три ChatGPT-аккаунта. На каждом свои лимиты, своя история, свои причины существовать. И на каждом они кончаются в самый неподходящий момент.

Переключаться вручную то ещё удовольствие. Особенно когда работаешь через Codex CLI или OpenCode и хочешь просто писать код, а не следить за тем, на каком аккаунте сейчас крутится запрос.

Именно под эту боль и написан codex-lb.

Читать далее

Архитектурная бомба замедленного действия

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

AI резко удешевил запуск MVP, но может так же резко повысить цену ошибок в архитектуре. Когда основу системы генерирует LLM, команда получает быстрый результат и «черный ящик» с техдолгом внутри. Код работает, а почему он устроен именно так, никто до конца не понимает.

Где именно спрятана бомба замедленного действия и как с этим жить инженерам? Как AI-генерация меняет роль архитектора, почему классические ревью перестают быть достаточными и какие виды тестирования становятся критичными?

Разбираемся далее

Писать код проще, чем книгу о том, как писать код

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

Иногда книга начинается с одной статьи, опубликованной в нужный момент и в нужном Хабре и в моём случае всё действительно началось с публикации про аллокаторы, которая несмотря на обилие технического материала, кода и схем набрала больше всего плюсов среди моих статей на околоплюсовую и игродев разработку. А дальше и сам цикл Game++ постепенно вырос из отдельных технических размышлений о C++, архитектуре движков и производительности в связный нарратив. За спиной Game++ стоит еще больше узкотехнических материалов в блоге и вики моей компании и я бы рад ими поделиться, да и делюсь периодически, но сами понимаете выкладывать можно не всё и даже из то, что выложено на Хабре, частенько было подрезано, ибо NDA и секретные технологии-бла-бла-бла. Та статья стала точкой, когда я увидел, что разрозненные тексты на самом деле образуют скелет будущей книги, нужно лишь перестать относиться к ним как к «постам» и начать воспринимать как главы. Идея написать книгу не пришла просто так, и несколько не связанных между собой людей и компаний связались и предложили переписать цикл статей в виде книги.

Читать далее

Получение списка и содержимого чатов Telegram с помощью TDLib (на примере Kotlin)

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

Когда я стал решать задачу получения сообщений из Telegram для последующего анализа, понял — не хватает простого и понятного введения во взаимодействие с Telegram в роли клиента, а не бота. Официальная документация Telegram отличается от привычной мне документации в мире Java и Rust как по подаче, так и по качеству. Большинство статьей по запросу "how to load chats from telegram" отсылают к высокоуровневым библиотекам на Python.

Главная цель статьи дать основу для разработки приложений на Telegram на среднем уровне абстракции TDLib и взаимодействие с Telegram c помощью посылки и получения сообщения MTProto. В этой статье я постарался раскрыть как надо читать документацию мессенджера, какие существуют способы взаимодействия с платформой и по каким принципам спроектировано API. Во многих местах я не буду давать детальное описание всех параметров, предоставив вместо этого ссылку на документацию. Задача статьи — дать фундамент для разработки своих сценариев. Несмотря на использование Kotlin, информация из статьи будет полезна для любого языка программирования.

Детально раскрыты следующие сценарии взаимодействия: вход в Telegram зарегистрированным пользователем; получение списка чатов и их типизация (каналы, формы и т. п.); получение сообщений из чата.

Погрузиться в TDLib

«Я напишу вам CLAUDE.md, и всё полетит»: как я провалил первую неделю внедрения ИИ и что пришлось менять

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

Честная история о том, как я взялся за проект по внедрению ИИ в разработку во время переезда на новый стек.

Читать далее

Принципы DOD в C++: Часть 1. Оптимизация структур

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

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

Читать далее

Ближайшие события

mise — утилита, необходимая каждому разработчику и в каждом проекте

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

Утилита mise (полное название MISE-EN-PLACE) настраивает необходимое для разработки окружение:

Для разработчика это глобальный набор инструментов (от языков программирования до мелких утилит) нужных версий.

Для проектов это аналогичный набор инструментов (специфичных для этого проекта версий, одинаковых у всех разработчиков и на CI) плюс конфигурация (переменные окружения/зашифрованные секреты для конкретного dev/staging/prod/… окружения плюс локальные отличия) плюс задачи (скрипты) для сборки/тестирования/деплоя/….

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

Читать далее

Как я сделал полностью бесплатное Android-приложение для задач и финансов — и почему не взял ни копейки

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

Мне нужен был простой инструмент: список задач, учёт расходов и таймер для фокусировки. Казалось бы — чего проще?

Но вот реальность...

Читать далее

Ваш браузер — это узкое место для OpenClaw

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

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

По умолчанию OpenClaw управляет локальным браузером. Для пары простых сценариев это ок. Но как только начинается что-то серьёзнее — параллельные сессии, большие флоу — машина становится узким местом. RAM улетает, всё начинает тормозить, прогоны становятся нестабильными. Плюс вы фактически запускаете агента рядом со своим реальным браузером — с куками, сессиями и всем остальным. С точки зрения безопасности это спорное решение.

Firecrawl выкатили решение — Browser S andbox. И это уже инфраструктурный подход, а не «девтул».

Читать далее

Отправить ли интеграционную платформу UTL в утиль?

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

Добрый день, меня зовут Сергей Головкин.

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

В статье я хочу рассказать и показать то, что у меня получилось — Универсальный Язык Трансформаций (UTL) и интеграционная платформа, его реализующая.

Читать далее

10 миллиардов устройств работают на его коде. Он поддерживает его в одиночку. Теперь его атакует ИИ

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

Один шведский разработчик заставляет curl работать на каждом телефоне, автомобиле и консоли на Земле. 47 автомобильных брендов используют его. Никто ему не платит. А теперь ИИ-боты заваливают его почтовый ящик.

Десять миллиардов установок. Один мейнтейнер.

curl - это маленькая утилита командной строки, которая передает данные через интернет. Когда ваш телефон скачивает обновление, когда браузер загружает страницу, когда ваша машина говорит с сервером - что-то должно обрабатывать этот сетевой запрос. На большинстве устройств это «что-то» - curl. Он невидим, он работает везде, и почти никто не знает о его существовании.

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

Даниэль Стенберг взял на себя поддержку небольшого инструмента для загрузки по HTTP в 1996 году. Изначально утилита называлась httpget и была создана Рафаэлем Сагулой. Стенберг значительно расширил ее и переименовал в curl в 1998 году. Он никогда не прекращал поддерживать ее.

Сегодня curl поставляется внутри Windows, macOS, Linux, Android и iOS. Он работает на каждой PlayStation, каждом Xbox и каждой консоли Nintendo. Netflix стримит через него. Spotify стримит через него. Ваш умный телевизор, вероятно, зависит от него. Один шведский разработчик поддерживает работу всего этого.

В 2025 году Швеция назвала Стенберга Разработчиком года. В тот же период он начал писать посты в блоге о выгорании. Он также начал документировать новую угрозу: созданные ИИ фейковые баг-репорты, наводняющие его трекер задач, тратящие часы его времени каждую неделю.

Читать далее

Быстрый запуск виртуального WEB сервера для новичка. Для создания своего простого прокси за 3 копейки

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

Трудно определить аудиторию для кого эта статья. Профессионалы работы в Linux системах наверное просто засмеют, а кто вообще ничего не слышал про Linux возможно вообще ничего не поймет.
Я ее пишу для тех кто немного слышал про Linux и уже знает что такое виртуальный сервер но знаний пока не хватает. А еще возможно как памятку для себя.
На написание статьи меня натолкнула одна проблема, я запустил на своем сервере скрипт который должен был мне собрать данные с одного ресурса. И возникла проблема что IP адрес моего сервера был заблокирован, надеюсь что провайдер сменит мне выделенный IP.
И что бы не сталкиваться с проблемой блокировки выделенного IP адреса и походами к провайдеру с просьбой сменить IP, я решил создать личный прокси для запросов и главное что бы это было недорого.

Есть конечно решение проблемы, а именно использование VPN на сервере. Но тут есть проблема, на сервере работают несколько служб на разных портах и все висят на доменном имени привязанному к IP, а при запуске VPN все службы будут недоступны, а это недопустимо. Лучшем решением стала аренда виртуального сервера (VDS), но проблемой стало то, что многие хостеры в нагрузку добавляют панель управления сервером и конечно не бесплатно.

Ну и ближе к теме, мы не будем платить за панели администрирования, покупаем самый дешевый VDS с выделенным IP, у меня на это ушло примерно 240 рублей за месяц использования в зоне RU и чуть дороже в USA. Характеристики железа VDS слабенькие, но для запуска одного единственного PHP скрипта для анонимизации своих запросов вполне достаточно.

Читать далее

FastAPI на AMD FX-8320: оптимизация P99 latency в условиях ограниченных ресурсов (HDD, DDR3)

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

В 2026 году асинхронный Python уже никого не удивляет. Мы привыкли к автоскейлингу в облаках, но что делать, если ваш бюджет на инфраструктуру равен нулю, а в распоряжении есть только «печка» из 2012 года? Рассказываю про личный опыт выжимания максимума из FastAPI на AMD FX-8320: от тюнинга ядра Linux и PostgreSQL до миграции на Ed25519 и использования Rust-сервера Granian.

Читать далее