Обновить
32K+

Lua *

Скриптовый язык программирования

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

Создаем клиентскую библиотеку ROS2. «Hello ROS»

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

Пару лет назад у меня возникла мысль, почему бы не написать полноценную клиентскую библиотеку ROS2 для языка Lua?.. Увы, результат оказался невостребованным, зато сама разработка позволила лучше понять, как устроен этот фреймворк, а также с интересом провести время, разгадывая логические головоломки.

Создатели ROS2 вынесли базовый функционал в C библиотеку  rcl (ROS Client Libraries). В теории, достаточно создать обертку на каком-либо языке программирования и можно пользоваться. Между тем, сторонних клиентских библиотек не так уж много. На мой взгляд, можно выделить следующие причины:

Читать далее

Новости

Renga STDL: Армирование

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

В статье Renga STDL: краткий обзор языка для расширения функциональности программы Renga мы рассказывали, что такое Renga STDL, как и почему разработчики САПР создали свой предметно-ориентированный язык. Там же мы писали о планах расширения применения этого языка для стилей армирования. Сегодня поделимся результатами, которых удалось достичь в этом направлении.

Стили армирования в Renga нужны для автоматизации армирования монолитных конструкций: стен, колонн, перекрытий, фундаментов, а также усиления стен и перекрытий в местах расположения проемов. В стилях армирования пользователь, задавая параметры, получает сетки, каркасы и арматурные стержни, созданные в объекте. 

Читать далее

Проектируем сервис HTTP-запросов: Kafka, PostgreSQL, Redis-очередь и миллионы логических партиций

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

Ни одна «одна технология» не закрывает это без слоёв. Сначала — почему в стеке именно Kafka, PostgreSQL и Redis; дальше — как мы спроектировали сервис Requester: контекст, движение данных, внутренние воркеры, graceful shutdown, детали rate limit / retry / cache / отложенных задач, wake-up, тестирование и узкое место с большими payload в Redis.

Читать далее

Russian Railway Simulator (RRS): семь лет спустя

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

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

Читать далее

Я сделал скоростной аналог скретча(12289+ скриптов)! История разработки новичка

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

Я только начинаю писать код, он у меня не аккуратный и странный, я его нигде не публиковал никогда, проект писать на luaJIT love 2d, а заголовок правдивый, оно смогло запустить на одном ядре слабого ноутбука 12300 потоков в которых были блоки IF, ROTATE и WHILE TRUE и стабильные 30 fps. https://t.me/Turbo_Scratch/63 Топик в моём тгк с видео демонстрациями, там же если хотите можете протестировать мой проект, но в нём очень много багов особенно связанных с типами данных, lua не типизированный язык, в будущем эти баги я исправлю добавив разные проверки, и проект я выложил чтобы получить мнение общества.

Движок я выбрал не случайно, мне понравился синтаксис lua, этот язык и библиотеку love 2d подсказала ии, на этой же библиотеке написан Pocket Up(аналог pocket code, тоже визуальное программирование), также этот язык использует байт-код и jit компиляцию что по словам ии должно сильно увеличивать скорость. Также love 2d собирается под многие платформы Windows, macos, вроде даже linux, android, ios. Читал офф сайт и нашёл упоминание игры Balatro, я эту игру до этого только раз слышал, но про что она не знаю.

Писал я всё в VS Code, это очень удобный редактор кода, я на нём и другие свои проекты писал. С lua я уже был знаком, так как я уже делал игру на roblox studio, и не так давно, осенью 25 года.

Я сразу хотел писать свой редактор так чтобы он работал на Windows, и собирал проекты в EXE(уже реализовано), apk и html. И чтобы отделить в будущем редактор и интерпретатор игры я разделил проект на части Main.lua - редактор, Micropaint.lua - редактор спрайтов, ну и по мелочи GameLoader.lua - загрузчик игр, BlockList.lua - список доступных блоков, не хотел его лепить в main.lua тк там 518 строк, + я туда ещё добавил функцию отрисовки блоков и удобнее когда функционал разделён на отдельные файлы.

Читать далее

Очередь на Redis с Lua: порядок в партициях, общий пул воркеров и отложенные сообщения

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

Перед командой встала типичная для высоконагруженных сервисов постановка по обработке сообщений:

1. Порядок обработки в рамках одной логической партиции

2. Очень много ключей партиций

3. Ограниченный пул воркеров, который шарится между партициями, при этом одна тяжёлая партиция не должна блокировать остальные

4. Ретраи и отложенные сообщения

