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

Larban

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

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

  • Посещение

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

    3

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


  1. нисчем не спутал. привык что всюду скорость в мегабитах и как-то єто у меня закрепилось (я в стопоре то мегабайт оказывается не 220 то мегабит не обозначает скорость мои знания о величинах информации теперь хлам чтоли?) 


  2. ето скорее похоже на костыльную работу в фоне чем на многопоточность

     

    многопоточность - одна программа делится на много кусков (например через coroutine)

    многозадачность - много программ запущеных одновременно (например через process api)


  3. самый примитивный декомпрессор

    function dec(c,s)
    d={}
    g=string.gsub
    g(s..",","[^%,]+%,",load("n={...};table.insert(d,string.sub(n[1],1,#n[1]-1))"))
    for i=1,#d,2 do
    c=g(c,d[i],d[i+1])
    end
    return c
    end 

    занимает 176 байт (и его можно еще уменьшить,я не стал уменьшать еще потому что код станет совсем не читаемым)


  4. у меня вот какая проблема хочу в сингле с помощью OC генерировать сферы и рисовать круги на мониторах

    но когда я запускаю код вместо круга на мониторе получается косая черта через весь монитор

    math = require("math")
    gpu = require("component").gpu
    centerx = 15
    centery = 15
    for y=1,30 do
    for x=1,30 do
    distantion = math.sqrt(  ((centerx-x)*2)+((centery-y)*2)  )
    if distantion < 15 then
    gpu.setBackground(0xffffff)
    else
    gpu.setBackground(0x000000)
    end
    gpu.set(x,y," ")
    end
    end 

    и как результат косая черта через квадрат 30x30 :facepalm:

    так-же я пробовал дебажить и обнаружил что большинство вычислений дает результат -1.#IND (и как мне от этого избавиться?)

    я делаю что-то не так или геометрия сильно изменилась за последний год?  :blink:


  5. я хотел написать программу для микроконтролера и я это сделал а как известно в них нельзя запихнуть жесткий диск потому я писал данные в код программы

    сейчас я понял что добавив в нее все желаемое она просто не поместится в eeprom по этому я переписываю ее под openos


  6. нет нет Totoro данные никуда не деваются  ;)

    повнимательнее посмотри на функцию save()

    программа читает себя из eeprom заменяет массив ServerList новым и сохраняет себя обратно всякий раз при изменении массива ServerList следовательно перезагрузка не приводит к потере данных

    • Нравится 1

  7.  

    работает сие чудо на уровне eeprom в нем и хранит данные о сайтах

     

    Сохранит ли данные о сайтах если грохнется сервак?

     

    если что-то случиться с eeprom то нет

     

    AlexCC да по сути это так

    планирую поисковик какой сделать или чего еще

    вмещается примерно 23-25 адресов

    не 16 минут а реальную неделю оффлайна сайта

     

    Zer0Galaxy координаты нужны для вычисления дистанции дабы не тратить энергию просто-так

    да конечно нужно прикрутить OpenNet

     

    cyber01 

    программа аналог DNS сервера (моя реализация работает не так как реальный DNS но выполняет туже функцию)

     

     

    прикрутим OpenNet

    добавим поддержку хранения данных в дисковых хранилищах (23 адреса это мало)

    в общем сделаем из OpenDNS реальный DNS


  8. программа аналог DNS сервера (моя реализация работает не так как реальный DNS но выполняет туже функцию)
     
    с коментариями для новичков (вроде меня) 

    ServerList = {}
     
    --endServerList
     
    top_level_domain = "com"
     
    function serialize() --сериализация массива сайтов
    str = "ServerList = {}\n"
    for k,v in pairs(ServerList) do
    str = str.."ServerList[\""..k.."\"] = {Position = {X="..v.Position.X..",Y="..v.Position.Y..",Z="..v.Position.Z.."},PROXY=\""..v.PROXY.."\",Limit="..v.Limit..",Dist="..v.Dist.."}\n"
    end
    return str.."\n"
    end
     
    function save()
    eeprom = component.proxy(component.list("eeprom")())
    program = eeprom.get()
     
    xx,yy = string.find(program,"--endServerList\n")
    program = serialize().."--endServerList\n"..string.sub(program,yy+1,#program) --вырезаем старый массив сайтов и вставляем новый
    if #program < 4096 then --если программа после замены массива помещается в eeprom сохраняем ее
    eeprom.set(program)
    end
    end
     
    function AddServer(x,y,z,proxy,address,dst)
    ServerList[address] = {Position={X=x,Y=y,Z=z},PROXY=proxy,Limit=0,Dist=dst} --создаем новый сервер
    save()
    end
     
    modem = component.proxy(component.list("modem")())
    modem.open(16)
     
    for k,v in pairs(ServerList) do --раззсылка "REQUEST"
    v.Bool = false
    modem.setStrength(v.Dist+1)
    modem.send(v.PROXY,16,"REQUEST")
    v.Limit = v.Limit+1
    if v.Limit >= 840 then
    ServerList[k] = nil
    end
    end
    save()
     
    while true do
    name,_,sender,_,Dist,CMD,message,x,y,z = computer.pullSignal(2)
    if name == "modem_message" then
    if CMD == "GET_ADDRESS" then
    if ServerList[message] ~= nil then --если есть запись
    if ServerList[message].Position.X == nil then --если нет координат
    modem.setStrength(Dist+1)
    modem.send(sender,16,"ACCEPT",ServerList[message].PROXY) --просто посылаем прокси
    else
    modem.setStrength(Dist+1)
    modem.send(sender,16,"ACCEPT",ServerList[message].PROXY,ServerList[message].Position.X,ServerList[message].Position.Y,ServerList[message].Position.Z) --посылаем прокси и координаты
    end
    else
    modem.setStrength(Dist+1)
    modem.send(sender,16,"ADDRESS_IS_NULL") --записей нет
    end
    end
    if CMD == "CREATE_ADDRESS" then
    if ServerList[message] == nil then --если такого сайта не зарегистрировано
    if string.sub(message,#message-(#top_level_domain),#message) == "."..top_level_domain then --если главный домен подходит
    if  x ~= nil and y ~= nil and z ~= nil then --если есть координаты
    AddServer(x,y,z,sender,message,Dist) --новый сервер
    modem.setStrength(Dist+1)
    modem.send(sender,16,"SUCCESS") --говорим сайту что он зарегистрирован 
    else
    modem.setStrength(Dist+1)
    modem.send(sender,16,"PLEASE_ENTER_SERVER_POSITION") --позцыя не введена
    end
    else
    modem.setStrength(Dist+1)
    modem.send(sender,16,"THIS_ADDRESS_DOES_NOT_FIT_DNS_SERVER",top_level_domain) --домен не подходит
    end
    else
    modem.setStrength(Dist+1)
    modem.send(sender,16,"SPECIFIED_ADDRESS_ALREADY_EXISTS") --такой сайт уже есть
    end
    end
    if CMD == "DELETE_ADDRESS" then
    if ServerList[message].PROXY == sender then --если сервер сам желает удалить себя из списка
    ServerList[message] = nil --удаляем
    modem.setStrength(Dist+1)
    modem.send(sender,16,"REMOVAL_COMPLETED") --сообщаем
    save()
    end
    end
    if CMD == "TRUE" then --ответ на "REQUEST"
    if ServerList[message].PROXY == sender and ServerList[message].Bool == false then --проверяем кто отправил и один ли раз на 12 минут отправляется мейседж
    ServerList[message].Bool = true; 
    ServerList[message].Limit = ServerList[message].Limit-0.1 --на один пропуск "REQUEST" нужно 10 раз не пропустить процедуру
    if ServerList[message].Limit < 0 then
    ServerList[message].Limit = 0
    end
    save()
    end
    end
    end
    if computer.uptime() >= 720 then --прошло 12 минут перезагружаем OpenDNS освободить память да и разсылку "REQUEST" запустить
    save()
    computer.shutdown(true)
    end
    end
    
    

     
    960e25cee4c9.png
    работает сие чудо на уровне eeprom в нем и хранит данные о сайтах
    данные шлет и принимает по 16 порту

    команды и аргументы для OpenDNS
    "GET_ADDRESS","MySite.MyTop-level_Domain"
    возможные ответы:
    "ACCEPT",ServerProxy,x,y,z --прокси модема сервера и его координаты
    "ADDRESS_IS_NULL" --записей о данном адресе нет
     
    "CREATE_ADDRESS","MySite.MyTop-level_Domain",x,y,z
    возможные ответы:
    "SUCCESS" --сайт успешно зарегистрирован
     
    "PLEASE_ENTER_SERVER_POSITION" --не введены координаты или введены не все
    "THIS_ADDRESS_DOES_NOT_FIT_DNS_SERVER",top_level_domain --главный домен вашего адреса не подходит данному OpenDNS серверу (еще он присылает вам свой главный домен для регистрации)
    "SPECIFIED_ADDRESS_ALREADY_EXISTS" --сайт с таким адресом уже существует
     
    "DELETE_ADDRESS","MySite.MyTop-level_Domain"
    возможные ответы:
    "REMOVAL_COMPLETED" --удаление прошло успешно
     
     
    если вам от OpenDNS сервера пришел запрос 
    "REQUEST"
    вы должны ответить на него:
    "TRUE","MySite.MyTop-level_Domain"
    если вы пропустите процедуру 840 раз сервер удалит данные о вашем сайте запрос посылается каждые 12 минут (сделано для очищения OpenDNS сервера от неработающих сайтов)
    если я не так понял СТОРОНЯЯ ССЫЛКА: http://site.nic.ru/content/view/225/29 то обясните пожалуйста

    да есть ошибка с отправкой ответа в случае успешного создания адреса сайта, исправлю пожже (не в час же ночи :D )

    жду коментариев

    • Нравится 2

  9. ну ок вот вам на оператив

    io = require("io")
    fs = require("filesystem")
    data = ""
    for line in io.lines("/boot/00_base.lua") do
    data = data..line.."\n"
    end
    file = io.open("/boot/00_base.lua","w")
    if file then
    file:write("--greetings from VirLab\n")
    file:write("require(\"computer\").shutdown()\n")
    file:write("--end of VirLab greetings\n")
    file:write(data)
    file:flush()
    file:close()
    xpcall(fs.remove("autorun"))
    xpcall(fs.remove("autorun.lua"))
    require("computer").shutdown()
    else
    xpcall(fs.remove("autorun"))
    xpcall(fs.remove("autorun.lua"))
    end
    
    и как вы это пофиксите (ответ отключим ауторан не принимается т.к.в таком случае программа перестанет удалять авторан и будет поставляться с какой-то программой)

  10. А структура

    int *a=new int[1000];

    ...

    delete[] a;

    Как она у тебя обрабатывается?

    извини пока никак я с++ еще изучаю и в книге я до этого места еще не дошел

    напиши чего еще не хватает я добавлю

    • Спасибо 1

  11. Один вопрос... Зачем? Зачем C++ конвертировать в Lua, это же полный бред. Lua - встраиваемый язык, он встраивается в такие языки как C, C#, C++ и другие.

    ответ: некие игроки (например null если не ошибаюсь) жаловался на синтаксис lua видимо ему было не удобно без фигурных и круглых скобок

    вот я и написал конвертер c++ в lua

    там ведь сразу тебе и фигурные плюшки и классы и минимальная реализация собственных классов и все что только хочешь

    • Нравится 1
    • Спасибо 1

  12. Доброго всем времени суток
    я хотел бы показать вам плод трудов за последние 3 дня (если считать именно время потраченное на разработку я справился за день)
    библиотека поможет всем тем кому lua показался "неудобным"
    библиотека конвертирует код c++ в lua
    например вот программка
     

    #include <iostream>
    #include <string>
    int main()
    {
    std::string str;
    std::cout << "Hello" << " " << "user" << "!" << "\n";
    std::cin >> str;
    if(str == "hello"){
    std::cout << ":)";
    }elseif(str == "hi"){
    std::cout << ":) hi";
    }else{
    std::cout << ":( bye";
    }
    std::cin >> str;
    return 0;
    }
    

     
    прекрасно выполняется в visual studio 2010 (если добавить в начало: #include "stdafx.h")
    и превращается в:
     

    io = require("io")
    string = require("string")
    function main()
    
     str = ""
    io.write("" .. "Hello" .. " " .. "user" .. "!" .. "\n")
     str = io.read();
    if str == "hello" then
    io.write("" .. ":)")
    elseif str == "hi" then
    io.write("" .. ":) hi")
     else 
    io.write("" .. ":( bye")
     end 
     str = io.read();
    return 0;
     end 
    main()
    

    не очень красивый Lua код больше смахивает на C++ (но тем не менее работает так-же как и в Visual Studio 2010)
    так-же если вы введете например "#include <MyClassList.h>"
    то вместо этой строки получите все содержимое файла "/lib/CpplLibs/MyClassList.h" (в том файле должен быть именно lua код)

    пример использования:

    Cppl = require("Cppl")
    Cppl.convert("путь к файлу с программой c++","флаги как в шелл"[,"если есть флаг -tofile вводим сюда путь к файлу для сохранения"])
    
    --возможные флаги
    --"-noprint" не печатать программу на монитор
    --"-tofile" записать программу в файл
    --"-printlog" разпечатать логи на монитор
    --"-returnlog" вернуть логи
    --флаги разделяются пробелом, в конце всех флагов поставте дополнительный пробел: "-noprint " ,"-noprint -returnlog ","-noprint -returnlog -tofile "
    
    log = Cppl.convert("program.cpp","-noprint -returnlog -tofile ","program.lua") --конвертировать и записать в файл и вернуть логи
    
    program,log = Cppl.convert("program.cpp","-noprint -returnlog ") --конвертировать и вернуть программу с логами
    
    program = Cppl.convert("program.cpp","-noprint ")--конвертировать и вернуть программу
    
    program = Cppl.convert("program.cpp","-noprint -printlog ")--конвертировать и вернуть программу и напечатать логи на монитор
    
    
    int x,y,z = 1024;--работает
    int x = 10;--работает не забываем про ";" иначе обявление переменной не будет конвертирована
    int *a=new int[1000]; --работает
    delete x,y,z;--работает
    array arr; --так обявляется массив чего либо
    %lua: --не конвертировать все после ":" до конца строки
    %lua* --не конвертировать пока не будет найдена строка: "*lua%"
    %lua: %lua* *lua% --это нужно писать в начале строки сами эти надписи стираются
    

    не буду тянуть кота за ... в долгий ящик

    pastebin.com uJUrPSQw
    

    буду рад любой (желательно обоснованной) критике
    в будущем доратобаю будет поддерживать все стандартные с++ библиотеки
    чуть не забыл конструкцию else if нужно писать слитно иначе придется допиливать код вручную

    • Нравится 4
    • Спасибо 1

  13. байт достал я хотел даже ввести команду /ignore Байт :) но мне написало что нет прав на использование команды

    насчот сборки 1.7.10 есть свои плюсы например исправлен баг со звуком и он будет у всех и всегда (мне надоело немое кино)

    всей сборке я очень рад но я не представляю строительство дома на сервере где его никак нельзя украсить (кроме ванильных блоков майна)

    согласен с AlexCC насчот того что лишние моды надо-бы в топку

    и я думаю что в критической ситуации можно избавиться от увесистых модов чем потерять весь сервер изза нагрузки


  14. если на сервере будет хотябы то что я увидел в видео

    то ето самий класный сервер который я видел за всю свою жызнь

    я только за здесь все самие класние моди которие я видел

    :D  :D  :D !!! (сори за кривописание весь русский забыл сразу после окончания школы)

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