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

ECS

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

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

  • Посещение

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

    203

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


  1. Цитата

    Мне нужно время либо по Гринвичу, либо по Москве. Но никак не часовой пояс сервера

     

    Если требуется получать время именно через интернет, то нет смысла поднимать собственный сервер,  благо имеется тонна бесплатных API, мяу:

    -- Запрашиваем время у сервера в формате JSON
    local time = ""
    for chunk in require("internet").request("http://worldclockapi.com/api/json/utc/now") do
      time = time .. chunk
    end
    
    -- Выковыриваем timestamp в виде миллисекунд
    time = time:match("currentFileTime\":(%d+)")
    -- Обрезаем до секунд, т.к. 32-битная архитектура не поддерживает числа таких размеров
    time = tonumber(time:sub(1, -8))
    -- Корректируем часовой пояс до требуемого. Москва - UTC+3. Один час - 3600 секунд
    time = time + 3 * 3600
    -- Профит
    print("Времечко: " .. os.date("%H:%M:%S", time))
    
    -- Можно и покомпактнее
    -- print("Времечко: " .. os.date("%H:%M:%S", tonumber(time:match("currentFileTime\":(%d+)"):sub(1, -8)) + 3 * 3600))

     

    • Нравится 3

  2. О, как раз на днях сеструха подобное писала, впервые осваиваясь в опенкомпах, да и майне в целом. Ах, какой пекрасный мир ее ждет впереди! Кстати, отображение времени работы можно выводить в более удобном виде ЧЧ:ММ:СС, если есть желание:

    print("Времечко: " .. os.date("%H:%M:%S", computer.uptime()))

     


  3. 4 часа назад, NEO сказал:

    Сие есть не аргумент, наблюдение - это субъективизм

     

    Дык любой аргумент исходит от субъекта бытия, от индивида, лишь пытающегося познать и осознать внешний объективный мир. Любой аргумент есть субъективизм

    • Нравится 2

  4. 1 час назад, eu_tomat сказал:

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

     

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

     

    А при наличии небольших капиталовложений вкупе с упорным трудом даже ресурс о программировании можно популяризировать донельзя. К примеру, на все том же дримаче год назад каждую неделю энтузиасты проводили неплохие лекции по кодингу роботов через интегрированный войс-чат с взиманием платы за обучение. Чем не идея для популяризации программирования и заработка? Было бы желание, мяу


  5. 4 часа назад, eu_tomat сказал:

    Или ты имел в виду что-то другое? Если ты видишь возможность привлечь сюда до сих пор неохваченных проектом активных игроков-программистов, то мне интересно услышать твои предложения на этот счёт, ну, или хоть какое-то виденье ситуации.

     

    Я уже описал свое видение ситуации самим перечислением проблем. Если нужна конкретика, то:

    • Упразднить правила. Чем больше запретов и ограничений - тем меньше желания их изучать, им подчиняться и следовать, тем больше желания найти более достойный игровой проект. Большая часть местных правил абсурдна донельзя и обоснована по принципу, схожему с воспитанием ребенка: "потому что я так сказал и так считаю верным". Сейчас не 2014 год, челядь постепенно умнеет, и подобный принцип уже "не канает"
    • Реализовать систему демократичного саморегулирования (votemute, votekick и т.п.) для минимизации человеческого фактора в лице предвзятых модераторов, да и вообще автоматизировать большинство модерационных процессов, как это сделано на всяких вортексах, террафирмах, экскалибурах и прочих. И только попробуй, @moderator, сказать что-нибудь насчет рекламы сторонних сервисов, смешно уже
    • Разработать универсальный самописный гуишный мод для покупки донат-шмота, привата, чтения правил и инфы об ивентах, интеграции с сошл медиа и для минимизации локальных серверных чат-команд, как это сделано на дримаче. Если нет соответствующих навыков мододела - максимально кастомизировать существующие плагины для удобства или написать собственные
    • Свести к минимуму искусственные ограничения контента, доступного "из коробки", не вводить собственных механик для кастомизации привычного геймплея с наиболее популярными модами, либо вводить их на высшем уровне с переписыванием мода и подробными интерфейсными гайдлайнами вместо "you don't allowed to do that"
    • Вместо запрета имбалансного шмота, дюп-шмота или лаго-шмота писать фиксы модов самостоятельно или заказывать их на форж-форумах
    • Мини-игры, регулярные ивенты и любые средства массового развлечения с системой поощрения победителей ДОЛЖНЫ присутствовать на любом сервере, заинтересованном в своей аудитории и привлечении новой. Старперам и олдфагам, возможно, подобное кажется глупым, однако школьники с толстыми кошельками категорически не согласятся
    • Ни в коем случае не наказывать игроков за багоюз, а наоборот щедро поощрять рапортующих и публично афишировать свои намерения о поощрении. Недочеты и геймплейные дыры - это неучтенный фактор, ответственность за который лежит на плечах администрации. Фиксы, фиксы и еще раз фиксы
    • Создать грамотную донат-систему и уметь играть в маркетолога, способного "продать воздух", не перегибая при этом палку. Максимально кастомизировать привилегии донатеров вплоть до emoji в чате и воспроизведения кастомных звуков а-ля дота+, создавать модели именного оружия и брони, разыгрывать их в местных рулетках и ивентах, просторы творчества тут бесконечны
    • Наконец, необходим современный информативный сайт с картой сервера, донат-разделом, техподдержой в реальном времени и, в качестве приятного дополнения, форумными фичами, наградами и т.п. Но никак не классический форум с фиг-пойми-где запрятанной инфой а-ля 2000-ые в современной обертке

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

    • Нравится 4
    • Одобряю 1
    • Грусть 1

  6. 1 час назад, eu_tomat сказал:

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

     

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


  7. 2 часа назад, ZloyApelsihchik сказал:

    Я не совсем понимаю что такое tonumber. Но опять же как я понял, это что вроде конвертера в число?

     

    Дыа, так и есть. Я не понимаю, зачем ты, не изучив основ, лезешь в написание интерфейсного софта. Хоть потренькался бы чутка на хелловорлдах

     

    2 часа назад, ZloyApelsihchik сказал:

    И что такое validator, тоже хотелось бы узнать.

     

    Вообще из коммента в коде выше все должно быть понятно, да и в документации эта инфа подробно разжевана. Захотел бы - узнал бы

    • Нравится 1

  8. Дык поле input.text является строкой, ты ж ее сам вводишь в виде текста, в виде чертовых символов. А функция redstone.setOutput(side, strength) в качестве второго аргумента принимает только числа. Ясен фиг ругается, если ты ей пытаешься текст скормить. Юзай что-то типа этого:

    inputPower.onInputFinished = function()
      -- Зачекай, а то мало ли там вообще не число введено
      if inputPower.text:match("%d+") then
      	powerSignal = tonumber(inputPower.text)
      end
    end

    Второй вариант с автоматической валидацией:

    inputPower.validator = function()
    	return inputPower.text:match("%d+")
    end
    
    -- При наличии validator этот метод выполнится только в случае успешной валидации текста
    inputPower.onInputFinished = function()
      powerSignal = tonumber(inputPower.text)
    end

     


  9. 2 минуты назад, ZloyApelsihchik сказал:

    Ну, раз есть такая возможность спрошу еще на счёт того как можно к списку GUI.comboBox подключить список цветов для бандлед проводов например, так что бы вместе с выбр. числом изменялось еще в самой функции сила сигнала. 

     

    Не понял вопроса и конечной задачи, прости.


  10. Так писал бы в тему гуйки, че форум-то засорять. А ошибка забавна: при каждом нажатии на кнопку сначала отрубается сигнал редстоуна, а затем функция switch2.onStateChanged переназначается во время своего же выполнения. Крч, уот так будет пахать:

    switch2.onStateChanged = function()
      -- Проверяй, какое состояние имеет switch после переключения: вкл или выкл
      if switch2.state then
        RemoteRedstone()
      else
        RedstoneOff()
      end
    end

     


  11. 20 минут назад, VankaPapanka сказал:

    В итоге даже не могу распечатать те что встроенные в систему (я про систему MineOS),потому что оперативы не хватает для того что бы приложение открыло фото

     

    Стопудова у тебя включены обои, они жрут чуть ли не четверть имеющейся оперативы. Оффни, если это так. Но вообще странно: только что  ябез каких-либо проблем распечатал несколько дефолтных обоин, и память лишь на 74% забилась при наличии двух планок 3.5 


  12. 40 минут назад, ZloyApelsihchik сказал:

    Щито за программа на 2 скрине (слева направо)

    Какая-то прога для мониторинга? 

     

    Угу, для контроля ядер реакторов из драконика. Сырцов нет, ничего нет, любви нет, только пара скринов


  13. 14 минут назад, Avevad сказал:

    На самом деле я не знаю как распарсить строку по пробелам))

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

    -- Отправка
    modem.broadcast(port, cmd, cmdX, cmdY)
    
    -- Прием
    local localAddress, remoteAddress, port, distance, cmd, cmdX, cmdY = event.pull("modem_message")

    Если надо "парсить по пробелам", то уот так уот:

    local message = "meow 12 -249"
    for part in message:gmatch("[^%s]+") do
    	print("Кусочек: ", part)
    end
    
    >> Кусочек: meow
    >> Кусочек: 12
    >> Кусочек: -249

     

    • Нравится 3

  14. 2 часа назад, BrightYC сказал:

    каким же образом сделать аналог слушателя на биосе.

    
    local function myYobaPullSignal(...)
    	evt, _, _, _, _, info = computer.pullSignal(...)
    	if evt == "touch" and info == returnuser() or evt == "modem_message" and info == "open" then 
    		open()
    	elseif evt == "touch" and info ~= returnuser() then
    		getout()
    	elseif evt == "modem_message" and info == "ping" then
    		modem.broadcast(1, "pong")
    	end
    end
    
    ...
    
    local function sleep(timeout)
    	local deadline = computer.uptime() + (timeout or 0)
    	repeat
    		myYobaPullSignal(deadline - computer.uptime())
    	until computer.uptime() >= deadline
    end
    
    ...
    
    while true do 
    	myYobaPullSignal()
    end

     

    • Нравится 2

  15. В маркете появился ВК-клиент местного разлива. Поскольку VK API с недавних пор стало зашибенно удобным в плане уменьшения количества веб-запросов, то болтать с посонами и посонихами можно с комфортом без ожидания загрузки тонны инфы. На данный момент имеются следующие фичи:

    • Динамическая подгрузка свежего контента при достижении конца имеющегося

    • Отображение информации профилей

    • Просмотр списка друзей с имеющимися тегами

    • Просмотр новостной ленты

    • Просмотр списка диалогов, истории переписки, отправки сообщений и файлов (к примеру, можно закинуть какой-нибудь скрипт прямо себе на аккаунт)

    • Индикатор сетевой занятости, чтобы никто ничо там не подумал, мол, "говнософт завис!!1"

    • Рекурсивное отображение всех медиавложений, репостов и прочей атрибутики

    • Раздел настроек с кастомизацией количества загружаемой инфы по категориям

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

    c5jPB7a.png?1

    50bNrsd.png?1

     

     

     

     

    • Нравится 6

  16.  

     

    @ECS, сможешь распутать этот клубок вопросов?

     

    Чего сразу ECS-то? Это все он, это он, не впутывайте! Либа - полный аналог опеносовской. Разница в том, что она работает шустрее, не подменяет pullSignal на кастомный, не требует внешних либ по типу keyboard, а также позволяет отключать и кастомизировать коды клавиш прерывания. Работать оно работает на всех версиях OC, скачивание вместо дефолтной комп не взорвет. Усе.

    • Нравится 2

  17. Огрызкоподобное обновление: добавлено приложение "Settings", объединяющее в себе всевозможные настройки системы. Софтина разделена на модули и имеет следующий функционал:

    • Выбор активного монитора и смена разрешения как в автоматическом режиме без черных полос, так и в ручном
    • Смена обоев рабочего стола и выбор заставки с задержкой
    • Кастомизация размеров иконок, отображение расширений и скрытых файлов, изменение цветовой схемы оси
    • Система автозапуска скриптов как до инициализации десктопа, так и после
    • Дисковая утилита для смены имен, форматирования и установки загрузочных томов
    • Настройки сети для передачи файлов по модемам в виде монтированных файловых систем
    • Смена языка системы. Имеются английский, русский и французский
    • Выбор часового пояса и настройка отображения времени: либо в виде реального таймштампа, либо в виде игрового
    • Выбор архитектуры ЦП, выгрузка библиотек как в ручном, так и в автоматическом режиме

    VB7LtKi.png?1
     
    flQJtCK.png?1

    Ну, а заодно верхняя менюха универсализировалась для каждого приложения а-ля OS X - при переключении окон она индивидуально перестраивается под выбраное:
     

    G271A4f.png?1

    • Нравится 7

  18. Проблема решена окольным путем через множество GET/POST-запросов. Если кто-то столкнется с апи гитхаба и аналогичной ситуацией, то вот мануал:

    http://www.levibotelho.com/development/commit-a-file-with-the-github-api/

     

    Единственный нюанс: в последнем пункте требуется использование метода PATCH, однако POST с задачей также прекрасно справился.

    • Нравится 2

  19.  

     

    Если очень надо, можно сделать хак через сокет.

     

    Что ж, спасибо за инфу. Видимо, судьба тонко намекает, что оно не очень-то уж и надо хд

    Либу опробовать, увы, не удалось из-за тонны зависимостей. Вручную качать сдохну, а Hel все лежит и лежит, дыа


  20. Доброго времени суток. Захотелось написать клиент для работы с гитхабом через API, однако для заливки файлов на репозиторий требуется отправка PUT-запроса с соответствующим содержимым:

    MQbjr8P.png?1
     
    Вопрос: это вообще реализуемо через интернет-карту? Если тут имеются эксперты в области веб-запросов, то подскажите, как познать сию магию. Наиболее логичным мне показалось решение ниже, однако увы:

    local handle = require("component").internet.request(
      "https://api.github.com/repos/IgorTimofeev/Test/contents/Meow.cpp",
      '{"path":"meow.cpp","message":"lol","content":"aGVsbG8gd29ybGQ="}',
      {
        ["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0",
        ["Authorization"] = "Basic base64encoded login:pass pair",
        ["Content-Type"] = "application/application/json",
      }
    )
    
    for i = 1, 30 do
      print(handle.read(math.huge))
    end
    
    handle.close()
    

    В то же время через специализированный софт все прекрасно заливается:
     
    mRH6yw3.png?1 fzRZTS4.png?1
     
     И, разумеется, вариант с консольным curl также вполне себе рабочий:

    curl -ivX PUT -u login:pass -d '{"path": "meow.cpp", "message": "lol", "content": "aGVsbG8gd29ybGQ="}' https://api.github.com/repos/IgorTimofeev/Test/contents/meow.cpp
    
    {
      "content": {
        "name": "meow.cpp",
        "path": "meow.cpp",
        "sha": "95d09f2b10159347eece71399a7e2e907ea3df4f",
        "size": 11,
        "url": "https://api.github.com/repos/IgorTimofeev/Test/contents/meow.cpp?ref=master",
        "html_url": "https://github.com/IgorTimofeev/Test/blob/master/meow.cpp",
        "git_url": "https://api.github.com/repos/IgorTimofeev/Test/git/blobs/95d09f2b10159347eece71399a7e2e907ea3df4f",
        "download_url": "https://raw.githubusercontent.com/IgorTimofeev/Test/master/meow.cpp",
        "type": "file",
        "_links": {
          "self": "https://api.github.com/repos/IgorTimofeev/Test/contents/meow.cpp?ref=master",
          "git": "https://api.github.com/repos/IgorTimofeev/Test/git/blobs/95d09f2b10159347eece71399a7e2e907ea3df4f",
          "html": "https://github.com/IgorTimofeev/Test/blob/master/meow.cpp"
        }
      },
      "commit": {
        "sha": "38e198640380a061ec9357677fa275ed2a450202",
        "node_id": "MDY6Q29tbWl0MTQ3ODczMzQzOjM4ZTE5ODY0MDM4MGEwNjFlYzkzNTc2NzdmYTI3NWVkMmE0NTAyMDI=",
        "url": "https://api.github.com/repos/IgorTimofeev/Test/git/commits/38e198640380a061ec9357677fa275ed2a450202",
        "html_url": "https://github.com/IgorTimofeev/Test/commit/38e198640380a061ec9357677fa275ed2a450202",
        "author": {
          "name": "Igor",
          "email": "sosi@mail.ru",
          "date": "2018-09-07T22:37:07Z"
        },
        "committer": {
          "name": "Igor",
          "email": "sosi@mail.ru",
          "date": "2018-09-07T22:37:07Z"
        },
        "tree": {
          "sha": "86d1529b4193d66705cc2272715009166deb16b2",
          "url": "https://api.github.com/repos/IgorTimofeev/Test/git/trees/86d1529b4193d66705cc2272715009166deb16b2"
        },
        "message": "lol",
        "parents": [
          {
            "sha": "db4b95734315298cad0e733421051524b4e32fc1",
            "url": "https://api.github.com/repos/IgorTimofeev/Test/git/commits/db4b95734315298cad0e733421051524b4e32fc1",
            "html_url": "https://github.com/IgorTimofeev/Test/commit/db4b95734315298cad0e733421051524b4e32fc1"
          }
        ],
        "verification": {
          "verified": false,
          "reason": "unsigned",
          "signature": null,
          "payload": null
        }
      }
    }
×
×
  • Создать...