Ни одна готовая «одна технология» не закрывает это из коробки без компромиссов. Ниже — как мы к этому пришли и что в итоге сделали в виде библиотеки smart-redis-queue (очередь на Redis, логика в Lua-скриптах).

Читать далее

Lattelua — когда Lua уже мало

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

Если вы хоть раз встраивали Lua в свой проект — будь то игровой движок, высоконагруженный веб-сервер на OpenResty или конфигуратор сложного сетевого оборудования — вы знаете, за что мы его любим:)
А любим мы его — за компактность, быстроту, встраиваемость и предсказуемость. Не любим — за аскетичный синтаксис, отсутствие привычных конструкций и постоянное «изобретение велосипеда».
Эта статья — обзор диалекта Lattelua: зачем он нужен, чем отличается от других диалектов, и почему его особенно удобно использовать в уже существующих проектах, где Lua — встраиваемый язык.

Погнали

АСУТП на молочном заводе и я: 2004 — настоящее время

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

АСУТП — основа современной промышленной автоматизации и инфраструктуры
управления. SCADA-система (Supervisory Control and Data Acquisition) является
частью, которая обеспечивает интерфейс между операторами и оборудованием, а
также сбор и анализ данных в реальном времени. Обычно это программный пакет,
предназначенный для обеспечения работы системы и/или разработки таких систем, —
сухое определение, которое заставляет вспоминать предмет ТАУ (теория
автоматического управления) и ПИД-регулятор. Ничего интересного — одни формулы.
Такие мысли мне тоже приходили в голову в момент распределения после завершения
учебы в университете. Так получилось, что на последнем курсе устроился работать
в классическую IT-контору, но не остался там надолго и пошёл пробовать себя на
молочный завод — в тогда ещё молодой отдел АСУТП. Что из этого вышло, далее попытаюсь
рассказать в этой статье.

Читать далее

Книга: «Roblox: играй, программируй и создавай свои миры. 3-е изд.»

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

Привет, Хаброжители! Что такое Roblox? Это красочная компьютерная платформа для создания и публикации своих игр. Мир Roblox изо дня в день становится все популярней, и ты можешь стать его частью! Если ты мечтаешь стать геймдизайнером и создать свою игру, но не знаешь, с чего начать, эта книга поможет тебе!

Читать далее

Магия понедельников в формате однобитной графики

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

Примерно 4 года назад, листая ролики ретроблогеров, я наткнулся на видео Коли Губанова, известного в этой тусовке как Pixel_Devil. В этом ролике он показывал небольшую оранжевую коробочку с монохромным дисплеем без подсветки (привет, Game Boy DMG-01!) и — что самое необычное — ручкой-крутилкой на боковой стороне.

Как вы уже поняли, это была карманная консолька Playdate. Естественно, после этого мне захотелось немедленно пощупать ее вживую. Но первые партии (всего несколько тысяч штук) раскупали по предзаказу в США, и я решил подождать, отложив приобретение до лучших времен.

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

Читать далее

Forza Tarantool: разработка на C для встроенного сервера приложений

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

