Как стать автором
Обновить
7.3

Lua *

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

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

Новые возможности в скриптах Роутер Ос 7 Микротик

Время на прочтение 10 мин
Количество просмотров 7.7K
Lua *Сетевое оборудование
Появления Роутер ОС 7 давно ждали. Новая система создавалась разумеется для более производительных устройств, имеющих новые процессоры и больше оперативной памяти. Новое ядро Linux, поддержка WireGuard и ZieroTier, новые возможности маршрутизации и BGP, новый users manager, обновление MPLS, запуск приложений в контейнерах далеко не полный список новинок.

Но в этой статье мы будем обсуждать нововведения только в скриптовом языке системы вплоть до актуальной beta версии 7.12.
Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 23

Новости

Lua FFI

Уровень сложности Средний
Время на прочтение 20 мин
Количество просмотров 2.1K
Программирование *Assembler *C *Lua *Разработка под Windows *
Туториал
Под катом описание довольно примитивного FFI для Lua под Win_x64.

Но который, тем не менее, позволяет делать:

local ffi = require ("ffi")
local msg = ffi("user32.dll", "MessageBoxA")
msg(0, "Message", "Title", 0)

или взять, например glfw3.dll, и путём

local glfw = ffi("glfw3")

сделать все экcпортируемые библиотекой glfw3.dll функции доступными для вызова из Lua.

Размер самой ffi.dll при этом получился аж 9 Кбайт, вот она целиком на картинке размером 32х96 пикселей. Можно сохранить это изображение, сконвертировать в bmp (хабр не умеет в bmp, пришлось дополнительно упаковать в png), потом руками удалить первые 54 байта заголовка (до 'MZ') и пользоваться.


Но очень осторожно, так как в результате всё-таки получилось, что в аккуратную детскую песочницу Lua залезли грязными сапогами, притащили туда всякие небезопасные штуки из С, вроде ручного управления памятью и обращения с указателями вида *(double*) (void * ptr), и вообще использование таких вещей учит всякому нехорошему.

Тут недавно выходил ряд статей про «вредные советы» в программировании «60 антипаттернов для С++ программиста». Под катом можно найти практическое воплощение большинства из них, не всех конечно, но только потому, что не все из них применимы к С, без плюсов :)
Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 6

Как создать свой мод для Cyberpunk 2077? Шерстим исходники, Lua, C++ и Python

Время на прочтение 16 мин
Количество просмотров 5K
Блог компании Selectel Python *C++ *Разработка игр *Lua *
Туториал

Недавно мой коллега @Doctor_IT попросил помочь с его проектом — VR-жилетом, который «проецирует» ощущения урона, которые получает персонаж, на тело игрока. С моей стороны — мод, который будет отправлять данные из Cyberpunk 2077 на сам жилет.

Информации по теме моддинга мало, на русском языке материалов практически нет, а существующие статьи местами устарели — пора это исправить. Если вам интересно, как разработать свой мод для Cyberpunk 2077 и собрать VR-жилет, добро пожаловать под кат.
Читать дальше →
Всего голосов 50: ↑50 и ↓0 +50
Комментарии 10

Расшифровка доклада: О чём я говорю, когда говорю о тестировании корректности работы компиляторов

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 1.4K
Блог компании Конференции Олега Бунина (Онтико) Тестирование IT-систем *Lua *Tarantool *
Туториал

Привет, Хабр! Эта статья о том, как тестируют компиляторы. Она будет интересна разработчикам  и тестировщикам компиляторов, а также всем, кто тестирует сложные технологии. Разберём проблемы тестирования LuaJIT и подходы к решению: неструктурированный фаззинг, синтаксический, семантический, сравнительный фаззинги и тестирование оптимизаций. Статья написана на основе доклада Сергея Бронникова из Tarantool на конференции Highload.

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

Истории

Создание надстроек для отечественного офисного пакета «МойОфис». Часть 4. Разбираем структуру

