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

logic

Пользователи
  • Публикации

    287
  • Зарегистрирован

  • Посещение

  • Победитель дней

    13

Сообщения, опубликованные пользователем logic


  1. 15 минут назад, Asior сказал:

    Что, где, как? примеры, инструкции, описания? Как использовать, зачем оно ... опять реклама. И ни одного слова даже о том, как она именуется

    что? всмысле неодного слова, я написал api чуть чуть, а названия ей guix


  2. начнем с того что данная библиотека зависима от моего мода для openOS и поставляется с ним в комплекте:

    что поваляет делать данная библиотека:

    • создавать многосценные приложения
    • создавать многопоточные приложения средствами библиотеки
    • библиотека позваляет создавать таймеры слышатели и потоки операясь на главный объект gui или на конкретную сцену билиотека сама закроет все таймеры слушатели и потоки при выходе, таймеры слушатели и потоки созданные на конкретной сцене будут работать только тогда когда она выбранна
    • удалять элементы и/или сцены
    • перерисовка ведется автоматически или же самостоятельно, можно перересовать сцену целеком(gui.redraw()) а можно конкретный элемент(obj.draw()) пересовываться элемент будет только если выбрана его сцена
    • открывать контекстное меню
    • кастомное разрешения вплоть до отдельных сцен

    оптимизация под слабое железо:

    • я настоятельно рекомендую использовать функцию для выбора цвета в зависимости от выдеокарты (gui.selectColor(main, level2(опционально), level1(опционально(можно использовать boolean))))
    • библиотка может работать даже на экране первого уровня(да даже на роботе) но для этого придеться использовать демон курсора которого пока что не существует но я его сделаю он должен сообщить библиотеки о своей работе чтобы она позволила открыть программу на мониторе первого уровня

    поддерживаемые элементы:

    • button, имеет 3 режима, кнопка, переключатель, автоотпускаемый переключатель(кнопка реагирующяя на отжатия)
    • label, думаю тут все понятно
    • seekBar, может быть не кликабельный, поддерживает прокрутку колесиком мыши
    • list, может использоваться для отображения строк, позваляет узнать о нажатии строки, обладает отключаемым автоскролом, автоперересовку тоже можно отключить, по умалчанию сам удаляет элементы когда их много чтобы люди с нерабочим колесиком могли увидеть все пункты

    в планах:

    • тягаемые окошки(сделано)

    api:

    • для создания объекта gui необходимо вызвать метод create у библиотеки
    • все обрашения в библиотеки через одинарную точку
    • вызвать контекстного мен., gui.context(x, y, tbl) таблица может содержать строки или таблицы такого плана {str, on} если on, false то тогда данный пункт нельзя будет выбрать, вункция вернет значения, str, num или все будет nil если нечего не выбрано
    • создания сцены gui.createScene(backgroundColor, sizeX, sizeY)
    • получения api видеокарты gui.gpu
    • получения выжных значений, gui.screen, gui.keyboard
    • получения настроик видеокарты, gui.depth, gui.userX, gui.userY, gui.maxX, gui.maxY
    • отключения звукового соправождения gui.soundOn = false
    • создания теймеров слушателей потоков createTimer(time, callback) createListen(eventName or nil(all), callback) createThread(func, ...) данные методы необходимо вызывать от имени обекта gui(работа в всем приложении) или же от имени сцены(работа только на ней)
    • создания объектов на сцене, scene.createButton(x, y, sizeX, sizeY, text, callback, mode, state) createLabel(x, y, sizeX, sizeY, text) createSeekbar(posX, posY, size, text, callback, mode, min, max, value, touch, onlyIntegers) createList(posX, posY, sizeX, sizeY, callback)
    • настройки объекта button, backColor, foreColor, invertBackColor, invertForeColor
    • настройки объекта seekBar, backColor, foreColor, scrollCount, scrollWheel(можно ли колесиком крутить(запрет можно использовать например если есть желания переопределить это код(так сделано в list)))
    • настройки объекта list, backColor, foreColor, autoScroll, autoRedraw(выключите если будет добавлять много элементов за раз а потом лутще включить), autoRemove, maxStrsCount, для изменения настроик seekBar обратитесь к нему как к list.seekBar методы addStr, clear
    • inputbox создаеться как createInputbox(posX, posY, sizeX, sizeY, text, callback) у него есть настройки viewData(показываеть последний ввод(изначально true))
    • drawer создаеться createDrawer(posX, posY, drawer) где drawer это функция вызываемыя каждую перересовку отрисовщика в функцию приходит 3 аргумента(gpu(proxy видеокарты), posX, posY(тут нада начать отрисовку размер отрисовываемого изображения выберает сам отрисовши(делайте как хотите)))
    • и наконецто окошки, их можно таскать(если записать true в userMove) они могут использоваться для груперования элементов создания маленькиз минюшек, как создать окно? вот так createWindow(posX, posY, sizeX, sizeY) как настроить его? вот так: color(вебарает цвет окна изначально nil(нивидимый)) и window.attachObj(позиция иск на окне, тоже но y, и обект который на окно нада поместить)
    • для перемешения обекстов используйте метод move(работает и с окошками и перетягивает все элементы на них) метод не обновляет картинку по этому вызовите gui.redraw сомастоятельно(для того чтоб снизит нагрузка кода много действий)
    • если вы хотите временно отключить обект то нада setActive(true/false) не обновляет сцену(для того чтоб снизит нагрузка кода много действий) так что вызовите gui.redraw самастоятельно, setActive прячет обект запрешяя его отрисовку и недает ему реагировать на касания

    примеры кода:

    • https://drive.google.com/file/d/19mpdK9sxy4Yf9AxzdPpy8YkXan7AZU8g/view?usp=sharing (плохой пример, делал чисто для отладки и только для себя, на второй сцене должна midi играть, но для этого ее нада разместить по обсалютному пути пути /mnt/ded/as16.mid(у мена миди на диске ded лежат а у вас пару будет в /usr/midi там midi1.mid и midi2.mid они в комплекте с модом(моим для openOS) идут и вы можете путь на них в примере поменять чтоб все работало как у меня))

  3. В 17.03.2022 в 08:05, ProgramCrafter сказал:

    И библиотека bigModem, от которой всё это зависит (она занимается, видимо, пересылкой больших сообщений и ретрансляцией сообщения по всем компьютерам в сети, как Zn):

      Показать содержимое

     

    
    
    local component = require("component")
    local event = require("event")
    local serialization = require("serialization")
    local su = require("superUtiles")
    local computer = require("computer")
    
    ------------------------------------------
    
    ------------------------------------------
    
    local lib = {}
    lib.devices = {}
    
    function lib.create(address, maxPacketSize, dupProtectTimeout, dupProtectUpdateTimeout)
        local obj = {}
        obj.address = address
        obj.maxPacketSize = maxPacketSize or 7168
        obj.proxy = component.proxy(obj.address)
        obj.dupProtectTimeout = dupProtectTimeout or 8
        obj.dupProtectUpdateTimeout = dupProtectUpdateTimeout or 1
        obj.objCode = su.generateRandomID()
        obj.listens = {}
    
        obj.codes = {}
        obj.timeouts = {}
        local function addcode(code)
            if su.inTable(obj.codes, code) then
                return false
            else
                table.insert(obj.codes, code)
                table.insert(obj.timeouts, computer.uptime())
                return true
            end
        end
    
        table.insert(obj.listens, event.timer(obj.dupProtectUpdateTimeout, function()
            for i, code in pairs(obj.codes) do
                local timeout = obj.timeouts[i]
                if computer.uptime() - timeout > obj.dupProtectTimeout then
                    table.remove(obj.codes, i)
                    table.remove(obj.timeouts, i)
                end
            end
        end, math.huge))
    
        function obj.send(targetAddress, port, ...)
            local proxy = obj.proxy
            local sendData = serialization.serialize({...})
            local parts = su.toParts(sendData, obj.maxPacketSize)
            local randomCode = su.generateRandomID()
    
            for i, part in ipairs(parts) do
                local endflag = i == #parts
                local unicallCode = su.generateRandomID()
                addcode(unicallCode)
                if component.type(obj.address) == "tunnel" then
                    proxy.send(unicallCode, endflag, randomCode, i, part)
                else
                    if targetAddress == true then
                        proxy.broadcast(port, unicallCode, endflag, randomCode, i, part)
                    else
                        proxy.send(targetAddress, port, unicallCode, endflag, randomCode, i, part)
                    end
                end
            end
        end
    
        function obj.broadcast(port, ...)
            obj.send(true, port, ...)
        end
    
        local buffer = {}
        table.insert(obj.listens, event.listen("modem_message", function(_, uuid, sender, port, dist, unicallCode, endflag, randomCode, index, dat)
            if uuid ~= obj.address or not addcode(unicallCode) then return end
            if not buffer[randomCode] then buffer[randomCode] = {} end
            buffer[randomCode][index] = dat
            if endflag then
                local sendData = serialization.unserialize(table.concat(buffer[randomCode]))
                buffer[randomCode] = nil
                event.push("big_message", uuid, sender, port, dist, obj.objCode, su.unpack(sendData))
            end
        end))
    
        function obj.kill()
            for i = 1, #obj.listens do
                event.cancel(obj.listens[i])
            end
            table.remove(lib.devices, obj.indexInTable)
        end    
    
        table.insert(lib.devices, obj)
        obj.indexInTable = #lib.devices
        return obj
    end
    
    return lib

     

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

    • В шоке 1

  4. В 06.03.2022 в 16:30, Krutoy сказал:

    Роботы OC очень сложны в сборке и программировании.

    С этим биосом робота можно программировать через переименование на наковальне.

     

    Ссылка на английский Readme с большим количеством инфы.

    Установка

    Соберите робота минимальной конфигурации

    • Корпус
    • CPU
    • RAM
     

    sBP2y0N.png

     

    (Кстати, в моем модпаке Enigmatica 2: Expert - Extended этот чип будет крафтиться, так что игрокам даже не нужен стационарный компьютер что бы пользоваться чипом.)

     

    1. Скачайте программу из интернета: 
      
      wget https://gist.githubusercontent.com/Krutoy242/db63637d605c2c247bc95e939c7f7ddd/raw/lostuser.min.lua
    2. Запишите прогу на чип:
      
      flash -q lostuser.min.lua LostUser

       

    3. Вставьте чип в робота
      Combining robot with EEPROM

     

    Использование

    Робот программируется путем его переименования. Можно использовать наковальню pYpuM1 или вот такой инструмент из мода VgGaLN Integrated Dynamics.

    Назовите своего Робота \3, поставьте на землю, включите и посмотрите, как он будет щелкать по блоку впереди.

     

    tgsaqxj.gif

     

    Для тех кто заинтересовался, о синтаксисе программирования робота через имя можно посмотреть в англ. Readme.

     

    Примеры

    IC2 растения

    Мы будем использовать робота для разведения культур Industrial Craft 2.

    Для этого нужно посадить семена в шахматном порядке, а между ними поставить поперечные палочки. Робот должен бегать по грядке и нажимать правой кнопкой мыши с инструментом, чтобы собирать сорняки.

     

    Имя такого робота будет \0ZZ

    Видео во вложении.

    Ferrous-Juniper ферма

    А вот пример более сложной программы

    
    ?(y0)'E9nS18''^9/0s18|0'Z

    Видео.

    Эта программа:

    1. Выкидывает предметы из слотов 9-16 вниз
    2. Засасывает предметы в слоты 1-8 сверху
    3. Перемещается зигзагообразно, ломает блок под собой и ставит новый

     

    Давайте ее разберем.

    • С начала идет условный оператор ?. Он принимает 3 аргумента:
      1) Условие (y0),
      2) Блок then 'E9nS18'
      3) Блок else '^9/0s18|0'
    • Условие это программа y0, где y - сокращение команды inventory_controller.getInventorySize. Некоторые сокращения записаны в исходном коде.
    • Блок then выполняет две программы. E9n - слить слоты с 9 по n вниз. S18 - набрать предметы сверху.
    • Блок else выделяет 9 слот ^9, ломает блок под собой /0, выбирает первый не-пустой слот s18, устанавливает блок вниз |0.
    • В самом конце проги стоит буква Z, которая означает Зигзагообразное движение.

     

    Фидбэк

     

    Если кому то понравилась идея, пишите как можно улучшить.

    Особенно интересно, какие операторы стоит добавить в заранее записанные сокращения, а в каких сокращениях лучше сменить букву.

     

    Главный принцип - возможность писать сложные программы используя всего несколько символов.

     

    главный вопрос, а зачем? я в своих роботов либо ставлю монитор, либо подключаю к сети дома, регистрирую на нем удаленную файловую системму(чаще всего и то и другое)(мои софтом(netoworks, distfs2)) и открываю доступ в его lua по сети, и вооля все роботом можно управлять удаленно на диск записал /start.lua(запускаеться моим модом для openOS) и как тока включил он пойдет копать


  5. В 13.06.2015 в 23:06, Sharplook сказал:

    Pig's Airline

     

    Потому что джетпаки - для слабаков

     

     

     

     

     

    Описание:

     

     

     

     

     

    Программа даст вам возможность использовать свинью

     

     

    как воздушное средство передвижения.

     

     

     

     

     

    e7bc58f151f1c664caf2036a2cbe7636.jpeg

     

     

     

     

     

    Чтобы управлять таким транспортом, вам потребуется планшет, дрон, свинья и сиденье для неё.

     

     

     

     

     

    Минимальные требования к комплектации планшета и дрона:

     

     

     

     

     

    Планшет:

     

     

     

     

     

    2da49c134552d38c65a98927eaf24da0.png

     

     

     

     

     

    Дрон:

     

     

     

     

     

    53b02966c7f0a48997023a88c61f3db8.png

     

     

     

     

     

    (Беспроводная сетевая плата должна присутствовать и в планшете, и в дроне)

     

     

     

     

     

    Использование:

     

     

     

     

     

    Для начала вы должны установить на планшет программу:

     

     

     

     

     

    http://pastebin.com/hJX0z0XQ

     

     

     

     

     

    Далее вы должны установить программу для дрона на eeprom:

     

     

     

     

     

    http://pastebin.com/bebWRk94

     

     

     

     

     

    (Для этого включите компьютер, вытащите из него eeprom с lua bios, вставьте чистый eeprom. Загрузите на компьютер программу для дрона и пропишите команду:

     

     

     

     

     

    flash -q <название программы> <метка eeprom>

     

     

     

     

     

    Так она будет сохранена на чипе.

     

     

    Если вы еще не собрали дрона, то при его сборке засуньте eeprom с программой в сборщик. Если вы дрона уже собрали, то добавьте его в верстаке к дрону. Не забудьте вставить чип с lua bios обратно в компьютер.)

     

     

     

     

     

    В обеих программах в коде вы должны изменить значение переменной port на другое. Оно должно быть одинаковым в планшете и в дроне.

     

     

     

     

     

    Запустите программу на планшете и запустите дрона. Управлять с помощью клавиатуры, используя планшет:

     

     

     

     

     

    H - показать/скрыть помощь

     

     

    W/S - перемещение по оси Z

     

     

    A/D - перемещение по оси X

     

     

    E/R - перемещение по оси Y (вверх/вниз)

     

     

    - поймать свинку

     

     

    (Дрон должен быть возле нее)

     

     

    - отпустить свинку

     

     

    (Вы не сможете этого сделать в полете, т.к. она должна быть возле дрона)

     

     

     - перемещение по заданным координатам (По X и Z)

     

     

    (Пока дрон не умеет спускаться по оси Y самостоятельно, потому что если свинка заденет блок, то ей конец :( . Поэтому после полета вам придется спускаться с помощью и R. Сначала вы должны будете указать координаты дрона по осям X и Z и координаты точки, к которой вы собираетесь отправится. Далее вы указываете кол-во блоков, на которые дрон поднимется вверх, чтобы между точками с шансом 99% не было препятствий. Чтобы остановить дрона, надо перезапустить его вручную)

     

     

    - выключить дрона

     

     

    U - включить дрона

     

     

    - выход из программы на планшете

     

     

    (После перезапуска программы на планшете дрон не отключится и вы сможете продолжить им управлять)

     

     

     

     

     

    Вы находите свинью, надеваете на нее седло, тащите к дрону и с помощью кнопки ловите ее. Далее вы на нее садитесь и отправляетесь в далекое путешествие (далекое, значит не дольше 30 минут, т.к. дрон и планшет могут разрядиться)

     

     

     

     

     

    P.S: Это моя почти первая программа.  Потихоньку я буду ее обновлять, добавлять новые функции и исправлять ошибки.

     

    я думал сделать(и сделаю(не люблю использовать чужой софт)) это но оказалось что это уже кто то сделал))))


  6. 1 час назад, eu_tomat сказал:

    Странность мерок — штука относительная. Тебе кажется странным желание вписаться в стандартный размер EEPROM. А другим кажется странным называть этот BIOS лучшим при том, что его невозможно использовать на большинстве серверов.

     

    Когда читатель видит в названии слово "лучший", он ожидает, что твоя программа, как минимум, работает на всех серверах и не требует общения с администраторами. По большому-то счёту именно это слово и порождает все претензии к тебе. Тут, как говорится: назвался груздем — полезай в кузов. А назывался лучшим — выслушивай критику.

     

    А саморазвитие — штука полезная. Мы тут в основном ради этого и собрались на форуме. Кстати, мне кажется, у тебя есть прогресс. Я когда первый раз читал эту тему, испытал дискомфорт, спотыкаясь на ошибках. Но сейчас вспомнил твои предыдущие темы и понял, что это описание лучше предыдущих. Так что, не смотря на мои претензии, за старание я поставлю лайк.

     

     

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


  7. 11 час назад, ECS сказал:

    Разве это несет какую-то пользу для конечного потребителя? Кроме спортивного интереса, в чем профит сбора кучи фич в одном скрипте, который не влезает в дефолтные лимиты еепрома?

    в удобстве, хоть фичь и по вашим странным меркам "много" они все необходимы и очень выжны да и вообще это саморазвития


  8. 3 часа назад, eu_tomat сказал:

    Почему же бред? Это довольно логично. Сейчас это BIOS-переросток по меркам OpenComputers. Запуск приложений — это типичная задача для операционной системы. На полноценную операционную систему это ПО, конечно, не тянет, но всегда возможны промежуточные варианты вроде каких-то узкоспециализированных операционок с минимальной фунциональностью. К слову, широкая функциональность не всегда является благом. Зачастую больший приоритет имеют скорость и компактность. Но чаще всего применяются компромиссные, промежуточные варианты.

     

    Расскажу об одном успешном промежуточном варианте. Помню, @Doob любил писать копалки для EEPROM. Но по мере расширения функционала рос и объём кода. В итоге код, даже сжатый, перестал вмещаться в EEPROM, и @Doob был вынужден разместить код на жёстком диске. Это решение выгодно отличается от обычных копалок тем, что не требует установленной операционной системы. Благодаря этому включение робота происходит быстрее, а требования к размеру ОЗУ заметно снижаются.

     

    Рекомендую рассмотреть похожий вариант. Конечно, это уже будет называться не BIOS, а как-то иначе. Но суть останется прежней. Или работа без жёсткого диска является для тебя принципиально важной?

    да евляеться важной, это биос а не ос, он не предаставляет никаких api все функции в нем локальны, так что это именно bios


  9. 9 минут назад, ECS сказал:

    Хех, в публичные сборки даже опенкомпы мало кто ставит, а ты про правку конфига и подозрительные для среднего админа операции с лимитами. Однако по функционалу твой продукт выглядит вполне вкусно. Почему бы не перевести его из гипертрофированного биоса в самостоятельную ОС? И кодить станет проще, и простор для творчества шире, и костылей в виде минификации/конфигов не потребуется, и конкуренция какая-никакая имеется

     

    На текущий момент topBiosV7 би лайк:

     

    image.png.64e54358714744627df29f63185ad447.png

    из биоса в ОС? бред каройто, спосибо что похвалил, я кста до сих пор думаю как сжать/придумать кастыль

    • Ха-ха 1

  10. 1 минуту назад, ECS сказал:

    Это гуишный биос для гуишной оськи, я не вижу смысла в фиче запуска без GPU. Изначально он был приложением к майноси поверх опеноси, и поддерживал все тиры оборудования, а затем майноська ушла в стенделон, и нужда в первых двух тирах отпала. Ссылка была оставлена на всякий пожарный

     

    Оригинал можно найти в истории версий, но не думаю, что он кому-то понадобится:

    https://github.com/IgorTimofeev/MineOS/blob/349085db4b627529bcbc48609f536656e52b31e9/EFI/Full.lua

    отпала и отпала а зачем ее было выпиливать?


  11. Только что, eu_tomat сказал:

    Теперь понял. Этот BIOS лучший по твоим личным критериям. Я-то пытался оценивать с точки зрения игры на публичных серверах.

    с администрацияй можно договорить, это биос можно легло сдать до 8 кб(даже меньше но7) так как он находиться в фазе активной разработки стоит увеличить обьем чипа до 16/24 кб об этом можно договориться с администрацией показав функционал


  12. Только что, eu_tomat сказал:

    От чего ж невнимательно? Всё видел:

    Сжать пока не удалось. Значит, и BIOS пока не лучший. Но заголовок вводит читателя в заблуждение.

    по моим критериям он лутщий, по функционалу ему равных навных нет, и нет биос не обязан не куда помешаться, для этого и создан конфиг мода чтобы играть в свое удовольствия

    • Против 1

  13. 1 минуту назад, eu_tomat сказал:

    А разве BIOS, претендующий на звание лучшего, не обязан умещаться в стандартные 4096 байт?

     

    Главный вопрос: как убедить администраторов серверов увеличить объём EEPROM?

    ты наверное не внимательно читал пока ужал но 4 кб

    • Против 1

  14. В 15.03.2022 в 19:53, Asior сказал:

    Как работать с ней? Опции, настройки, документация? Скрины, принципы работы, настройка? Ничего не понятно ...

    networks библиотека сетей, distfs2 библиотека дистанционной файловой системмы нада сам разберись все работает без нариканий

    • Грусть 1

  15. В 27.10.2015 в 13:01, ECS сказал:

    8511ffbca7690b617e5483b7b1875bb7.png

     

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

     

    Команда для скачивания:

    
    pastebin run Tg2YLrcc

    Пример выполнения скриптов:

     

    d1c2964de1193e72b99c8ffadf8c5d08.png

     

    433660be7840bf621d3effbbcc71f9ec.png

     

    Структура файла autorun.lua:

     

    8c8df3ba31a1a29488100064beb4a985.png

    /autorun.lua? вы серьезно? он же будет запускаться всеми компами к которым будет подключен диск, толь дело /start.lua в моем моде для openOS запускаться будет только системмой на которой лежит и даже если автозагрузка отключена запушен будет только после полной инициализации систмеммы но до запуска shell

    • Грусть 2

  16. мой мод для openOS(а вернее библиотека networks)

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

     

    функционал:

    • пересылка таблиц и под таблиц(для работы таблиц в event нужен мой мод для openOS)
    • отправка пакетов с любым количеством элементов и размерностью
    • ретрансляция между устройствами(можно поставить серверную стойку с 8 туннельных карт а в публичных местах поставить компы с туннельными картами и модемом к которому уже будут подключаться конечные пользователи) но следует помнить что избыточное количества ретрансляторов приводит к заторможенности сити

    distfs2:

    отдельная библиотека позволяющая удобно хостить файловые системы/папки и подключаться к ним

     

    тема мода для openOS: 

     

    • Против 1
×
×
  • Создать...