vitaly
это конфиг нигинса
Artem
ngx.arg[1] = string.gsub( ngx.arg[1], 'cdn%-pics.донор.com/([^/]+)/([^/]+)/([^"]+)"', function(a, b, c) local bb = explode("/", c) if #bb == 2 then if bb[2]: find(".", 1, true) then local bb1 = explode(".", bb[2]) local rand = math.random(1, tonumber(bb1[1])) c = bb[1].. "/".. rand.. ".".. bb1[2] end else end return 'images.рецепиент.com/images/'.. ngx.encode_base64("a".. a).. "/".. ngx.encode_base64("a".. b).. "/".. c.. '"' end )
vitaly
благодарю
vvzvlad
а я думал это такой однострочник и так задумано
Artem
на будущее, это делается с использованием тройных ` в начале и конце
vitaly
на будущее, это делается с использованием тройных ` в начале и конце
в конфиге нгинкса лучше чтобы это был - однострочник адский -
vitaly
не сработоло
Artem
нет, не лучше, скорости это не прибавит, а вот читаемость убивает на корню
vitaly
привет медвед
Artem
вот например как я пишу в конфиге nginx
vitaly
[root@LSW-82 conf]# ls -tlar|grep nginx -rw-r--r-- 1 root root 2656 Sep 17 16:36 nginx.conf.default -rw-r--r-- 1 root root 469673 Sep 24 17:46 nginx.conf~ -rw-r--r-- 1 root root 469673 Sep 24 17:49 nginx.conf
vitaly
вот например как я пишу в конфиге nginx
ненавижу заглавне буквы в коде
Artem
я тоже, это исключение)))
vitaly
ось екзекьют - доставляет - это же "не норма"
vitaly
ну по сути при старте выполниться раз
Artem
а что норма)) мне просто надо было запустить чтобы не забыть)) проще было так, а не поотдельности
vitaly
работает - норма 😂
Artem
оно стартует демон брокера
Artem
я вообще луа использую в качестве мидлварки, для объединения кучи параллельных запросов к микросервисам в один ответ
vitaly
брокер это сервис отвечающий с определенного порта или просто расчетный сервис???
vitaly
оно стартует демон брокера
что делает демон брокера? если по сокетам обращается к редису или подобным вещам - то как он реализован?
Artem
Демон брокер отправляет запрос к другим демонам-сервисам, которые их обрабатывают и слушает ответы асинхронно
vitaly
просто у меня сходные задачи и я делаю на https://github.com/appwilldev/everlooping но оно устарело и бажит в определеных моментах
Artem
Я сам написал и работает как часы))
vitaly
луавит или что лежит в основе или все с нуля писал?
Artem
msgpack-rpc поверх zeromq
Artem
Все с нуля
Artem
Могу скинуть, если поможет
vitaly
ну если это не комерческая реализация то можно на гитхаб положить
Artem
Гитхаб надо тогда оформлять грамотно
Artem
а у меня там один вопрос не остался решен грамотно, по части демонизации и проверки существования единого экземпляра
Artem
может за одно подскажешь/поправишь
Artem
Artem
vitaly
Ну ты да - ты меня знаешь 🙂
vitaly
я использую что то подобное - но естественно написать такое я не смогу 😂
Artem
а че там писать, мне это заняло день писать и пару дней оттестировать
vitaly
я по образованию бухгалтер и учил паскаль на двк в 1992 году - то что я начал программировать это больше проффесиональная необходимость 😂
vitaly
Память у тебя хорошая Император 😂
Alexey
msgpack-rpc поверх zeromq
Вы используете tcp или ipc?
Artem
tcp
Artem
Чтобы проще было межсерверно балансировать
Alexey
У меня была проблема с суб сокетом он не реконектился Роутер на практике не использовал
D
#define true (rand() % 100) < 50;
емнип, брать из ранда остаток от деления - дурной тон, правильнее : rand() / RAND_MAX < 0.5
Snusmumriken
#define true (rand() % 100) < 50;
#define true rand() * 2 < RAND_MAX;
Snusmumriken
Деление (и остаток от деления) - крайне медленная операция, в сравнении с умножением, особенно целочисленным. Лучше обойтись без делений, особенно в таком частоиспользуемом макросе.
mva
чота я ту софтинку сначала делал через чтение sysfs, потом подумал, решил через dbus (используя iio-sensors-proxy)
mva
и что-то сейчас не уверен в своём решении
mva
чота через dbus как-то всё...
vvzvlad
#define true rand() * 2 < RAND_MAX;
почему просто не взять последний бит сдвигом?
vitaly
остаток от деления по микроскундам умноженным на 1000
D
почему просто не взять последний бит сдвигом?
теоретически ранд может вернуть подряд много чётных (или нечётных) чисел, поэтому младшие биты лучше не брать.
mva
хм
mva
а на кутях-то две строчки всего, лол
mva
#include <QOrientationSensor> int main() { QOrientationSensor *sensor; sensor = new QOrientationSensor(); sensor->start(); }
mva
(ну, утрированно две строчки)
mva
в том смысле что не надо ни с чем трахаться: ни с таймаутами на чтение из sysfs, ни с глюками DBus'а...
mva
ещё чуть чуть и у меня начнёт рваться шаблон что биндинги а-ля lua-qt/qtlua и иже с ними — лютое говнище
Ilya
Всем привет. Напоминаю, что уже в эту субботу, 29 сентября, состоится конференция "Рязанский IT workshop", где в числе прочих будут представлены доклады "‎Механизмы для пользовательской автоматизации профессиональных веб-приложений на Lua‎" от @agladysh, "‎Опыт разработки и поддержки форка LuaJIT'а своими силами" от @igelhaus и "‎Создание многопользовательской сессионной realtime игры без серверного кода‎" от @vlfedin. А также доклады про Elixir, ClickHouse, командообразование, работу с иностранными заказчиками и извечный спор "монолит против микросервисов". Регистрация начинается в 10:30, доклады в 11. Из Москвы в Рязань удобнее всего добираться экспрессом "Москва-Воронеж" (отпр. 8:11) или "Москва-Рязань" (отпр. 7:12). Для участия неободима регистрация на сайте http://event.yapcrussia.org/ryazan2018/register. Обсудить встречу можно в канале @itrzn. Для тех, кто не сможет присутствовать лично, будет видеозапись докладов. Также постараемся сделать онлайн-трансляцию.
vvzvlad
а почему нельзя сделать table_name:insert, обязательно table.insert(table_name, хотя с каким-нибудь gmatch это проходит: string_name:gmatch? В этом есть какой-то скрытый смысл с точки зрения дизайна языка?
mihacooper [МСК -2]
Собственно причина вот в этом: > = getmetatable({}) nil > = getmetatable("") table: 0x555a55773d60
fgntfg
Эх, вот бы писать игры на Lua, а не вот это вот всё
mihacooper [МСК -2]
а с точки зрения языка, видимо, в том, чтобы таблицы по-умолчанию были "чистыми", если так можно сказать. Т.к. они в Lua заменяют в общем-то все возможные структуры данных.
Snusmumriken
Чистота таблиц - залог того что никто не будет такой: tbl = {} tbl.remove = false -- флаг какой-нить -- а потом: tbl:remove(10) -- А пачиму у меня тут cannot call boolean value? Что это вообще? -- Ну давай, показывай код.. Вот, у тебя русским по белому написано: бла-бла -- А пачиму так нельзя? А я хочу!
Snusmumriken
Не забываем про классику: local arr_mt = {__index = table} arr1 = setmetatable({}, arr_mt) arr2 = setmetatable({}, arr_mt) arr1:insert(10) arr2:insert(20) print(arr1[1]) --> 10 print(arr2[1]) --> 20 Одной маленькой функцией можно забабахать те самые методы которые ты хочешь.
Snusmumriken
А то что строки - объекты - это им не может навредить. Там нет доступа к внутренним полям по ключу.
vvzvlad
а, вот почему. понял
mva
между мной и снусом как раз
mva
и там мы обсуждали как раз создание самодельного инициализатора для таблиц
vitaly
vitaly
это о мотивации - император @CyberSpirit
Ilya
https://youtu.be/cah6DMpcQs4
Ilya
https://youtu.be/u6QK7e1v4GM - сейчас доклады про Lua
mihacooper [МСК -2]
Кто нибудь знает, можно ли установить userdata в качестве окружения функции через setfenv в lua5.1? Не могу найти описания этому в доках, а на практике как будто нельзя.
Саша
здравствуйте. есть принципиальная разница между третьим и четвертым изданием книжки по луа в шапке?
Ilya
Догадываюсь, что различается версия языка