Перейти к основному содержимому

12 записей с тегом "lua"

Посмотреть все теги

Поиск утечек памяти в Lua

· 3 мин. чтения

Перенос информации с /docs

Пришлось столкнуться. Мои микрозаметки на этот счет.

TL;DR

Все, что описано ниже может быть полезным, но в моем случае полезнее всего оказалось сбилдить LuaJit от Tarantool и использовать встроенный в него memory profiler (memprof), который покажет где и сколько памяти не высвободилось в коде.

Self-Hosted Long Polling микросервис. Зачем и как

· 6 мин. чтения

banner

примечание

Этот пост – актуализация и перепись двух старых постов на эту тему.

poll.def.pm – это простейший open-source Long Polling сервер, который выступает в качестве своеобразного WebHook сервера и хранит в себе полученные updates.

🌈 Вы можете указать единый вебхук url на всех API сервисах, с которыми работаете, затем получать эти вебхуки со стольки своих сервисов, сколько создадите.

  • В любое время. Даже если ваш сервис был offline, данные не теряются
  • Мгновенно. Как только приходит новый апдейт, вы сразу его получаете. Без задержки
  • Без спама GET запросами. Соединение с long-polling не разрывается, пока не придет апдейт.
  • Получаете везде одновременно. Например телеграмовский getUpdates запрещает одновременно получать апдейты на нескольких серверах. Так ваш бот не сможет работать по частям на разных серверах.

express.lua – создание веб приложений на Lua

· 6 мин. чтения

lua-express-white-banner

🌕 express.lua это самый детализированный порт оригинального express.js, написанный на Lua. Пока кто-то не докажет обратного.

По сути, lua-express это минималистичный web фреймворк с почти полной совместимостью API с express.js, позволяющий создавать веб приложения на чистом Lua.

Сравнение
const express = require("express")
const app = express()

app.get("/", function(req, res) {
res.send("Hello World")
})

app.listen(3000)

Lua - Отладка кода на remote сервере

· 5 мин. чтения

debugger.lua

примечание

Пост создан в стиле заметок, а не руководства. Будет полезен тем, кто хочет удаленно дебажить свои Lua приложения, но еще подбирает инструмент.

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

Корутины в Lua с примерами

· 5 мин. чтения

coroutine-vs-function-line-view

Корутины это что-то вроде потоков, но при этом они все равно ими не являются. Поток, это когда (например) на отдельное ядро процессора можно повесить полностью отдельную задачу, а корутина это когда блоки кода работают по очереди и могут быть остановлены в любом моменте, чтобы продолжить исполнение другого кода.

Вот несколько наглядных практических примеров использования корутин:

Установка luarocks для luavela (ujit)

· 1 мин. чтения

luarocks-logo-png

примечание

Инструкция предназначена для debian-based дистрибутивов, включая ubuntu

Необходимые зависимости

  • git для git clone
  • cmake, dpkg-dev, libc-dev и gcc для cmake ../luavela
  • g++ для make install в luavela
  • wget для скачивания luarocks
  • unzip для ./configure luarocks

Предварительно напишите LVPATH=/usr. Это будет путь установки luavela и с ним будет работать luarocks.

poll.gmod.app документация

· 2 мин. чтения

🆘 UPD 2023.12.15

Этот пост немного устарел, но он уже переписан и актуализирован тут 👈 Рекомендую сразу читать статью по ссылке

  • Все упоминания poll.gmod.app в этом посте заменены на poll.def.pm (но оба домена рабочие в демо режиме)

Это простейший Long Polling микросервис, который выступает в качестве своеобразного WebHook сервера для POST запросов. Принятые данные можно получить с сервера по GET запросу.

GitHub вместо Steam Workshop для Garry's Mod

· 7 мин. чтения

InGameShop (IGS) - внутриигровая менюшка для Garry's Mod серверов, через которую игроки донатят их владельцам с помощью gm-donate.net. До недавней поры установка происходила через Steam Workshop. Сейчас готова версия, которая 1 запросом скачивает и выполняет код. Внизу будет реализация

Разработка такой версии изначально казалась задачкой на вечерок под кофеек, но много раз откладывалась из-за каких-то нюансов. Было много идей, как все реализовать, но выжила только одна, о которой пост

Эффективная разработка в Garry's Mod

· 8 мин. чтения

UPD 2022.06.19

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

Рекомендую прочесть статью, но вместо SublimeText устанавливать VSCode, потому что потом из-за привычек будет труднее перейти на него. Все плагины есть на оба редактора

UPD 2023.07.23
  • В посте упомянут плагин SFTP. Я заменил его на VSCode Remote – SSH. По ссылке отдельный пост про этот плагин. Очень крутой плагин.
  • Помимо него, советую замену плагина, который ниже упомянул в разделе "GLua синтаксис" на Lua Language Server. Когда установите, напишите команду в VSCode Lua: Open Addon Manager и установите оттуда поддержку glua (синтаксис, документация функций и т.д.). Так и называется – Garry's Mod

Я занимаюсь Garry's Mod'ом с 2015 года, начиная с администрирования чужого сервера и до создания своего проекта, где большинство разработок были самописны (не куплены), а сервера проекта в свое время были в топ-10 мира по рейтингу GameTracker.

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

LUA Как использовать __mode в метатаблицах

· 2 мин. чтения

Насчет __mode совсем недавно узнал как работает. Штука очень классная и полезная.

По-простому объясняя, нужно понимать, что сборщик мусора считает мусором те данные, на которые больше нигде не осталось ссылок.

Сами ссылки ты устанавливаешь, когда например добавляешь данные в таблицу. Пример:

local arr = {}
QWE[1] = arr