ProgramCrafter
-
Публикации
245 -
Зарегистрирован
-
Посещение
-
Победитель дней
41
Сообщения, опубликованные пользователем ProgramCrafter
-
-
Только что, eu_tomat сказал:А как шесть планок-то впихнуть в компьютер?
Секрет на самом деле простой
: отредактировать настройки майнкрафта или оцелота.
Я утроил размер одной планки памяти и у меня работает всё стабильно.
С меньшим количеством памяти будет гарантированно хуже, потому что я не особо понимаю, куда деть одновременно загруженный файл (в виде строки в памяти), картинку (массив чисел - цветов) и палитру.
Строки 238-245 конфига:
ramSizes: [ 576 768 1152 1536 2304 3072 ]
-
Программа умеет получать картинки по ссылке и отрисовывать их в OpenComputers. Поддерживается примитивный даунскейлинг.
wget -fq https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/images-drawer/draw-random-img.lua
Работа всё ещё в процессе. На данный момент:
1. Проверяю на работу только GIF.
2. Некоторые GIF некорректно парсятся по вине библиотеки.
3. К библиотеке GIF нужен патч, чтобы хоть какие-то гифки показывались.
wget -fq https://gist.githubusercontent.com/ProgramCrafter/d1b279aec9e473794df115d1301dcb27/raw/8166f23ee3daba8ca8ec305589b3d9a258f6674f/gif.lua /usr/lib/gif.lua
4. Даунскейлинг примитивный: если картинку надо уменьшить, то из каждого квадрата 2x2 пикселя выбирается левый верхний.
5. Требования: тир3 GPU и монитор, интернет-карта, 6 планок тир3,5 памяти.
Используемые библиотеки:
Скрытый текстЗато результат неплохой:
-
2
-
-
-
Баг-репорт: программа не вызывает sleep, а найти нужные места для вставки os.sleep(0) не представляется возможным
из-за стиля кода.
-
15 часов назад, hohserg сказал:Может ли существовать программа для обычного компа, которая портит железо(игровое)?
local eeprom = require 'component'.eeprom eeprom.set'' eeprom.setData'' eeprom.setLabel'' eeprom.makeReadonly(eeprom.getChecksum())
-
1
-
-
9 часов назад, 4x4x8 сказал:Это также увеличивает разрешение по X в 2 раза, и 3 раза в Y
А какое разрешение получается в итоге?
9 часов назад, 4x4x8 сказал:формат текстурки виден по ссылке
Правильно понимаю, что там просто построчно запись RGB для каждого пикселя?
Кстати, планируется поддержка OpenComputers или не планируется?
-
34 минуты назад, eu_tomat сказал:А игроку это что даст?
Видимо, то, что ls /home не будет показывать программу, а будет показывать только созданные пользователем файлы.
40 минут назад, rootmaster сказал:прожка будет находиться в папочке usr/bin
Я всё-таки предпочту давать пользователю выбор: пусть куда хочет, туда и ставит.
Если юзеру важно, куда именно прога скачается - пусть пишет
mkdir /usr/bin && cd /usr/bin
, благо программы обычно не очень часто ставятся. Может, этот пользователь захочет вовсе в /bin программу поставить.
-
1
-
-
1 час назад, YADenis сказал:можно ли автоматизировать ввод с помощью робота\адптера ?
Можно, вроде там какой-то специальный блок был для взаимодействия с OpenComputers.
-
В 10.08.2022 в 01:33, skorikoff сказал:Толком синтаксис сетевой карты я не понял, потому что не нашёл добротный гайд. Да и в принципе я чайник полный, что касается всех этих сетевых штучек.
Допустим, есть компьютеры A и B, в каждом по сетевой плате (с адресами AAA и BBB), и они соединены проводами.
Надо выбрать порт для передачи сообщений - число от 1 до 65535.
Затем на сетевой карте приёмника необходимо открыть этот порт (работает до перезагрузки или до закрытия порта):
local modemB = require 'component'.modem modemB.open(<открываемый порт>)
Теперь с компьютера A можно посылать сообщения - либо широковещательные (всем в сети), либо адресные (кому-то конкретному).
local modemA = require 'component'.modem modemA.send('<адрес B>', <выбранный порт>, <данные...>) -- или modemA.broadcast(<порт>, <данные...>)
На компьютере B начнут появляться события modem_message, и их можно посмотреть программой dmesg. Как поймать их кодом:
local evt = require 'event' local _, receiver, sender, port, distance, data = evt.pull 'modem_message' print(sender, '->', data)Дальше к этому можно прикрепить evt.listen, в зависимости от задачи. Можно сделать автозакрытие порта по выходу из программы, хотя этого я ни разу вроде не видел.
Полезные ссылки:
- https://ocdoc.cil.li/component:modem - API сетевой карты;
- https://ocdoc.cil.li/component:signals - сигналы компонентов.
-
2
-
41 минуту назад, VBerezin сказал:Если mineOS сломается от проблем с библиотеками или каких-либо прочих проблем, всегда можно откатить какие-то изменения системы дл актуального состояния с помощью терминала
А есть примеры, чтобы это получилось? У меня есть подозрение, что если MineOS сломается, то сразу уж до синего экрана.
41 минуту назад, VBerezin сказал:Обязательно добавлю [автопереключение на Lua 5.3]!
Вообще, Lua 5.2 тоже полезная вещь. Как минимум, пока в 5.3 не пофиксили баги при передаче таблиц компонентам.
-
20 часов назад, Bumer_32 сказал:зарегенился новый портал а снизу нету 4 блока
Кстати, я на этом сервере видел, что три блока портала уничтожились, а три другие - нет. Но это произошло от выстрела гаста.
20 часов назад, Bumer_32 сказал:при крафте ни чего не крафтилось хотя всё пропадало
У меня иногда не все скрафченные ресурсы показываются, получается чуть меньше предметов в стаке, чем должно быть. Обычно, когда связь не очень хорошая.
Вообще, надо бы проверить, что шлёт сервер, запустив Майнкрафт через логгер-прокси. А то окажется, что баги-то в клиенте.
-
8 минут назад, eu_tomat сказал:А тут символ выбирается исключительно по его коду
Да, пока только по коду. Включить сюда и таблицу символов можно, но это уже к переработке интерфейса.
9 минут назад, eu_tomat сказал:И ещё: можешь как-то обрезать нижнюю неинформативную часть картинки с чёрным фоном?
Сделано. (Кстати, теперь программа стала поддерживать тир2 мониторы.
)
-
1
-
1
-
-
Если кому интересно, как я нашёл уязвимость с TLWY:
В Cynosure есть файл /dev/base/load.lua: https://github.com/Ocawesome101/oc-cynosure/blob/dev/base/load.lua
А там есть набор паттернов, которые говорят, куда вставлять yield.
... local patterns = { --[[ { "if([ %(])(.-)([ %)])then([ \n])", "if%1%2%3then%4__internal_yield() " }, { "elseif([ %(])(.-)([ %)])then([ \n])", "elseif%1%2%3then%4__internal_yield() " }, { "([ \n])else([ \n])", "%1else%2__internal_yield() " },--]] { "([%);\n ])do([ \n%(])", "%1do%2__internal_yield() "}, { "([%);\n ])repeat([ \n%(])", "%1repeat%2__internal_yield() " }, } ...
Как говорится, если у вас есть проблема и вы используете регулярные выражения, то у вас есть две проблемы...
-
1
-
-
Мониторы в OpenComputers поддерживают только текстовый режим, но интерфейс можно сделать круче с помощью символов из Юникода.
До недавних пор символы приходилось выбирать из таблицы (https://computercraft.ru/topic/1962-shrift-v-oc/) и вручную проверять на то, подойдут ли они в интерфейс или иконку. Но сейчас я представляю вам IconPaint - программу, позволяющую интерактивно менять символы внутри иконки и сразу видеть результат!
Как скачать:
wget -fq https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/paint/paint.luaУправление такое:
- стрелки на клавиатуре выбирают редактируемый символ (справа подсвечивается синим),
- backspace, цифры и буквы a-f служат для редактирования шестнадцатеричного кода символа,
- клик левой кнопкой мыши по палитре задаст редактируемому символу такой же цвет текста, клик правой - цвет фона,
- выход по Ctrl-C; проделанная работа сохраняется в файл paint.dat.
Пример paint.dat (осторожно, это валидный код на Lua, и при загрузке IconPaint запускает его, хоть и в ограниченном окружении):
data = { {0x0020, 0x2580, 0x2580, 0x2580, 0x2580, 0x2580, 0x2580, 0x0020}, {0x0020, 0x0020, 0xE18B, 0xE146, 0xE147, 0xE18C, 0x0020, 0x0020}, {0x0020, 0x0020, 0xE18E, 0xE149, 0xE148, 0xE18D, 0x0020, 0x0020}, {0x0020, 0x2584, 0x2584, 0x2584, 0x2584, 0x2584, 0x2584, 0x0020} } overlay = {["2 3"]={16777215,2960685,2,3},["3 3"]={6684927,0,3,3},["4 3"]={16777215,6684927,4,3},["5 3"]={16777215,6684927,5,3},["7 2"]={16777215,2960685,7,2},["7 3"]={0,2960685,7,3},["3 4"]={0,2960685,3,4},["2 4"]={0,2960685,2,4},["5 4"]={0,2960685,5,4},["4 4"]={0,2960685,4,4},["7 4"]={0,2960685,7,4},["6 4"]={0,2960685,6,4},["6 1"]={0,2960685,6,1},["5 1"]={0,2960685,5,1},["4 1"]={0,2960685,4,1},["3 1"]={0,2960685,3,1},["2 1"]={0,2960685,2,1},["5 2"]={16777215,6684927,5,2},["6 2"]={6684927,0,6,2},["3 2"]={6684927,0,3,2},["4 2"]={16777215,6684927,4,2},["2 2"]={16777215,2960685,2,2},["6 3"]={6684927,0,6,3},["7 1"]={0,2960685,7,1}}
Что в планах:
- расширить зону для редактирования иконки (сейчас 8x4 символа),
- добавить вставку символов из буфера обмена.
Скриншот под спойлером:
Скрытый текст
-
4
-
5 минут назад, eu_tomat сказал:Как в этой системе создать новый файл или изменить имеющийся?
root@localhost: /# df fs name total used free f1fff042 OpenOS 2097152 862293 1234859 ... root@localhost: /# mount f1fff042 /mnt root@localhost: /# cd mnt root@localhost: /mnt# edit something.lua
-
1
-
-
root@localhost: /# lua Lua 5.3 Copyright (C) 1994-2020 Lua.org, PUC-Rio > while{}do end too long without yielding stack traceback: [C]: in function 'pcall' machine:809: in global 'xpcall' /bin/lua.lua:122: in upvalue 'ok' mtarfs:/boot/cynosure.lua:2897: in function <mtarfs:/boot/cynosure.lua:2877> ...
-
3
-
-
3 часа назад, eu_tomat сказал:А можно ли с помощью подобного функционала задать метку EEPROM?
# echo "Some Label" >/dev/components/by-type/eeprom/0/label ######################################################### # # весь интерфейс EEPROM # ls /dev/components/by-type/eeprom/0/label address contents dataSize label size type checksum data device makeReadonly slot
-
3
-
-
1 час назад, mololkins сказал:как дальше обратиться к нужней видеокарте
local gpu1 = component.proxy '<адрес первой видеокарты>' local gpu2 = component.proxy '<адрес второй видеокарты>' gpu1.bind('<адрес первого монитора>') gpu2.bind('<адрес второго монитора>') gpu1.set(1, 1, 'Первый монитор') gpu2.set(1, 1, 'Второй монитор')
-
2
-
1
-
-
Вариант для дальнейшего улучшения - автоматизировать наполнение консервов.
8 часов назад, RasonGame сказал:а может и не только баночки?
Любой предмет с названием "Tin Can". Ну, может, ещё имя игрока записывает. Бекдоров пока не видно.
-
1
-
-
7 минут назад, eu_tomat сказал:полное копирование EEPROM вместе с меткой, данными и флагом ReadOnly можно выполнить на верстаке.
Ну, не всегда: можно же передать таблицу между разными серверами майна, а положить на верстак предметы с разных серверов, к сожалению, нельзя.
Кроме того, автоматизация верстака - не очень благодарное дело.
-
20 часов назад, Bumer_32 сказал:a = {W, o, r, l, d}Дело в том, что такой таблицы в Lua не существует. Точнее говоря, создание такой таблицы будет грузить из окружения значения переменных W, o, r, l, d - и, скорее всего, получит для всех nil. Получится таблица {nil, nil, nil, nil, nil}.
Строка же записывается в кавычках: "World", например.
Если нужна таблица из пяти строк, то в её представлении тоже будут кавычки:
a = {"W", "o", "r", "l", "d"} print(a[1]) -- выводит первую строку из таблицы -- будет выведено просто W
print выводит не представление строки, корректное как константа в Lua, а саму эту строку. Например, такой код ведь кавычки не выводит, и не должен.
print("Hi, Bumer_32") -- Hi, Bumer_32
Чтобы получить корректную запись таблицы в Lua-коде, можно использовать сериализацию.
a = {W, o, r, l, d} print(require("serialization").serialize(a)) -- {nil,nil,nil,nil,nil} b = {"W", "o", "r", "l", "d"} print(require("serialization").serialize(b)) -- {"W","o","r","l","d"} c = {'"W"', '"o"', '"r"', '"l"', '"d"'} print(require("serialization").serialize(c)) -- {"\"W\"","\"o\"","\"r\"","\"l\"","\"d\""}
-
2
-
-
Поставляется в комплекте с OpenComputers на дискете IRC.
-
1
-
1
-
-
Сразу подскажу: сборка мусора происходит на каждый десятый вызов computer.pullSignal.
Я вот тоже делал вещь, требующую очень много памяти: рендер пиксельных картинок на очках, вроде бы из OpenGlasses. Создание графического объекта возвращало прокси, а мне целиком этот прокси не был нужен. Так там память кончалась очень быстро, и приходилось десять раз запускать os.sleep(0).
Жаль, что нельзя сразу сказать "мне этот объект не нужен, Lua, пожалуйста, удали его прямо сейчас".
-
1
-
-
В 17.07.2022 в 00:01, HeroBrine1st сказал:про размер клиента разговоры были
Я говорил исключительно в том контексте, что нет смысла каждый раз перекачивать все файлы, включая основной файл майнкрафта 1.7.10.jar.
С модами-то не проблема, особенно если скачивать только изменившиеся (а лаунчер форума, помнится, так и делает).


Многопоточка
в Разные (отсортировать)
Опубликовано:
Можно ждать клика нулевое время. Тогда pull_e вернёт либо nil, либо событие клика.
Вот пример: