mva
я так в цикле делал
Snusmumriken
Тогда совсем не понятно )
Snusmumriken
У рести вон тоже смешанные блоки. И оно просто лоадстрингает.
mva
впрочем, кстати, там вроде и цикл, но...
mva
local hs = { ["mva.name"] = "mva's server"; ... ["alpha-llc.org"] = "Alpha LLC"; } for h,n in pairs(hs) do VirtualHost (h) name = n ssl = { key = "/etc/shared/certificates/"..h.."/"..h..".key"; certificate = "/etc/shared/certificates/"..h.."/fullchain.cer"; capath = "/etc/ssl/certs"; options = { "no_sslv2", "no_sslv3", "no_compression", "no_ticket" }; } Component ("conference."..h) "muc" name = "Конференции" modules_enabled = { "pastebin", "muc_log", "muc_log_http" }; ... Component ("proxy."..h) "proxy65" name = "Прокси" ... end
mva
т.е., похоже, оно и правда, как-то разворачивается каким-то лодером, а потом выполняется loadstring'ом
mva
а, хотя...
mva
мне казалось что эти вот скобки мне пришлось только из-за использования переменных использовать
mva
а так, типа, даже без кавычек можно было объявлять
mva
но нет, посмотрел дефолтный конфиг, там, всё-таки кавычки
mva
так что это просто функции, никакой магии
mva
правда вот это вот блочное объявление тоже не совсем понятно. объявленные в блоке переменные относятся ведь к этому хосту.
mva
так что немного магии, всё же, есть
Snusmumriken
Ну значит оно использует луа как препроцессор, знаешь как с хтмл-шаблонами? Маркеров отдельных блоков не видно, значит оно на ключевые слова реагирует или преобразуя их в луёвые конструкции, или ещё что.
Egor
Хочу перегрузить функцию isKeyPressed. В первом варианте тип аргумента char, во втором — const char*. windowType.set_function("isKeyPressed", sol::overload(static_cast<bool(Window::*)(char)>(&Window::isKeyPressed), static_cast<bool(Window::*)(const char*)>(&Window::isKeyPressed))); Код луа: if window:isKeyPressed('a') then ... end if window:isKeyPressed("esc") then ... end Первое работает хорошо, а второе не работает вовсе, "esc" воспринимается, как 'e' Как это можно исправить? Использую библиотеку sol2
Luсky
боты драные
Wsevolod
на шилду парсеры на каждом углу уже есть
Aydar
на шилду парсеры на каждом углу уже есть
Очевидно надо уникального капча-бота просто запилить, который что-нибудь луашное будет спрашивать.
Wsevolod
Очевидно надо уникального капча-бота просто запилить, который что-нибудь луашное будет спрашивать.
это не решит проблему глобально, на него тоже парсеров напишут просто надо капчу непроходимую, типа искаженной картинки, но они много места на экране занимают, я в своем боте стикер делаю
Wsevolod
+ очено много ботов в которых капчу люди проходят, а дальше скрипт уже
Aydar
например?
Ну вот ты же выше написал, сначала люди решают а далее скрипт. Вариант с уникальными узкоспециализированными вопросами лучше так как шанс что кто-нибудь захочет написать парсер именно под эту группу маленький.
Wsevolod
Ну и локальный реестр, если в одном чате репортят, акк вылетает с остальных чатов сети бота
Aydar
Да, против такого другие методы, типа CAS, но хотя бы 100% отсеять скрипты
Что толку отсеивать 100% скрипты если написать бота который обходит обычную капчу тоже очень просто? Спамеры быстро адаптируются, если я правильно помню там затраты небольшие что-то в районе 1$ за решение 1000 капч. Капча короче не особо спасет мне кажется. А реестры всякие это уже сложности, помимо бота-защитника надо будет ещё и на серваке БД хранить.
Wsevolod
Все таки скриптов пока большинство, по моим наблюдениям
Александр
добрый день. а есть ли знатоки prosody? отлаживал тут работу одного транспорта, мне теперь при каждом подключении 2000 запросов на подписку прилетает откуда-то. Транспорт уже выключил, клиента снес переставил , не могу понять откуда берется
Snusmumriken
добрый день. а есть ли знатоки prosody? отлаживал тут работу одного транспорта, мне теперь при каждом подключении 2000 запросов на подписку прилетает откуда-то. Транспорт уже выключил, клиента снес переставил , не могу понять откуда берется
Ну потому что децентрализованная фиговина. Ты такой берёшь и включаешься в общую сеть XMPP-серверов, и тебе начинают слать всякую фигню обиженные и забаненные.
Александр
я это себе все представляю. но мне подписки от моего собственного транспорта летят . на моем собственном сервере
Александр
то есть я отрубаю prosody все внешние линки, оставляю только локальную сеть, цепляю к нему gadjim с снесенным профилем и мне каждый коннект 2000 одних и тех же контактов на подписку. я их всех закрываю, офлайн-онлайн и они снова прилетают
Александр
где бы почистить?
Александр
/var/lib/prosody смотрел, пусто. mysql смотрел, тоже ничего такого
Александр
где могут быть эти pending request накоплены?
Александр
там суть в том что я код транспорта переписывал и от него похоже прилетели запросы с нарушением форматирования
Александр
и про них теперь где-то не ставится отметка что они уже доставлены до клиента
Александр
нашел. параметр roster типа json в таблице prosody
Александр
у этого json внутри секция pending которая корректно не удаляется
Александр
возможно потому что просто слишком дохрена контактов в одном запросе
Andrey
Всем привет! Можете накидать ссылок где подробно разжевывается про "встраиваемые языки программирования" и lua там сравнивается с другими?
Lucky
белка и ангел, руби, гдскрипт
Lucky
это всё мало и слабо
Lucky
мегамонстр js
Aydar
мегамонстр js
Ну у этого мегамонстра есть хорошие встраиваемые реализации. Я например duktape юзал, вроде годно. У руби есть mruby сам не юзал но говорят тоже неплохо.
Aydar
белка и ангел, руби, гдскрипт
Белку и ангела я точно видел в паре опенсорсных проектов, утверждать что они слабые я б не стал (хотя может ты из личного опыта говоришь)
Andrey
нет никаких других
)) подерживаю
Vlad 👁‍🗨
Привет всем! Хочу сделать такой же пикер, что и в iOS. Я создал квадраты, используя перспективу, искажаю их в зависимости от положения. Из-за этого создается ощущение, что квадраты расходятся. Застрял на этом месте. Подскажите, куда двигаться дальше? За что цепляться, высота, координаты?
Snusmumriken
Пробовали сделать мешем, но там куча матеши с коррекцией uv-искажений.
Andrey
Подскажите, кто в теме, какая тут версия ? (ZBS)
Andrey
да, точно, спасибо
Andrey
не могу понять почему для 5.1 print(_ENV) выдает nil
Andrey
для остальных таблицу
Aydar
не могу понять почему для 5.1 print(_ENV) выдает nil
Потому что в 5.1 нет _ENV В 5.2 как-то переделали механизм окружений, тут подробно расписано http://lua-users.org/wiki/EnvironmentsTutorial Из того что я понял в 5.1 у каждой функции было свое окружение а в 5.2 окружения стали отдельными таблицами и теперь уже функции можно выполнять в контексте выбранного окружения. P.s палками не бейте если неправду сказал, читал не вдумчиво
Andrey
а, все понял. книжка издана в 2016, lua5.2 появилась раньше думал что это более менее свежие версии
Andrey
Подскажите, как организовать вызов функции с условием что если оно не успело отработать за определенное время - то возвращается ошибка. Например я запускаю функцию foo() и ограничиваю время ее выполнения - не успела вернуть return за 5 секунд -поднимается ошибка.
Andrey
не хочу просто велосипед изобретать, скорее всего решение стандартное
Andrey
Нужно считать в другом треде (green или системном), т.е. на чистой lua никак. libuv или что-то такое
из одного скрипта можно как то организовать другой тред параллельно ?
Andrey
есть examples ? с кодом
Wsevolod
из одного скрипта можно как то организовать другой тред параллельно ?
Если luv (libuv), то можно таймер запустить https://github.com/luvit/luv/blob/master/examples/timers.lua
Andrey
можно внутрь функции запихнуть счетчик который по завершению отвалится ?
Wsevolod
С тредами я не работал, но кмк єто на сишке проще написать и забиндить
Snusmumriken
Подскажите, как организовать вызов функции с условием что если оно не успело отработать за определенное время - то возвращается ошибка. Например я запускаю функцию foo() и ограничиваю время ее выполнения - не успела вернуть return за 5 секунд -поднимается ошибка.
Ну самое тупое: function foo() local timeout = os.clock() + 5 while os.clock() < timeout do do_something end end А вот ограничивать время применения внешних функций — это тебе во-первых нужны корутины, а во-вторых в самих функциях не должно быть ничего блокирующего и yield на каждой точке выполнения, а поверх этой функции должна быть обёртка. В компании IPONWEB для выполнения этого "стандартного решения" пришлось делать свой форк Luajit.
Snusmumriken
Например так: function coroutine_sleep(timeout) timeout = timeout + os.clock() while os.clock() < timeout do coroutine.yield() end end function call_routine(func, timeout, ...) local routine = coroutine.wrap(func, ...) timeout = timeout + os.clock() local result while not result and os.clock() < timeout do result = routine() end return result end function foo() coroutine_sleep(3) coroutine_sleep(5) return 10 end print("1", call_routine(foo, 5)) print("2", call_routine(foo, 10))
Snusmumriken
Функция call_routine блокирует, сделаешь себе свой менеджер параллельных задач.
Sergei
добрый вечер, глупый вопрос: for x = 1, 9, 1 do print("srv_%d" % x) end
Sergei
как это сделать?:)
Aydar
как это сделать?:)
string.format("srv_%d", x)
Snusmumriken
("srv_%d"):format(x)
Anonymous
привет всем! есть ли тут люди которые делают моды для Warhammer Total War 2 используя LUA?