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

logic

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

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

  • Посещение

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

    13

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


  1. Только что, ProgramCrafter сказал:

    @rootmaster Полагаю, тогда более уместно создать новую тему в беседке и позвать автора биоса туда, чтобы обсудить, что и как лучше было бы сделать.

    я не знал что так можно....


  2. 5 часов назад, eu_tomat сказал:

    Скоро читатели этой темы совсем запутаются. Она посвящена BetterBIOS за авторством @KeyTwoZero, или творчеству @rootmaster?

     

    Это уже не BIOS, имя которого нельзя называть.

    Теперь это BIOS, о котором невозможно молчать.

     

    Такими темпами скоро все темы в разделе EEPROM будут содержать упоминания BIOS'ов Рутмастера и его претензии к MineOS. Зачем оно нужно во всех темах форума? Все эти вторичные темы отвлекают читателей от сути обсуждаемого вопроса.

     

    Вот скажи, @rootmaster, что тебе мешает сделать хорошее описание всех преимуществ своих продуктов в темах, посвящённых именно им? В своих темах ты можешь делать сравнения с программами других авторов и объяснить, почему ты применил те или иные решения, подкрепляя рассуждения аргументами. Людям нравятся грамотные и понятные описания. И если кто-то интересуется написанием ПО для EEPROM, тот обязательно найдёт твою тему и оценит проделанную работу. Более того, читатели твоих тем сами начнут рассказывать про твой BIOS не только на этом форуме, но и за его пределами.

     

    Сейчас же ты размазываешь описание по всем темам форума, рассказывая одно и то же по 15 раз. И себя не бережёшь, и читателей раздражаешь, и авторы тем уже не знают, как тебя остановить, чтобы это не выглядело грубым. Не надо так делать. Если ты уверен, что хорошо знаешь, как надо правильно писать ПО, напиши инструкцию для других авторов. И там уже мы обсудим, насколько твои советы действительно полезны.

    я вообще не говорил "мой топ биос самый биосный биос ставьте его" я все го лиш сказал автору биоса как сделал я, а имя сказал, чтоб он мог протестить, ОН ПРОТЕСТИТЬ, я не призываю больше некого ставить мой ужасный софт, я просто предлагал, и говорил я ДЕЛАЙ ТАК И ВСЕ


  3. Только что, alice_fdream сказал:

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

    спасибо! я бы на твоем месте сделал прогу, вводишь ник, и там типа комната пыток debug-картой, разные режимы игры и прочее, а знаешь что, давай-ка я это сам накодю для openOS и скину тебе в лс, а ты сама партнеш куда тебе надо


  4. В 09.07.2022 в 11:07, alice_fdream сказал:

    SwiftOS

     

     

    178094936-b5b7564b-d373-43c2-b01a-566ae9a62348.thumb.png.b3ed62b66e87f2042c81dcc04eb417be.png

     

    Аелита шла по горам Орелоуха, в поиске себя, своего происхождения и смысла, добро пожаловать в SwiftOS Invintium – новый путь.

     

    Установка

    
    pastebin run ziya9Web

     

    SwiftOS основана на измененном ядре openOS и библиотеках, а так же графической библиотекой MineOS (Игоря Тимофеева).

    SwiftOS имеет почти свою файловую систему, состоит из 2-3 папок в зависимости работы.

    178095102-d69b5944-8431-4bd2-97b0-329270

     

    Диски монтируются в виде названия "disk"

    178095176-b5a9a821-b6de-43f1-88d5-3f3079

     

    Возможности

    Авторизация

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

    178095271-3b59bbb5-b25c-4b2e-89f7-ea9509

     

     

     

    Менеджер тем

    Существует внешняя программа для создания тем, темы лежат по пути /system/SwiftOS/themes/list/

    Установка: download

    178095515-d96ba3b0-e245-4cb9-a4be-c305f5

     

     

    Программы

     

    Программы лежат в /system/apps/

    Структура программы:

    PATH: /system/apps/

    FOLDER: CALC

    PATH: /system/apps/CALC/

    FILES: CALC.LUA, CALC.PIC

     

    178095616-0417e67c-78b1-404b-b9b4-4d6dae

     

    Это обязательная структура для создания минимальной программы

     

     

    Участники в создании SwiftOS

     

    alice_fdream – создатель SwiftOS. Она же сделала 80% кода. 

    Владислав Задорожкин – мудрый советчик, сделал правильное передвижение окон, инсталлер, и много интересных фич.

    Павел Андрианов – дизайнер тем, очень мудрый советчик, 

     

    Гитхаб: https://github.com/alice-fdream/SwiftOS

    Наш телеграмм: https://t.me/SwiftOS_oc

    Мне интересны ваши идеи и предложения!

    чувствуется нотка mineOS

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

    • установщик выл взят из ВычВыжПром а текст лицензии полностью не помешается на экран а скроллинга по горизонтали не предусмотрено. ну ок...
    • на тире отличном от третиго интерфейс плывет похлешше mineOS, вопрос почему бы в swiftOS BIOS не написать что железо не подходит для запуска ос?
    • почему при установке требуется беспроводной модем?
    • почему я не могу не настраивать смс? дизайн так и отдаёт нотками ubuntu, но мне нравиться, хотелось бы больше пред установленных тем, почему редактора нет прямо в ос?(если что я могу помочь с его написаниям)
    • как скачивать софт на эту ос?
    • как создать нескольких пользователей?

    моя оценка 7 из 10, и то только потому что ос только вышла, и я надеюсь будет обновляться

    давно такого на cc.ru не было так что за это отдельное спасибо

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

    • Нравится 1
    • В шоке 1
    • Грусть 1

  5. В 07.07.2022 в 22:15, KeyTwoZero сказал:

    Обновил:

    • Обозначения функций (Галочки и пустые квадраты) теперь являются большими галочками и перекрестиями
    • Пофиксил баг с _ENV, вот за то, что напомнили - спасибо, не заметил сразу
    • Теперь всегда загружается меню, даже если устройство одно (Как по мне - лучше вренуть как было, ибо если часто пользоваться какой-то одной ОС - пальцы устанут каждый раз дополнительно нажимать ENTER)

    С остальным решил ничего не менять, ибо устал... Пытаться запихнуть столько всего в жалкие 4096 символов - очень утомляет.

    Интерфейс, как по мне - для клавиатуры и так норм, запускать всякие терминальные ОС сойдёт, а делать его ещё и кликабельным - это вообще жесть, без сжатия не обойтись, и то не факт, что реализация сжатия не будет больше, чем выигрыш от него. (Потому что данные в минимизированном коде почти равномерные, если не считать всяких local, function и end)

    Но, может - когда-нибудь попробую и с сжатием...

     

    А говоря о конфиге, который хранится в самом коде - это лучшее, что я мог придумать, ибо операционные системы могут запросто стереть оттуда конфиг, да и они могут быть не готовы к такому повороту жизни, как "UID-устройства ХОБА ПОЛУЧИ ДВА ЧИСЛА".

    Пускай уж пользователь сам настроит под себя и свои ситуации.

    я тебе говорил, что юзать для сжатия (bpacker) обязательно в режиме -l чтобы не требовалась data-card так же можешь использовать встроенный модификатор который самый лутщий для lua(-m) однако не всегда удастся им воспользоваться, прога сама пишет в eeprom и по этому придеться дампить его содержимое после проверки, получений из bpacker код не будет работать на lua 5.2, и автопереключения там тоже нет однако его можно добавить обернув получившийся код в computer.setArchitecture('Lua 5.3')load([[compressed code]])() однако получиться сделать автопереключения не всякий раз, так как иногда в сжатом коде появлються символы, которые все руинять, и придеться поменять что-то в коде чтобы это пропало и удалось добавить автопереключения, конечно ты лишишься lua 5.2 но я не думаю что он сейчас кому-то нужен

     

    и я тебе говорю, все ос кроме mineOS юзают computer.getBootAddress а в нем ты лишнее можешь отпарсить

    так например сделано у меня в microBios(это не реклама, и да простят меня админы)

    в eeprom-data храниться много блоков данных разделенных \n но в getBootAddress есть парсер, который выпарсивает из eeprom-data только bootAddress

    раньше я подменял eeprom-data виртуально для того чтобы была поддержка mineOS но позже я это удалил, а потом и вовсе выпилил поддержку mineOS

     

    если в какой то ос вместо computer.getBootAddress используеться eeprom.getData то это только ее проблемам


  6. 58 минут назад, KeyTwoZero сказал:

    Как вам обновление?))

    посмотрел, честно, не очень
    1) зачем записывать загрузочный адрес в eeprom-data?

    2) не удобно тянуться к f клавишам

    3) зачем возможность удалить getBootAddress?

    4) почему ты настройки в разделе кода eeprom а не в специально для этого предназначеным eeprom-data(парсер пишется очень просто)?

    5) почему после краша ос ты даёшь возможно выйти и загрузиться в другую ос без reboot? если одна ос что-то в _ENV наменяет а потом крашнеться. юзер может загрузиться заново?

    6) если загрузочный диск ровно один не дает зайти в меню и что-то там сделать

    7) галочки слишком маленькие

     

    так я немного разобрался и понял что ты даёшь возможность настроить установку data и getBootAddress. ну если уж и считаеш(я считаю иначе, getBootAddress для получения загрузочьного адреса, getData для получения данных eeprom в которых может быть много данных(в одном их моих биосов имя которого придеться умолчать, там около 10-ти блоков данных)) getBootAddress рудиментами, то ты можешь записывать настройки опять в eeprom

     

    стрелки советую сделать кликабельными, галки тоже


  7. 46 минут назад, KeyTwoZero сказал:

    Извините за некоторую грубость, но я уже пробовал ту утилиту, что вы рекомендовали - она фигня, по сравнению с другим минификатором кода на Lua. Я пробовал их много всяких, сравнивал результаты, и нашёл лучший для себя вариант, который сжимает код максимально сильно.

    ну ок


  8. 16 часов назад, KeyTwoZero сказал:

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

    хорошое решения, поддерживаю, вот вопрос тебе нужна поддержка lua 5.2? если нет, можешь скинуть мне исходник вплоть до 18 кб и я его сожму


  9. 7 часов назад, KeyTwoZero сказал:

    Обновил. Изменения можно увидеть в репозитории.

    • Теперь издаётся звук при запуске прошивки.
    • Пофикшен баг с мониторами у роботов, да и вообще теперь экраны первого уровня не используют "максимальное" разрешение. Ибо кому в кайф сидеть 4 на 2 экране первого уровня?..
    • Так же заметил, что можно заменить функцию pairs на свою переменную, это повзоляет сильнее сжать код.

    Но есть и негативная сторона:

    Стал замечать, что к сожалению, конкретно в этом проекте - очень сложно релизовать прям всё-всё-всё.

    Увы, но 4 кибибайта на прошивку - действительно слишком мало для полёта творческой фантазии...

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


  10. В 27.06.2022 в 21:27, BrightYC сказал:

    1 Так ето прикол центрирования, экран же маленький 80x25

    2 а, да, видимо реалььно тако еесть

    3 ну установщик следует правилам опеноси ¯\_(ツ)_/¯

    правило openOS)) таких нет, как мне кажется, ты наверное немного неправильно понимаешь назначения функции computer.getBootAddress, ее следует использовать для того, чтобы понять куда компьютер пойдет грузиться после reboot, и да ее тут нужно использовать, но учитывая функционал lua bios, если это тебе не нужно ок, мое дело лишь посоветовать


  11. В 16.05.2022 в 14:11, KeyTwoZero сказал:

    Приветствую вас. Этот пост я пишу, чтобы рассказать вам о своей разработке для мода OpenComputers:

     

    BetterBIOS

     

     

    Main.png

     

    Это специальная прошивка BIOS для EEPROM, позволяющая выбирать любое из подключенных устройств для загрузки.

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

     

    Selection.png

     

    Так же, в этой прошивке есть своя система отображения ошибок, показывающая весь "traceback" за исключением не нужных пунктов внутри самой прошивки. Это будет очень полезно для разработчиков собственных операционных систем, ведь данная прошивка подскажет места, в которых возникла ошибка, в то время как стандартная прошивка молчит как партизан.

     

    Error.png

     

    Если доступных для загрузки устройств больше, чем одно - то при включении компьютера, пользователю предлагается выбрать одно из них.

    Если такое устройство только одно - загрузка начнётся незамедлительно.

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

    То же самое с экранами и видеокартами.

    Так же, данная прошивка имеет приоритеты на выбор экрана: первым делом она пытается подключить тот экран, у которого есть клавиатуры поблизости. Если таковых не имеется - использует любой другой.

    Видеокарту прошивка использует максимального уровня.

     

    Прошивка защищена от критических сбоев при резком извлечении устройств, пока программа работает с файлами на них.

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

    Я просто параноик, иначе сделать не мог...

     

    Данная прошивка поддерживает стандартную операционную систему OpenOS, для работы которой требуются функции computer.setBootAddress и computer.getBootAddress. Если вы хотите использовать данную прошивку, но не хотите мусорить в глобальных переменных этими рудиментами - просто вырежьте эти функции, сделать это несложно, ниже будут ссылки на исходники.

     

    Несмотря на весь этот функционал и продуманность, в минимизированном виде данная прошивка помещается на EEPROM, стандартная ёмкость которого - 4096 символов.

     

    Вы можете изучить исходный код данной прошивки, и использовать некоторые приёмы оттуда для своих проектов.

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

     

    Исходный код:

    https://codeberg.org/KeyTwoZero/BetterBIOS/src/branch/main

    (Я ещё делал репозиторий на GitHub, но чёт я его забросил... Мне он не нравится)

     

    Спасибо за внимание. Если у вас есть какие-то идеи, как можно улучшить или ухудшить данную прошивку - пишите здесь, или как-нибудь вычислите меня, постараюсь подумать, и может быть, даже обновлю код, сделав его лучше для вас.

    вот еще вопрос, зачем ты используешь setData если меню для выбора вылезете каждый раз? это ведь без с мысленно, если ты переживаешь что в некоторых операционках вместо computer.getBootAddress используется eeprom.getData то это бред, так как в некоторых биосах в eeprom дата лежит не только адрес загрузочного носителя, но и дополнительные данных, я бы привел пример такого биоса но меня за "рекламу" заплюют


  12. В 11.06.2021 в 20:50, BrightYC сказал:

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

    Установка:

    Для OpenOS:

    
    wget -f https://raw.githubusercontent.com/BrightYC/Catch/main/catch.lua /bin/catch.lua

    Для MineOS же есть приложение в местном AppMarket, под названием Catch.

    Код обитает здесь: https://github.com/BrightYC/Catch/

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

    В OpenOS, вы можете зашифровать любые диски, например, чтобы они были портативными

    Примеры:

    • catch --encrypt --drive=XXX (Диск XXX будет зашифрован)
    • catch --encrypt (Будет зашифрован относительный путь: например, если мы находимся в директории /mnt/xxx, диск xxx будет зашифрован, если мы находимся в главной директории - загрузочный диск будет зашифрован)
    • catch --decrypt --drive=XXX (Диск XXX будет расшифрован)


    В MineOS, вы можете только зашифровать загрузочный диск, если же вы попытаетесь открыть программу на другому диске, программа запросит пароль для диска и смонтирует его по пути /Mounts/Catch-XXX. Если же запустить программу на другом диске с аргументом rootfs, будет запущена программа для шифрования, как обычно.
     

    Количество итераций:

    Количество итераций определяет сложность вычисления ключа, чем выше количество - тем сложнее взломать ключ. Если количество итераций слишком высокое - расшифровка диска будет выполняться очень медленно, цифра в 1-2 минуты вполне реальна. Стандартное значение - 5000. Количество итераций можно указать только в OpenOS.

    Пример: catch --encrypt --iter-time=3000

    Программа в MineOS:

    1KchSct.png

    Видеодемонстрация:

     

    почему версия для mineOS так сильно порезана в сравнения с версией для openOS?


  13. 15 часов назад, KeyTwoZero сказал:

    @rootmaster

    Обновил прошивку, можно посмотреть в репозитории в CodeBerg.

     

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

    Так же исправил пару моментов, которые занимали слишком много места.

    Например, белый цвет #FFFFFF я просто заменил на -1, ведь оказывается - так можно делать.

    а еще хочется beep как в lua bios при загрузке, (computer.beep(1000, 0.2))

    • Одобряю 1

  14. 10 минут назад, ProgramCrafter сказал:

    По-хорошему, tprotect должен запускаться вообще до начала загрузки системы. Тогда ему будет без разницы на закрытие shell/чего-то ещё.

     

    Значит, _ENV тоже надо блокировать. Заодно не будут работать глобальные переменные - потому что не надо их использовать, лучше уж писать данные в tmpfs. (Или сделать в системе какую-то таблицу для хранения данных программ.)

    нет ты просто должен заменять в _G, твоя библиотека будет хорошо работать в Opendroid(ос которую я шас пишу) но для openOS ее надо переделать, да если подгрузить до начала загрузки то _G == _ENV и все будет нормально, но ты просто сделай как я тебе сказал это ОЧЕНЬ сильно поднимит безопасность, а глобальные переменные тоже надо создавать в _G(_G.value = 231) иначе это будет как бы глобалы, но например из демона доступны другим программам не будут(и другим демонам) а если так _G.value - 123 то будут и таким переменные нечего не страшно(кроме _G.value = nil конечно, а вот кстати так (value = nil) их не удалить потому что так обращения идет к _ENV)


  15. 15 часов назад, KeyTwoZero сказал:

    @rootmaster

    Обновил прошивку, можно посмотреть в репозитории в CodeBerg.

     

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

    Так же исправил пару моментов, которые занимали слишком много места.

    Например, белый цвет #FFFFFF я просто заменил на -1, ведь оказывается - так можно делать.

    круто, молодец, удобно в использовании а главное не нарушает стилистику open computers, в общем мне нравиться, но есть еще пару моментов которые я бы поправил, автопобор разшенения конечно хорошо но я бы сделал ограничения по высоте и по ширене чтобы все видно было, причем по высоте динамитчики в зависимости от выводимой информации, еще хочется просто выбрать загрузочное устройство а когда хочешь поменять нажимаешь alt и выбираешь, но это уже как сам захочешь, так же хочется чтобы можно было загружаться не только в init.lua но и в файлы лежашие в /boot/kernel это некий маленький стандарт который я подсмотрел в plan9k, а если будет нахватать места можешь сжимать bios при помоши bpacker лежачего в теме eeprom(если тебе не принципиальна поддержка lua 5.2 он работает только в lua 5.3), а на планшете изменения разрешения выглядит неуместно а на роботе экран вообще глючит из за того что по вертикале больше максимального(баг open computers), добавь проверку на планшет и робота(if not component.list("tablet")() and not component.list("robot") then setCustomResolution() end)


  16. В 24.01.2019 в 16:22, Kimapr сказал:

    Бывали ли у вас когда-нибудь такие ситуации, когда необходимо защитить какую-либо таблицу от записи? Например, вы пишите операционную систему в OpenComputers,

    и хотите хоть какую-то защиту от вирусов. Бедные таблицы всегда в очень большой опасности. С tprotect ваши таблицы будут в безопасности, так как другие программы вместо оригинала таблицы получат её зеркальную копию. А когда вы захотите снова в нее что-то записать, вы сможете это сделать (оригинал же у вас?). Вообщем вот ее код :

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

    local tprotect={}
    local raw_rawset=rawset -- Сохраняем rawset для дальнейшего пользования
    local raw_rawget=rawget -- Сохраняем rawget для дальнейшего пользования
    local getmetatable=getmetatable --
    local setmetatable=setmetatable --
    local type=type                 -- Дополнительная зашыта
    local error=error               --
    local assert=assert             --
    local protectid={}
    local nextid={}
    function rawget(t,k)
      if type(t)=="table" and raw_rawget(t,protectid) then
        error("СЕРЬЁЗНАЯ ПРОБЛЕМА БЕЗОПАСНОСТИ ДЕТЕКТЕД. УНИЧТОЖАЕМ ОПАСНОСТЬ...",2)
      end
      return raw_rawget(t,k)
    end
    local raw_next=next
    -- НИКТО НЕ ДОЛЖЕН УЗНАТЬ МАСТЕР-КЛЮЧ!!!
    function next(t,k)
      if type(t)=="table" and raw_rawget(t,protectid) then
        error("СЕРЬЁЗНАЯ ПРОБЛЕМА БЕЗОПАСНОСТИ ДЕТЕКТЕД. УНИЧТОЖАЕМ ОПАСНОСТЬ...",2)
      end
      local ok,k,v=xpcall(raw_next,debug.traceback,t,k)
      if not ok then
        error(k,0)
      end
      return k,v
    end
    local raw_ipairs=ipairs
    function ipairs(...)
      local f,t,z=raw_ipairs(...)
      return function(t,k)
        if type(t)=="table" and raw_rawget(t,protectid) then
          error("СЕРЬЁЗНАЯ ПРОБЛЕМА БЕЗОПАСНОСТИ ДЕТЕКТЕД. УНИЧТОЖАЕМ ОПАСНОСТЬ...",2)
        end
        return f(t,k)
      end,t,z
    end
    function rawset(t,k,v) -- Потому что в защитные копии таблиц можно было бы записывать. Хоть это бы и не отразилось бы на оригинале, но при попытке индекснуть поле защитной копии будет подложено подмененное поле в обход __index :(
      if k==protectid then
        error("СЕРЬЁЗНАЯ ПРОБЛЕМА БЕЗОПАСНОСТИ ДЕТЕКТЕД. УНИЧТОЖАЕМ ОПАСНОСТЬ...",2)
      end
      assert(type(t)=="table","bad argument #1 to rawset (table expected, got "..type(t)..")")
      assert(type(k)~="nil","bad argument #2 to rawset (table index is nil)")
      local mt=getmetatable(t)
      local no_set=raw_rawget(t,protectid) or (type(mt)=="table" and raw_rawget(mt,protectid))
      if no_set then
        error("таблица рид-онли! Аксес дэняйд!",2)
      end
      raw_rawset(t,k,v)
      return t
    end
    function tprotect.protect(t)
      local tcopy={[protectid]=true}
      local mto=getmetatable(t)
      local tcopy_mt=type(mto)=="table" and mto or {}
      local mt={[protectid]=true}
      function mt:__index(k)
        local x=t[k]
        if tcopy_mt.__index and not x then
          return tcopy_mt.__index(t,k)
        end
        return t[k]
      end
      function mt:__pairs(self)
        if tcopy_mt.__pairs then
          return tcopy_mt.__pairs(t)
        end
        local function iter(x,i)
          assert(x==self)
          return next(t,i)
        end
        return iter,self,nil
      end
      function mt:__ipairs(self)
        if tcopy_mt.__ipairs then
          return tcopy_mt.__ipairs(t)
        end
        local f,x,i=ipairs(self)
        local function iter(self,i)
          return f(t,i)
        end
        return iter,x,i
      end
      function mt:__newindex(k,v)
        if tcopy_mt.__newindex then -- Мы доверяем нашим клиентам!
          return tcopy_mt.__newindex(self,k,v)
        end
        error("СРЕДНЕНЬКАЯ ПРОБЛЕМА БЕЗОПАСНОСТИ ДЕТЕКТЕД. УНИЧТОЖАЕМ ОПАСНОСТЬ...",2)
      end
      mt.__metatable={"Хочешь проблем? Попытайся взломать tprotect!"}
      setmetatable(mt,{__index=function(self,i)
        local v=tcopy_mt
        if type(v)=="function" then
          return function(self,...)
            return v(t,...)
          end
        end
        return v
      end})
      setmetatable(tcopy,mt)
      return tcopy,tcopy_mt
    end
    local tprotect_t,tprotect_mt=tprotect.protect(tprotect) -- Защитим нашу библиотечку
    return tprotect_t

    А теперь документация, а то я пишу код непонятно:

    
    function tprotect.protect(table:t):table -- Возвращает "зеркало" таблицы t и её метатаблицу (у "зеркальной" таблицы она неизменяема). "Зеркальная" таблица защищена от записи и всегда является отражением t. Если вы хотите защитить таблицу t, то на публичное (доступное для других программ, от которых вам хотелось бы защитить t) место, где вы ставите обычно таблицу t, ставьте "зеркальную" таблицу

     

    есть серьезная проблема, ты подменяешь pairs/ipairs и другие функции в табличке _ENV а не в табличке _G, в openOS это разные таблички в отличии от eeprom хоть и у всех программ _ENV обшей, у демонов и в интерпретаторе lua он костюмный, и получить доступ к оригинальному pairs можно банально так _G.pairs, конечно при таком оброшении (pairs) из обычной программы будет задействоваться переопределенный pairs итд так как _ENV более приоритетнее _G но удалив pairs из _ENV будет работать оригинальный из _G, надеюсь понятно объяснил, и кста _ENV очишяеться при закрытии shell, и тебе нужно подменять функции так function _G.pairs(...) return raw_pairs(...) end, а не так function pairs(...) return raw_pairs(...) end


  17. 2 часа назад, BrightYC сказал:

    где он сдвинут, заскринь пожалуйста...

    откатываются... https://github.com/BrightYC/Cyan/blob/master/cyan.lua#L168-L169

     

    я не использую метод get boot address вообще, это от оси зависит использовать это или нет, в майноси это вообще не используется
    у меня не хватит места чтоб исключить вообще все случаи связанные с загрузкой оси — мои юзкейсы это покрывало. Если хочешь — сделай PR, я смержу.

    FMjtFz7.png 

    1) вот тут видно что сдвинуто

    2) откатываться до палитры t3, на t2 там другие цвета и палитра уже не правильная

    3) ты вызываешь этот метод в установщике для openOS:nKN3lfK.png

    • Нравится 2

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

    В каком именно случае? Изначально ты говорил про точно такую же программу:

     

    я имел в виду, что я давно писал программу для удаленного управления мк(примерно год назад) и использовал _ вместо nil, я тогда в первый раз писал в vs code до этого кодил в игре, и это меня спасло я увидел что _ в одном месте те светиться не так как в другом и понял в чем дело


  19. 52 минуты назад, eu_tomat сказал:

    А как может быть запущено что-то кроме обсуждаемой программы в том же глобальном окружении?

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


  20. 13 часа назад, eu_tomat сказал:

    А в чём проблема конкретно этой программы? Здесь автор использует несуществующую переменную вместо nil. Да, такое решение вряд ли можно рекомендовать к широкому применению, оно требует особой бдительности от программиста. Но что может пойти не так в обсуждаемой здесь программе?

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

     

    такое ращения на мой взгляд оправдана для eeprom я так сам делаю, но тогда следует использовать разные имена для сувания и для вытягивания nil, сую я в _ в тяну из "a" а так как глобала "a" в eeprom точно не будет прога будет работать нормально


  21. В 26.03.2021 в 16:21, Del сказал:


    Привет читатель!
    Играя с друзьями у меня появилась необходимость обмениваться сообщениями ТОЛЬКО по компьютерам(самодельный приват)
    Жили мы в разных домах, у каждого замок на двери. В интернете ничего годного я не нашёл, так что решил написать свой чат.
     

    Плюсы:

    • Обмена сообщениями без чата
    • Не требует много ресурсов и почти ничего не весит
    • Хватит друзьям
    • Команды

     



    image.png.288f2cb2f5be7d976f76d87fbf5b0f5a.png

      Создатель чата - !( Del )! (или если хотите - Деф)
      Специальное спасибо serafim за предоставление своей версии чата. Код был нагло скомунижжен позаимствован оттуда и немного переработан.           Ах,да... Ссылка на сообщение
      Так же была использована немного переработанная библиотека для шифрования цезарем. Ссылка на гитхаб предоставлена
    Установка:   pastebin run 1Y1KnTen

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

     

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


  22. В 31.10.2019 в 14:14, hohserg сказал:

    Актуальность

    Раньше, чтобы обновить прошивку дрона или микроконтроллера нужно было

    • записать прошивку на eeprom через компьютер,
    • снять устройство,
    • заменить eeprom через верстак
    • поставить устройство

    Довольно геморно если устройств много или часто вносятся мелкие изменения во время разработки

     

    Решение

    Чтобы не демонтировать устройство можно отправлять ему прошивку по беспородной сетевой карте. Устройство в свою очередь принимает обнову и применяет ее.

     

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

    • Загружаем файлы из этой папки(wget)

    https://github.com/hohserg1/OpenComputersPrograms/tree/master/wireless_flash

    • Прошиваем наш eeprom прошивкой wireless_flash_eeporm.lua и вставляем в устройство
    • Копируем адрес сетевой карты устройства
    • Запускаем устройство
    • Вызов команды wireless_flash покажет usage

    Последний использованный адрес сетевой карты устройства запоминается

    Теперь можем быстро тестировать прошивки:lol:

     

     

    Программа пока не особо функциональна, но вполне юзабельна.

    При разработке ПО для дрона рекомендую юзать планшет.

     

    Какие фичи еще стоит добавить(наверное, я это сделаю):

    • Сохранение принятой прошивки
    • Получение текущей прошивки устройства
    • Сохранение множества адресов беспроводных карт

    круто, малодец, вот только небольшой совеи, используй _ только в ситуации когда тебе ненужна переменная, а когда нужно передать nil так и пиши nil, так как когда ты пишиш _ = 1 имя _ резервируеться, и там уде будет отнуть не nil, я один раз довно на этом пракололся, причем самле забавное что в точно такой же софтине, тоесть если ты напишиш _ = 5 print(1, _, 7) то вывод будет 1 5 7, я конечьно понимаю что за столько времени ты уже наверника с этим разобрался, но хоть навичькам помогу


  23. В 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, которая означает Зигзагообразное движение.

     

    Фидбэк

     

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

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

     

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

     

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

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