Krutoy 1 165 Опубликовано: 6 марта, 2022 Роботы OC очень сложны в сборке и программировании. С этим биосом робота можно программировать через переименование на наковальне. Ссылка на английский Readme с большим количеством инфы. Установка Соберите робота минимальной конфигурации Корпус CPU RAM (Кстати, в моем модпаке Enigmatica 2: Expert - Extended этот чип будет крафтиться, так что игрокам даже не нужен стационарный компьютер что бы пользоваться чипом.) Скачайте программу из интернета: wget https://gist.githubusercontent.com/Krutoy242/db63637d605c2c247bc95e939c7f7ddd/raw/lostuser.min.lua Запишите прогу на чип: flash -q lostuser.min.lua LostUser Вставьте чип в робота Использование Робот программируется путем его переименования. Можно использовать наковальню или вот такой инструмент из мода Integrated Dynamics. Назовите своего Робота \3, поставьте на землю, включите и посмотрите, как он будет щелкать по блоку впереди. Для тех кто заинтересовался, о синтаксисе программирования робота через имя можно посмотреть в англ. Readme. Примеры IC2 растения Мы будем использовать робота для разведения культур Industrial Craft 2. Для этого нужно посадить семена в шахматном порядке, а между ними поставить поперечные палочки. Робот должен бегать по грядке и нажимать правой кнопкой мыши с инструментом, чтобы собирать сорняки. Имя такого робота будет \0ZZ Видео во вложении. Ferrous-Juniper ферма А вот пример более сложной программы ?(y0)'E9nS18''^9/0s18|0'Z Видео. Эта программа: Выкидывает предметы из слотов 9-16 вниз Засасывает предметы в слоты 1-8 сверху Перемещается зигзагообразно, ломает блок под собой и ставит новый Давайте ее разберем. С начала идет условный оператор ?. Он принимает 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, которая означает Зигзагообразное движение. Фидбэк Если кому то понравилась идея, пишите как можно улучшить. Особенно интересно, какие операторы стоит добавить в заранее записанные сокращения, а в каких сокращениях лучше сменить букву. Главный принцип - возможность писать сложные программы используя всего несколько символов. LiMWFlH.mp4 9 1 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 189 Опубликовано: 6 марта, 2022 Это звучит как байткод, которому требуется компилятор из более читаемого языка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 868 Опубликовано: 6 марта, 2022 Респект за соулс от мира опенкомпов! Вики очень достойная, но логику работы сложно осилить даже на примере \0ZZ, учитывая необходимость перма-скроллинга то по списку алиасов в сырце, то по списку операторов в самой вики. Да и без поиска тут не обойтись. Пожалей наши мыши! Интереса ради я решил вникнуть в первый пример: 1) Читаю команду \0, понимаю, что это useDown(), вопросов нет 2) Читаю команду Z, осознаю, что это алиас на %`~F'ta'N` ?M*'F?M`FN``RRMN`', приступаю к расшифровке 3) Читаю команду %, смекаю, это ещё один алиас на ?{<a>==nil}, отвечающий за проверку истинности результата выполнения некоего Lua-выражения. А какого? 4) Судорожно ищу, что такое <a>, и вроде бы даже нахожу нужную секцию: То есть, согласно вики, a - это программа, которая... что? Которая названа a? 5) Пытаюсь найти в сырцах некую программу с названием а, но тщетно 6) Допускаю, что, скорее всего, a - это переменная, которая пока еще не определена в текущем окружении. Вроде бы. То есть, наверное, выражение ?{<a>==nil} эквивалентно if a == nil. Или a - это все же программа? Ладно, хрен с ним 7) Возвращаюсь к пункту 2, читаю символ `, вновь обращаюсь к сырцам. В сырцах не нахожу. Видимо, оно в вики? Скроллю вики, нахожу искомое: Так, падаж-ж-жи! Интересно, зачем столько вариантов... для возможности использовать внутри строк другие кавычки, когда требуется? Если да, то это хорошо, хотя классический эскейпинг через \" был бы правильнее, т.к., например, я не смогу заюзать все 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>}... не-е-е, все, убейте меня. Софтина хорошая, идея клёвая, но нервная система у меня одна хд 3 1 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 165 Опубликовано: 6 марта, 2022 3 часа назад, ECS сказал: Респект за соулс от мира опенкомпов! Спасибо! Тут как говорится - хотел как лучше - получилось как всегда. Цитата Пожалей наши мыши! Как? Я бы рад, но как? Может сделать какую то внутреннюю подпрограмму, которая будет расшифровывать все алиасы на месте? Типа, выводить куданибудь в output дерево расшифровки? Цитата ?{<a>==nil} эквивалентно if a == nil. Все твои шаги расшифровки почти полностью правильно поняли мою задумку. Мне приятно видеть что хоть кто то копнул так глубоко. Именно в этом шаге ?{<a>==nil} эквивалентно if VARS['a'] == nil, потому что иначе не нужны были бы <>. Цитата a - это программа, которая... что? Которая названа a? Может, проблема в том, что в языке перемешан синтаксис языка \ алиасы и переменные? Может в таком случае, нужно что бы, например Весь синтаксис только на не-буквеных символах @#$ Все переменные как маленькие буквы abc Все алиасы как большие ABC Цитата классический эскейпинг через \" был бы правильнее В принципе, мне не сложно добавить эскейпинг. Я это сделаю. Правда, это больше символов в программу. Почти нет таких условий когда тебе нужно 3 раза подряд вписывать строку внутри строки. А может подключить юникод и сделать что то такое. Правда, при больших программах это все равно растянется на страницы 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 868 Опубликовано: 6 марта, 2022 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 сказал: А может подключить юникод и сделать что то такое. Правда, при больших программах это все равно растянется на страницы Выглядит шикарно, особенно если бы это визуализировалось в некой скролл-зоне экрана, в то время сам скрипт писался бы в инпут-панели. Но так и до визуального кодинга недалеко, а это тревожный звоночек шизофрении! 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 46 Опубликовано: 3 апреля, 2022 В 06.03.2022 в 16:30, Krutoy сказал: Роботы OC очень сложны в сборке и программировании. С этим биосом робота можно программировать через переименование на наковальне. Ссылка на английский Readme с большим количеством инфы. Установка Соберите робота минимальной конфигурации Корпус CPU RAM (Кстати, в моем модпаке Enigmatica 2: Expert - Extended этот чип будет крафтиться, так что игрокам даже не нужен стационарный компьютер что бы пользоваться чипом.) Скачайте программу из интернета: wget https://gist.githubusercontent.com/Krutoy242/db63637d605c2c247bc95e939c7f7ddd/raw/lostuser.min.lua Запишите прогу на чип: flash -q lostuser.min.lua LostUser Вставьте чип в робота Использование Робот программируется путем его переименования. Можно использовать наковальню или вот такой инструмент из мода Integrated Dynamics. Назовите своего Робота \3, поставьте на землю, включите и посмотрите, как он будет щелкать по блоку впереди. Для тех кто заинтересовался, о синтаксисе программирования робота через имя можно посмотреть в англ. Readme. Примеры IC2 растения Мы будем использовать робота для разведения культур Industrial Craft 2. Для этого нужно посадить семена в шахматном порядке, а между ними поставить поперечные палочки. Робот должен бегать по грядке и нажимать правой кнопкой мыши с инструментом, чтобы собирать сорняки. Имя такого робота будет \0ZZ Видео во вложении. Ferrous-Juniper ферма А вот пример более сложной программы ?(y0)'E9nS18''^9/0s18|0'Z Видео. Эта программа: Выкидывает предметы из слотов 9-16 вниз Засасывает предметы в слоты 1-8 сверху Перемещается зигзагообразно, ломает блок под собой и ставит новый Давайте ее разберем. С начала идет условный оператор ?. Он принимает 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, которая означает Зигзагообразное движение. Фидбэк Если кому то понравилась идея, пишите как можно улучшить. Особенно интересно, какие операторы стоит добавить в заранее записанные сокращения, а в каких сокращениях лучше сменить букву. Главный принцип - возможность писать сложные программы используя всего несколько символов. LiMWFlH.mp4 4 \u041c\u0431 · 0 загрузок главный вопрос, а зачем? я в своих роботов либо ставлю монитор, либо подключаю к сети дома, регистрирую на нем удаленную файловую системму(чаще всего и то и другое)(мои софтом(netoworks, distfs2)) и открываю доступ в его lua по сети, и вооля все роботом можно управлять удаленно на диск записал /start.lua(запускаеться моим модом для openOS) и как тока включил он пойдет копать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asior 583 Опубликовано: 3 апреля, 2022 5 часов назад, rootmaster сказал: главный вопрос, а зачем? Наверное потому что так тоже можно. Зачем городить сложные системы и топологию, когда можно и так. Тебе удобно своими инструментами достигать того же результата, а другим удобно иными инструментами. Хотя если это сообщение оставлено ради рекламы твоего софта, то не самая удачная идея так делать. 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 165 Опубликовано: 3 апреля, 2022 12 часа назад, rootmaster сказал: главный вопрос, а зачем? я в своих роботов либо ставлю монитор, либо подключаю к сети дома, регистрирую на нем удаленную файловую системму(чаще всего и то и другое)(мои софтом(netoworks, distfs2)) и открываю доступ в его lua по сети, и вооля все роботом можно управлять удаленно на диск записал /start.lua(запускаеться моим модом для openOS) и как тока включил он пойдет копать Моя версия проще. Лешего, не нужно учить луа. Скрафтил и вперёд. 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 46 Опубликовано: 5 апреля, 2022 В 04.04.2022 в 00:37, Krutoy сказал: Моя версия проще. Лешего, не нужно учить луа. Скрафтил и вперёд. lua все кто с этим модом играют знают, без этого не как Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 868 Опубликовано: 5 апреля, 2022 1 час назад, rootmaster сказал: lua все кто с этим модом играют знают, без этого не как С/Assembly все кто с Windows играют знают, без этого не как 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 46 Опубликовано: 5 апреля, 2022 18 минут назад, ECS сказал: С/Assembly все кто с Windows играют знают, без этого не как как не как а удаленный доступ к фски и lua робота лутще так и можно с планшета проявлять, такой вариант больше нравиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd 198 Опубликовано: 5 апреля, 2022 2 часа назад, rootmaster сказал: lua все кто с этим модом играют знают, без этого не как Прекрасно помню 2014-15 год, когда познакомился с СС (а Майноська еще была лишь простенькой оболочкой для него) и OC. И Lua я тогда не знал, но тем не менее компики тыкал и возился, используя готовый софт. А язык освоил только году в 19, до тех пор продолжая играть с ОС. Так что вышесказанное сообщение правдивым не является ибо, думаю, людей, как я в 15 году, возможно, даже больше тех, что умеет кодить. А потому данное программное решение я бы ругать не стал, каждому свое, как говорится. 3 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 46 Опубликовано: 26 июня, 2022 В 06.03.2022 в 16:30, Krutoy сказал: Роботы OC очень сложны в сборке и программировании. С этим биосом робота можно программировать через переименование на наковальне. Ссылка на английский Readme с большим количеством инфы. Установка Соберите робота минимальной конфигурации Корпус CPU RAM (Кстати, в моем модпаке Enigmatica 2: Expert - Extended этот чип будет крафтиться, так что игрокам даже не нужен стационарный компьютер что бы пользоваться чипом.) Скачайте программу из интернета: wget https://gist.githubusercontent.com/Krutoy242/db63637d605c2c247bc95e939c7f7ddd/raw/lostuser.min.lua Запишите прогу на чип: flash -q lostuser.min.lua LostUser Вставьте чип в робота Использование Робот программируется путем его переименования. Можно использовать наковальню или вот такой инструмент из мода Integrated Dynamics. Назовите своего Робота \3, поставьте на землю, включите и посмотрите, как он будет щелкать по блоку впереди. Для тех кто заинтересовался, о синтаксисе программирования робота через имя можно посмотреть в англ. Readme. Примеры IC2 растения Мы будем использовать робота для разведения культур Industrial Craft 2. Для этого нужно посадить семена в шахматном порядке, а между ними поставить поперечные палочки. Робот должен бегать по грядке и нажимать правой кнопкой мыши с инструментом, чтобы собирать сорняки. Имя такого робота будет \0ZZ Видео во вложении. Ferrous-Juniper ферма А вот пример более сложной программы ?(y0)'E9nS18''^9/0s18|0'Z Видео. Эта программа: Выкидывает предметы из слотов 9-16 вниз Засасывает предметы в слоты 1-8 сверху Перемещается зигзагообразно, ломает блок под собой и ставит новый Давайте ее разберем. С начала идет условный оператор ?. Он принимает 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, которая означает Зигзагообразное движение. Фидбэк Если кому то понравилась идея, пишите как можно улучшить. Особенно интересно, какие операторы стоит добавить в заранее записанные сокращения, а в каких сокращениях лучше сменить букву. Главный принцип - возможность писать сложные программы используя всего несколько символов. LiMWFlH.mp4 4 \u041c\u0431 · 0 загрузок простите меня за то я пролил на это чудное творения кучу хейта в прошлый раз, я был глуп, и мне очень стыдно и я извеняюсь, а со второго взгляда, могу сказать что софт этот мне очень нравиться, это довольно удобно закинул в накавальну и все, и я даже сделаю свой вариант, да еще и с поддержкой дронов(вдруг ее тут нет), вот только есть один маленький вопрос, а сокрашенные движения робота делают проверку на столкновения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 165 Опубликовано: 9 сентября, 2022 Размышления по поводу программы привели меня к еще более крутой идее: А что если я не буду придумывать никакого синтаксиса, а просто сделаю функцию сокращения путей и ключевых слов? Изменяя метатаблицы переменной _ENV я могу наворотить любые сокращения. Например, если назвать робота robot.use(3) - он будет юзать вперед. Но это можно укоротить до 5 символов. Заменим robot на R, сделаем поиск по полям, уберем ненужную точку, и вуаля, останется только Ru(3) Еще бы сократить вызовы функции с параметрами как то, и вообще шикарно. Еще можно упростить всякие циклы и пэирсы, например заменить for in pairs() на ~:t{pt(k,v)} Превратится в for k,v in pairs(t) do print(k,v) end Но тут уже начинаешь путаться. 🤔 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgramCrafter 538 Опубликовано: 9 сентября, 2022 47 минут назад, Krutoy сказал: ~:t{pt(k,v)} Лучше ~kv:t{pt(k,v)} (или как-то так), потому что циклы могут ведь вкладываться друг в друга. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 165 Опубликовано: 9 сентября, 2022 15 минут назад, ProgramCrafter сказал: Лучше ~kv:t{pt(k,v)} (или как-то так), потому что циклы могут ведь вкладываться друг в друга. Да, но так еще больше символов. Вообще, я уже решил эту проблему. Все циклы работают через k,v, но при выполнении они переписываются на k0,v0 k1,v1 и так далее. ~:t{~:v{pt(k,v)}} получится for k1,v1 in pairs(t) do for k0,v0 in pairs(v1) do print(k0,v0) end end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 165 Опубликовано: 9 сентября, 2022 Может у кого то есть еще идеи как можно укоротить всякие конструкции с заголовком / телом ? В таких вещах как функции и циклы есть заголовок - например, таблица для pairs(t) и тело - собственно то что будет внутри блока. Самое короткое что я придумал - 3 символа. 1. Ключевой символ начала паттерна 2. Разделитель между заголовком и телом 3. Окончание паттерна например вот тут ~:t{pt(k,v)} это ~:1 {2 }3 Хотелось бы 2 символа или даже один. Например, как в лямбда - счислениях a.b означает b(a()) Проблема в том, что в EEPROM запихать парсер Lua оч сложно, поэтому самый сильный инструмент у меня в доступе это "рекурсивный" паттерн %b12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 114 Опубликовано: 9 сентября, 2022 47 минут назад, Krutoy сказал: Может у кого то есть еще идеи как можно укоротить всякие конструкции с заголовком / телом ? У меня есть идея, но она ломает изначальный замысел. С точки зрения пользователя я бы предпочёл использовать стандартный синтаксис Lua, и чтобы все необходимые сокращения кода за меня выполняла программа. Получилось бы подобие упаковщика кода в последовательность ASCII-символов, которые можно было бы ввести через наковальню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 165 Опубликовано: 9 сентября, 2022 10 минут назад, eu_tomat сказал: У меня есть идея, но она ломает изначальный замысел. С точки зрения пользователя я бы предпочёл использовать стандартный синтаксис Lua, и чтобы все необходимые сокращения кода за меня выполняла программа. Получилось бы подобие упаковщика кода в последовательность ASCII-символов, которые можно было бы ввести через наковальню. Да, идея хорошая. Я думал такое сделать. Но по сути, это просто LZ77 алгоритм с распаковщиком внутри EEPROM. Вопрос такой - как узнать все доступные в наковальне символы? Не все символы можно вставлять в название, например § Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 165 Опубликовано: 11 сентября, 2022 Ок, вот мои наработки по теме: https://gist.githubusercontent.com/Krutoy242/1f18eaf6b262fb7ffb83c4666a93cbcc Документацию напишу позже. Пока, как я и говорил, робот (или дрон!) умеет выполнять свое имя как Луа-код. Но к тому же, он может всё сокращать до 1-2 символов. Например, вот такая строка сторгует всё что есть у жителя: ~:Tg(){?!v{tr}} А вот мега программа в 54 символ для дрона, который носит предметы из одного вейпоинта к другому: Dm(tb.u(Nf(300)[a++%2+1].p))s(3)~#{Dsel(i)Dd(0)Dsu(0)} В этом примере есть такие сокращения: a++ это продвинутая версия a=a+1, только она работает даже если а==nil s(3) расшифруется как sleep(3) ~#{BODY} получится for i=1, (R or D).inventorySize() do BODY end Еще, я добавил крутые фичи связанные с "трубами" - как в лямбда программировании, когда мы можем скомпоновать функцию, которая будет передавать результат своей работы в другую функцию. Но пока не придумал как ими пользоваться. Главная фишка это утилизировать битовые операции. Я сделал такое: a|b превращается в function(c) return b(a(c)) end. Но оказалось, что это почти бессмысленно, если мы не можем получить ключ\значение из цикла. В итоге, я уже могу написать вот такую функцию: _4|(Dsel|Dd&0) Получится вот так (примерно): for k,v in pairs{1,2,3,4} do (function() return D.drop(0) end)(D.select(v,k)) end Но как то криво всё равно. Не элегантно. Но уже можно пользоваться. javaw_0VdCQylZec.mp4 2 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах