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

num_pi

Пользователи
  • Публикации

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

  • Посещение

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

    7

Сообщения, опубликованные пользователем num_pi


  1. Выкладываю столь смешной и интересный биос, на просторы этого форума.

    Основная моя цель состоит в том, что бы этот биос не пропал и не канул в лету в небытие...

    Наслаждайтесь! Для использования, загрузить комп с openos, написать cd /tmp, edit 1 и вставить содержимое ниже, потом сохранить файл через  ctrl + s; и выйти ctrl + w, и прошить написав flash -q 1

    P.S Оригинальный автор сего шедевра, это @BadCoder и был им написан как стёб биос на topBios от root master :D
     

    Скрытый текст
    
    local init
    do
    	local component_invoke = component.invoke
    	local function boot_invoke(address, method, ...)
    		local result = table.pack(pcall(component_invoke, address, method, ...))
    		if not result[1] then
    			return nil, result[2]
    		else
    			return table.unpack(result, 2, result.n)
    		end
    	end
    
    	-- backwards compatibility, may remove later
    	local eeprom = component.list("eeprom")()
    	computer.getBootAddress = function()
    		return boot_invoke(eeprom, "getData")
    	end
    	computer.setBootAddress = function(address)
    		return boot_invoke(eeprom, "setData", address)
    	end
    
    	do
    		local screen = component.list("screen")()
    		local gpu = component.list("gpu")()
    		if gpu and screen then
    			boot_invoke(gpu, "bind", screen)
    		end
    	end
    
    	do
    		local gpu = component.list("gpu")()
    
    		local static = {
    			balls = {
    				"⡠⠊⠉⠑⢄",
    				"⢇   ⡸",
    				"⢀⠕⠒⠪⡀",
    				"⡇   ⢸",
    				"⠈⠢⠤⠔⠁"
    			},
    			meat = {
    				" ",
    				"⠉",
    				" ",
    				"⠤",
    				" "
    			},
    			konec = {
    				"     ",
    				"⡝⠑⠒⠤⡀",
    				"⡇  ⠐⡺",
    				"⠵⠔⠒⠉",
    				"     "
    			}
    		}
    
    		local screen_width, _ = boot_invoke(gpu, "getResolution")
    		local length = screen_width - 10
    
    		local buffer = static["balls"]
    
    		for i = 1, 5 do
    			buffer[i] = buffer[i] .. static["meat"][i]:rep(length) .. static["konec"][i]
    			boot_invoke(gpu, "set", 1, i, buffer[i])
    		end
    
    		computer.pullSignal(1)
    
    		local melody = { 554, 622, 622, 698, 831, -10, 740, 698, 622, 554, 622, -1, -20, 415, 415, -1 }
    		local rhythm = { 6, 10, 6, 6, 1, -10, 1, 1, 1, 6, 10, 4, -20, 2, 10, 10 }
    
    		for i = 1, 16 do
    			if melody[i] > 0 then
    				computer.beep(melody[i], rhythm[i] * 0.1)
    			elseif melody[i] == -1 then
    				computer.pullSignal(rhythm[i] * 0.1)
    			elseif melody[i] == -10 then
    				boot_invoke(gpu, "set", 7, 3, "PENIS BIOS")
    			elseif melody[i] == -20 then
    				boot_invoke(gpu, "set", 17, 3, "; FUCKING PEOPLE SINCE 1984")
    			end
    		end
    	end
    
    	local function tryLoadFrom(address)
    		local handle, reason = boot_invoke(address, "open", "/init.lua")
    		if not handle then
    			return nil, reason
    		end
    		local buffer = ""
    		repeat
    			local data, reason = boot_invoke(address, "read", handle, math.huge)
    			if not data and reason then
    				return nil, reason
    			end
    			buffer = buffer .. (data or "")
    		until not data
    		boot_invoke(address, "close", handle)
    		return load(buffer, "=init")
    	end
    	local reason
    	if computer.getBootAddress() then
    		init, reason = tryLoadFrom(computer.getBootAddress())
    	end
    	if not init then
    		computer.setBootAddress()
    		for address in component.list("filesystem") do
    			init, reason = tryLoadFrom(address)
    			if init then
    				computer.setBootAddress(address)
    				break
    			end
    		end
    	end
    	if not init then
    		error("no bootable medium found" .. (reason and (": " .. tostring(reason)) or ""), 0)
    	end
    end
    return init()

     


  2. Спустя сотни лет, теперь могу добавить подсказку всем не равнодушным. Для nbt_hash ипользовать одну функцию заказа из мода OpenPeripheral, а вот для предметов без nbt_hash использовать обычную функцию из интеграции OC. Вот пример кода про что я имею ввиду...

      function obj:requstItemToCraft(itemElement)
        local error, status = pcall(function()
          if type(itemElement["nbt_hash"]) == "string" then
            print("Заказываю: " ..
            itemElement["itemLabel"] .. " общим количеством - " .. tostring(itemElement["craftAmount"]) .. "\n")
            self.me_interface.requestCrafting(
            { id = itemElement["itemName"], dmg = itemElement["itemDamage"], nbt_hash = itemElement["nbt_hash"] },
              itemElement["craftAmount"])
            print("------------- Предмет: " .. itemElement["itemLabel"] .. " имеет nbt_hash, статус крафта НЕ ОТСЛЕЖИВАЕТСЯ! ----------------\n")
    
            return true
          else
            if self.craftQueue[itemElement["img_md5"]] == nil then
              print("Заказываю: " ..
              itemElement["itemLabel"] .. " общим количеством - " .. tostring(itemElement["craftAmount"]) .. "\n")
              local info = self.me_interface.getCraftables({ name = itemElement["itemName"], damage = itemElement["itemDamage"] })
              if #info > 0 then
                return info[1].request(itemElement["craftAmount"])
              else
                print("------------- При попытке получить рецепт крафта, шаблон куда-то исчез ----------------\n")
                return false
              end
            else
              print("------------- Предмет: " .. itemElement["itemLabel"] .. ", уже стоит на крафте, пропускаю задание на крафт ----------------\n")
            end
          end
        end)
        if not error then
          print(tostring(status))
          return false
        end
        return status
      end

     

    • Нравится 1

  3. В 07.05.2023 в 19:15, Taoshi сказал:

    На практике у меня пару лет как лежат готовые функции для обмена инвентаря игрока с сундуком / МЕ сетью посредством PIM (часть софта использовавшегося на варпе). Но сами по себе,отдельно взятые под новый проект, они далеко не готовый софт.

     

    Впрочем, заказчик похоже уже забыл чего хотел.

    Кидай, мб чего ни будь насобираем тут


  4. 45 минут назад, Taoshi сказал:

    На практике у меня пару лет как лежат готовые функции для обмена инвентаря игрока с сундуком / МЕ сетью посредством PIM (часть софта использовавшегося на варпе). Но сами по себе,отдельно взятые под новый проект, они далеко не готовый софт.

     

    Впрочем, заказчик похоже уже забыл чего хотел.

    Сделал сам, но без пима, а чисто на сундуках, норм работает.

    изображение.png

    • Одобряю 1

  5. В 09.04.2023 в 17:17, Taoshi сказал:

    В целом это, конечно, реализуемо. Но есть нюанс - отсутствие подробностей в предоставленном ТЗ. Например:

     

    Подразумевается ли использование базы данных? 

    Должен ли присутствовать графический интерфейс пользователя? 

    Должны ли производиться действия ведущие к плавке слитков при отсутствии достаточного количества оных в МЕ сети? 

     

    Если вам удастся грамотно составить задание учтя большинство нюансов, то шанс что кто-нибудь да возьмётся за оное будет гораздо выше. 

     

    Это только звучит просто,А на практике это сплошные боль и страдания, мне ли не знать ;)

    • Одобряю 2

  6. 52 минуты назад, vford сказал:

    Его гитлаб говорит об обратном) последние коммиты от 30 декабря

    Ты их содержимое видел? Один из коммитов, это всё из-за меня, я там жука нашел, по поводу eeprom внешнего, который указывается из файла


  7. В 15.01.2023 в 16:50, Dias99 сказал:

     

     

    Кхм-кхм. Она (или он) сказала (или сказал) что Pojav не подходит.

     

    Да и суть вопроса это можно ли "Запустить Оцелот на телефоне" вот я и дал ответ, а Поджав тут вообще не причем

     

     

    Для такого как по мне есть ocelot online, можешь собственную сборку поднять, и закрытся htaccess-ом от лишних глаз.


  8. 1 час назад, Dias99 сказал:

    Да можно, но это слишком Сложно и нерационально по ресурсам вес будет примерно 1.5-2гб

     

    Но если нужно вот порядок

     

    0. Убеждаемся что телефон на Android и версия Андроеда не выше 10. (Если есть РУТ, пункт с версией Андройда можно пропустить)

    1. Ставим на телефон Termux (Ставить с Play Market нельзя, только с FDroid'а)

    2. Устанавливаем в Термуксе любой дистрибутив (Лучше Убунту)

    3. Ставим в Убунту любой оконный менеджер (По типу OpenBox или i3)

    4.  Ставим в Убунту Jav'у и скачиваем Ocelot

    5 Профит!!!

     

    Подробную инструкцию можно найти в интернете.

     

    Короче не очень этот метод, но это лучше чем ничего :)

     

    !!!Всякие J2ME Руннеры не работают!!!!

    Плохой совет даешь =)

     

    Есть вариант на много лучше. Называется PojavLauncher


  9. 8 часов назад, kaka888 сказал:

    На mcskill да)

    Только из компов их читать нельзя, ip в blacklist находится, надо прокси поднимаеть допустим на php, что будет читать логи, и при запросе от планшета отдавать diff, только последние измененния.


  10. В 04.02.2022 в 16:29, SyberiaK сказал:

    Привет! Хотел попросить помочь с настройкой и переписью, но так и не нашёл никаких контактов (находил вк и дискорд, но они недоступны).

    Моя просьба: можно пожалуйста поподробнее расписать процесс установки/настройки магазина, а точнее версии "на модеме"? Буду крайне благодарен.

    Знаю как установить не модемную версию, могу расписать.


  11. В 10.08.2022 в 03:33, skorikoff сказал:

    Понадобилось написать чат между двумя компьютерами. Толком синтаксис сетевой карты я не понял, потому что не нашёл добротный гайд. Да и в принципе я чайник полный, что касается всех этих сетевых штучек. Может натолкнёте на мысль или предложите готовое решение?

    Если чат нужен только между двумя компами, проще всего это будет сделать, использовав этот компонент. Связанная_плата


  12. То есть как понял я,  у меня есть ровно 5 секунд, для занятия потока, для того что бы выполнить вычисления, и если я не успею это сделать ровно в 5 секунд реального времени то мод убьёт мой "процесс", и комп упадёт по TWYL?  


  13. Могу ли я как то узнать или высчитать, что вот сейчас machine упадёт по TLWY? Ну realTime() мне не узнать, она локальная. Я так же знаю что через 5 реальных секунд, если я не освободил поток, то machine упадёт по TLWY. Есть ли способы из под виртуального пространства, что даёт мод, из её песочницы, заранее узнать/узнавать что, вот-вот и если я не сделаю паузу в вычислениях, то machine упадёт по TLWY.


  14. 3 часа назад, Darkar25 сказал:

    @num_pi, порылся в инете и выяснил что луа из коробки не умеет конвертировать таблицы в строки (ну разве что table.concat или string.pack, но они подходят только для очень простых случаев, а для передачи например информации о результате сканирования геоанализатором нужно передавать таблицу полностью, вместе с подтаблицами)...и учитывая что на шарпе нет адекватных парсеров луа таблиц подходящих под методы конвертации рекомендуемые в интернете то за неимением альтернатив - json остаётся основным способом передачи данных с машины на сервер...чутка енкодер на клиенте покромсал(теперь он по кол-ву строк даже меньше основного кода клиента), использовал более правильные техники работы с таблицами и конкатенации строк и по идее он стал побыстрее чем до этого...
    Но если есть предложения как всё-таки избавить клиент от необходимости как-то обрабатывать таблицы лишний раз перед отправкой то буду рад выслушать :)

    Ну лично я использую костыль, но всё же рабочий. 

    function convertArraytoLuaTable(array $array)
    {
        $tmpHandle = tmpfile();
        fwrite($tmpHandle, json_encode($array, JSON_NUMERIC_CHECK));
        $data = shell_exec('/usr/bin/lua ' . realpath("decodeJsonToLuaFormat.lua") . ' ' . "'" . stream_get_meta_data($tmpHandle)['uri'] . "'");
        fclose($tmpHandle);
        return $data;
    }

    Здесь конвертация идёт из json в lua table, посредством вызова lua скрипта с диска, готовые данные можно считывать из temp файла создаваемого тобой заранее и передавать lua скрипту в качестве аргумента. Это что касается парсера lua table в json на стороне сервера. Ты имеешь ввиду, что, что бы отправить данные формат которых это таблица, её надо конвертировать в строку? И спрашиваешь как это сделать, лучшим образом, я правильно понимаю? 


  15. Не поленился, и всё же открыл свой git сервер, что бы найти код этого безумия :D

    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

     

    • Нравится 2

  16. 10 минут назад, Darkar25 сказал:

    Прости, не совсем тебя понял...на клиенты json не шлётся...json шлётся только от клиента к серверу как ответ на команду но не наоборот...или ты предлагаешь слать lua table как ответ серверу?в таком случае согласен, можно спокойно убирать огромный json.encode и на сервере сделать какой-нибудь парсер для этого добра...может быть даже сделаю так...скорее всего с ходу оно не начнет работать и придётся чуть-чуть поправить код сервера под новую структуру данных но в остальном предложение довольно дельное...

    Да я про это, хоть у тебя и в одну сторону идёт обмен, но всё же. На операцию json.encode тратится много времени, можешь даже кстати замерить с секундомером, у меня прирост в скорости обмена данными, был минимум в два раза, как сейчас помню, было 10-8 секунд, стало 4-3 в зависимости от длинны данных. Я обрабатывал поисковой запрос от магазина, искал по таблице и эту операцию поиска выполнял сервер, а потом отдавал готовую таблицу с данными. Да, знаю что это безумие, но всё же =)
    Хоть у тебя идёт только отправка, хотя я в своём магазине ещё и принимал данные в формате json, думаю всё же стоит попробовать убрать json из уравнения обмена данными.

     

×
×
  • Создать...