Лидеры
Популярный контент
Показан контент с высокой репутацией 10.02.2019 в Сообщения
-
2 баллаИтак, я начал на своём канале YouTube писать видео по майнкрафту. Это сейчас обзоры моих программ, написанных в майнкрафте или вне него. Небольшой мини-гайд в двух частях по основам мода можете просмотреть сейчас. Остальное ищите на канале. В будущем возможно я туда буду записывать гайды по The Powder Toy и его скриптам на lua. Опыта в этой игре у меня много и есть что рассказать.
-
1 баллНу, ссылки я не постов набива ради кидал. Баг найден, пофикшен. bufferChanges=false — опция полезная, и ставить её вне зависимости от багов удобно бывает, но правильнее всё же будет скачать OC 1.7.4, вышедший дня три назад, и юзать его. Там бага этого нет — быть не должно, как минимум.
-
1 баллВидел я на хабре пост четырёхлетней давности о включении лампы(в реальном мире) из майнкрафта. Вот он, если что: https://habr.com/ru/post/271527/ Тут я подумал - "А чем я собственно хуже? Почему нельзя контроллировать температуру реактора/дроноферму/дом датчиками движением?" Переходим к практике. Я имею вот такой дисплей купленный в поднебесной(За всеми ссылками и подробной помощью если заинтересуетесь обращаться в личку) Так же, я обладаю платой NodeMcu Lolin V3(Если грубо - это ардуинка с вай-файкой, но нет, это самостоятельный чип esp8266) В общем это всё, что нам сейчас понадобится(Еще понадобится роутер (и белый айпи, если вы играете на сервере)) Я хочу контролировать температуру своего реактора из IC2(но пристроить можно всё что угодно), поэтому берём его. Как это выглядит в игре: Схема реактора(Хотя ничего особо интересного тут нет): Переходим к реальному миру. Нам нужно открыть порт, в моём случае это 4536, к тому же нам нужен постоянный адрес в интернете. Для этого я использую DDNS. Об этом и остальном можно узнать в гугле. Теперь, всё готово чтобы наконец-то смотреть температуру реактора из реально мира! Есть такой простой код(Сейчас говорим про реальный мир): --Если кому будет интересно, вот полная документация по прошивке NodeMcu: https://nodemcu.readthedocs.io/en/master/ wifi.sta.config({ssid = "Xiaomi_2.4G", pwd = "xBfYHR33Le"}) --Мой SSID и пароль моего wi-fi =D wifi.sta.autoconnect(1) --Автоподключение Wi-Fi wifi.setmode(wifi.STATION) --Сейчас ESP8266 Будет работать в режиме клиента) spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8) --Настройка дисплея oled = u8g2.ssd1309_128x64_noname0(1, 8, 4, 0) oled:setFont(u8g2.font_haxrcorp4089_t_cyrillic) --Выставляем шрифт oled:setContrast(255) --Контрастность дисплея) server = net.createServer(net.TCP, 30) --Создаём сервер с тайм-аутом в 30 секунд по TCP протоколу function receiver(socket, temp) --Функция, которая вызывается при подключении oled:clearBuffer() --Очищаем буфер oled:drawUTF8(1, 7, "Темп. Реактора: " .. temp .. "%") --Пишем oled:sendBuffer() --Уже рисуем socket:close() --Разрываем подключение end server:listen(4536 , function(conn) --Выставляем на прослушку порт 4536 conn:on("receive", receiver) end) wifi_check = tmr.create() --Создаём динамический объект таймера wifi_check:alarm(1000, 1, function() --Эта функция - аналог event.timer в OpenComputers, которая так же вызывает функцию. В данном случае мы каждую секунду проверяем Wi-Fi. if not wifi.sta.getip() then --Если мы не имеем айпи, тогда wifi_connect = false oled:clearBuffer() --Очищаем буфер oled:drawUTF8(1, 7, "Подключение к Wi-Fi...") --Пишем oled:sendBuffer() --Рисуем elseif not wifi_connect then --Если мы только что подключились и не получили температуру реактора, тогда рисуем просто текст без температуры wifi_connect = true oled:clearBuffer() --Очищаем буфер oled:drawUTF8(1, 7, "Темп. Реактора: ожидание...") --Пишем oled:sendBuffer() --Рисуем end end) Код в майнкрафте(Очень простой): local component = require("component") local internet = require("internet") local reactor = component.reactor while true do local connection = internet.open("ip", 4536) connection:write(string.sub(reactor.getHeat(), 1, 2)) connection:close() os.sleep(5) end Теперь посмотрим что получилось! Подключение к Wi-Fi: Ожидание температуры: Итог: В общем то тут довольно всё криво сделано, тут надо много чего доделать, на самом деле. Но в целом, работает же=) Мне кажется, что это очень круто(Жаль что всё это без чанклодеров так себе работает). Такие дела. P. s @cyber01 Я сидел в редакторе долго, появилась ошибка "Произошла ошибка конфигурации или сервера". Пришлось вручную редактировать всё=(
-
1 баллПо этой теме уже существует отлаженный софт, успешно используемый многими игроками. Однако на днях я заметил забавную особенность местных видеокарт, позволяющую выставлять разрешение большее, нежели получаемое через gpu.maxResolution(). К примеру, если maxResolution для видеокарты третьего уровня вернет числа 160 и 50, то никто не мешает установить разрешение, скажем, в 20x158 пикселей. При этом при проверке валидности устанавливаемого разрешения соблюдается два правила: Результирующее разрешение по числу пикселей не должно превышать результат умножения чисел, возвращаемых maxResolution. То есть для T3 GPU не более 160 * 50 = 8000. Каждый параметр разрешения, будь то ширина или высота, не должен численно превышать значение возвращаемой ширины. То есть для T3 GPU не более 160. Не знаю, баг это или фича, однако подобное грех не использовать в своих целях. К примеру, старая версия программы при вертикально-удлиненном расположении мониторов позволяла выставить разрешение лишь в 30х50 (1500 пикселей в итоге), заполняя тем самым "черные полосы". В то же время обновленная софтина, учитывающая описанные выше особенности, выдает 69x114 (7866 пикселей), максимально приближаясь к предельной отметке в 8000: Согласитесь, лишние пиксели на дороге не валяются, и, думаю, кому-то будет интересно узнать про реализацию подобного софта. Прежде всего нам требуется определить точную пропорцию мультиблочного монитора: то, как относится его ширина к высоте. Взглянем на текстуру блока: она явно состоит из мелких "квадратиков" в количестве 16 штук, причем лицевая часть монитора имеет рамку толщиной в 2 "квадратика" с каждой стороны: Эти "квадратики" мы и будем использовать для расчета пропорции, так как они позволяют идеально точно получить размеры отображающей части монитора в игровом мире. А размеры "в квадратиках" можно посчитать по формуле: число_блоков_монитора * 16 - 4 Следовательно, пропорция монитора будет считается следующим образом: local gpu = component.gpu local screen = component.proxy(gpu.getScreen()) local blockCountByWidth, blockCountByHeight = component.screen.getAspectRatio() local proportion = (blockCountByWidth * 16 - 4) / (blockCountByHeight * 16 - 4) Также не забываем, что высота каждого псевдографического пикселя при отображении в 2 раза больше его ширины, поэтому формула пропорции слегка меняется. Заодно произведем некоторые сокращения, чтобы избавиться от лишних математических операций. Все три варианта эквивалентны: local proportion = 2 * (blockCountByWidth * 16 - 4) / (blockCountByHeight * 16 - 4) local proportion = (blockCountByWidth * 16 - 4) / (blockCountByHeight * 8 - 2) local proportion = (blockCountByWidth * 2 - 0.5) / (blockCountByHeight - 0.25) После вычисления пропорции монитора можно приступить к написанию программной логики. Для начала получим максимальное разрешение видеокарты: local maxWidth, maxHeight = gpu.maxResolution() Обладая этими данными, а также взглянув на условия, описанные в начале поста, мы можем составить систему неравенств для получения итогового идеального разрешения: Помним также, что ширину мы вполне можем выразить через высоту и пропорцию монитора: width = proportion * height Подставим этот вариант в систему: Оставим высоту в левой части неравенств: Подставляем имеющиеся переменные в каждое неравенство, рисуем числовую прямую и выбираем высоту, удовлетворяющую условиям неравенства для конкретного случая. Разумеется, в программировании никаких числовых прямых нет, зато есть любимые math.min() и math.max(): local height = math.min( maxWidth / proportion, maxWidth, math.sqrt(maxWidth * maxHeight / proportion) ) -- Выражаем ширину через пропорцию local width = height * proportion Все. Разумеется, полученные значения ширины и высоты нужно округлить в меньшую сторону, дабы не кормить видеокарту дробями. Заодно добавим поддержку масштабирования, чтобы выставлять половинное или, скажем, четвертичное от идеального разрешение. Сократив код, избавившись от лишних переменных, мы получаем следующее: local component = require("component") -- Получаем масштаб в качестве первого аргумента скрипта и корректируем его значение local scale = tonumber(select(1, ...) or 1) if not scale or scale > 1 then scale = 1 elseif scale < 0.1 then scale = 0.1 end local gpu = component.gpu local blockCountByWidth, blockCountByHeight = component.proxy(gpu.getScreen()).getAspectRatio() local maxWidth, maxHeight = gpu.maxResolution() local proportion = (blockCountByWidth * 2 - 0.5) / (blockCountByHeight - 0.25) local height = scale * math.min( maxWidth / proportion, maxWidth, math.sqrt(maxWidth * maxHeight / proportion) ) -- Выставляем полученное разрешение gpu.setResolution(math.floor(height * proportion), math.floor(height)) Надеюсь, это микро-знание кому-то было полезно. Лично я очень доволен, что могу наконец запилить графонистый интерфейс для контроля реакторов на вертикальных мониках без осваивания профессии "глиномес", да и соответствующая либа для автопобора разрешения в оське пригодится.
-
1 баллво первых, чтобы была конкуретность, а во вторых MineOS это не ось, а граф.оболочка. Эта фраза уже бичом нервов стала, а чертовы доморощенные эксперты-казуисты продолжают лезть изо всех дыр. Элементарная ОСь на платформе опенкомпов состоит буквально из нескольких сот строк кода, реализующих методы работы с файловой системой, позволяющих монтировать физические дисковые носители, грузить библиотеки по предустановленным путям, обрабатывать события и имитировать многозадачность. Все остальное - это графическая оболочка, в моем случае состоящая из десятка тысяч строк кода, вылизанных до предела, чтобы уложиться в строгие рамки ресурсов, выделенных под каждую виртуальную машину в кубаче. Интерфейс майноси с базовым прикладным софтом по типу проводника/настроек/пикчредакторов/магазинов/IDE мы писали с большой командой товарищей около четырех с фигом лет, постоянно его совершенствуя. Эксперимента ради я решил отвязать майнось от опеноси, сделав ее полностью независимой. Это заняло несколько часов. Ценой нескольких, мать их, часов, а также нескольких написанных либ суммарным объемом в две сотни строк майнось стала полностью удовлетворять определению "операционная система", загружаясь с очищенного от скверны жесткого диска и собственного EEPROM. Результат лежит на отдельном репозитории, законсервированный до лучших дней: https://github.com/IgorTimofeev/MineOSStandalone А теперь скажи мне, умник, не кажется ли тебе странным, что вся "ось" пишется на коленке за несколько часов, а "граф. оболочка" - пускай и не годами, но в значительно большие сроки? Может быть, термин "ось" переоценен, и основу современной интерфейсной операционной системы составляет все же графическая оболочка c прикладным софтом? Эх, мяу
-
1 баллНебольшое обновление, касающееся поставляемых по дефолту приложений и UX в целом: • Добавлена поддержка автоматического стакинга окон одного и того же приложения в единую иконку Dock, автоматического смещения правее и ниже при открытии нового окна, а также комплексного закрытия всех окон: • Добавлена поддержка выбора расстояния между иконками рабочего стола и файловых менеджеров: • Добавлено приложение Control, написанное по модульной концепции, где каждая вкладка - это подключаемый скрипт-модуль с отдельным функционалом. К примеру, изначально оно имеет интерпретатор Lua с автодополнением, дисковую утилиту для форматирования/переименования/дублирования, менеджер RAM и анализатор событий: • Добавлено приложение Graph для растеризации графиков любых функций с поддержкой диапазона, шага и показа квант-точек: • Добавлено приложение Braille для удобного создания изображений, составленных из символов Брайля: • Переписано приложение HEX, предназначенное для побайтового редактирования файлов:
-
1 баллне то что по вкусу фишечка, а это пожалуй, одна из самых крутых и нужных фишечек=) Уже даже есть смысл даже майнОсь инсталлить, если в домике много компов. п.с. Все идет к тому, что скоро майнОсь будет просто необходима в каждом доме.
-
1 баллДовольно полезное в практическом смысле обновление: дописана поддержка аналога FTP-протокола для беспроводной связи компьютеров с MineOS. Все устройства в радиусе обмена сообщениями автоматически "видят" друг друга, предоставляя возможность выдачи прав доступа: Каждый удаленный компьютер воспринимается как монтированная файловая система, поэтому работать с ним можно абсолютно так же, как и с основным компьютером с небольшой задержкой во времени, вызванной отправкой команд по модему: Все передаваемые по сети данные приватны и неотслеживаемы за исключением стартового сообщения, необходимого для обнаружения компьютеров в сети. Разумеется, пользователь может задавать собственное сетевое имя, включать и отключать сетевой режим, а также выставлять желаемый радиус поиска компьютеров (скажем, для объединения в домашнюю сеть). Надеюсь, эта фишечка придется вам по вкусу.
-
1 баллВо-первых, я никогда не заявлял, что MineOS отличается от OpenOS по back-end составляющей: эквивалентность или наличие различий между ними не противоречат самостоятельности данной ОС, а также возможности называть ее полноценной ОС. Во-вторых, моя система никому и ничего не должна за исключением заявленного выше функционала. В-третьих, она более чем предоставляет эти "особые способы": gpu - двойная буферизация графики screen - библиотека подстройки разрешения экрана для избавления от "черных полос" filesystem - ускоренные методы получения имени/пути/расширения файлов, проверки их на скрытость, получения сортированных файловых списков и кеширования часто используемых данных, чтения и обработки файлов в бинарном режиме eeprom - возможность прошивки и чтения данных "на лету" прямо на рабочем столе internet - система error-reporting'а, интеграция с магазином приложений, библиотека для выполнения запросов с интеллектуальным отслеживанием ошибок HTTP modem - интерфейсная библиотека для осуществления беспроводных соединений методом .send, поддержка передачи файлов по "воздуху" на уровне десктопа Имеется также прикладное ПО, поставляющееся с системой и обеспечивающее интерфейсные способы взаимодействия с соответствующими компонентами: printer3d - программа для печати изображений в виде пиксельных картин и программа для создания и печати 3D-моделей hologram - программа отображения игрового времени в виде голографических часов и программа для ручного рисования данных непосредственно на голопроектор (спасибо, @Totoro) geolyzer - программа для сканирования местности и отслеживания диапазона плотностей руд. Имеется поддержка вывода данных на компоненты hologram и glasses из мода OpenGlasses stargate - программа для интерфейсного контроля звездных врат из мода SGCraft camera - программа для съемки местности посредством камеры из мода Computronix
-
1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
