Перейти к публикации
Новости
  • В ближайшее время постараюсь разобраться с картой сервера/ЛК/бб кодами
  • Новости

Таблица лидеров


Популярные публикации

Отображаются публикации с наибольшей репутацией начиная с 12.01.2019 во всех областях

  1. 3 балла
    string.gsub, безусловно. Забудь про какие-то жутчайшие костыли с string.find и прочим. Гсаб тут просто рулит и педали от пола не отрывает. Он может поменять одно слово на другое. string.gsub("abc", "a", "d") == "dbc" Он может поменять один паттерн на что-то другое. string.gsub("hello world", "%w+", [["%1"]]) == [["hello" "world"]] Он может поменять один паттерн на табличное значение. local greek = { l = "λ", o = "ο", g = "γ", i = "ι", k = "κ", e = "ή", } string.gsub([[logic derives from Ancient Greek $l$o$g$i$k$e]], "$(%w+)", greek) == "logic derives from Ancient Greek λογική" И самое крутое: он может менять один паттерн по функции, вызывая её для каждого матча. string.gsub([[breaking news: title case considered stupid]], "(%w)(%w*)", function(head, tail) return head:upper() .. tail end) == [[Breaking News: Title Case Considered Stupid]] Читайте подробнее вот где-то тут.
  2. 2 балла
    Система предоставляет графическую оболочку для планшетов, имеющую минималистичный интерфейс и понятное только мне использование, а так же минимальное (надеюсь) потребление ОЗУ. Из фич оболочка дает: Возможность использования OpenOS частично без использования команд. Для особых случаев - используем контекстное меню -> "Выполнить команду" Возможность посылки уведомлений пользователю. Многозадачность не реализована, так что пассивную часть программы нужно активировать библиотекой thread из OpenOS Запуск программ-папок (*.pkg). Чисто для разграничения кода и возможности создания модулей Адаптивная отрисовка интерфейса. На экранах с разрешением по ширине, не кратной 20, могут возникать проблемы, однако без искусственного изменения разрешения такого не произойдет. Помощь в настройке при первом запуске. На случай проблем - на первом экране используется колёсико мыши. Блокировка экрана В планах: Свайпы по рабочему столу для смены страницы. Горячие клавиши на главном экране (клик+delete - удалить, ctrl+e+клик - редактировать и подобное) Специальный фреймворк аля Zygote из андроида. Естественно абсолютно весь функционал переписывать не буду, однако основной останется. Этот фреймворк повлечет за собой полный рефакторинг кода (перевод системы на него), но полностью устранит все недостатки Установка - pastebin run 1xudmTa7 Выберите в установщике TabletOS и канал обновлений "Stable". В дальнейшем система будет уведомлять о обновлениях, при получении оного нужно будет зайти в настройки (контекстное меню в левом нижнем углу экрана) и там обновиться. В случае, когда при обновлении бросает ошибку - посмотрите изменения, там будут инструкции по ручному обновлению или переустановке системы. Если и это невозможно. переустановите систему. Данные должны сохраниться, а вот система - обновиться. Зачем я ее сделал - не знаю сам. Но ей полтора года и я ее отрефакторил полгода назад. Не люблю бросать начатое, хотя вроде оболочка уже бесполезна. Сама идея появилась от проблемы медленного запуска программ на моем планшете. Я хотел сделать быстрый запуск включил-нажал, но я не нашел достойной системы, которая могла тогда установиться на планшет. Решил сделать сам.
  3. 2 балла
    Вот посмотри на все поддерживаемые символы. http://computercraft.ru/topic/1962-shrift-v-oc/ А что собственно мешает отрисовать ту же батарейку в 2-3 символа. Сделай её лежачей да и все.
  4. 2 балла
    Билда не будет, можете не заказывать. Сборка стабильная, никаких модификаций пока вносить всеравно не будут. Да и куда еще вносить то, и так майн уже 3 гига памяти кушает, а у многих кто играет техника чуть сложнее калькулятора. Труб нет, но есть трасвекторы 2 типов, дроны, транспозеры, роботы или на крайняк 4 типа воронок, или раздатчики с импульсными генераторами редстоуна, пространственные сундуки и цисцерны, бочки из тинкерса. Так что автоматизации выше крыши. Почти все моды управляются через Opencomputers, ну кроме магических, но это и понятно. О каком карьере вы говорите? Ни одному карьеру и не снилось, что может сделать 1 робот. А если хорошо владеете программированием, то можно подчистую вынести весь мир. Недавно вот на сервере тестировал программу, около 15 минут работы робота и чанка уже не существует, а все ресы упакованы красиво в сундучки. Кому интересно попрыгайте по болоту на спавне, там только верхний слой земли остался. Вот что действительно надо, так это обновить мир Evil, где ресурсы добываются. А то там как кроты прошлись, дырки и вдоль и поперек.
  5. 2 балла
    Выкатил обновление. Свайпов нету (слишком сложно, а я обновление хотел выпустить сегодня). Добавлено: Показатель оперативной памяти в строке состояния Обработчик малого количества оперативной памяти "Расположение файла" у ярлыков Ярлыки теперь работают и для контекстного меню Блокировка системы паролем Изменено: Вложенные контекстные меню подсвечиваются (вы это можете видеть на скриншотах выше - зеленым подсвечивается) Большинство программ (в том числе контекстное меню) реагируют не на нажатие, а на отпускание кнопки мыши Незначительные изменения системы обновлений Исправлено: OS.lua могла неверно думать о количестве элементов на рабочем столе Дублирование ошибки системы обновлений P.s. нужна помощь с алгоритмом свайпа. Я не до конца понимаю, как мне рассчитать координаты одновременно двух страниц.
  6. 2 балла
    Что-то быстро тема утихла. Так что я её подниму. Наконец-то она пришла! (Немного криво сфотографировал)
  7. 1 балл
    Блок: if not monsters then ... end не имеет смысла. В начале программы, вот так как у тебя. Это же проверка имени того, на кого "сагрился" датчик. И проверять надо после того как это имя было получено, внутри цикла. Ты можешь оформить проверку как функцию (и тогда ее можно будет как раз оставить в начале программы): function isMonster(name) for i=1, #monsterlist do if name == monsterlist[i] then return true end end return false end Тогда внутри цикла, после срабатывания сенсора, можно будет проверить, монстр это был, или нет: while true do local _, address, x, y, z, name = event.pull('motion') if isMonster(name) then print("Это был моб...") else print("Кто-то ломится в дом!") end end
  8. 1 балл
  9. 1 балл
    Паттерны, они же шаблоны. Они же аналог "регексов" для Луа. Вот тут про паттерны на английском: http://lua-users.org/wiki/PatternsTutorial Тут - на русском: http://bot4sale.ru/blog-menu/qlua/265-lua-patterns.html Ну и вообще погуглить можно.
  10. 1 балл
    me_interface.exportItem({ id = "IC2:itemOreIridium" }) id = name из inventory_controller.getStackInSlot()
  11. 1 балл
    В чистом моде OpenComputers (без дополнений) есть такая хрень - датчик движения. Юзается примерно так: local event = require('event') local com = require('component') local sensor = com.motion_sensor while true do local _, address, x, y, z, name = event.pull('motion') print(name) end Чувствительность настраивается. В дополнении OpenSecurity или Computronics есть радар.
  12. 1 балл
    string.find возвращает 2 величины - начало искомой подстроки и конец. Т.е. ты можешь получить начало слова и его конец, а затем обрезать с помощью unicode.sub(строка_для_обрезки,начало,конец). string.sub лучше для строк с юникодом не использовать. Пример кода - https://ideone.com/tEZHqh Что делает код выше со строкой str: 1.Ищет в строке подстроку "badWord" и получает положение ее начала и конца с помощью string.find(строка_в_которой_ищем,строка_которую_ищем) 2. Обрезает строку до первой буквы слова с помощью string.sub(строка_для_обрезки,начало,конец) 3. Обрезает строку от последней буквы слова с помощью string.sub(строка_для_обрезки,начало) (конец можно опустить - тогда он станет равен -1, т.е. до самого конца строки) 4. Конкатекует две строки, получая строку без слова badWord В данном случае надо будет делать это в цикле, пока string.find не вернет nil, и переходить к следующему "запрещенному" слову. P.s. возможно много информации. Отвечаю кратко - тебе нужен string.sub (s, i [, j]), где s - строка для обрезки, i - начало, j - конец. UPD: Не подумав написал. Можно использовать string.gsub(строка_из_которой_удалить,слово_которое_удалить,на_что_заменить), хотя при некоторой доработке можно с помощью алгоритма выше сделать складывание "запрещенных" слов в отдельную строку/таблицу, чего gsub не позволяет.
  13. 1 балл
    Над шифровкой программ давно уже думали. Как вариант это применять какой-то сложный алгиритм преобразования и порциями загружать в оперативку через load. Но всеравно, отледить и дешифровать можно.
  14. 1 балл
    Это вряд ли. Кто-то всё равно разберётся в особенностях твоего кода, если программа достаточно ценна. А если она бесполезна, то вчитываться в её код и так мало желающих. Бесполезность программы является лучшей защитой от чтения кода.
  15. 1 балл
    Тема живёт активностью её участников. Взять, например, тебя. Ты сам предпочитал обсуждать эту тему в чате. И вот результат. Или, например я. Я не планирую форсировать это обсуждение. Я помню своё обещание рассказать о новом паяльнике и вернусь к этой теме, когда найду время попрактиковаться в пайке. Каждое своё движение я описывать не планирую. Я не уверен, что кому-то интересны новости о моих покупках. Скорее, будет интересен отчёт о проделанной работе. Возможно, даже о неудачной. Но могу и рассказать: На прошлой неделе купил два конструктора, чтобы попрактиковаться в поверхностном монтаже: "Текущая вода 10 диодов" и "Колесо фортуны SMD 24 диода". Покупал в местном магазинчике, ссылок у меня нет. Ещё купил флюс-гель. Индикаторный. Что такое, точно не знаю, флюс имеет красный цвет, а народ в интернете пишет, что флюс обесцвечивается при достаточном нагревании, что позволяет контролировать нагрев. Сам я паять этим флюсом пока не пробовал, о качестве не скажу, это вообще первый желеобразный флюс, попавший в мои руки. Я просто хочу поэкспериментировать с такой консистенцией флюса т.к. при плотном монтаже канифоль уже перестала мне казаться удобной: слишком сложно дозировать нужное количество и переносить на плату. А спиртоканифольный раствор и раньше мне не особо нравился: сильно растекается, очень липкий, разбрызгивается при касании горячим жалом паяльника. Обо всём остальном расскажу, когда либо найду время для пайки, либо устану от других дел и захочу погрузиться в неспешный и медитативный процесс монтажа. В общем, спешить не буду ни с пайкой, ни с развитием этой темы.
  16. 1 балл
  17. 1 балл
    Продолжить позволю себе. Луа принимает спокойно сокращённые версии масок: `"*a"`, например. Окроме этого есть ещё и фича Lua 5.3: звёздочку можно не писать. В 5.2 работать не будет, разумеется. Помимо этого, слишком часто ты юзаешь `component.proxy`. Каждый вызов создаётся совершенно новая таблица, хоть и пустая. Не особо оптимальное использование. Для прямого вызова по адресу лучше использовать `component.invoke(address, methodName, arguments...)`. Наконец, советую чаще использовать пустые строки. Они очень полезны, как ни странно. Я, например, отделяю каждый блок пустой строкой, кроме тех, которые в начале или в конце, — читать такое гораздо проще. По той же причине, кстати, и на форуме стараюсь абзацы короткими делать и отделять их \n\n. Примеры кода: local function recurse(g) return (function(f) return g(function(x) return f(f)(x) end) end)(function(f) return g(function(x) return f(f)(x) end) end) end print(recurse(function(rec) return function(n) if n == 0 then return 1 else return n * rec(n - 1) end end end)(10)) --> 3628800 while true do t.write("> ", true) local tcom = t.read() if not tcom then os.exit() end local com, arg = tcom:match("(%w+)%s(%w+)") if arg == "all" then turn(0, coms[com], at) else turn(at[tonumber(arg)], coms[com]) end end
  18. 1 балл
    Ой, забыл xD Спойлеры делать не умею. так что как-то так пока. Возможно на скриншоты слишком новые и из разрабатываемой версии.
  19. 1 балл
    Этот метод для блоков с инвентарями добавляет мод OpenPeripheral. Возвращает массив таблиц с информацией о предметах. Индекс - это номер слота. Получить инфо о предмете в слоте N: component.chestname.getAllStacks()[N].all()
  20. 1 балл
    Это есть наиполезнейшая штука, чтобы творить жутчайшей степени норкоманию. Особенно вместе с метаметодами. Например: rule(public) { every "10 seconds" } (function(state) state.counter = state.counter + 1 end) Раскрывается оно в это: Не знаю, где такое в принципе может пригодиться, но такая крайняя эволюция идеи о Fluent interface меня в последнее время сильно забавляет. Так можно на базе Lua запилить и какой-нибудь миниязык даже. class [[public static]] "What" { member [[public static]] "main" (throws "IOException") (function() throw(new "IOException"("what.")); end); } И раскрытие: Неясен тут только смысл.
  21. 1 балл
    Не так давно @LeshaInc выкладывал свою программку, фтп клиент-то, и кто-то сказал про ssh. Это, конечно, задача интересная, но речь не об этом. Уже тогда на протяжении дней трёх я изучал вот этот документец. И с тех пор, добавив более 4 тысяч, удалив более двух тысяч строк кода, перечитав этот RFC вдоль и поперёк, исписав 22 страницы моего настольно-напольного блокнота, погуглив 183 запроса про тлс (надо же, гугловская статистика иногда бывает полезна для себя), чуть не потратив 2500 рублей на 12 страниц, описывающих формат десятичных чисел ( ) и даже найдя один баг в 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.1 И хоть сейчас 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-сайтами. Оно работает для меня как-то нестойко, шатко, долго, в общем, неустойчиво. Но ведь работает! На скрине выше успешно была получена информация длиной в 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. Исходный код.
  22. 1 балл
    Зря ты придираешься к комментариям. И пробельные строки, и комментарии из повторяющихся символов -- нормальные способы оформления, упрощающие восприятие кода.
  23. 1 балл
Таблица лидеров находится в часовом поясе Москва/GMT+03:00
  • Рассылка

    Хотите узнавать о наших последних новостях и информации?

    Подписаться
×