• Как удалить дубликаты внутри строки?

    3vi1_0n3
    @3vi1_0n3
    #!/bin/bash
    IFS='
    '
    exec 3<>data.txt
    while read -u 3 line
    do
    (
            IFS=' '
            result=()
            for word in $line
            do
                    [[ ! "${result[*]}" =~ "$word" ]] && result=(${result[*]} $word)
            done
            echo ${result[*]}
    )
    done
    Ответ написан
    1 комментарий
  • Как превратить белый фон в прозрачный у JPEG-картинки на сайте?

    kocherman
    @kocherman
    Команда должна работать на всех операционных системах. Требует установленный ImageMagick. Можно переделать в функции PHP, но мне лень.
    convert source.jpg -fill none -fuzz 1% -draw 'matte 0,0 floodfill' -flop  -draw 'matte 0,0 floodfill' -flop dest.png

    Фон берётся из пикселя [0,0], нахлест (fuzz) 1%.
    Как применить команду в цикле пакетно?
    Например так:
    echo 'convert $1 -fill none -fuzz 1% -draw "matte 0,0 floodfill" -flop  -draw "matte 0,0 floodfill" -flop ${1%.*}.png' > ~/convert.sh
    chmod +x ~/convert.sh
    cd ~/Pictures
    find -name '*.jpg' | xargs -L1 -P8 ~/convert.sh
    rm ~/convert.sh

    Скрипт уберет фон у всех картинок *.jpg в папке $HOME/Pictures в 8 потоков.
    Ответ написан
    Комментировать
  • Как найти путь до скрипта подбирающего пароль mysql?

    sudo cat /var/log/mysql/error.err | egrep '[aA]ccess denied'

    https://serverfault.com/a/455610

    Добавлено
    Надо, собственно, отключить этот сервер от продакшена, от греха подальше и на нём проводить эксперименты. А для продакшена подготовить свежеустановленную ОС с более серьезным подходом к защите.
    Если есть спортивный интерес обнаружить зловред, то:
    1. вместо действительного MySQL запустить программу-приманку.
      https://github.com/sjinks/mysql-honeypotd
    2. далее, можно установить atop, acct:
      sudo apt install acct atop
      atop собирает информацию о производительности системы и запускаемых процессах
      acct ведет мониторинг активности пользователей (в частности, sa выводит список процессов)

      https://haydenjames.io/use-atop-linux-server-perfo...
      https://www.tecmint.com/how-to-monitor-user-activi...

      соберет статистику за полдня-день и тогда можно анализировать историю так:
      atop -r /var/log/atop/atop_20200729
    3. Если не хватит, то у меня появилась такая идея: можно написать программу. Она может слушать на порту 3306 и регистрировать IP адрес и также узнавать номер процесса клиента, по которому можно узнать и путь и от какого пользователя запущен.
      Узнать номер процесса по прослушиваемому порту
      sudo lsof -i :2345
      Узнать что за пользователь и откуда запускается
      ls -l /proc/6726/exe
      pwdx 6726


    Ответ написан
  • Актуален ли Yii2 Фреймворк в 2020?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Тут много нюансов и ответить однозначно сложно. Как уже написал Иван Шумов фреймворк - это инструмент. Каждый инструмент подбирается под конкретную задачу:

    • СMS - система управления сайтом (Wordpress, Joomla и т.д.). Создан для простого и удобного управления сайтом (контентом). Как правило, доступен для работы простому пользователю, без знания языков программирования. Подойдёт для: простых сайтов, блогов, там где не требуется нагрузка и безопасность.
    • RAD framework (Yii2) - фреймворк для быстрой разработки. RAD Фреймворк имеет, монолитную и связанную архитектуру. Он является антипаттенрном и позволяет вам делать всё что угодно, лишь бы вы быстро собрали свой проект. (Используется паттерн Table First - спроектировали базу и по схеме сгенерировали модели данных). При этом Вам никто не говорит, что он не может использоваться для серьёзных проектов. Например, DNS..
    • Компонентные фреймворки (Symfony, Laravel). Это фреймворки, которые разделены на независимые компоненты, которые вы можете подключать к своему проекту при необходимости. В самом фреймворке заложен только необходимый минимум, а всё остальное вынесено в компоненты. Эти компоненты могут использоваться (или не использоваться). Могут использоваться для другого фреймворка (сам Yii2 использует компоненты симфони). Doctirine, которая позволяет вам забыть о базе данных и сосредоточиться на коде. Фреймворк задаёт вам некий стиль, некую структуру и типизацию и требует более хорошего и обдуманного кодинга. Например, при использовании twig вы не сможете сделать запрос в view. Чего нельзя сказать про Yii. Вы там можете построить хорошую бизнес логику, что и встречается...
    • Микрофреймворки (Slim). В таких фреймворках заложен самый минимум, а всё остальное программист должен искать или писать самостоятельно, выстраивать свою архитектуру приложения. Он легкий и простой. Кто-то и Symfony относит к микрофреймворкам. Тут меня многие могут упрекнуть. Подойдет для очень простых, гибких, легких приложений, например, микросервисов. Фреймворк не задает вам никаких правил и архитектуры. Вы должны сами продумать все детали приложения. Где-то используете twig, где то Data Mapper, где-то ActiveRecord. Для работы с таким фреймворком требуется много знаний и опыта. Так как вам всё придется делать самому. Здесь за вас никто не подумал.

    Что же для чего выбрать?
    Решать вам исходя из конкретной задачи. Здесь нет понятия хуже/лучше. Чтобы что-то выбрать нужно на каждом попробовать собрать пару проектов. Тогда и будет понимание когда и что выбирать. Это как автомобиль. Какой лучше BMW или LADA? Оба автомобиля, но каждый для своей аудитории, по своим потребностям, для своих задач.

    Почему другие говорят что Yii2 плохой?
    • 2 версия морально устарела. Это не значит что ВЕСЬ фреймворк плохой, просто им давно никто не занимался. Сейчас идет разработка Yii3, которая многократно лучше 2 версии, но 3 версия доступна только в демо. Поэтому, если хочется писать НОВЫЙ проект на Yii, то я бы не стал выбирать 2 версию. Можете подождать Yii3, но никто не знает когда будет релиз. Можете начать писать используя Yii3-demo, но там может всё поменяться к моменту релиза.
    • Он монолитный. Если вам требуется сделать проект используя много приложений с разными компонентами, то пойдёте по пути Advanced шаблона, где каждое приложение будет папкой: backend, forntend, console. Однако при большой нагрузке вам потребуется разносить приложения. Тогда ваш core будет дублироваться во всех приложениях. Там будет то, что вам даже не требуется. Потому что Yii2 монолит.
    • В Yii2 используется Actvie Record. AR - это не плохо. Его многие любят, многие ценят и хвалят. Но для больших проектов он предоставляет неудобства. Например, при изменении поля в базе данных - приходится менять все свойства и надеяться что везде поменяли, так как в GrigView используется магия, при получение значений из модели 'value' => 'profile.last_name'. Так же нельзя сделать свойства модели (сущности), приватными. Из-за чего состояние модели можно изменить где угодно и вы никак не проконтролируете это.
    • Много абстракции, которую не распознает редактор. Например, вы можете вызвать в контроллере Yii::$app->user->id. Вам приходится делать докблок, что User это common/auth/Identity, а не yii/web/User


    Ну и так далее. С каждым из этих пунктов можно бороться, при правильном подходе. Как уже сказали в плохих руках любой код может пахнуть. Но это основное. Надеюсь, меня не раскритикуют другие за спорные моменты. В таких вопросах всегда есть разногласия) Думаю, что смог донести в сжатом виде отличия.
    Ответ написан
    4 комментария
  • Mikrotik Dual WAN: возможны ли отказоустойчивость и балансировка одновременно?

    @rainhog
    Прежде чем читать мануал нужно понять что вы хотите балансировать.
    Балансировать трафик можно основываясь тремя способами или их сочетаниями:
    1. балансировать трафик пропорционально . Например 1:1 или 3:2 (количество соединений на первый WAN и на второй соответственно)
    Предупреждаю: многие сервисы в интернете не любят (вплоть до бана) запросы от разных адресов от клиента в одном сеансе. Особенно банки.
    Если имеются dst-nat, то придётся вычурно метить трафик, чтобы не путать вход-выход.
    2. балансировать опираясь на информацию от источника (клиента). Например разделив адресное пространство клиентской сеть пополам или вручную по спискам или динамически, анализируя те или иные параметры запросов и т.д.
    Если клиенты сидят за прокси это будет сделать довольно сложно.
    3. балансировать опираясь на цель запросов, т.е. делить интернет. Тут вообще целина не паханная возможностей. Кстати это основной способ обхода блокировок РКН, поскольку напоминаю, что соединение VPN - тоже считается внешним интерфейсом.

    После можете гуглить реализацию.
    Ответ написан
    1 комментарий
  • Наилучший способ централизованно отслеживать атаки на Linux-сервера?

    @MechanID
    Админ хостинг провайдера
    Из личного опыта даже настроенный IDS на Juniper SRX не делает все что вы хотите.
    Из бесплатного но увы не централизированного
    1 посмотрите в сторону ConfigServer Security & Firewall - это утилита управление iptables, а также автобанилка за неудачные попытки входа, за скан портов и тд, правда нужно сидеть и вдумчиво настраивать.
    Основная польза когда оно работает с логом от mod_security. ну и просто логи ssh ftp и так далее тоже читает и банит плохишей.
    2 Сканирывание на уязвимости из бесплатного - OpenVas
    3 Грубые ддосы и тд должен показывать обычный мониторинг типа семейств nagios, или заббикс. метрики - сетевой трафик, реквесты к веб серверу и тд.
    Ответ написан
    Комментировать
  • Где можно пройти хорошие онлайн курсы по DevOps?

    nonname
    @nonname
    Как выше уже сказали профессии такой нет, но есть инженеры, которые используют DevOps практики.
    Я в эту профессию попал из системного администрирования, имея довольно неплохой бэкграунд и последнее время склоняюсь к тому, что это не та профессия, которую нужно начинать с нуля. Сейчас пытаюсь разработать внутренние курсы для для своего работодателя, чтобы привлечь в профессию ops инженеров или разработчиков. Сначала думал что можно дать материал джунам, но в итоге пришёл к выводу, что для начала нужно поработать в разработке\администрировании до уровня мидла, чтобы иметь представление о том как вообще работают системы, как они разрабатываются и эксплуатируются, параллельно можно изучать DevOps инструменты.
    По курсам посоветую только базовые курсы, любые какие вам по душе по темам: Linux, Python, Docker, Kubernetes, Jenkins, Git.
    Ответ написан
    Комментировать
  • Best practice администрирования mysql?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    1. Админу - админово. Поставить, завести юзеров, раздать права, создать базы. Уметь забэкапить БД, таблицу и восстановить ее средствами phpmyadmin, например. Уметь выполнить скрипт по созданию структуры таблиц "изнутри" консоли mysql, прочитать его вывод, найти ошибки, исправить (это как правило, отсутствующая либо наоборот присутствующая БД/таблица). Все, необходимое для того, чтобы приложение работало.
    2. Изучение различий (при наличии например пакетов последних версий обеих типов). Наличие пакета под нужный дистриб, архитектуру, версию etc.
    3. Читать маны. Пробовать. Документации много, но к сожалению, нигде не сказано "Вы покрутите этот параметр и вот это изменится вот на столько" - потому что задачи у всех разные
    4. Правильным действием является прежде всего бэкап БД непосредственно перед обновлением :)
    5. Не всегда. Если обновление движка потянет за собой обновление еще чего-нибудь, есть шанс, что например часть сайта после такого обновления просто не заработает :) Поэтому - бэкап, бэкап и еще баз бэкап!
    6. По принципу необходимости для задачи всех фишек InnoDB. БД c небольшими таблицами, в которых например частичные блокировки не нужны - проще будет держать на MyISAM - он быстрее, его бэкап проще.
    Ответ написан
    1 комментарий
  • Best practice администрирования mysql?

    @maniac_by
    1. Смотря какой уровень. Стандартно - это установить MySQL, выдать права, создать БД/Таблицу с нужной кодировкой. Не только MySQL касается. Сейчас от неё уходят на MariaDB и PostgreSQL

    2. MariaDB - лучше. И более открыта. И хороший дебаггер. MySQL - анахранизм. А лучше PostgreSQl и noSQL

    3. Смотри англоязычные ресурсы. Заодно подтянешь и английский. все самые актуальные маны - там. Еще можешь глянуть в настройках всяких Линуксов, того же RHEL обычно там подробно.

    4. Работает - не трогай.

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

    6. По принципу рекомендуемых приложением. Если, например, к вики - системе указан InnoDB - значит InnoDB.

    7. Если ты не БД - разработчик, то многого в базе тебе не нужно. Только умения поднять, провести первоначальную настройку и уметь делать дебаг. Оптимизации и т.д. Все потом.

    Книги:
    https://oz.by/books/more10295749.html
    https://www.amazon.com/Mastering-MariaDB-Federico-...
    Ответ написан
    1 комментарий
  • Best practice администрирования mysql?

    Softer
    @Softer
    1. Есть DBA - ничего. Нет DBA - все.
    2. Религия в основном.
    3. Читать документацию. Пробовать.
    4. Бекап перед апдейтом всегда.
    5. Сравнивать самому на типичных для выбранного проекта нагрузках.
    6. От задач отталкиваться. Вроде как MyISAM быстрее на запись.
    7. Гугл, маны и практика.
    Ответ написан
    3 комментария
  • Docker: Как увидеть локальную сеть из контейнера?

    @askhat
    Успешная попытка получить доступ к eth0 из контейнера без использования network: host, будет тем же самым что и использование network: host.

    Через CLI флаг:
    docker run --network host ...

    Через Compose:
    some-service:
      network_mode: 'host'


    https://docs.docker.com/network/host/
    Ответ написан
    1 комментарий
  • Не могу понять для чего нужны Entities в ООП PHP, Yii?

    @thyratr0n
    Есть разные подходы к пониманию смысла этих вещей.
    Entities чаще всего используются в контексте DDD-подхода. Там это означает то, что объект может изменять свое состояние (фигура может менять цвет, стакан может заполняться и тд). Супротив Entities выступают т.н. ValueObject, которые используются только для чтения и менять свое состояние не могут.
    И те, и другие используются в бизнес-логике приложения и генерируются либо хранилищами (storage), либо сервисам (в зависимости от выбранного подхода).

    В контексте же Yii понятие Entity не применяется. ибо там структурной единицей бизнес-логики выступают экземпляры ActiveRecord чаще всего (сам фреймворк к этому располагает), либо, иногда, наследники Model.

    Главное - это то, что сущность не обязательна должна сохраняться as is, т.е. иметь четкую проекцию в БД, ибо сущностью может выступать экземпляр паттерна Композит - все зависит от хранилища/сервиса, который это дело будет "CRUD'ить".
    Ответ написан
    2 комментария
  • Как ограничить кол-во запросов в секунду в Telegram боте?

    @VadosL
    Тоже замечал такую особенность поведения на ботах, написанных на Питоне. Но там, скорее всего, дело в том, что updater раскидывает обработку входящих апдейтов по потокам, и вот тут то и происходит race condition. Может Вам поискать в этом направлении?
    Ответ написан
    Комментировать
  • Как ограничить кол-во запросов в секунду в Telegram боте?

    @BorisKorobkov Куратор тега PHP
    Web developer
    Вам надо не "ограничить кол-во запросов", а изучить, что такое "race condition".
    Ответ написан
    Комментировать
  • Как лучше сделать парсер данных с разных источников?

    @alexalexes
    В вашей схеме еще не хватает подсистемы scheduler - планировщик заданий.
    Его нужно чаще всего запускать по крону (а может он у вас будет вертеться в бесконечном цикле, а может спать в потоковом режиме выполнения).
    Планировщик, на основе результатов проходов паука, парсера, ограничений на проходимых сайтах, нагрузки собственной системы, будет регулировать частоту запуска перезапуска заданий.
    Желательно, чтобы задания паука и парсера были достаточно атомарны.
    Паук в одну страницу постучал, записал статус получения ответа, каков контент в ответе (html или текстовое сообщение, или JSON и тд.), удалось ли ему распознать структуру, метаданные и тд.
    Если, например, вернулась 404 стр, то возможно, с помощью планировщика установить правило, что можно натравить паука на url чуть позже, через час, день, неделю и тд.
    По аналогии, можно фиксировать статусы работы других подсистем checker-а, парсера.
    Если один из модулей застревает на 5 разе на каком-то задании, то сыпать критическую ошибку в лог и тд.

    В общем, каков бы состав модулей не был, но планировщик нужен.
    Ответ написан
    Комментировать
  • Альтернатива для Яндекс.Диска?

    keydon2
    @keydon2
    ...
    ftp самое простое.
    nextcloud самое предусмотрительное.
    отказ от windows - самое лучшее.
    Ответ написан
    6 комментариев
  • Альтернатива для Яндекс.Диска?

    Adamos
    @Adamos
    Замените слово "файл" на слово "информация" - и, возможно, окажется, что вам не нужно ни хранилище, ни эксплорер, ни винды. А достаточно браузера и веб-сервиса.
    Вопрос, откуда берутся те файлы и как с ними работают.
    Ответ написан
    Комментировать
  • Как правильно поправить ошибку php PHP Strict Standards: Only variables should be passed by reference in?

    roswell
    @roswell
    и швец, и жнец, и на дуде игрец
    $modules = glob( 'modules*', GLOB_ONLYDIR );
    $modules_folder = array_shift( $modules );

    Между нами, есть ещё один странный способ проверки существования каталога.
    Ответ написан
    Комментировать