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

Лидеры


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

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

  1. 1 балл
    В последних версиях OpenComputers обрастает всякими загадочными вещами. Игроки, которые только только освоились с предыдущей версией вдруг понимают, что надо изучать все заново. "А пошло оно все!" - думают игроки, и уходят на версию 1.3.6, или переучиваются на ComputerCraft, который проще, и не требует непонятного. А одна из самых загадочных - неведомый EEPROM. Это такая мелкая хрень, без которой не работает ни один компьютер, или даже робот. Хорошо еще, что есть стандартный EEPROM который называется Lua BIOS. Он легко крафтится и заставляет работать компьютеры как и раньше. Но найдем задачку посложнее, где Lua BIOS не поможет. Попробуем собрать микроконтроллер, который будет управлять входными дверями. 1. План Представим, как оно должно работать. Слева от двери (если входить) - микроконтроллер. Ради понтов, возьмем Микроконтроллер 2-ого уровня и поставим в него беспроводную сетевую плату. Кроме того добавим красную плату, чтобы управлять дверью. 1. Если контроллер принимает сигнал "open" - он открывает дверь. 2. Если примет сигнал "close" - он закрывает дверь. 3. Если примет посторонний сигнал - взрывает динамит. Дабы сокровища не достались хакерам. Для управления задействуем любой комп, у которого тоже будет беспроводная плата (или точка доступа). 2. Крафтим контроллер С этим проблем не возникнет. Потому, что я играю в креативе :P . Открываем NEI и берем нужные детали. В последний слот положим пока пустой EEPROM. Потом поставим на него прошивку, а пока - не важно. Нажимаем кнопку "Старт" и достаем готовый блок. 3. Готовим прошивку Теперь, когда все готово, мы построили сокровищницу и скрафтили контроллер - осталось самое главное. Программирование EEPROM'а отличается от программирования обычной программы. Потому, что обычно, наши программы выполняются в OpenOS, которая заботливо загружает нужные библиотеки, предоставляет всякие удобные фичи и прочее. Тем не менее писать мы будем именно в OpenOS. Запустим компьютер, напишем edit bios и введем следующие строки: red = component.proxy(component.list("redstone")()) while true do red.setOutput(5, 0) computer.pullSignal(1) red.setOutput(5, 15) computer.pullSignal(1) end Дело в том, что большая часть библиотек, которые мы использовали - это библиотеки OpenOS. А значит мы не можем ими пользоваться в BIOS. Однако кое-что нам доступно. Это библиотеки computer и component, и соответственно все установленные в целевом агрегате (микроконтроллер) компоненты. Более чем достаточно для наших задач. Вышеприведенный код делает следующее: * ищет компонент с названием "redstone" и возвращает его прокси * в вечном цикле посылает нулевой редстоун-импульс направо (side = 5), т.е. гасит сигнал * ждет секунду (на самом деле - ожидает эвентов, то есть сигналов) * посылает редстоун сигнал с силой 15 направо * опять ждет секунду Преследуем двоякую цель: во-первых проверить, что EEPROM вообще работает так про него написано на Вики. Кто его знает? А во-вторых: убедиться, что сторона 5 это именно та сторона, где дверь. А не какая-нибудь другая. Нажмем Ctrl+S, чтобы сохраниться и Ctrl+W, чтобы закрыть редактор. Вставим пустой EEPROM (еще один) в слот нашего компьютера, вместо лежащего там Lua BIOS. И напишем в консоль такую команду: flash -q bios MCBios Программа flash предназначена для прошивки чипов. Флаг -q говорит ей, чтобы не задавала лишних вопросов, затем идет имя файла с нашим кодом (bios) и метка, которую программа шлепнет на чип (MCBios). Все. Доставайте. Lua BIOS на место класть не обязательно, ибо этот слот нам еще потребуется. (Но не забудьте его вернуть, если будете перезагружать компьютер) Чтобы заменить пустой EEPROM в контроллере на наш MCBios, надо положить контроллер и MCBios на верстак. При этом пустой чип вылетит, а новый встанет на его место. Поставим контроллер на пол и протестируем. После клика ПКМ на контроллере - замигала правая лампа. Значит все работает как нужно. 4. Теперь - серьезно Извлеките чип с MCBios обратно (так же как и вставляли, только наоборот). Или приготовьте новый пустой чип. Главное - не запутайтесь в них. Пишем клиент для контроллера. У меня он выглядит примерно так: red = component.proxy(component.list("redstone")()) modem = component.proxy(component.list('modem')()) modem.open(27) red.setOutput(5, 0) red.setOutput(2, 0) -- no explosions yet =) while true do name, _, sender, _, _, message = computer.pullSignal(2) if name == 'modem_message' then if message == 'open' then red.setOutput(5, 15) elseif message == 'close' then red.setOutput(5, 0) else -- hacker tries to get in? red.setOutput(2, 15) -- fire in the hole!!! end end end modem.close() Все согласно плану. Прошиваем чип, вставляем в контроллер, а контроллер ставим слева от дверей. Сзади к контроллеру осторожно прилаживаем запал. ПКМ! Теперь открываем новый файл на компьютере: edit send И пишем в него такой код: local com = require('component') local modem = com.modem local args = {...} modem.broadcast(27, args[1]) print("Message '"..args[1].."' sent!") Сохраняем, и закрываем. Это будет программка для тестирования контроллера. 5. Тест! Пишем в консоль send open. Дверь открылась! Пишем send close. Дверь закрылась! Пишем send opeh Упс! Опечатка. О_О
  2. 1 балл
    В 2015-2016 году тут разрабатывался файловый менеджер Midday Commander, который по неизвестным причинам оказался заброшен. Увы, он много чего не умеет, есть неприятные баги, однако других ФМ под компьютеры я не встречал (может плохо искал). Собственно, это и послужило появлением моего форка от оригинального MC. И имя ему Midday Commander Plus! Репозиторий на GitHub Основные нововведения: Поддержка видеорежима 160x50 Тени у окон (как у Norton-а) Поддержка манипулятора "Мышь" (в том числе колесика) Мультиязычность (языковые данные вынесены в отдельный .mcl файл) Поддержка тем (данные о цветах элементов вынесены в отдельный .mct файл) Система ассоциаций Параметры программы расположены в конфиг файле - /etc/mc.cfg Скачать: pastebin run pc73b8bB С программой поставляются: Файлы mcl для русского и английского языка (по умолчанию в конфиге стоит английский) Три mct темы - "Standart", "Redstone" и "Darkness" (увы, я не дизайнер, поэтому отсутствие вырвиглазности в темах не гарантировано) Краткая справка: Коротко про ассоциации:
  3. 1 балл
    Что думаешь про Canvas? Как я понял ты используешь Swing а в нём если не ошибаюсь был холст для рисования символами.
  4. 1 балл
    Об этом думал, некоторые наработки даже оставил в коде. Благодаря совместимости Scala и Java, интегрирование Ocelot Brain довольно лёгкая задача, но перед её реализацией меня остановила нехватка собственных знаний для создания окна вывода (а-ля интерфейс экрана из OC), так как простой терминал ввода/вывода невозможно использовать для работы с растровой графикой. Создать двумерный массив из 8000 одинаковых компонентов и использовать каждый отдельный как пиксель конечно можно, но делать такое, тем более на Java - это всё равно что отправить оперативную память прямиком в ад, а писать собственный GUI-фреймворк для работы с классом Graphics из AWT ради одного простецкого окошка как-то нелогично. Тем не менее полностью от этой задумки я пока не отказываюсь. Да, это легко сделать, но моя первостепенная задача была создать именно standalone-среду. Так что, если поддержка майна и будет сделана, то не раньше релиза.
  5. 1 балл
    Что это Маленькая библиотека для работа с последовательностями бит Как юзать local bit_array = require("bit_array") --Создаем массив битов разметом 100, заполненный единицами local a = bit_array.create{sizeInBits = 100, fill = 1} --можно еще так и так local a = bit_array.create(100, 1) local a = bit_array.create(100, true) --Создаем массив битов разметом 100, заполненный нулями local a = bit_array.create{sizeInBits = 100, fill = 0} --можно еще так и так local a = bit_array.create{sizeInBits = 100} local a = bit_array.create(100) local a = bit_array.create(100, false) --Устанавливаем первый бит на 1 a:set(1, true) --можно еще так a:set(1, 1) --Устанавливаем первый бит на 0 a:set(1, false) --можно еще так a:set(1, 0) --Получаем значение второго бита local second = a:get(2) --Схватываем ошибку выхода за пределы массива a:set(101, true) a:get(101) --Получаем количество единичных битов local ones = a:countOf(true) --можно еще так a:countOf(1) --Получаем количество нулевых битов local zeros = a:countOf(false) --можно еще так a:countOf(0) --Устанавливаем биты одного массива другому начиная с индекса 3 local b = bit_array.create(10, 1) a:setArray(3, b) --Создаем новый массив, который содержит биты из массива а, с первого по девятый local c = bit_array.createBasedOn{array = a, fromIndex = 1, toIndex = 9} --Преобразовываем в строку local stringRepr = a:toString() --Создаем из строки local b = bit_array.fromString(stringRepr) Исходный код https://github.com/hohserg1/OpenComputersPrograms/blob/master/simple_libs/bit_array.lua Команда для скачивания wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/simple_libs/bit_array.lua /home/lib/bit_array.lua
  6. 1 балл
    Новое обновление: PAT Pre-release v0.0.4 - Добавлен алгоритм предустановки OpenOS в файловую систему машины - Фикс обновления списка компонентов в конфигураторе - Фикс парсинга конфига OCEmu - Добавлена поддержка любых UUID файловой системы помимо той, что стоит по умолчанию (34eb7b28-14d3-4757-b326-dd1609b0a92e) - Ряд фиксов в коде редактора, конфигуратора и вспомогательных классов - Начата работа над автодополнением кода Lua стандарта 5.3 Ссылка: https://github.com/Vladg24YT/Oclide/releases/tag/v0.0.4 Скриншот обновлённого конфигуратора:
  7. 1 балл
    Обновление: Версия 1.2b Исправления: При заполнении строки ввода курсор вылезал за ее пределы (до/после). Добавлена проверка, не пытаемся ли мы копировать/переместить файл в никуда (пустая строка). Исправлен инсталлятор: он падал при запуске с ЧБ монитором/картой (до/после).
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...