Уровень сложности Простой
Время на прочтение 13 мин
Количество просмотров 981
Программирование *Lua *
Туториал

В заключительной части данного цикла, в котором я постарался на минимальном уровне создать более-менее удобную среду для начала (!) экспериментов по изучения возможностей перевода автоматизации работы с документами из Microsoft Office в «МойОфис».

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

Закроем тему!
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 35

Создание сервера для онлайн ММО игр на PHP ч. 9 — Игровые серверные механики

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 4.6K
PHP *.NET *Разработка игр *Lua *Unity *
Роадмэп

После успешной оптимизации клиентской части и серверной архитектуры пришла пора писать механики самой игры для взаимодействия по API — я называю их событиями (они вешаются на какой либо игровой объект на сервере, помещаются в очередь и срабатывают когда придет их время).

Суть работы взаимодействия сервера и клиентской части следующая:

Читать далее
Всего голосов 10: ↑7 и ↓3 +4
Комментарии 31

Создание сервера для онлайн ММО игр на PHP ч. 8 — Клиентская часть на Unity

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2K
PHP *JavaScript *Lua *Unity *Игры и игровые консоли
Роадмэп

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

Т. к. сервер для игры является авторитарным, то клиентская часть должна была содержать.

Читать далее
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 0

Создание надстроек для офисного пакета «МойОфис». Часть 3. Автозаполнение для API и знакомимся с контролами

Уровень сложности Простой
Время на прочтение 12 мин
Количество просмотров 930
Программирование *Lua *
Туториал

Поскольку, худо ли - бедно, я добился удалённой отладки для надстроек (напомню, так почему-то  назвали разработчики «МойОфис» макросы с возможностью использовать пусть и примитивный, но набор контролов и форм), то зачем останавливаться на достигнутом?

Теперь передо мной встал вопрос об отсутствии банальной в XXI веке «фишке», к которой я привык, как программист о-о-очень избалованный современными IDE, и без наличия которой программирование меня быстро приводит в ярость, а именно – автодополнением кода. Как упоминал в первой ещё статье цикла, его нет даже во «встроенном редакторе» «МойОФис» (в кавычках, ибо на редактор это тянет слабо) для того, что там назвали макросами. То есть, хочешь писать макросы, открывай справочник по Lua API для макросов, и ищи там! Бесит, честно говоря. Но поскольку речь не о нём, то что же  мне предлагает  LuaRT (тоже самое есть и в ZeroBrane Studio, поэтому описанное далее подойдёт как родное и туда)?

Итак - погнали!
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 0

Создание надстроек для офисного пакета «МойОфис». Часть 2. Расширяем структуру файлов надстройки и удалённая отладка

Уровень сложности Простой
Время на прочтение 15 мин
Количество просмотров 695
Программирование *Lua *
Туториал

Итак, после создания первой надстройки в офисном пакете «МойОФис», о чем можно почитать в  первой, вводной части данного цикла статей, следующим шагом у меня возникла идея, как бы представить весь код, в форме более удобной для дальней работы форме? Хотелось бы, чтобы весь код не был свален в одном месте, а разделён хотя бы по разным файлам. Да и отладка бы совсем не помешала!

Итак, приступим!
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 4

Lua: маленький язык, который смог

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 29K
Программирование *Lua *Софт
Мнение
Перевод

Lua — это, пожалуй, мой любимый "маленький язык", с низкой когнитивной нагрузкой и простотой в изучении и использовании. Он встроен во многое ПО, такое как Redis, NGINX через OpenResty и Wireshark (прим. перевод.: и многое другое). Он также используется в качестве скриптового языка в таких играх, как World of Warcraft и Roblox через Luau (прим. перевод.: и многих других). Этот пост — краткое признание в любви языку с некоторыми примерами того, почему он мне так нравится.

Читать далее
Всего голосов 36: ↑33 и ↓3 +30
Комментарии 70

Создание надстроек для отечественного офисного пакета «МойОфис». Часть первая, вводная

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 2.4K
Программирование *Lua *

