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

Krutoy

Гуру
  • Публикации

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

  • Посещение

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

    72

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


  1. Opennet снова заработал

    Восстановлены роутеры, DNS, Internet и Update серверы

    Всё это доступно счастливым обладателям жилплощади недалеко от дата-центра (~300 блоков от телепорта).

     

     

    Как начать работу с opennet читайте в моем посте.


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

    Нас обычно спасает костыль получения времени через последнюю дату изменения файла - единственный путь в ОС, которым можно узнать реальное время, а не игровое.


  3. Роутер подняли, поднимите и интернет сервер. Установить пока может только файликом.

    Хорошо, завтра поставлю. Но нужно будет что бы вы запустили не только ON роутер но и DNS сервер.

     

     

     

    В смысле грузить код из "boot" а в нем уже творить все остальное.
    Там проблема в архитектуре, которую мне пока не хватает опыта решить.

    Дело в том, что opennet-роутеры, которые перенаправляют сообщения от одних компов к другим, работают по своим правилам-протоколам. Эти протоколы прописаны в файле opennet.lua

    Например, программист последовательность параметров в on.send() может поменять, и тогда мне нужно будет менять эти последовательности и в установочной строке. Если же грузить "boot" файл, то мне придется менять эти правила уже в 3х местах, что уже накладно.

    По-хорошему, нужно что бы при установке грузился только 1 файл, где прописаны и правила работы с сетью и дальше код установщика. Но файл opennet.lua расчитан не на это.

    Поэтому нужно еще думать.

     

    >>Интерфейс консоли сервера зачотный

    Вот бы еще это всё оживить, и тогда будет смак. Пока только консоль по одной буковке печатает.


  4.  

     

    ЗЫ Интуиция подводит. С Lua я играю всего пару недель и исключительно через СС OC, хотя кодер довольно опытный, однопроходные дизассемблеры для зилоговских процессоров еще в начале 90-х писал. Потом были бейсики с паскалями, потом LD, FBD, SFC и паскалеподобный ST в разных скадах и плк. Потом кодить бросил и переквалифицировался, а сейчас вот увлекся и трясу стариной, чтоб мозги не сильно ржавели.
    Я так и знал - что то тут не чисто  :)

    Что ж, очень рад, что у нас опытный программерский сенсей появился. Будем обмениваться опытом. Сразу видно что отношение к программированию отличное от большинства.

     

    Кстати, идея "кротчайших строк" нужна для "установочных строк" через интерпритатор. Например, я использовал такую для установки комплекса программ opennet:

    http://computercraft.ru/topic/675-opennetoc-prodolzhenie/page-6?do=findComment&comment=10751

    Хотя конечно, там тоже строка не ограничивается, чем она будет короче - люди будут меньше пугаться.


  5. Предлагаю добавить swg2you в белый список, как проявившего серьезный интерес к программированию на Луа.

    Моя интуиция подсказывает что swg2you интерес к Lua уже давно проявил. Похоже он где то еще вне майна Луа выучил.

    Это так?


  6.  

     

    Если поставить задачу: в бесконечном цикле, не проверяя на сигнал модема, не обрабатывая ошибок, выполнять полученный по сети код то можно уместиться в 90 байт.
    Молодец. Значит таки можешь.

    Вот мой код в 92 байта (добавлены переходы строки для читабельности):

    _=component
    _.proxy(_.list'od'()).open(7)
    ::r::
    pcall(load(({computer.pullSignal()})[6]))
    goto r
    

    А так же код с возвращением ошибки и с проверкой имени сигнала. Обрати внимание как я проверяю название сигнала:

    -- # Проверка сигнала
    _=component m=_.proxy(_.list'od'())m.open(7)::r::a,_,c,_,_,f=computer.pullSignal()_=a:find"mo"and m.send(c,7,pcall(load(f)))goto r
    
    -- # Возврат ошибки
    _=component m=_.proxy(_.list'od'())m.open(7)::r::m.send(c,7,pcall(load(({computer.pullSignal()})[6]))goto r
    

    Но тут появилась идея что в принципе, если инициализировать контроллер\дрон первым сообщением, можно сократить до 75 байт:

    _=component _.proxy(_.list'od'()).open(7)load(({computer.pullSignal()})[6])
    

    Теперь показывай свое на 90


  7. goto есть зло сущее, отродье BASIC'овское, не используйте его, да не проклятыми за баги будете.

    Это предубеждение. Хочу заметить, что goto было добавлено в версию 5.2 совсем не давно, и значит, никак не является архаизмом.

    И между прочим, это может быть очень удобно, например, из за отсутствия в луа оператора continue.


  8. А в самом деле, не сочти за труд, объясни что это за операторы :: и goto. Я, конечно догадываюсь, что это определение метки и переход по метке, но в Луа с таким сталкиваюсь впервые.

    На английском, но с примерами есть тут:

    http://lua-users.org/wiki/GotoStatement

     

     

     

    >>здесь главное форма реализации,

    >>Мой код умеет так же, но он намного более компактный

    Можно вопрос - а зачем? Зачем тебе такой компактный код? В биосе 4к места, почему бы им не воспользоваться?

     

     

     

    >>А вот здесь поподробней пожалуйста.

    А вот тут я уже не удержался, что бы посидеть 2 часа и выжать из каждого символа максимум.

     

    • Твой код написан хорошо, и абсолютно без изменения функционала удалось сжать его всего на 4-10 символов.
    • С небольшими изменениями, которые не отразятся на условиях работы программы при 90% случаев, можно сжать 230 вариант примерно до 150 байт

      В принципе можно остановиться на этом варианте, но я пошел дальше.

    • Если отказаться от входных параметров, которые не нужны, так как их можно реализовать в клиентской программе, можно сжать первый вариант до 130 байт
    • Если добавить еще небольших условностей, типа без проверки на сигнал модема, можно сжать код до 107 байт
    • Если отказаться от отсылки сообщений об ошибках обратно, которые можно и так определить первым сообщением, код получается 92 байта
    • Нравится 1
    • В шоке 1

  9.  

     

    ::
    Вот это - явно какое то шаманство и запрещенные техники. Я такого еще никогда за 2 года программирования на Lua не видел.

     

    А по теме - для биосов что только не делали. Даже превращали его в жесткий диск, переписывая прямо исходник биоса.

    Твоя программа полезная, но не новая.

     

    Кстати, твой код всё еще можно уменьшить не изменив функционал.


  10. Хорошее оформление темы и хорошая идея. Но...

     

     

    Есть мощный и уже готовый интерфейс GML

    https://github.com/OpenPrograms/Gopher-Programs/wiki/GML

     

    Я еще со времен программирования Базара с Семоро довел GML до работы с юникодом и исправил множество ошибок.

    Велосипед конечно придумывать интересно, но результат в ряд ли будет лучше.

     

     

    По структуре ты уже делаешь нерасширяемую структуру. Мне нравится как сделан Windows.Forms. Там все элементы начинаются с простых классов, например "Control" и потом наследуются глубже и глубже.

    Например, та же кнопка наследуется из "ButtonBase", который также наследуется чекбоксами.

     

    Еще много конечно, что можно посоветовать. Но закончу на том, что писать в луа названия с больших букв - плохой стиль.


  11. То есть она не пытаеться прийти по определённым координатам, а идёт по уже известной карте?Так скучно=(Я уже на твоей программе распечатал лабиринт, а она оказывается только по известной карте ходит=(

    Это же просто реализовать! Поставь контроллер предметов, и если работ видит перед собой блок, пишет world:set(x,y,z,true) что бы пометить этот блок непроходимым, и еще раз запускает поиск пути.


  12. Код хороший, но подожди ка, а где же таблица и функции package? Это ведь специальный инструмент, что бы не забивать оперативную память, и ускорить работу программы при нескольких одинаковых вызовах require().

    Больше об этом написано здесь http://ilovelua.narod.ru/about_lua.html#Module_loaders

    Можешь посмотреть как require и package реализовано в ОС https://github.com/MightyPirates/OpenComputers/blob/master-MC1.7.10/src/main/resources/assets/opencomputers/loot/OpenOS/lib/package.lua


  13. Тем временем, мной проведена работа по организиции обновления моих серверов (интернет-сервер, и сервер обновлений).

     

    [ok=Добавленно автообновление программ из пакета opennet][/ok]

    Теперь, установив opennet один раз, новые файлы и патчи будут закачиваться автоматически при перезагрузки компьютера.

    Изменена строка установки, теперь она выглядит так:

    on=component.modem;e=event;on.open(1)on.broadcast(1,"","","getip")function m()r={e.pull(10,"modem_message")}end;m()ud="update"ip=r[6]function sv()on.send(r[3],1,ud,ip,ud,"getFile","client/"..p)m()filesystem.makeDirectory(filesystem.path(p))f=io.open(p,"w")f:write(r[8])f:close()end p="lib/opennet.lua"sv()p="on/update.lua"sv()loadfile(p)("install")
    

    Напомню, гайд по установке в этом посте.

    Еще, по просьбе Алекса, папка /on добавленна в системные пути, и ее не нужно прописывать.

     

     

    Кстати, скриншот консоли самого сервера. Пока еще много бутафории, но уже есть сразу 2 работающие консоли на разных частях экрана.

     

    Z1QtKpq.png

    • Нравится 4

  14. Все библиотеки, расчитанные на подключение через require будут подгружаться в /bin/

    Но с папкой /on/ не понимаю. Что бы запустить, например браузер, нужно ввести 5 символов и нажать таб on/onB [TAB] , и шелл сам допишет имя файла. Проблема в том, что нужно дописывать 2 буквы названия папки?


  15. Давай сервер обновлений в лаборатории OpenNet разместим. Там якорь есть

    Давай лабораторию OpenNet лучше у меня в дата-центре разместим, или даже построем новый. Я хочу, что бы работающие сервера жили в умах игроков как реальные места на сервере, а не как какие то "секретные спрятанные места", где нипойми что и как работает.

    Плюс, всегда можно будет провести экскурсию, а разработчикам проверять логи сервера, просто сбегав и посмотрев на мониторы.

     

    Если соблюсти все правила безопасности, компам ничего не грозит. Да и в любом случае, опаснее что какой то баг программы нарушит стабильность работы серверов, чем грифер с "Байтом".

    • Нравится 1

  16. Чего-то ошибочка возникла http://puu.sh/i4EL0/73b3efb087.png .  Что может быть?

    Судя по логам сервера, он сообщение получает, но не успевает передать его обратно. Такая проблема у нас уже была из за медленного ответа DNS-сервера, но я увеличил таймаут и она исчезла.

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

     

    Ах да, еще может быть что мой домик с сервером обновлений не прогружен. Там нужно админский якорь ставить, но у меня такого нет.


  17. Особенно мне нравится строка установки.  :)

    Я долго думал, какой способ установки самый простой, и за неимением интернет-карты, вставить 1 строку в луа, по моему мнению самое быстрое. Да и она может быть чуть ли не любой длинны.

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