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

Fingercomp

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

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

  • Посещение

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

    283

Записи блога, опубликованные пользователем Fingercomp

  1. Fingercomp
    Началось всё с пустого файла.
    Набросав костылей, ловисипедов и более-менее нормального кода... Рад представить вам свой ламповый репозиторий на ГитХабике с набором программок, написанных на Python. На текущий момент все они в какой-то мере взаимодействуют с Minecraft.
    По-порядку.
     

    Чат-клиент
    Так как блог так или иначе обязан подчиняться правилам, я упоминаю только один чат-клиент под именем "cc-chat". Кое-как подёргав API форума, смог сделать небольшую программу, которая сейчас умеет работать с чатом (отправлять и получать сообщения из/в чат (-а) нашего форума).

    Интерфейс простой. Внизу строка ввода, справа немного кнопок, лист онлайна и сам чат. К слову, клик по нику с контролом — вставить в строку его, а клик с альтом — открыть профиль в браузере.
    Но это так, плюшки.
    Если тыкнуть по большой кнопке [ⓘ], окно с тонной всякой информации.


    Здесь и ТОПы, и места в них, и баланс, и голоса. Особая благодарность @cyber01 за API.
     
    Установка
    Для начала установите Python 3, BeautifulSoup, PyGObject. Скачайте программу с Гитхаба и запустите её. Создастся файл конфигурации, путь к нему будет указан в диалоге.
    Теперь перейдите на страницу чата, откройте DevTools.
    Открыв вкладку "Network", нажмите на кнопку [Обновить] в чате. Появится запрос в списке. Откройте URL запроса в отдельной вкладке и скопируйте всё, что находится между secure_key= и &type. Это есть секретный ключ, который, естественно, никому не нужно давать.
    Откройте файл конфигурации в редакторе и в первую строку вставьте этот ключ.
    Затем в браузере найдите Cookies для сайта, скопируйте их и вставьте во вторую строку браузера.
    Всё это требуется из-за костыльного АПИ форума =\
    Если всё хорошо, при попытке запустить программу, она не завершится с ошибкой.
    К слову, в трее появится значок программы, левый клик по которой скрывает или показывает окно.
     
     
     

    Мониторилка
    Пропустив ту самую программу, идём к mc-monitor. Это небольшое приложение, которое полностью умещается в трее. Позволяет мониторить сервера Minecraft без захода на всякие сайты. Кроме того, имеется таймер, который "звенит" каждые 24 часа. Полезно, чтобы не забыть про голосование.
     
     
    Установка
    Установите, если ещё не сделали, Python 3, PyGObject.
    Просто запустите программу. Скопируйте путь к файлу кнфигурации и откройте его в редакторе.
    Там можно указать список серверов в следующем формате:
    адрес.сервера:порт=Имя сервера
    По строке на каждый сервер.
     
     
     

    Баги, глюки, пуллы, вопросы и сырцы
    Ищите на GitHub: https://github.com/Fingercomp/python-utils/
  2. Fingercomp
    Да, дамы и господа, он тут! Тот самый автокрафт, который был на старом ИТ с АЕ, обновляется до новой версии, в которой полностью отказываемся от АЕ и переходим на сундуки.
    Для работы нужна "стенка" из сундуков, двойные использовать нельзя. Или ставить вплотную сундуки из IronChest, или же попеременно сундук обычный / сундук-ловушка. В левой позиции ставим робота-крафтера мордой в сторону других сундуков, под него ещё один сундук. Теперь считаем размеры массива: по ширине сколько (X) и по высоте (Y).
     
    Затем ставим комп/сервер/планшет с нет-картой беспроводной, пишем mkdir /usr/bin, mkdir /usr/share, затем wget https://gist.github.com/Fingercomp/64d811a08af2e7848c9d/raw/8bacd47b12d2f202fb2d8bb48ff4010534e29b96/pc-craft.lua /usr/bin/craft.lua, wget https://gist.github.com/Fingercomp/64d811a08af2e7848c9d/raw/8bacd47b12d2f202fb2d8bb48ff4010534e29b96/pc-recipes.lua /usr/bin/recipes.lua.
     
    Запускаем команду recipes, пишем 4 и 0. Всё. Компьютер готов.
     
    Включаем робота, пишем wget https://gist.github.com/Fingercomp/64d811a08af2e7848c9d/raw/8bacd47b12d2f202fb2d8bb48ff4010534e29b96/robot-autorun.lua /autorun.lua, wget https://gist.github.com/Fingercomp/64d811a08af2e7848c9d/raw/8bacd47b12d2f202fb2d8bb48ff4010534e29b96/robot-scan.lua /scan.lua.
     
    А ещё чуть выше мы считали размер массива сундуков. Пишем edit /usr/bin/craft.lua на компьютере, в начале самом файла находим local CHESTX, CHESTY = 1, 2 и меняем числа на свои. Если ширина = 4, а высота = 3, то будет 4, 3. И т. д.
     
    В принципе, автокрафт теперь готов к работе. Но чтобы скрафтить хоть что-либо, потребуется заполнить базу данных с помощью программы recipes. Я чуть ниже подробнее расскажу о том, как это делается, а пока можете просто прописать команду wget https://gist.github.com/Fingercomp/64d811a08af2e7848c9d/raw/8bacd47b12d2f202fb2d8bb48ff4010534e29b96/pc-db /usr/share/db, чтобы скачать готовую БД, которую составлял я сам. =)
     
    Давайте просканируем рецепт! Открываем прогу recipes:


    Жмём 7 и [Enter]:


    Идём к роботу и выкладываем рецепт так:


    Пишем в роботе scan:


    Всё, забираем предметы у робота и возворащаемся к компу. Там должна быть такая картинка:


    Вводим имя рецепта, количество предметов на выходе крафта. Жмём [Enter].


    Тыкаем по [y], энтерим... И всё! Рецепт сохранён в памяти... Программы. Это означает, что если сейчас выйти, рецепт будет утерян. Так что не забывайте писать 4 перед выходом!
     
    Остальные функции прог craft и recipes интуитивно понятны. Если нет — смотрите предыдущую запись про автокрафт, интерефейс тот же... =)
    Кроме одного. База данных предметов получается при первом запуске программы в сеансе, затем она кэшируется в _G. Это позволяет не ждать опять фигалион лет, если вы ошиблись номером рецепта или у вас не было какого-то ресурса. Но если что-то изменили в сундуках — всё, БДП не будет соответствовать действительности. В таком случае запустите программу так: craft update.
    Сундук под роботом (выход) проверяется каждый раз при старте проги. Если не хотите делать проверку (всего 5 секунд), запустите с аргументом noupd[/i]: [il]craft noupd.
     
    К слову, код там старый, гнилой и высохший. Самому не нравится. Но что поделать — переписывать лень.
     


    БАГИ В ПРОГРАММЕ CRAFT И ИХ РЕШЕНИЕ Программа некорректно просчитывает выходное количество, если запрашивается родитель в одном рецепте несколько раз, при этом выходных предметов нет в сундуках. То есть? А вот. Есть процессор, в нём 4 изумруда требуется. Допустим, изумрудов просто нет, но есть блоки. И во время построения рецепта изумруды буду запрошены 4 раза, каждый раз будет найдена нехватка, так что в итоге в плане окажутся 4 блока изумрудов. Проблема решается достаточно просто: вызовите тот крафт, родитель которого запрошен слишком большое количество раз. То есть, в нашем случае достаточно просто заказать крафт изумрудов.
    [*]Не баг, но всё же. Программа во время крафта выдаёт ошибку "в функции экспорта" и сбрасывает крафт.
    Случается из-за того, что БДП устарела, и когда робот пытается взять предмет в слоте из БДП, а там его не оказывается или там находится вообще другой предмет, вызывается ошибка. Решение банальное: перезапустите крафт, вызвав программу так: craft update.
    [*]Тоже ошибка в функции экспорта, но на 188 (или 118 ) строке и со стактрейсом.
    Это действительно баг, причину возникновения которого мне выяснить не удаётся. Однако, есть решение. Перезапустите программу, можно даже без update, и проблема решится.
    [*]И ещё один совсем не баг. Программа запускается и зависает на старте, даже не показав GUI.
    Всё просто: она ждёт ответа от робота, который недоступен Проверьте, работает ли робот вообще, запущена ли на нём программа и находится ли он в зоне дальности модема компьютера (а компьютер — в зоне радиуса модема робота). Прервите программу комбинацией [Ctrl] + [Alt] + [C] и запустите снова после устранения ошибки.



    Очень удобно становится, если вместо обычного сундука под роботом поставить якорный, программы с компа перенести на сервер и таскать с собою эндерсумку и удалённый терминал от сервера. Тогда вы можете заказывать предметы на расстоянии до 400 блоков от серверной стойки, и выход окажется в эндерсумке
  3. Fingercomp
    ДВАДЦАТЬ! Новая версия, 1.5.20, готова к скачиванию. Рассмотрим изменения:
    Добавлено: Функция compareStackToDatabase для контроллера инвентаря и транспозера. Конвертер для обработки информации о зачарованиях. Французский перевод в мануалах. От Pyeroh. Перевод на немецкий язык в мануалах. Подготовлен Shadow1Raven. Можно отключить излучение света для голографических проекторов.
    [*]Изменено:
    Обновлено API для Forestry.
    [*]Исправлено:
    Скорость ломания кабелей с мультиблоками FMP. Нанотапки дают эффект замедления, если они разряжены. Несовместимость с Чизелем, которая позволяла делать из обычных сундуков эндер-сундуки. O_o Отсутвие проверки NBT-данных при объединении предметов, полученных от агентов, при ломании блока. Наниты не работли в других измерениях. Вероятный краш при использовании команд OpenComputers. Продолжение эпопеи о зарядниках: вероятный краш при нескольких таковых. Переполнение, когда кто-то особо тупой устанавливает фигалионные размеры дисков. Завышенная задержка в релеях.



  4. Fingercomp
    Lamp-o-mat! Это небольшая программулька, которая снова из категории "украшения" (предыдщую программу, часики, смотреть тут). В общем, это гирлянда такая. Для лампочек цветных из Computronics.
    Проста прога как дуб, но выглядит прикольно. В частности, это первая прога с принципом ООП.
    Писалась ночями двумя по заказу @Alex, итог меня радует.
     
    Скачивание в репозитории.
    Паста.
    Гист.
     
    Скриншот:

     
     
    Конфигурация:

     
  5. Fingercomp
    Здрассьте. Давно уже назревал план сменить к чертям оформление форума, ибо текущее положение дел вызывает тошноту. Да и ночью глаза болят потом.
    И вот, наконец, недавно я загорелся энтузиазмом, и было принято неотвратимое решение напилировать свою тему для форума. Так как станадртные средства форума по изменению мне неизвестны, а курить доки по этому было катастрофически лень, всё сделано в виде стиля к Stylish.
     
    Что меняется?
    Цвет всех элементов, расположение некоторых блоков-индикаторов, округление, картинки, кнопки и много чего другого.
     
    Как установить?
    Перейдите на эту страницу ( https://userstyles.org/styles/120122/dark-dark-robot) и перейдите по ссылке в заголовке. Вам предложат установить расширение для браузера "Stylish". Согласитесь на установку и дождитесь окончания. Затем снова перейдите на эту страницу и тыкните по большой зелёной кнопке "Install with Stylish". Во всплывающем окне нажмите "OK"... Всё! Теперь вы можете наслаждаться тёмным дизайном форума,
    Чтобы отключить тему, нажмите по значку Stylish в панели инструментов и снимите галку с темы "Dark-Dark Robot". Таким же образом её можно будет включить. Управление темой осуществляется на странице управления темами. Щёлкните по значку и выберите "Manage Styles...".
     
    А что нас ожидает?
    Скриншоты этого добра:

     
     

    Внимание!
    Начиная с версии 1.4, DDR требует наличия скрипта для GreaseMonkey под названием "Good Bad People".
    Ссылка: https://greasyfork.org/en/scripts/13471-good-bad-people
    Для работы требуется расширение браузера GreasyMonkey (Firefox) или TamperMonkey (Chrome)!
  6. Fingercomp
    Приветствую Вас, уважаемый читатель! В самый ТРУДный день '15 года я, наконец, написал красивые часы, которые идеально подходят для декорирования, например, метро или аэропорта, а также как просто инфо-панель дома Не будем отрывать коту хвост, закончим здесь предисловие.
     
    Finger Clock v. ∞
    Простая прога для OpenComputers, которая будет показывать Вам текущее майновремя... и реальное время с поддержкой часовых поясов!
    Pastebin: http://pastebin.com/aKjh5SZL
    Command: pastebin get aKjh5SZL clock
     
    Минимальная комплектация:
    Монитор T1 x1
    Компьютер T1 x1
    Жёсткий диск T1 x1 + OpenOS
    Видеокарта T1 x1
    Редстоун-карта T1 x1 (требуется, если монитор не поддерживает клик мышкой, то есть если монитор первого уровня. В мониторах выше не обязателен).
    Процессор T1 x1
    ОЗУ T1.5 x2
    EEPROM — Lua BIOS
    Интернет-карта/OpenNet-интернет — только для установки

    Рекомендуемая комплектация:
    Монитор T2/T3 x6
    Компьютер T2/T3 x1
    Жёсткий диск T1 x1 + OpenOS
    Видеокарта T2/T3 x1
    Редстоун-карта T1 x1 (требуется, если монитор не поддерживает клик мышкой, то есть если монитор первого уровня. В мониторах выше не обязателен).
    Процессор T2/T3 x1
    ОЗУ T2/T2.5/T3/T3.5 x1/2
    EEPROM — Lua BIOS
    Интернет-карта/OpenNet-интернет — только для установки

    Функции:
    Позволяет показывать реальное время и внутриигровое время.
    Настройка цветов, разрешения и часового пояса в константах в начале программы.
    Не использует отдельные библиотеки — меньше возни с установкой.

    Настройка:
    В самом начале программы есть список констант для настройки программы.

    MT_BG = 0x000000 -- Цвет фона при режиме показа внутриигрового времени.MT_FG = 0xFFFFFF -- Цвет текста при режиме показа внутриигрового времени.DAY = 0xFFFF00 -- Цвет надписи "Day".EVENING = 0x202080 -- Цвет надписи "Evening".NIGHT = 0x000040 -- Цвет надписи "Night".MORNING = 0x404000 -- Цвет надписи "Morning".RT_BG = 0x000000 -- Цвет фона при режиме показа реального времени.RT_FG = 0xFFFFFF -- Цвет текста при режиме показа реального времени.TIMEZONE = 0 -- Часовой пояс (от -12 до 12).W, H = 80, 25 -- Разрешение экрана. Рекомендуется 40x8.REDSTONE = false --[[ Если параметр будет установлен в true, программа будет сменять режимы при изменении редстоун-сигнала. ]]--TOUCH = true --[[ Если параметр будет установлен в true, программа будет сменять режимы по клику мышкой по экрану. ]]--KEY1 = 13 -- Коды клавиши. По умолчанию — [Enter].KEY2 = 28 -- Подробнее в комментариях.AUTOMODE = true --[[ Режим, который активируется при запуске программы. true — режим внутриигрового времени, false — режим реального времени. ]]--SHOWSECS = true --[[ Позволяет скрывать секунды в режиме реального времени при значении, равном false. ]]--SWDATEMT = true -- Показывать внутриигровую дату.SWDATERT = true -- Показывать реальную дату.SWDTMMT = true -- Показывать внутриигровое время суток.SWDTMRT = true -- Показывать реальное время суток.
    Скриншоты:

    Режим показа внутриигрового времени
     
     

    Режим показа реального времени
  7. Fingercomp
    А вот и новая версия почти всеми любимого OpenComputers готова приземлиться на Ваш жёсткий диск.
    Добавлено: Редстоун-карты и блоки могут теперь считывать вход компаратора. Компы-серверы-µC при краше теперь красят индикатор работы в красный цвет. Программа в OpenOS: du (Disk Usage). Показывает свободное место на дисках. Автор: payonel. Совместимость с билдерами из BC. Работать начнёт после выхода BC 7.2. Конфигурация наноботов (см. запись) может теперь быть сохранена в ещё не скушанного нанита (то есть, в виде предмета). Возможность указывать сторону взаимодействия с блоком для контроллера инвентаря. Интеграция с джетпаками из RotaryCraft (Voidi).
    [*]Изменено:
    Программа alias (payonel). Программа cd теперь более придерживается POSIX (payonel). При съедании следующих нанитов, они меняют адрес.
    [*]Пофикшено:
    Проблема с интеграцией с Magnanimous Tools. Проблема с интеграцией со Sponge. Изменение NBT через дебаг-карту работало только в эксперементальной версии. Потенциальный NullPointerException в обработчике крафтовых событий. Роботы отказывались летать над пустотой, даже с апгрейдом левитации Т2. Автодополнение по [TAB] при ./. Проблемы с EssentialCraft.



  8. Fingercomp
    Ей! Мы дождались, наконец, действительно интересного и полезного обновления OpenComputers — 1.5.18!! Ну, и это ещё четвёртая запись за сегодня))
    Сегодня в выпуске:
    Добавлено: Наномашинки!! Новая система баффов/дебаффов и эффектов. См. 'video. Добавлена функция вращения голограмм. Голограммный проектор, очевидно, второго уровня. Транспозер может быть использован как апгрейд.
    [*]Изменено:
    Благодаря payonel, улучшен механизм автодополнения по [Tab]. Дроны теперь должны сниматься исключительно ключом. Шифт-клик без ключа теперь ведёт к включению дрона, как роботов или компьютеров.
    [*]Пофикшено:
    Потенциальный дюп жидкостей при использовании бочек из ExtraUtilities. Поведение os.date()/os.time(). Несколько других мелких багов. Потеециальный NullPointerException, если робот использует анализатор. Проблемы с рендером определённый предметов, которые держат роботы. 1.8: проблемы рендера при наведении на кнопки в GUI.




  9. Fingercomp
    Третья часть мануала по OpenOS, где я расскажу об идее монтирования файловых систем, а затем разбавлю повестью о пайпинге.


    Сложность: средне 60%
    Скучность: средне 55%
    Дубовость: для продвинутых 50%
     


    ФАЙЛОВЫЕ СИСТЕМЫ, ЗАКЛЮЧЕНИЕ. УСТРОЙСТВА И МОНТИРОВАНИЕ
    Приступаем к самой сложной штуке в OpenOS — это монтирование файловых систем. Итак, начнём.  

    Логика работы
    Итак, начнём с того, что каждый накопитель — это устройство. У устройства есть свой адрес, который показывается при наведении мышкой. Устройство имеет определённую вместимость. Имеет количество свободной и занятой области. И, наконец, характеризуется наличием метки "Read-Only".


    Допустим, это устройство У имеет адрес Address, вместимость 2 МБ и занято 0.5 МБ.
    Другое устройство Д имеет адрес sserddA и такие же характеристики.
    В OpenOS выбирается одно основное устройство, которое становится корнем. У нас / = У. Оно имеет все стандартные файлы и папки. Но как перейти на устройство Д? Оказывается, в папке /mnt/ собраны ссылки на все устройства. Именами ссылок являются первые 3 буквы адреса устройства. Что интересно, даже если У — корень, ссылка на устройство всё равно будет в /mnt. Вот так: / Устройство У|│┅│+ mnt | |+ Add Устройство У |+ sse Устройство Д |┅
    Монтирование
    Но что, если если у нас таких устройств — 5, например? Помнить все 5 адресов, пусть даже трёх первых букв, писать длинные пути — не-у-доб-но. Согласитесь? Поэтому в ОС есть возможность ручного монтирования. То есть, проще говоря, можно создать ссылку на устройство в любом желаемом месте. Вот только ln здесь не поможет — это ведь не файл, а совершенно другой раздел. Для этих целей служит команда mount. У неё два варианта работы:
    mount -a <адрес> <место назначения> — создаёт ссылку на устройство, адрес которого начинается с <адрес>, в заданной директории <место назначения>. При этом указаннной папки не должно быть до этого на диске. После этого в выбранной директории будут все файлы с устройства. Для устройства Д — mount -a sse /devD/. mount <путь /mnt/адрес> <место назначения> — также создаёт ссылку на устройство в месте назначения, только вместо адреса используется путь типа /mnt/адрес. Для устройства Д это — mount /mnt/sse /devD/.

    Директория, которая является ссылкой на устройство, наызвается точкой монтирования.
     

    df
    Эта команда отобразит все подключённые в данный момент хранилища данных, укажет точку монтирования и состояние. Для нашего компьютера было бы показано следующее:
    Filesystem Used Available Use% Mounted onAddress 512k 2M 25% /Address 512k 2M 25% /mnt/addsserddA 512k 2M 25% /mnt/sse
    Как видите, если у файловой системы несколько точек монтирования, то будет показана информация о каждой из них.
     

    label
    Это у нас названия простые и запоминающиеся. В реальности вместо них были бы эти ужасные длинные непонятные адреса. И чтобы сделать их понятными, можно повесить метку. Что проще: "835f48a-5df9-eb6a-36cb-6ab452d8f16a" или "Programs"? Думаю, всё же второе.
    Чтобы поставить такую метку, воспользуемся командой label, у которой опять два варианта работы:
    label -a <метка или часть адреса> <метка> — устанавливает данному диску метку. label <точка монтирования> <метка> — устанавливает диску по данной точке монтирования метку.

    Кстати, если не указывать метку, то выведется информация о текущей.
    И ещё, установочная дискета имеет метку "openos", а жёсткий диск с ОС — "OpenOS" по умолчанию.

    Информация
    При монтировании первым способом можно вместо части адреса ввести метку.
     
     
     

    ПАЙПИНГ
    Файлы
    Простейший пример — перенаправление вывода echo в файл. Для этого используется >. Смотрите: echo "Hello all!" > hi.all. Содержимое hi.all очищается (или создаётся чистый файл, если его не было), и весь вывод идёт туда. Таким образом, в файле будет следующее: Hello all!
    Если же необходимо из файла содержимое вывести в команду, используется команда <. Вот только примеров такому мне найти не удалось.
     

    Между командами
    Другой простейший пример — команда cat. Если Вы помните, она печатала содержимое всё подряд, и если его больше высоты экрана, то просто обрезается. Так вот, чтобы не случалось такого, используется команда more и пайпинг.
    Сразу скажу, как это сделать. more | cat <файл>. Обратите внимание на |. Этот символ обозначает, что весь вывод из правой команды надо перенаправлять в левую.
    Скажу по секрету — тут можно было обойтись даже без пайпинга. more умеет сама открывать и читать файлы. Но есть нам нужен не файл, а, например, какой-нибудь df — вот тут и потребуется пайпинг.
     
    В любом случае, эта штука является невостребованной, так как она недоделана. Вероятно, в будущем этот недостаток будет устранён, а пока просто запомним три оператора.


    Список терминов: монтирование — процесс создания ссылки на устройство точка монтирования — название ссылки на устройство метка — пользовательское имя для накопителя



    Что же, всё обещанное сделано. В следующей части я расскажу об остальных программах, которые так или иначе помогают в программировании. Жду пожеланий и вопросов.


    ← →

  10. Fingercomp
    Небольшое обновленьице OC вышло сегодня, в котором есть немного небольших изменений.

    1.5.16 Добавлено: Транспозер — управляемая компьютером мультисторонняя воронка. Позволяет перетаскивать жидкости и предметы между соседними блоками. Интеграция с читёрнейшим AgriCraft. LordJoda Интеграция с интересным модиком Better Records. Функция для программного изменения архитектуры процессора. Ребут при изменении. Аргумент, который не ресетит монитор при биндинге GPU. makkarpov
    [*]Изменено:
    Access Point + Switch = реле, блок, совмещающий функции составляющих. Изначально — свитч, беспроводная карта превращает в точку доступа. В режиме свитча может быть вставлена линкокарта. Обновление Plan9k
    [*]Пофикшено:
    Редкая проблема с интеграцией. Много другой мелкотни.




    1.5.17 Пофикшено: Краш при изменении архитектуры АПУ (самый лёгкий способ краша за всю историю ОС). Дронотапки теперь поглощают повреждения за счёт энергии.

  11. Fingercomp
    Приветствую Вас, уважаемый читатель! Рад сообщить о том, что, спустя целых 24 дня, наконец, отрелизилась версия 1.5.15. Изменений маловато, но перечислить, думаю, не помешает.
    Добавлено: Режим доступа к накопителям низкого уровня. То есть, это является, по сути, одним "файлом", в который можно писать и из которого можно читать. Может быть полезным. Что? Мало карт данных? Не проблема. Теперь они различаются по уровням (бесполезная и даже неприятная фича ) Фича из разряда "НАКОНЕЦ-ТО!!!" Две функции для контроллера инвентаря: isEquivalentTo() и areStacksEquivalent(). Они позволяют определять, есть ли общие категории OreDict у обоих предметов. Всё больше мы переезжаем на Луа 5.3. "Новая"-старая либа bit32 для обратной совместимости. Перехватывание и возврат значений чисел различных типов в сигналах. Срочно бежим дизассемблировать кольчужную броню! Ибо добавлен чёрный список для него, и кольчуга там по умолчанию. Что? Только в 1.8 редактирвоание NBT? Да? Уже нет. Для дебаги добавлена функция управления NBT (спасибо gamax92).
    [*]Изменено:
    Использование правильного дефолтного шаблонного премета в лутогенераторе, для помощи работе другим модам.
    [*]Пофикшено:
    Сообщение computer.stopped. При отключении компьюетра, например, не закрывались сокеты. Переборщили с правкой времени копания. Как, что — не указывается. Если компьютеры остановились неожиданно, крашилось всё (бежим крашить сервер, пока не поздно!) Дедлок потенциальный на работающих компьютерах. Нестабильный мануал: деление на нуль. В интеграции с АЕ2 была небольшая проблема. Наконец-то. Утечки памяти в серверных стойках (кажется, именно это и происходило) были устранены. Состояние гонки возникало между ServerThread и ClientShutdownThread. Всякие очепятки и опечатки в мануале (спасибо Shuudoushi).



  12. Fingercomp
    Первая публичная реализация автокрафта на OpenComputers.
    Исполнительным элементом является робот, командующим же — компьютер. Хранилищем предметов здесь выступает МЭ-сеть, с интерфейсом в роли передатчика предметов в обе стороны.
    Для начала использования автокрафта Вам потребуется:

    Компьютер.
    Это главная часть системы, хранящая базу данных рецептов и экспортирующая предметы из дерева крафта в нужном порядке.
    Требования:
    Графическая карта второго уровня. Беспроводная сетевая карта. Процессор второго уровня и выше. Планки памяти уровня 2 и выше (зависит от размеров базы данных). Жёсткий диск уровня 1 и выше (зависит от размера базы данных). Интернет-карта (для скачивания программы). EEPROM. OpenOS Робот.
    Это исполняющая часть системы. По сигналу с модема "craft" она крафтит предметы и складирует полученное в МЭ.
    Требования:
    Апгрейд крафта. Контроллер инвентаря. Инвентарь. Клавиатура. Экран Т1. Дисковод. Интернет-карта (для скачивания программы). Беспроводная сетевая карта. Процессор уровня Т2 и выше. Планки памяти уровня Т2 и выше (возможная комбинация: Т2 и Т1.5). EEPROM. OpenOS. Жёсткий диск первого уровня. МЭ-сеть.

    Это хранящая часть системы, из которой достаются айтемы и в которую кладутся результаты крафтов.
    Требования:
    ME Drive и ячейки. Терминал для доступа к сети (может быть исключён). Интерфейс. После крафта всех необходимых вещей можно приступать к установке. Поставьте робота лицом в интерфейс. Убедитесь, что интерфейс готов к работе. Теперь соберите компьютер. Установите на робота и компьютер OpenOS. Скачайте программы, используя команды ниже, для робота и компьютера соответственно:
    Компьютер:
    pastebin get pXunJUE2 /usr/bin/craft.lua
    pastebin get ixwtEUr6 /usr/bin/recipes.lua
    pastebin get V2Zrnp6F /usr/share/db
    Робот:
    pastebin get tiwidCYt /autorun.lua
    pastebin get S1J5Y7mb /scan.lua
    Теперь запишите адреса сетевых карт на компьютере и роботе (components modem). Откройте файл /usr/bin/craft.lua на компьютере.
    В строке ROBOT замените значение на адрес сетевой карты робота.
    В строке DIR замените значение на сторону экспорта (сторона света, где находится робот относительно интерфейса). "north", "south", "east", "west", "up", "down".
    В строке TECH_SLOTS замените значение на количество слотов внизу робота (инструмент, дискета, контейнеры).

    После этого откройте файл /scan.lua на роботе и замените значение переменной COMP на адрес сетевой карты компьютера.


    Если всё сделано правильно, можно запустить файл /autorun на роботе и recipes на компьютере. Интерфейс у данных программ понятен без моих комментариев. Программа recipes предназначена для управления базой данных: удаление, изменение, добавление, просмотр рецептов. Программа craft на компьютере предназначена для самого процесса крафта. Напоследок, для сканирования рецептов нажмите 7 в recipes, выложите рецепт в роботе и в выделенный слот положите результат крафта. Затем запустите программу scan на роботе и выполните инструкции на компьютере.

    Скриншоты.
     
    Все вопросы, замеченные баги оставляйте в комментариях.
  13. Fingercomp
    ОБНОВЛЕНИЕ OPENCOMPUTERS



    до версии 1.5.14.


    Очередное обновление OpenComputers, дамы и господа, уже доступно на ГитХабе: версия 1.5.14. Не сказать, что изменений много, но зато...
    Добавлено: Сетевой разделитель (или же сплиттер, не помню, как вы его там назвали в транслейте. Но сплиттер звучит лучше в любом случае) — блок, которому с помощью клювёртки (не знаю, запрещена ли она на ИТ, или же нет) можно настраивать входы и выходы. Данный блок является аналогом свитча или распределителя энергии, но позволяет соединять подсети так, что бы компьютеры видели компоненты. По ред-сигналу все входы/выходы инвертируются. По сути это кабель, который может работать то в одну сторону. то в другую. Полезно для компьютеров, так как у них есть ограничение на компоненты. По одному состоянию сплиттера комп подключён к одним компонентам, по другому — к другим. Теперь для копирования адреса достаточно кликнуть по нему в чате. Специально для сингл-кодеров: появилась новая команда /oc_spawnComputer, спаунящая креативный компьютер вместе с его начинкой (гпу, цпу, память, хдд), монитором и клавой. Интеграция с столь недостающего на ИТ ForgeMultipart увеличилась — "вставляемось" в Hollow Cover зависит от размера кабеля. Диск с новой операционной системой по типу Linux plan9k OS доступен как лут в данжах! [MC 1.8] Интеграция с Power Advantage
    [*]Пофикшено:
    Лутовые диски теперь только для чтения. Блоки перекрашиваются при использовании инструментов из других модов. Проблемы с Lua BIOS и OpenOS при выборе компонентов, когда другой мод добавлял компонент, название которых начинается так же, как и у стандартных. Наконец-то тонна исправлений в логике пайпинга (огромная благодарность payonel). Да-да, в шелле есть мой любимый пайпинг! Проблема со светом от дронотапочек. Анимация и рендер ассемблера заставляли взбешиваться до невозможности мод Colored Lights (кстати, очень забавный и красивый мод, но он лагуч "немного") НАКОНЕЦ-ТО!!! Пофикшено вырубание экрана в некоторых случаях до обновления буфера видеокарты. Тем не менее, автор только надеется, что пофиксил Тератонны всяких других менее значимых багулинок также были пофикшены. Внутренний конвертер пчёлок использовал старые методы для анализации пчёлок. os.date() крашился на конце игрового года (пытался возвратиться несуществующий 366 день). screen.setTouchModeInverted() применялся только к главному блоку мультискринов. Теперь у не-обновляющихся блоков есть начальный ред-сигнал.



    Вот такое обновление. Не за горами уже 1.6, в которой, надеюсь, будет много вкусного) А пока...
    ... Вы можете скачать мод по этой странице: https://github.com/MightyPirates/OpenComputers/releases
    ... Вы можете зайти на официальный форум ОС: http://oc.cil.li/index.php?/index
    ... Вы можете оставить комментарий)
  14. Fingercomp
    BETTER THAN MINECON 2015


    В выходные (4 и 5 июля) проходило мероприятие Better Than Minecon 2015, где обсуждался модифицированный Майнкрафт. Из моддеров присутствовали:
    asie — BuildCraft BlayTheNinth — EiraMoticons, Cooking for Blockheads copygirl — Flamingo, BetterStorage Cricket — Chisel CyanideX — InfernalSkies Darkhax — WAWLA Drullkus — Thermal Smeltery Dynious, BlayTheNinth — Refined Relocation Jared — FluxedCrystals 2 ljfa — Glass Shards magik9k — PlankOS для OC marcin212 — Zetta Industries masa — Ender Utilities pixlepix — Aura Cascade Sangar — OpenComputers shadowfacts — Matter Overdrive Skyem123, Achati, Vec — Integrated Circuits tterrag — EnderIO 2.2.3 Vexatos — Computronics, BuildCraft Oil Tweak

    Подробнее о том, что там происходило, здесь: http://asie.pl/btm15.html. Там же ссылки на записи некоторых из событий на BTS15.
     
    В частности, живая презентация OpenComputers, о которой я и хотел рассказать:
     

     
    P. S. Кто-нибудь был там с нашего форума?)
  15. Fingercomp
    Дамы и господа! Мы представляем Вам новый Девайс: Вэйпоинт!..
    Собственно, вот.


    МАНУАЛ по вэйпоинту.



    Станьте Мастером по юзанью этой штуки за 5 шагов!



    I. Что это?
    Вэйпоинт — путевая точка — служит для указания роботу или дрону на конкретную локацию. Используется в совокупности с навигационным апгрейдом. Робот может получать относительные координаты места, силу подведённого к вэйпоинту редстоун-сигнала и название вэйпоинта.
    Внимание! Вэйпоинт указывает на блок, где спаунятся фиолетовые частицы!!  
     
     
     
     
     
     

    II. Использование.
    Для сканирования местности и получения данных о вэйпоинтах, необходим навигационный апгрейд в роботе или в дроне. Тогда появляется новая функция: findWaypoints(range) :: table
    Возвращаемая таблица будет содержать следующие значения:
    { { label="Имя вэйпоинта", position={ 0, --| Относительные |- X 0, --| координаты |- Y 0, --| вэйпоинта. |- Z n=3 -- Значение данного параметра неизвестно. }, redstone=0 -- Сила редстоуна, подведённая к вэйпоинт-блоку. }, { label="Имя второго вэйпоинта", position={ 0, 0, 0, n=3 }, redstone=15 } ...}

    III. Подробности.
    Имя вэйпоинта устанавливается через GUI этого блока.
     

    Но есть и второй вариант: вэйпоинт регистрирует себя как компонент:

     
    Так что мы можем обратиться к его фукнкциям:
    getLabel() :: string -- возвращает текущее название вэйпоинтаsetLabel(label:string) -- устанавливает новое название вэйпоинта

     
     
     
     
     
     
     

    IV. Практика!

    Специально для теста я по-быстрому написал 2 простенькие программы: поиск вэйпоинтов и перемещение к данному вэйпоинту.
    Полигон для тестов выглядел так:
     

    С ред-сигналом был только вэйпоинт "Сундук с грязью", как подсказывает первая программа find:

     
    Теперь давайте использовать путевые точки по назначению! Куда более сырая вторая программа goto позволяет перемещаться на данный вэйпоинт. Так как дрон — слишком просто, будем использовать робота "Curiosity".

     
    После выполнения робот перемещается с грязевого сундука на высокий вэйпоинт:
     
    Из-за сырости программы возникают небольшие ошибочки

    Здесь робот хотел пройти сквозь компьютер и попасть к правому вэйпоинту на скрине, но у него это не получилось :|
     
    И последнее. Если робот не находит какой-то вэйпоинт (в данном случае — "набор слов"), он выдаёт ошибочку.

     
     
     
     
     


    V. Заключение. Вэйпоинты могут помочь роботу или дрону легче ориентироваться на местности. Ссылки на скачивание программ: find: wget http://www.pastebin.com/raw.php?i=s0KdZApY find.lua goto: wget http://www.pastebin.com/raw.php?i=nAqrJ9jT goto.lua
    [*]Жду комментариев, лайков и, может, даже оценок! Ведь теперь Вы можете с уверенностью использовать этот замечательный блок [*]И, внимание! Официальное видео от автора ОС, демонстрирующее интересное использование данного блока в повседневных целях.



  16. Fingercomp
    Выключен
    Хост XMPP-сервера был отключён, ищу другой по возможности для настройки.
     
    Итак, хост, на котором был XMPP-сервер, окончательно ушёл куда-то, а вернуться так и не пообещал. Так что пока сервер, который популярностью и не пользовался, будет отключён до нахождения другого бесплатного хоста (буду рад помощи). Планирую запилить на него IRC, плюс ещё парочку других серверов при необходимости. Тем не менее, зарегистрировалось там 8 человек, сообщений написало (вместе с ЛС): 42, а продержался он 3.5 месяца.
     
    Старая запись:

     
  17. Fingercomp
    ОБНОВЛЕНИЕ OPENCOMPUTERS ДО ВЕРСИИ 1.5.8!


    Дата релиза: 21-04-2015
    Версия: 1.5.8
    Приветствую Вас, господа и дамы, перед Вами новая версия 1.5.8, о котором я спешу Вас оповестить!
    Взглянем на список изменений:
    Добавлено: Теперь, если бедный робот пытается стукнуться со стеной (он что, в коллайдере живёт?), появляются частицы! Дабы избежать спама частицами, поставлена небольшая задержка... Так что robot.detect() теперь куда нужнее.
    Если Вы игрете в мирном режиме, то наверняка замечали, что та же интерпаутина (а не интерсеть, кстати) требует эндержемчуг. Но где ж его достать-то в мирном режиме? О_о В общем, данное недоразумение поправлено: добавлен файл рецептов для мирного режима.
    Спасибо, Кибер! Ведь у нас русский перевод мануала для чайников в Инглише!

    [*]Изменено:
    Как и было заказано на багтрекере ОС, голограммы отрисовываются куда быстрее. Также на очереди метод для помещения сырого набора инфы (data) для быстрой изменении картинки.

    [*]Пофикшено:
    Опять-таки с багтрекера: теперь дроны умеет ходить сквозь Порталы и не выключаться. Доставщик пиццы между измерениями дождался своего часа!
    Пути теперь в мануале абсолютные. Немцы теперь тоже смогут вполне пользоваться мануалом.
    OpenOS был продублирован в НЕИ (на что я обратил внимание, кстати).
    Дроны! Отставить кушать! Что? Память! Потенциальные утечки при использовании дронов.
    Чуждое мне состояние гонки. Великий Рандом был недоволен этим и отрубал иногда компы.
    Память кушается меньше при таймауте __gc (то бишь __сборщикамусора).
    В OpenOS стандартные потоки I/O были способны закрываться. THNX TO: mpmxyz.
    При фоллбэке в LuaJ компы, которые отрубались при отгрузке чанка, не стартовали снова.
    1.8:
    Цветной текст на мониторе красил другие цветные блоки. А также много всякой рендерной ерунды.
    Поршневой апгрейд. Фиксед.



    На этом всё!
    Следите за багтрекером ОС, там ОЧЕНЬ много интересного! https://github.com/MightyPirates/OpenComputers/issues
    Следите за целями в ОС 1.6! https://github.com/MightyPirates/OpenComputers/milestones/v1.6.0
    Следите за релизами ОС! https://github.com/MightyPirates/OpenComputers/releases/
    Заходите на форум ОС! http://oc.cil.li/index.php?/index
    Предлагайте, о чём мне ещё написать, оставляйте комментарии, оценки — этому всему я буду рад :P
    А также прямые ссылки на ОС 1.5.8:
    1.7.10: https://github.com/MightyPirates/OpenComputers/releases/download/v1.5.8/OpenComputers-MC1.7.10-1.5.8.17-universal.jar
    1.8: https://github.com/MightyPirates/OpenComputers/releases/download/v1.5.8/OpenComputers-MC1.8-1.5.8.19-universal.jar
  18. Fingercomp
    OPENCOMPUTERS V. 1.5.7 — DOCUMENT ALL THE THINGS!


    Приветствую Вас, уважаемый читатель! На момент написания этой записи 18 часов назад (14 апреля 2015 года) была релизнута версия 1.5.7, в которой есть некоторые изменения, на которые мы посмотрим:
    Добавлено: Теперь у принтов можно указать силу редстоун сигнала, который они смогут испускать.
    Автодополнение через TAB в Lua интерпретаторе.
    Принты теперь вообще бомбой стали: они могут излучать свет!
    Теперь вместо картриджей в принтер можно вставлять обычные ванильные красители, но с куда меньшей эффективностью.
    Ключик. По большей части для 1.8. Но работает с некоторыми другими модами Комментарий переводчика: надо бы на грифабельность проверить.

    [*]И, самое вкусное... КНИЖКА-МАНУАЛ! Описано в ней всё самое вкусное в ОС
    Комментарий переводчика: хороший шаг! Ведь в НЕИ не всегда всё можно уместить, а вот в книжке — почему бы и нет?



    [*]Изменено:
    Хотите ли Вы этого или нет, но вам придётся крафтить этот мануал, так как рецепты Луа БИОСа и OpenOS теперь крафтятся с использованием этой штуковины.
    Скорость функции gpu.setPalette() теперь стала быстрее. Также добавлена зависимость скорости от уровня видеокарты.

    [*]Пофикшено:
    Потенциальный краш, возникающий при попытке отрендерить символ, который не может быть сгенерирован.
    Хамелиум блоки ломают мипмап.



  19. Fingercomp
    Приветствую Вас, уважаемый читатель! На протяжении уже нескольких недель я думал, о чём мне писать в блоге... И, наконец, нашёл.
    Я начинаю переводить чэйнджлоги ОС. Полезно и нетрудно.
    5 апреля 2015 года резилнулась версия OC 1.5.6, в которой кое-что изменили. Посмотрим на список изменений!
    Добавлено: Хамелиум теперь можно поедать. Но лучше не надо. Больше, БОЛЬШЕ АЕ2 интеграции! Автор выражает благодарность DrummerMC.
    [*]Изменено:
    Дискеты и харддрайвы теперь стираются через перекрафт самого себя, Шифт-клик отключён. Улучшенное обращение с рецептами. Теперь можно поставить false и отключить рецепт вообще. Миссинги будут генерировать ошибки уровня "Внимание".
    [*]Пофикшено:
    WAILA теперь показывает инфу о 3D-принте корректно. Конвертер для Форести применяется не только для пчёлокоттеждей/изунализаторов/..., но и для пчёл в инвентарях. Комментарий переводчика: Мне непонятно, что это за конвертер появился.


    [*]Дисассемблер игнорировал размер выхода рецептов... В общем, из 1 наггета получался 1 слиток. Дюпобаг. [*]Потенциальные краши в интеграции с АЕ2 даже в новых версиях... Будем надеяться, что сработает. [*]Улучшена интеграция ForgeMultipart и 3D-принтов. Ими теперь можно прикрывать кабели из Project:R3D, например. [*]Редстоун контроллер теперь по-нормальному включает компьютер. [*]Бесконечныепроводные сообщения вызывали загрузку чанков.


    Вот и всё в этой версии. В принципе, ничего дополнительно объяснять не нужно, потому я здесь заканичваю. Комментарии, как всегда, приветствуются =)
  20. Fingercomp
    Minecraft Mods



    #2



    Обзор обновления MoarPeripherals 1.5



    #2. Turtle Teleport.


    Вторая часть обзора обновления этого замечательнейшего аддона 1.5 у Вас перед глазами! Сегодня мы поговорим о незамысловатой штуковине, а именно о Turtle Teleport, или, в русском переводе, черепашьему телепорту. Строение делаю похожим на пред. часть.
     
    I. Что это такое и с чем его едят?
    Ну, не знаю, как Вы будете грызть этот блок, но нужен он для телепортации туртлей, что следует из весьма интересного названия. Всё
     
    II. API.
    Телепорт имеет всего 3 функции:
    requiredFuel(x, y, z) :: numberЭтот блок не такой читерный, как кажется. Он кушает топливо! Но маленько, не страшно Эта ф-ия показывается, сколько ед. топлива потребуется для телепортации.
    [*]getTurtleLocation() :: boolean, table OR boolean, string
    Возвращает в случае успеха вторым аргументом таблицу, содержащую координаты. Пример: { 0, 64, 0}

    [*]teleportTo(x, y, z) :: boolean OR boolean, string
    Собственно, телепортирует черепаху.



    III. Launch!
    Пора выпить чашечку кода и заняться самым весёлым.
    1. Исходная позиция. Обращаю внимание, что черепаха должна находиться над телепортом.

    2. Я написал простенькую прогу, которая демонстрирует возможности этого блока. Начнём с подключения блока и получения ф-ий.

    3. Как работает ф-ия getTurtleLocation(). Комментариев не требуется?

    4. Допустим, мы хотим запустить туртлю на 10 блоков в плюс по всем координатам. Расчитываем необходимое кол-во топлива.

    5. Попробуем запустить. Упс! Черепаха разряжена, о чём нам сообщают.

    6. Запускаем, наконец, черепаху! true

    7. И снимок того, куда телепортнулась туртля.

     
    IV. Заключение.
    Надеюсь, Вам эта информация была интересна. Оставляйте комментарии, оценки, "Лайки". И, конечно же, ждите новых записей у меня в блоге =)
  21. Fingercomp
    Minecraft Mods



    #1



    Обзор обновлений MoarPeripherals 1.5



    #1. Computer Controlled Crafter.


    Приветствую Вас в первой части обзора обновлений аддона к CC MoarPeripherals версии 1.5. Мы рассмотрим один из новых блоков, именуемый Computer Controlled Crafter, или, в моём русском переводе, крафтер. :P
     
    I. Что это и с чем его едят?
    Крафтер — это блок, позволяющий крафтить с компьютера! В принципе, всё =)
    II. API.
    Крафтер имеет несколько функций:
    getInventorySize() :: numberВозвращает кол-во слотов для крафта (их девять )
    [*]craft() :: boolean
    Собственно, тот самый рычаг, и если за него дёрнуть, то начнётся крафт! Если всё пройдёт успешно, положит рядом с ингредиентами и завизжит отрадости: true! Если же нет... то где-то Вы ошиблись =)
    [*]getStackInSlot(slot) :: table
    Некоторый аналог Item Dictionary. Позволяет узнавать доскональную инфу о блоке/предмете. Возвращает таблицу, к которой, я обещаю, мы скоро вернёмся.
    [*]isRecipeValid() :: boolean
    Суть ясна из названия функции. Возвращает true, если можно скрафтить загадочную хрень, и false, если рецепт не существует.
    [*]getCraftingSlot(slot) :: table
    То же, что и getStackInSlot(), но для предметов в сетке крафта.
    [*]setCraftingSlot(slot, item) :: boolean
    Аккуратно укладывает на верстак... скорее, дисплей, так как взаимодействовать напрямую нельзя, предмет в нужный слот (к этому мы скоро вернёмся).
    [*]clearCraftingSlot(slot)
    Недвусмысленная функция. Очищает слот в сетке крафта.
    [*]clearCraftingGrid()
    Менее аккуратный собратец предыдущей функции. Очищает всё скопом.



    Итак, порцию страшилок Вы получили... Теперь перейдём к самому весёлому: к кодингу!
    III. Крафтим!
    Начнём с ГУИ.

    В мой инвентарь Вам заглядывать смысла нет, так что показываю только верхнюю часть. Верхняя часть делится ещё на 3 части! Нет, не пугайтесь преждевременно. Первая часть — сетка крафта, вторая — клетка результата, а третья часть — это инвентарь. Инвентарь можно пополнять или забирать из него с помощью труб, роботов, компьютеров. Но не об этом речь. Предположим, мне позарез нужны Raw Circuit Board. Крафтятся они из блока глины, кактуса пережаренного и золотого зубчика. Кладём в инвентарь ингредиенты.

    Я написал маленькую программу test, в которой показывается код и он же выполняется. Разбираем!
    Во-первых, подключаем перефиральное устройство.
    Затем получаем инфу об айтемах. Для того, чтобы не париться, возьмём готовую ф-ию "getStackInSlot". Что это за цифры? Слоты в инвентаре и в верстаке нуммеруются слева направо, сверзу вниз, то есть так:
    1 2 3
    4 5 6
    7 8 9,
    или, в случае инвентаря:
    1 2 3 4 5 6 7 8 9
    10 11 12 13 14 15 16 17 18.
    В слоте 1 лежит кактус пережаренный. Потому в переменную cactus_green заносится та самая таблица с инфой об айтеме... Её состав рассмотрим попозже =)
    Теперь сеттинг рецепта. Пользуемся ф-ей setCraftingSlot(). В первом аргументе передаём слот, куда хотим положить предмет (не забыли ещё нумерацию?). А во втором — предмет. На самом деле, не обязательно иметь предмет в инвентаре. Можно написать из головы, но об этом — чуть позже.
    Теперь, если мы откроем ГУИ, он будет выглядеть так:

    Но просто так Вы плату сырую не возьмёте, опять нужен комп. Помните, я говорил о волшебном рычажке? А вот и он!

    Последняя строка. Мы крафтим сам предмет! И если мы опять заглянем в столик, то обнаружим такую картину:

    Скрафченный предмет лежит вместе с остальными, так что вытащить его можно только с помощью фильтра.
    IV. Убираем за собой.
    Намусорили, а убирать кто будет? Мы, конечно же =) Пользуемся свякой clearCraftingSlot() и clearCraftingGrid(). Суть понятна из названия. Скриншоты:




    V. Автономный режим activated!
    И напоследок о том, что из себя представляет таблица.

    mod_idID мода.
    [*]raw_name
    Сырое имя. То есть класс предмета/блока.
    [*]max_size
    Максимальный размер стека.
    [*]max_dmg
    Максимальная metadata. Имеет место быть только у ломающихся инструментов.
    [*]dmg
    Значение metadata (то есть числа s: ID:s). В метадате содержатся данные, например, о цвете шерсти или красителя.
    [*]qty
    Количество в данный момент.
    [*]id
    ID айтема по новым стандартам (modID:itemName)
    [*]display_name
    Имя, какое мы видим, наводя на предмет.
    [*]name
    Тип айтема (блок/предмет)



    gold_nugget = {}gold_nugget["id"] = "minecraft:gold_nugget"gold_nugget["dmg"] = 0ccc.setCrafttingSlot(1, gold_nugget)
    Для составления "личного дела" айтема достаточно 2 значений: это id и dmg.После этого система сможет понять, какой именно айтем Вы просите.
    VI. Заключение.
    Теперь Вы знаете, что такое CCC и как им управляться =) Надеюсь на "пятаки", "лайки", комментарии. Ждите новых записей в моём блоге!
  22. Fingercomp
    Вкратце проедемся про изменениям с невероятно старой версии 1.5.5 до самой новой, 1.6.3.
     
    1.5.6 / 2015-07-24
    Большинство блоков из мода можно покрасить, тыкнув по ним красителем. Интеграция с модом Flamingo (самая нужная фича, конечно): через компы можно заставлять фламинго качаться. Интеграция с Armourer's Workshop. Улучшен улучшенный шифратор. Ключи быстрее генерируются.

    1.5.7 / 2015-09-12
    Разноцветный апгрейд добавлен, который делает роботов разноцветными. Можно вызвать component.colors.setColor(color: number) и покрасить корпус робота в желаемый цвет. Интересная штука.

    1.5.8 / 2015-10-11
    Эффект hive_mind для наномашинок. Часть интеграции с Forestry.
    Включив, можно тыкнуть пропитанной палкой из Forestry по желаемому улью с пчёлами - пчёлы станут летать над головой.
    Палкой же направлять можно пчёл на желаемую цель: пчёлы полетят к ней и станут жалить.
    Если отключить эффект, то пчёлы будут жалить игрока.

    1.5.9 / 2015-10-22
    Чатбоксики креативные стали писать во все измерения.

    1.6.0 / 2015-11-28
    Аудиокабели добавились. Их можно подключать к кассетным проигрывателям и к динамикам. Динамики будут воспроизводить звук вместо проигрывателя. Убрана поддержка NedoComputers, потому что этот мод сдох.



    Спустя год выпускается огромнейший апдейт мода, поэтому дальше расписываю фичи детальнее.  
    1.6.1 / 2016-11-12
    Мод портирован на 1.8.9, 1.9.4 и 1.10. На новых версиях майна используется улучшенный кодек DFPWM1a. Старые записи будут очень тихими, поэтому их нужно переконвертировать с помощью LionRay. С новым кодеком гораздо меньше шума будет. Добавлена шумовая карта. Отключается от пищащей карты тем, что можно для каждого из 8 каналов задать тип волны: синусоида, меандр, треугольная и пилообразная. Допольнительно появляется буфер операций: можно добавить ноты и затем вызвать component.noise.process(), чтобы проиграть. Добавлена звуковая карта. Как работает этот монстр, я описывал в предыдущей записи. Потом опишу функции покруче, а пока можно побикать. Интеграция с TIS-3D, модом от Sangar. Это и новые модули: разноцветный, считыватель дискет, самовыпиливатель - и документация в мануале TIS-3D. Интеграция с OC 1.6.
    Добавлены дополнительные штуки для серверов. Плата с лампочками. Ключом можно менять конфигурацию, изменяя положение и количество лампочек. Как компонент предоставляет функции для включения/отключения лампочек и изменения цвета (True color). SSD. Расшифровывается как Server Self-Destructor. Очередная версия самой нужной вещи - самовыпиливателя, но для серверов. Если взорвать через функцию специальную, в серверной стойке пропадут все вещи. Серверный вариант батарейки, которую можно пихнуть в стойку. Можно ещё считывать количество энергии. Плата с переключателями. Можно тыкать по кнопочкам, включая или выключая их. А сервер потом может считывать положение переключателей. По просьбам трудящихся.
    [*]Добавлена функция getPosition() в проигрыватель, чтобы узнать текущую позицию на кассете. Именно: её несколько лет не было. Ну что поделать, бывает. [*]Стандартная программка для работы с проигрывателем tape починена для работы с HTTPS. Можно менять размер чанка и таймаут ожидания. И tape wipe добавилась для стирания всей инфы на кассете. [*]1.7.10 Цифровый сигнальный контроллер (интеграция с RailCraft). Надеюсь, когда-нибудь дойдут руки рассказать, как она работает. Но не тут. [*]1.7.10 Цифровый сигнальный приёмник (интеграция с RailCraft). [*]1.7.10 Рецепты для Gregtech 6. [*]1.8+ Больше не требуется устаналивать Asielib: либа встроена в мод.


    1.6.2 / 2017-02-25
    Фиксы, фиксы и ещё фиксы. Фиксы крашей, фикс тихих звуков в звуковых карточках, дискеты можно теперь получить, наконец, с помощью ключа.

    1.6.3 / 2017-04-21
    Добавлен синтезатор речи. Так как это охрененная штука, без пинка её так просто не завести. Чтобы она работала, нужно поставить сам синтезатор речи (MaryTTS с поддержкой Forge), файл голоса и файл языка. Женский голос и английский язык, например. К счастью, эти файлы нужны только на сервере. На клиент тянуть их не нужно.
     
    Работать так:
    speech_box.say(text: string) -- что-то сказать.
    speech_box.stop() -- остановить воспроизведение речи.
    speech_box.isProcessing():boolean -- проверить, воспроизводится ли сейчас речь.
    speech_box.setVolume(volume: number) -- установить громкость (от 0 до 1). Блоки теперь крафтятся не из земли и палок, наконец-то, а из чего-то повеселее. Используются предметы из OpenComputers. Динамики могут смотреть в любую из шести сторон. Директория для кассет перемещена в папку мира. При обновлении нужно перетащить её из папки кубача в папку мира, соответственно. Модуляция из-за глупой ошибки не работала вообще. Ну и ADSR не работал, если время Attack (нарастания) равно было нулю.

    Как-то так. За мною остаётся ещё долг в виде продолжения обзора этого интересного модика, но всё как-то лень. Пока можно спрашивать меня, как работают вещи из CX, читать страницы в мануале и документацию к методам. Для большинства вещей этого более чем достаточно.
     
    Have fun :P
  23. Fingercomp
    Имеется один проект на Питоне, который потребовал для себя парсер семантического версионирования, семвера, в общем. Ну там такие штуки как парсинг версий человеческий, обработка ввода юзверёв, умение сравнить все эти версии и выбрать из списка по указателю типа ">=1.5.17", ну, думаю, об этом вы слышали.
    К слову, вот тута лежит спецификация SemVer: http://semver.org/, можете почитать.
     
    Ну и нашёл я либу интересную, semantic_version зовётся. Подключил и нарадоваться не мог фичам всяким. И там пирожки, и здесь пэнкейки, в общем, использовалась весело и радостно.
     
    В рамках того же проекта ещё умещался репозиторий на мункрипте, который мункриптил очень важные дела, и ему тоже нужен был парсер. Без промедления открыл файлик того парсера, и спустя два вечера этот парсер был успешно портирован на Мункрипт, при всём при этом он даже работал! D:
    Ну, как минимум, насколько хватило желания протестить.
     
    Так что вот как-то так у нас всё получилось, я по-быстрому ознакомился с лицензией тех ребят, оформил всё более-менее и пихнул в свою репу на OpenPrograms.
     
    Потому если интересно будет когда-нибудь решить вопрос с версиями, то милости просим использовать либу libsemver, для OC её можно скачать с помощью OPPM: oppm install libsemver.
     
    Документации для либы этой именно я не писал, ибо она работает на 99% так же, как и оригинал. Потому вся инфа здесь: https://python-semanticversion.readthedocs.io/en/latest/
     
    А, ну и мой отзыв по поводу мункрипта: язык этот сумасшедший, но норм, писать можно. Ознакомиться с ним лишним явно не будет, так что осаждайте референс языка.
    Удачи!
  24. Fingercomp
    Недавно вышло мелкое обновление OC, которое я пропустил из-за некоторых проблем, и в нём:
    ДобавленоИнтернет-карты посылают событие, когда они получили данные по сокету и можно использовать :read.
    [*]Пофикшено
    Несколько мелких багов.
    [*]OpenOS
    Небольшие фиксы install, /lib/buffer.lua, ls, /lib/package.lua, rc, /lib/sh.lua.



    Вот и всё действительно небольшое обновление. Скачать можно по ссылкам в блоке справа сверху.
  25. Fingercomp
    Раз уж я тут пишу понемногу свой крутой пакетный манагёр, расскажу о пакетных менеджерах немного.
     
    Пакетный менеджер — штука сложная. Потому что, хотя задача у него, в общем-то, одна — менеджировать пакеты — сюда включается и установка, и удаление, и обновление, и, вообще, много всякого. Но а так как пока сам не напишешь, ПМ не поймёшь, здесь расскажу об установке пакетов и зависимостей с кодом.
     
    Ещё немного предисловий, о зависимостях. Это ключевая фича ПМ: вы-то прогу скопировать/разархировать и сами можете, вот только если программа зависит от другой, а та — от двух других, и т. д., вам это надоест. Людям надоело. Создали пакетные менеджеры. Теперь программы пакуются в пакеты — а рядом со скомпилированными бинарниками лежит ещё кусок информации: имя пакета, версии, зависимости, авторы, изменения и много-много всяких других полей. При установке данные считываются и далее уже делается, что сказано. Зависимости ли ставятся, ещё ли что-нибудь.
     
    А затем пакетов становится много, появляются репозитории полноценные, ну и так далее.
     
    Итак, давайте сделаем программу для установки пакетов. Ну, почти. Именно полезной нагрузки как таковой не будет, будем использовать такую структуру информации о пакете (назовём это манифестом пакета):
    { "name": "имя пакета", "files": [ { "url": "http://example.com/bin-1", "path": "/usr/bin/program1" } , { "url": "http://example.com/library-1.so", "path": "/usr/lib/library1.so" } ]}
    Пока без зависимостей, всё просто.
     

    Вот такой код получим:
    def install(name): # получаем манифест пакета с данным именем manifest = getManifest(name) # проходимся по файлам... for file in manifest["files"]: # ...скачиваем и ставим их в нужные места download(url=file["url"], path=file["path"])
    Ничего примечательного, на самом деле. Получаем манифест, скачиваем файлы и пишем "тадаам".
     

    Давайте сделаем вот такие манифесты:
    { "name": "pkg1" # имя пакета, "deps": # зависимости [ { "name": "pkg1-1" } , { "name": "pkg1-2" } ], "files": [ { "url": "http://example.com/pkg1/file", "path": "/opt/pkg1/file" } ]} { "name": "pkg1-1", "deps": [ { "name": "pkg1-1-1" } ], "files": [ { "url": "http://example.com/pkg1-1/file1", "path": "/opt/pkg1-1/file1" } , { "url": "http://example.com/pkg1-1/file2", "path": "/opt/pkg1-1/file2" } ]} { "name": "pkg1-1-1", "deps": [], "files": [ { "url": "http://example.com/pkg1-1-1/file", "path": "/opt/pkg1-1-1/file" } ] { "name": "pkg1-2", "deps": [], "files": [ { "url": "http://example.com/pkg1-2/file1", "path": "/opt/pkg1-2/file1" } , { "url": "http://example.com/pkg1-2/file2", "path": "/opt/pkg1-2/file2" } ]}
    У нас есть 4 пакета: pkg1, pkg1-1, pkg1-1-1, pkg1-2. Вот граф зависимостей:
     
     
     
     
     
     
     
     
     



     

    Очевидно, что просто так теперь тут в рандомном порядке пакеты поставить нельзя. Так как при установке пакета, например, pkg1-1, он совершенно справедливо считает, что его зависимость, pkg1-1-1, уже установлена.
     
    То есть, по-хорошему, нам надо сначала брать пакеты без неразрешённых зависимостей, и подниматься вверх. Однако, есть идея покруче.
     
    Я сейчас наваяю рекурсивную функцию resolveDeps, которая будет, как ни странно, разрешать зависимости:
    def resolveDeps(name): result = [] # результатирующая последовательность установки пакетов manifest = getManifest(name) for dep in manifest["deps"]: # В Python справедливен код типа `[1, 2, 3] + [4, 5, 6] == [1, 2, 3, 4, 5, 6]`, т.е. склеиваение списков. result = resolveDeps(dep["name"]) + result return result
    Если мы дадим ей манифесты, она выдаст вот такой список: ["pkg1-1-1", "pkg1-1", "pkg1-2", "pkg1"] — от менее сложного к более сложному. То, что нужно. Затем мы ставим просто их:
    for pkg in resolveDeps("pkg1"): install(pkg)
    Давайте улучшим алгоритм. Сделаем проверку на установленность: нам ведь не надо повторно скачивать файлы, которые уже есть.
    def resolveDeps(name): result = [] # Проверяем, установлен ли пакет if not isInstalled(name): manifest = getManifest(name) for dep in manifest["deps"]: result = resolveDeps(dep["name"]) + result return result
    Если у нас уже поставлен pkg1-1, то получим всего лишь ["pkg1-2", "pkg1"]. Круто!
     

    Возьмём другой граф:
     
     
     




    Как видно, от pkg1-1-1 зависят сразу 2 пакета: pkg1-1 и pkg1-2. Проблема в том, что на выходе у нас будет ["pkg1-1-1", "pkg1-1-1", "pkg1-1", "pkg1-2", "pkg1"] — ни разу не то, что мы хотели. Давайте это исправим:
    def resolveDeps(name, resolved=None): resolved = resolved or [] # список уже разрешённых пакетов if name in resolved: # Пакет уже был разрешён, ничего больше не требуется return resolved if not isInstalled(name): manifest = getManifest(name) for dep in manifest["deps"]: resolveDeps(dep["name"], resolved) # Теперь список один на всю рекурсию resolved.append(name) # Без рекурсии сюда попасть можно, если пакет не имеет неустановленных зависимостей return resolved
    Теперь выхлоп у нас ["pkg1-1-1", "pkg1-1", "pkg1-2", "pkg1"] — как и предписывали.
     

    А вот вам ещё граф:
     
     
     




     

    Какая тут засада? А у нас дерево циркулярное — не руки циркуляркой отрезает, а в бесконечную рекурсию вводит. Вот как можно этого избежать:
    def resolveDeps(name, resolved=None, unresolved=None): resolved = resolved or [] unresolved = unresolved or [] # список ещё не разрешённых пакетов if name in unresolved: # Мы попали сюда через рекурсию. Когда-то пакет уже был добавлен в список unresolved, # после чего функция ушла в рекурсивное разрешение зависимостей этого пакета. # Какой-то из зависимостей в итоге опять имеет данный пакет как зависимость. # Это ошибка, такого быть не должно, паникуем. raise ValueError("circular dependencies detected") if name in resolved: # Пакет уже был разрешён, ничего больше не требуется return resolved unresolved.append(name) if not isInstalled(name): manifest = getManifest(name) for dep in manifest["deps"]: resolveDeps(dep["name"], resolved, unresolved) # даём unresolved resolved.append(name) # Не забываем убирать из списка del unresolved[unresoved.index(name)] return resolved
    Теперь у нас в данном графе будет сгенерировано исключение, а потому рекурсии бесконечной не произойдёт.
     

    Итак, у нас есть простая функция, которая составляет список пакетов для последовательной установки без ломаний. Это уже круто, но время шло, и появилось такое явление как версии. Впрочем, об этом поговорим в другой раз. Там есть свои заморочки, с которыми нужно разобраться.
     
    Вот похожая статья, но на английском. Рекомендую ознакомиться.
     
    Лицензия: CreativeCommons Attribution-NonCommercial 4.0 International License

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