Поскольку это первая моя публикация на Хабре, хотя как читатель я присутствую здесь уже довольно много лет, я скажу пару слов о себе. Вообще мой стаж как программиста, если учитывать и студенческие годы, когда я под руководством моего руководителя практики начал изучать С и С++ еще в 1992 году (откидываем программирование на калькуляторах, это всё таки баловство), уже более 30 лет. Много чем занимался в этой сфере, и что перепробовал по работе и чисто из интереса.

Несколько более «известным»  я стал с 2016 года в кругу тех, кто активно использует станки ЧПУ, как разработчик средств автоматизации (макросов) под CorelDraw. Тем не менее,  сегодня речь пойдет о другой автоматизации – офисной. В силу своей работы на гос службе, мне приходилось заниматься внедрением и поддержкой документооборота, а также автоматизацией разных рутинных задач. Поэтому тема не сказать, что для меня незнакомая. Но про автоматизацию в наших офисных пакетах (конкретно «МойОфис») можно сказать, что не знал почти ничего до нынешней зимы. И так как у меня появилось свободное время, и я решил более подробно изучить «МойОфис» в плане автоматизации, а конкретно того, возможно ли хоть как-то сделать создание автоматизации удобоваримым с точки зрения программирования и переноса макросов VBA из «MS Office», в Lua надстройки под «МойОфис».

Интересны результаты - жми!
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 23

Про Vim " Миграция на Neovim (Lua)

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 7.3K
VIM *Lua *
Туториал

Теоретически если вы решили пересесть с классического Vim на более современный его клон - Neovim - вам делать ничего особенного не надо. В файле ~/.config/nvim/init.vim прописать source ~/.vimrc ну и скачать или скопировать словари. Идея в том, что Neovim должен поддерживать все конфигурации Vim по умолчанию. Однако, если у вас установлено множество плагинов и разных к ним расширений, то с высокой вероятностью конфигурация загрузится с ошибками, предупреждениями и другими, не очень желательными нюансами. Да и вообще вся фишка, вся разница Neovim заключается в том, что он поддерживает настройки и плагины написанные на Lua вместо vimscript.

Lua - более современный интерпретируемый язык, на нем удобнее писать, его проще читать. А еще, считается, что работает интерпретатор на порядок быстрее родного языка. На счет порядка я бы засомневался, но действительно тяжелые плагины работают вроде как расторопнее и глаже. Впрочем и классический Vim известен не тем, что он медленный или глючный, так что тут спор скорее софистический. А вот с первыми тремя утверждениями я абсолютно согласен.

Более того для Neovim именно на Lua в последнее время выбор современных плагинов и расширений, что уж тут говорить, куда богаче. Вопрос даже не в том лучше ли эти аналоги, а в скорее в свежести, динамике развития и в целом в оптимизме сообщества. Очень похоже на то, что не сегодня так завтра Neovim повторит судьбу предшественника и займет свое место в распространенных дистрибутивах Linux в качестве стандартной замены устаревшему Vim. Заменит полностью? Ну, я бы не был так категоричен в этом вопросе, но вероятность такая существует.

Читать далее
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 7

Макросы в «МойОфис»: Расширяя возможности

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 2.5K
Программирование *Lua *

Не смотря на очевидные успехи импортозамещения в сфере программного обеспечения, есть ряд трудностей «переходного периода», которые существенно усложняют жизнь миллионам пользователей на необъятных просторах нашей страны. Одна из таких «головных болей» – макросы. При переходе на российские офисные пакеты, требуется переписать множество VBA-макросов для MS Office. При этом, макросам на VBA посвящено множество книг и интернет-ресурсов. А вот про макросы в отечественных «офисах» информацию, пока, приходится собирать по крупицам.

В этой статье предлагается пример разработки макроса в табличном редакторе «МойОфис Таблица». Разработчики «МойОфис» не только заложили возможности расширения базовой функциональности своего «офиса» с помощью макросов, но и снабдили пользователей толковым «Справочником макрокоманд на языке программирования Lua».

