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

Лидеры


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

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

  1. 2 балла
    local RedstoneControllers = {} for address in component.list("redstone") do table.insert(RedstoneControllers, component.proxy(address)) end Но, как верно заметил @eu_tomat, микроконтроллер не может работать с внешними компонентами, разве что если использовать две редстоун карты, хотя это не несёт никакого смысла
  2. 1 балл
    Когдато в далеком прошлом я и krovyaka написали прожки для казиношек. Но мы были слишком жадные что б выкладивать их в паблик и зажали ток себе. Но поже мы все перенесли на игт в паблик репозиторий и случилась бяка (их нашли и посливали друг другу). Теперь я думаю выкласть их здесь. https://github.com/lfreew1ndl/OpenComputers-Casino Валюта находится на отдельном сервере и вам что б запустить их нужно будет переписать durexdb.lua на свое хранилище валюты. (по назвах методов думаю поймете). Есть и деплоер который вам не поможет потому что вам нужно переписать durexdb.lua Какашками не бросайтесь мне просто лень переписивать для общего пользования но хочу выложить что б кто захочет сделал это и если ему не жалко заатачил переписаные файлики здесь или лучше даже кинул пул реквест на мою репу и я прийму его. Скринчики ниже. P.S. Для кого интерфейс вырвиглазный УХАДИ. Блек джек Больше меньше Видео покер Лабиринт Рулетка Терминал (на скрине не видно но игрок стоит на PIM)
  3. 1 балл
    Методика ускоренного вычисления константы шума геосканера Предлагаю ознакомиться с методикой, позволяющий максимально быстро и абсолютно точно вычислить константу шума геосканера (geolyzerNoise в config/OpenComputers.cfg). Методика и скрипты тестировались в среде OpenComputers-MC1.7.10-1.7.5.1290-universal.jar. Сохранит ли эта методика свою актуальность в будущем, вселцело зависит от авторов мода. Зачем знать константу шума геосканера? Не на всех серверах параметр geolyzerNoise сохраняет значение по умолчанию. Алгоритмы же поиска руд, использующие для своей работы геосканер, в большинстве своём эффективны лишь при определённых параметрах шума. При увеличении или уменьшении зашумлённости будут эффективны другие алгоритмы. Поэтому знание точных параметров шума геосканера поможет использовать наиболее эффективные алгоритмы поиска руд на конкретном сервере в конкретных условиях шума. Традиционный алгоритм Традиционный алгоритм использует выполнение многократного сканирования плотности блока, поиск минимального и максимального значений и вычисление разницы между ними. Плюсом алгоритма является его простота. Минусом является низкая точность. Для повышения точности используется увеличение кратности сканирования, но даже очень большая кратность не даёт гарантии абсолютной точности. Всегда есть небольшой шанс, что шум окажется немного больше найденного алгоритмом. Дискретная структура шума Как было обнаружено в недавнем обсуждении про вычисление погрешности геосканера, шум имеет дискретную природу. Согласно коду OpenComputers для каждого из сканируемых расстояний существует 256 возможных значений шума. Знание этого факта позволяет нам считать результат достигнутым, как только сканер выдаст 256 уникальных значений плотности одного и того же блока. Плюсом такого подхода будет абсолютная точность. Главный же минус заключается в том, что получение всех 256 значений может занять даже больше времени, чем получение реальных минимума и максимума плотности. В моих экспериментах на получение всех 256 значений уходит примерно 10-20k попыток сканирования. Вот скрипт для наглядности: -- демонстрация: шум геосканера имеет 256 фиксированных значений -- установка: любой блок, сверху блок геосканера, на него спавним комп /oc_sc local scan = require'component'.geolyzer.scan local uniqTbl = {} local uniqCnt = 0 local v for i=1,1e4 do v = scan(0,0,-1, 1,1,1)[1] if not uniqTbl[v] then uniqTbl[v] = true uniqCnt = uniqCnt + 1 print(("try: %d, uniqCnt: %d"):format( i, uniqCnt )) end os.sleep(0) -- ^C для останова end Наблюдая за скриптом, легко заметить, как медленно добираются последние из оставшихся уникальных значений. Алгоритм абсолютно точен, но неоптимален. Оптимизация поиска Оптимизировать вычисления нам поможет знание о том, что все 256 значений шума расположены равномерно, расстояния между смежными значениями одинаковы, и они ровно в 256 раз меньше расстояния между максимальным и минимальным из значений. В пределах погрешности вычислений, разумеется. Это значит, что для вычисления константы шума достаточно найти любые два смежных значения и вычислить разницу между ними. Но смежными эти значения должны быть в своей полной таблице из 256 значений, в то время как в целях оптимизации рабочая таблица должна быть заполнена как можно меньшим количеством данных, и поэтому соседство значений в рабочей таблице не означает обязательности их соседства в полной. Уменьшать количество значений в рабочей таблице следует ровно до того момента, пока это не мешает обнаружению двух смежных значений. Можно сказать и наоборот: пополнять таблицу новыми значениями следует ровно до тех пор, пока смежные значения не удаётся обнаружить с абсолютной точностью. Самое очевидное, что приходит в голову, это набрать ровно 129 уникальных значений, и найти среди них ближайших соседей. Почему 129, а не 128? Потому что при 128 уникальных значениях возможна редкая ситуация, когда эти найденные значения находятся в полной таблице ровно через одно. Это маловероятно, но возможно. Зачем рисковать? Тем более, 129 элементов почти всегда находятся примерно за 200 попыток сканирований, что можно увидеть, наблюдая за работой демонстрационного скрипта. Но внимательный читатель наверняка заметит, что может быть достаточно использовать и 128 значений при условии, что они размещены неравномерно относительно друг друга. Почти всегда 129-ое значение оказывается необязательным. И если развить эту мысль, то выяснится, что и 127 значений почти всегда будет достаточно при введении дополнительных условий. Тем же путём можно перейти к 126 значениям и т.д. В итоге окажется, что роль играет не равномерность расположения значений относительно друг друга, а расстояние между крайними элементами и между двумя ближайшими. А для этой цели может быть достаточно даже трёх найденных значений. В лучшем случае. Но в худшем могут потребоваться и все 129 значений. Оптимальный алгоритм В общем виде алгоритм сводится к циклическому получению очередного значения от геосканера и поиску разницы между всеми найденными значениями. И если соотношение максимальной разницы к минимальной превысит 128, то результат достигнут: минимальная разница между найденными значениями обязана быть равной разнице между смежными значениями в полной таблице. Результатом умножения минимальной разницы на 128*33 будет искомая нами константа geolyzerNoise из файла конфигурации. Результирующий код может выглядеть, например, так: -- измеритель шума геосканера (константы geolyzerNoise в config/OpenComputers.cfg) -- установка: любой блок, сверху блок геосканера, на него спавним комп /oc_sc local abs = require'math'.abs local scan = require'component'.geolyzer.scan -- округление до сотых долей для сокрытия погрешностей local function round( v ) return (v*1e2+0.5)//1/1e2 end -- множитель для восстановления значения шума до справочного local mul = 128*33 local uniqTbl = {} local uniqCnt = 0 -- текущее значение, разница с другим значением, минимальная и максимальная разница local val, dif, min, max -- флаг обновления экстремумов local fUpd for i=1,99 do os.sleep(0) val = scan(0,0,-1, 1,1,1)[1] fUpd = false -- обрабатывать только новые уникальные значения if not uniqTbl[val] then -- обновить информацию о минимальной и максимальной разнице for v,_ in pairs(uniqTbl) do dif = abs( val-v ) if not min or min>dif then min=dif fUpd=true end if not max or max<dif then max=dif fUpd=true end end -- пополнить таблицу уникальных значений uniqTbl[val] = true uniqCnt = uniqCnt + 1 end -- при обновлении вывести информацию на экран if fUpd then print(("uniq:%2d/%2d | min:%7.3f | max:%7.3f | max/min:%7.3f"):format( uniqCnt,i, round(min*mul), round(max*mul), round(max/min) )) end -- закончить по достижении результата if fUpd and max/min > 128 then break end end -- сообщить результат if fUpd and max/min > 128 then print(("Congratulations! geolyzerNoise = %f"):format( round(min*mul) )) else print("Failure! Tray again please!") end Результат Знание об особенностях генерации шума геосканера, позволило достичь абсолютно точных результатов при очень малом времени сканирования при вычислении константы шума геосканера. В лучшем случае результат можно получить за три сканирования. В типичном случае требуется около 20 сканирований, что требует около одной секунды времени. Самый худший случай не ограничен ничем, но использованное в моём скрипте ограничение в 99 сканирвоаний ни разу не было достигнуто за несколько сотен попыток. И это ещё не всё, что может дать знание о шуме геосканера. Пошумим, брат!
  4. 1 балл
    А хотя бы один красный контроллер уже удалось подключить к микроконтроллеру? Насколько я помню, микроконтроллер не может работать в внешними компонентами.
  5. 1 балл
    Я уже достаточно давно пишу свою файловую систему для блочного диска (того самого, который unmanaged drive), и только недавно я задался вопросом - а занимался ли подобным кто-либо еще? Поиск по форумам не дал результатов
  6. 1 балл
    Предложенная в теме методика вычисления константы шума весьма эффективна. Но она ещё не исчерпала весь потенциал возможных оптимизаций. Позже я подробно расскажу о найденных мною решениях, но сейчас предлагаю всем, кто любит решать задачи самостоятельно, ответить на вопрос: как ещё сильнее сократить кратность сканирования, не жертвуя при этом точностью результата? Я нашёл три решения. Два из решений основаны на общем принципе и очевидны для тех, кто активно пользуется геосканером. Одно даёт лучшую сходимость за счёт усложнения установки. Другое же не столь эффективно, но и установка не усложняется. Зато третье решение эффективно, при это не требует усложнения установки, но эксплуатирует некоторые особенности реализации шума геосканера, которые мы ещё не обсуждали. У кого есть варианты ответов? Upd: Третье из найденных мной решений оказалось ошибочным. Код генератора шума не позволит объединить преимущества первых двух решений.
  7. 1 балл
    Оцелот хорош тем, что его мозги — это реорганизованный код из OpenComputers, поэтому вся логика работы компонентов сохранена и может быть легко обновлена. GPU также работает с теми же характеристиками, что и в моде. Задержки в отображении — это проблема исключительно онлайн-версии, которую Тотора год никак не может доработать. В незаконченной десктоп-версии проблем с GPU не наблюдалось. @Totoro так что давай доделывай оцелота. Нужен новый рендер и воркспайсы.
  8. 1 балл
    Моды(аддоны) На сервере установлены следующие моды. Конфиги и рецепты на 99,5% дефолтные. Исключение: отключены некоторые лагодромные моменты или сингловые предметы, которые не вписываются в серверный геймплей или баланс (изменение времени, погоды, разные вызыватели дождя, автоферма forestry, ядерные бомбы и неcколько др. предметов) Но эти предметы могут продаваться в магазине за голосование. установленные моды: OpenComputers (OMA, PersonalChunkloaderOC, OpenPeripheral, OpenGlasses, OpenPrinter, OpenSecurity, Computronics) IC2-ex (AFSU, GraviSuite, CompactSolars???, IC2NuclearControl, Uncomplication Aroma1997, AdvancedSolarPanel) forestry(binnie-mods all components) PowerConverter BiomesOPlenty AE(ae2stuff, ExtraCells???) ironchest CustomNPCs GanysNether GanysEnd Сurrency Cases customitems dimensional-anchor DragonRadio EnchantingPlus emeraldobsidianmod??? simplefluidtanks FastLeafDecay(server) redlogic EnderIO Thaumcraft (ThaumicTinkerer, TaintedMagic, electro magic tools, Thaumic Energistics, Magic bees) BiblioCraft malisisdoors??? Waila Notes NEI+addons MouseTweaks(client) MapWriter or Xaero's World Map (client)* fastcraft OptiFine??? required libraries Примечание: сетап модов в процессе работы сервера может уточняться и, возможно, меняться по желанию и предложениям пользователей игрового сервера.
  9. 1 балл
    Скорее всего, актуальной является эта ссылка: bytearray.lua
  10. 1 балл
    Вместо вступления: Я не считаю C-подобный синтаксис лучше синтаксиса lua и не буду заставлять вас переписывать все ваши программы на TypeScript! Я просто хочу поделится с вами альтернативой и рассказать про ее преимущества и недостатки. # Что такое TypeScript? TypeScript — язык программирования, представленный Microsoft в 2012 году и позиционируемый как средство разработки веб-приложений. Он создан для расширения JavaScript и он компилируется в JavaScript, но также существует инструмент для преобразования TypeScript кода в Lua. Вам может показаться, что этот транслятор крайне ограничен, но, поверьте мне, его возможности впечатляют. # Почему его стоит попробовать? Я сначала продемонстрирую некоторые возможности TypeScript графически, а потом подробно расскажу про установку и настройку необходимых инструментов. Я покажу вам далеко не все возможности TypeScript, а только самые основные и интересные. Из-за большого размера контент каждого раздела будет скрыт под спойлер. 1. Статический анализ 2. Автодополнение 3. ООП 4. Стандартная библиотека и возможности языка # Как это работает? Конечно же все не так просто. Компилятор просто так не узнает типы методов и полей объектов, с которыми мы будем работать. Для того, чтобы описать наше окружение необходимо написать так называемые файлы декларации или тайпинги. Хочу сразу вас обрадовать - это не ваша задача. Существует репозиторий с такими декларациями, в котором, на данный момент, существуют типы для большинства API и компонентов OpenOS и библиотеки GUI. От вас требуется только установить все необходимые инструменты и правильно их настроить. # Установка Редактор кода Вы можете использовать любой редактор кода с поддержкой TypeScript. Я рекомендую VSCode, который поддерживает его из коробки. NodeJS Он необходим нам для установки необходимых пакетов (он поставляется с пакетным менеджером npm) и для запуска транспилера. Вы можете скачать последнюю стабильную версию с официального сайта. Использование плагина для VSCode (рекомендуется): Создание проекта вручную: Для компиляции используйте команду npm run build. Сгенерированные lua файлы появятся в папке dist. # Особенности работы транспилера В этой секции я подробно раскажу про недостатки этого подхода, возможные проблемы и способы их решения. 1. Параметр self 2. Множественные значения 3. Индексы # Ссылки Официальный сайт и документация TypeScript (англ) Серия русских статей по TypeScript Документация TypeScriptToLua (англ) Тайпинги
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...