Лидеры
Популярный контент
Показан контент с высокой репутацией 22.07.2021 в Сообщения
-
1 баллОптимизированы наиболее часто используемые методы библиотеки Screen, работающей с экранными буферами: если ранее для каждого рисуемого пикселя выполнялась проверка вхождение в регион отрисовки, то теперь все прямоугольные команды автоматически рекомпонуются, чтобы уместиться в этот регион. Странно, что это не было сделано изначально, но тем не менее скорость перемещения сложных оконных приложений с кучей мелких прямоугольников и картинок (типа местного Finder) ощутимо подросла Ну и забавы ради добавлен метод screen.blur(), применяющий эффект размытия к указанному региону и, опционально, накладывающий цветовой фильтр, а также виджет GUI.blurredPanel, чтобы создавать окна с заливкой в стиле AcrylicBrush из UWP Вообще изначально было реализовано полноценное размытие по Гауссу, но, учитывая мизерные размеры экранов, оказалось, что простого box blur будет более чем достаточно, и визуальной разницы нет. Вопрос прожорливости остается за кадром:
-
0 балловТеперь будут метки дисков как в Windows! Эта библиотека поможет вам! Кроме того, загрузочный диск всегда помечается как "A:"! А врем. файловая система как "Z:"! Крута да? Установка : pastebin run z5kg8fPy В придачу к этой штуке есть функция! table disksLabels = computer.getDL() Обновление v1.1! Теперь номера дисков в алфавитном порядке!
-
0 балловДля начала можно хотя бы ознакомиться с кодом скрипта. Он как раз и работает через mount/umount.
-
0 балловв опенос вроде как файловая система почти как на линуксе. просто примонтируй свой диск например как /mnt/c. (Я таким не занимался и не проверял работает ли)
-
0 баллов
-
0 балловКак то слишком трудно и непонятно лучше сам постараюсь сделать инсталлятор
-
0 балловОказалось, что web-версия GitHub также имеет ограничение частоты запросов. Правда, OpenComputers настолько сильно ограничивает скорость приёма данных, что ограничения самого GitHub перестают играть реальную роль. Я обнаружил это случайно во время поиска по двум ключевым словам в репозитории. Одно ключевое слово я вводил в поисковой запрос на странице репозитория, а другое слово искал на странице средствами браузера. Если слово на странице не обнаруживалось, я быстро пролистывал страницу и выбирал следующую. На пропуск каждой бесполезной страницы уходит секунды две времени. Если второе слово на странице присутствует, то времени на анализ страницы уходит больше. Примерно на 15-ой странице я вместо страницы с результатами поиска получил следующий текст: Если коротко: GitHub обнаружил злоупотребление и предлагает мне замедлиться. Фраза же "Whoa there!" вообще пытается намекнуть на мою неадекватность.
-
0 балловВроде разгрёб завал на учёбе, потихоньку возвращаюсь к OC. Вот очередная реализация, правда уже не очень простая. За то по скорости не уступает варианту с предварительно заданным списком файлов. Сам инсталятор: local internet = require("internet") local fs = require("filesystem") local shell = require("shell") local ser = require("serialization") local host = "alexcatze.pythonanywhere.com" local owner = "AlexCatze" local repo = "RacoonNet" local ref = "v0.2" local path = "/" local deploy_to = "/" function request(url) local data = "" local result, response = pcall(internet.request, url) if result then local result = pcall(function() for chunk in response do data = data .. chunk end end) end return data end files = ser.unserialize(request("http://"..host.."/?owner="..owner.."&repo="..repo.."&path="..path.."&ref="..ref)) for _,v in pairs(files) do local pth = deploy_to..v if not fs.exists(pth:match(".*/")) then fs.makeDirectory(pth:match(".*/")) end shell.execute("wget -f ".."https://raw.githubusercontent.com/"..owner.."/"..repo.."/"..ref.."/"..v.." "..pth) end Как видно, он стучится мне на pythonanywhere, откуда и берёт список файлов. Вот код с pythonanywhere: from flask import Flask from flask import request import requests import json def request_url(url, result): r = requests.get(url) j = json.loads(r.text) for x in j: if x["type"] == "file": result = result + "\"" + x["path"] + "\"," else: result = request_url(x["url"],result) return result app = Flask(__name__) def main(): uname = "AlexCatze" token = "тут мой токен, вам я его не скажу!!!" if uname != request.args["owner"]:#Проверка, что бы другие не использовали мой лимит return "{}" result = request_url("https://"+uname+":"+token+"@api.github.com/repos/"+request.args["owner"]+"/"+request.args["repo"]+"/contents"+request.args["path"]+"?ref="+request.args["ref"],"{") result = result + "}" return result app.add_url_rule("/", "main", main,methods=['GET']) Тут мы получаем запрос, из него извлекаем нужные данные. Потом используя api ключ(тогда лимит запросов 5000 в час), рекурсивно получаем список файлов, и отправляем его на клиент. Вечером подробно распишу, как это настроить.
-
0 балловА если отказаться от скачивания web-версии файла и разбирать сразу ссылку, как говорилось здесь: То время сократится до 90-100 секунд. А если web-версию использовать лишь для подстраховки при отказе обслуживания API, то время сократится ещё сильнее. @hohserg Мы выше разбирали вариант с API, но есть трудность:
-
0 баллов
-
0 балловВот два инсталятора: Первый парсит странички и получает список файлов: local owner = "AlexCatze" local repo = "RacoonNet" local branch = "v0.2" local internet = require("internet") local fs = require("filesystem") local shell = require("shell") function request(url) local html = "" local result, response = pcall(internet.request, url) if result then local result = pcall(function() for chunk in response do html = html .. chunk end end) end return html end function parse( html,sHead, sTail, fnc) local pTail, pHead = 1 while true do pHead = html:find( sHead, pTail, true ) if not pHead then break end pTail = html:find( sTail, pHead+#sHead, true ) if not pTail then break end fnc( html:sub(pHead+#sHead,pTail-1) ) pTail = pTail+#sTail end end function get_files(url) local result = request(url) if result then parse(result, 'data-pjax="#repo-content-pjax-container" href="', '">', function(s) result = request("https://github.com"..s) os.sleep(0) if result then os.sleep(0) local raw parse(result, '/raw/', '" id="raw-url"', function(s) raw = s end) if raw ~= "" and raw ~= nil then local path = "/"..raw:match("[^/]/(.*)") if not fs.exists(path:match(".*/")) then fs.makeDirectory(path:match(".*/")) end shell.execute("wget -f ".."https://raw.githubusercontent.com/"..owner.."/"..repo.."/"..raw.." "..path) os.sleep(0) else os.sleep(0) get_files("https://github.com"..s) end end end) end end get_files("https://github.com/"..owner.."/"..repo.."/tree/"..branch) У второго же список файлов заранее задан(используя мою утилитку): local shell = require("shell") local fs = require("filesystem") local prefix = "https://raw.githubusercontent.com/AlexCatze/RacoonNet/v0.2" local files = {"/bin/chat.lua","/bin/chat_server.lua","/bin/loader.lua","/bin/mc.lua","/bin/ping.lua","/bin/rnconfig.lua","/bin/routconf.lua","/bin/router.lua","/bin/webserver.lua","/bin/wr.lua","/boot/05_config.lua","/etc/config/mc.cfg","/etc/config/sys.cfg","/etc/lang/en.mc.lang","/etc/lang/ru.mc.lang","/etc/lang/ru.router.lang","/etc/themes/monochrome.thm","/etc/themes/redstone.thm","/etc/themes/standart.thm","/lib/forms.lua","/lib/opennet.lua","/lib/racoon.lua","/lib/racoonnet.lua","/lib/rainbow.lua","/lib/rn_modem.lua","/lib/rn_stem.lua","/lib/rn_tunnel.lua","/lib/stem.lua","/www/index.html","/www/second.html",} for _,v in pairs(files) do if not fs.exists(v:match(".*/")) then fs.makeDirectory(v:match(".*/")) end shell.execute("wget -f "..prefix..v.." "..v) end Оба настроены на скачивание одинаковых файлов. Но первый делает это за семь минут, пятьдесят три секунды, а второй за ноль минут, двенадцать секунд. Результат на лицо. Вывод: первый вариант мало применим. Можно либо использовать второй вариант, либо выносить получение списка файлов за пределы майнкрафта.
-
0 балловКстати, да. С утра мне это тоже показалось бессмысленным. Нам же не обязательно скачивать и разбирать web-страницу файла. Достаточно разобрать ссылку! И если обнаружена ссылка на файл, то можно сразу скачивать её raw-версию: https://github.com/{AUTHOR}/{REPO}/tree/{BRANCH}/{PATH} https://github.com/{AUTHOR}/{REPO}/blob/{BRANCH}/{PATH}/{NAME} https://raw.githubusercontent.com/{AUTHOR}/{REPO}/{BRANCH}/{PATH}/{NAME} Строки ссылок короткие, поэтому тут можно смело применять шаблоны, не опасаясь TLWY.
-
0 балловКак конечную точку я её и использую, а вот с начальной нужно возиться. В теории, можно получение списка файлов , возложить на плечи какого нибудь heroku и pythonanywhere.
-
0 балловСам разбор работает очень быстро, если использовать find без шаблонов. Медленно работает получение страницы, тратя один такт времени на каждый кусок. А кусков много, Web-версия гораздо объёмнее, нежели API. Очень странный подход у владельца гитхаба – ограничивать быстрый и компактный вариант, не ограничивая медленный. С этим я согласен. Но инсталляция требуется один раз, на эксплуатации программы это никак не скажется. Зато программист может не тратить своё внимание на обновление установщика при каждом изменении. Но я не настаиваю на этом решении. Я могу лишь предлагать. Почему же бессмысленно? Фраза id="raw-url" встречается на странице лишь один раз или не встречается вовсе.
-
0 балловСейчас попробовал. TLWY нету, но работает это краааайне медленно. Сейчас воюю с парсингом raw ссылки, но что-то мне кажется, что это бессмысленно. Первый вариант, с предварительно заданным списком файлов хоть и требует потратить минуту на задание этого самого списка, но в перспективе работает на пару порядков быстрее.
-
0 балловТогда я не вижу другого варианта кроме использования find без шаблонов. Код распухнет строк на 10, но, как ни странно, он работает гораздо быстрее библиотечных функций: local sHead, sTail = 'data-pjax="#repo-content-pjax-container" href="', '">' local pTail, pHead = 1 while true do pHead = html:find( sHead, pTail, true ) if not pHead then break end pTail = html:find( sTail, pHead+#sHead, true ) if not pTail then break end print( html:sub(pHead+#sHead,pTail-1) ) pTail = pTail+#sTail end На моём компьютере этот код можно выполнить примерно 1-1.5 тысячи раз до наступления TLWY, запас огромный.
-
0 балловПопробовал, веб в версии отрабатывает, а в локальной всё тот же TLWY.
-
0 баллов@AlexCatze Предлагаю вместо этой конструкции: html:gsub( 'data%-pjax="#repo%-content%-pjax%-container" href="(.-)">', function(s)os.sleep(0)print(s)end ) использовать такую: for s in html:gmatch( 'data%-pjax="#repo%-content%-pjax%-container" href="(.-)">')do os.sleep(0)print(s)end Работает раза в два быстрее. Web-версия оцелота успешно отработала этот код.
-
0 балловВозможно. В любом случае, на нормальном майне смогу проверить только в понедельник.
-
0 балловУ меня аналогичный опыт. Но это очень странно. Веб-версия оцелота отработала до истечения таймаута на два порядка больше итераций пустого цикла, чем в игре на моём компьютере. Зато при обработке gsub почему-то валится в TLWY. Может, Ocelot кривоват?
-
0 баллов@AlexCatze Похоже, на этом железе и на таком объёме данных gsub не успевает выполнить даже одну итерацию за отпущенный ему таймаут. Жаль. Придётся использовать более сложные способа разбора.
-
0 баллов
-
0 балловэто легко сделать, просто нужно переделать чуточку PrettyDisks и всё
-
0 балловЧто-то в этом духе, а то с кучей адресов, которые имееют большую длину тоже не всегда удобно работать, хоть и есть component.proxy(component.get()).
-
0 баллов
-
0 балловрасскажи ка поподробнее. Чтоли метки как "A:", "B:", "C:" для компонентов любых да? И замена функции component.proxy своей component.proxy, которая реагирует также на метки как "A:", "B:", "C:"?
-
0 баллов))) прилепил одно из убогих свойств винды))) без обид, но в винде это косяк вселенский, зачем портировать такие неудачные вещи)
-
0 балловЭто как? Так что-ли: /media/1 /media/2 /media/3 Вместо /media/abbbafa3-bfafb-ab7f-bfae-abe6a8e7 ... и т.д
-
0 баллов
-
0 балловче за какон? Алфавитный порядок скоро будет. НО! Системный и времменый диски будут всегда "A:" и "Z:" для большего удобства
-
0 балловНу только если ради этого =) А я адресами компонентов такую фишку провернешь? Если да, то это действительно будет полезно
-
0 баллов
-
0 балловСобственно вопрос тот же: а нафига?. И какой от этого практический смысл?
-
0 баллов
Эта таблица лидеров рассчитана в Москва/GMT+03:00
