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

Лидеры


Популярный контент

Показан контент с высокой репутацией за 19.04.2022 во всех областях

  1. 7 баллов
    Приветствую вас. Этот пост я пишу, чтобы рассказать вам о своей разработке для мода OpenComputers: BetterBIOS Это специальная прошивка BIOS для EEPROM, позволяющая выбирать любое из подключенных устройств для загрузки. Для этого используется пользовательский псевдографический интерфейс, который поддерживается для всех уровней видеокарт и экранов (То есть интерфейс будет даже на видеокарте и/или экране первого уровня, при чём с обрезанными адресами, чтобы уместить имя устройства в экран). Так же, в этой прошивке есть своя система отображения ошибок, показывающая весь "traceback" за исключением не нужных пунктов внутри самой прошивки. Это будет очень полезно для разработчиков собственных операционных систем, ведь данная прошивка подскажет места, в которых возникла ошибка, в то время как стандартная прошивка молчит как партизан. Если доступных для загрузки устройств больше, чем одно - то при включении компьютера, пользователю предлагается выбрать одно из них. Если такое устройство только одно - загрузка начнётся незамедлительно. Подключение устройств для загрузки происходит динамически, "на лету", прямо во время выбора устройства. То же самое с экранами и видеокартами. Так же, данная прошивка имеет приоритеты на выбор экрана: первым делом она пытается подключить тот экран, у которого есть клавиатуры поблизости. Если таковых не имеется - использует любой другой. Видеокарту прошивка использует максимального уровня. Прошивка защищена от критических сбоев при резком извлечении устройств, пока программа работает с файлами на них. Это делает данную прошивку практически не убиваемой, и позволяет избегать любых несчастных случаев при работе с компьютером. Я просто параноик, иначе сделать не мог... Данная прошивка поддерживает стандартную операционную систему OpenOS, для работы которой требуются функции computer.setBootAddress и computer.getBootAddress. Если вы хотите использовать данную прошивку, но не хотите мусорить в глобальных переменных этими рудиментами - просто вырежьте эти функции, сделать это несложно, ниже будут ссылки на исходники. Несмотря на весь этот функционал и продуманность, в минимизированном виде данная прошивка помещается на EEPROM, стандартная ёмкость которого - 4096 символов. Вы можете изучить исходный код данной прошивки, и использовать некоторые приёмы оттуда для своих проектов. К сожалению, код не очень хорошо читаемый, но это обусловлено тем, что я писал заранее с расчётом на то, что подробный код будет минимизирован, а минимизаторов кода недостаточно, нужно ещё и грамотно написать код. Исходный код: https://codeberg.org/KeyTwoZero/BetterBIOS/src/branch/main (Я ещё делал репозиторий на GitHub, но чёт я его забросил... Мне он не нравится) Спасибо за внимание. Если у вас есть какие-то идеи, как можно улучшить или ухудшить данную прошивку - пишите здесь, или как-нибудь вычислите меня, постараюсь подумать, и может быть, даже обновлю код, сделав его лучше для вас.
  2. 4 балла
  3. 3 балла
    Сижу короче я такой и хочу сделать свой проект в майне на OC вот и придумал ЭТУ идею ПРЕДСТАВЛЯЮ ВАМ DISROB а если точнее управление роботом из дискорда! Предыстория: Установка! 1. 1 - Для начала нужен дискорд бот *ТЫК* мы попадаем на Developer portal Дискорда 2 - входим в аккаунт 3 -и нажимаем New application 4 - Даем название.. 5 - 9999... - а дальше нагуглите лень писать ?? - получаем Токин 2. 1 - Качаем моё .exe приложение (делал на пайтон кто боится могу скинуть исходник) **ШМЯК** 2 - запускаем и вводим какой либо код Stem 3 - запоминаем код он ещё понадобиться 4 - вводим токен бота(вы же его уже на сервер добавили?) может показатся что прога зависла но это не так 3. 1 - Качаем прогу на робота wget https://raw.githubusercontent.com/Bumer-32/Minecraft-opencomputers/main/DisRob/DisRob.lua 2 - редактируем.. edit DisRob.lua и сверху в переменной вбиваем тот же самый код stem (Помните мы его запоминали? не помните? память тренировать надо! стихи учить! быстро стих или 2 в журнал!) давайте давайте стих в обсуждение сюда 3 - написать стих 4 - ставим Stem ***ГРЮК*** НЕ ПУТАЕМ СО СТИМОМ ЭТО СТЕМ запускаем все скачанное Инструкция: Сис требования : Просьба не кри.. а хотя.. КРИТИКУЙТЕ ХОЧУ ПОУЧИТСЯ! и да спасибо @Totoro за прекрасный Stem и @ProgramCrafter за предоставленный код для подключения к Stem на Python
  4. 3 балла
    Ещё можно заюзать dofile вместо require - результат тот же, а либа каждый раз будет читаться из файла без кеширования
  5. 3 балла
  6. 3 балла
    начнем с того что программа идет в паре программа/загрузчик для программы необходимо создать отдельную папку и поместить туда саму программа и загрузчик(bootloader.lua) устоновка: https://raw.githubusercontent.com/igorkll/products/main/nFlash/bootloader.lua загрузчик https://raw.githubusercontent.com/igorkll/products/main/nFlash/main.lua сама программа что умеет данная прошивка eeprom? удаленное включить/выключить микроконтроллер узнать в каком он сейчас состоянии(вкл/выкл) удаленная перезагрузка удаленный запуск кода удаленная прошивка(обратите внимания что код имеющий синтаксическую ошибку не будет прошит) поиск устройств база данные хранения uuid модемов для обращения по кодовому имени как работать с базой данных? названия из базы можно использовать вместо полного uuid регистрация nFlash base register uuid(можно сокращенный, если модем установлен в компьютер) регистрация по сети, nFlash broadcast list; nFlash broadcast register "номер из списка" имя полная документация print("power control:") print("nFlash control registernameOrFulluuid power on") print("nFlash control registernameOrFulluuid power off") print("nFlash control registernameOrFulluuid power reboot") print("nFlash control registernameOrFulluuid power get") print("programm control:") print("nFlash control registernameOrFulluuid run path") print("nFlash control registernameOrFulluuid fastrun code") print("nFlash control registernameOrFulluuid flash path") print("base:") print("nFlash base list") print("nFlash base register uuid(если модем устоновлен в компьютер можно сократить uuid(для быстрой регистрации))") print("nFlash base remove") print("broadcast:") print("nFlash broadcast list(список сохраняться в оперативку для регистрации по номеру)") print("nFlash broadcast register number registerName(для начала требуеться проиндексировать устройства)") print("nFlash broadcast savedList(выводит предыдулий лист без поиска по сети)")
  7. 2 балла
    PIM по сути сундук, но используется инвентарь игрока, притом того кто первым станет на него Все доступные методы можно получить прогой https://pastebin.com/wGJbJmX4 посути на любое устройство До написания программы можно опробовать методы в действии lua =component.pim.getInventoryName() Получим ник того кто стоит на pim, если нет ни кого то вернёт значение равное "pim" lua =component.pim.getAllStacks(0) Тут получим значения всех ячеек инвентаря одним запросом в виде таблицы Упрощённый пример изъятия денег (Железных блоков) в МЕ интерфейс который стоит под пим Вариант расположения блоков Но удобнее использовать MFU чтоб убрать торчащие блоки и провода прокси нужен если нужно использовать несколько одинаковых устройств, в данном случае pim всего один У пим всего 2 ивента когда игрок стал на пим "player_on" и когда ушёл с него "player_off" Пример получения никнейма (использовал ивент в виде таблицы, в дальнейшем пригодится для обработки других событий) (например нажатия кнопок, касание экрана, и тд) Так как установлен мод OpenPeripheral для ме доступны новые методы Например с помощью id можно отправить предмет из МЕ в PIM Разумеется есть и иные способы
  8. 2 балла
    Сбрасывать кеш надо перед require('numbers'): package.loaded['numbers'] = nil что-то там = require('numbers')
  9. 2 балла
    Небольшой апдейт для ОС: Добавлено приложение Events, работающее по аналогии с OpenOS'евским dmesg Добавлена возможность установки event.interruptingFunction для пользовательской обработки прерываний по ctrl + alt + c Добавлена возможность установки кастомных кодов клавиш вместо ctrl + alt + c Добавлена поддержка precise режима для мониторов без форсированной установки этого режима на false Для магазина приложений добавлена поддержка иконок с разрешением < 8x4 пикселей Исправлен краш проводника при скроллинге в пустых директориях Оптимизирован экранный буфер для прямых вызовов к GPU через invoke без проксирования компонента, что чуть-чуть повышает скорость отрисовки И для местной прошивки EEPROM: Добавлена фича URL boot для выполнения пользовательских скриптов Добавлена поддержка авто-привязки к монитору при его подключении и отключении Добавлено ожидание появления "приемлемой" файловой системы в компьютере с соотв. оповещением, если при включении компьютера она не была обнаружена
  10. 2 балла
    В данном коде эту ошибку можно словить по нескольким причинам: МЕ сеть без энергии В МЕ нет шаблона крафта В списке items не верно указано название предмета Опрос предметов по id оправдан если их немного Например для 10 предметов требуется 10 опросов сети, а если предметов больше 500 ? Правильней будет получить все предметы сети одним запросом а затем уже разобрать таблицу Опрос по id также создаёт ещё одну проблему в сети могут быть предметы с одинаковым названием но разными nbt они будут считатся разными поделюсь кусочком своего прекрафта решающих эти проблемы, увы целиком не могу
  11. 2 балла
    Видимо, это не относится к играм. Но более подходящей рубрики выбрать не смог. Чёрно-белая экранная заставка из нескольких схожих фракталов, сменяющихся примерно 1 раз в секунду wget https://raw.githubusercontent.com/Zardar/oc_fractals/main/fractal1.lua fractal1.lua Требования к оборудованию: Lua 5.3 комплект однотирных памяти, видеокарты и монитора. Уровень жёсткого диска значения не имеет. Видеорезолюция любая. Для большей зрелищности желательны компоненты 3-го уровня и соотношение сторон 1:1 (максимально доступное видеокарте 3го уровня 126 х 63)
  12. 1 балл
    Раз уж на форуме появился специализированный раздел, посвященный операционным системам, то грех не выложить свою. Сама система является графической оболочкой к дефолтной OpenOS со множеством собственных библиотек, основной упор при ее написании делался на визуальную составляющую и общее быстродействие. Ключевые особенности: Многозадачность Оконный интерфейс с двойной буферизацией графики Поддержка анимаций, обоев, заставок и цветовых схем Поддержка языковых пакетов и локализации ПО Поддержка авторизации пользователя по паролю и биометрике Поддержка обмена файлами по локальной сети через модемы Поддержка клиентского подключения к реальным FTP-серверам Система отчетов об ошибках с возможностью отправки информации разработчикам Магазин приложений с возможностью публикации собственных творений и системой пользовательских рейтингов Интегрированная IDE с отладчиком и значительное количество разнообразного прикладного ПО Открытое системное API и подробная иллюстрированная документация к библиотекам Собственная прошивка EEPROM с возможностью выбора/форматирования загрузочного тома и восстановлением через интернет Частичная совместимость с OpenOS-софтом Установка: Для запуска инсталлера введите следующую команду: wget -f https://raw.githubusercontent.com/IgorTimofeev/MineOS/master/Installer/BIOS.lua /tmp/bios.lua && flash -q /tmp/bios.lua && reboot Перед вами появится симпатичный интерфейс, где вы сможете выбрать параметры установки: к примеру, загружать ли все имеющиеся приложения, либо оставить только системные, а также загружать ли обои рабочего стола. Лицензионное соглашение шуточное, всерьез можно не воспринимать. Исходники: https://github.com/IgorTimofeev/MineOS Люди, прямо или косвенно участвовавшие в разработке: Тимофеев Игорь - рефакторинг, оптимизация и вылизывание кода Трифонов Глеб - разработчик формата изображений OCIF и методов цветовой обработки Веревкин Яков - консультант по вопросам векторно-матричных преобразований Шестаков Тимофей - специалист по UI/UX-дилеммам Смирнов Алексей - тестировщик ПО Богушевич Виктория - синтаксический корректировщик и отвлекающий фактор Витвицкая Яна - позитивистский мотиватор и не менее отвлекающий фактор Какой-то Андрей - эксперт в области оценки красоты кода Ярычев Никита - компаньон в обсуждениях философских нюансов Пакин Максим - автор нескольких приложений Тиунов Дмитрий - консультант по нюансам веб-запросов Маяковский Константин - товарищ со уникальным духовно-пофигистическим характером Сазонов Слава - автор пары оптимизационных моментов и любитель кратких диалогов Омелаенко Максим - анализатор рынка ПО и конкурентных решений Просин Михаил - генератор мотивации по генерации идей по улучшению ПО Чернышева Дарья - моральная поддержка команды Палиев Егор - очень хотел в этот список
  13. 1 балл
    Мда) Додуматься до этого было бы непросто. Спасибо!
  14. 1 балл
    Зараза! Ну, тогда только ручная растеризация символов, да. Я от недалекого ума эту фичу напрямую через двумерные таблички реализовал. Может, у тебя получится более грамотное решение https://github.com/IgorTimofeev/MineOS/blob/master/Libraries/BigLetters.lua
  15. 1 балл
    local event = require("event") local unicode = require("unicode") local component = require("component") local screen = component.screen local gpu = component.gpu -- Отображаемый текст local text = "Hehe u cute" -- Разрешение по высоте, на основе которого будет подобрана "идеальная" ширина -- Т.к. строка всего одна, она как раз займет 1/3 высоты экрана local height = 3 -- Получаем компоновку мульти-блочного экрана и его пиксельную пропорцию -- Инфа по формуле, если интересно: https://computercraft.ru/topic/2413-kak-ubrat-chyornye-polosy-po-krayam-ekrana-opencomputers/ local aspectWidth, aspectHeight = screen.getAspectRatio() local proportion = 2 * (16 * aspectWidth - 4.5) / (16 * aspectHeight - 4.5) -- Рассчитываем разрешение по ширине на основе высоты и пропорции local width = math.floor(height * proportion) -- Чистим экран gpu.setResolution(width, height) gpu.setBackground(0x220000) gpu.setForeground(0xFFFFFF) gpu.fill(1, 1, width, height, " ") -- Рисуем текст по центру gpu.set(math.ceil(width / 2 - unicode.len(text) / 2), math.ceil(height / 2), text) -- Ждем интерактива от юзера while event.pull() ~= "touch" do end
  16. 1 балл
    @Leo857 Скриншот сообщает о том, что в строке 186 произошла попытка обращения к полю несуществующей таблицы. Код этой строки: if not meItem[1].isCraftable then Я не имею опыта сопряжения компьютера с МЭ-сетью. Какая из таблиц может быть проблемной, я не знаю. Но вариантов не так много. Попробуй такие: if meItem and not meItem[1].isCraftable then if meItem[1] and not meItem[1].isCraftable then if meItem and meItem[1] and not meItem[1].isCraftable then Вероятно, это поможет. Но, возможно, эта ошибка вылезет где-то ещё, и тогда потребуется основательно переписать логику работы программы.
  17. 1 балл
    А, тогда инструкция Включить компьютер. Ввести команду lua Ввести команду component.redstone.setWakeThreshold(1) Выключить компьютер. При подаче импульса, он должен запуститься.
  18. 1 балл
    Просто animate.Anim, без (). Со скобками ты передаешь в event.timer результат однократного выполнения функции Anim, а не саму функцию Anim для последующего выполнения
  19. 1 балл
    Примитивная, но широко известная в узких кругах игра "Жизнь" является клеточным автоматом, придуманным английским математиком Джоном Конвеем в 1970 году, который упростил идеи предложенные его тёзкой Нейманом. Подробно можно почитать на Вики. Реализацию этого клеточного аппарата на луа я и предлагаю всем, кого он может заинтересовать. Как скачать: wget https://raw.githubusercontent.com/Zardar/evolution/evolution_1.0/evolution.lua evo.lua Предпросмотр: Стиль: классический чёрно-белый. Скорость: не регулируется. Надеюсь, это самое быстрое недоразумение с псевдографикой, что вы видели в луа на Open Computers. В целом, есть возможность немного увеличить производительность, но фактической необходимости нет. Впрочем, если вам удастся генерация на 20000 точек, то мне интересно будет узнать подробности. Разрешение экрана - любое доступное. Игра не запрашивает и не меняет его. Но - при узком экране не будут видны все названия кнопок. Компоненты системного блока - однотирные с экраном. Впрочем, это не критично. В игре реализованы: редактор центральной части поля, пауза, рестарт, выход, очистка экрана. Присутствуют небольшие недочёты в gui. Так же некоторые несмертельные недочёты возникают при переходе из режима отрисовки поля в паузу, из неё в редактор и обратно. И при переходе из редактора в паузу и обратно. Отсутствуют пресеты. Возможно, будут в необозримом будущем. Буду благодарен за замечания
  20. 1 балл
    А нужно учиться, если хочешь с другими людьми коммуницировать и что-то им показывать. Без этого никуда.
  21. 1 балл
    А у меня вопрос. Допустим, я написал программу для опенкомпьютера. Это что, нереальная программа? И если ответ положительный, то чем реальная программа отличается от нереальной?
  22. 1 балл
    @Oleshe Помимо прочего у беспроводных карт есть просчет "препятсвий" при отправке сообщений - наличие каких-то блоков между отправителем и принимающим уменьшает рабочий радиус беспроводных сетевых карт.
  23. 1 балл
    if im~=nil then paintutils.drawImage(im, 1, 1) end И убедись ,что загружаешь валидное изображение по валидному пути. Скорее всего loadImage возвращает ошибку вторым аргументом
  24. 1 балл
    "Вирус не заработал". Вот это я понимаю - проблемы!
  25. 1 балл
    Попробуйте угадать, что будет выведено на экран в результате выполнения нижеприведенного кода: N=1e16 if N+1 > N then print("Норма") else print("Лажа") end Если вы твердо уверены, что N+1 заведомо больше N и ваш ответ "Норма", то вы, наверное, будете несколько удивлены, когда выполните этот код на компьютере. Дело в том, что Луа хранит числовые значения в формате с плавающей запятой. Это означает, что каким бы большим число ни было, оно всегда занимает в памяти компьютера одинаковое место, а значит, чем больше число, тем меньше точность, с какой оно хранится. И при достаточно большом N точности, что бы увеличить его на единицу оказывается недостаточно. Избежать подобной проблемы поможет тип данных, который я назвал "Метачисла". На самом деле метачисла являются луа-таблицами, но большинство арифметических операций с ними можно проводить также как и с обычными числами. С той лишь разницей, что размер памяти, занимаемой метачислом, ограничивается только памятью компьютера, а значит, метачисло может принимать сколь угодно большие значения, не теряя при этом точности. Метачисло может быть создано при помощи библиотеки metanum pastebin get PsMFQame lib/metanum.lua Библиотека содержит единственную функцию – функцию создания метачисла. metanum([num[,divprec]]) Параметр num определяет начальное значение метачисла и может быть обычным числом, строкой или другим метачислом. Если параметр отсутствует, будет создано метачисло равное нулю. Параметр divprec ограничивает точность метачисла при выполнении операции деления. При делении некоторых чисел, скажем 1 на 3, может возникнуть бесконечная дробь, которая без такого ограничения заняла бы всю память компьютера. Чем больше divprec, тем больше значащих цифр может содержать метачисло. По умолчанию это число равняется 32. Мета числа можно складывать, вычитать, умножать и делить, как между собой, так и с обычными числами. Результатом такой операции всегда будет метачисло. Метачисла можно возводить в степень, но степенью должно быть обычное число. Метачисла можно сравнивать с другими метачислами. Если у вас возникнет необходимость сравнить метачисло с числом, вы должны привести оба значения к одному типу. Пример нахождения факториала 300: mn=require("metanum") –- подключаем библиотеку f=mn(1) -- создаем метачисло, равное 1 for i=1,300 do f=f*i -- выполняем умножение 300 раз end print(f) -- выводим результат Пример нахождения степени двойки: mn=require("metanum") –- подключаем библиотеку two=mn(2) -- создаем метачисло, равное 2 print(two^1024) -- возводим в степень и выводим результат Как видим, после создания метачисла, с ним можно не задумываясь работать так же, как и с обычным числом. Но, к сожалению, над метачислами не могут быть выполнены функции библиотеки math. Однако, метачисла обладают некоторыми собственными функциями. К примеру, если мы имеем некое метачисло М, над ним можно выполнить такие действия: M:tonumber() – преобразует метачисло в число. Внимание! Возможна потеря точности. M:floor([n]) – возвращает целую часть метачисла. Если задан параметр n, отсекает, оставляя n знаков после запятой. M:abs() – возвращает абсолютное значение (модуль) метачисла. M:toexp() – преобразует метачисло к экспоненциальному виду. PS: стоит добавить, что арифметические операции над метачислами выполняются значительно медленнее, чем над обычными числами. Поэтому использовать метачисла следует только тогда, когда в этом действительно есть необходимость.
  26. 1 балл
    Данная версия системы управления базами данных (СУБД) под операционную систему OpenOS разработана для изучения особенностей работы реальной СУБД MySQL. Предупреждаю сразу: в ней реализованы далеко не все функции MySQL. Некоторые я посчитал несущественными или избыточными, до некоторых просто не дошли руки. Но то, что есть позволяет создавать адаптированные под Луа базы данных, и формировать несложные SQL-запросы к ним. Для установки СУБД на ОС-компьютер выполните команду pastebin run -f bS1kRJKw Если в компьютере установлена интернет-карта, вы должны увидеть такой текст: Добро пожаловать в программу установки СУБД MySQL Выберите тип установки: 1. Серверная часть 2. Клиентская часть 3. Полная установка Поскольку данная версия пока не поддерживает обмен между клиентом и сервером по сети, выбираем полную установку. После загрузки всех необходимых файлов, программа предложит перегрузить компьютер. Но мы пока не будем перегружать, а рассмотрим содержимое файла etc/dbms.cfg --Файл конфигурации СУБД MySQL DBpath="/mysql_db/" port=3306 password="" Параметр DBpath содержит путь к папке, в которой будут храниться создаваемые базы. Если эта папка отсутствует, то при запуске СУБД она будет создана автоматически. Измените этот параметр, если значение по умолчанию вас не устраивает. Параметр port содержит номер порта, через который, я надеюсь, когда нибудь можно будет обратиться к СУБД по сети. Параметр password призван защищать доступ к базам паролем, но эта опция пока не реализована и вряд ли когда нибудь будет. Так же к серверной части относится собственно СУБД - файл boot/dbms.lua, который благодаря своему расположению стартует автоматически и работает в фоновом режиме, что позволяет запускать на одном компьютере и сервер и клиент. Вот теперь настало время перегрузить компьютер. В клиентскую часть входят библиотека lib/mysql.lua и программа-монитор bin/mysql_mon.lua предоставляющая доступ к базам данных из командной строки. Библиотека mysql предоставляет следующие функции для работы с базами данных: При реализации функции query я сделал одно небольшое допущение: все служебные слова запроса следует писать строчными (маленькими) буквами. SQL-монитор mysql_mon позволяет отправлять запросы к СУБД из командной строки. Я старался сделать его похожим на Command Line Client, поэтому объяснять суть его работы не вижу смысла. Для выхода из программы введите "exit". Пример работы с СУБД: Пожалуйста оставляйте в этой теме пожелания какие функции из нереализованных еще следует реализовать и замечания о несоответствии работы существующих функций.
  27. 1 балл
    Лучше изучить ооп на Java, а потом применять знания эти в луа, так как тут псевдо ооп, изучать ооп в луа испортит все представление об ооп.
  28. 0 баллов
    А не лучше будет сбилдить питоновский python-овский скрипт в 1 exe файл?
  29. 0 баллов
  30. 0 баллов
    Программисты бывают двух видов: Одни пытаются впихнуть в BIOS максимум функций на все случаи жизни. Даже ценой несовместимости настроек с большинством серверов. Другие же оставляют в BIOS лишь те функции, которые им необходимы для решения поставленной задачи.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...