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

LostUser - простейший робот

Рекомендуемые сообщения

Роботы OC очень сложны в сборке и программировании.

С этим биосом робота можно программировать через переименование на наковальне.

 

Ссылка на английский Readme с большим количеством инфы.

Установка

Соберите робота минимальной конфигурации

  • Корпус
  • CPU
  • RAM
 

sBP2y0N.png

 

(Кстати, в моем модпаке Enigmatica 2: Expert - Extended этот чип будет крафтиться, так что игрокам даже не нужен стационарный компьютер что бы пользоваться чипом.)

 

  1. Скачайте программу из интернета: 
    wget https://gist.githubusercontent.com/Krutoy242/db63637d605c2c247bc95e939c7f7ddd/raw/lostuser.min.lua
  2. Запишите прогу на чип:
    flash -q lostuser.min.lua LostUser

     

  3. Вставьте чип в робота
    Combining robot with EEPROM

 

Использование

Робот программируется путем его переименования. Можно использовать наковальню pYpuM1 или вот такой инструмент из мода VgGaLN Integrated Dynamics.

Назовите своего Робота \3, поставьте на землю, включите и посмотрите, как он будет щелкать по блоку впереди.

 

tgsaqxj.gif

 

Для тех кто заинтересовался, о синтаксисе программирования робота через имя можно посмотреть в англ. Readme.

 

Примеры

IC2 растения

Мы будем использовать робота для разведения культур Industrial Craft 2.

Для этого нужно посадить семена в шахматном порядке, а между ними поставить поперечные палочки. Робот должен бегать по грядке и нажимать правой кнопкой мыши с инструментом, чтобы собирать сорняки.

 

Имя такого робота будет \0ZZ

Видео во вложении.

Ferrous-Juniper ферма

А вот пример более сложной программы

?(y0)'E9nS18''^9/0s18|0'Z

Видео.

Эта программа:

  1. Выкидывает предметы из слотов 9-16 вниз
  2. Засасывает предметы в слоты 1-8 сверху
  3. Перемещается зигзагообразно, ломает блок под собой и ставит новый

 

Давайте ее разберем.

  • С начала идет условный оператор ?. Он принимает 3 аргумента:
    1) Условие (y0),
    2) Блок then 'E9nS18'
    3) Блок else '^9/0s18|0'
  • Условие это программа y0, где y - сокращение команды inventory_controller.getInventorySize. Некоторые сокращения записаны в исходном коде.
  • Блок then выполняет две программы. E9n - слить слоты с 9 по n вниз. S18 - набрать предметы сверху.
  • Блок else выделяет 9 слот ^9, ломает блок под собой /0, выбирает первый не-пустой слот s18, устанавливает блок вниз |0.
  • В самом конце проги стоит буква Z, которая означает Зигзагообразное движение.

 

Фидбэк

 

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

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

 

Главный принцип - возможность писать сложные программы используя всего несколько символов.

  • Нравится 7
  • Одобряю 1
  • В шоке 1
  • Грусть 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это звучит как байткод, которому требуется компилятор из более читаемого языка

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Респект за соулс от мира опенкомпов! Вики очень достойная, но логику работы сложно осилить даже на примере \0ZZ, учитывая необходимость перма-скроллинга то по списку алиасов в сырце, то по списку операторов в самой вики. Да и без поиска тут не обойтись. Пожалей наши мыши! Интереса ради я решил вникнуть в первый пример:

 

1) Читаю команду \0, понимаю, что это useDown(), вопросов нет

2) Читаю команду Z, осознаю, что это алиас на %`~F'ta'N` ?M*'F?M`FN``RRMN`', приступаю к расшифровке

3) Читаю команду %, смекаю, это ещё один алиас на ?{<a>==nil}, отвечающий за проверку истинности результата выполнения некоего Lua-выражения. А какого?

4) Судорожно ищу, что такое <a>, и вроде бы даже нахожу нужную секцию:

 

image.png.dbdbb62063cd98165419b1cd5a0c4128.png

 

То есть, согласно вики, a - это программа, которая... что? Которая названа a

5) Пытаюсь найти в сырцах некую программу с названием а, но тщетно

6) Допускаю, что, скорее всего, a - это переменная, которая пока еще не определена в текущем окружении. Вроде бы. То есть, наверное, выражение ?{<a>==nil} эквивалентно if a == nil. Или a - это все же программа? Ладно, хрен с ним

