Перейти к содержимому
logic

roboOS графическая ос для робота

Рекомендуемые сообщения

изначально разрабатывалась под eeprom от сюда и фичи boot to external os и много плохого кода

ос была портирована на скорую руку так что извините и зарепортире если работы вдруг окажется нестабильной

о любых бага просьба репортить в тему

 

yAlPxbz.png

 

функционал

  • установка привата на робота (ака useradd)
  • настройка автозагрузки
  • установка одной из 2 предустановленных тем
  • скачивания программ по url
  • показ документации к программам
  • перемежения/копирования/переименования программ
  • запуск программ

 

установка ос на диск

  • установка с робота: перейдите в тему мода для openOS() и откройте dev устоновшик, и устоновите им micro bios, затем введите на роботе команду:
    mkdir /boot/kernel; wget https://raw.githubusercontent.com/igorkll/roboOS/main/source.lua /boot/kernel/roboOS -f

    затем переключите ос, для этого при загрузке micro bios нажмите alt найтите диск робота и выберите /boot/kernel/roboOS

  • установка с компьютера: устоновите диск будушего и разобраного робота в компьютер перейдите туда куда ом смонтирован (обычьно /mnt/xxx (где xxx первые три буквы uuid диска)) а зачем введите команду 
    wget https://raw.githubusercontent.com/igorkll/roboOS/main/source.lua init.lua

 

пример программы для данной ос(круговая копалка)

local robot = component.proxy(component.list("robot")())

if gui then
    gui.status("to exit press ctrl+c")
end

local sides = {
    bottom = 0,
    top = 1,
    back = 2,
    front = 3,
    right = 4,
    left = 5,
    unknown = 6,

    down = 0,
    up = 1,
    north = 2,
    south = 3,
    west = 4,
    east = 5,

    negy = 0,
    posy = 1,
    negz = 2,
    posz = 3,
    negx = 4,
    posx = 5,

    forward = 3
}

local damegeWait = 0.5

-----------------------------------------------

local function interrupt(time)
    local e = {computer.pullSignal(time or 0.1)}
    if e[1] == "key_down" and e[3] == 3 and e[4] == 46 then
        error("terminated", 0)
    end
end

local function delay(time)
    local inTime = computer.uptime()
    while computer.uptime() - inTime < time do
        interrupt(time - (computer.uptime() - inTime))
    end
end

local oldInterruptTime = computer.uptime()
local function interruptTimer()
    if computer.uptime() - oldInterruptTime > 1 then
        interrupt()
        oldInterruptTime = computer.uptime()
    end
end

-----------------------------------------------

local function wait(event)
    while not event() do
        interruptTimer()
    end
end

local function move(side, swing, dmg)
    while true do
        interruptTimer()
        local detectOk, detectOut, detectType = pcall(robot.detect, side)
        if not detectOk or not detectOut then
            if robot.move(side) then break end
        else
            if swing and (dmg or detectType ~= "entity") then
                robot.swing(side)
                if damegeWait and detectType == "entity" then delay(damegeWait) end
            end
        end
    end
end

local function swing(side, dmg)
    local swingCount, detectOut, detectType = 0, nil, nil
    while true do
        interruptTimer()
        swingCount = swingCount + 1
        detectOut, detectType = robot.detect(side)
        if detectType == "liquid" or detectType == "air" then
            break
        elseif detectType == "entity" then
            if not dmg then break end
            if not robot.swing(side) then break end
            delay(damegeWait)
            if swingCount >= 16 then break end
        else
            if not robot.swing(side) then break end
            if swingCount >= 4 then break end
        end
    end
end

local function waitEntity(side)
    while select(2, robot.detect(side)) == "entity" do interruptTimer() end
end

-----------------------------------------------

local size = 1
while true do
    for i = 1, 2 do
        for i2 = 1, size do
            swing(sides.up, true)
            swing(sides.down, true)
            move(sides.forward, true, true)
        end
        robot.turn(false)
    end
    size = size + 1
end

демо программа демонстрирующая работу gui

 

local docs = {[0] = "TUT OSNOVNA DOCA A UNICODE NE PODDERHITICA POTOMU CHE EKONOMIL BYTES FOR EEPROM"}
local strs = {}
local funcs = {}

table.insert(strs, "null")
table.insert(docs, "null menu point")
table.insert(funcs, false)

table.insert(strs, "yesno")
table.insert(docs, "yesno gui element")
table.insert(funcs, function()
    if gui.yesno("shutdown?") then
        computer.shutdown()
    end
end)

table.insert(strs, "yesno")
table.insert(docs, "yesno gui element")
table.insert(funcs, function()
    if gui.yesno("shutdown?") then
        computer.shutdown()
    end
end)

table.insert(strs, "read")
table.insert(docs, "input")
table.insert(funcs, function()
    local data = gui.read("press ctrl+c to cancel")
    if data then
        gui.warn("msg: " .. data)
    end
end)

for i = 100, 2000, 100 do
    table.insert(strs, tostring(i))
    table.insert(docs, "test doc for menu point "    .. tostring(i))
    table.insert(funcs, function()
        computer.beep(i, 0.1)
    end)