Попробуем решить тривиальную задачу сравнения двух таблиц. В «экселевском» файле Verify.xlsx 3 листа – Contract, Act, Result. В таблице Contract содержатся данные о договорных объемах работ, в Act – о фактически выполненных.

Читать далее
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 10

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

Okkam. О цене и ценности
Дата 12 сентября
Время 12:00 – 19:00
Место Москва
«Стачка» — IT-конференция
Дата 15 – 16 сентября
Время 09:00 – 18:30
Место Ульяновск
Геймтон DatsOrange от DatsTeam
Дата 15 – 16 сентября
Время 17:00 – 20:00
Место Онлайн
SmartDev
Дата 21 сентября
Время 10:00
Место Москва Онлайн
Yandex Scale
Дата 25 – 26 сентября
Время 17:00 – 18:00
Место Москва Онлайн
Business⁢ Day: Retail CPG
Дата 28 сентября
Время 09:50 – 14:00
Место Онлайн
XIX конференция разработчиков свободных программ «Базальт СПО»
Дата 29 сентября – 1 октября
Время 10:00 – 19:00
Место Переславль-Залесский Онлайн
Kokoc Hackathon
Дата 29 сентября – 1 октября
Время 19:00 – 21:00
Место Онлайн
PG Boot Camp Russia 2023
Дата 5 октября
Время 10:00 – 17:00
Место Москва Онлайн
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн

Mediastreamer2. Применение Lua-машины в фильтрах

Время на прочтение 13 мин
Количество просмотров 777
Программирование *C *Lua *Разработка под Linux *
Туториал

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

Код программ данной главы можно скачать с Github по ссылке:

https://github.com/chetverovod/Mediastreamer2_LuaFilter

Приступим к практической реализации. Для этого можно вспомнить как создается новый фильтр, см. главу 4. В этой схеме источником звукового сигнала может быть либо сигнал с линейного входа звуковой платы (sound_card_read) либо генератор DTMFсигнала (dtmf_generator). Далее данные попадают на вход разрабатываемого Luaфильтра (lua_filter), который осуществляет их преобразование в соответствии с загруженным в него скриптом. Затем данные поступают на разветвитель (Tee), который из входного потока образует две копии, которые выдает на два выхода. Один из этих потоков поступает на регистратор (recorder) и на звуковую карту для воспроизведения (sound_card_write). Регистратор (*recorder*), он сохраняет их на диск в формате raw (wavфайл без заголовка). Таким образом мы сможем прослушать и записать результат работы Lua-фильтра.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Комментарии 2

Как подружить Neovim c русской раскладкой

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 4.2K
VIM *Lua *Софт

Этот туториал описывает часть функционала плагина «Langmapper.nvim», ссылка на него будет в конце статьи. Для остальных, кто хочет настроить Neovim для работы с русской или другой раскладкой, описаны необходимые шаги и приведён упрощенный код.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 4

Удаленное управление и обмен данными между роутерами Микротик через SSH-exec

Время на прочтение 12 мин
Количество просмотров 4.6K
Программирование *Lua *
До известного времени разработчики Роутер ОС Микротик были непреклонны в своей политике — никаких ssh-соединений в скриптах. Лишь, кажется, году в 2019 (а если точно то 27 июня 2019 г. с выходом версии 6.45.1) в Роутер ОС появился не слишком очевидный, но всё же вариант – это инструмент /system ssh-exec. Главное условие — вход ssh должен быть настроен на роутерах по ключу. Нам сейчас не нужен SSH между пользователем и роутером (мы его не рассматриваем), а исходя из названия статьи, нужна настройка SSH именно между роутерами.

Вспомним, как настроить SSH ROS-ROS (пример привожу с этого топика официального форума Микротик). Предположим, у нас есть два роутера Микротик между которыми мы хотим настроить SSH соединение. Роутер-источник, с которого будет осуществляться подключение мы называем SSH-клиентом, роутер к которому подключаемся будет, естественно, SSH-сервером (схема).
image
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

