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

Лидеры


Популярный контент

Показан контент с высокой репутацией 20.07.2020 в Сообщения

  1. 1 балл
    Помните мост Рида? Ну так вот. Я тут изучаю Rust на досуге, и пишу мини проекты. Так и получился у меня... Stem Это интернет мост для OpenComputers. Что такое мост Для тех кто не знает что такое мост, и для чего он нужен: мост дает примерно такие же возможности как и linked карта. Он позволяет связать между собой компьютеры OpenComputers, где бы они не находились. Только мост реализует это через интернет карту. Однако по сравнению с linked картой есть один очень крутой плюс. Вы можете подключиться к своему OpenComputers компу не только с другого OpenComputers компа из Майнкрафта, но и из реального мира. Например с телефона. Или с вашего домашнего компьютера. Отличие от моста Рида Я немного по другому подошел к архитектуре проекта. Вместо попарного соединения, Stem реализует систему каналов. Работает это очень просто. Вы можете: 1) послать сообщение в канал X 2) подписаться на сообщения из канала X Количество подписчиков не ограничено. Количество клиентов которые могут посылать сообщения в канал тоже не ограничено. ID канала (по которому происходит подписка и отправка сообщений) служит заодно и паролем к нему. Поэтому если вы хотите создать публично доступный канал - просто опубликуйте его ID. А если хотите создать свой, приватный, канал - просто возьмите ID подлиннее и никому его не открывайте. ID - это последовательность любых байт длиной до 256. Число комбинаций (256 в степени 256) это огромное число, так что уникальных ключей хватит надолго. Пример local event = require('event') -- подключаем STEM local stem = require('stem') -- присоединяемся к серверу STEM local server = stem.connect('stem.fomalhaut.me') -- просим сервер присылать нам сообщения с канала 'my-channel-id' server:subscribe('my-channel-id') -- слушаем эвент 'stem_message' в цикле while true do local name, channel_id, message = event.pull('stem_message') if name ~= nil then print(channel_id, message) end end -- ...или регистрируем листенер event.listen('stem_message', function(_, channel_id, message) print(channel_id, message) end) -- мы можем посылать сообщение в канал -- (причем не обязательно быть подписанным на этот канал -- достаточно просто его ID) server:send('my-channel-id', 'hello there') -- просим сервер перестать присылать сообщение с канала server:unsubscribe('my-channel-id') -- полностью отключаемся от сервера STEM server:disconnect() Одновременно можно работать с несколькими серверами Stem и с любым количеством каналов. Библиотека stem.lua Библиотечку можно скачать напрямую по этой ссылке: https://gitlab.com/UnicornFreedom/stem/raw/master/stem.lua Либо установить через HPM: hpm install stem Подробная документация по командам библиотеки находится здесь. Сервер STEM Дефолтный сервер STEM запущен у меня на VPS по адресу: https://stem.fomalhaut.me/ Можете смело его использовать. Единственное, что это тестовый сервер пока. Может пропадать или менять протокол. Новости постараюсь писать сюда. Исходный код проекта находится тут: https://gitlab.com/UnicornFreedom/stem Вы можете скомпилировать его под свою систему и запустить где угодно. Настраивается сервер файлом stem.toml в корневой папке. Дефолтный конфиг может выглядеть так: [tcp] host = '127.0.0.1' port = 5733 [web] host = '127.0.0.1' port = 5780 [general] ping_interval = 60 Чтобы получить полностью свой отдельный и независимый сервер STEM, достаточно будет просто запустить бинарник, получившийся после компиляции. Не забудьте также положить в папку с бинарником папки static и templates. Они нужны для веб-интерфейса. Сервер мультипоточный, и очень производительный. Должен тянуть довольно большие объемы трафика. Но точных бенчмарков я не проводил. Если есть желающие - пишите в IRC, скооперируемся и померяем. 😃 Для того чтобы видеть логи сервера, используйте переменную окружения RUST_LOG. Например чтобы включить полное отображение всех логов: $ RUST_LOG=stem ./stem Веб-интерфейс Если перейти по ссылке на сервер STEM то вы увидите... веб-интерфейс. Веб интерфейс показывает счетчик активных каналов и сессий (клиентских подключений). Кроме того, он дает возможность подключиться к любому каналу STEM и поучаствовать в приеме-передаче сообщений прямо через сайт. Единственное ограничение - как ID канала, так и контент сообщений ограничивается тем, что можно закодировать в UTF-8. Ну вот и все Мост в принципе уже полностью работоспособен. Все идеи, пожелания, отчеты о багах пишите сюда, либо на issue трекер в репозитории. Если кто-нибудь хочет помочь с написанием клиента STEM на своём любимом языке программирования - обращайтесь ко мне в ЛС, IRC или пишите в этой теме. Написать клиент несложно - для примера можно глянуть на код библиотеки для OpenComputers. Она состоит всего из 150 строк кода. Enjoy! 😃
  2. 1 балл
    Кажется, часть файлов (сама библиотека) нашлась: https://github.com/AtomicScience/OCNS Там нет программ вроде смены IP и прочего, т.е. команда change_mIP работать не будет. Но сама библиотека вроде цела. (уже фантазии) А может быть, идёт разработка новой версии стека, который займёт место старого? (Скорее всего, причина прозаичнее: автору могло понадобиться место на Яндекс.Диске.)
  3. 1 балл
    Кратко Утилита для командной строки, не хуже чем те же утилиты с https://catbox.moe/tools.php. Загрузка файлов (с диска и по url), удаление, менеджмент альбомов. Все возможности API. Установка Pastebin: https://pastebin.com/kuGkdm53 Для ленивых: # pastebin get kuGkdm53 /usr/bin/catbox.lua Gist: https://gist.github.com/IS2511/e4c6a6f638609fcfa733ceeb432cfced Органический продукт! Разработан полностью на ocelot-desktop! catbox --help Может устареть если я буду обновлять программу! Usage: catbox <command> [arguments] Commands: user [userhash] - Get or set current userhash. Pass 'off' to forget set userhash file <filename(s)> - Upload files to catbox.moe url <url(s)> - Upload files from URLs to catbox.moe delete <filenames(s)> - Delete files from catbox.moe. Requires userhash album - Album Managment ('catbox album' for help) -a, --anonymous - Ignore userhash, upload anonymously -h, --help - Print this message -y, --yes - Yes to everything, skip all checks -q, --quite - Suppress all output (except sys err) and --yes Размышления Изначально писалось с мыслями об удобном хранении файлов и повышении квалификации в использовании component.internet. После написания могу сказать, что удалось только второе. Самый большой минус - отсутствие серверов catbox в России. Пинг 200-250, регулярные тайм-ауты при подключении. К тому же неудобно управлять файлами, это все-таки не менеджер, только реализация API. Для нормально работы скорее всего надо сделать что-нибудь типо веб-папки (Наводит на мысли о следующем проекте ). Кстати, использует недавно написанную мной библиотеку parg. Витают пару мыслей для улучшения либы, но пока ничего конкретного. Буду ли я делать веб-папку на catbox в будущем? Нет, пока некто (https://psychz.net, https://i.imgur.com/kqhCJ02.png) не завезет сервера колокации в Россию. От этого проекта я научился (сильно сказано) работать с component.internet.request() и данными в формате multipart/form-data, отличный опыт. Комментарии и критика приветствуются :з
  4. 1 балл
    Стоит ещё отметить, что ни один гайд или программа, которые бы мне известны были, не до конца учитывают отображение монитора, и находимые разрешения не идеальны, хотя обычно несущественно. "Правильную" формулу для нахождения пропорций я показывал в посте здесь. Но там я не останавливался на этом. Распишу подробнее. Сначала говорю сразу. "Правильная" пропорция измерений — , где — ширина экрана в блоках, — высота. Возьмём экранчик 1×1. На рисунке сверху он схематически показан. Как видно, чёрная зона, в которой показываются символы, окружена рамкой. Во-первых, это голубая рамка снаружи, по которой можно судить об уровне монитора. Если мы примем длину и ширину блока равными 16 пикселей, то толщина голубой рамки составит два пикселя. Во-вторых, есть ещё одна рамочка. На рисунке она показана серым, хотя на деле она тоже чёрная. Её толщина — 0.25 пикселей. Вторая рамка появляется потому, что содержимое экрана дополнительно смещено внутрь от голубой рамочки на 0.25 пикселя. Таким образом, вместо 4 в формуле нужно использовать 2 × (2 + 0.25) = 4.5. В посте, про который я говорил, я рассчитывал оптимальное разрешение для экрана 8×3. График из него: Абсцисса — это разница между отношением сторон точки и нужным. Ордината — площадь в "квадратных символах" (w × h). Пропорция, которой мы добиваемся для данного сетапа, по формуле равна 494/87. Лидер на графике — 159×28. Его дельта равна ~0.000411. Она больше нуля, поэтому ширина будет забита полностью, но будет внутренняя чёрная рамка сверху и снизу. Дальше я подсчитал, что её толщина составит 1/27666 высоты внутренней области (чёрной зоны на картинке выше) — это ~0.000638 пикселя. То есть с безумной точностью всё сходится. А ниже я нарисовал график, но использовал формулу не "правильную", а ту, о которой знают больше. Разрешение 159×28, которое, вообще-то, больше всего подходит, не только имеет дельту в почти −0.05, но даже не кажется самым лучшим, затмеваемый 160×28. ...И всё-таки забавно, как много можно писать о том, как подобрать оптимальное разрешение экрана.
  5. 1 балл
    Если это File Transfer Protocol (как написано в заголовке), то будьте добры, rfc959. Либо меняйте название, на какой нибудь Minecraft File Transfer Protocol (mFTP)
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...