end

gui.setData("gui test", docs, strs)

local num, scroll = 1, 0
while true do
    num, scroll = gui.menu(num, scroll)
    if funcs[num] then
        funcs[num]()
    else
        gui.warn("is null menu point")
    end
end

 

документация для пользователей

  • программы могут располагаться на любых дисках и дискетах, автозагрузка привязывается к конкретному диску и ссылается на конкретный файл а ссылка лежит на диск с установленной автозагрузкой в /roboOS/autorun.cfg
  • настройки ос храниться в /roboOS/settings.cfg на системном диске
  • такая система позволяет легко поставить на робота одну автозагрузочную программу а на дискету другую, причем информация о том какая программа автозагрузочная лежит на диске а не в системе, PS если хотите создать автозагрузочную дискету то создайте на ней файл /roboOS/autorun.cfg а в нем ссылка не файл на этой же дискете, например /roboOS/programs/karer/main.lua
  • каждая программа имеет свою папку в /roboOS/programs там должен находиться файл main.lua а так же может находиться файл doc.txt с небольшим описаниям обратите внимания что при скачивании программы по url будет скачан только файл main.lua однако при входе вы сможете скачать все необходимые файлы
  • в программу первым аргументом передаться табличка с некими данными о этой программе а конкретнее имеет в себе 2 ключа fs proxy файловой системы от куда произошёл запуск программы и file с путем до главного файла этой программы
  • по у автозагрузки приоритет на внешние диски
  • при запуске автозагрузочного файла у вас есть секунда на то чтобы отменить запуск и сразу попасть в меню для этого необходимо нажать alt
Изменено пользователем rootmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@rootmaster А для чего процесс установки сделан таким сложным? Эта OS имеет не настолько богатый функционал, чтобы ради её установки совершать так много действий.

 

Идеальный процесс установки OS мне видится таким:

1. Вставляем в компьютер интернет-плату, а в дисковод вставляем дискету с OpenOS.

2. Включаем компьютер и дожидаемся появления приглашения командной строки.

3. Вводим команду:

wget -f https://.../installTopOS.lua /tmp/installTopOS.lua && /tmp/installTopOS.lua

А дальше программа уже сама должна прошить EEPROM, найти жёсткий диск (предложить выбрать из нескольких найденных) и докачать необходимые файлы. Примерно так и сделано в MineOS, в которую ты регулярно кидаешь камни.

 

Разные операционные системы в Майнкрафте и так-то не особо полезны в сравнении с копалками или фермами, и поэтому игрокам требуется серьёзная мотивация, чтобы хотя бы один раз запустить очередную OS. Зато простой процесс установки заметно снижает этот барьер: игроки могут установить OS даже без серьёзной мотивации, на минимальном любопытстве.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
30 минут назад, eu_tomat сказал:

@rootmaster А для чего процесс установки сделан таким сложным? Эта OS имеет не настолько богатый функционал, чтобы ради её установки совершать так много действий.

 

Идеальный процесс установки OS мне видится таким:

1. Вставляем в компьютер интернет-плату, а в дисковод вставляем дискету с OpenOS.

2. Включаем компьютер и дожидаемся появления приглашения командной строки.

3. Вводим команду:

wget -f https://.../installTopOS.lua /tmp/installTopOS.lua && /tmp/installTopOS.lua

А дальше программа уже сама должна прошить EEPROM, найти жёсткий диск (предложить выбрать из нескольких найденных) и докачать необходимые файлы. Примерно так и сделано в MineOS, в которую ты регулярно кидаешь камни.

 

Разные операционные системы в Майнкрафте и так-то не особо полезны в сравнении с копалками или фермами, и поэтому игрокам требуется серьёзная мотивация, чтобы хотя бы один раз запустить очередную OS. Зато простой процесс установки заметно снижает этот барьер: игроки могут установить OS даже без серьёзной мотивации, на минимальном любопытстве.

лол шить eeprom необязательно, это чтобы сделать dualboot roboOS и openOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
46 минут назад, rootmaster сказал:

лол шить eeprom необязательно, это чтобы сделать dualboot roboOS и openOS

А какая фраза из твоей инструкции по установке сообщает о том, что прошивка EEPROM является необязательной операцией?

 

3 часа назад, rootmaster сказал:

установка ос на диск

  • установка с робота: перейдите в тему мода для openOS() и откройте dev устоновшик, и устоновите им micro bios, затем введите на роботе команду:
    
    mkdir /boot/kernel; wget https://raw.githubusercontent.com/igorkll/roboOS/main/source.lua /boot/kernel/roboOS -f

    затем переключите ос, для этого при загрузке micro bios нажмите alt найтите диск робота и выберите /boot/kernel/roboOS

  • установка с компьютера: устоновите диск будушего и разобраного робота в компьютер перейдите туда куда ом смонтирован (обычьно /mnt/xxx (где xxx первые три буквы uuid диска)) а зачем введите команду 
    
    wget https://raw.githubusercontent.com/igorkll/roboOS/main/source.lua init.lua

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
31 минуту назад, eu_tomat сказал:

