OpenMW 0.50.0 Released – open-source Morrowind reimplementation
Вышел OpenMW 0.50.0 — крупное обновление с переработкой геймпада, первыми шагами по дехардкодингу боя, расширением Lua API и долгожданной функцией быстрого переноса предметов. Разработчики улучшили поведение ИИ: кэширование проверки скрытности теперь длится 5 секунд, а NPC игнорируют недостижимые точки пути, что делает игру более предсказуемой. Сохранения совместимы с предыдущей версией 0.49.0, а настройки теперь сохраняются при выходе из окна, а не только из игры.
Известные проблемы включают возможные зависания на Windows при долгой загрузке, баги с рендерингом на Apple Silicon (решается включениемPerPixelLighting), случайные сбои OpenMW-CS на Linux/macOS и проблемы с аппаратным сглаживанием на AMD RX 6000/7000 из-за ошибки драйверов.
Комментарии (87)
- OpenMW и другие проекты-ремейки продолжают развивать классические игры, сохраняя их дух и предоставляя им новую жизнь.
- Сообщество моддеров и разработчиков вносят вклад в такие проекты как OpenMW, OpenRA и CorsixTH.
- Проекты-ремейки, такие как OpenMW, предоставляют возможность играть в классические игры на современных системах и с улучшенной производительностью.
- Проекты-ремейки и их сообщество продолжают развивать и поддерживать эти игры, которые иначе были бы потеряны в истории.
- Проекты-ремейки, такие как OpenMW, являются примером того, как сообщество может сохранить и продолжать развивать классические игры, которые иначе были бы потеряны.
Wren: A classy little scripting language
Wren — это маленький, быстрый, объектно-ориентированный скриптовый язык с поддержкой concurrency. Его реализация занимает менее 4000 строк кода, что позволяет изучить весь код за один день. Язык сочетает в себе идеи Smalltalk, Lua и Erlang, предлагая современный и понятный синтаксис. Wren использует быстрые однопроходный компилятор в байт-код и компактное представление объектов, что позволяет ему конкурировать с другими динамическими языками.
Особенностью Wren является акцент на классах как основной парадигме и встроенная поддержка легковесных волокон (fibers) для организации программы в набор взаимодействующих корутин. Язык создан для встраивания в приложения — он не имеет зависимостей, имеет небольшую стандартную библиотеку и простой C API. Wren компилируется как C99, C++98 или более новые версии, доступен для запуска в браузере и открыт на GitHub под руководством Боба Нистрома.
Комментарии (43)
- Wren — язык, который сочетает в себе лаконичность Lua и объектно-ориентированный синтаксис, но при этом остаётся компактным и легко встраиваемым.
- Пользователи отмечают, что Wren легко встраивается в C/C++ проекты, но при этом не требует сложных зависимостей, что делает его привлекательным для встраиваемых скриптовых языков.
- Некоторые участники обсуждения упоминают, что Wren может быть использован как альтернатива Lua, особенно в контексте встраивания в игровые движки и другие приложения.
- Обсуждается также, что Wren имеет активное и дружелюбное сообщество, что способствует его развитию и поддержке.
Lux: A luxurious package manager for Lua
Lux - новый менеджер пакетов для Lua, позиционируемый как "роскошное" решение для управления зависимостями. Проект разработан сообществом lumen-oss и доступен на GitHub. Хотя подробные технические спецификации в предоставленном тексте отсутствуют, название предполагает фокус на улучшенном пользовательском опыте и возможно расширенных возможностях по сравнению с существующими решениями.
В экосистеме Lua уже существуют менеджеры пакетов как LuaRocks, поэтому Lux, вероятно, стремится предложить альтернативу с уникальными особенностями. Точный набор функций, совместимость и преимущества по сравнению с аналогами остаются неясными без доступа к документации проекта.
Комментарии (27)
- Пользователи обсуждают, что выбор TOML вместо Lua для конфигурации в проекте Lux обусловлен в первую очередь эргономикой и простотой, а не только лишь из-за того, что Cargo использует TOML.
- Участники спора поднимают вопрос о том, что выбор TOML вместо Lua может быть неоправданным, так как Lua лучше подходит для конфигурации, и что выбор TOML может быть вдохновлен Cargo, а не техническими требованиями проекта.
- Некоторые участники высказывают мнение, что использование излишне пафосных эпитетов для описания технических проектов может быть излишне, и что вместо этого следует демонстрировать качества проекта в действии.
- Также обсуждается, что проект вроде Lux не должен позиционировать себя как менеджер пакетов, а как проект-менеджер, и что он не должен быть ограничен только лишь уровнем "сделанности" вместо того, чтобы быть полезным.
The evolution of Lua, continued [pdf] 💬 Длинная дискуссия
Созданный в 1993 году в Бразилии, Lua стал одним из ведущих скриптовых языков, особенно в разработке игр. С 2007 года язык эволюционировал через серию Lua 5, добавив современные функции: сопрограммы для многопоточности, полную лексическую область видимости и метатаблицы для расширяемой семантики. Важные изменения включают введение целочисленного типа, улучшение сборки мусора с детерминированной финализацией и эволюцию глобальных переменных.
Lua сохраняет лёгкость и встраиваемость, будучи компактной C-библиотекой, что позволяет легко интегрировать его в хост-программы. Версии Lua 5.x несовместимы на уровне ABI, требуя перекомпиляции для встраивания, но сохраняют стабильность в рамках одной версии. Социальным маркером стало широкое принятие либеральной лицензии MIT и влияние LuaJIT, который продлил жизнь версии 5.1. Практический вывод: баланс между инновациями и стабильностью ключевой для долголетия языка.
Комментарии (161)
- Обсуждаются преимущества Lua как легкого, быстрого и удобного для встраивания языка, особенно в сравнении с JavaScript и Python.
- Упоминаются проекты для запуска Lua в браузере (например, Fengari, Nelua) и проблемы взаимодействия с DOM.
- Затрагивается история развития языков программирования в 90-х годах и место Lua среди них.
- Обсуждаются особенности Lua, такие как 1-индексация, отсутствие
continue, метатаблицы, а также новые версии (Lua 5.5, Luau). - Участники делятся ресурсами для изучения Lua и областями его применения (игры, Neovim, Roblox, скриптование в C++).
RediShell: Critical remote code execution vulnerability in Redis
Обнаружена критическая уязвимость удалённого выполнения кода в Redis (CVE-2025-49844) с максимальным баллом CVSS 10.0. Проблема связана с ошибкой Use-After-Free, присутствующей в коде около 13 лет, которая позволяет аутентифицированному злоумышленнику выполнить произвольный код на хосте через специально сформированный Lua-скрипт.
Уязвимость затрагивает все версии Redis и представляет особую опасность, учитывая распространённость системы в 75% облачных сред. Атака позволяет получить полный контроль над системой, включая кражу, шифрование данных и перемещение внутри инфраструктуры. Эксплуатация требует лишь отправки вредоносного скрипта, что делает угрозу высокой для публично доступных экземпляров Redis.
Комментарии (44)
- Уязвимость в Redis (CVE-2024-XXXX) позволяет выполнить произвольный код после аутентификации через уязвимость use-after-free в Lua-скриптах.
- Критичность уязвимости (CVSS 10) оспаривается, так как для эксплуатации требуется аутентификация или доступ к Lua-скриптам, что редко встречается в типичных конфигурациях.
- Проблема усугубляется большим количеством экземпляров Redis (десятки тысяч), публично доступных в интернете без настроенной аутентификации.
- Уязвимость существует в коде более десяти лет, исправлена в Redis 8.1.4 и форке Valkey, но многие системы остаются незащищенными.
- Обсуждаются проблемы безопасности по умолчанию в Docker-конфигурациях и необходимость обновления устаревшей версии Lua в проектах.
Why I chose Lua for this blog
Автор перевел свой блог с Racket на Lua, чтобы снизить сложность и обеспечить долгосрочную стабильность. Основная причина — разочарование в быстро меняющихся экосистемах вроде JavaScript и Ruby, где постоянные обновления и ломающие изменения усложняют поддержку. Lua привлек медленным развитием: между версиями 5.1 (2006) и 5.4 (2020) различия минимальны, а язык требует лишь компилятора C89.
Блог работает по старинке — через CGI-скрипты, с SQLite в качестве базы и шаблонизацией Mustache. Несмотря на кажущуюся архаичность, автор ценит простоту, минимальное количество зависимостей (около десяти) и возможность писать собственные легковесные библиотеки. Ключевой вывод: блог — это пространство для экспериментов, где можно отказаться от модных инструментов в пользу того, что действительно работает и приносит удовольствие.
Комментарии (135)
- Предложение возродить создание собственных движков для блогов как учебного проекта для инженеров из-за его низкого риска и возможностей для экспериментов.
- Обсуждение выбора Lua как стабильного и минималистичного языка для веб-разработки, несмотря на его недостатки (1-based индексация, разрыв между версиями, мало стандартных библиотек).
- Критика сложности современных стеков для блогов и аргументы в пользу простых решений: статические генераторы (Hugo), чистый HTML или минимальные скрипты (Python, Lua).
- Упоминание альтернативных технологий и подходов: Redbean, Perl, Caddy, XSLT, Web Components, Fennel, OpenResty и другие.
- Подчёркивание важности личного выбора, удовольствия от процесса и независимости от внешних сервисов при создании блога.
Luau – Fast, small, safe, gradually typed scripting language derived from Lua
Lua_u_
Lua_u_ (строчная u, /ˈlu.aʊ/) — это быстрый, компактный, безопасный, постепенно типизированный встраиваемый язык сценариев, основанный на Lua.
Мотивация
Примерно в 2006 году Roblox начал использовать Lua 5.1 в качестве языка сценариев для игр. Со временем мы значительно развили реализацию и язык: для поддержки растущей сложности игр на платформе Roblox, увеличения размеров команд и написания большого объёма кода (более 1 млн строк к 2020 году) нам пришлось инвестировать в производительность, удобство использования, инструменты языка и ввести постепенную систему типов. Подробнее…
Песочница
Luau ограничивает набор стандартных библиотек, доступных пользователям, и реализует дополнительные функции песочницы для возможности запуска непривилегированного кода (написанного разработчиками игр) вместе с привилегированным кодом (нашим). Это создаёт среду выполнения, отличающуюся от традиционной для Lua. Подробнее…
Совместимость
По возможности Luau стремится быть обратно совместимым с Lua 5.1 и одновременно включает функции из более поздних версий Lua. Однако Luau не является полным надмножеством более поздних версий Lua — мы не всегда согласны с решениями Lua и имеем другие варианты использования и ограничения. Все функции Lua после 5.1, а также их статус поддержки в Luau, документированы здесь.
Синтаксис
Luau синтаксически обратно совместим с Lua 5.1 (код, действительный для Lua 5.1, также действителен для Luau); однако мы расширили язык набором синтаксических функций, делающих его более привычным и эргономичным. Синтаксис описан здесь.
Анализ
Для упрощения написания корректного кода Luau включает набор инструментов анализа, которые могут выявлять распространённые ошибки. Они состоят из линтера и проверки типов, интегрированных в исполняемый файл командной строки luau-analyze. Проверки линтера описаны здесь, а руководство по проверке типов можно найти здесь.
Производительность
В дополнение к полностью кастомному фронтенду, реализующему парсинг, линтинг и проверку типов, среда выполнения Luau включает новый байткод, интерпретатор и компилятор, сильно оптимизированные для производительности. Интерпретатор Luau может конкурировать с интерпретатором LuaJIT в зависимости от программы. Также доступен опциональный компонент для ручной JIT-компиляции на платформах x64 и arm64, который может значительно ускорить определённые программы. Мы продолжаем оптимизировать среду выполнения и переписывать её части для ещё большей эффективности. Хотя наша общая цель — минимизировать время, которое программисты тратят на настройку производительности, некоторые детали о характеристиках производительности предоставлены для любознательных.
Библиотеки
Как язык Luau является полным надмножеством Lua 5.1. Что касается стандартной библиотеки, некоторые функции пришлось удалить из встроенных библиотек, а некоторые — добавить; обратитесь к полной документации для подробностей. Когда Luau встраивается в приложение, сценарии обычно получают доступ к дополнительным функциям библиотек, специфичным для приложения.
© 2025 Roblox.
Комментарии (74)
- Переход на Luau обусловлен системой типов, но язык имеет шероховатости и слабую документацию, а сообщество практически отсутствует.
- Luau значительно сложнее и объёмнее стандартного Lua, что связано с реализацией системы типов и дополнительных возможностей.
- Существуют альтернативные реализации и среды выполнения Luau, такие как Lune, предназначенные для использования вне Roblox.
- Сообщество отмечает проблемы обратной совместимости между различными форками Lua (LuaJIT, Luau, PUC Lua), что создаёт фрагментацию.
- Luau сравнивают с Teal, но они fundamentally разные: Teal — это транспилятор, а Luau — полноценный форк Lua с собственной средой выполнения.
- Разработчики Roblox работают над улучшением поддержки Luau вне своей платформы, включая создание standalone-рантаймов.
- Несмотря на критику, инженерные решения в Luau, особенно в области производительности, оцениваются как впечатляющие.
Fenster: Most minimal cross-platform GUI library
fenster — сверхкомпактная кроссплатформенная GUI-библиотека.
-
Особенности:
- Окно, пиксельный буфер, ввод с клавиатуры/мыши.
- Один
.hфайл, ~400 LOC, зависимости: X11 (Linux), Cocoa (macOS), Win32 (Windows). - Поддержка C/C++, Zig, Odin, Rust, Go, JS (WASM), C#, Swift, Pascal, Nim, Lua, Python, Ruby, OCaml, Fortran.
-
Быстрый старт (C):
#define FENSTER_IMPL
#include "fenster.h"
int main() {
struct fenster f = {.width = 320, .height = 240, .title = "demo"};
uint32_t buf[320*240];
for (fenster_open(&f); fenster_loop(&f) == 0; ) {
// рисуем
fenster_sync(&f, buf);
}
return 0;
}
-
Сборка:
cc demo.c -o demo(Linux:-lX11, macOS:-framework Cocoa, Windows: без флагов). -
API (C):
fenster_open,fenster_close,fenster_loop,fenster_sync.- Поля:
width,height,title,keys[64],mouse.
-
Лицензия: MIT.
Комментарии (31)
- Fenster — это минимальная C-библиотека, создающая окно с пиксельным буфером, а не полноценный GUI с кнопками и меню.
- Участники отмечают отсутствие скриншотов и просят добавить их в README.
- Название «Fenster» переводится как «окно» на немецком, африкаанс, шведском и других языках.
- Некоторые считают polling-цикл ошибкой, другие считают его допустимым для такой простой задачи.
- В блог-посте нашли опечатку в sizeof и ограничение кода 8-битными цветами.
- Проект вызывает интерес для визуализации данных и как лёгкая альтернатива raylib.
Librebox: An open source, Roblox-compatible game engine
Librebox-demo — репозиторий движка Librebox: открытой альтернативы Roblox.
Цель — совместимость с Roblox-играми и инструментами, но без проприетарных ограничений.
Ключевое
- Язык: C++ + Lua
- Лицензия: MIT
- Статус: ранняя альфа
- Сборка: CMake + vcpkg
Быстрый старт
git clone https://github.com/librebox-devs/librebox-demo.git
cd librebox-demo
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release
cmake --build build
./build/librebox
Функции
- Загрузка
.rbxlи.rbxm - Базовый рендер OpenGL/Vulkan
- Серверный режим headless
Планы
- Поддержка плагинов
- Web-клиент
- Мобильные порты
PR и issue приветствуются.
Комментарии (66)
- Librebox — это пока демо с очень ограниченным подмножеством API Roblox; серверов и сети нет.
- Пользователи надеются на Linux-клиент и сохранение творений Roblox, но опасаются юридических проблем.
- GitHub и Discord проекта выглядят странно: разработчики скрыты, активности мало, но код реально пишется.
- Некоторые считают, что такие проекты важнее для Roblox, чем борьба с хищниками на платформе.
- Есть предложения переименовать в OpenBox из-за лицензии MIT, но другие напоминают, что MIT — это тоже «свободно».
Комментарии (45)
- Игроки в восторге от пиксель-арта и атмосферы, но все застревают во второй комнате и не понимают, что делать дальше.
- Автор признал, что это пока лишь демо из двух комнат, а полноценная игра требует много времени и ресурсов.
- Проблемы с обнаружением объектов, неочевидный курсор-рука и внезапно громкий звук вызывают недоумение.
- Проект не работает на мобильных устройствах, иногда грузится бесконечно из-за Cloudflare Pages.
- Движок написан с нуля на SDL3 + Lua, исходники выложены на GitHub.
Website is served from nine Neovim buffers on my old ThinkPad
Кратко: плагин nvim-web-server на чистом Lua отдаёт HTTP-запросы прямо из открытых буферов Neovim, без внешних зависимостей, с нативной поддержкой Djot и быстрее Nginx.
Почему так быстро?
- Однозадачность: только статика.
- libuv + асинхронный I/O Neovim.
- LuaJIT: NaN-тегинг, отсутствие boxing чисел, allocation sinking.
- aiohttp тормозит из-за парсера на чистом Python и boxing в CPython.
Бенчмарк, RPS (среднее):
| сервер | 1 | 50 | 100 | 200 | 400 |
|---|---|---|---|---|---|
| nvim-web-server | 3981 | 15284 | 15124 | 14476 | 14446 |
| Nginx | 4451 | 11306 | 11576 | 10011 | 10461 |
| aiohttp | 6391 | 8477 | 8448 | 7696 | 7132 |
Развёртывание: живёт на старом ThinkPad, 9 буферов — весь сайт.
Безопасность: да, но мелочи мы игнорируем.
Комментарии (17)
- Пользователи в восторге от статьи: называют её «одной из любимейших» и приводят цитату «они были так заняты тем, могут ли, что не спросили себя, стоит ли».
- Кто-то отмечает, что сайт резолвится на IP Linode, но не объясняется, зачем нужен промежуточный сервер.
- Обсуждают безопасность: пример показывает, что «никогда не бывает так, чтобы код точно не запустили по сети».
- Некоторые шутят, что Neovim теперь можно считать кроссплатформенным рантаймом «ужаса», но признают крутость эксперимента.
- Предполагают, что высокая скорость может быть из-за хранения файлов в RAM, а не на диске, и что всё равно всё закешируется.
LL3M: Large Language 3D Modelers 🔥 Горячее 💬 Длинная дискуссия
LL3M — система, где несколько LLM пишут Python-код для Blender, создавая и редактируя 3D-модели по текстовым запросам. В отличие от прежних подходов, ограниченных примитивами, LL3M свободно формирует геометрию, компоновку и материалы. Код служит представлением объекта, что позволяет автоматическую и пользовательскую итеративную доработку.
Процесс
- Создание — первичная модель.
- Авто-улучшение — самокоррекция ошибок и упрощённой геометрии.
- Пользовательская доработка — интерактивные правки по запросу.
Возможности
- Разнообразие форм: архитектура, инструменты, скейтборд и т.д.
- Стилизация: один запрос «в стиле стимпанк» меняет геометрию и материалы разных шляп.
- Материалы: процедурные шейдеры, редактируемые узлы.
- Последовательные правки: сохраняется идентичность объекта.
- Прозрачность: читаемый код с комментариями, понятные параметры в Blender.
- Повторное использование: общие паттерны кода переносятся между категориями объектов.
- Сцены: генерация иерархий объектов с корректными пространственными связями.
Комментарии (173)
- Пользователи делятся опытом: meshy.ai превращает упрощённые 2D-изображения в 3D-модели, а Claude помогает писать Lua-скрипты для Aseprite и Python для FreeCAD/Blender.
- Ветераны Blender критикуют качество и высокий полигон-счёт, считая инструмент «игрушкой» или «обучающим» для новичков.
- Сторонники видят в этом будущее «solo-dev»: быстрый прототип, экономия времени и API-first подход в креативных пакетах.
- Поднимаются вопросы безопасности (несэндбоксированный Python), прав и монетизации опыта художников, а также необходимости понимания 3D-семантики для эффективных промптов.
- Общий консенсус: сейчас это «cute», но каждая новая итерация будет лучше, и генеративные модели всё ближе к «говорящим на языке геометрии».
ESP32 Bus Pirate 0.5 – A hardware hacking tool that speaks every protocol
ESP32-Bus-Pirate — компактный хардварный хак-инструмент на базе ESP32-S3.
Поддерживает I²C, SPI, UART, 1-Wire, JTAG, SWD, CAN, LIN, MIDI, PWM, GPIO, WS2812 и др.
Управляется через веб-CLI (Wi-Fi AP или STA), OTA-обновления, JSON-API, скрипты Lua.
Особенности
- 2×15 пинов, 3,3 В/5 В, защита 5 В-толерантность
- Питание USB-C 5 В или внешнее 5–12 В
- ЖК-дисплей 0,96" SSD1306, RGB-LED, 2 кнопки
- Автономный режим: скрипты в EEPROM, запуск по кнопке
Прошивка
- PlatformIO:
pio run -t upload - OTA:
http://<ip>/update
Сборка
- Плата 4-слойная, 50×25 мм
- BOM ≈ 15 $, JLCPCB+SMT
Быстрый старт
- Подключить USB-C → точка доступа
BP-XXXXXX, парольbuspirate. - В браузере
192.168.4.1→ вкладка Terminal. i2c scan— найти адреса,spi flash id— ID чипа.
Команды
mode i2c 100— 100 кГц I²Cuart 115200— UART 8N1ws2812 10,255,0,0— 10 красных LED
Сценарии
- Дамп SPI Flash, брут I²C, JTAG-отладка, LIN-шина авто.
Комментарии (31)
- Новый Bus Pirate — не клон, а полностью переписанный проект, вдохновлённый оригиналом и полностью открытый.
- Пользователи уже заказывают железо (T-Embed CC1101, M5StickC2) и собираются тестировать.
- Главная фишка — поддержка 83 ИК-протоколов, что облегчает интеграцию кондиционеров в Home Assistant через ESP32.
- Некоторые жалуются: ИК всё-таки не CAN-bus, поэтому в автомобилях и новых e-bike устройство не так полезно.
- Для «неподдерживаемых» протоколов советуют подключать осциллограф и/или добавлять код самостоятельно.