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

Лидеры


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

Показан контент с высокой репутацией 14.06.2020 в Сообщения

  1. 3 балла
    Первый пост. Ну все же хоть что то. Хочу показать свою небольшую поделку по теме инфраструктуры. Посмотреть и скачать ее можно тут: pastebin run mn7W46KJ Задача программы проста. Вывод значений энергетических ячеек из thermal expansion и заполненность резервуаров из immersive engineering. Автоматическое включение двигатель если средний объем ячеек стал ниже заданного значение и заряд до 100%. Среднее значение по кол во ячейкам подключенным к адаптеру. Делал все через огромные table с id которые потом становятся объеками (эффективно ли это по памяти?) Задача оказалась не так сложна как я думал и больше я завис на графике... Потыкав несколько готовых либ понял что ничего не понял (как это обычно бывает) и решил нарисовать свою графику. Единственное что не понял как запускать event отдельно и реагировать на него поэтому сделал пока вот так: Надеюсь вы подскажите как это лучше решить. Буду благодарен. Ну и скриншотики
  2. 3 балла
    Первый опыт компиляции и правок OpenComputers Задача: Собрать мод OpenComputers, проверить его работоспособность в игре, внести небольшие правки в мод и также проверить их работоспособность в игре. Мой путь к решению: Первая страница поисковой выдачи по фразе «opencomputers build mod» не показала ничего интересного для меня. Зато фраза «opencomputers build from source» быстро привела меня на страницу https://ocdoc.cil.li/tutorial:debug_1.7.10 Команды инструкции несколько отличаются от тех, что я применял раньше. Поэтому я задал себе два вопроса: Чем отличается вызов gradlew от gradle? Чем отличается setupDecompWorkspace от setupCIWorkspace? На первый вопрос я ответил неправильно. Из найденной информации я понял, что обёртка gradlew используется для того, чтобы не морочить себе голову отдельной установкой Gradle и всё необходимое устанавливать через скрипт. Но у меня же уже установлен Gradle! Поэтому проще использовать именно его. Ещё не понимая, в чём грабли, я в хаотическом порядке побежал по коммитам, дойдя чуть ли не до начала репозитория. Но gradle упорно выдавал ошибку даже при запуске без параметров: $ gradle ... A problem occurred evaluating root project 'OpenComputers'. > Failed to apply plugin [id 'forge'] > Could not create task of type 'ReobfTask'. Поиск по фразе «gradle Could not create task of type ReobfTask» не дал ничего вразумительного кроме того, что может быть неправильной версия не то Gradle, не то Forge, не то Minecraft, не то JDK. Так я ходил по граблям около двух часов, пытаясь что-то изменить в конфигах Gradle и переходя от коммита к коммиту. Почувствовав усталость, я решил, что зашёл в тупик, и чтобы выйти из него, мне следует взять перерыв, и отдохнув, найти новую точку для приложения усилий. Так я и сделал. Отдохнув, я ещё раз почитал об отличии gradlew от gradle, вспомнил, что встреченная мной ошибка может быть вызвана неправильной версией Gradle, и сразу осознал упущенный мной нюанс: gradlew – не просто обёртка, и позволяет не просто обойтись без установки gradle, а без установки требуемой версии gradle. Проверяю предположение: $ gradle -version Gradle 2.10 $ ./gradlew -version Gradle 5.6.4 Так и есть! Вывод: Для ускорения продвижения в изучении в первый раз следует максимально чётко следовать инструкциям. А уже имея эталонный рабочий вариант, можно смело экспериментировать. Зная, в чём именно я совершил отклонение, можно быстрее находить и причину неудачи тоже. Я быстро отработал ту часть инструкции, которая не касалась использования IDE, нашёл файл свежесобранного мода, переместил его в каталог с остальными модами и запустил игру: $ git clone https://github.com/MightyPirates/OpenComputers.git $ cd OpenComputers $ ./gradlew setupDecompWorkspace $ ./gradlew build $ find . -name OpenComputers*.jar ./libs/OpenComputers-LuaJ.jar ./libs/OpenComputers-JNLua.jar ./build/libs/OpenComputers-MC1.7.10-1.7.5+f73dd9e-dev.jar ./build/libs/OpenComputers-MC1.7.10-1.7.5+f73dd9e-javadoc.jar ./build/libs/OpenComputers-MC1.7.10-1.7.5+f73dd9e-api.jar ./build/libs/OpenComputers-MC1.7.10-1.7.5+f73dd9e-sources.jar $ mv build/libs/OpenComputers-MC1.7.10-1.7.5+???????-universal.jar ~/.minecraft/mods/OpenComputers-MC1.7.10-1.7.5+test-universal.jar Работает! Отвечая на второй вопрос и вникая в нюансы Gradle, я узнал, что его задачи зависят друг от друга. И если я верно понял, то для сборки мода достаточно лишь скачать репозиторий и запустить сборку мода. Необходимые для этого этапа подзадачи будут выполнены автоматически. Проверяю: Для чистоты эксперимента удаляю папку с модом и пользовательскую папку Gradle: $ rm -rf OpenComputers $ rm -r ~/.gradle И получаю собранный мод минимумом команд: $ git clone https://github.com/MightyPirates/OpenComputers.git $ cd OpenComputers $ ./gradlew build Остаётся лишь перенести мод в каталог с другими модами: $ mv build/libs/OpenComputers-MC1.7.10-1.7.5+???????-universal.jar ~/.minecraft/mods/OpenComputers-MC1.7.10-1.7.5+test-universal.jar С компиляцией и сборкой я разобрался. Теперь пора что-нибудь изменить в моде. Чтобы не выдумывать задачу, я вспоминаю исходную цель. В OpenComputers мне не нравится механика управления нагрузкой от пользовательских скриптов. Что я об этом знаю? Во время длительных вычислений я могу получить ошибку «too long without yielding». Попробую найти эту строку в исходниках: $ grep -ir 'too long without yielding' src/main/resources/assets/opencomputers/lua/machine.lua:local tooLongWithoutYielding = setmetatable({}, { __tostring = function() return "too long without yielding" end}) Удача! Это файл на Lua, и мне сейчас, возможно, не потребуется вникать в Scala. Открываю этот файл первым подвернувшимся под руку редактором: $ nano src/main/resources/assets/opencomputers/lua/machine.lua Ищу, как используется переменная tooLongWithoutYielding. Ошибка с таким исключением генерируется лишь в одном месте, в функции checkDeadline() по результатам проверки computer.realTime() > deadline. Ищу, где и как используется переменная deadline. Стараясь не вникать в детали кода, я нахожу участок, который с наибольшей вероятностью задаёт время, в течение которого пользовательский скрипт может работать без уступки времени: deadline = computer.realTime() + system.timeout(). Лучших вариантов я не вижу, поэтому правлю эту строку. Проверяю выполненные изменения: $ git diff --- a/src/main/resources/assets/opencomputers/lua/machine.lua +++ b/src/main/resources/assets/opencomputers/lua/machine.lua @@ -1486,7 +1486,7 @@ local function main() ... - deadline = computer.realTime() + system.timeout() + deadline = computer.realTime() + 10 --system.timeout() По уже отработанной схеме компилирую мод, переношу его в папку с модами и запускаю игру. Для проверки внесённых в мод изменений я запускаю тестовый скрипт: # lua lua > clock=os.clock t_=clock() pcall(function() while true do end end) t=clock() print(t-t_) 5.000662049 Вроде бы ничего не изменилось. Но я перезагружаю тестовый компик и снова запускаю скрипт. Получаю результат: 9.999750501 Сработало! Подобного поведения можно добиться и банальной правкой конфига, но моя цель заключалась в достижении того же эффекта правкой исходников мода. Результат: Я смог скомпилировать мод OpenComputers, осознал пользу обёртки gradlew, нашёл минимальный набор команд для компиляции, а также внёс работоспособное изменение в мод. Ближайшие планы: Во время решения этой задачи я снова уклонился от использования IDE. Но сейчас я начал серьёзно колебаться, выбирая между двумя направлениями: приступить к поиску оптимального алгоритма управления нагрузкой, или же всё таки освоить работу с IDE хотя бы на базовом уровне.
  3. 2 балла
    Теперь компы работают В РАЗЫ быстрее!!! Вам лишь нужно смазать процессор девятью граммами... Всем привет! Я так долго не заходил на форум, что забыл вас оповестить о новом законном способе ускорить работу компов в игре о котом я узнал. Так делать не нужно!!! Мой комп страдал, чтобы ваш не горевал. Суть вот в чём. В моде ProjectE есть такой замечательный инструмент как часы времени. Ничего особенного они не делают кроме ускорения цикла дня/ночи. НО!!! Если их поставить на пьедестал и активизировать ПКМ, то они судя по описанию немного ускорять животных поблизости и дадут дополнительные 20 тиков блокам в радиусе 3 блоков рядом. (образует куб 7x7x7 с пьедесталом в центре) И тут мы переходим к самому интересному!!! Часы работают на любых блоках: на растениях, блоках из мода и даже на блоках из самого же ProjectE, которые позволяют собирать и накапливать ECM (местную валюту) {из-за чего кстати я сломал аддон к этому моду и быстро прокачался до максимума ECM - просто посмотрите на скрин и всё поймёте} Очень имбовая вещь, ей можно генерировать много пассивной энергии и тратить её в супер быстрый карьер. А эффекты от часов поблизости складываются!!! Так вот, ради чего мы здесь собрались... судя по логике совместимости модов: робот из OpenComputers должен быть блоком, но для часов времени - он не блок и на него ничего не действует. Зато часы действуют на статичные блоки вроде системного блока, монитора и прочего. Что позволяет использовать компы на очень быстрых скоростях. Правда есть и минус. Внутренние часы компа ничего не подозревают и задержки через os.sleep будут так же ускорены как и ВСЯ работа компа. Зато это открывает возможности делать и запускать реальные игры в майнкрафте. Не заботясь о том, что что-то не успеет прогрузится. Вот такие чудеса творятся в мире ProjectE. И его явно никто добавлять на сервера не будет. Зато попробовать программы позапускать с ним можно и в одиночной игре. Может кто-то что-нибудь с этим придумает.
  4. 1 балл
    GradleWrapper предназначен для того, чтобы сделать воркспейсы более переносимыми. Не факт, что твоя глобальная версия Gradle правильно все сделает по билд-скрипту. С другой стороны враппер позволяет всем разработчикам проекта иметь идентичный воркспейс, если заработало(или не заработало) у одного, то аналогично будет у всех. Т.к. скорее всего такой алгоритм будет зависеть от аспектов игры(типо, тпс, отгрузка чанков), то скорее всего понадобится вносить изменения в код самого мома, смотреть исходники игры. Поэтому будет хорошей идей попробовать работать в идее(), она довольно хорошо заточена под скалу
  5. 1 балл
    Много существует этих способов. Например, для экспериментов в креативе я использую TickrateChanger. Очень помогает ускорить отладку программ, работающих с объектами мира. Но есть нюансы. Для достижения высокого TPS требуется иметь быстрый процессор. Если реальный комп не справляется с нагрузкой, то часть тиков пропускается, причём, в неуправляемом порядке. Недавно разработчики OpenComputers слегка модифицировали алгоритм работы GPU. Это тоже позволяет сильно увеличить FPS на экранах без необходимости поднимать TPS. Можешь посмотреть в экспериментальных сборках OpenComputers.
  6. 1 балл
    Добрый день, надеюсь не забыли обо мне! А я пришёл вам новую программу показать Давайте разбираться... Пример работы: симуляция магнитного поля между двумя полюсами Описание: Программа написана на языке программирования lua и работает на движке love2d Визуализация использует GLSL шейдеры версии 3 Для хранения работ используются отдельные файлы с шейдерами, чтобы не трогать весь код программы Кнопки внизу экрана скрываются до наведения на них мышкой Кнопки хранятся как объект со своими функциями и свойствами внутри. И вкладываются в массив инструментария Пример работы: волны искажений Возможности: Навигация и/или зуммирование на колесо мыши Несколько типов анимации. (на кнопку включается анимация движения волн, остальные типы пишутся в шейдерах) Сохранение кадра Сохранение анимации Настройка "шага волны" и скорости течения времени кнопками (обязательно необходимо для построения кадра) Видеообзор: Готовые gif анимации: Рисунок электромагнитных полей: Волновые искажения: Цветные иллюзии: Иллюзия в том, что кружков (кроме двойного) нет. На этих участках случайно совпадают цвета Прочее: Обычные рисунки: Эксперименты над волнами: История версий: Кто-то тут может сказать: "а где ссылка на программу?" А её и не будет пока не реализую нормальную систему сохранений. Почему тогда я выкладываю недоработку? Потому что мне нужно рассказать о проекте для резюме. Это моя лучшая программа и я её люблю. Оттягивать нет смысла, первая версия разрабатывалась ещё полтора года назад. А значит до релиза четвёртой ждать ещё неизвестно сколько. Так что спасибо за внимание! Если вдруг кому-то тема визуализации так же интересна как и мне - пишите в ЛС. Было бы интересно обсудить.
  7. 1 балл
    Совсем забыл в видео показать. Демонстрация подключения компонентов "на лету":
  8. 1 балл
    Небольшое обновление: Добавлена поддержка локализаций. Пока что не вынесено в отдельный файл - возможно вынесу. Сменить язык можно изменив stuff.language на EN - английский, RU - русский, соответственно. Убраны часы, добавлен показатель расхода оперативной памяти. (Стырено с майнос) Добавлен "компас". Позволяет проще ориентироваться, в какую сторону смотрит дрон. И самая здоровская фича которая была добавлена - автодополнение. Теперь, интерпретатор вообще ничем не отличается от того, что есть в стандартной поставке OpenOS. Огромное спасибо @hohserg. Небольшая гифка:
  9. 1 балл
    Наткнулся на плеер NBS музыки через computronic's. Тема на англоязычном форуме: https://oc.cil.li/topic/1758-noteblock-studio-player-for-computronics-sound-cards/ Что получилось у меня: Получилось довольно забавно, учитывая что дроном можно управлять во время проигрывания музыки, то есть теперь на свинолёте можно лететь не в тишину, а с музычкой =) Порядок действий, как проигрывать музыку: Обновить программу Скачать какой-нибудь .nbs файл Теперь, через net можно сделать так: net <имя-файла>.nbs <имя> nbs файл сохранился как переменная, теперь создаём какой-нибудь файл, например play.lua, редактируем - пишем туда nbsPlay(nbs: string, repeat: boolean). В моём случае - nbsPlay(despacito, true) (Будет постоянный повтор музыки, остановить можно написав error() в интерпретаторе) Пишем net play.lua Слушаем и радуемся! !ВНИМАНИЕ! Требовательно к оперативной памяти. Минимальная конфигурация с т 1.5 плашкой первого уровня, иначе дрон будет кричать о недостаточной памяти. Так же, с 1 платой при требовательных операциях и работающей музыке - возможен вылет дрона.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...