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

ProgramCrafter

Пользователи
  • Публикации

    245
  • Зарегистрирован

  • Посещение

  • Победитель дней

    41

Сообщения, опубликованные пользователем ProgramCrafter


  1. Можно ждать клика нулевое время. Тогда pull_e вернёт либо nil, либо событие клика.

    Вот пример:

      ...
      local tEvent = {pull_e(0, 'touch')} 
      if tEvent[1] then
        for i = 1, #tButtons do 
          if tButtons.visible then 
            if tEvent[3] >= tButtons.X and tEvent[3] <= tButtons.X+tButtons.W and tEvent[4] >= tButtons.Y and tEvent[4] <= tButtons.Y+tButtons.H then 
             blink(i) 
             tButtons.action() 
             break
            end
          end
        end
      end
    ...
    • Нравится 2

  2. Только что, eu_tomat сказал:

    А как шесть планок-то впихнуть в компьютер?

    Секрет на самом деле простой :D: отредактировать настройки майнкрафта или оцелота.

    Я утроил размер одной планки памяти и у меня работает всё стабильно.

     

    С меньшим количеством памяти будет гарантированно хуже, потому что я не особо понимаю, куда деть одновременно загруженный файл (в виде строки в памяти), картинку (массив чисел - цветов) и палитру.

     

    Строки 238-245 конфига:

          ramSizes: [
            576
            768
            1152
            1536
            2304
            3072
          ]

     


  3. Программа умеет получать картинки по ссылке и отрисовывать их в 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 памяти.

     

    Используемые библиотеки:

    Скрытый текст

     

     

    Зато результат неплохой:

    screen-SWMEyvi.png

    • Нравится 2

  4. В 20.05.2020 в 00:34, Xytabich сказал:

    Lua 5.3 использует встроенные битовые операции

    Не везде. Вижу часто 2^count.

     

    Ещё есть баг, что для больших картинок нижняя часть съезжает - некорректно декодируется.

    Послал PR с фиксом. Протестить можно на прикреплённой картинке.

    test3.gif


  5. 15 часов назад, hohserg сказал:

    Может ли существовать программа для обычного компа, которая портит железо(игровое)?

    local eeprom = require 'component'.eeprom
    eeprom.set''
    eeprom.setData''
    eeprom.setLabel''
    eeprom.makeReadonly(eeprom.getChecksum())

     

    • Спасибо 1

  6. 9 часов назад, 4x4x8 сказал:

    Это также увеличивает разрешение по X в 2 раза, и 3 раза в Y

    А какое разрешение получается в итоге?

     

    9 часов назад, 4x4x8 сказал:

    формат текстурки виден по ссылке

    Правильно понимаю, что там просто построчно запись RGB для каждого пикселя?

     

    Кстати, планируется поддержка OpenComputers или не планируется?


  7. 34 минуты назад, eu_tomat сказал:

    А игроку это что даст?

    Видимо, то, что ls /home не будет показывать программу, а будет показывать только созданные пользователем файлы.

     

    40 минут назад, rootmaster сказал:

    прожка будет находиться в папочке usr/bin

    Я всё-таки предпочту давать пользователю выбор: пусть куда хочет, туда и ставит.

    Если юзеру важно, куда именно прога скачается - пусть пишет

    mkdir /usr/bin && cd /usr/bin

    , благо программы обычно не очень часто ставятся. Может, этот пользователь захочет вовсе в /bin программу поставить.

    • Одобряю 1

  8. В 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, в зависимости от задачи. Можно сделать автозакрытие порта по выходу из программы, хотя этого я ни разу вроде не видел.

     

    Полезные ссылки:

    • Нравится 2

  9. 41 минуту назад, VBerezin сказал:

    Если mineOS сломается от проблем с библиотеками или каких-либо прочих проблем, всегда можно откатить какие-то изменения системы дл актуального состояния с помощью терминала

    А есть примеры, чтобы это получилось? У меня есть подозрение, что если MineOS сломается, то сразу уж до синего экрана.

     

    41 минуту назад, VBerezin сказал:

    Обязательно добавлю [автопереключение на Lua 5.3]!

    Вообще, Lua 5.2 тоже полезная вещь. Как минимум, пока в 5.3 не пофиксили баги при передаче таблиц компонентам.


  10. 20 часов назад, Bumer_32 сказал:

    зарегенился новый портал а снизу нету 4 блока

    Кстати, я на этом сервере видел, что три блока портала уничтожились, а три другие - нет. Но это произошло от выстрела гаста.

     

    20 часов назад, Bumer_32 сказал:

    при крафте ни чего не крафтилось хотя всё пропадало

    У меня иногда не все скрафченные ресурсы показываются, получается чуть меньше предметов в стаке, чем должно быть. Обычно, когда связь не очень хорошая.

     

    Вообще, надо бы проверить, что шлёт сервер, запустив Майнкрафт через логгер-прокси. А то окажется, что баги-то в клиенте. :)


  11. 8 минут назад, eu_tomat сказал:

    А тут символ выбирается исключительно по его коду

    Да, пока только по коду. Включить сюда и таблицу символов можно, но это уже к переработке интерфейса.

     

    9 минут назад, eu_tomat сказал:

    И ещё: можешь как-то обрезать нижнюю неинформативную часть картинки с чёрным фоном?

    Сделано. (Кстати, теперь программа стала поддерживать тир2 мониторы. :))

    • Нравится 1
    • Спасибо 1

  12. Если кому интересно, как я нашёл уязвимость с 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

  13. Мониторы в OpenComputers поддерживают только текстовый режим, но интерфейс можно сделать круче с помощью символов из Юникода.

    До недавних пор символы приходилось выбирать из таблицы (https://computercraft.ru/topic/1962-shrift-v-oc/) и вручную проверять на то, подойдут ли они в интерфейс или иконку. Но сейчас я представляю вам IconPaint - программу, позволяющую интерактивно менять символы внутри иконки и сразу видеть результат!

     

    Как скачать:

    wget -fq https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/paint/paint.lua

    Управление такое:

    1. стрелки на клавиатуре выбирают редактируемый символ (справа подсвечивается синим),
    2. backspace, цифры и буквы a-f служат для редактирования шестнадцатеричного кода символа,
    3. клик левой кнопкой мыши по палитре задаст редактируемому символу такой же цвет текста, клик правой - цвет фона,
    4. выход по 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}}

    Что в планах:

    1. расширить зону для редактирования иконки (сейчас 8x4 символа),
    2. добавить вставку символов из буфера обмена.

     

    Скриншот под спойлером:

    Скрытый текст

    paint.png

    • Нравится 4

  14. 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

  15. 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

  16. 1 час назад, mololkins сказал:

    как дальше обратиться к нужней видеокарте

    local gpu1 = component.proxy '<адрес первой видеокарты>'
    local gpu2 = component.proxy '<адрес второй видеокарты>'
    
    gpu1.bind('<адрес первого монитора>')
    gpu2.bind('<адрес второго монитора>')
    
    gpu1.set(1, 1, 'Первый монитор')
    gpu2.set(1, 1, 'Второй монитор')

     

    • Нравится 2
    • Ха-ха 1

  17. Вариант для дальнейшего улучшения - автоматизировать наполнение консервов.

     

    8 часов назад, RasonGame сказал:

    а может и не только баночки?

    Любой предмет с названием "Tin Can". Ну, может, ещё имя игрока записывает. Бекдоров пока не видно.

    • Ха-ха 1

  18. 7 минут назад, eu_tomat сказал:

    полное копирование EEPROM вместе с меткой, данными и флагом ReadOnly можно выполнить на верстаке.

    Ну, не всегда: можно же передать таблицу между разными серверами майна, а положить на верстак предметы с разных серверов, к сожалению, нельзя. :( Кроме того, автоматизация верстака - не очень благодарное дело.


  19. 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

  20. Сразу подскажу: сборка мусора происходит на каждый десятый вызов computer.pullSignal.

    Я вот тоже делал вещь, требующую очень много памяти: рендер пиксельных картинок на очках, вроде бы из OpenGlasses. Создание графического объекта возвращало прокси, а мне целиком этот прокси не был нужен. Так там память кончалась очень быстро, и приходилось десять раз запускать os.sleep(0).

    Жаль, что нельзя сразу сказать "мне этот объект не нужен, Lua, пожалуйста, удали его прямо сейчас".

    • Нравится 1

  21. В 17.07.2022 в 00:01, HeroBrine1st сказал:

    про размер клиента разговоры были

    Я говорил исключительно в том контексте, что нет смысла каждый раз перекачивать все файлы, включая основной файл майнкрафта 1.7.10.jar.

    С модами-то не проблема, особенно если скачивать только изменившиеся (а лаунчер форума, помнится, так и делает).

×
×
  • Создать...