Лидеры
Популярный контент
Показан контент с высокой репутацией 07.11.2020 во всех областях
-
1 баллПОЛНЫЙ ОБЗОР Computronics версии 1.5.5 Часть вторая: стандартные блоки. И снова я приветствую Вас, уважаемый читатель этого блога! Вашему вниманию представляю вторую часть полного обзора CX версии 1.5.5, в которой я поведаю Вам о: Cipher Block (шифратор) Advanced Cipher Block (продвинутый шифратор) Colorful Lamp (разноцветная лампочка) Tape Drive + Cassette tapes (кассетный привод и, собственно, кассеты)) I. Cipher Block a.k.a. "Шифратор" Алгоритмов шифрования уже и так огороды, но суровые разрабы CX не сдаются) На самом деле, может быть очень полезным блоком для каких-нибудь там ивентов. Почему? Этот блок позволяет шифровать и дешифровать определённую строку, используя в качестве ключа... не что иное, как... предметы! Да, знаю, поворот весьма и весьма неожиданный, но так оно и есть на самом деле. Функции. cipher.decrypt(encrypted_string:String):String — пытается расшифровать строку, используя как "ключ" предметы в инвентаре шифратора. В случае неудачи (неправильный код) выдаёт ошибку. cipher.encrypt(string_to_encrypt:String):String — шифрует данную строку, используя как "ключ" предметы в инвентаре шифратора. Возвращает зашифрованную строку. cipher.setLocked(lock:Boolean) — блокирует/открывает доступ к инвентарю шифратора. При попытке открыть заблокированный шифратор, игроку выдаётся предупреждение в чат. cipher.isLocked():Boolean — возвращает состояние блокировки шифратора на данный момент. Скриншоты: II. Advanced Cipher Block. a.k.a. "Продвинутый шифратор" Этот вариант шифратора отличается от предыдущего тем, что здесь нет необходимости задать предметы как ключ — для шифровки/расшифровки используется алгоритм RSA. Функции. adv_cipher.createKeySet(prime1:Number, prime2:Number):Keygen — создаёт и запускает процесс генерации пары ключей на основе двух простых чисел. Возвращается структура, содержашая данные методы: key_set.finished():Boolean — так как процесс генерации ключей не мгновенный, использовать ключи сразу же после создания генератора нельзя. Данная функция возвращает готовность ключей: true при завершённом процессе генерации и false, если процесс генерации не завершён. key_set.getKeys():Table, Table — данная функция возвращает пару сгенерированных ключей или nil при незавершённом процессе генерации. [*]adv_cipher.createRandomKeySet():Keygen — идентичен полностью прошлой функции за исключением того, что числа простые указывать не нужно — они выберутся случайно. [*]adv_cipher.decrypt(encrypted_string:String, private_key:Table):String — дешифрует данную строку, используя приватный ключ RSA. [*]adv_cipher.encrypt(string_to_encrypt:String, public_key:Table):String — шифрует данную строку, используя публичный ключ RSA. III. Colorful Lamp. a.k.a "Разноцветная лампочка" Блок, испускающий свет, цвет которого можно менять программно (всего цветов 32768, включая чёрный). Функции. lamp.getLampColor():Number — возвращает текущий цвет лампочки. lamp.setLampColor(color:Number):Boolean — устанавливает текущий цвет лампочки. Если цвет равен нулю, то лампочка выключается. Скриншоты: IV. Кассеты и всё, что с ними связано. IV.1. Cassette Tapes. a.k.a. "Кассеты" Кассеты — мощное переносное хранилище информации, как текстовой, так и музыкальной. Всего видов кассет в CX — ни много, ни мало — 8 штук! И каждый тип различается требованиями по ресурсам и вместительностью музыки в минутах. Деревянная — 2 минуты Железная — 4 минуты Стальная — 6 минут Золотая дешёвая — 8 минут Золотая дорогая — 16 минут Алмазная — 32 минуты "Дешёвая" незерстарровская — 64 минуты И, наконец, самая ненажная и дорогущая одновременно вещь, которая когда-либо существовала в Майначе... Дорогущая незерстарровская — 128 минут. Это больше, чем на CD-диске!)) Но и качество хромает. Тем не менее, на такую кассету можно записать больше данных, чем на РЭЙД с 3 алмазными дисками) IV.2. Tape Drive. a.k.a. "Стример" Но одной кассетой Вы удолевтвориться не сможете... Для считывания и записывания информации необходим аналог CD-ROM'а, но для кассет — кассетный проигрыватель, называемый стримером. Функции. tape.stop():Boolean — останавливает проигрывание кассеты. tape.setSpeed(speed:Number):Boolean — устанавливает скорость воспроизведения (от 0.25 до 2). tape.getLabel():String — возвращает метку касссеты. Если не задано, равно "". tape.setLabel(label:String):String — устанавливает метку кассеты. Она видна в тултипе кассеты и в кассетном приводе, если там вставлена дискета. Возвращается новая установленная метка кассеты. tape.getState():String — возвращает текущий статус кассетного привода: "RUNNING", если проигрывается кассета, или "STOPPED", если нет дискеты, или воспроизведение было остановлено. tape.seek(amount:Number) — перематывает кассету на данное количество байтов вперёд/назад (при отрицательном значении). tape.setVolume(volume:Number) — устанавливает громкость кассеты от 0 до 1 (принимаются дробные значения). tape.getSize():Number — возвращает размер музыкального содержимого кассеты в байтах. Полезно вместе с функцией tape.seek() для перемотки в начало. tape.play() — начинает проигрывание музыкального содержимого кассеты. tape.isEnd():Boolean — возвращает true, если проигрывание содержимого завершилось. Полезно для зацикливания музыки на дискете в совокупности с tape.getSize() и tape.seek(). tape.isReady():Boolean — возвращает true, если в приводе присутствует дискета. tape.read([length:Number]):Number|String — читает всё (или определённое кол-во байтов), что записано на кассету. tape.write(data:Number|String) — записывает на кассету данные. Программа. При вставке кассеты в привод, появляется программа tape, которая позволяет совершать базовые операции над кассетой без необходимости использовать интерпретатор Lua. Доступно следующее: tape play — начать проигрывание. tape pause — приостановить проигрывание. tape stop — остановить проигрывание и перемотать в начало. tape rewind — перемотать кассету в начало. tape label — получить метку кассеты. tape label label — установить метку label кассете в приводе. tape volume volume — установить громкость volume музыке на кассете. tape speed speed — установить скорость speed проигрывания. tape write path/to/audio/file — записать на кассету файл с жёсткого диска компьютера. tape write URL — записать на кассету музыку с удалённого сервера, доступную по адресу URL. Скриншоты: IV.3. Формат звуковых файлов DFPWM. Прочитав рассказ о воспроизведении звука, наверняка, Вы уже начали искать тот самый файл с вашей любимой музыкой. Но не всё так просто! Дело в том, что используется странный и непонятный формат файлов — DFPWM... Но где его искать? Шаг первый. Конвертер. Первым делом, придётся открыть http://www.google.com/ в отдельной вкладке, ведь мороки с музыкой будет много. Сначала найдите в интернете конвертеры из формата Вашего файла в формат WAV (можно пропустить, если изначально в WAV). Для Линукса это ffmpeg, например. Шаг второй. Получение файла DFPWM. У вас должен быть на руках WAV-файл с музыкой. На всякий случай попробуйте открыть его в аудиопроигрывателе, дабы убедиться в "правильности" файла. Если всё ОК — закрываем Гугл и идём дальше. Загрузите данный файл на свой компьютер: https://dl.dropboxusercontent.com/u/93572794/LionRay.jar Это конвертер из WAV в DFMPW. Выставьте права на исполнение, если они не соблюдены, и запустите файл через Java. Укажите расположение исходного WAV-файла и запустите процесс конвертации. Шаг третий. Сохранение файла. Если у Вас есть доступ к папке сохранения, то всё просто — откройте папку ~/saves/<имя_мира>/opencomputers/<адрес_диска>/ и переместите туда Ваш получившийся аудиофайл. Затем вставьте кассету в стример, подключите последний к компьютеру и пропишите tape write <имя_аудиофайла>. Иначе Вам придётся искать хостинг, выдающий прямые ссылки на файл. Загрузите файл и скопируйте ссылку. Затем вставьте интернет-карту в компьютер и пропишите следующее: tape write <ссылка_на_аудиофайл>. Дождитесь окончания загрузки. Фух, вот я, наконец, и закончил. В сумме на написание этого гайда ушло около шести часов ночного времени, так что думаю, что он Вам понравится) Оставляйте оценки, лайки, жду комментариев! А в следующей части я расскажу о четырёх новых картах, которые добавляет CX. Ссылка на страницу мода: http://wiki.vex.tty.sh/wiki:computronics
-
1 баллPlayerMonitoring - программа мониторинга посещения игроками некой области. Это может быть ваша база или какое-то другое интересующее место. Позволяет сканировать область на наличие игроков раз в N секунд выводить список игроков на монитор выводить список игроков на гист уничтожает gist id и токен авторизации гитхаба при приближении опасных игроков ближе чем на 20 блоков - чтобы сохранить логи поддерживаются радар из Computronics и детектор сущностей из OpenSecurity Github: https://github.com/hohserg1/OpenComputersPrograms/tree/master/player-monitoring Видео-демонтрация Текстовая инструкция по установке 1. Это программа для HoverHelm, поэтому сначала нужно установить HoverHelm-сервер (pastebin run xh61Yx8a) 2. Далее установите сканирующее устройство(их можно сделать несколько) Его минимальная конфигурация(на основе сервера 1 тира): 3. Подготовьте для него eeprom (командой prepare_eeprom <device name> modem <port>) и убедитесь, что устройство коннектится к серверу 4. После скачайте radar.lua (wget https://raw.githubusercontent.com/hohserg1/OpenComputersPrograms/master/player-monitoring/radar.lua radar.lua) radar.lua должен лежать в папке programs конкретного устройства 5. В начале файла есть секция конфигурациии, настройте в ней gistId и githubToken, если хотите выгружать логи на гист. Подробнее про конфигурацию гиста: 6. Запустите программу из терминала HoverHelm командой your device name>radar Также можно настроить автозапуск. Для этого: 7. Скопируйте дефолтный конфиг из /home/hoverhelm/device_core/lib/config.lua в /home/hoverhelm/devices/<device name>/lib/config.lua 8. Установите опцию autorun в конфиге устройства на значение "radar"
-
1 баллПОЛНЫЙ ОБЗОР Computronics версии 1.5.5 Часть третья: Карточки Приветствую Вас, уважаемый читатель! Думаю, самое подходящее время, для того, чтобы написать новую часть обзора CX. В данной части я расскажу всё о карточках, которых тут как раз четыре вида: Beep Card (бипающая карта) Spoofing Card (карта-маскировщик) Particle Card (карта частиц) И, конечно же, Self-Destruct Card (карточка самоуничтожения). I. Beep Card. a.k.a. "Бипающая карта" Данная карта предоставляет продвинутый аналог системного динамика, который позволяет проигрывать сразу несколько звуков. Принимает таблицу следующего типа: Функции: beep.beep(freqLength:table):Boolean — запускает "аккорд" из таблицы freqLength, в которой записаны для каждой пары частота и длительность. beep.getBeepCount():Number — возвращает текущее количество проигрываемых нот. Предмет: II. Spoofing Card. a.k.a. "Карта-маскировщик" Данная карта позволяет отправлять сообщения с возможностью указывания адреса отправителя! Уже начали думать над взломом Банка? Тут-то и придёт конец вашей идее. Данная карта работает только для проводных сетей, но не для беспроводных, к сожалению. Функции. Те же, что и у обычной сетевой карты, но к функциям отправки сообщений в качестве необязательного первого аргумента можно передать желаемый адрес отправителя. Предмет: III. Particle Card. a.k.a "Карточка частиц" Данная карточка позволяет спаунить частицы в зоне 16х16х16 блоков с центром в блоке, где она находится. Полная таблица частиц доступна здесь: http://minecraft.gamepedia.com/Particles Функции: particle.spawn(particle_name:String, x:Number, y:Number, z:Number[, speed:Number]):Boolean || particle.spawn(particle_name:String, x:Number, y:Number, z:Number[, x_speed:Number, y_speed:Number, z_speed:Number]):Boolean — заспаунить частицу particle_name по определённым относительным координатам с определённой скоростью. Блок: IV. Self-Destruct Card. a.k.a "Карточка самоуничтожения" "Каждый нормальный цивилизованный житель нуждается в данной штуке", — гласит тултип к этой карточке. И он, знаете, прав! Я думаю, объяснять, что эта карточка делает, мне не нужно. Просто приведу список функций. Функции: self_destruct.start([timer:Number]):Number — устанавливает таймер на самоуничтожение. Если не указано, равно пяти секундам. Таймер самоуничтожения остановить или отредактировать невозможно! Трижды подумайте, прежде чем запускать отсчёт! self_destruct.time():Number — возвращает оставшееся время до самоуничтожения. Предмет: Вот я и закончил рассказывать о карточках в данном моде. Остались только апгрейды и предметы интеграции с другими модами, но о них я уже вряд ли буду рассказывать. А пока Вы можете оставить комментарий, подписаться на запись и поставить оценку)
-
1 баллЕсть ещё одно интересное свойство карты самоуничтожения. Будучи вставленной в робота, она просто его уничтожает. А вставленная в компьютер, она кроме того взрывает окружающие блоки и наносит урон мобам. Также проверялось на 1.7.10.
-
1 баллУ Self-Destruct Card можно сбросить отсчет взрыва, если включить компьютер. Сделать это можно по разному, например, переставить карту в выключенного робота и включить его или просто перезапустить текущего робота. Тестировал на майне 1.7.10.
-
1 баллА ещё wget ругается на невозможность октрыть файл в режиме записи. Скорее всего, система загружена с дискеты в режиме только для чтения. Чтобы исправить эту ошибку, требуется установить систему на жёсткий диск командой install и загрузить её с жёсткого диска.
-
1 баллРасскажи, как воспроизвести проблему: Какая версия Minecraft и OpenComputers? По какой ссылке скачана программа 3dprint? По какой ссылке скачана модель для печати?
-
1 балл
-
1 баллВидимо, файл не так составлен, как программа ожидает, или принтер почему-то не подключился. Стандартные модели печатаются или нет?
-
1 балл@hohserg Закинул: https://pastebin.com/raw/qdYmD7Bw Только что перепроверил, вроде все тесты работают. Единственная странность - что Юникод рендерится дольше, чем простой ASCII, хотя вызовов к gpu.set остаётся столько же. Возможно, быстрее исчерпывается бюджет вызовов, но это сомнительно.
-
1 баллПожалуйста, скажи, что сисечки у аниму-тянки задумывались интерактивными в такт движений ракеткой
-
1 баллПОЛНЫЙ ОБЗОР Computronics версии 1.5.5. Часть первая: стандартные блоки. Приветствую Вас, уважаемый читатель! В данном обзоре я попытаюсь рассказать о всём, что только есть в Computronics. И начать предлагаю со "стандартных" блоков. Итак, гостями сегодняшней части будут: Iron Note Block (железный нотный блок) Camera (камера) Radar (радар) Chatbox (чат-бокс) I: Iron Note Block. Железный нотный блок — аналог обычного нотного блока, управляемый исключительно компьютером и позволяющий указывать номер ноты (от нуля до 24) и инструмент. Последний указывается числом от нуля до шести: 0 — пианино; 1 — большой барабан; 2 — клики/палочки; 3 — малый барабан; 4 — бас-гитара; 5 — пианино; 6 — бас-гитара. Функции: iron_noteblock.playSound(instrument, note) — проигрывает ноту с номером note на инструменте instrument (кроме номера инструмента, можно написать название) Блок: II: Camera. Камера — блок, позволяющий Вам получать дистанцию до ближайшего блока. При этом, можно установить угол "поворота" камеры по обеим плоскостям (X и Y). Максимальное значение "поворота" равно единице, минимальное — -1. Функции : camera.distance([x, y]) — получить дистанцию до ближайшего блока с определённым углом "поворота". Если опущено, то равно 0, 0. Блок: III: Radar. Радар позволяет получать информацию об игроках, мобах, предметах на земле и энтитей в определённом радиусе, но не дальше указанного в файле конфигурации мода предела. Все координаты относительные! Функции: radar.getEntities([range]) — возвращает информацию обо всех сущностях. Структура возвращаемой таблицы у этой и последующих двух функций такова: radar.getPlayers([range]) — возвращает информацию об окружающих игроках radar.getMobs([range]) — возвращает информацию о мобах поблизости radar.getItems([range]) — возвращает таблицу с предметами на земле около радара. Структура данной таблицы: Блок: IV: Chatbox. Последний в данной части блок — чат-бокс. Этот компонент позволяет отправлять и принимать сообщения в/из игрового чат (-а) в определённом радиусе. Функции: chatbox.getDistance() — возвращает текущий установленный радиус действия чат-бокса. chatbox.getName() — возвращает текущее установленное "имя" чат-бокса. chatbox.say(msg[, range]) — отправляет сообщение msg в чат в радиусе range. Если не указано, равно установленному. Возвращает true при успехе. chatbox.setDistance(range) — устанавливает радиус действия чат-бокса. Возвращает новый радиус. chatbox.setName(name) — устанавливает "имя" чат-бокса. Возвращает новое "имя". События: chat_message(UUID, sender, msg) — генерируется при отправке сообщения msg в чат игроком sender с UUID UUID. Скриншоты: Вот мы и подошли к концу данной части. В следующей части я расскажу о Chiper Block, Advanced Chiper Block, Colorful Lamp и Tape Drive. А пока — жду комментариев, оценок Ссылка на страницу мода: http://wiki.vex.tty.sh/wiki:computronics << НАЗАД в башню Fingercomp
-
1 баллMoonyLambda Вы наверное знаете что сейчас проходит конкурс MoonJam. В общем суть в том что бы написать что-нибудь на MoonScript за неделю. Как говорил уже тотора, что-то серьезное за неделю не написать, но попробовать, поразвлечься, и написать что-нибудь интересное можно. В общем в этой теме буду показывать мой проект. И это... Библиотека для функционального программирования (далее просто - ФП)! Луа не предоставляет стандартных средств для ФП, потому я написал свою библиотеку. Чем то она похожа на реализацию такового функционала в языке Python, а чем то нет. Суть в том что функциональное программирование очень сильно упрощает работу с данными, например вместо пяти строк мы напишем одну строку. Все примеры в MoonScript, но в спойлерах будет эквивалент на луа. f - библиотека подключенная через require Начнем с самого простого, сложить массив чисел. f.reduce f.add, {1, 2, 3} --> 6 Точно таким же образом, мы можем перемножить все числа f.mul вместо f.add, или соответственно разделить, вычесть или возвести в степень - f.div, f.sub и f.pow А если, к примеру, нам нужно взять массив и выкинуть из него все нечетные числа. Это тоже возможно. f.filter f.even, {1, 2, 3, 4} --> {2, 4} А теперь, достанем все числа которые одновременно и меньше пяти, и четные. Это не составит труда f.filter f.even, f.filter ((a) -> a < 5), {1, 2, 4, 5, 6, 7} --> {2, 4} Хочу отметить, что нам не обязательно постоянно писать огромные цепочки из вызовов. Все функции в библиотеке каррированы. selectEven = f.filter f.even selectEven {1, 2, 3, 4, 5} --> {2, 4} ...Но мы можем каррировать свою функцию! pow = f.curry (a, b) -> a ^ b pow2 = pow 2 pow 3, 3 --> 27 pow2 3 --> 8 К слову, именно так определена в библиотеке функция f.pow. Каррированная функция сама определяет, что ей вернуть, функцию которая примет недостающие аргументы, или результат. Мы можем каррировать функцию с любым количеством аргументов, так просто! Реверс таблицы - легко, расплющить таблицу - легко, изменить таблицу - легко. Но самое главное... Все функции чистые. Ни одна функция этой библиотеки не изменяет данные, и не зависит от внешних данных. Вполне продакшен-ready пример: first_letter = (a) -> a\sub 1, 1 f.group first_letter, {"Miku Chan", "Mayonnaise", "LeshaInc", "Loli", "Totoro"} --> {M: {"Miku Chan", "Mayonnaise"}, L: {"LeshaInc", "Loli"}, T: {"Totoro"}} И все это становится таким простым используя библиотеку MoonyLambda. Скачать Исходный код: pastebin.com/fFEFvX5D Скомпилированная и минифицированная версия: pastebin.com/K4b9sREs Документация ...будет постепенно писаться в этой теме. Ссылки будут тут. Функциональный стиль выглядит гораздо читаймей, чем императивней стиль. Когда в императивном стиле мы пишем непонятный цикл, который непонятно что делает, тут мы пишем несколько строк кода, который понятен с первого взгляда.
-
1 баллПервая публичная реализация автокрафта на 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 на роботе и выполните инструкции на компьютере. Скриншоты. Все вопросы, замеченные баги оставляйте в комментариях.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