Tarantool – это in-memory СУБД с открытым исходным кодом, разрабатываемая VK Tech. Существует два способа разработки приложений для Tarantool. Как и к большинству СУБД, к Tarantool можно подключаться из внешнего приложения по TCP/IP. С этой целью для многих популярных языков программирования (включая Go, Python, C#, С++, Java и др.) разработаны соответствующие коннекторы. Это – первый способ.

Кроме этого, Tarantool обладает замечательной особенностью: он позволяет запускать бизнес-логику на встроенном сервере приложений. В этом случае пользовательский код исполняется в одном адресном пространстве с данными, что обеспечивает высокое быстродействие. Это – второй способ.

Если мы ведем разработку для встроенного сервера приложений Tarantool, то выбор языков программирования более ограничен. Основным языком программирования, в этом случае, является Lua. Также, часть логики может быть реализована на C/C++. Но набор доступных языков расширяется. Например, с некоторого времени, поддерживается Rust. Помимо этого, Tarantool может выполнять Wasm-приложения. Скоро код библиотеки для разработки на Wasm будет открыт.

Tarantool – высокопроизводительная СУБД, часто используемая для построения highload-систем. Какой из вариантов разработки позволяет достичь максимального быстродействия (которое в таких системах будет не лишним)? В настоящей статье я хотел бы рассмотреть возможные способы вызова C-кода из Lua/LuaJIT/Tarantool (в режиме сервера приложений) и то, как это может ускорить и без того быструю СУБД.

Читать далее

Заметки на полях: Изолируем Lua окружение в C++ приложении. Ограничение ресурсов

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

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

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

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

Laurent Voice – система звукового оповещения событий для многофункциональных сетевых контроллеров Laurent

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

Laurent Voice Box - сетевой контроллер для управления и мониторинга с музыкально-речевым озвучиванием событий.

Читать далее

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

Заметки на полях: Изолируем Lua окружение в C++ приложении. Скрипты, модули и контроль путей

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

В прошлый раз мы остановились на том, что в творческом порыве на всём скаку отсекли целый пласт потенциальных возможностей нашкодить при помощи функций стандартных библиотек Lua — доступ к файловой системе и функциям ОС, системным командам и переменным окружения, возможность подгрузки сторонних Lua-модулей и C-библиотек на стороне скриптов и чего только ещё не. Напрочь отсекли.

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

... но можно ослабить удавку.

Книга в Markdown: Автоматическая сборка статического сайта mdBook и файла DOCX с оформлением по ГОСТ

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

Markdown — популярный и удобный язык разметки, но это также и очень ограниченный формат. Поэтому задача написания в Markdown сложной технической документации по ГОСТ, научной статьи с автоматической настройкой оформления для заданного издательства или хорошо оформленного онлайн-учебника может показаться неосуществимой. В этой статье рассмотрим способ работы над научно-техническими статьями и книгами в формате Markdown на основе подхода Docs as Code с учётом строгих ограничений на оформление, используемый Петром Советовым и мной при подготовке учебных материалов в РТУ МИРЭА.

Способ заключается в применении утилиты pandoc для построения дерева абстрактного синтаксиса (AST) Markdown-документа с последующим переписыванием AST набором фильтров на Lua и трансляцией AST в форматы docx и pdf, соответствующие ГОСТ, а также в диалект markdown, совместимый с mdBook, для генерации онлайн-учебника.

Онлайн-версии книг, написанных с использованием описанного подхода, и репозитории с исходным кодом книг опубликованы на GitHub и GitHub Pages: книга по конфигурационному управлению, книга по разработке кроссплатформенных программмных систем.

Читать далее

Заметки на полях: Изолируем Lua окружение в C++ приложении. Стандартные библиотеки

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

Скриптовые языки уже давно и прочно заняли свою нишу в игрострое — они существенно упрощают описание игровой логики, уровней, ресурсов, диалогов, квестов, UI и чего только не. Что позволяет отдать эти задачи целиком и полностью в творческие руки гейм-/левел-/прочих-дизайнеров и других членов команды, которым не нужно обладать знаниями в том же C++. Разделение ответственности, ускорение разработки, облегчение моддинга, возможность по завершению разработки самого движка, вышвырнуть программистов на мороз и стричь купоны на бесконечных дополнениях — в общем, одни только плюсы. Да?

Да.

А ещё дыры в безопасности и ...

... уйма путей уронить стабильность.

Микрофичи, которые хотелось бы шире распространить в языках программирования

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

Большая часть работы по теории языков программирования и проектированию языков программирования касается аспектов (1) и (2), так как именно они наиболее важны, но лично я глубоко увлекаюсь фичами типа (3). Поскольку эти фичи такие мелкие, именно они наиболее активно перетекают из языка в язык, ведь добавить их можно совсем «малой кровью». Сам я много времени провёл за изучением нишевых малопонятных языков, и за этим встречал множество крутых фич из третьей категории — таких, с которыми вы, возможно, никогда не сталкивались. Расскажу о некоторых из них!

Читать далее

Кастомизация Angie (njs, Lua, Perl)

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

Север Angie вобрал в себя всю функциональность, которая десятилетиями формировалась в Nginx. Кроме того, разработчики за несколько лет добавили еще несколько модулей и расширили возможности существующих. Тем не менее, при реализации сложных задач может потребоваться индивидуальное решение, нестандартное поведение сервера и кастомизированная конфигурация. В таких задачах полезно использовать модули для расширения функциональности сервера на базе различных языков программирования: доступны njs, Lua и Perl.

Читать далее

Создаём замыкания С из замыканий Lua

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

Когда я взялся полноценно портировать API Windows с C на Lua, одна из самых интересных и занимательных задач заключалась в том, как делать обратные вызовы к коду C из функций Lua. Без них значительная часть API — например, WNDPROC – осталась бы бесполезной.

Читать далее

USB Power Box – устройство управления 4-канальным модулем реле с помощью USB GPIO Extender из Роутер ОС Микротик

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

USB Power Box для Микротик - USB-управляемый роутером блок реле в корпусе:

• два управляемых выхода питания

• управление из Микротик Router OS

• независимость от "переполюсовки" фазы и нуля

• пока ручная сборка!

Читать далее
1
23 ...