ECS
-
Публикации
533 -
Зарегистрирован
-
Посещение
-
Победитель дней
203
Сообщения, опубликованные пользователем ECS
-
-
Добавлена глобальная функция print() и консольная приложуха для простенького I/O в текстовом формате. Заодно добавлена фича фокусировки виджетов в либе GUI, дабы ввод информации производился только в окнах, с которыми юзер "хочет" работать, а не во всех сразу
-
2
-
1
-
-
В 01.07.2021 в 23:15, Bs0Dd сказал:Вообще в делах версионирования я нуб, вот и выходит как-то так(
Он скромничает, хе-хе. В маркете с каждым обновлением публикации происходит автоинкремент версии с шагом 0.01, и вручную мажорку не выставишь. Но вообще это всё он виноват, честно-честно. Вините его
-
1
-
-
-
3 часа назад, BrightYC сказал:(там прогрессбар не до конца отрисовывается...)
-
3
-
-
Спасибо, фиксану
-
1
-
-
19 минут назад, Doob сказал:С зарядниками весело было. Там в разных версиях, в разных модах, генераторы странно работали
Жиза, тоже с ними изрядно намучился. В 1.10 зарядники ик2/меканизма почему-то игнорировали действия робота, не воспринимая его как игрока, а в 1.12 всё само починилось. Магия! Пришлось написать несколько вариантов зарядки: первый через контроллер инвентаря и getStackInSlot с проверкой прочности, а второй просто на хопперах и таймере ожидания, который конфигурируется с приложения на компе
-
7 часов назад, Doob сказал:Алгоритм добычи дубокопа где-то на 50 строк влезет, а что-нибудь более совершенное и в 20 войдет.
Да хоть 5000 строк и Т3 хард в требованиях, всё равно юзабельных аналогов нет, и на данный момент приходится пилить свои велосипеды на базе дубокопа, если нужен кастомный функционал. Лично мне пару лет назад катастрофически не хватало поддержки зарядников инструментов и возможности удаленного управления роботом для возврата на базу, а также сохранения последней позиции раскопок для последующего продолжения работы. Приплюсуй сюда RAM-кеш инвентаря, упаковку ресурсов в стаки, настраиваемый по сети черный список блоков (мало ли булыга на базе кончилась, пусть копается), поддержку апгрейда генераторов и экстренную зарядку на солнечных батареях, анализ прочности и переключение имеющихся инструментов в инвентаре робота, а также "лакшери-опции" по типу вывода карты раскопок на голопроектор/OpenGlasses - и всё, задница. У меня оно не впихивалось в еепром даже с LZ78 и минификацией декомпрессора, поэтому проще было плюнуть и заюзать жесткие диски. В качестве бонуса это позволило декомпозировать кодовую базу на несколько модулей, и сам процесс разработки стал в разы удобнее
Я понимаю, что в чужой монастырь со своим уставом не ходят, однако, имхо, тут появляется выбор между дешевизной компонентов и функционалом софта - и на практике, если у игрока уже есть остальные компоненты для робота, скрафтить хард не составит проблем
-
-
35 минут назад, BrightYC сказал:а они должны были быть? прямо openos'овский пуллсигнал внутрь и пробросил..
Во магия, а! У меня даже инсталлер вылетал при инициализации event-либы из-за постоянных конфликтов с местными "потоками", которые дергают pullSignal почём зря. Хотя это было на старых версиях опеноси, возможно, сейчас что-то фиксанули. Ну и мелочи типа отсутствия глобальных component/computer/unicode, которые опеноська зачем-то скрывает из _G, тоже изрядно напрягали
-
6 часов назад, BrightYC сказал:¯\_(ツ)_/¯
Кек, зашибенски. А как ты решил проблемы вылетов подмененного опеносевского computer.pullSignal в песочнице?
-
1 час назад, Lex сказал:после перепрошивки, опять pastebin run 0nM5b1jU
Нет, т.к. оська уже установлена. Тут полная аналогия с реальными компами: ставишь несколько осей на несколько загрузочных томов, а потом через биос выбираешь приоритетный том для загрузки. А биос можно использовать либо штатный, либо сторонний - в зависимости от предпочтений
-
1
-
-
21 минуту назад, AtomicScience сказал:дело в том, что теперь MineOS является Standalone системой, и из нее такой функционал просто выпилили
Да, так и есть. MineOS можно ставить на чистый диск, и командной строки OpenOS не будет, т.к. отсутствует сама OpenOS. Но никто, в принципе, не мешает поставить сразу 2 ОСи на компьютер, и в биосе MineOS (или альтернативном) через Alt выбирать загрузочный диск
-
5 часов назад, Asior сказал:В шлем вставляются очки. Это введено с самого появления мода
Испанский стыд, так вон оно как реализовано... чувствую себя дикарём, шарахавшемся от каждого звука и спешно заменявшего очки на шлем хд
-
3
-
-
23 минуты назад, Del сказал:Приветствуйте шифрование Base64
Мяу, это не шифрование, а кодирование. Любой человек, перехвативший сообщение, сможет его декодировать и прочесть, т.к. Base64 не подразумевает наличие какого-либо ключа для дешифровки, обеспечивающего секретность данных. Кроме того, размер закодированных сообщений в среднем на 35% больше оригинала, т.к. это избыточный алгоритм
Если тебе требуется именно шифрование, причем такое, чтобы сообщения мог декодировать лишь ограниченный круг лиц, знающих кодовое слово, то потребуется как минимум симметричный алгоритм типа Salsa/RC/AES. А в идеале - с поддержкой "соли" или ассиметричный с парой ключей. Тут уж самописные велосипеды, дата карта или сторонние либы в помощь
-
1
-
1
-
-
3 часа назад, Bs0Dd сказал:программу удалось ужать до размеров EEPROM
Вот это просто офигенно. Ставить оськи с графическими либами для кодовых дверей - нонсенс
-
1 час назад, AtomicScience сказал:Если же хочется именно вгрызться в гранит науки, стоит прочесть книгу - https://git-scm.com/book/ru/v2 . Здесь все тоже с нуля, но с уклоном в теорию, конечно же
А вот это зашибись, да. Даже с картиночками! Прости за резкость, мяу
-
1
-
-
40 минут назад, AtomicScience сказал:Здесь именно новичковая база, начало проходится за вечер, и этого достаточно для уверенной работы в одиночку в одной ветке без всяких продвинутых приколов
Новичковая, ага. Как человек, несколько лет использующий гит по цыганскому принципу "версионной файлопомойки", открыл линк ради общего развития - надо же когда-то начинать! Ни пояснения терминологии (что вообще такое репозиторий, коммит, индексация, ветки, мерж конфликты?), ни реальных примеров, ради которых осуществляется <действие> - тупо конспект для зазубривания вместо практического обучения.
На пункте ниже закрыл статью как "нечитабельную". Что за теги, откуда они взялись? Для чего они? Я вижу, что "для использования в будущем", но почему мне нужно знать о них именно сейчас? Гении, блин, с 10к IQ статью писали. В чем отличие тегов от имён веток? Можно ли назначить несколько тегов одной ветке? Зачем? А ведь мы ещё даже rebase не дошли
-
1
-
-
1 час назад, AlexCatze сказал:Не могу не задать свой любимый вопрос. Что будет, если я попробую отправить пакет больше 8 килобайт? Такой вариант предусмотрен, или мне самому нужно разбивать и собирать большие пакеты?
Это не позволит сделать tunnel.send() на клиенте и сдохнет с ошибкой "packet too big". Разбивать нужно самому, конечно, т.к. взаимодействие с серваком находится на сетевом уровне модели OSI. Пакетная передача, шифрование, туннелирование и т.п. - это всё же чутка иная задача, обычно перекладываемая на библиотеки, и в 99% случаев не возникающая у "программ новичков"
Если всё же требуется гарантированная стойкость своей личной сети, чтобы сервер также учитывал размеры входящих пакетов, то изменить прошивку не составит труда:
local maxPacketSize = 8192 ... -- 8 extra bytes for safety local packetSize = 8 for i = 6, #e do -- Two bytes overhead for each value packetSize = packetSize + tostring(e[6]):len() + 2 end -- Everything is ok, packet size is within the limits if packetSize <= maxPacketSize then -- Linked card with target channel is connected to this computer if tunnelChannels[e[6]] then tunnelChannels[e[6]].send(tunnelAddresses[e[2]].getChannel(), table.unpack(e, 7)) -- Notify other network server to search the target linked card else modem.broadcast(modemPort, "r", e[6], tunnelAddresses[e[2]].getChannel(), table.unpack(e, 7)) end -- Do something when packet size is beyond limits else tunnelAddresses[e[2]].send("packet is too big, server limit is " .. maxPacketSize) end
В результате отправитель получит:
Могу вставить эту фичу в сырцы, не вопрос
-
42 минуты назад, eu_tomat сказал:Архитектура этой сети похожа на упрощение OpenNet. В OpenNet также был слой на проводных платах и слой на связанных. И кроме этого имелся слой на беспроводных платах. В OpenNet, правда, использовались обычные компьютеры, а не серверы, поэтому система была более громоздкой.
Да, принцип схож. Однако эта схема локальна и служит для обмена сообщениями среди ограниченной группы машин, да и работает на любом мусоре - были бы слоты под карты. Как следствие, никто не будет спамить широковещательными пакетами на беспроводные точки, из-за чего связь не отвалится, и проблема "дудосеров с 9 планшетами" около роутера 2 уровня просто не возникнет.
Как бы выразиться поточнее... тут возникает щекотливая ситуация, когда с точки зрения интересности отыгрыша роли на IT-сервере использование OpenNet или ZN реально веселее. Также это помогает изучить нюансы работы реальных сетей на примитивном игровом уровне. А с точки зрения практичности для клана с десятком компьютеризированных электростанций/ферм в различных мирах централизованная и приватная схема надёжнее и быстрее. Имхо, пока не настанет всесерверная утопия, пока не передохнут диссиденты-дудосеры, игроки будут ориентироваться на локальные сети
-
1
-
-
Проблема: мы с друзьями живём в различных измерениях или на огромном расстоянии друг от друга, из-за чего беспроводные модемы использовать невозможно. При этом нам нужна система, позволяющая отправлять приватные сообщения конкретному человеку, зная адрес получателя. Очевидным решением будет использование связанных плат, но что если нужно работать более чем с 1 получателем? Связанные платы, увы, лимитированы. Что если мы играем с GalactiCraft, имеем базу на Земле, и кровь из носу хочется контролировать добычу камня на Луне, реакторы на Марсе и ферму урана на Венере с одного компьютера?
Решение: объединить множество связанных плат в кластер!
Принцип работы системы проще пареной репы: каждый новый клиент, подключаемый к сети, должен предоставить 1 из 2 скрафченных связанных плат. Первую мы вставляем в кластер, а вторую - в компьютер клиента. Чтобы отослать сообщение другому клиенту кластера, нужно знать имя канала его связанной платы. Далее - дело техники: если сервер получает сообщение от связанной платы, то осуществляется поиск платы-получателя в нём же. Если плата-получатель не найдена, то сообщение перенаправляется через широковещательный пакет проводного модема всем серверам кластера, чтобы те в свою очередь попытались найти получателя. Если получатель найден - ему отсылается имя канала отправителя и само сообщение.
Теперь подумаем, как лучше объединить связанные платы. Каждая плата может быть вставлена только в Tier 3 слот компьютера или сервера. Оптимальным решением для экономии пространства будет использование серверных стоек, т.к. каждый Tier 3 сервер имеет целых 2 Tier 3 слота. Поэтому каждый сервер сможет обслуживать максимум 2 клиента сети. В итоге схема расположения стоек и конфигурация серверов должна быть примерно такой:
Процессор не важен, память не важна, и требования если не нулевые, то минимальные. Разумеется, каждый сервер будет работать на микропрограмме EEPROM, ибо крафтить для этого жёсткие диски было бы нецелесообразно. Берем код и прошиваем столько EEPPROM'ов, сколько требуется:
https://gist.github.com/IgorTimofeev/15b75915caa93a344c2be25dac308138
После включения сервер будет доступен для взаимодействия. Как же отправить сообщение получателю? Используем функцию tunnel.send(), и первым аргументом указываем имя канала получателя. Его можно получить через tunnel.getChannel():
local tunnel = require("component").tunnel local receiver = "867a85de-ae4c-4359-b06f-0d30c5dad6f1" tunnel.send(receiver, "Привет")
Это всё замечательно - но где же практический пример? Давайте запустим чат! Да простят меня боги, старые и новые, но я буду использовать MineOS, т.к. общаться через GUI мне банально удобнее. Во всех компьютерах сети создаем новое приложение, открываем файл Main.lua для редактирования:
Берём исходник чата:
https://gist.github.com/IgorTimofeev/724992e8641245a51cef57ac883f541f
Вставляем его содержимое вместо имеющегося в Main.lua и запускаем приложение. Для отсылки сообщения необходимо ввести канал связанной платы получателя, а также отправляемый текст. Вот пример интеллектуальной беседы двух величайших умов современности:
Кроме того, каждый сервер кластера поддерживает протокол для обновления прошивки по сети, а также удаленного отключения и запуска всех серверов. Для этого вам потребуется отдельный компьютер, находящийся в локальной сети с кластером. Для удобства я также накатал мини-приложение:
https://gist.github.com/IgorTimofeev/0fe93bd4549aa32161b9dbbba59425e8
Подытоживая, хотелось бы отметить, что этот софт находится в разделе "программы новичков", он не преследует никаких глобальных целей и не реализует "киллер-фич", ориентируясь больше на прикладное использование. Разумеется, серверную часть можно улучшить по своему вкусу, добавив поддержку широковещательных пакетов, PING-систему и системные события по типу дисконнекта/доступности серверов, а для клинетского чата можно реализовать систему контактов и отсылку медиа-файлов. Было бы время и желание...
Однако в своё время даже такой функционал неплохо сохранил нам нервы во время войн с серверной цензурой, а также экономил время, которое потребовалось для длительных полётов на разбросанные по уголкам вселенной базы. Надеюсь, для кого-нибудь эта схема будет так же полезна, как и для нас c:
-
7
-
-
2 минуты назад, eu_tomat сказал:А в игре надо бегать к компьютеру, теребить планшет, следить, чтобы не отключился... Сплошные неудобства. В чём всё-таки прелесть такого способа общения?
Ты абсолютно прав: профита никакого, кроме "пацаны красауцы эжжи, четкий вещ накодили". У нас стимулом был скорее спортивный интерес по обходу серверных ограничений, и дискорды/скайпы отходили на второй план. Хотя на RP серверах подобный "первобытный" подход скорее приветствуется и считается некой изюминкой. А в глобальной перспективе да, любая текстовая коммуникация через самописные чаты или общеизвестные IRC/ICQ/Jabber морально устарела и в разы менее эффективна
-
2
-
-
1 час назад, eu_tomat сказал:Зачем свою прогу для каждого друга? Можно сделать конфигурационный файл с именами друзей и адресами карт
Плюсую. Также можно пойти чуть дальше и реализовать кластер связанных плат, ретранслирующий сообщения от одного адресата другому (или всем сразу) без ограничения по расстоянию. Нам с товарищами пришлось прибегнуть именно к такому решению, т.к. жили мы в различных измерениях, а администрация крайне не приветствовала выражения искренней любви к их матерям. Вышел этакий квантовый чебурнет
-
1
-
-
1 час назад, eu_tomat сказал:Так вроде бы @Doob давал ссылку на мою тему. Тема немного о другом, а именно о вычислении константы шума, но там я как раз и рассматривал дискретную природу шума геосканера. Знание константы шума и набора возможных плотностей блоков позволяет вычленить из общего сигнала геосканера как шумовую составляющую, так и плотность блока.
Я эту тему, оказывается, даже пролистывал в прошлом году, но не осилил, т.к. в ней также не было ни подписей к графикам, ни подробных пояснений к происходящему. У меня вообще сложилось впечатление, что вы телепатически общались, на ходу генерируя "магические константы" типа 0.0606 и понимали друг друга с полуслова хд
Поэтому, собсна, и спросил про логику расчётов именно тут, в разделе "уроки", а не в "беседке". Есть урок - есть вопрос. Мало ли вы там тупиковых ветвей в исследованиях наплодили, но уж тут-то наверняка должна быть квинтэссенция объективной истины! Мне показалось, что так будет быстрее...-
1
-
-
42 минуты назад, Doob сказал:Кому нужны такие подробные объяснения? Идея лежит на поверхности, ухватившись за нее, можно легко разобраться своим ходом
Ни хрена себе на поверхности, в сумме я полтора часа убил на поиск лишь основной логики. А вопросы по графикам до сих пор терзают душонку... Прости, пожалуйста, что не являюсь представителем блистательной молодёжи, ухватывающей идею на лету, и столь нагло требующей ответов(99
Но за исследование ищо раз спасибо, это было занятно!

Ошибка с print()
в Помогите найти ошибку
Опубликовано:
Ой, всё, короче, добавил ваш вАнючий глобальный принт, сдаюсь