Лидеры
Популярный контент
Показан контент с высокой репутацией 22.07.2022 во всех областях
-
4 балла
-
3 баллаПоясню за хейт по поводу орфографии, говорю лично за себя, но предполагаю что возможно и у других участников форума, текст с явными и грубыми орфографическими ошибками вызывает такие же чувства и эмоции. Дело всё в том, что такой текст, трудно читать, мы как привыкшие с детства видеть текста написанные грамотно, такие текста для нас легко читаются, а когда мы встречаемся с текстом написанным без грамотно, с ошибками, мы вынужденны напрягать своё внимание, для чтения, а напрягаться очень лень, трудно, и вызывает жжение в области ниже копчика. Посему, рекомендую автору, если он не может самостоятельно выявить в своём тексте орфографические ошибки, хотя бы пользоваться word или онлайн-сервисом по типу https://rustxt.ru/check-spelling
-
2 баллаЯ может плохо смотрел, но по своему опыту скажу что если избавится от json и на клиенты слать сразу lua table, можно увеличить скорость обработки данных в разы.
-
1 баллЧто такое RemoteOS RemoteOS - это мост для связи OpenComputers с внешним миром, написанный на языке C# (.NET 6.0). В чём отличие RemoteOS от уже существующих решений Начнём с самого очевидного и главного - на сервере имеется (почти) точная копия API OpenComputers. Это позволяет не только использовать подсказки в коде при работе с мостом в IDE но и проверять данные подаваемые в методы ещё до отправки их на компьютер OpenComputers(далее машина). Так-же такой подход позволяет реализовать кэширование, которое даёт возможность в некоторых местах не дёргать постоянно машину для опроса актуальных значений... Из-за того что на сервере наклёпано столько архитектуры он не такой легковесный как остальные мосты... Мой мост работает не из под OpenOS а прямо с EEPROM'а, что позволяет значительно снизить минимальные системные требования для работы этого моста но при этом это же отличие значительно его ограничивает - будут недоступны все те удобненькие библиотеки из опенос, то-есть нельзя работать ни с чем кроме того что предоставляет lua и клиентская ос моста... Не нужно запрашивать сигналы с машины, она сама их шлёт серверу... Какие у RemoteOS системные требования Для машины - интернет карта и EEPROM прошитый на клиентскую ос RemoteOS Для сервера - 1 открытый сетевой порт чтобы иметь связь с машиной и достаточная вычислительная мощность чтобы суметь запуститься а затем отсылать пакеты машинам, получать от них ответ и обрабатывать этот ответ... Как же всё таки пользоваться RemoteOS Начнём с того что C# - не самый удачный выбор для связки с LUA ибо C# это строго типизированный яп а луа не очень...и подгонять сервер под все причуды луа кода было тем ещё приключением...но у меня вроде как вышло, так что посмотрим как всем этим добром пользоваться... Ловля подключений: Компоненты: Сигналы: Выполнение произвольного кода: Директивы предпроцессора: Веб сервер: Какие у меня планы на RemoteOS [+] Планирую добавить документацию в код, чтобы можно было прямо в IDE зачитать что конкретный метод делает... [+] Хочу сделать веб-интерфейс для управления машинами Хочу довести кэширование до ума, чтобы надо было дёргать машины ещё меньше Может быть добавлю поддержку локальной(внутриигровой) сети на сетевых картах/ретрансляторах чтобы ещё больше снизить минимальные требования для клиентской ос Ссылки Репозиторий проекта: Тык (Github) Клиентская ОС: Тык (Github) Демо-видео: Тык (Яндекс диск)
-
1 баллНе поленился, и всё же открыл свой git сервер, что бы найти код этого безумия php код серверной части: function giveItemsListBysearchKeyWord() { //функция поиска в списке предметов по ключевому слову. Дальнейшая расфосовка результата по страницам и отдача готового результата клиенту include 'connectTodb.php'; $ItemsListForClient; $giveItemsListToClientArray = null; $getJsonDataFromClient = json_decode($_GET['jsonData'], true); //var_dump($jsonDataFromClientsDBitems); $searchKeyWord = strval($getJsonDataFromClient['dataFromClient']); //ключевое слово, для поиска по базе данных. $selectItemsListBysearchKeyWord = $mysqli->query("SELECT itemLabel, itemDamage, itemName, itemUUID, itemPriceCoins, itemmaxSize, canCraft, itemOnSaleStatus FROM items_market WHERE itemOnSaleStatus = 1 and itemLabel like '%$searchKeyWord%'"); foreach ($selectItemsListBysearchKeyWord as $key => $value) { //Поиск совпадения по ключевому слову из GET запроса, и забивка в новую таблицу, что бы в дальнейшем побить это всё на страницы и строки. if (!empty($value)) { //var_dump($row); $ItemsListForClient[] = array( "itemUUID" => $value['itemUUID'], "itemDamage" => $value['itemDamage'], "itemName" => $value['itemName'], "itemLabel" => $value['itemLabel'], "itemmaxSize" => $value['itemmaxSize'], "canCraft" => $value['canCraft'], "itemPriceCoins" => $value['itemPriceCoins'] ); //var_dump($ItemsListForClyient); } } if (!empty($ItemsListForClient)) { $countallItems = count($ItemsListForClient); //выяснение сколько в общем элементов в массиве allItems и запись этого результата в переменную $countPage = ceil($countallItems / 15); // деление на количество элементов в массие, строк на странице будет 16 $ArrayWalkStart = 0; $ArrayWalkEnd = 15; for ($z = 1; $z <= $countPage; $z++) { //echo "Z:".$z." "; //giveItemsListToClientArray[] = $z; $giveItemsListToClientArray[] = splittItemsListIntoPages($ArrayWalkStart, $ArrayWalkEnd, $ItemsListForClient); $ArrayWalkStart = $ArrayWalkStart + 15; $ArrayWalkEnd = $ArrayWalkEnd + 15; } echo json_encode($giveItemsListToClientArray); //var_dump($giveItemsListToClientArray); } else { echo json_encode("searchReturnEmpty"); //это если ни чего не найдено } } Библа что использовалась на стороне клиента для кодирования и декодирования запрос-ответа. https://github.com/rxi/json.lua/blob/master/json.lua Код на стороне клиента. Да тут кусок, но суть думаю будет ясна. То есть, написал в строке поиска слово, нажал enter, запрос улетел на сервер в json формате, потом принимаю ответ и декодируя json строку, если не пусто, то рисую таблицу с результатом на экран. if signal[1] ~= "key_down" and signal[1] == "key_up" and specChar == 28 then --28 это номер клавиши enter local response = getRequest(whereSearchMethod,searchSaveTypeInputText) if response then if response == "searchReturnEmpty" then pageNum = 1 searchReturnEmpty_KeyTouchToRow = 0 whichTableToUseSwitch = searchReturnEmptyTable --Бьём пустой список предметов. tableToUse = whichtableToUse() eventDrawTablePageAndClickRow(pageNum, tableToUse, nil, 1, "itemLabel","itemPriceCoins") --вызов отрисовки страницы fill(2,5,78,18, " ", 0x303030) -- цвет фона в itemlist set(nil, 12, "Хм, странно, но похоже что ни чего не найдено...", 0x303030, 0xffc107) set(nil, 14, "Попробуй поискать что-нибудь другое!", 0x303030, 0xffc107) else pageNum = 1 searchReturnEmpty_KeyTouchToRow = 1 searchOnServerInItemsList = response whichTableToUseSwitch = searchOnServerInItemsList tableToUse = whichtableToUse() eventDrawTablePageAndClickRow(pageNum, tableToUse, nil, 1, "itemLabel","itemPriceCoins") --вызов отрисовки страницы end else FormOutOfService("Ошибка поиска, сервер не доступен!") end end
-
1 баллЗапрашивается синхронно..идея с методом хорошая, обязательно добавлю) Ну по факту из синхронных аналогов методов там только свойства, половину из которых юзать вообще ни разу не хорошая идея и лучше вообще выключить в свойствах проекта))) Ну вообщем окей, может быть протыкаю Async на всех методах в будущем...
-
1 баллЗатестил, очень интересная и довольно удобная реализация, особенно понравилась подписка на ивенты компонентов. Хотя есть вопрос, не дающий покоя: почему некоторые методы машины синхронны (components.TryGet), а другие асинхронны (gpu.Bind), если и тот, и другой выполняются на одной синхронной машине? В случае с Bind я асинхронно ожидаю результат привязки, это логично. А почему тогда список компонентов возвращается синхронно? А в целом было бы очень клёво иметь нейминг по конвенциям майков или как минимум текстовые summary с пояснением, что вот этот метод асинхронен, а этот нет:
-
1 баллВариант крупного шрифта с поддержкой русской и английской раскладки набор символов https://pastebin.com/XNLGNrj9 letter.lua пример использования local letter = require("letter") local unicode = require("unicode") local com = require ("component") local gpu = com.gpu local function print_letters(x,y,txt,color) gpu.setForeground(color) for i = 1, unicode.len(txt) do local sym = unicode.upper(unicode.sub(txt,i,i)) gpu.set(x,y,letter[sym][1]) gpu.set(x,y+1,letter[sym][2]) gpu.set(x,y+2,letter[sym][3]) x = x + letter[sym][4] end end os.execute("cls") print_letters(10,10,"привет мир",0x00FF00)
-
1 баллО чём идёт речь? Ничего не понимаю. Да, пора заканчивать с этим. Но сначала внесу ясность. Автор темы сам явился причиной предвзятого к нему отношения, и он такое отношение заслужил. Потребуется время, чтобы он смог исправить свою репутацию. Но это лишь одна сторона ситуации. Другая же сторона в том, что читатели форума не заслужили видеть эти эмоциональные разборки. Поэтому я прошу всех форумчан отказаться от агрессивных высказываний в адрес автора темы или результатов его творчества. Автору темы я уже неоднократно указывал на его некорректные высказывания в других темах. Это его часть ответственности. Другая же часть ответственности лежит на других авторах постов. Предлагаю всем отметившимся в этой теме почистить свои посты от явно недружелюбных высказываний. В противном случае я удалю их полностью. Я понимаю чувства форумчан, которых так или иначе задел автор темы, но давайте говорить о фактах и в рамках заявленной темы. Да, он пишет безграмотные тексты. Да, их очень трудно читать. Да, он выложил явно сырой продукт. Да, им сложно пользоваться. Но агрессивные высказывания не помогут решить проблему. Все эти резкие эмоционально окрашенные фразы могут лишь оттолкнуть человека от сотрудничества. И это в лучшем случае. В худшем же случае эти посты станут примером для подражания. А этого не стоит допускать. У каждого из нас есть выбор. Бренд @rootmaster уже все знают на форуме, и предполагают, что от него ожидать. Всем, кому слишком больно читать тексты автора, можете не читать. Это у меня нет такого выбора, я как модератор вынужден читать все тексты. А раньше я просматривал лишь половину тем форума, ориентируясь исключительно по авторству и тематике. Все, кто хочет высказаться о проблемах текста, высказывайтесь. Но не не перегибайте палку с эмоциями. Лучше вообще избегать эмоциональных высказываний. У нас всё-таки технический форум. То же самое касается и работы программы. Если что-то не работает, сообщайте. Если что-то кажется неудобным в работе, сообщайте. Но избегайте грязи. Всё-таки, надо признать, @rootmaster способен делать и что-то интересное. Не смотря на то, что реализация идеи подгружать необходимые функции по мере необходимости пока ещё сырая, сама идея имеет хороший потенциал. Честно говоря, не знаю, что там под капотом, но читать код нет никакого желания, т.к. я уже перенапрягся, пытаясь понять описание. Но это уже проблемы автора: читатели с трудном прочитали описание, код читать не захотели, идею не обсудили, идея умерла. Ну умерла и умерла. Не стоит рвать на себе волосы и заливать форум слезами. Может, кто-то более грамотный и аккуратный продемонстрирует хорошую реализацию.
-
1 баллБольшие растровые шрифты хорошо подходят для рекламных вывесок — бегающего текста. До появление этой библиотеки не было удобного способа использовать их в OpenComputers. Но теперь есть. pastebin get Mz7Ps5jQ /usr/lib/ocbf.lua Библиотека максимально прозрачна и сама по себе отрисовкой не занимается. Для отрисовки удобно использовать библиотеку Braille Bicycle от товарища @Totoro. Все шрифты хранятся по пути /usr/share/fonts в таком виде: /usr/share/fonts ├── IBM Plex Serif │ ├── Bold Italic.ocbf │ ├── Bold.ocbf │ ├── Italic.ocbf │ └── Regular.ocbf ├── Prosto One │ └── Regular.ocbf └── Roboto ├── Bold Italic.ocbf ├── Bold.ocbf ├── Italic.ocbf └── Regular.ocbf Для конвертирования новых шрифтов можно воспользоваться утилитой на языке Python: ocbf.py. Для ее работы необходимо установить библиотеки PIL, bitarray и tqdm (Python3). OCBF содержит в себе всего две функции: ocbf.load(family: string, style: string) — находит шрифт по указанному семейству и стилем, парсит его и возвращает объект шрифта. Если первый аргумент — это путь, то поиск производится не будет; вместо этого шрифт будет загружен из указанного файла (обязательно с расширением ocbf) ocbf.search(family: string, style: string) — находит шрифт и возвращает путь до него. Все функции ищут шрифт в директориях, указанных в переменной ocbf.path = "/usr/share/fonts:/home/.fonts:.". Из кода видно, что поиск осуществлятся в /usr/share/fonts, /home/.fonts и в текущей директории. Объект шрифта предоставляет следующие методы: font:drawChar(set: function, size: number, char: string, x: number, y: number) — отрисовывает один символ размером size используя шрифт по координатам (x; y). Функция set принимает три аргумента: координаты точки и значение 1 — точка заполнена и 0 — точка пуста. font:draw(set: function, size: number, str: string, x: number, y: number) — работает так же, как и font:drawChar, но отрисовывает сразу все символы. font:width(size: number, str: string — возвращает ширину строки с заданным размерам в точках. Помимо вышеперечисленных методов также есть свойства font.family, font.style и font.sizes. Все функции принимают аргумент size. Это высота шрифта в точках. Поскольку используя растровые шрифты невозможно обеспечить поддержку сразу всех размеров, size для разных шрифтов имеет разные допустимые значения. Для каждого размера в шрифте дублируются символы. Предоставляю также набор шрифтов Roboto — Regular Roboto — Bold Roboto — Italic Roboto — Bold Italic IBM Plex Serif — Regular IBM Plex Serif — Bold IBM Plex Serif — Italic IBM Plex Serif — Bold Italic Prosto One — Regular Все шрифты кроме Prosto One представлены в размерах 16 и 32 точек, Prosto One — 32 и 64. Имеется поддержка латиницы и кириллицы. Также стоит отметить, что для работы библиотеки необходим Lua 5.3 — используется string.unpack, побитовые операции, UTF-8. Для отрисовки текста на изображении в начале поста использовался следующий код: local ocbf = require("ocbf") local braille = require("braille") local matrix = braille.matrix(320, 200) local font1 = ocbf.load("Prosto One", "Regular") local font2 = ocbf.load("Roboto", "Bold") local font3 = ocbf.load("Roboto", "Regular") local function set(x, y, v) braille.set(matrix, x, y, v) end font1:draw(set, 64, "OCBF", 4, 1) font2:draw(set, 32, "Растровые шрифты", 4, 65) font2:draw(set, 32, "для OpenComputers", 4, 98) font3:draw(set, 32, "от LeshaInc", 4, 168) braille.render(matrix, 1, 1)
-
0 балловспасибо огромное за моральную за моральную поддержку да, идея сыроватая, но позволяет сэкономить очень много оперативной памяти, хоть и ценой шума hdd, меня он сам слегка напрягает, но в следующим обновлении я сделаю выгрузку опциональной и опция эта будет включаться автоматически, при недостатке оперативной памяти а еще сделаю вызов через метатаблицу, чтобы было удобнее программисту (мне ) а идею мертвой не считаю, я уверен найдет свое применения где не будь, надеюсь что если кто-то вдохновиться то укажет авторство реализацию сильно плохой тоже не считаю, вроде норм сделал, просто внутренней жабке жалко оперативки описания поправлю, упрошу для понимания, и исправлю орфографические ошибки, кой их у так много ну.. во много благодаря тому что я 24/7 в open computers
Эта таблица лидеров рассчитана в Москва/GMT+03:00
