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

Fingercomp

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

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

  • Посещение

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

    283

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


  1. Омфигеть. Серьёзно.

    Однако, потеря совместимости с сотнями, тысячами! Программ для OpenOS. Это явный отталкивающий фактор: я не хочу переписывать более 8-10 тысяч строк кода моих программ под новую OS. Да и никто не собирается, очевидно.

     

    Желаю удачи и мотивации. Много мотивации. Много амбициозных проектов померло на земле бренной.


  2. @Krutoy, опеннет повязан на c9 весь, обновления и прочее. Проблема в том, что устанавливаются они не в те директории (нужно ставить в /usr/lib, а не /lib, например), к тому же, для скачивания надо использовать preview.c9users.io, а не preview.c9.io. Учитывая, что мне никак не починить пакет, ибо он сломается сразу же после первого обновления, прошу немного починить структуру файлов и сами файлы.


  3. В общем, думал я о том, что программ тут много, а огромное число нерусских игроков их использовать просто физически не может: русский не поддаётся гугл транслейту нормально, а про английские версии никто не заморачивается почему-то. Ну а про то, что их толком-то скачать нормально нельзя, я уже просто промолчу.
     

    Видимо, один я тут пекусь об i18n, ну там ещё @Totoro публиковал что-то на английском. Так что решено было покончить с этой глупостью невиданной.

     

    Самые интересные и полезные программы будут потихоньку перетаскиваться мною на OpenPrograms, откуда их можно будет скачать через стандартную программу oppm, которая есть на дискете в OpenComputers!

     

    Занятие это очень интересное, хоть и довольно трудозатратное: нужно перевести на английский описание программы, перевести на английский саму программу, включая коментарии, ну и запаковать это дело всё. В общем, это занимает от 30 минут до 3 часов в среднем на один пакет.

     

    Условия публикации:

    • У автора нет репозитория на OpenPrograms.
    • Программа может работать на английском языке без переписывания половины всего кода (возьмёр в пример майноось от @ECS).
    • Имеется человеческое описание программы. Желательно прикрепить скриншоты на https://imgur.com/ — используйте по возможности именно этот сервис для хранения изображений!
    • Код на гитхабе, гисте или пастбине. Никаких яндекс-дисков или недообменников!!
    • Программа интересна и полезна. Это субъективно, конечно же, но по популярности на форуме вполне можно судить тоже.
    • Программу можно включить в пакет размером не более 1 мегабайта. Та же ось не поддаётся никак включению, например.
    • Отдельным плюсом будет человеческое оформление кода (отступы, комментарии).
    • Все зависимые библиотеки удовлетворяют условиям выше или доступны на OpenPrograms.
    • Программа не пишет ничего в папки /bin и /lib сама, и не зависит от директории, в которую установлена.

    На самом деле, уже три четверти этих пунктов наверняка выполнены.

     

    На текущий момент опубликованы следующие программы:

    Планируются к опубликованию:

     

    Если интересует добавление своей программы, какие-то вопросы, тыры-пыры, всё по поводу этой темы — спрашивайте в IRC. Форум я не обновляю судорожно каждые 5 секунд, а в чате я мгновенно получаю сообщения. Используйте команду .tell fingercomp <сообщение>, если что.

    Доверенным людям, если они готовы заниматься этим делом, могу дать write-доступ к репозиторию. Опять же, IRC.

     

    А, самое главное-то. Ссылка на сам репозиторий.

    • Нравится 7

  4. Ненутычо ©, покупаешь заяву на размещение рекламы и всем показывается. И админам тоже!

    Хм, а как бы реализовать такое?.. Это как-то сложно, надо ещё и передачу рекламы н... Есть идея!

    Админу самому вводить рекламу, чтобы ему же её и показывать!!!

    Это гениально!! :smile9: :smile3:


  5. Те люди обленились и отказались от возрождения уже!

    Просто, если обратишь внимание на дату, увидишь, что там уже под вайп ИТ создана была, онлайн никакующий был, ну а потом отбили желание играть на серверах здесь.

    Мне интересно было узнать реакцию... Ну, её-то я и увидел: никто не знает, зачем OpenNet нужен. И это верно. Это довольно интересный проект, но не для основной массы игроков.

     

    Ну а потом я познал дзен и теперь тоже задаю вопросы: а зачем это надо? Если и заморачиваться этим, то только на приватном сервере с друзьями.


  6. Килограмм (кг) — это 10³ грамм.

    Килоампер (кА) — это 10³ ампер.

    Килоньютон (кН) — это 10³ ньютонов.

    Но почему килобайт (кБ) — это, вдруг, 2¹⁰ байт-то?!

     

    Для двоичной системы счисления есть свои приставки: киби (КиБ), меби (МиБ), гиби (ГиБ), etc.

     

    Но это если по СИ. А так, конечно, никто не определяет конкретно.


  7. Неожиданно для себя! Напилил HTTP/HTTPS 1.1 (во второй версии разбираться лень) либу. Работает она абсолютно идентично функции component.request(), вот только поддерживает HTTPS и принимает четвёртый параметр: метод запроса (GET по умолчанию, если не посылается тело запроса, и POST в противном случае). Кроме того, она превращает все хедеры в формат Train-Case, так что можно спокойно получать данные хедеров в своих программах. Однако всё это делается за счёт меньшей производительности, так что лучше использовать стандартные функции, если ничего из вышеперечисленного не требуется.

    Библиотека возвращает функцию отправки запроса:

    • http(url: string[, body: string[, headers: table[, method: string]]]): table — посылает запрос на сервер.
    • http(url: string, kwargs: table): table — делает то же самое, но принимает таблицу с аргументами, чтобы не путаться.

    В таблице аргументов все параметры опциональны. Вот пример полной таблички:

    {
      body = "Hello here\n",
      headers = {
        connection = "close"
      },
      method = "PUT"
    }
    

    Возвращают обе функцию таблицу с теми же функциями, что у компонента (и да, тут не надо ставить двоеточие, как и в OC'шном реквесте):

    • response.read([n: number]): string or nil — прочесть некоторое количество данных. Вообще, вся информация читается сразу же, но можно ограничить вывод аргументом. Можно отдать math.huge (или вообще не указывать аргумент), и тогда возвратится все данные полученные.
    • response.close() — закрыть соединение.
    • response.finishConnect(): boolean — возвращает, открыто ли соединение (в стандартном OC немного по-другому работает, там не буля, а nil с причиной, ну и ладно).
    • response.response(): number, string, table — возвращает код статуса (204 или 404, например), текстовое описание статуса ("No Content", "Not Found") и хедеры таблицей таблиц (ибо хедеров одинаковых может быть несколько).

    Вот так может выглядеть выхлоп response.response():

    200     "OK"    {["Content-Length"]={"12"},
     ["Content-Type"]={"application/octet-stream"},
     Date={"Fri, 05 Aug 2016 15:35:34 GMT"},
     ["Last-Modified"]={"Fri, 05 Aug 2016 14:56:08 GMT"}
     Server={"SimpleHTTP/0.6 Python/2.7.12"}}
    

    Установка из OPPM: oppm install libhttp. Ну и исходный код.

    • Нравится 4

  8. Увеличил скорость чтения в 1⅓, а соединения — в 2.5 раза. Подключил возможность задавать собственные расширения, ибо без этого, например, не работает HTTPS. В общем, пользоваться либой уже можно. :yahoo:


  9. Крутая библиотека, и титанический труд!

    Поздравляю с успешным завершением.

     

    P.S. Через точку, а не через двоеточие - то есть, одновременно может быть открыт только один такой сокет?

    Нет. Просто сам сокет хранится в локальной переменной функции, которая возвращает обёртку. Таблица функций создаётся в функции, и получается, что имеет доступ к сокету в переменной.

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


  10. Ну, надо прикрутить обёртку уже имеющегося сокета, добавить передачу ключа через ECDH-RSA (в карте данных вроде-то что-то было с эллиптическими кривыми и диффихеллманом, не уверен), и, может быть, если очень захочется мне вдруг, проверку валидности сертификатов. Кроме того, хочется как-нибудь ускорить библиотеку — к гитхабу подключался я 10 секунд, а считывал 27 килобайт минуту. Пока что не смотрел, что там так долго пыхтит.

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

     

    Тыкаю @LeshaInc, чтобы в свой фтп-клиент прикрутил сфтп.

    • Нравится 1

  11. Не так давно @LeshaInc выкладывал свою программку, фтп клиент-то, и кто-то сказал про ssh. Это, конечно, задача интересная, но речь не об этом. Уже тогда на протяжении дней трёх я изучал вот этот документец. И с тех пор, добавив более 4 тысяч, удалив более двух тысяч строк кода, перечитав этот RFC вдоль и поперёк, исписав 22 страницы моего настольно-напольного блокнота, погуглив 183 запроса про тлс (надо же, гугловская статистика иногда бывает полезна для себя), чуть не потратив 2500 рублей на 12 страниц, описывающих формат десятичных чисел ( :facepalm: ) и даже найдя один баг в Computronics, который мне не давал покоя часов двенадцать, а то и больше, в общем случае... Я наварил TLS сокеты в OpenComputers.

     

    Что такое TLS? В нашей ирке спрашивавшим я отвечал так: это такая штука, из-за которой появляется замочек в адресной строке браузера. Фактически, это корректно, и им этого достаточно, но позволю немного поглубже объяснить.

    В девяностых годах компания Netscape разработала концепцию и реализацию безопасной передачи данных через недоверенное соединение. Назвалось это чудо SSL, что означает Secure Sockets Layer — слой безопасных сокетов, и выпущено было две версии: 2.0 и 3.0. Версия 1.0 была настолько дырявой, что даже не была никогда выпущена в публичный доступ. Но и, как это неудивительно, ни 2.0, ни 3.0 сейчас мало того, что не считаются безопасными, их поддержку уже исключают из всяких популярных подуктов типа Firefox или Chrome.

    Netscape, впрочем, недолго держала это изобретение. Ребята из Internet Engineering Task Force (IETF) в 1999 году выпустили свою, 3.1 версию SSL, которая хоть и имела некоторую совместимость с прошлой версией, но имела много нового и исправляла некоторые проблемы безопасности в прошлом протоколе. Версия SSL от IETF с тех пор называется TLS.

    Все версии, для справки:

    • ?: SSL 1.0
    • 1992: SSL 2.0
    • 1995: SSL 3.0
    • 1999: SSL 3.1 // TLS 1.0
    • 2006: SSL 3.2 // TLS 1.1
    • 2008: SSL 3.3 // TLS 1.2

    И хоть сейчас SSL и TLS используются взаимозаменяемо, правильнее, всё же, говорить TLS.

     

    И всё же, что это за штука такая?

    TLS и его предшественник, SSL, — это протокол-прослойка между слоем данных приложений и слоем TCP. Как-то так:

    • Слой данных приложений [Application Data].
    • Слой безопасности [Transport Layer Security, TLS].
    • Слой протокола контроля передачи данных [TCP].

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

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

     

    Как работает TLS.

    Перед тем, как передавать данные, неплохо было бы договориться с другим концом соединения, какой набор шифрования использовать, передать некоторые дополнительные данные, подтвердить подлинность сервера (для защиты от встраивания в соединение) и, конечно, обменяться ключами, которыми будет шифроваться информация. Для этого предназначена процедура рукопожатия — Handshake. Клиентом генерируется рандомная информация, шифруется асимметричным шифратором (ECDH-RSA или RSA) и передаётся серверу. Перед этим сервер предоставляет цепочку сертификатов, каждый последующий сертификат которого подтверждает предыдущий. В конце цепочки получается самоподписанный сертификат, которому надо доверять (есть целые списки таких корневых сертификатов). После того, как рандомные байты переданы, сервер и клиент из них генерируют ключи: два ключа проверки валидности информации (на сервер и клиент отдельно для защиты от атаки), два ключа симметричного шифрования данных и, если того требует шифратор, два инициализирующих вектора.

    В конце рукопожатия отправляют финальное сообщение, которое уже шифруется. Оно содержит хэш всех сообщений рукопожатия, чтобы предотвратить перехват трафика.

     

    Каждое шифрованное сообщение имеет специальный код авторизации (MAC), который включает хэш пересылаемых данных и номер последовательности, который имеется отдельно для приёма и отдачи, начинается с 0 и увеличивается на 1 с каждым отосланным сообщением. Таким образом, если сообщение было перехвачено и позже отослано, или трафик был перепутан, то и сервер, и клиент после проверки кода авторизации закрывают соединение.

     

     

    Как видно, протокол этот отнюдь не простой, а потому я ещё больше ценю свою программку. Она не полностью соответствует стандартам, в ней нет проверки сертификата, да и сиферы пока только с RSA, но уже позволяет создать соединение с GitHub, Google, да и другими HTTPS-сайтами.

     

    d7K3vqv.png

     

    Оно работает для меня как-то нестойко, шатко, долго, в общем, неустойчиво. Но ведь работает! На скрине выше успешно была получена информация длиной в 27763 байта.

     


     

    Библиотека предоставляет таблицу с одной функцией: tlsSocket(host: string[, port: number]). Возвращает она обёрнутый сокет: таблицу с функциями:

    • socket.write(data: string) — посылает данные на сервер.
    • socket.read(): string or nil, string — читает данные с сокета.
    • socket.close() — закрывает сокет (делает это правильным способом, оповещая сервер).
    • socket.id(): string — возвращает ID сокета.
    • socket.isClosed(): boolean — говорит, закрыт ли сокет.
    • socket.setTimeout(to: number) — устанавливает предельное время ожидания данных с сокета, в общем, таймаут соединения.

    Все функции вызываются с ., не с :!

     

    Зависимости:

    • Компоненты
      • Карта данных второго уровня. Она предоставляет получение рандомных данных и HMAC.
      • Улучшенный шифратор (Advanced Cipher Block) из Computronics. RSA шифрование.
      • Интернет-карта, чтобы, очевидно, посылать запросы.
    • Библиотеки
      • libder-decoder — моя собственная библиотека, которая парсит сертификаты.
      • libbigint — либа БОЛЬШИХ чисел (сначала была библиотека от @Zer0Galaxy, но работала она жутчайше медленно: более минуты против пары секунд).
      • lua-lockbox — либа с криптофункциями. К сожалению, не все они работают на Lua 5.3, но есть рабочий AES-128 шифратор.
    • Lua 5.3. На прошлой версии работать не будет!
    • OpenOS 1.6.
    • OpenComputers 1.6.

    Установка из OPPM: oppm install libtls. Исходный код.

     

    P. S. Прошло достаточно много времени, и теперь уже на дворе (с 2018) выкачен TLS 1.3, который как-то слишком разительно отличается от TLS 1.2, который я изучал и имплементировал. Но 1.2 должен пока (минимум ещё годов 4-5) работать.

    • Нравится 8

  12. Шифт-кликни процессор. Магическим образом получается "В OpenOS используется Lua5.3. Там даже /lib/bit32.lua служит лишь для обратной совместимости с Lua5.2, внесение изменений в этот файл даёт некоторый эффект".

    • Нравится 1

  13. В Lua 5.3 есть побитовые операторы, и для каждой имеются метаметоды:

    • __shl<<, побитовый сдвиг влево.
    • __shr>>, побитовый сдвиг вправо.
    • __bnot~ (унарный), побитовая инверсия.
    • __bxor~ (бинарный), исключающее ИЛИ.
    • __bor|, побитовое ИЛИ.
    • __band&, побитовое И.
    • Ну и ещё есть __idiv//, деление нацело, без дробной части.

  14. Для моего наполеонского проекта (который, к слову, уже на ¾ готов) потребовалась данная библиотека, так как необходимо было хранить действительно большие числа (1357 байт в длину). Проблема только в том, что проект этот очень активно использует побитовые операции из Lua 5.3: >>, <<, |, ~ (и XOR, и BNOT), &. Прошу как-нибудь сделать метаметоды и для этих операций.

     

    К слову, библиотека теперь доступна для скачивания через OPPM: oppm install libmetanum.


  15. Все барьеры будут сняты, как только TLS станет доступен :) Или как только я разберусь, как он вообще работает...

     

    Прогрессбар - можно было и точками сделать. Как в NIX-системах. По-типу : Loading . . . . . . . . . . . . . . .                   . 72%

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

     

    А где лайк Тоторо? :smile25:

    Ещё занят в такое время, наверное :)

    • Нравится 1

  16. hasTag просто говорит, есть ли теги нбтшные. tag надо включать в конфигах, ну и по сути, это всего лишь пожатая гзипом структура. Качай libitem с OPPM и радуйся.

     

    Атрибут же отдельный под инфу запилить будет не лишней фичей.


  17. Сигнатура функции use: function(side:number[, face:number=side[, sneaky:boolean=false[, duration:number=0]]]):boolean, string -- Perform a 'right click' towards the specified side. The `face' allows a more precise click calibration, and is relative to the targeted blockspace.. (Требуется component.robot, не require("robot")!)

    Как видно, вторым аргументом является загадочный face, который принимает число и по умолчанию равняется стороне, куда кликаем.

    Насколько я могу судить, нужно вызвать component.robot.use(3, 0).
     

    P. S. Взаимодействовать с сундуком по-диагонали невозможно.

    • Нравится 1

  18. А ещё лучше — не выпендриваться, и использовать мягкую индентацию пробелами вместо жёстких табов.

    Вы не мейкфайл или сырцы ядра Линукса пишете. Есть правила, стайл-гайды, которые рекомендуется соблюдать.

    Так вот, для Луа и Мункрипта принят размер индентации в 2 пробела, использовать жёсткий таб не надо.

     

    Для справки можете ознакомиться со статьёю на вики.


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

    А => ты с успехом можешь юзать внутри функции.

    test = ->
      -- вот и "=>"
      func = (a) =>
        @foo = "bar" .. tostring tonumber a
      func
    fn = test!
    a = {foo: "baz"}
    fn a, 5
    print a["foo"]
    assert a["foo"] == "bar5"
    

    Просто нужно понять, что =>, на самом деле, просто работает как : в Луа: добавляет сам в начало аргумент self, который может принимать любое значение. А cls\method a, b, c преобразуется в cls.method cls, a, b, c. Просто синтаксический сахар, не более того.

    • Нравится 1
×
×
  • Создать...