Перейти к публикации

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

HeroBrine1st

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

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

  • Посещение

  • Дней в лидерах

    8

Все публикации пользователя HeroBrine1st

  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 не позволяет.
  2. Система предоставляет графическую оболочку для планшетов, имеющую минималистичный интерфейс и понятное только мне использование, а так же минимальное (надеюсь) потребление ОЗУ. Из фич оболочка дает: Возможность использования OpenOS частично без использования команд. Для особых случаев - используем контекстное меню -> "Выполнить команду" Возможность посылки уведомлений пользователю. Многозадачность не реализована, так что пассивную часть программы нужно активировать библиотекой thread из OpenOS Запуск программ-папок (*.pkg). Чисто для разграничения кода и возможности создания модулей Адаптивная отрисовка интерфейса. На экранах с разрешением по ширине, не кратной 20, могут возникать проблемы, однако без искусственного изменения разрешения такого не произойдет. Помощь в настройке при первом запуске. На случай проблем - на первом экране используется колёсико мыши. Блокировка экрана В планах: Свайпы по рабочему столу для смены страницы. Горячие клавиши на главном экране (клик+delete - удалить, ctrl+e+клик - редактировать и подобное) Специальный фреймворк аля Zygote из андроида. Естественно абсолютно весь функционал переписывать не буду, однако основной останется. Этот фреймворк повлечет за собой полный рефакторинг кода (перевод системы на него), но полностью устранит все недостатки Установка - pastebin run 1xudmTa7 Выберите в установщике TabletOS и канал обновлений "Stable". В дальнейшем система будет уведомлять о обновлениях, при получении оного нужно будет зайти в настройки (контекстное меню в левом нижнем углу экрана) и там обновиться. В случае, когда при обновлении бросает ошибку - посмотрите изменения, там будут инструкции по ручному обновлению или переустановке системы. Если и это невозможно. переустановите систему. Данные должны сохраниться, а вот система - обновиться. Зачем я ее сделал - не знаю сам. Но ей полтора года и я ее отрефакторил полгода назад. Не люблю бросать начатое, хотя вроде оболочка уже бесполезна. Сама идея появилась от проблемы медленного запуска программ на моем планшете. Я хотел сделать быстрый запуск включил-нажал, но я не нашел достойной системы, которая могла тогда установиться на планшет. Решил сделать сам.
  3. HeroBrine1st

    TabletOS

    Точняк, ступил) спасибо
  4. HeroBrine1st

    TabletOS

    Поддерживаться-то поддерживается, но уместить в одну строку я его не смогу. Увеличить кол-во строк не могу - в андроиде такого нету (да, статусбар я срисовал именно оттуда ), да и некрасиво будет. Было бы 4х8 субпикселей в шрифте брайля - было бы проще.
  5. Я думаю, что любой из вас пытался сделать права доступа к определенным файлам. У некоторых это получалось - например разработчик opensecurity со своей secureos, но она тоже взламывается. Не думаю, что кому-то это удалось, поэтому встречайте Module Kernel. Это еще сырое ядро, и даже неспособное открывать какие-либо программы, поэтому я прошу подкинуть идей насчет некоторых компонентов и sandbox-окружения (ибо я удаляю все компоненты из окружения и добавляю их в System Calling Interface, а это ведь код). Код можно посмотреть тут https://github.com/HeroBrine1st/Module-Kernel . За лишние do-end не ругайтесь: это для удобства чтения кода в моем редакторе, ведь можно сделать вот так: И можно будет получить быстрый доступ к определенному куску кода. Установить это ядро можно поверх openos. Вот установщик (по быстрому сляпал, поэтому использую установщик ECS): https://github.com/HeroBrine1st/Module-Kernel/blob/master/v1.0/installer.lua. Вместе с моим кодом есть еще два файла, которые я выдрал из openos - buffer.lua и serialization.lua. Оба нужны для SCI. Первый для сокетов, а второй - для чтения и записи прав доступа. Список того, что есть: Демоны - слушают все события в системе и обрабатывают их. На форуме выкладывали методику построения резидентных программ, а это тоже самое, но в виде файла. Что бы создать демона, просто сделайте, что бы он вернул при запуске 3 параметра - свое имя, функцию старта (можно поставить хоть пустышку в виде function() end, но главное - не nil и ничего другого, кроме function) и функцию, которая будет запускаться при каждом событии в системе с первым параметром - таблица с событием (touch, key_down и подобное). Если файл демона есть в папке /daemons/ - он подключится сам, никаких действий с вашей стороны больше не потребуется. Базовая система модулей - kernel.loadModule(name:string). работает почти как require, но загружает модули из /module/?.lua. Недописанная библиотека безопасных обращений к модулям и прав доступа к файловой системе. UPD: драйвера. Подробнее ниже. Один скриншот запущенного ядра. Белая полоска внизу - поле для ввода текста. Все основные идеи я воплотил, и они почти закончились, поэтому подкиньте, пожалуйста, идей. P.s. думаю, что документация не нужна, поскольку в коде все и так понятно. P.s.s. ниже - в комментариях
  6. Перенесите эту тему в чулан пожалуйста)
  7. HeroBrine1st

    TabletOS

    85% - заряд батареи. Хочу найти иконку батареи, да не весь юникод поддерживается(
  8. HeroBrine1st

    TabletOS

    Выкатил обновление. Свайпов нету (слишком сложно, а я обновление хотел выпустить сегодня). Добавлено: Показатель оперативной памяти в строке состояния Обработчик малого количества оперативной памяти "Расположение файла" у ярлыков Ярлыки теперь работают и для контекстного меню Блокировка системы паролем Изменено: Вложенные контекстные меню подсвечиваются (вы это можете видеть на скриншотах выше - зеленым подсвечивается) Большинство программ (в том числе контекстное меню) реагируют не на нажатие, а на отпускание кнопки мыши Незначительные изменения системы обновлений Исправлено: OS.lua могла неверно думать о количестве элементов на рабочем столе Дублирование ошибки системы обновлений P.s. нужна помощь с алгоритмом свайпа. Я не до конца понимаю, как мне рассчитать координаты одновременно двух страниц.
  9. HeroBrine1st

    TabletOS

    Не тестировал от слова совсем, однако быстрого выключения не наблюдал. Там DoubleBuffering должна оптимизировать работу с gpu, а соотвественно и основное потребление энергии. Операций CPU в конфиге не видел, вроде и не должен потреблять энергию. UPD: Проверил, примерно 1% в минуту без апгрейдов на батарею кушает в простое
  10. HeroBrine1st

    TabletOS

    Всмысле прокрутка с помощью зажатия и движения мышки? Этого пока нет. Но идея отличная. спасибо
  11. HeroBrine1st

    TabletOS

    Ой, забыл xD Спойлеры делать не умею. так что как-то так пока. Возможно на скриншоты слишком новые и из разрабатываемой версии.
  12. HeroBrine1st

    TabletOS

    Репозиторий с кодом - https://github.com/HeroBrine1st/TabletOS Прошу не углубляться в мой код. Есть неполная документация - https://github.com/HeroBrine1st/TabletOS/wiki P.s. система юзает DoubleBuffering от ECS, можно юзать его библиотеку GUi.lua (ее скачать надо) UPD2: Скриншоты -
  13. Установка - pastebin get wmAj3hcP /bin/cryptednote.lua Библиотека - pastebin get uDnh4RLi /lib/crypt.lua Альтернативный вариант установки (выберите там CryptedNote, это мой установщик на все мои проги :) ) - pastebin run 1xudmTa7 Использование: cryptednote name [options] Опции: --rewrite; -w - перезапись файла --execute; -x - исполнение файла без записи на диск Пароль закрыт точками. Зашифрованные файлы хранятся в /usr/cryptednote (легко меняется в коде). Если файл редактируется, он находится в /usr/cryptednote/temp.crtnt (в нешифровнном виде). Код - https://pastebin.com/wmAj3hcP
  14. Еще раз обновил утилиту) 1. Как говорил ECS, теперь временный файлик находится на диске. По умолчанию - /usr/cryptednote/temp.crtnt, + использую computer.pullSignal 2. Заменил gpu.set на функцию write (стащил из другой своей программы ), которая стирает и пишет на последней записанной строке И предыдущие изменения: 3. Поддерживает большие файлы 4. Появился флаг --execute (-x), который расшифровывает и вызывает файл без его записи на диск. 5. Файлы программы перенесены в /usr/cryptednote и это можно изменить в коде. Из-за записи на загрузочный диск упала безопасность - в случае принудительного выключения устройства или (хуже) вытаскивания диска расшифованный файл так и останется лежать. Так что используем планшеты и желательно в безопасных местах)
  15. Чутка обновил утилиту. Из изменений - заметки перенесены в/usr/cryptednote (легко меняется в коде, если надо все вернуть) и поддерживает огромные (реально огромные файлы вплоть до свободной ОЗУ) файлы. Но с последним проблемы, оно как-то не так записывает расшифрованный файл в /tmp/, обрезает его почему-то. Установка тем же методом. Про поддержку огромный файлов - они вызывали ошибку TLWY, пришлось делать цикл (спасибо за блочность алгоритма) и вставлять os.sleep(0). P.s. там в коде можно найти gpu.set вместо term.write - это мне было лень делать функцию переноса курсора на начало строки) UPD: еще флаг --execute сделал (или -x), расшифровывает файл и запускает его. Расшифрованный код никуда не записывается, он остается только в ОЗУ
  16. Я рассчитывал на то, что если админам понадобится ключ - они пойдут в кеш сервера и пойдут его искать там. Ну раз у луа такая логика, значит придется удалить этот участок кода.. P.s. и переменные можно вообще не обнулять получается? нет смысла? При выключенной буферизации все изменения переменных будут моментально записаны на диск сервера. Если это HHD, то 35 (уточняется) итераций как раз будет достаточно для полной перезаписи информации (как оказалось, не информация перезаписывается, а ссылка на нее). А если SSD, то Trim удалит остаточные данные.
  17. Из какого-то канала Telegram. Подтвердить инфу не могу, увы( Лишним не будет - выполняется моментально. os.sleep чисто для наблюдения процесса поставил, иначе ввел пароль и сразу к файлу
  18. ОЗУ компа на хост-мащине хранится в ее ПЗУ. Для полной перезаписи с удалением информации нужно 35 итераций. Если включена буферизация, это не поможет, но если отключена - вполне рабочая вещь. К слову, о мануале при первом запуске утилиты и продолжению по клику. Я сделал.
  19. Ответ - http://prntscr.com/jjvx97 Код: Все так же, как и без bigint - число получилось совсем другим. Лично я думаю, что дело в тесте на простоту, поскольку тест Ферма - вероятностный тест и он можешь только лишь подтвердить, составное ли ему дали число, но опровергнуть - нет. UPD. использовал третий метод + бинарник луа. результат тот же - http://prntscr.com/jjw0m9
  20. Оптимизировал возведение в степень по модулю. Работает с большими числами очень быстро и хорошо, вероятность получения inf как результат степени и остатка от деления 0 минимальна. От метачисел избавился, теперь - чистая Lua. (Генератор ключей я взял с одного форума разработчиков, сам 2 часа бился над алгоритмом). Код библиотеки: local RSA = {} local primes = { --таблица простых чисел до 1013 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, } local primes_start = 30 -- начальный индекс рандомизации rsa_p и rsa_q local function modulePow(n1,n2,m) --возведение в степень по модулю local c = 1 for i = 1, n2 do c = (c*n1)%m end return c end function RSA.getkey() rsa_e = 0 rsa_p = primes[math.random(primes_start,#primes)] rsa_q = rsa_p while rsa_q == rsa_p do rsa_q = primes[math.random(primes_start,#primes)] end rsa_n = rsa_p*rsa_q rsa_phi = (rsa_p-1)*(rsa_q-1) while rsa_e == 0 do local prime = primes[math.random(1,#primes)] if rsa_phi%prime > 0 then rsa_e = prime end end for i = 2, rsa_phi/2 do if ((i*rsa_phi)+1)%rsa_e == 0 then rsa_d = ((i*rsa_phi)+1)/rsa_e break end end local public = {rsa_e,rsa_n} local private = {rsa_d,rsa_n} return private, public end function RSA.encrypt(number,pE,pN) return modulePow(number,pE,pN) end function RSA.decrypt(number,sD,sN) return modulePow(number,sD,sN) end return RSA Методы: RSA.getkey(): table,table - возвращает 2 таблицы с приватным (секретным) и публичным ключами. Каждая таблица имеет 2 числа, в последующих функциях можно просто использовать table.unpack и вставлять нужную таблицу RSA.encrypt(number:number, public_E, public_N): number - возвращает зашифрованное число, которое можно расшифровать только закрытым ключом RSA.decrypt(cryptedNumber:number,secret_E,secret_N): number - возвращает дешифрованное число, которое можно использовать, например, как сеансовый ключ (для этого идеально подходит кодирование степени какого-либо числа) и шифровать с помощью, например, более производительной сети Фейстеля, выложенной ранее. Кто-то скажет, что есть дата-карта, но в планшетах нет лишних слотов для нее.
  21. Натыкал. жду ответа третью минуту. а, ща исправим (не хочу плодить сообщения)
  22. Однако ошибка все равно происходит. Причем там, где обычная арифметика справляется на ура. И сама ошибка - http://prntscr.com/jj3jml 76 строка, затем 31 и ошибка происходит в рекурсивном методе method2. Вот же ответ обычной арифметики (Удалил строки с 5й по 7ю) за ~0.3 секунды - http://prntscr.com/jj3kme
  23. Кажется, я понял, в чем ошибка. Рекурсивный метод вызывает сам себя, а с ним вызывается и преобразование числа(уже таблицы) в bigint-таблицу. Вот тут и происходит ошибка.
  24. Жалуется на то, что получило значение, отличное от числа. Не знаю, как это фиксить, ибо я передаю число.
  25. Отрицательные числа не нужны.
×