Snusmumriken
Нене, заголовок - это уже какие-то данные. Если заголовок - 00000000 00000000? Такие есть.
Snusmumriken
По заголовку
На самом деле там проще, автосинхронизирующиеся манчестерские коды. За 0/1 принимается смена потенциалов, а не наличие/отсутствие напряжения.
Snusmumriken
Snusmumriken
Когда мы на ардуине работаем с spi, или когда Зайцев что-то принимает/отправляет по UART - примерно то же самое. Чтобы даже если clock на разных железках сильно расходится, всё равно принимать с приемлемой скоростью без расширений протокола для исправления ошибок в таймингах. К счастью, за это обычно отвечает железка, и нам не приходится извращаться с этим.
Alexey
ммм... У меня есть библиотека luars232, которая читает и пишет в uart(=RS232). У нее блокирующее чтение и нет буфера, и жесткие требования насчет скорости, и большую часть времени она занимается тем, что в бесконечном цикле проверяет, не пришли ли ей данные. Если пришли — то она их разбирает, передает в функцию, функция согласно своей логике собирает пакет и отправляет его обратно в порт. Работает, по получается вещь в себе — чтение блокирует сам скрипт, а другой скрипт порт открыть уже не может, там доступ монопольный. Я хочу сделать отдельный скрипт/поток/тред, который бы занимался только чтением-записью в порт(не сетевой, а RS232-порт, физический). Т.е. он мониторит порт, ему пришли данные — он записал их в бд-шку, в табличку "принято". другому скрипту пришел коллебек, он данные распарсил, в табличку "отправить" бд записал, что ему отправить надо — оп, первому скрипту тоже пришел коллбек, он в порт выплюнул, то, что пришло. Третий скрипт хочет что-то записать, он тоже в табличку "отправить" засунул, и первый скрипт точно так же отправил. Вот я и хочу понять, как мне этот механизм передачи сообщений между потоками сделать, чтобы ресурсов много не ело, и задержка была не очень большая.
Я использовал zmq https://github.com/moteus/lua-lluv-rs232
Yuriy
Ребята а кто подскажет под openresty рабочую библиотеку по rabbitmq?
Anonymous
lua-resty-rabbitmq? //кэп
Yuriy
Как бы да, толкьо у мен так и не получилось его запусить
Anonymous
Всем здарова
Tverd
Привед
vvzvlad
Я использовал zmq https://github.com/moteus/lua-lluv-rs232
О! Спасибо. Это хороший промежуточный вариант.
Alexey
О! Спасибо. Это хороший промежуточный вариант.
Я не люблю lua-lanes для таких задач потому что ее linda не возможно интегрировать ни с одним сокетом. zmq с транспортом inproc используют очередь для передачи данных и сокеты для сигнализации о приходе сообщения
Alexey
https://gist.github.com/moteus/b0ec62ad92e9177906b7
Danil
Ку, с чего начать изучение Lua?
Yuriy
c официальной документации
Snusmumriken
Ку, с чего начать изучение Lua?
С целей. И с этого. http://tylerneylon.com/a/learn-lua/
vvzvlad
Ты имеешь ввиду то, что сокеты нельзя передавать через linda?
Как и дескриптор открытого порта в luars232
Snusmumriken
Ну, linda шарит сериализованные данные, безопасность хуё-моё. Это нормально.
Alexey
Ты имеешь ввиду то, что сокеты нельзя передавать через linda?
Передать сокет это не большая проблема, а вот ожидание события одновременно на сокете и на linda это проблема. Поллинг не лучшая альтернатива. Возможно использовать сокет для сигнализации о наличии сообщений в очереди и использовать очередь для передачи данных. Именно это и делает zmq
vvzvlad
Я использовал zmq https://github.com/moteus/lua-lluv-rs232
хорошо, я запустил, у меня работает. только я не понял, как мне с помощью lluv запустить еще один поток парралельно, чтобы там крутить что-нибудь другое?
Alexey
lluv-rs232 сам запускает поток
vvzvlad
да, это понятно. я просто не понимаю, как мне еще что-то запустить, цикл там с периодической проверкой того, что пришло, например.
Alexey
lzmq.threads щас пример найду
vvzvlad
попробовал сделать через uv.idle(), нашел в примерах, но тогда поток с rs232 начинает работать только после того, как отработает этот поток
Alexey
https://github.com/moteus/lua-lluv-poll-zmq/blob/master/examples/actor.lua
Alexey
в этом примере lluv используется из потока, но можно и в главном также мониторить
Alexey
local function thread(pipe) local uv = require "lluv" uv.poll_zmq = require "lluv.poll_zmq" uv.poll_zmq(pipe):start(function(handle, err, pipe) print("Thread recv:", pipe:recvx()) end) uv.timer():start(1000, 1000, function() pipe:sendx('world') end) uv.run() end local uv = require "lluv" local zth = require "lzmq.threads" uv.poll_zmq = require "lluv.poll_zmq" local actor = zth.xactor(thread):start() uv.poll_zmq(actor):start(function(handle, err, pipe) print("Main recv:", pipe:recvx()) end) uv.timer():start(500, 1000, function() actor:sendx('Hello,') end) uv.run()
Alexey
Нужны еще проверки на ошибки. Например, когда закрывается главный посто zmq возвращает ошибку ETERM в рабочих и потока и они могут завершится корректно
vvzvlad
аа, как сложно.
Alexey
Что сложно?
Alexey
local pipe = zthread.xactor(function(pipe) -- thread code end):start() -- main code
Alexey
и далее используеш pipe для обмена сообщениями Можно еще при старте передать аргументы в поток lluv-poll-zmq позволяет использовать эти pipe для ожидания данных Но при желании можно и socket.select использовать если он поддерживает нативные дескрипторы/сокеты (pipe:fd() или pipe:socket():fd() точно не помню)
Alexey
Ну или установить таймоут на IO и делать pipe:recv()
B
кто что может сказать по поводу gui на lua?
Alexey
Я использовал IUP для прстых приложений. Ну и https://studio.zerobrane.com/screenshots
Danil
Помогите написать приложения для решения матрицы
B
function test() local names = {} names[1] = [[\pr1]] names[2] = [[\pr2]] names[3] = [[\pr3]] local aPath = [[]] local flag = true while(flag) do local num = io.read('*n') if num ~= 666 then aPath = [[PowerShell Compress-Archive -Path 'E:\Projects\Love\projects]] .. names[num] .. [[\*']] .. [[ -CompressionLevel NoCompression -DestinationPath 'E:\Projects\Love\compressed projects]] .. names[num] .. [[']] os.execute(aPath) else flag = false end -- if end end -- while end end -- function end что то такое, страшно но работает еще бы красивенько дописать пару строк на изменение расширения самая красивая из всех это ren *.zip *.love но не выходит это красиво вставить внутрь и потому сделал отдельным батником
B
https://pastebin.com/d3vYG19Q
B
вот тут те же костыли только немного обделаные https://pastebin.com/gX8p5jPL
Anonymous
Всем привет
Anonymous
Есть тут кто живой?
Anonymous
Anonymous
Anonymous
При нажатии на шарик число нажатий не увеличивается
Anonymous
не совсем понимаю почему
Anonymous
Anonymous
Вот так заработало
Tverd
о, вижу корону ))))
B
Я использовал IUP для прстых приложений. Ну и https://studio.zerobrane.com/screenshots
а там как, я бы просто с радостью посмотрел на то как, если возможно, без особого шаманства самому сделать какой то gui как оно работает и как оно там устроено, а то просто мозга не хватает как то понять самостоятельно, щас вон прикинул разве что на love через картинки лепить но это такие вила, я уже представляю как буду делать чекбокс, нажал на картинку поменял ее на картинку с галочкой и в коде флаг чек изменил на тру =)
Anonymous
о, вижу корону ))))
можешь что по ней сказать?
Anonymous
Я только скачал, только первый тестовый урок прогнал
Tverd
Много хорошего, но как обычно есть и минусы. Нельзя пронаследоваться по человечески от короновских примитивов. Нет исходников встроенных скриптов.
Tverd
А, и физические объекты должны быть в одной группе. Это меня лично поразило.
Anonymous
Ну хз
Anonymous
Попробую
Anonymous
Мне несколько приложений надо написать для начала
Tverd
Давай, если чего спрашивай, что знаю, подскажу
Anonymous
Давай, если чего спрашивай, что знаю, подскажу
Сам делал что-нибудь на короне?
Tverd
Шашки на иос и андроид
Anonymous
И как?
Anonymous
Я хочу шахматы сделать
Tverd
Отлично, то что надо, либа для расчета ходов на чем?
Anonymous
Откуда я знаю
Anonymous
Я только скачал
Tverd
Ну разбирайся
Anonymous
Хорошо)
B
есть вопросссец
B
уже некоторое время долблюсь с os.execute как я понял несколько выполнений подряд не работют, выходит каша или часть команд выдает ошибку, как с этим справиться? вот типа так оно не работает : os.execute(a) os.execute(comm) точнее работает но как то по своему local a = [[PowerShell Compress-Archive -Path PATH -CompressionLevel NoCompression -DestinationPath PATH]] local comm = [[PowerShell cd PATH ; Dir *.zip | rename-item -newname { [io.path]::ChangeExtension($_.name, "extension") } ; pause]] function main() os.execute(a) os.execute(comm) end это все добро не особо работает, кто сталкивался, что делать?
Anonymous
popen чем не ок?
Snusmumriken
а) Можно запихивать всё в одну команду через \n, б) io.popen, да. Позволяет нормально взаимодействовать с консолькой как с "файлом".
B
нищенезнаю про io.popen
Snusmumriken
Почитай. Это как сессия в консоли, вместо кучи отдельных исполнений команд.
B
там просто основная проблема это ругань на rename-item отдельно само по себе через shell ноль проблем а через os.execute ругань
B
не хочу делать скрипты и пускать их, хочу все внутри в луа файле но глядишь нужно будет открывать записывать выполнять а потом удалять файл что б на верочку
Tverd
Хода. Е2Е4)
B
как вообще лучше строить код? стоит ли к примеру загонять повторяющиеся части в отдельные функции?
B
просто щас так попробовал и получилось что у меня функция которая в себе вызывает еще две функции поменьше вот и весь код
B
там такие пироги что мелкие функции строк по 30 из них я могу позабирать по 10 и сделать из них еще одну отдельную функцию и выходит в целом что одна функция строк на 200 разваливается на пяток поменьше которые друг друга вызывают то тут то там