Snusmumriken
Да я вроде тебе калякал, что там не то?
vitaly
Да я вроде тебе калякал, что там не то?
там мы брали уже готовый спин - в котором были радномы итд
vitaly
Можно я?
Конечно можно - денег сколько - могу предложить 100 ВМЗ
Слава
В лс
Snusmumriken
звучит как будто нужно просто переписать package.path, ты что-то недоговариваешь)
Смотри какая схема. Если каждой таске указать свою табличку окружения с изменённой копией package из _G, то require всё ещё будет ломиться в package.path из _G.
Yuriy
Смотри какая схема. Если каждой таске указать свою табличку окружения с изменённой копией package из _G, то require всё ещё будет ломиться в package.path из _G.
А зачем? можно же просто для каждого таска отдельно добавить путь к нему чтобы он не пересекался с друими при инициализации скрипта И не надо переписывать package
Snusmumriken
Ты её как меняешь? Удаляя "дефолтные" пути или нет?
Конечно, не заполняя дефолтные пути, ибо нефиг : ) Пущай скрипт сам в своей директории держит все свои либы. > можно же просто для каждого таска отдельно добавить путь к нему Можно-то можно, но если таски будут хотеть разные версии библиотек - может быть немного грустно. Плюс крутится допустим шедулер сутками. Таски появляются и исчезают, и package.path засоряется. Под конец он может быть таким длинным, что лог с ошибкой "не найден скрипт там-то и там-то" не будет влезать в дверь : )
Snusmumriken
я не много не про то. У тебя package.path, который видит task'а содерджит в том числе пути scheduler'а, да?
Нет, только и исключительно директорию таски. У меня ещё огроменный LUA_PATH, которого таска тоже видеть не должна.
Snusmumriken
Хз где больше работы - переписать require или отследить разные либы А как он засоряться будет если он будет инитить вход для кажэдого таска? Я скорее всего не понимаю до конца поставленной задачи ) но пока что - что я види ывидится мне вот так ))
На самом деле, переписать require не сложно, я делал это много раз (например, когда в конфиге указывается путь до гита и текущее состояние текущей таски, и мы генерим пути до файлов)
Snusmumriken
Проблема - сделать так чтобы таски видели только свою директорию как сборник модулей. Ладно, продолжаем развлекаться : )
Yuriy
Проблема - сделать так чтобы таски видели только свою директорию как сборник модулей. Ладно, продолжаем развлекаться : )
Да. Это я понял просто так и не вижу экстренной необходимости Если только разные версии модулей как ты описал выше но и то - можно же модули версионно сложить и подключать
Snusmumriken
Кстати, мб можно ещё просто модифицировать searcher'ы.
mihacooper [МСК -2]
Snusmumriken
ты хочешь чтобы они физически не могли вылезти за пределы своей директории?
(типа того) Не то чтобы прям совсем песочница, мб io.read/io.write оставлю, но лучше они тоже будут писать только в своей директории. Сепарация, всё такое. Лёгкая чистка тасков/логов/временных файлов/всей фигни.
mihacooper [МСК -2]
Надо уже написать полноценны sandbox, который вижу здесь подобную проблему)
Snusmumriken
Pure-lua виртуальная машина : )
mihacooper [МСК -2]
Ну pure lua возможно не получится)
Snusmumriken
Похоже require просто замыкает старый package. Почему просто не перебить это замыкание?
Оно на сишной стороне : ) Там буквально запомнен индекс ссылки на таблицу в переменную. Ну в общем, на самом деле это типа "моя блажь", технически можно сделать как угодно, это вообще виговинка для себя, но типа задача!
Co(n)stantine👨‍🔬
Mark ☢️
не нужно!
Попробуй
Co(n)stantine👨‍🔬
Попробуй
Я не хочу тратить время зря
Snusmumriken
Я такое делал через потоки. Главный поток запускал несколько рабочих и далее передавал через zeromq команды. по необходимости перезапускал упавшие или добавлял новые. С php тоже через zmq общался
Ну да, да, можно так : ) Я делал что-то похожее на lanes, правда, там есть одна проблемка: хендлеры остаются незакрытыми при падениях отдельных скриптов или при попытке жёсткого завершения (которое будет при любой блокирующей операции, ибо мягкое - требует того чтобы "шёл процесс исполнения команд").
Alexey
И каждый поток асинхронно на базе libuv крутился
Snusmumriken
Ой, а вот libuv - это же не "многопоточка", это однопоточная фигня, кооперативная многозадачность.
Alexey
несколько потоков икаждый со своим циклом
Snusmumriken
Хе, а зачем? Отдельные инстансы одинаковых тасков?
Alexey
у меня были разные. а асинхронность в потоке чтобы можно было управлять пока идут io операции в потоке
Alexey
У меня каждый поток обрабатывал отдельные задачи а главный поток маршрутизировал
Alexey
задачи типа отконвертировать файл получить статус железяки сделать осходящий звонок
Alexey
Щас думаю надо было делать просто очередь:)
Snusmumriken
Ну вот у меня примерно такая же задача, но на корутинах. Если libuv даст мне асинхронный io без колбеков (кастомный цикл или ручное управление "колбеками") - будет прям круто. Хотя там есть возможность кастомить, хех.
Snusmumriken
UPD: То что я прочитал - libuv не даст мне просто так (без нехилых модов) делать что-то такое: function http_request(url, body, headers) local hnd = async_http_request(url) while hnd.status ~= 'done' do coroutine.yield() end return hnd.response, hnd.status, hnd.headers end Придётся обойтись без асинхронных чтений/записей в файл и dns-резольвов, плюс переписать http(s)-клиент/сервер на асинхронно-корутиновый манер (это у меня даже практически есть).
Snusmumriken
Почему всё это лучше колбеков-промизов - можно почитать у Leafo: http://leafo.net/posts/itchio-and-coroutines.html
Snusmumriken
TL:DR
Saphire
Мне тут недавно скучно стало, и решила посмотреть, почему там пустой клиент у SSH ключей, хранимых в gpg. Мимокрокодилом написала парсер для s-expression
Snusmumriken
SEXP - мне нравится как звучит
Saphire
sexps
Snusmumriken
Это уже множественное число
Saphire
Милые массивы в которые можно положить байтики или ещё такие же массивы
Snusmumriken
А как связаны ssh в gpg и sexp'ы? : )
Saphire
Тем, что ключи приватные в них хранятся
Saphire
И поле с комментарием там же
Saphire
А вообще это всё началось с того, что мне надо было добавить ключ в authorized_keys.
Snusmumriken
Ничоси, а я сломался на парсере форматов пакетов из текста RFC в protobuf :<
Snusmumriken
Типа вот такую фиговину (текст) трансформировать в прототип буфера для этой фиговины. Слишком сложно.
Saphire
Скобка ( - делаешь объект. цифра - читаешь до : и потом читаешь столько байт, какое у тебя десятичное число, результат ложить в объект.
Saphire
А на ), ложишь этот объект в родительский
Snusmumriken
Перебор каждого символа + автомат или регулярки?
Saphire
Перебор каждого символа + автомат или регулярки?
Автомат на If/elseif, и на каждый символ
Snusmumriken
Хехе, монстрячно : )
Saphire
Я так всегда делаю
Saphire
Никогда не подводило
Saphire
https://gitlab.com/Saphire/smirc/blob/master/config.c :P
Snusmumriken
Кстати, лайфхак: луёвый string.gsub принимает функцией второй аргумент, он может делать что-то помимо ретурна заменяемого значения, например заполнять структуры. Парсеры на gsub'ах - имхо ничо так затея. На гматчах тоже
Saphire
Да знаю
Saphire
Так можно gsub(".")
Alexander
Всем привет! Нужны доклады и докладчики на Lua in Moscow'19 3-го марта (пройдет в Москве в офисе MRG на английском, будет Роберто). Пишите заявки на agladysh@lua.moscow, задавайте вопросы в личку.
Alexandr
Вечер добрый подскажите пожалуйста. Плагин emmyLua for idea. Подключил модулю socket. А потом когда делаю socket. не подсвечиваюся методы. Кто нибудь сталкивался с этим?
Snusmumriken
Вечер добрый подскажите пожалуйста. Плагин emmyLua for idea. Подключил модулю socket. А потом когда делаю socket. не подсвечиваюся методы. Кто нибудь сталкивался с этим?
Дык вроде потому что socket - это сторонняя библиотека? Чтобы точно узнать список методов - надо запустить скрипт и влезть в нужную табличку. Ну, или написать автодополнятор именно для сокетов.
slair
для любого языка нужна иде? разве нельзя писать в блокноте?
Snusmumriken
Вечер добрый подскажите пожалуйста. Плагин emmyLua for idea. Подключил модулю socket. А потом когда делаю socket. не подсвечиваюся методы. Кто нибудь сталкивался с этим?
Хммм, на самом деле, может быть смешная тема, если извратиться с zerobrane, чтобы тот запускал текущий проект в процессе написания и дополнял тем что видно в запущенном проекте. Ну там, пишем: socket.b --> он лезет в табличку "socket" в запущенном стейте, фильтрует там всё на "b" и выводит что нашёл. Ну и тут же проверки всякие: local x = 'Chiwawa' local y = x + 10 --> 'Вы хотите сложить числа со строками', потому что он типа уже попробовал запустить.
slair
тем более всякие платные типа идеи
slair
Нет, это дело вкуса вроде бы
потом в ответсвенный момент иде не может оказаться под рукой, и вкус всё...
slair
и денег может не оказаться на такую иде, или ресурсов