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

Fingercomp

Гуру
  • Публикации

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

  • Посещение

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

    283

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


  1. На всякий случай, если не хочется ставить программу, то в OpenOS можно воспользоваться командной components:

    components -l | less

    Выводит все методы всех компонентов с документацией. Палка и less в команде, чтобы можно было скроллить.

    • Спасибо 1

  2. В чём смысл этой программы? Никаких SSH в OpenOS не имеется, часовой пояс никем не используется, а «ограничение компьютеров» вообще непонятно на что влиять может. Программа даже не интерактивна, просто забивает один и тот же файл захардкоженными значениями. Причём неоптимальным образом для этой цели! Четыре раза один и тот же файл читать, десериализовывать, модифицировать содержимое, сериализовывать и записывать, когда достаточно одного? Программу можно втрое сократить, не потеряв функциональность и даже улучшив производительность.


  3. В общем случае схема действий, когда надо писать код для платформы, на которой это делать сложно, одинакова: нужно перенести разработку туда, где это делать легко, отладить всё основное, а затем допилить так, чтобы работало и на исходной. В случае с OpenComputers можно использовать эмулятор Ocelot Desktop: сделать в нём аналогичный сетап компьютеров/серверов, а код писать в полнофункциональном редакторе кода вроде VS Code или vim. Можно редактировать напрямую файлы сейва либо делать в отдельной директории, а в эмуляторе потом через ПКМ по жёстким дискам и EEPROM прикрепить их содержимое к этой директории.


  4. В 12.06.2024 в 15:13, PetyaBorisov сказал:

    Тем более 1.12.2 поддерживает 8 версию джавы

    Не надо путать два разных понятия: версию языка и версию JRE.

     

    Да, игра работает на Java 8, но это только язык. У самой JRE ещё есть приписка — вроде 8u42. Здесь 42 — номер обновления. Думаю, очевидно же, что если в JRE баг, то фикс его язык никак не меняет? Проблема ведь не в языке, а в его реализации.

     

    Поэтому, хоть Java всё так же восьмая, реализация её получала множество обновлений различного характера. В частности, почти 8 лет назад один из таких апдейтов, 8u91, добавил в список дефолтных сертификатов те, которые нужны на замену протухавшим старым, и именно их использует GitHub.

     

    В 10.06.2024 в 17:35, PetyaBorisov сказал:

    @ECS Java автоматически скачивается лаунчером а OpenComputers 1.8.3

    Возникает вопрос: какого чёрта качается JRE лишь немногим новее, чем MC 1.7.10, чтобы запускать MC 1.12.2?

     

    Решение этого вопроса — уж точно не область ответственности ни меня, ни @ECS, которого ты нещадно пингуешь. Скачай последний апдейт восьмой JRE (это, на секундочку, 8u411 — более, чем на 320 апдейтов новее, чем у тебя) и заставь лончер юзать её.

     

    P. S. Это форум, а не мессенджер какой-то. Здесь есть кнопка «Изменить». Не надо постить миллиард сообщений по одному предложению в каждом.

    • Нравится 4
    • Одобряю 1

  5. colors для указывания цветов видеокарты не подходит (ну, если не юзать палитру). Там true color нужен, 24-битный:

    gpu.setForeground(0xffffff) -- белый: 0xff красного, 0xff зелёного, 0xff синего
    gpu.setBackground(0x000000) -- чёрный

    А так он пытается поставить цвет 0x00000f (colors.white — это вроде число 15). Градаций синих в цветах T3-видеокарты — 6: 0, 51, 102, 153, 204, 255. OpenComputers ищет ближайший цвет к 0x00000f из имеющихся и получает чистый чёрный (15 ближе к 0, чем к 51). И итого рисуется чёрным по чёрному.

    • Нравится 1

  6. Надо не компонент клавиатуры подключать, а библиотеку:

    local keyboard = require("keyboard")

    Эта такая извечная проблема: имя одно и то же, а вещи совершенно разные. Аристотель был бы недоволен. Нам, простым смертным, остаётся только смириться...

    • Нравится 2

  7. 11 час назад, BenniShifer919 сказал:

    У него нету сильных недостатков перед OC

    Я так понимаю, отсутствие персистентности компьютеров из CC сильным недостатком не является? Неограниченное потребление вычислительных ресурсов, из-за чего мод нельзя ставить на публичный сервер, — тоже? Так, первое, что на ум пришло.

     

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

    в CC это есть по стандарту всё

    Да разве? Загляните на oc.cil.li и посмотрите на список встроенных в мод компонентов.

     

    P. S. Автор, а вы вообще программировать пытались под какой-то из этих модов? Кажется, словно только готовые программы запускали.

    • Одобряю 1

  8. Пинговать людей, когда их прямо ничего не касается, есть очень дурной тон. Прошу так больше никогда не делать.

    В качестве исключения отвечу так: дискета бесполезна, давно устарела, еле работает, не имеет документации, и кто-то из разрабов мода вообще собирался всех их выкинуть за ненадобностью. Если это не останавливает, разбираться прошу самостоятельно.

    • Одобряю 2

  9. computer.pullSignal ждёт первого сигнала определённое время. То, что ей передана пятёрка, означает, что ждать будет не дольше 5 секунд, но если какое-то событие придёт раньше (что здесь и происходит: возможно, подключение компонентов), то выйдет раньше.

     

    UPD. @ECS уже говорил про это в предыдущих сообщениях. Просьба внимательнее читать ответы.

    В 21.05.2023 в 02:24, ECS сказал:

    Эта штука ждёт каких-либо сигналов в течение 3 секунд. Если сигнал получен - pullSignal вернёт информацию о нём досрочно. Если сигналов не было - pullSignal будет честно ждать 3 секунды, а затем вернет nil

     

    А os.sleep так не заработает: синтаксис

    function tbl.func()
      ...
    end

    создаёт новую функцию и кладёт её в поле "func" таблицы tbl. В данном случае функция кладётся в поле "sleep" таблицы os. Но такой таблицы в биосах нет.

     

    Либо нужно определить табличку эту:

    local os = {}
    
    function os.sleep(timeout)
      --[[ сюда код функции ]]--
    end

    Либо вообще не пытаться класть функции в таблицы (что наиболее разумно):

    local function sleep(timeout)
      checkArg(1, timeout, "number", "nil")
      local deadline = computer.uptime() + (timeout or 0)
      repeat
        computer.pullSignal(deadline - computer.uptime())
      until computer.uptime() >= deadline
    end

    Здесь ещё пропал event.pull, потому что event в биосах тоже отсутствует. (Да и в OpenOS event сначала нужно получить через require.) computer.pullSignal для наших целей достаточен.

    • Нравится 3

  10. 2 часа назад, Oleshe сказал:

    извините я не мастер в этом чуде .-.
    "поставить либы" - как? куда? консольную команду прописать?
    скомпилировать - программу? как?
    запустить на видосике - всм на нём? загрузить его туда? нипон
    пустить какую-то из прог в репе на него - что такое репе? куда пустить?
     

    проще будет сказать что программирование у меня это хобби, но я стараюсь

    Я примерно так и предполагал. Софт выложен без доков, и я его не собирал (когда появился ice2, у меня процессор не умел в SSSE3). Инструкций по сборке тоже нет. Поэтому, если не быть знакомым с языком C и его... традиционными системами сборки, будет очень сложно. Если очень хочется, лучше просить помощи в ирке или дискорде, чтобы реал-таймовое взаимодействие было. Там есть люди (и не только я), которые в C достаточно разбираются для такого.

     

    Лично рекомендую надешикодек (третья ссылка): если собирать на линуксе, всё довольно прямолинейно (описываю исключительно свой опыт).

    • Ха-ха 1

  11. 1 час назад, Oleshe сказал:

    2-е, там файлы, как запустить "конвертер"? надо ли что-либо в OC или выдаст просто файл? библиотека в ОС или в системе?

    Поставить либы, скомпилировать, запустить на видосике, получить закодированный файл, влить его в опенкомпы, пустить какую-то из прог в репе на него, получить видео.

     

    FFmpeg, разумеется, не в опенкомпах. Его там вообще нету. Это ж самый известный набор софта для работы с видео/аудио, какие тут могут быть опенкомпы.


  12. Можно, и вариантов целых три.

    • https://github.com/ChenThread/ice
      160×50, может проигрывать звук через кассеты Computronics.
      Енкодер написан на C, требует наличия либ ffmpeg с хедерами.
    • https://github.com/ChenThread/ice2
      160×50, должно быть лучше качество, может проигрывать звук через кассеты Computronics.
      Енкодер написан на C с примененем векторных расширений SSSE3, требует наличия либ ffmpeg с хедерами.
    • https://github.com/asiekierka/opencomputers-hires-video-prototype
      До 320×200, брайль, без звука.
      По словам автора, несмотря на более низкое разрешение, кодек ice2 гораздо качественнее.
      Енкодер написан на Java, для сборки требует байндингов к ffmpeg.
    • Нравится 2

  13. 17 часов назад, ECS сказал:

    В этом и заключается вопрос топикстартера: в чем смысл такой защиты, фича ради фичи? Если у дурака имеется доступ к eeprom, то не всё ли равно, вызывать eeprom.makeReadonly() или eeprom.makeReadonly(eeprom.getChecksum())?

    Ну, в проге lua есть автоподстановка, поэтому случайно натабать makeReadonly() и тыкнуть энтер, не одумавшись вовремя, очень реально (похоже, но не с этим методом, косячил сам). А внутрь подставить вызов другого метода неосознанно несколько сложно. Поэтому некоторый смысл оно имеет.

    • Одобряю 1

  14. 18 часов назад, Anon сказал:

    Надеюсь, проект ещё жив, но на свежую OpenOS ставиться отказывается

    [...]

    Бага machine.lua. Пофикшено в 1.7.6.

     

    2 часа назад, Anon сказал:

    image.thumb.png.f2bfa1639d7fde7c20b8b33fe1d6b08c.png

    Ругается на церт от Let's Encrypt. Проблема древних Java. Можно было бы и поновее юзать версию. Если проблема не в этом, то надо смотреть в хранилище корневых цертов и решать проблему там.

     

    P. S. В общем и целом hpm и hel мы не обновляем, даже если там найдутся баги. Проект заброшен и доживает свои дни.

    • Грусть 4

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

    Игооорь

     

    после обновы OC система сломалась!

    конкретно проблемы с символами  браиля (или с double buffering)

     

    у меня лично сломались кнопки и на иконках в местах с символами браиля тоже проблемы

    Думаешь, он магическим своим влиянием шрифт тебе в OC заменил внезапно?


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

    Я пытаюсь писать на всех языках в одном стиле.

    Это уже несколько оффтоп, конечно, но я считаю это дурным начинанием: на каждом языке есть свои устоявшиеся стилевые конвенции. В Java везде писатьКакВерблюд, в C# методы, как в жаве, но с заглавной буквы, чтобы выпендриться, а на си и питоне snake_case. Для удобства других программистов их следует соблюдать. Ты уже читал код jpg-либы: ощущаемый диссонанс или даже дисфория — прямое следствие написания не как надо.

     

    Особенно это я нахожу важным при написании библиотек (не наш случай, то есть): когда код пестрит то_такими, тоТакими, ТоСякими, товообщевоттакими вызовами и переменными (был проект на плюсах такой, со всеми вариантами, кроме разве тотального капса...), и читать неприятно, и писать тоже затруднительно, потому что нужно постоянно вспоминать и чинить регистр каждой конкретной библиотеки.

     

    1 час назад, ProgramCrafter сказал:

    Вроде read отдаёт максимум данных, сколько может (+ в заданном размере буфера)?

    Ну там буфер-то крохотный, порядка кибибайта всего. Причём сначала он исчерпает буфер кибибатным возвратом, следующий вызов отдаст пустую строку и только повторный read следующий кибибайт отдаст. Как минимум при пустой строке спать несколько лениво.

     

    1 час назад, ProgramCrafter сказал:

    Для этого надо пиксель дробить на R,G,B составляющие. Поэтому пока затруднительно.

    local r, g, b = (color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff

    Вроде не очень сложно.

     

    Если в буферах хранить уже уменьшенные версии картинок (а полноразмерные всё равно не нужны, так что их даже не собирать и на лету ресайзить надо), то конечный буфер можно будет уменьшить до 16 килобайт (160×100). Чтобы не конкатить строки при сборке буфера, можно хранить таблицу из 2000 чисел, где каждое число хранит 8 пикселей по 8 бит: скорость доступа на изменение будет выше, чтение тоже не особо замедлится, и памяти буфер будет стабильно потреблять 32808 байт (которые OC зачтёт как 18227) всё время работы. (Без упаковки будет 256808 байт — для OC 142671. Если использовать вложенные таблицы, результат можно улучшить.)


  17. 10 часов назад, VincentVelasco сказал:

    Спасибо за разбор, буду исправлять. 
    Но насчёт последних трёх, я не понял. 
    Так как они все обновлены до актуальной версии.
    @ProgramCrafter 

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

     

    Проблема номер 5: UTitleAuth

    Если посмотреть на стэктрейс, то можно заметить упоминания PluginClassLoader, JarFile и ZipFile. И сделать разумный вывод, что жарник плагина какой-то порченый.

    Разумные действия: попробовать открыть файл в zip-архиваторе; перекачать плагин; сверить чексуммы; пересобрать из исходников.

     

    Проблема номер 6: SCore

    Здесь он пишет, что не может найти класс MysqlDataSource. Он был при компиляции (иначе б плагин не собрался), значит, этот класс поставляется как-то отдельно от плагина. Если ещё знать, что значит JDBC, то становится ясно, что в classpath отсутствует JDBC-драйвер для MySQL.

    Разумные действия: скачать этот драйвер (нужно брать версию 5.x, потому что 8.x — это некий connector/j с другими классами, а используется не он) и доставить в libs; поменять СУБД; пересобрать плагин.

     

    Проблема номер 7: ExecutableItems

    Он, кажется, хочет класс из плагина SCore, который мы выше не смогли загрузить.

    Разумные действия: решить проблему номер 6.

    • Нравится 3

  18. 13 часа назад, ProgramCrafter сказал:

    Даунскейлинг примитивный: если картинку надо уменьшить, то из каждого квадрата 2x2 пикселя выбирается левый верхний.

    Было ли билинейную интерполяцию сделать затруднительным? Значение каждого входного пикселя делить на четыре, прибавлять к выходному значению и после декодирования округлить. Элементарный алгоритм, причём в данном случае можно ещё существенно упростить: просуммировать значения каналов пикселей в блоке 2×2, поделить на 4 и округлить. А лучше обобщить алгоритм для уменьшения пикчи с произвольным масштабом.

     

    Алсо:

    • в коде смешан snake_case и camelCase (причём в луа обычно юзают второе, не вижу смысла отходить от этого)
    • busy-loop в ожидании finishConnect: читать пункт 3 и не насиловать процессор
    • неудовлетворительная обработка ошибок (см. выше): на той же строке 75 следует хотя бы в assert обернуть stream.read
    • 127 строка пугает: можно было определить нужную степень двойки и затем иметь готовый и быстрый результат `((x - 1) << scale) + 1`
    • каждый хендлер рисует пикчу, как вздумается: с точки зрения чистоты лучше бы все либы заставить каждый распаршенный блок пикселей отдавать в коллбэк, который бы был единым для всех форматов, выполнял интерполяцию и отдавал на буфер
    • (костыли с жпг непередаваемы)
    • спать один тик на каждый read звучит не очень здорово
    • насколько я могу судить, никакая из либ не требует бэктрекинга, поэтому кэширование выглядит излишне

    Дальше мне смотреть было лень.


  19. В 25.07.2022 в 19:08, ProgramCrafter сказал:

    Поставляется в комплекте с OpenComputers на дискете IRC.

    https://github.com/MightyPirates/OpenComputers/blob/master-MC1.7.10/src/main/resources/assets/opencomputers/loot/irc/usr/bin/irc.lua

    $ diff -U 0 irc.lua irc.1.lua
    --- irc.lua     1970-01-01 00:00:00.000000000 +0000
    +++ irc.1.lua   1970-01-01 00:00:00.000000000 +0000
    @@ -1,3 +0,0 @@
    --- A (very (very!)) simple IRC client. Reference:
    --- http://tools.ietf.org/html/rfc2812
    -
    @@ -25 +22 @@
    -local host = args[2] or "irc.esper.net:6667"
    +local host = args[2] or "irc.Esper.net:6667"
    @@ -374 +371 @@
    -  print("Welcome to OpenIRC!")
    +  print("Welcome to UnionICE")
    @@ -455 +452 @@
    -        local channel = text.trim(line:sub(7))
    +        local channel = "#cc.ru"
    @@ -461 +458 @@
    -          line = "JOIN " .. channel
    +          line = "JOIN " .. "#cc.ru"
    

    Ловко.

    • Нравится 1
    • Одобряю 1
    • Ха-ха 1

  20. Здесь заявляется, что пароли хэшируются. Хотя это определённо прогресс по сравнению с плейнтекстом, мне кажется, готовую хэш-функцию в силу религиозных убеждений ты юзать побоялся и сделал свою. Можешь ли тогда выложить не избитую минификатором используемую тобой функцию хэширования? Кроме того, солишь ли ты пароль перед хэшированием?
×
×
  • Создать...