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

Totoro

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

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

  • Посещение

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

    289

Все публикации пользователя Totoro

  1. В качестве личного развлекательно-образовательно-норкоманского проекта покатит. А практической пользы ноль. Если нужен "OpenOS в кармане" - куда перспективнее сделать эмулятор для Android.
  2. Я твою идею понял, да. Но ведь так можно и всё остальное сделать, как Doob описал. Редактор лучше чем Атом ты не сделаешь всё равно.
  3. Угарная тема. Автор, если бы ты выбрал Java / Scala - я бы тебе помог с интеграцией эмулятора )
  4. Totoro

    3D принтер

    Шейпы принта не могут иметь нулевую толщину.
  5. Так. Тут мне долго жаловались на непонятные глюки и проблемы с тем, что сообщения не доходят. Я немного покопался в исходном коде, и нашел один занятный баг. Оказывается, каждый раз, когда кто-то отключался от сервера, со всех каналов, на которые он был подписан, дропались все подписчики. Я этот баг исправил, и накатил новую версию (0.2.1) на сервер. Кроме того коммиты с фиксами доступны в репозитории, если кто-то держит локальную копию stem'а. Приглашаю всех, у кого наблюдались косяки со связью, повторно протестировать и отписаться.
  6. Некоторое время назад я публиковал программку - интернет-мост Stem. Он очень простой в использовании, но к сожалению пока не лишен некоторых глюков. А кроме того, у него есть недокументированные возможности. Предлагаю сейчас поиграться с одной такой тайной фичей. Это будет интересно тем, кто немного знаком с HTML/CSS/JavaScript. В чём суть? Всё просто. У Stem есть веб-клиент. То есть если вы зайдете по адресу https://stem.fomalhaut.me (например), вы увидите окно, которое пригласит вас ввести ID канала и початиться прямо с сайта. После ввода ID канала, вас перекинет на страничку с "чатом", где вы сможете посылать сообщения вашему компьютеру/роботу в майнкрафте. Адрес этой странички будет выглядеть примерно так: https://stem.fomalhaut.me/channel?id=test Где test это ID вашего канала. Когда робот будет вам отвечать, это будет видно в логе. Примерно так: А теперь - тайная фича. Находясь на страничке канала, как на скриншоте, вы можете приписать к адресу дополнительный флаг: &render=true. Полный адрес станет выглядеть примерно так: https://stem.fomalhaut.me/channel?id=test&render=true И начиная с этого момента, все входящие сообщения от компьютера в OpenComputers будут не отрисовываться в лог, а попадать в JS функцию eval(...). Что это значит? Те кто имел дело с JS уже наверное поняли все последствия. Но я поясню. Это значит, что компьютер OpenComputers может прислать сообщение с JS кодом, и сайт Stem этот код выполнит. А это значит, что вы можете творить на сайте вообще всё что угодно. Вы можете удалить интерфейс, показать вместо него новый, скачать что-то с инета, запустить игрушку... да хоть майнить крипту. Поиграем Ничего вредоносного мы делать конечно сейчас не будем. Вместо этого, традиционно, попробуем сделать так, что сайт Stem превратится в сайт для управления светом в нашем доме в Майнкрафте. Шаг первый. Подготовим дом. Тут всё просто - стандартный компьютер, с интернет картой, от него кабель к I/O блоку, а на блоке - подопытная лампа. На компьютер ставим Stem. Например, ставим HPM такой командой, pastebin run vf6upeAN И потом пишем: hpm install stem Нажимаем Enter и готово. Шаг второй. Нам нужен сайт. Усложнять не будем, и наш революционный дизайн будет выглядеть так: Что нам нужно сделать, чтобы сайт Stem превратился в то что нам надо? Методом тыка, через консоль браузера определяем, что достаточно выполнить такой код: document.body.innerHTML = " <style>button:active { background: #fac700; }</style> <button onclick=\"sendMessage(\'toggle\')\">Toggle Light</button> "; document.body.style.alignItems = "center"; Первой строкой мы просто заменяем всё содержимое тега <body> на то что нам надо. Я добавил еще немного косметики в виде стиля для кнопки. Вторая строка - тоже косметика, я просто поправил стиль на теге <body> чтобы кнопочка была посередине. Один важный ньюанс - на кнопке повешено свойство onclick с кодом sendMessage("toggle"). Таким образом, когда пользователь тыкнет по кнопке, мы отправим сообщение обратно в OpenComputers. Функцию sendMessage нам дает веб-клиент Stem. Ей можно безвозмездно пользоваться в своих целях. Шаг третий. Соединяем это все вместе. Теперь надо набросать программку для нашего компьютера в Майнкрафте, чтобы он выслал подготовленную JS-"бомбу" по нашему сигналу. Эники, беники... выходит что-то такое: local event = require('event') local stem = require('stem') local side = require('sides') local com = require('component') local redstone = com.isAvailable('redstone') and com.redstone or nil local channel = "test" local layout = [===[ document.body.innerHTML = "\ <style>button:active { background: #fac700; }</style>\ <button onclick=\"sendMessage(\'toggle\')\">Toggle Light</button>\ "; document.body.style.alignItems = "center"; ]===] local lampSide = side.top local lampTurnedOn = false print("Connecting to the #" .. channel .. " STEM channel...") local server = stem.connect('stem.fomalhaut.me') server:subscribe(channel) print("Done.") print("Press [q] to quit.") while true do local name, a, b = event.pull() if name == "stem_message" then local message = b if message == "connect" then print("Someone wants to connect - sending the layout...") server:send(channel, layout) elseif message == "toggle" then if redstone ~= nil then if not lampTurnedOn then redstone.setOutput(lampSide, 16) lampTurnedOn = true else redstone.setOutput(lampSide, 0) lampTurnedOn = false end end end elseif name == "key_down" then local char = b if char == 113 then break end end end server:disconnect() Я думаю тут большая часть очевидна и понятна. Мы подключаемся к серверу Stem, подписываемся на нужный канал и внимательно слушаем входящие сообщения. Когда пользователь присылает сообщение connect, мы отправляем ему подготовленный код, который мирно лежит в переменной layout. Этот код прилетит к пользователю, и, если пользователь смотрит страницу с включенной опцией render=true, код сработает и перерисует страницу. Если опция будет отключена - он просто увидит код в логе, как простое сообщение. Шаг четвертый. Тестируем. Откроем наш канал по ссылке: https://stem.fomalhaut.me/channel?id=test&render=true Появится пустой лог. Запустим программу в OpenComputers. Она отрисует наше приветствие, что-то вроде: Сonnecting to the #test STEM channel... Done. Press [q] to quit. Теперь пишем на сайте команду connect. Если мы все сделали правильно, и Stem не заглючил, интерфейс сайта исчез, и вместо него появилась наша кнопка. Нажимаем её. Вуаля! Дома зажегся свет. Постскриптум Это конечно же недокументированная хакерская фича, которую можно считать альфа-версией. Кроме того в Stem сейчас есть неуловимый баг, из за которого сообщения иногда не доходят. Не пугайтесь. Если кто-нибудь предоставит мне сценарий (прямо по шагам), при котором 100% срабатывает баг - буду очень рад и пофиксить его будет легче. С помощью описанной фишки можно придумать много хрени. Я показал самое простое что пришло в голову. Уверен, ваша фантазия будет покруче моей ) Пишите баг-репорты или пожелания по фиче, да и просто комменты в эту тему, либо мне в любой канал связи, где я онлайн.
  7. У терминалов OC нет графического режима. Используй символы-блоки и полублоки из Юникода. Или символы алфавита Брайля.
  8. Если ты пишешь свою ОС - ты пишешь и свой API к файловым системам. Ничего не мешает тебе сделать сколько угодно и каких угодно виртуальных ФС, или папок, или файлов. Для примера - тут где-то валялась программа, которая позволяла объединять жесткие диски в один, с тем чтобы обойти лимит на максимальный размер диска, и иметь возможность работать с файлами по 4+ мегабайт. Она как раз создает виртуальную ФС над стандартной. В реальности файл разбит на множество частей - а программы которые с ним работают этого не замечают. Так же этого файла в принципе может не существовать, и он может генериться системой на лету - и программы тоже не заметят. Короче не вижу препятствий.
  9. С небольшим запозданием, но я таки обновил сервер снова, и исправил все баги. Итак, теперь сервер постоянно обменивается с клиентами пингами. Это позволяет поддерживать соединение "в тонусе" и не давать ему отвалиться, как на TCP подключениях, так и на веб-клиенте. Для теста я держал соединение между веб-клиентом и программкой в эмуляторе OC открытым примерно два часа. Ничего не сломалось. Кроме того я добавил больше контроля над состоянием соединения. В веб клиенте фон будет загораться красным в случае проблем с соединением, так что это будет легко заметить и обновить страничку. В библиотеке для OpenOS добавились новые методы: server:ping(content[, timeout]), boolean - позволяет послать серверу Stem пинг. В качестве контента указываете любой кусок данных. Сервер должен будет его вернуть в точности чтобы подтвердить пинг. Метод блокирующий, ждет ответа от сервера вплоть до таймаута (который по дефолту 5 секунд). Возвращает true или false. server:isConnected(): boolean, error - проверка того, установлено ли подключение к серверу Stem. Если установлено, вернет true. Если не установлено - вернет nil и сообщение об ошибке. server:reconnect(): server, error - если что, этой командой можно переподключиться к серверу. Вернет ссылку на самого себя (объект server) в случае успеха. В случае ошибки, как водится, nil и строку с сообщением об ошибке. Подробный список команд можно полистать тут. Установить новую версию библиотеки можно по прежнему из Hel: hpm install stem Если библиотека уже была устанвлена, можно только обновить: hpm upgrade stem Если вы не пользуетесь Hel, то качайте по прямой ссылке: wget https://gitlab.com/UnicornFreedom/stem/raw/master/stem.lua
  10. Угу, проблема есть. Но я знаю как это поправить, во всяком случае для веба. Сейчас нафигачу пинг-пакеты и буду их слать каждые N секунд или минут. Вечером будет фикс.
  11. ВНИМАНИЕ!!! ОБНОВЛЕНИЕ. Сервер STEM ночью был обновлен и перезагружен, всё что было к нему подключено - отключилось. Что нового? Новая веб-страничка. Теперь там появился веб-клиент. Мы можете подключиться к любому каналу и почитать, что там пишут. И даже написать самому. Конечно свободы там меньше чем если работать через OC напрямую - послать любые данные не получится, только UTF-8 текст. Но зато не надо писать код, а можно просто с сайтика всё отправлять. Кроме того, я отрефакторил внутреннюю структуру сервера, поменялось довольно много кода. Всё пока еще сырое, активное тестирование и сообщение о багах приветствуется. В ближайшие несколько дней буду фиксить баги и добавлять остальные обещаные плюшки, типа ping пакета.
  12. Не помню. Надо отыскать тех кто им более активно пользовался.
  13. Тоже такая идея в голову пришла. Но интересно, что закрывается только одна сессия - приемник. А вторая живет.
  14. @Alex буду смотреть, что там такое. Надо понять кто именно убивает соединение - OC, Stem или ещё кто-то. Если окажется, что соединение гасится по бездействию Явой или OpenComputers - придется делать какой-то периодический пинг, чтобы поддерживать контакт.
  15. По идее, это означает, что сдох коннект от того компа, который был подписан на канал. Приемник-то есть. Канал считается сдохшим, если на него никто не подписан.
  16. Может быть оно некорректно обрабатывает какие-нибудь символы в названии канала. Если что-то такое появится - пиши.
  17. А ххрен его знает, что ему нужно. Надо как-то дебажить. Ты откуда подключаешься? С домашнего компа или с сервера? Там в сетью все нормально на этом компе? Файрвол какой-нибудь не озорует? UPD: ID канала точно совпадает на приемнике и передатчике? Каждый подключившийся к серверу компьютер должен увеличивать счетчик на веб-панели. Сейчас она показывает 1 канал и две сессии. Это канал test который я использую и мои два компьютера. Попробуй подключиться и посмотреть как изменяются счетчики.
  18. @Alex только что протестировал работу в майнкрафте. Скопировал твои проги для приема-передачи, только заменил канал на test и сервер на stem.fomalhaut.me. Всё работает нормально. Единственный глюк который нашел - это если закрыть приложение-приемник на Ctrl + Alt + C, то OpenComputers не закрывает корректно соединение. После четырех раз соединения забиваются и надо рестартнуть компьютер. Но это как бы ситуация внештатная, и по хорошему надо закрывать соединение в конце выполнения программы, при помощи server:disconnect().
  19. Меня тут товарищ @BrightYC пихает в чате уже месяца два, чтобы я фичи обещаные запилил Мотивация появилась, пилю понемногу. Получается не быстро, т.к. времени мало, и Rust у меня заржавел и запылился. Но надеюсь доведу до версии 0.2.0.
  20. Обратная будет. Будет и получать и отправлять. Я для этого делаю поддержку сервером веб-сокетов. Разобрал на гайки весь сервер сейчас, меняю архитектуру немного. Кстати, можно будет и свои веб-клиенты делать, наверное. То есть стучать на web-socket Стема с каких-то своих сайтиков. Или не клиенты, а типа виджеты делать, выводить в реальном времени какую-нибудь инфу с роботов.
  21. Не, регистрация и вход - это всё лишнее. Просто вводишь ID канала и попадаешь в интерфейс типа чата, который тут у нас на форуме. То есть лента сообщений, показано кто подписан, и можно самому что-то писать-отправлять. А это я в процессе дебага пока. Вчера успел только в эмуляторе погонять, потом меня отвлекли. В эмуляторе вроде отправляет все. Сегодня домой приду - зафигачу в креативе тестовый мир и буду там тестировать.
×
×
  • Создать...