@ProLua

Страница 154 из 307
Aydar
08.09.2017
15:23:44
его придумали для облегчения портирования с венды ?
Судя по тому как ты написал "венда" у тебя unix?

Vadim
08.09.2017
15:24:18
нет, у меня GNU

Чай
08.09.2017
15:24:40
Тут ветка про js и многопоточность?
Ну, наверное можно использовать Electron с lua.vm.js. :)

Vadim
08.09.2017
15:24:40
(с юникса я слез лет 15 назад)

Google
Vadim
08.09.2017
15:24:45
плюс-минус тапок

Ну, наверное можно использовать Electron с lua.vm.js. :)
а внутри FFI, а там запускать куски хрома

Aydar
08.09.2017
15:25:33
Ну, наверное можно использовать Electron с lua.vm.js. :)
А давайте весь оффтоп будем так оправдывать?

а внутри FFI, а там запускать куски хрома
Производительность будет шикарная

Snusmumriken
08.09.2017
16:25:02
Кстати, интересный момент! Слак - удивительно тяжелый мессенджер, как раз разбивается на несколько процессов, каждый проект - отдельный процесс, главный процесс и ещё один процесс. Благодаря сему гениальному разбиению, мессенджер способен сжирать 1.5гб оперативки. А вдруг это значит, что много процессов это плохо? И нодин подход с циклом в одном потоке более выгодный?
Дело же не в процессах, а в менеджменте памяти : ) Когда ты кешируешь 100500 вещей, а потом снова кешируешь и ещё раз кешируешь, строишь хеши для быстрого поиска/доступа - как раз выжираются 1.5 гб памяти. Телеграмм - однопоточен. Мало того, абсолютно все сообщения, которые успели придти пока телеграмм был закрыт - приходят одним единственным запрос-ответом. Это лишний раз подтверждает то, что подход золотого молотка - не работает : )

annelin
08.09.2017
16:46:44
как отправить бинарные данные в процесс. который открыли popen'ом и прочитать оттуда вывод?

`tts = require('libtts') stream = tts.synthesize('в рот ебал', 'ru') — it is binary mp3 stream — mpg123 = io.popen('/usr/bin/mpg123 -q -s -b 1024 -f 8192 —mono -r 8000 -w - -', 'w') — open program mpg123:write(stream) — write our mp3 stream to stdout — sln = mpg123:read('*a') — read output — —mpg123:close() sln_file = io.open('file.sln', 'w') — write output — sln_file:write(sln) sln_file:close()`

не работает

точнее, работает, но высирает stdout программы (mpg123) в консоль, а не в переменную

Snusmumriken
08.09.2017
16:48:23
io.popen('program -file "'..filepath..'") Например так.

annelin
08.09.2017
16:48:33
у нас нет файла

и желательно обойтись без создания

Snusmumriken
08.09.2017
16:48:55
А как программа запускается с бинарными? : ) Запиши в файл тогда.

Google
annelin
08.09.2017
16:49:06
мы считали бинарный поток в переменную

я передаю это в stdin программе

Snusmumriken
08.09.2017
16:49:22
Программа вообще способна к обработке бинарных в команде запуска?

annelin
08.09.2017
16:49:24
а вот из stdout прочитать уже не могу

мы ей из STDIN скармливаем

что-то вроде cat mp3file | mpg123... -

не хватает опции "a" к io:popen'у

Snusmumriken
08.09.2017
16:50:26
io.popen возвращает всё что программа выдала в stdout. Ну, должна, по крайней мере : )



annelin
08.09.2017
16:51:40
я открываю popen с флажком "w"

на запись)

этим самым передаю данные на вход программе

Snusmumriken
08.09.2017
16:52:06
Извращенец ))0 Хотя хрен знает, может, некоторые умеют так работать, не сталкивался.

annelin
08.09.2017
16:52:29
`tts = require('libtts') stream = tts.synthesize('в рот ебал', 'ru') — it is binary mp3 stream — mpg123 = io.popen('/usr/bin/mpg123 -q -s -b 1024 -f 8192 —mono -r 8000 -w out.sln -', 'w') — open program mpg123:write(stream)`

вот так работает

но вывод записывается в out.sln

т.е. мы создаём файл

Snusmumriken
08.09.2017
16:53:04
А без -w оно куда пишет? : )

