Snusmumriken
Ну, у меня у самого древние данные, например от разраба MyReflection, у которого были большие проблемы с рекламой своей игрушки и с набором бабосов с кикстартера.
🐅🤦‍♂️
У меня есть скрипт, который работает как сервер однопоточный - слушает порт, присоединяется, обменивается данными. Я хочу переписать его с корутинами, что-бы он передавал файл на телефон одним потоком, принимал лог с телефона другим потоком. Запускать ./server.lua , а потом отсылать команды типа ./server.lua push_file path2zipfile Как мне наладить межпроццессное взаимодействие те проверять, что запущен экземпляр и отправлять ему команду, типа там в файл писать какой временный?
mva
ты путаешь корутины и мультитрединг
mva
наверное, открою тебе секрет, но сами по себе корутины многопоточности не добавляют
🐅🤦‍♂️
На телефоне - мультитрединг, несколько потоков слушают порты сокетом. А на малинке их обрабатывать через корутины, по очереди.
Serezha
В общем, полистывая стаковерфлоу и ожидая что бабосики будут капать — далеко не укатишься, даже в зарубежном стартапе.
Вообще речь шла о том что в офисе ты можешь спросить совета у коллег, а на удаленке у тебя только стек. И вот как Снус все извратил :) Я понимаю что все здесь молодые и модные а во время оно бывало кодишь и без коллег и без стека - есть мануал на процессор, есть таблички регистров и флагов - и сидишь ты такой и бьешься над какой нибудь загогулиной днями и неделями. Да в целом весь научный мир так и работает. Когда решаешь сложные задачи никто не ждет что ты будешь тикеты каждые два часа закрывать
Serezha
Лично меня стек делает продуктивнее в разы. Это рабочий инструмент, очень мощный, позволяет быстро находить ответы и готовые решения
Totiks
Здравствуйте, в lua я начинающий, есть задача , считать выбраный адрес из таблицы, и воспроизвести его в mpv , написал вот такой код : n={'http://jazz128.streamr.ru/','http://radio.adds.su:8020/radioj','http://195.78.93.18:8000/jazz','http://91.190.117.131:8000/live'} print("1.>> jazz_89.1") stat=n[1] print(stat) os.execute("mpv --volume 45 stat ") io.read() но код явно неправильный, поскажите пожалуйста как написать правильно, в чем ошибка и закавыка? Заранее спасибо!
Snusmumriken
Ух ты какая приколюшка.
Snusmumriken
А я как раз сравнительно недавно что-то похожее писал. Только воспроизведение в игровом фреймворке love2d.
Snusmumriken
I wrote online audio stream player.
Snusmumriken
И ещё, кажется есть ошибка в том, что оно не качает файл. Скачка файлов под линуксом/виндовс-10 делается в командной строке с помощью курла. Но курл не отпустит управление пока не скачает файл полностью.
mva
(а ещё не очень понятно зачем запускать lua-скрипт и из него mpv, если mpv сам линкуется с liblua(/jit)
Snusmumriken
А, mpv типа сам подрубится?
mva
он хочет mpv скормить ссылку, но вместо это скармливает "stat"
Snusmumriken
Оки
Totiks
а как передать stat как переменой
mva
а как передать stat как переменой
в идеале - начать понимать синтаксис языка. Тогда этот вопрос пропадёт.
Snusmumriken
Здравствуйте, в lua я начинающий, есть задача , считать выбраный адрес из таблицы, и воспроизвести его в mpv , написал вот такой код : n={'http://jazz128.streamr.ru/','http://radio.adds.su:8020/radioj','http://195.78.93.18:8000/jazz','http://91.190.117.131:8000/live'} print("1.>> jazz_89.1") stat=n[1] print(stat) os.execute("mpv --volume 45 stat ") io.read() но код явно неправильный, поскажите пожалуйста как написать правильно, в чем ошибка и закавыка? Заранее спасибо!
Ну в общем, тогда оно должно выглядеть примерно так: local list = { 'http://jazz128.streamr.ru/', 'http://radio.adds.su:8020/radioj', 'http://195.78.93.18:8000/jazz', 'http://91.190.117.131:8000/live' } for i, v in ipairs(list) do -- чтобы по красоте local str = ('%10d %s'):format(i, v) print( str ) end local i, station while true do print("Select station") i = io.read('*number') station = list[i] if station then break end print("No station on " .. i .. " position") end print('Selected station: ' .. i .. ' ' .. station) os.execute("mpv --volume 45 " .. station) io.read()
mva
В твоём конкретном случае - поможет и конкатенирование ("mpv blablabla "..stat)
mva
но(!)
mva
чтобы ты лучше понимал суть происходящего - советую сделать так:
mva
("mpv blablbalba %s"):format(stat)
Snusmumriken
Блин, а у меня в WLS не работает mpv ((( Мб обновиться надо.
mva
где он тебе интерфейс будет рендерить? :)
Totiks
аж всплакнул. спасибо вам!
Snusmumriken
mva
Какой такой интерфейс? ))
ну, формально, это ВИДЕОплеер :)
mva
но можешь попробовать скормить ему там -vo null ;)
Totiks
mpv вроде консольный ,
Totiks
?
Snusmumriken
но можешь попробовать скормить ему там -vo null ;)
Очень интересно, что с vo что без, одна фигня. Через sudo тоже пробовал. Ла-а-адно, забью тогда пока.
mva
я даже и не ожидал, что оно на венде заработает
mva
надо полуркать другие аудиовыводы :)
mva
// но ты уже решил забить :)
Snusmumriken
Ставлю pulseaudio ))
mva
Ставлю pulseaudio ))
я очень удивлюсь, если PA заработает на венде
Totiks
ребятки спасибо уже второй раз помогаете
Egor
Я же правлиьно понимаю все таки, что если хочу передавать именнованные аргументы, то только через таблицы?
mva
ну, или другой вариант - явный порядок и предефайн имён в объявлении функции
Egor
ну, или другой вариант - явный порядок и предефайн имён в объявлении функции
просто могут быть пропущенные, хочу чтобы были дефолтные значения
Egor
как печально получается.... fun a(var1, {}, var2)
Snusmumriken
я очень удивлюсь, если PA заработает на венде
В целом, есть хаки. https://token2shell.com/howto/x410/enabling-sound-in-wsl-ubuntu-let-it-sing/
Snusmumriken
как печально получается.... fun a(var1, {}, var2)
function foo(t) local x = t.x or 0 --< дефолты local y = t.y or 0 return x + y end print( foo{x = 10, y = 20} ) --> 30 print( foo{x = 1} ) --> 1
Snusmumriken
Ух как страшно. Ты зачем обычные строковые ключи загоняешь в ['bla']? Там же нет спецсимволов, можно просто bla.
Snusmumriken
Всё ровно так, как написано на упаковке
Snusmumriken
У луёв даже сахарок есть, что функцию с таблицей можно вызывать без круглых скобок, как раз для именованных аргументов. Но злоупотреблять этим не советую, потому что таблицы создаются в оперативной памяти а не в кеше, и разметка стоит довольно дорого (а потом ещё мусор собрать), если тебе это важно.
Snusmumriken
Ну ругнулся потому что ты дефолты внутри функции не прописал. Да, если какая-то переменная булеанова, и дефолт — true — проверяй тип.
Snusmumriken
Ну типа local b = type(t.bool) == 'boolean' and b or true Обычный or решит, что если передали false, то это фигня полная, и принудительно укажет true.
Snusmumriken
Snusmumriken
Пришло время мемов про булы.
fgntfg
Какая-то хрень
Snusmumriken
Окей. vector<bool> это явно фигня для замены флагов. Ну, типа передача куда-то набора флагов для чего-нибудь, мол "если первый флаг выставлен в true — то делаем какую-то фигню". Нормальные люди передают char, где выставляет флаги битовыми сдвигами типа char |= 1 << 1; для выставления второго бита в 1, или v = (char >> 1) & 1; для чтения. А вектор (динамический массив) — это офигенный оверхед, проще уж тогда структурой фигачить. unordered_set<bool> — это вообще хтоническая фигня. Если у вектора мы могли определить, что значит тот или иной бул по соглашению в программе и порядковому номеру, то тут НЕ МОЖЕМ, потому что он НЕ УПОРЯДОЧЕН )))
mva
ну, эт
mva
vector<bool> не только для флагов, но и если хочется побайтоважествовать
Snusmumriken
Но не умеешь в битовые сдвиги. да? Ах да, каждый элемент vector<bool> это всё ещё short, то есть для хранения одного бита расходуется целый байт. Если компилятор это не оптимизирует, он гипотетически может.
Snusmumriken
Вот в луях — хорошо, тут типы принципиально довольно жирные, но ты не паришься на эту тему просто потому что с этим ничего нельзя сделать.
fgntfg
Сделать можно
Snusmumriken
Грабануть ffi или сишные либы, да. Но в базовой поставке — нет.
fgntfg
Нужно идти глубже
Max
Но не умеешь в битовые сдвиги. да? Ах да, каждый элемент vector<bool> это всё ещё short, то есть для хранения одного бита расходуется целый байт. Если компилятор это не оптимизирует, он гипотетически может.
В том и дело, что vector<bool> -- такая специализация вектора, в котором может быть что угодно (но чаще всего каждый элемент занимает один бит). И это нарушает свойства вектора, поэтому некоторые считают vector<bool> багом стандарта наподобие auto_ptr
Snusmumriken
В том и дело, что vector<bool> -- такая специализация вектора, в котором может быть что угодно (но чаще всего каждый элемент занимает один бит). И это нарушает свойства вектора, поэтому некоторые считают vector<bool> багом стандарта наподобие auto_ptr
Насколько я знаю, некоторые компиляторы оптимизируют vector<bool> в обычный массив char с кучей проверок. Добавление-доступ элементов — через те же сдвиги и реалокацию при переполнении. Но я не в курсе ни о каких других оптимизациях.
Max
Какое свойство вектора это нарушает?
Например, нельзя получить bool указатель на элемент вектора, прибавить 1 и получить следующий элемент
Igor
Блин, а у меня в WLS не работает mpv ((( Мб обновиться надо.
У mpv есть собранные бинарники для винды, если ещё актуально https://sourceforge.net/projects/mpv-player-windows/files/64bit/
Igor
У mpv интерфейс луями делается
Igor
С помощью ASS
Igor
Можно свой интерфейс написать