Snusmumriken
Чебуратор. Возвращается в прошлое и убивает РКН в зародыше.
Mikhail
Черт. Звучит как сюжет для игры стрелялки с блекджеком и танками.
Mikhail
Для себя то что искать... Пришёл нуб ты в него ботом тыкаешь. Если он даже с ботом не справился, то все...
Lucky
Хо-хо, я сделал-обделал!
Lucky
Snusmumriken
Киберпанк такой ))
bebebe
Киберпанк такой ))
на матрицу местами похоже
Lucky
блин, надо немного подпилить по краям
mva
какой фреймворк используешь? // или опять HR?
Tadeusz
Фреймворк 😊
mva
Фреймворк 😊
ну, это проверка на понимание темы. Ибо сюда периодически заходят боты-спамеры, собирающие базы, и hr'ы (которые, впринципе, делают то же самое), при этом притворяясь девушками (а мы все помним главное правило интернетов).
mva
я не имею ничего против девушек-программистов (даже более того). Но вот не очень люблю когда меня превращают в циферки или цель для очередной волны спама
mva
ну, так
ShadoWalkeR
Фотожопа много
mva
вот я и хочу это узнать
vitaly
какойто фетешизм вкупе с фетешизмом
vvzvlad
Такой вот вопрос: У меня есть в системе пользовательские скрипты, которые лежат в отдельных файликах просто в папке на диске. При старте я пробегаюсь по ним, загружаю с помощью loadfile и исполняю через pcall. Теперь я хочу сделать так, чтобы перезагружать скрипты можно было в процессе работы системы. Юзер скрипт через веб-интерфейс поменял, сохранил, он взял и перезапустился, не трогая другие скрипты. Каким образом мне это лучше сделать? Учитывая то, что юзеры могут ошибаться в скриптах, и любая ошибка не должна класть систему, а должна ловиться и выводиться юзеру. На безопасность пока забьем, предположим, что юзеру не захочется посмотреть/изменить чужие скрипты/переменные или получить доступ к системным переменным.
vvzvlad
Я знаю про вариант удаления из таблицы файлов, загруженных через require, но как удалить загруженный другим способом файл, я не знаю. И правильно ли использовать pcall?
vvzvlad
да, это и надо оставить
Snusmumriken
Такой вот вопрос: У меня есть в системе пользовательские скрипты, которые лежат в отдельных файликах просто в папке на диске. При старте я пробегаюсь по ним, загружаю с помощью loadfile и исполняю через pcall. Теперь я хочу сделать так, чтобы перезагружать скрипты можно было в процессе работы системы. Юзер скрипт через веб-интерфейс поменял, сохранил, он взял и перезапустился, не трогая другие скрипты. Каким образом мне это лучше сделать? Учитывая то, что юзеры могут ошибаться в скриптах, и любая ошибка не должна класть систему, а должна ловиться и выводиться юзеру. На безопасность пока забьем, предположим, что юзеру не захочется посмотреть/изменить чужие скрипты/переменные или получить доступ к системным переменным.
Карочи, можно воспользоваться какой-нибудь такой фигнёй: local function trace(msg, layer) return debug.traceback("Error: " .. tostring(msg), 1 + (layer or 1)) end local function Call(scrname) local succ, err = xpcall(require, trace, scrname) if not succ then return nil, err retrurn succ end
vvzvlad
local current_func, error_msg = loadfile(path) local status, err_msg = pcall(current_func) current_func = nil current_func, error_msg = loadfile(path2) status, err_msg = pcall(current_func) Так?
Snusmumriken
Xpcall даёт нормальный трейсбек. Ошибка для пользователя под названием: "На такой-то строке ошибка" - бесполезна, потому что нет трейсбека. И да, loadstring не рейзит ошибки, но ошибки могут быть при вызове функции, которую возвращает loadstring, поэтому тут есть подводные камни падений сервера )) То есть, оно просто проверяет синтаксис. С ним всё ок? Ну вот вам функция. А то что там в какой-то функции пытаются в из строки вытянуть ключи - это не волнует: пока функция не вызовется - не упадёт )) Плюс у loadstring проблемы с определением местоположения скрипта, то есть, отчёт об ошибке будет кривой энивей.
Snusmumriken
В общем, делаем нормальные require и не выпендриваемся ))
Snusmumriken
Ну лады.
Snusmumriken
Во, кстати, полезняшка. Для нормального трейса от loadstring, нужно передать имя скрипта вторым аргументом.
Snusmumriken
local function trace(msg, layer) return debug.traceback("Error: " .. tostring(msg), 1 + (layer or 1)) end local root = 'c:/bin/user_scripts/' local function Call(user, scr) -- можно не писать тут формат .lua, -- но тогда придётся в имени скрипта указывать local path = root .. user .. '/' .. scr .. '.lua' local file, err = io.open(path, 'rb') if not file then return nil, 'Script not found' end local code = file:read('*a'); file:close() -- в трейсах будет отображаться: -- [string "vasya@scr1"]:1: attempt to index 'yo' -- можно ещё полный путь зафигачить, -- чтобы знать где конкретно падает local chunk, err = loadstring(code, user .. '@' .. scr) if not chunk then return nil, err end local succ, res = xpcall(chunk, trace) if not succ then return nil, res retrurn res end
Snusmumriken
У самого в нгинксе схожая скриптовызывалка. В случае чего - возвращает json с ошибкой. misc.xpcall - автотрейс.
Snusmumriken
*Энжинкс
Хоть розой назови.
Snusmumriken
Кстати, если так, то нужно энжэайэникс. Фил зе диффиренс. И да, я в курсе что это потому что "энжин", но ты ещё много людей встретишь, которые "неправильно" произносят, и не будут поправляться после того как ты им указал единственную в их жизни великую истину. Вроде меня.
Snusmumriken
Когда я был маленький и читал гарри поттера, на третьей книжке мне попались дементоры, и я, пока читал, ставил ударение на последний слог. В дальнейшем, после того как мне тыкнули что это ни разу неправильно, и вообще, роулинг из англии а не франции, чтобы так ударение ставить, чёртовы дементоры каждый раз вводили меня в ступор на тему ударения: туда или туда. Эти засранцы умудрились частично поднасрать мне в детстве, то чувство, когда книжный персонаж влияет на твою жизнь больше чем следовало.
bebebe
Драматичненько
bebebe
Стругацкие себе такого не позволяли
vvzvlad
А как загрузить файл так, чтобы глобальные переменные в нем стали локальными в таблице, там где гружу? Т.е. в файле "test=1", гружу в script, и получаю script.test.
vvzvlad
Где-то читал, но потерял
Snusmumriken
Setfenv, во: https://www.lua.org/manual/5.1/manual.html#pdf-setfenv Но вроде как не работает в более новых версиях (> 5.1)
vvzvlad
о!
vvzvlad
Да, у меня как раз 5.1
Snusmumriken
Не забудь протащить в новое окружение переменные из _G. Можно через env = setmetatable({}, {__index = _G}). А то портить _G мы не хотим, а проксировать его надо.
Ilya
*Энжинкс
Энжинэкс
Snusmumriken
Ilya
Ну или икс, если латынь ближе
Ilya
Я позавчера слушал доклад, где у чувака был дебиАн, юнИкс и... Ещё что-то, линУкс что ли.
Mark ☢️
https://github.com/luaposix/luaposix/issues/304
Mark ☢️
Я наступил в это
Snusmumriken
Жуть
Mark ☢️
https://github.com/luaposix/luaposix/issues/302
Mark ☢️
И в это
Snusmumriken
Ну небось скоро закроют. До тех пор пользуйтесь вендой с winapi ))
Mark ☢️
Snusmumriken
Попрошу не ругаться
Snusmumriken
Только венда тебя спасёт от смерти от красноглазия.
Mark ☢️
Запилил себе враппер вокруг libnl3 на luaalien. Через боль, но работает на ура
Snusmumriken
Mark ☢️
Co(n)stantine👨‍🔬
Mark ☢️
Co(n)stantine👨‍🔬
@Snusmumriken
Snusmumriken
Я сталкивался с взрослыми людьми, которые пытались заставить меня полюбить венду, прекрасно представляю как это раздражает. Но зато у меня появилось новое оружие.
Snusmumriken
У меня всё.
Co(n)stantine👨‍🔬
Я не видел линукса🙂
fgntfg
У @Snusmumriken мак с parallels
Snusmumriken
Рабоче-игровая машинка на шиндовсе, но это мало на что влияет : )
fgntfg
Я не видел линукса🙂
Посмотри на свой телефон.
Co(n)stantine👨‍🔬
Посмотри на свой телефон.
Я про снусмумрикена говорю
Snusmumriken
Ну дык кто будет делать скрины с рабоче-сервисных машинок? Там и гуя-то нет.
Snusmumriken
И да, как гуи-терминал-средство разработки-игральня, имхо, венда удобнее всего. Предпочитаю разделение обязанностей. И да, я пишу луа-скриптики в том числе потому, что они гарантировано кроссплатформенны, и одно и то же можно будет дёрнуть везде, накалякав в случае чего, простенькую обёртку над платформоспецифичными вызовами. Luajit работает даже на psp (приставка) и nodemcu, чего уж там.
Mark ☢️
Война админов.мммм. нямка
Mark ☢️
Co(n)stantine👨‍🔬
го
Snusmumriken
а питон и жава не гарантировано кроссплатформенны?
Проблемы с сишкой. Сложно писать модули под питон. Жава тянет свою жуткую VM, и сам ЯП мне нравится значительно меньше, а ядро в любом случае на сишке.
Snusmumriken
Дык это сытон, он там не один : ) Целый комплект разномастных виртуалок, и у каждой - своя манера модулей. У луёв вполне можно накалякать либу, которая будет спокойно подключаться всеми версиями (5.1-5.3 + luajit). Ещё раз о кроссплатформенности и универсальности.
Mark ☢️
Мне пришлось пересесть на луа с питона потому что опенврт и мелкая флешка
Co(n)stantine👨‍🔬
о ништяк http://www.opennet.ru/opennews/art.shtml?num=48823