@rootmaster А для чего процесс установки сделан таким сложным? Эта OS имеет не настолько богатый функционал, чтобы ради её установки совершать так много действий.

 

Идеальный процесс установки OS мне видится таким:

1. Вставляем в компьютер интернет-плату, а в дисковод вставляем дискету с OpenOS.

2. Включаем компьютер и дожидаемся появления приглашения командной строки.

3. Вводим команду:

wget -f https://.../installTopOS.lua /tmp/installTopOS.lua && /tmp/installTopOS.lua

А дальше программа уже сама должна прошить EEPROM, найти жёсткий диск (предложить выбрать из нескольких найденных) и докачать необходимые файлы. Примерно так и сделано в MineOS, в которую ты регулярно кидаешь камни.

 

Разные операционные системы в Майнкрафте и так-то не особо полезны в сравнении с копалками или фермами, и поэтому игрокам требуется серьёзная мотивация, чтобы хотя бы один раз запустить очередную OS. Зато простой процесс установки заметно снижает этот барьер: игроки могут установить OS даже без серьёзной мотивации, на минимальном любопытстве.

вставляешь диск в комп переходишь туда кода он смонтирован и водишь одну команду ВСЕ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

А какая фраза из твоей инструкции по установке сообщает о том, что прошивка EEPROM является необязательной операцией?

 

ну.... я думал это и так понятно

Изменено пользователем rootmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 23.06.2022 в 17:22, rootmaster сказал:

ну.... я думал это и так понятно

понятно? ты серьёзно?

тебе сложно написать 1 строку что это не обязательно?

 

 

я ток ничерта не понял

Изменено пользователем Bumer_32

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 24.06.2022 в 22:34, Bumer_32 сказал:

понятно? ты серьёзно?

тебе сложно написать 1 строку что это не обязательно?

 

 

я ток ничерта не понял

там 2 способа установки 1) на чистый диск, 2) на готового робота в OpenOS причем так чтобы OpenOS тоже работала, первый перепрошивки eeprom не требует сгодиться обычный lua bios второй требует

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 23.06.2022 в 14:15, eu_tomat сказал:

@rootmaster А для чего процесс установки сделан таким сложным? Эта OS имеет не настолько богатый функционал, чтобы ради её установки совершать так много действий.

 

Идеальный процесс установки OS мне видится таким:

1. Вставляем в компьютер интернет-плату, а в дисковод вставляем дискету с OpenOS.

2. Включаем компьютер и дожидаемся появления приглашения командной строки.

3. Вводим команду:

wget -f https://.../installTopOS.lua /tmp/installTopOS.lua && /tmp/installTopOS.lua

А дальше программа уже сама должна прошить EEPROM, найти жёсткий диск (предложить выбрать из нескольких найденных) и докачать необходимые файлы. Примерно так и сделано в MineOS, в которую ты регулярно кидаешь камни.

 

Разные операционные системы в Майнкрафте и так-то не особо полезны в сравнении с копалками или фермами, и поэтому игрокам требуется серьёзная мотивация, чтобы хотя бы один раз запустить очередную OS. Зато простой процесс установки заметно снижает этот барьер: игроки могут установить OS даже без серьёзной мотивации, на минимальном любопытстве.

а я идеальный процесс установки вижу так:

  1. запускаешь утилиту создания установочного диска на подходящей ос
  2. создаёшь установочную дискету/ставишь установщик на диск
  3. загружаешься туда с помочью биоса
  4. и либо ставишь ос на диск и установщиком, после чего установщик с него пропадет, или ставишь ос на другой диск

спойлер: моя новая ос так и будет ставиться

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, rootmaster сказал:

а я идеальный процесс установки вижу так:

  1. запускаешь утилиту создания установочного диска на подходящей ос
  2. создаёшь установочную дискету/ставишь установщик на диск
  3. загружаешься туда с помочью биоса
  4. и либо ставишь ос на диск и установщиком, после чего установщик с него пропадет, или ставишь ос на другой диск

Спасибо за развёрнутый ответ. Теперь концепция ясна. Сложновато, как по мне. Но, возможно, пользователям твоих программ этот подход покажется более удобным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, eu_tomat сказал:

Спасибо за развёрнутый ответ. Теперь концепция ясна. Сложновато, как по мне. Но, возможно, пользователям твоих программ этот подход покажется более удобным.

пожалуйста, но прости если запутал, эта ос ставиться не так, так как этот способ меня осенил когда я ставил винду на новый ноут(в реальной жизни), я просто ответил в этой теме, и я захотел чтобы ос в игре ставилась так же как и в жизни

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 минут назад, rootmaster сказал:

я захотел чтобы ос в игре ставилась так же как и в жизни

Я, рассуждая об идеальном процессе установки, в первую очередь имел в виду комфорт пользователя. Но жанр песочницы таких требований не налагает, а позволяет, жертвуя комфортом, воссоздавать процессы, максимально приближенные к реальной жизни. Почему бы и нет? Такие программы обычно менее интересны пользователям, но кому-то интересны именно они.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...