1Ridav
Администраторы-
Публикации
218 -
Зарегистрирован
-
Посещение
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя 1Ridav
-
Выложил версию 2.1 ТЫК. Окно авторизации: Добавлена кнопка Disconnect&Close - отключает соединение и закрывает фоновый сервис. Добавлен визуальный индикатор состояния подключения(Шкала прогресса ProgressBar и текст), который показывает как на данный момент работает система. Добавлено автоматическое переключение в окно консоли при подключении Исправлен баг в поле ввода ключа. Кнопка Done выглядела не корректно. Окно консоли: Команды системы скрыты и теперь отображаются в виде понятного текста. PS: Система полностью работоспособна и можно её использовать.
-
Фактически то же самое, что и эти два варианта реализации
-
Выложил вторую версию приложения. Разбираюсь с интерфейсом и добавлением возможности полного контроля за соединением. Ссылка
-
Реальный прирост лишь во время длительной обработки циклами
-
Давно хотел заняться вводом цветов в редактор, но и так загружен несколькими задумками. Не совсем понял для чего использовать библиотеку отдельно, на мой взгляд будет удобнее сделать копию оригинального редактора и дополнить уже его. Нецензурные словечки в коде напрягают . Скорость прорисовки надо будет еще допиливать, хотя не уверен, что сильно возрастет PS: В циклах используй кеширование функций для unicode.find, получишь прирост скорости на 20% минимум for i = 1, 1000 do math.sin(i) end работает на 30% медленее, чем local sin = math.sin //кеширование функции for i = 1, 1000 do sin(i) end
-
ktlo@computercraft.ru зареригстрирован, первичный пароль отправил в ЛС
-
cloud@computercraft.ru зарегистрирован, первичный пароль отослал в ЛС
-
Единственный минус - обновление всего экрана вместо отдельных элементов. Тут нужна буферизация, но это очень проблематичное занятие, хотя имеет огромную пользу. Скачал исходники, в свободное время подробно изучу PS: Некоторые библиотеки для этой ОС как оказалось взяты с нашего портала Так что полезным делом занимаемся, товарищи https://github.com/IgorTimofeev/OpenComputers/blob/master/lib/qrcode.lua https://github.com/IgorTimofeev/OpenComputers/blob/master/lib/thread.lua
-
local file=fs.open(sfile..".ltx","a") добавляет новую строку, но не заменяет существующие
-
функции старайся кешировать. local select = r.select local turnRight = r.turnRight а затем вызывай напрямую select() turnRight() и тд. Связанно это с особенностями работы Lua, таким образом уберешь лишние операции
- 1 ответ
-
- 2
-
-
Из консоли работать с картами особого смысла не имеет, нужна возможность встраивать твою программу в другие программы в виде библиотеки
-
Я тоже по началу такой путь выбрал. но потом пока дебажил - вечно путался где у меня префы, а где свои переменные. Сказалось то, что всегда работал с ними через get/set вызовы функций типа set("key", value). Поэтому решил для наглядности использовать табличный вид, они контрастно выделяются на фоне. В принципе большой разницы нет в моем или твоем варианте, это лишь дело вкуса при использовании PS: Поднял твое сообщение, чтобы было видно всем
-
Тоже занимался таким же вопросом на гуи библе для СС, пришлось написать свою реализацию на ивентах.
-
tuxshot@computercraft.ru Зарегистрирован, первичный пароль скинул в ЛС
-
Я переделал буферизированную реализацию сокетов по своему, так что receive() НЕ БЛОКИРУЕТ программу так что можно сказать - она на асинхронных сокетах. Если есть данные - она их считывает, иначе возвращает "" если нет сообщений для юзера, но сообщения для самой библы могут быть, однако они не должны касаться юзера В примере описано все очень просто. Библиотека основана на проходной логике, то есть необходимо иметь цикл, который постоянно крутится, лучше всего для этого подходит главный цикл. Где нибудь в конце цикла можно поставить br.receive() который сначала вернет nil - мы не подсоединены к мосту, так что if msg == nil then br.init("КЛЮЧ") Соединит нас с мостом, этот проход цикла можно считать холостым. На следующем проходе цикла, msg будет иметь скорее всего или "" пустой стринг или какое нибудь сообщение, которое можно обработать в вашей проге. Второй аргумент ретурна - это переменная со значениями true/false - Она показывает подключен ли андроид к ОС через мост. При значении false не советую кидать сообщения через мост, это может спровоцировать невидимый спам
-
https://github.com/1Ridav/Bridge-OpenComputers/blob/master/bridgeLIB.lua мобильное приложение Система работает по принципу Мобильное приложение соединяется с мостом и передает ключ Клиентская часть OC соединяется с мостом и передает ключ Мост найдя два одинаковых ключа начнет ретранслировать сообщения от мобильного приложения к ОС, так и от ОС к мобильному приложению. Подключать приложение и ОС к мосту можно в любом порядке очереди, активность соединения поддерживается самостоятельно. При обрыве соединения OC с мостом, в ОС требуется использовать init(КЛЮЧ) Функции init("стринг ключ", "HOST/IP:PORT"):true/false вводный аргумент ключ соединения, возвращает true/false успешно ли соединение, используется для того, чтобы подключиться к мосту с заданным ключом send("стринг"):true/false вводный аргумент сообщение для пересылки, возвращает true/false успешности отсылания на мост receive():string/nil:true/false --НЕ БЛОКИРУЕТ программу первый аргумент сообщение message, оно может принимать значения: "" пустышки при отсутствии сообщений, nil при потере соединения с мостом Второй аргумент указывает на то, есть ли соединение с мобильным устройством true/false isBridgeConnected():true/false Проверка соединения с мостом isPairConnected():true/false Проверка соединения с мобильным устройством split("стринг", "разделитель"):table -- легкий способ разделить ваши сообщения по разделителям. sendToast("стринг", 0/1) --Дает команду андроиду показать тост, второй аргумент указывает продолжительность. 0 короткий 1 длинный sendNotification(table) -- Дает команду андроиду показать push нотификацию, функция получает таблицу с параметрами К примеру: local notif = {} -- Создали таблицу notif["title"] = "Заголовок" --Обязательный параметр notif["text"] = "Текст нотификации" --Обязательный параметр --Далее идут опциональные параметры, которые расширят ваши возможности оповещения пользователя: notif["blinkTitle"] = "Первичный показывающийся заголовок" -- Показывает этот текст проносящейся строкой notif["id"] = "2" --Айди нотификации, можно использовать айди от 2, тк 1 зарезервирован приложением для собственных нужд --Айди позволяет создавать независимые друг от друга нотификации, иначе они будут наслаиваться друг на друга. --К примеру отослали 3 нотификации с одним айди - они все запишутся поверх, так что пользователь увидит лишь последнюю --Айди так же позволяют исправлять/обновлять предыдущую нотификацию с этим же айди, если она не была прочтена пользователем notif["vibrate"] = true -- Включать ли вибрацию при появлении нотификации. Можно не передавать этот параметр notif["sound"] = true -- Включать ли звук при появлении нотификации. Можно не передавать этот параметр notif["urgent"] = true -- Короткий аналог vibrate&sound, включает звук и вибрацию при появлении нотификации Пример использования: local br = dofile("bridge.lua") local KEY = "q1w2e3r4t5" local msg, pair while true do --Это главный цикл вашей программы msg, pair = br.receive() --НЕ БЛОКИРУЕТ ПРОГРАММУ if msg == nil then --соединение с мостом оборвано или отсутствует br.init(KEY) -- вернет true/false, но мы не проверяем, а просто пропускаем ход elseif msg == "" then --соединение активно, но сообщения для нас нет --ничего не делаем else --сообщение к нам пришло, принтим print(msg) local msgArray = br.split(msg, " ") --разделили наше сообщение по знакам пробела. if(msgArray[1] == "notify") then --если андроид прислал notify строку local notif = {} notif["blinkTitle"] = "Мигающий заголовок" notif["title"] = "Заголовок" notif["text"] = "Текст нотификации" notif["id"] = 2 notif["urgent"] = true br.sendNotification(notif) elseif(msgArray[1] == "toast") --если андроид прислал toast строку br.sendToast("текст всплывающего тоста", 1) -- второй аргумент не обязателен, указывает продолжительность 0 или 1 else br.send("Получено: " .. msg) end end os.sleep(0.5) end Я переделал буферизированную реализацию сокетов по своему, так что receive() НЕ БЛОКИРУЕТ программу так что можно сказать - она на асинхронных сокетах. Если есть данные - она их считывает, иначе возвращает "" если нет сообщений для юзера, но сообщения для самой библы могут быть, однако они не должны касаться юзера В примере описано все очень просто. Библиотека основана на проходной логике, то есть необходимо иметь цикл, который постоянно крутится, лучше всего для этого подходит главный цикл. Где нибудь в конце цикла можно поставить br.receive() который сначала вернет nil - мы не подсоединены к мосту, так что if msg == nil then br.init("КЛЮЧ") Соединит нас с мостом, этот проход цикла можно считать холостым. На следующем проходе цикла, msg будет иметь скорее всего или "" пустой стринг или какое нибудь сообщение, которое можно обработать в вашей проге. Второй аргумент ретурна - это переменная со значениями true/false - Она показывает подключен ли андроид к ОС через мост. При значении false не советую кидать сообщения через мост, это может спровоцировать невидимый спам PS: Если отсылать сообщения при помощи send при том, что receive вернула false вторым аргументом - мост будет отвечать сервисным сообщением 10, которое обрабатывается на уровне библиотеки и невидимо для вас. Таким образом вы нечаянно можете спровоцировать спам сообщениями, которые не дойдут до мобильного приложения, которое фактически не подключено к вам по ключу Обновление 1: Оптимизирована буферизация и обработка команд, уменьшена возможная задержка между обработкой строк пользователя
-
unknown@computercraft.ru Зарегистрирован, первичный пароль выслал в ЛС sergomarov@computercraft.ru Зарегистрирован, первичный пароль отправил в ЛС
-
leshainc@computercraft.ru Зарегистрирован, первичный пароль выслал в ЛС assumonster@computercraft.ru Зарегистрирован, первичный пароль отправил в ЛС
-
Баг или фича? или реализация load в Lua@OpenComuters
1Ridav ответил в вопрос swg2you в Разные (отсортировать)
Такое происходит из-за биндинга, есть разница между статичным и динамичным.- 14 ответов
-
В Банке на 2 этажа ниже, под менялой Байтом, поставили такое вот табло. Оно обогатит тех, кто знает, как использовать QR Код меняется каждые 20-24 часов, на скрине виден 25-й код, следующим будет 24-й
-
Доброго времени суток. В одном из своих проектов понадобилось перебрасывать строку с ОС на телефон/планшет. Решил использовать популярный в данный момент QR код, который используется в основном для быстрого перехода на нужную ссылку. В сети нашел код генератора QR, адаптировал его для ОС В итоге получилась такая вот библиотека: http://pastebin.com/Cgf1x9G1 Использование очень простое: local qr = dofile("qr.lua") local data = qr.encode("Любая строка, даже кирилица и спецсимволы") -- data будет содержать матрицу из 0 и 1, где 0 это белый, а 1 черный соответственно, хотя цвета можете менять на свой вкус qr.printHalf(data)-- функция быстрого принта, её переделаю исходя из ваших нужд и пожеланий --В любом случае, вы можете и в ручную отрисовать картинку используя матрицу data --для этого просто проходите циклом по ней построчно