7) Возвращаюсь к пункту 2, читаю символ `, вновь обращаюсь к сырцам. В сырцах не нахожу. Видимо, оно в вики? Скроллю вики, нахожу искомое:

 

image.png.3733af878e62513d0f26c76e91134432.png

 

Так, падаж-ж-жи! Интересно, зачем столько вариантов... для возможности использовать внутри строк другие кавычки, когда требуется? Если да, то это хорошо, хотя классический эскейпинг через \" был бы правильнее, т.к., например, я не смогу заюзать все 3 варианта кавычек в строке "hello `sunny`, you are 'so shiny' and "beautiful"". Или все же смогу? Энивей иду вперед

8) Натыкаюсь на символ ~, определяющий алиас на подпрограмму ~F'ta'. Судя по вики, у нас теперь определена некая подпрограмма F, выполняющая команды ta

9) Ищу, что такое t и a. Сырцы говорят, что t отвечает за robot.turn(clockwise). Вероятно, переменная а и отвечает за поворот по часовой стрелке? Вроде бы понятно...

10) Читаю новый неизвестный символ N. Хоспади, только не алиас... МАМОЧКИ, ЭТО ОН. Ищу в сырцах содержимое, нахожу логику инверсии перменной a -a{not <a>}... не-е-е, все, убейте меня. Софтина хорошая, идея клёвая, но нервная система у меня одна хд

  • Нравится 1
  • Спасибо 1
  • Ха-ха 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, ECS сказал:

Респект за соулс от мира опенкомпов! 

Спасибо!

Тут как говорится - хотел как лучше - получилось как всегда.

 

Цитата

Пожалей наши мыши!

Как? Я бы рад, но как?

Может сделать какую то внутреннюю подпрограмму, которая будет расшифровывать все алиасы на месте? Типа, выводить куданибудь в output дерево расшифровки?

 

Цитата

?{<a>==nil} эквивалентно if a == nil.

Все твои шаги расшифровки почти полностью правильно поняли мою задумку. Мне приятно видеть что хоть кто то копнул так глубоко.

Именно в этом шаге ?{<a>==nil} эквивалентно if VARS['a'] == nil, потому что иначе не нужны были бы <>.

 

Цитата

a - это программа, которая... что? Которая названа a

Может, проблема в том, что в языке перемешан синтаксис языка \ алиасы и переменные? Может в таком случае, нужно что бы, например

  • Весь синтаксис только на не-буквеных символах @#$
  • Все переменные как маленькие буквы abc
  • Все алиасы как большие ABC
Цитата

классический эскейпинг через \" был бы правильнее

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

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

 

А может подключить юникод и сделать что то такое. Правда, при больших программах это все равно растянется на страницы

gW79kp4.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Krutoy сказал:

Как? Я бы рад, но как?

Может сделать какую то внутреннюю подпрограмму, которая будет расшифровывать все алиасы на месте? Типа, выводить куданибудь в output дерево расшифровки?

Под мышами я имел в виду нужду в хаотичном скроллинге документации :p

Было бы клево иметь всю инфу в маркдауновой доке без нужды бегать к комментам в сырцах и обратно, я об этом

 

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

Именно в этом шаге ?{<a>==nil} эквивалентно if VARS['a'] == nil, потому что иначе не нужны были бы <>.

Занятно, а что будет означать конструкция ?{a==nil}? Такая запись вообще валидна или же <> требуется в обязательном порядке? В доке сказано: "You can use <> inside lua code to execute program between <> as commands", из чего я сделал вывод, что <> выполняет некую программу. Но <a> выглядит как переменная, а не программа. Что такое program? Это просто собирательный термин или там действительно какие-то программы поддерживаются? Поясни, пожалуйста

 

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

Может, проблема в том, что в языке перемешан синтаксис языка \ алиасы и переменные? Может в таком случае, нужно что бы, например

  • Весь синтаксис только на не-буквеных символах @#$

Наверное, это было бы правильно, но вкусовщина такая вкусовщина. Имхо, главное, чтобы тебе было удобно и понятно, а невежественный плебс в любом случае подстроится)0

 

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

А может подключить юникод и сделать что то такое. Правда, при больших программах это все равно растянется на страницы

gW79kp4.png

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 06.03.2022 в 16:30, Krutoy сказал:

Роботы OC очень сложны в сборке и программировании.

С этим биосом робота можно программировать через переименование на наковальне.

 

Ссылка на английский Readme с большим количеством инфы.

Установка

Соберите робота минимальной конфигурации

  • Корпус
  • CPU
  • RAM
 

sBP2y0N.png

 

(Кстати, в моем модпаке Enigmatica 2: Expert - Extended этот чип будет крафтиться, так что игрокам даже не нужен стационарный компьютер что бы пользоваться чипом.)

 

  1. Скачайте программу из интернета: 
    
    wget https://gist.githubusercontent.com/Krutoy242/db63637d605c2c247bc95e939c7f7ddd/raw/lostuser.min.lua
  2. Запишите прогу на чип:
    
    flash -q lostuser.min.lua LostUser

     

  3. Вставьте чип в робота
    Combining robot with EEPROM

 

Использование

Робот программируется путем его переименования. Можно использовать наковальню pYpuM1 или вот такой инструмент из мода VgGaLN Integrated Dynamics.

Назовите своего Робота \3, поставьте на землю, включите и посмотрите, как он будет щелкать по блоку впереди.

 

tgsaqxj.gif

 

Для тех кто заинтересовался, о синтаксисе программирования робота через имя можно посмотреть в англ. Readme.

 

Примеры

IC2 растения

Мы будем использовать робота для разведения культур Industrial Craft 2.

Для этого нужно посадить семена в шахматном порядке, а между ними поставить поперечные палочки. Робот должен бегать по грядке и нажимать правой кнопкой мыши с инструментом, чтобы собирать сорняки.

 

Имя такого робота будет \0ZZ

Видео во вложении.

Ferrous-Juniper ферма

А вот пример более сложной программы


?(y0)'E9nS18''^9/0s18|0'Z

Видео.

Эта программа:

  1. Выкидывает предметы из слотов 9-16 вниз
  2. Засасывает предметы в слоты 1-8 сверху
  3. Перемещается зигзагообразно, ломает блок под собой и ставит новый

 

Давайте ее разберем.

  • С начала идет условный оператор ?. Он принимает 3 аргумента:
    1) Условие (y0),
    2) Блок then 'E9nS18'
    3) Блок else '^9/0s18|0'
  • Условие это программа y0, где y - сокращение команды inventory_controller.getInventorySize. Некоторые сокращения записаны в исходном коде.
  • Блок then выполняет две программы. E9n - слить слоты с 9 по n вниз. S18 - набрать предметы сверху.
  • Блок else выделяет 9 слот ^9, ломает блок под собой /0, выбирает первый не-пустой слот s18, устанавливает блок вниз |0.
  • В самом конце проги стоит буква Z, которая означает Зигзагообразное движение.

 

Фидбэк

 

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

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

 

Главный принцип - возможность писать сложные программы используя всего несколько символов.

 

главный вопрос, а зачем? я в своих роботов либо ставлю монитор, либо подключаю к сети дома, регистрирую на нем удаленную файловую системму(чаще всего и то и другое)(мои софтом(netoworks, distfs2)) и открываю доступ в его lua по сети, и вооля все роботом можно управлять удаленно на диск записал /start.lua(запускаеться моим модом для openOS) и как тока включил он пойдет копать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, rootmaster сказал:

главный вопрос, а зачем?

Наверное потому что так тоже можно. Зачем городить сложные системы и топологию, когда можно и так. Тебе удобно своими инструментами достигать того же результата, а другим удобно иными инструментами.

Хотя если это сообщение оставлено ради рекламы твоего софта, то не самая удачная идея так делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, rootmaster сказал:

главный вопрос, а зачем? я в своих роботов либо ставлю монитор, либо подключаю к сети дома, регистрирую на нем удаленную файловую системму(чаще всего и то и другое)(мои софтом(netoworks, distfs2)) и открываю доступ в его lua по сети, и вооля все роботом можно управлять удаленно на диск записал /start.lua(запускаеться моим модом для openOS) и как тока включил он пойдет копать

Моя версия проще. Лешего, не нужно учить луа. Скрафтил и вперёд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 04.04.2022 в 00:37, Krutoy сказал:

Моя версия проще. Лешего, не нужно учить луа. Скрафтил и вперёд.

lua все кто с этим модом играют знают, без этого не как

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, rootmaster сказал:

lua все кто с этим модом играют знают, без этого не как

С/Assembly все кто с Windows играют знают, без этого не как

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
18 минут назад, ECS сказал:

С/Assembly все кто с Windows играют знают, без этого не как

как не как а удаленный доступ к фски и lua робота лутще так и можно с планшета проявлять, такой вариант больше нравиться

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, rootmaster сказал:

lua все кто с этим модом играют знают, без этого не как

Прекрасно помню 2014-15 год, когда познакомился с СС (а Майноська еще была лишь простенькой оболочкой для него) и OC.

И Lua я тогда не знал, но тем не менее компики тыкал и возился, используя готовый софт. А язык освоил только году в 19, до тех пор продолжая играть с ОС. Так что вышесказанное сообщение правдивым не является ибо, думаю, людей, как я в 15 году, возможно, даже больше тех, что умеет кодить. А потому данное программное решение я бы ругать не стал, каждому свое, как говорится.

  • Нравится 2
  • Одобряю 1
  • Грусть 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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