Hello, World! 🎄
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
значок установлен постоянно с завода
UtoECat
Hello, World! 🎄
Hello, World! 🎄
хорошо, вы можете показать это и как это произошло
Я использовал данную библиотеку: https://github.com/max1220/lfb
Она позволяет рисовать пиксели поверх linux frame buffer.
Для поддержки мышки я читал файл /dev/input/mice и обрабатывал события
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Aqendo
ураа поздравьте меня
Aqendo
я сделал музыкального бота
Aqendo
ещё одного
Aqendo
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
ᴠɪᴋᴀʀɪ ʜᴏɴᴇsᴛ
Hello, World! 🎄
Aqendo
Викари подменили мне кажется
Aqendo
Ну не может человек который делал такие шедевральные шифровки так тупить
Aqendo
Или он не делал🧐
0xSU
Hello, World! 🎄
Вот пример, того что я делал поверх linux frame buffer, окно и фон сделаны вручную
Сейчас продолжаю писать DE (если можно это так назвать).
Приложения это просто lua файл:
return function()
while true do coroutine.resume()
end
end
Открываются вот так:
tasks.add('test', 100, 100, 300, 200)
tasks.add('test', 500, 500, 150, 100)
А в task update просто перебираются процессы и возобновляется работа coroutine:
coroutine.resume(tasks.processes[i]._coroutine_)
Hello, World! 🎄
Сейчас продолжаю писать DE (если можно это так назвать).
Приложения это просто lua файл:
return function()
while true do coroutine.resume()
end
end
Открываются вот так:
tasks.add('test', 100, 100, 300, 200)
tasks.add('test', 500, 500, 150, 100)
А в task update просто перебираются процессы и возобновляется работа coroutine:
coroutine.resume(tasks.processes[i]._coroutine_)
Скорее всего для отрисовки графики корутина будет возвращать таблицу с действиями по типу:
rect 10, 10, 100, 100 (отрисовать прямоугольник)
и т.д
Hello, World! 🎄
Да, наверно самое простое решение возвращать таблицу, где будут находится действия для обработчика графики:
return function()
while true do
array = {{'rect', 10, 10, 50, 50}}
coroutine.yield(array)
end
end
Hello, World! 🎄
Обработчик:
for j = 1, #data do
if data[j][1] == 'rect' then
buffer:set_rect(data[j][2]+tasks.processes[i].x, data[j][3]+tasks.processes[i].y+20, data[j][4], data[j][5], 200, 200, 200, 255)
end
end
Snusmumriken
Да, наверно самое простое решение возвращать таблицу, где будут находится действия для обработчика графики:
return function()
while true do
array = {{'rect', 10, 10, 50, 50}}
coroutine.yield(array)
end
end
Зачем тебе тут корутины?
Почему не
return function()
return {{'rect', 10, 10, 50, 50}}
end?
Snusmumriken
Ляяя
Hello, World! 🎄
А вообще мне лучше отказатся от Lua, в пользу Си.
Чтобы все графическое окружение было на Си и возможно туда добавить vm, чтобы приложения запускались внутри виртуальной машины (которая будет просто перебирать инструкции и выполнять их), плюс своей vm, это-то что я смогу к примеру сделать так, чтобы если у приложения не было доступа к файловой системе, он не смог получить к ней доступ, пока пользователь не выдаст права.
Snusmumriken
Есть подозрение что ты дичайше переусложняешь ерунду
Snusmumriken
Давай начнём с того, что у тебя за приложения?
Snusmumriken
Разные луа файлы, которые что-то там делают
Hello, World! 🎄
+
Snusmumriken
Так вот, что же они делают?
Hello, World! 🎄
Работают с памятью
Snusmumriken
Как? Что именно?
Snusmumriken
Туда впихивается реакционная модель? А ля пользовательские колбеки под разную ерунду.
Hello, World! 🎄
Как? Что именно?
Создаются переменные, вычисляются различные значения.
Я думаю, то что все что связано с программированием это работа с памятью.
Snusmumriken
Не трахай мне мозги, пожалуйста. Что именно должны делать приложения (допустим) на луа?
Snusmumriken
Что за оригинальное сишное ядро? Что оно делает?
Snusmumriken
Это графический редактор? Музыкальный проигрыватель?
Hello, World! 🎄
Snusmumriken
Или это кусок ОС? Типа, хочешь сделать сервисы на луа?
Snusmumriken
Так вот.
Snusmumriken
Во все юзерские игры и прочие калькуляторы — элементарно делаются колбеки.
Смотри на ловкину модель.
Snusmumriken
function love.load() ... end
function love.update(something) ... end
function love.draw() ... end
Всё вот это вот.
Пользователь может выгрузить тебе элементарную табличку с функциями.
Snusmumriken
Ты берёшь и дёргаешь функции по списку событий например из графического/событийного ядра например.
Snusmumriken
Юзер там себе придумывает что хочет в локальных переменных, а ты просто такой берёшь и дёргаешь. Хочешь — под каждое приложение по стейту заебошишь.
Хочешь — распараллелишь на потоки. И так далее.
Hello, World! 🎄
Snusmumriken
Так вот.
Snusmumriken
Зачем нужны корутины?
Snusmumriken
В целом, ты понимаешь для чего они в принципе нужны?
Hello, World! 🎄
В целом, ты понимаешь для чего они в принципе нужны?
Чтобы упростить написание кода, допустим у меня на Unity была генерация мира, чтоб проект не зависал там корутины были, которые проходили несколько циклов и останавливались (чтобы unity отрисовал часть чанка).
Snusmumriken
И что это значит?
Snusmumriken
Вообще, ты мог бы на юнити написать всё ровно то же самое без корутин.
Snusmumriken
Например:
world_generator = {
current_chunk = 0
max_chunks = 10
map = {}
}
function world_generator:step()
self.current_chunk = self.current_chunk + 1
if self.current_chunks > self.max_chunks then
return true
end
local chunk = not_so_long_generation_of_map_chunk(self.current_chunk)
table.insert(self.map, chunk)
end
Snusmumriken
Это называется "держать состояние в структуре".
Hello, World! 🎄
Окей, допустим это и так понятно
Snusmumriken
Что ты делаешь когда берёшь корутину?
Snusmumriken
Простой ответ: ты начинаешь держать состояние в функции.
Зачем? Чтобы асинхронный код начинал выглядеть как синхронный.
Основная задача корутин — переоформлять код, чтобы тот не превращался в лапшу из колбеков.
Snusmumriken
Например, вот жаваскрипт.
Если бы этот сценарий был бы не на async-await, он бы превратился в лапшу из колбеков.
Сам жаваскрипт, офк, имеет собственный внутренний цикл который автоматом оформляет задачки и гоняет их пока те не выполнятся.
Igor
Не нравится мне эта тенденция майков, которая идёт последние несколько лет, бетатест на проде производить
Snusmumriken
Hello, World! 🎄
Собственно, мне лучше вообще переписать реализацию посмотрев как работает xorg и wayland, т.к в идеале нужно написать простое графическое ядро, которое будет получать сигнал от приложения и отрисовывать в окне приложения, то что передал процесс приложения.
Сами приложения должны быть отдельные Linux процессы, которые используют библиотеку для посылания сигнала графическому ядру.
Igor
А сейчас баг на баге и багом погоняет
Snusmumriken
У яндекс-диска был баг. Который полностью очищает твой хард при попытке его удалить ))
Snusmumriken
Очепятка в путях, лол кек.
Snusmumriken
Разумеется нет. Подобная ошибка — худший маркетинг который можно придумать. Инстант полная потеря доверия.
Igor
А у яндекса всегда продукция низкосортной была
Igor
Они только в последнее время что-то более-менее внятное делать начали
Igor
Я даже представить не могу в какой вселенной это может быть маркетинговым ходом))
Igor
Через несколько дней - это уже намеренно, иначе никак
Igor
А это уже уголовка, если что