Как я сделал систему мониторинга для башенного крана

Время на прочтение 8 мин
Количество просмотров 15K
Lua *Программирование микроконтроллеров *Прототипирование *DIY или Сделай сам Визуальное программирование *
Обзор

В своей практике я встречался со множеством башенных кранов, начиная от “советских” КБ различных моделей и их модификаций, заканчивая современными кранами, в том числе Liebherr. Причем, среди последних я сейчас встречаюсь не только с новыми, а и со старичками, которые иногда старше меня)

Если с новыми кранами все более-менее хорошо (мощная система диагностики практически всех компонентов электросхемы, большой экран с отображением множества параметров, современная схемотехника с использованием ПЧ), то со старичками часто приходится повозиться. Да, релейно-контакторная схема не сложна, но годы дают знать свое.

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

Читать далее
Всего голосов 70: ↑70 и ↓0 +70
Комментарии 47

Создаём и сохраняем ссылки на игровые объекты (сущности) в C++ и Lua

Время на прочтение 9 мин
Количество просмотров 4K
Блог компании Издательский дом «Питер» Высокая производительность *Разработка игр *Lua *
Перевод
image

Очень часто возникает проблема с обработкой ссылок на игровые объекты (назову эти объекты сущностями). Иногда речь идёт об отношениях «предок-потомок» между сущностями. Бывает, что полезно сохранить ссылку на объект при работе с данными о событиях, в классе планировщика задач и т.д.

Иногда можно обойтись простым указателем, ссылкой или std::reference_wrapper. Но при работе с обычными указателями и ссылками есть такая проблема: если вы ими пользуетесь, то должны быть уверены, что та сущность, на которую направлена ссылка, остаётся жива и не перемещается в памяти без уведомления тех объектов, что держат ссылку на неё. Пожалуй, в хорошо спроектированной программе это достижимо.

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

Давайте рассмотрим, как можно решить все эти проблемы. Новейшее решение (связанное с сохранением ссылок в Lua) было обнаружено мною не так давно и побудило меня написать эту статью, но я хочу показать, что есть и другие способы решить эту задачу. Приступим!
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 4

Создание сервера для онлайн ММО игр на PHP ч. 5 — LUA и JavaScript

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 3.9K
PHP *JavaScript *Lua *Unity *Unreal Engine *
Роадмэп

Продолжая серию статей про разработку сервера для онлайн игр (адрес проекта http://my-fantasy.ru) на языке PHP в это части я хочу рассказать про безопасное добавления пользовательского кода для добавления функционала игровых механик. В статье я опишу существующие решения для PHP , сравню скорость работы приведу видео примеры.

Для тестов будет использовано следующее железо:

Читать далее
Всего голосов 9: ↑5 и ↓4 +1
Комментарии 14

Телеграм терминал для Laurent

Время на прочтение 9 мин
Количество просмотров 1.5K
Программирование *Lua *Компьютерное железо Умный дом Интернет вещей
Ранее на Хабре я размещал несколько статей о многофункциональных сетевых контроллерах управления и мониторинга Laurent, в том числе наиболее продвинутого модуля компании KernelChip — контроллера Laurent-5G. Мы обзорно изучали этот контроллер (это делали также и другие авторы), устанавливали его в корпус, создавая портотип готового PDU, имели опыт управления функциями модулей Laurent через скрипты Микротик Роутер ОС.

C того времени много воды утекло, но надежные контроллеры от KernelChip и сейчас работают в наших сетях, выполняя свои функции как часы. Имея «большой запас» аппаратных возможностей (см. статью «Многофункциональный сетевой контроллер управления и мониторинга Laurent-5G»), за время с момента разработки, Laurent-5G и его предшественники «обросли» многими программными возможностями, их прошивки стали поддерживать не только работу в локальной сети, но и мониторинг и управление в «облачном» режиме.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 3

Вклад авторов