mva
так это ж гуй для LÖVE, а не для ОС
Roman
Кстати, интересный момент! Слак - удивительно тяжелый мессенджер, как раз разбивается на несколько процессов, каждый проект - отдельный процесс, главный процесс и ещё один процесс. Благодаря сему гениальному разбиению, мессенджер способен сжирать 1.5гб оперативки.
А вдруг это значит, что много процессов это плохо? И нодин подход с циклом в одном потоке более выгодный?
mva
на самом деле - говно полностью грузить весь электрон в каждом потоке
mva
если держать в потоках только нужные данные, то можно жрать меньше оперативки
mva
зато если упадёт один поток - остальные могут остаться жить
Roman
Вон у плазмы один поток и она не падает!
mva
ну, это конкретно электрон
mva
а я про модель многопоточность vs однопоточность
mva
:)
mva
вообще, тут чатик про Lua :)
mva
как по мне:
1) кути норм
2) делать гуй для скриптов на интерпретируемых языках - кака
3) использовать sdl для ОС-гуя, а не для игорей - СТРАННО
mva
его придумали для облегчения портирования с венды 😃
mva
кроссплатформенность - это когда сразу кроссплатформенно
mva
те же кути
mva
(хотя и там можно насрать кучу WinAPI)
mva
нет, у меня GNU
ㅤ
Ну, наверное можно использовать Electron с lua.vm.js. :)
mva
(с юникса я слез лет 15 назад)
mva
плюс-минус тапок
mva
Snusmumriken
Кстати, интересный момент! Слак - удивительно тяжелый мессенджер, как раз разбивается на несколько процессов, каждый проект - отдельный процесс, главный процесс и ещё один процесс. Благодаря сему гениальному разбиению, мессенджер способен сжирать 1.5гб оперативки.
А вдруг это значит, что много процессов это плохо? И нодин подход с циклом в одном потоке более выгодный?
Дело же не в процессах, а в менеджменте памяти : )
Когда ты кешируешь 100500 вещей, а потом снова кешируешь и ещё раз кешируешь, строишь хеши для быстрого поиска/доступа - как раз выжираются 1.5 гб памяти.
Телеграмм - однопоточен. Мало того, абсолютно все сообщения, которые успели придти пока телеграмм был закрыт - приходят одним единственным запрос-ответом.
Это лишний раз подтверждает то, что подход золотого молотка - не работает : )
Anonymous
как отправить бинарные данные в процесс. который открыли popen'ом и прочитать оттуда вывод?
Anonymous
`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()`
Anonymous
не работает
Anonymous
точнее, работает, но высирает stdout программы (mpg123) в консоль, а не в переменную
Snusmumriken
io.popen('program -file "'..filepath..'")
Например так.
Anonymous
у нас нет файла
Anonymous
и желательно обойтись без создания
Snusmumriken
А как программа запускается с бинарными? : )
Запиши в файл тогда.
Anonymous
мы считали бинарный поток в переменную
Anonymous
я передаю это в stdin программе
Snusmumriken
Программа вообще способна к обработке бинарных в команде запуска?
Anonymous
а вот из stdout прочитать уже не могу
Anonymous
мы ей из STDIN скармливаем
Anonymous
что-то вроде cat mp3file | mpg123... -
Anonymous
не хватает опции "a" к io:popen'у
Snusmumriken
io.popen возвращает всё что программа выдала в stdout.
Ну, должна, по крайней мере : )
Snusmumriken
Anonymous
я открываю popen с флажком "w"
Anonymous
на запись)
Anonymous
этим самым передаю данные на вход программе
Snusmumriken
Извращенец ))0
Хотя хрен знает, может, некоторые умеют так работать, не сталкивался.
Anonymous
`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)`
Anonymous
вот так работает
Anonymous
но вывод записывается в out.sln
Anonymous
т.е. мы создаём файл
Snusmumriken
А без -w оно куда пишет? : )
Anonymous
в консоль
Snusmumriken
Ну и считывай это.
Anonymous
как?
Snusmumriken
mpg123:read('*all')
Anonymous
ага
Anonymous
хуй
Anonymous
потому что мы открыли mpg123 с "w"
Anonymous
на запись
Snusmumriken
Открываешь в режиме rw.
Anonymous
с rw не открывается
Anonymous
в том-то и вопрос - как открыть popen на чтение-запись :)
Snusmumriken
a+?
http://lua-users.org/wiki/IoLibraryTutorial
Anonymous
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").
Anonymous
a+ это у open()
Snusmumriken
Я подозреваю что io.popen поддерживает те же самые режимы что и open.
Проверяй а не спорь.
Anonymous
я проверил a, a+, rw, r ,w, w+
Snusmumriken
Ошибку дропает?
Anonymous
вместо хендла возвращает nil
Anonymous
я уже нагуглил решение
Anonymous
спойлер: NEEQUAQUE
Snusmumriken
Тогда пиши во временный файл )))
Я, когда развлекался с подписями crypto pro - так и делал ))
И да, я тоже не люблю когда нельзя обойтись без лишней записи на хард. Что поделать.
Snusmumriken
Знаешь как ты можешь выкрутиться?
1. Использовать эту фиговину как библиотеку, написать ffi-биндинг или dll(so)-либу.
2. Написать отдельную софтину, которая умеет принимать бинарь прямо в команде запуска (дофига огромная команда получается, но что поделать)
3. Разобраться с этой, мало ли что упустил.
Snusmumriken
Да, он самый офигительный и быстрый, как с реализации так и по производительности. Если уметь писать на сишке.
Snusmumriken
Ну это вообще классика. А я его прочитал в пятнадцать лет, когда ещё не думал о кодинге (типа, для лёгкого чтения перед сном), а сейчас забыл нафиг ((((
vvzvlad
У меня есть код на луа, который через либу lua-rs232 общается с железкой. Проблема в том, что используя lanes, я могу открыть /dev/ttyUSB0 только в одном потоке, и не могу через linda передать дескриптор открытого порта. А мне надо в одном потоке читать оттуда данные(находясь в бесконечном цикле проверки нового символа), а в другом потоке писать туда данные, в зависимости от каких-то событий.
Кто нибудь может подсказать, как мне это сделать? Либо как-то передать дескриптор в другой потоке, либо создать копию /dev/ttyUSB0, чтобы я открыл два устройства, и в одно писал, а в другое читал.
Snusmumriken
У меня есть код на луа, который через либу lua-rs232 общается с железкой. Проблема в том, что используя lanes, я могу открыть /dev/ttyUSB0 только в одном потоке, и не могу через linda передать дескриптор открытого порта. А мне надо в одном потоке читать оттуда данные(находясь в бесконечном цикле проверки нового символа), а в другом потоке писать туда данные, в зависимости от каких-то событий.
Кто нибудь может подсказать, как мне это сделать? Либо как-то передать дескриптор в другой потоке, либо создать копию /dev/ttyUSB0, чтобы я открыл два устройства, и в одно писал, а в другое читал.
Открой lanes-поток, который занимается только и исключительно чтением-записью по команде. Чтобы обработка тусила в другом потоке.
B
оффтоп, но вот только открыл для себя либген, прекрасное место, почему упоминаний о таких местах сложно встретить повсеместно
vvzvlad
так если я начинаю читать(p:read(1, 200)) из него, то я блокирую поток, пока не прочитаю символ или не истечет таймаут. А мне нужна относительно быстрая реакция на приходящие сообщения, и быстрая запись, если надо. 200мс уже много.
Snusmumriken
Я кодить начал с двадцати лет.
В двенадцать шёл на курсы по паскалю, отходил три занятия (с блок-схемами), потом начались двойки в школе, и мама забрала оттуда, ибо договаривались на отсутствие двоек (((
Snusmumriken
vvzvlad
у либы нет буфера на прием :( соотвественно, если задумались при отправке, потеряли то, что нам хотели отправить.
Snusmumriken
Ничоси. Даже у микроконтроллеров обычно есть буферы на ногах. Хм.