annelin
08.09.2017
16:53:10
в консоль

Snusmumriken
08.09.2017
16:53:16
Ну и считывай это.

Google
annelin
08.09.2017
16:53:19
как?

Snusmumriken
08.09.2017
16:53:36
mpg123:read('*all')

annelin
08.09.2017
16:53:41
ага

хуй

потому что мы открыли mpg123 с "w"

на запись

Snusmumriken
08.09.2017
16:53:48
Открываешь в режиме rw.

annelin
08.09.2017
16:54:09
с rw не открывается

в том-то и вопрос - как открыть popen на чтение-запись :)

Snusmumriken
08.09.2017
16:54:59
a+? http://lua-users.org/wiki/IoLibraryTutorial

annelin
08.09.2017
16:55:10
io.popen (prog [, mode]) Starts program prog in a separated process and returns a file handle that you can use to read data from this program (if mode is "r", the default) or to write data to this program (if mode is "w").

a+ это у open()

Snusmumriken
08.09.2017
16:56:15
Я подозреваю что io.popen поддерживает те же самые режимы что и open. Проверяй а не спорь.

annelin
08.09.2017
16:56:55
я проверил a, a+, rw, r ,w, w+

Aydar
08.09.2017
16:57:08
Я подозреваю что io.popen поддерживает те же самые режимы что и open. Проверяй а не спорь.
Люди такие пошли спорить любят в темах которые не знают

Snusmumriken
08.09.2017
16:57:09
Ошибку дропает?

annelin
08.09.2017
16:57:17
вместо хендла возвращает nil

я уже нагуглил решение

спойлер: NEEQUAQUE

Snusmumriken
08.09.2017
16:58:03
Тогда пиши во временный файл ))) Я, когда развлекался с подписями crypto pro - так и делал )) И да, я тоже не люблю когда нельзя обойтись без лишней записи на хард. Что поделать.

Google
Snusmumriken
08.09.2017
17:01:37
Знаешь как ты можешь выкрутиться? 1. Использовать эту фиговину как библиотеку, написать ffi-биндинг или dll(so)-либу. 2. Написать отдельную софтину, которая умеет принимать бинарь прямо в команде запуска (дофига огромная команда получается, но что поделать) 3. Разобраться с этой, мало ли что упустил.

Snusmumriken
08.09.2017
17:03:18
Да, он самый офигительный и быстрый, как с реализации так и по производительности. Если уметь писать на сишке.

Aydar
08.09.2017
17:04:06
в том-то и вопрос - как открыть popen на чтение-запись :)
Тут человек на эту тему пишет http://lua-users.org/lists/lua-l/2007-10/msg00189.html

Да, он самый офигительный и быстрый, как с реализации так и по производительности. Если уметь писать на сишке.
Я например в данный момент читаю Брайан Керниган, Деннис Ритчи. Язык программирования Си.

Snusmumriken
08.09.2017
17:05:50
Ну это вообще классика. А я его прочитал в пятнадцать лет, когда ещё не думал о кодинге (типа, для лёгкого чтения перед сном), а сейчас забыл нафиг ((((

Влад
08.09.2017
17:06:01
У меня есть код на луа, который через либу lua-rs232 общается с железкой. Проблема в том, что используя lanes, я могу открыть /dev/ttyUSB0 только в одном потоке, и не могу через linda передать дескриптор открытого порта. А мне надо в одном потоке читать оттуда данные(находясь в бесконечном цикле проверки нового символа), а в другом потоке писать туда данные, в зависимости от каких-то событий. Кто нибудь может подсказать, как мне это сделать? Либо как-то передать дескриптор в другой потоке, либо создать копию /dev/ttyUSB0, чтобы я открыл два устройства, и в одно писал, а в другое читал.

Vlad
08.09.2017
17:07:30
оффтоп, но вот только открыл для себя либген, прекрасное место, почему упоминаний о таких местах сложно встретить повсеместно

Admin
ERROR: S client not available

Влад
08.09.2017
17:08:53
так если я начинаю читать(p:read(1, 200)) из него, то я блокирую поток, пока не прочитаю символ или не истечет таймаут. А мне нужна относительно быстрая реакция на приходящие сообщения, и быстрая запись, если надо. 200мс уже много.

Snusmumriken
08.09.2017
17:09:59
Я кодить начал в 12 лет с перла
Я кодить начал с двадцати лет. В двенадцать шёл на курсы по паскалю, отходил три занятия (с блок-схемами), потом начались двойки в школе, и мама забрала оттуда, ибо договаривались на отсутствие двоек (((

так если я начинаю читать(p:read(1, 200)) из него, то я блокирую поток, пока не прочитаю символ или не истечет таймаут. А мне нужна относительно быстрая реакция на приходящие сообщения, и быстрая запись, если надо. 200мс уже много.
Есть методики неблокирующего чтения. Выставляешь нулевой таймаут, пытаешься считать один символ. Если есть - вау, нам что-то пришло, начинаем выдирать остальные символы. Когда приём закончился - передаём дальше.

Влад
08.09.2017
17:12:35
у либы нет буфера на прием :( соотвественно, если задумались при отправке, потеряли то, что нам хотели отправить.

Snusmumriken
08.09.2017
17:13:23
Ничоси. Даже у микроконтроллеров обычно есть буферы на ногах. Хм.

Влад
08.09.2017
17:13:53
ну на символ есть, вроде.

Snusmumriken
08.09.2017
17:15:47
Карочи, смотри. 1. Поток приёма - постоянно, в бесконечном цикле считывает фигню с девайса и от главного потока. 2. Если нам начали что-то передавать - считываем (до символа-терминатора), занимаемся исключительно считыванием. 3. Если пришла команда на отправку - отправляем. Потом дальше считываем. Хм, это просто приёмо-передатчик в потоке.

Влад
08.09.2017
17:16:53
надо попробовать, да. боюсь что проц нагрузит постоянное кручение в потоке с нулевым таймаутом

Snusmumriken
08.09.2017
17:17:21
Не нулевой таймаут, влепи там слип на 0.05с, если ничего не пришло. Если пришло - не надо слипать, надо принимать.

Google
Snusmumriken
08.09.2017
17:20:10


Вот тебе нужно почти то же самое, только вместо повторной отправки сообщения - анализ приёма от основного потока, мало ли ему надо что-то отправить. Слип если ничего не происходит - присутствует. Грузит не особо, в общем. P.S. Это - обнаружение устройств в локалке по ssdp.

annelin
08.09.2017
17:33:51
короче

если кому понадобится

передать в процесс в STDIN что-то и получить из STDOUT

https://pastebin.com/a5Z3TnBd то вот :)

Aydar
08.09.2017
18:07:17
https://pastebin.com/a5Z3TnBd то вот :)
Вот если пофиг на кроссплатформу зачем lua использовать?

Snusmumriken
08.09.2017
18:07:48
Ну, мне не пофиг, поэтому я делаю ffi-биндинги.

Aydar
08.09.2017
18:09:11
Ну, мне не пофиг, поэтому я делаю ffi-биндинги.
То есть делаешь биндинги к platform depend вещам?

Snusmumriken
08.09.2017
18:09:47
Ага. Ну, ты можешь углядеть, что тут есть подгрузка динамической либы в зависимости от оси/битности.

Snusmumriken
08.09.2017
18:11:38
Потому что могу. Почему нет? Оверхед нулевой, возможность инициализации всяких сишных буферов/структур для функций - присутствует, и всё такое. Кроссплатформа - аналогично. Перекомпиляций виртуальной машины - не нужно. Писать сишную либу-оболочку тоже не нужно.

Snusmumriken
08.09.2017
18:12:51
Боюсь что нулевой : ) Ну, аналогичный вызову обычной луа-функции.

Snusmumriken
08.09.2017
18:13:16
Нет этой зависимости. Luajit содержит ffi.

Aydar
08.09.2017
18:13:30
А ты про jit

Тогда конечно

Snusmumriken
08.09.2017
18:14:32
Да, есть необходимость использования luajit. Только одна виртуальная машина, на которой оно работает. Ну, то есть про ванильную lua/5.2/5.3 стоит забыть. Правда, я и так пишу исключительно на luajit, поэтому пофигу. И она используется в 90% случаев на всём высоконагруженном.

Snusmumriken
08.09.2017
18:15:23
То есть, openresty/nginx/tarantool = luajit.

Обычные биндинги? Это какие?

Страница 154 из 307