• Есть ли сайт, где собраны общепринятые практики программирования?

    Moskus
    @Moskus
    Естественно, нет, потому что всё, что вы описали - это не какое-то тайное знание, которое можно только запомнить, а логичные приёмы, которые следуют из знания фундаментальных принципов и анализа требований к продукту. Если попытаться заменить фундаментальные знания таким сборником прецедентов, он получится гигантским и совершенно непригодным для освоения - столько всего просто нельзя запомнить. Объем фундаментальных знаний - на порядки меньше объёма частностей, которые из них выводятся, но сложность этих знаний, при этом, выше. Кто фундаментальные знания не осилил, остаётся говнокодером, пока не осилит.
    Ответ написан
    Комментировать
  • Мой ubuntu сервер пытаются взломать, как защититься?

    mhthnz
    @mhthnz
    PHP, YII2, Golang, Linux
    1) Перенести порт ssh сервера со стандартного на другой, это отобьет большую часть ботов/сканнеров
    2) Запретить авторизацию пользователю root по ssh
    3) Поставить Fail2Ban для блокировки айпишников с которых идет брут

    P.S. Разные порты это скорее всего порты исходящего соединения, поэтому они разные, к вам же они все стучатся на порт который указан в конфиге sshd
    Ответ написан
    1 комментарий
  • Права и роли пользователей как делать?

    amorphis
    @amorphis
    Технолог в Студии Артемия Лебедева
    Почитайте про RBAC (Role-based Access Control)
    Ответ написан
    7 комментариев
  • Как отследить input.value в реальном времени?

    shmatuan
    @shmatuan
    8 year of Web, 5 years of Vue
    https://learn.javascript.ru/events-change

    p.s. судя по написанному - лучше прочитайте для начала учебник https://learn.javascript.ru/
    Ответ написан
    Комментировать
  • Аудит сайта на дыры перед релизом?

    webinar
    @webinar Куратор тега PHP
    Учим yii: https://youtu.be/-WRMlGHLgRg
    перед запуском хотелось бы его протестировать на дыры и уязвимости.

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

    а на обычном микрофреймворке, в котором изначально была концепция mvc

    а потом mcv куда-то пропало?

    Какие дыры могут быть на сайтах?

    Самые разные. Вы ожидаете что кто-то знание целой индустрии уложит в 1 предложение? Это как спросить "ребят подскажите как сделать машину своими руками?"

    грубо говоря для них сайт в рид онли

    любой сайт рид онли по сути. Если проект большой, значит и бюджет есть. Наймите не дорогого спеца на фрилансе, который укажет Вам на дыры очевидные. Если Вы не знаете с чего начать, значит наши ответы не особо помогут Вам, что бы его хорошо оттестировать.
    Ответ написан
    Комментировать
  • Какова суть фреймворков и библиотек?

    Stalker_RED
    @Stalker_RED
    Библиотека это инструмент или набор каких-то инструментов.
    Бибилиотека для скачивания видео с ютуба
    Бибилиотека для кропа и ресайза картинок
    Бибилиотека для определения города по IP

    Фреймворк может использовать десятки или сотни разных библиотек. Это набор не только инструментов, но и готовых компонентов, и еще и рекомендация по их использованию.

    "набор для постройки скворечника"
    В комплекте молоток, гвозди, столярный клей, 20 деревянных досточек разных форм и расцветок и инструкция с тремая вариантами скворечника на выбор.

    Или вот два фреймворка:
    Ezva9I.pngzC6ZHT.png
    Можно ли их использовать вместе? (Конечно, никто не запрещает)
    Можно ли из этих деталей построить что-то совсем другое, не такое как в инструкции? (Конечно да)
    Можно ли с этими фреймворками использовать детали еще и из этого?
    lGjE1A.png
    (конечно можно, но придется что-то придумать для совместимости деталек. Быть может придется применить клей, изоленту, пластилин или жвачку. Или шуруповерт, или сварочный аппарат. Но ни в один комплект эти дополнительные инструменты не входят, как и скиллы к ним.)

    Можете посмотреть еще сюда, этот ответ частично покрывает ваш вопрос:
    Для чего нужны фреймворки, а-ля Laravel?
    Ответ написан
    Комментировать
  • Можно ли как-нибудь узнать, какие запросы к какой таблице производились на протяжении работы веб-приложения? И сколько времени они занимали?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    1. В my.cnf:
      performance_schema=1
    2. Перезапустить MySQL.
    3. Импортировать sys_xx.sql из проекта mysql-sys: https://github.com/mysql/mysql-sys
    4. Подождать немного времени, пока наберётся статистика с последнего старта БД.
    5. Анализировать запросы в таблице `sys`.`statement_analysis`.
    Ответ написан
    Комментировать
  • Можно ли как-нибудь узнать, какие запросы к какой таблице производились на протяжении работы веб-приложения? И сколько времени они занимали?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Обычно анализ начинают с включения журнала медленных запросов (slow query log). Туда записываются все запросы, анализирующие больше заданного количества строк и занимающие больше заданного времени.
    Если этого не хватает, то можно включить общий журнал запросов (general query log). Туда уже попадают все запросы и информация о подключении/отключении клиентов.
    Ответ написан
  • Чем опытнее разработчик, тем меньше соблюдается принцип KISS?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Принцип KISS не означает что надо использовать самые примитивные инструменты.
    Он означает, что не надо переусложнять систему без нужды.
    Если так рассуждать, так и высшее образование не нужно: "Дед отличные бани строил, хотя вовсе был неграмотный. Я и без сопромата небоскреб построю!"
    Если вы пока ещё не понимаете назначение всех этих "лееров, провайдеров и репозиториев", это не значит, что они вообще никому не нужны.

    Для того, чтобы упростить управление системой, её надо усложнить.
    Этот принцип относится к любой области человеческой деятельности, от постройки ракет до управления государствами.
    Чем сложнее система, тем больше накладные расходы на ее управление. Хоумпейдж с котиками можно и нужно делать примитивными средствами. В большом проекте надо сразу закладываться на будущую расширяемость. То есть, заранее делить ответственность между "леерами".

    И кстати. Код, в котором "всё друг на друге завязано" - это очень плохой код. Собственно, предназначение всех этих "лееров, провайдеров и репозиториев" как раз в том, чтобы компоненты были как можно более независимы друг от друга.
    Ответ написан
    1 комментарий
  • Как построить инфраструктуру большого проекта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вопрос из серии пальцем в небо.
    Не меряется нагрузка в посетителях. Она меряется в rps и *bit/s. Также нужно знать прожорливость вашего ПО к io+ram+cpu иногда еще и gpu.
    Количество серверов, способы распределения нагрузки, всякие репликации бд, распределения между ДЦ подбираются по конкретный проект.
    Не бывает в природе такого, что вот так хренак и у вас откуда не возьмись 1кк активных юзеров, ну разве что событийные проекты типа прямых трансляций. Именно по этому рекомендую начать с малого, а дальше оптимизировать и распределять нагрузку между серверами там, где это необходимо. Например, у вас фото сток: cdn - это то, что вам потребуется. У вас месенджер - стоит выделить кучку серверов на поддержание сокетов с пользователями + хорошо прработать историю сообщений.
    Ответ написан
    1 комментарий
  • Как перевести 64битное+ число, представленное в двоичной системе в сразу в стринг?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $dec = gmp_strval(gmp_init($bin, 2));
    Ответ написан
    Комментировать
  • Пожалуйста оцените мое убогое ООП?

    Stasgar
    @Stasgar
    Обученная макака
    Во-первых: начните изучать архитектурную часть программирования, изучите паттерны проектирования, изучите SOLID, DRY, KISS и остальные модные словечки, постарайтесь всё это осознать, или, на крайняк - зазубрить. Всё придет с опытом, изначально все не понимали зачем всё так сложно, но эта сложность обусловлена неисчислимыми литрами слёз и потраченных нервов, всё не просто так.

    Судя по всему это тестовое или учебное задание. От вас требовалось отоверинжинирить простую задачу. Давайте попробуем:

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

    Разобъем задачу на отдельные независимые этапы:
    1) Преобразование одной структуры данных (текстового файла) в другую (объект, понятный PHP, к примеру)
    2) Преобразование этой структуры данных в Json формат.
    Первый вопрос, который может возникнуть - почему сразу не преобразовать в json? Ответ - при расширении системы в будущем - нам понадобится вывести данные в виде массива, или в виде XML, или даже в виде готового файла Excel. Нам будет сложно дополнять логику изначального класса, ничего при этом не сломав и не затронув уже существующий функционал. Также ответом на этот вопрос может являться каждая буква из SOLID принципов, подробнее отвечу дальше, когда буду пояснять за реализацию, см. ниже

    Теперь рассмотрим эту задачу с точки зрения ООП, начнем думать не от конкретной реализации, а от интерфейса и абстракции (мы не парсим конкретный файл, мы парсим просто файл, мы не переводим его в конкретное представление json, мы переводим его просто в представление):
    Нам понадобится 2 класса - непосредственно класс, читающий файл и преобразующий его в простейший тип данных (например PHP array). Второй класс - преобразователь простейшего типа данных парсера в какой-то определенный тип:
    1. LogFileReaded implements/extends FileReaderContract(интерфейс, возможно абстрактный класс, если понадобится предустановленная логика)

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

    2. JsonPresenter implements/extends DataTypePresenterContract

      Абстракция содержит контракт на метод output(), а в конструкторе принимются исходные данные. В конкретной реализации JsonPresenter в output() будет банальный json_encode() (да, это нормально, нет, класс не лишний и нет, json_encode() нельзя пихать в сам парсер) А теперь к вопросу - почему не следует просто запихать это всё в парсер и вместо массива отдать json: в будущем, когда система будет расширяться - нам понадобится представить данные в виде XML - что тогда будем делать - переписывать весь код парсера ради добавления switch case "json" и т.д.? А если что-то сломается во всей системе? А если вариантов представления станет настолько много, что файл будет просто не читаем? А при данном подходе достаточно будет просто написать новый класс XMLPresenter, или даже ExcelPresenter, который на выводе не строку будет выдавать, а целый файл (опустим типизацию output пока)). Также этот класс можно реализовать в виде декоратора (паттерн), да и много еще как.



    В итоге у нас получается вполне сносная и, что важнее - расширяемая(в разумных пределах) архитектура, не забываем прописать класс клиента и определить конкретные реализации в одном месте - можно упороться и дописать сюда контейнер зависимостей.

    К примеру: в итоге, если вас уже повысили, и вы вместо парсинга стали заниматься более высшими материями - новому программисту, чтобы дописать логику преобразования данных в Excel не нужно знать как конкретно вы преобразовывали когда-то эти данные в json, ему не нужно дебажить ваш код, ему достаточно посмотреть на интерфейс - отнаследоваться от него и написать свой собственный метод преобразования и дальше использовать его в нужном месте.

    P.S. В данной реализации опускаются и упрощаются некоторые моменты для понятности
    Ответ написан
    21 комментарий
  • Как переписать код без использования jQuery?

    Posho
    @Posho
    Frontend-developer
    Комментировать
  • Как переписать код без использования jQuery?

    @sidni
    Php Developer
    window.addEventListener("load", function(){
      let element = document.querySelector(".loader-screen");
      element.style.opacity = "0";
    });
    Ответ написан
    Комментировать
  • Как передать значение из input в переменную без submit?

    gaz12
    @gaz12
    Делаю сайты
    jQuery.ajax({
        url : window.location,

    в url сейчас указана текущая страница, она и возвращается.
    Нужно указать урл страницы-обработчика, которая уже будет возвращать результат.
    Ответ написан
    Комментировать
  • Бэкэнд разработчик на ноде, вкатывание?

    @spaceatmoon
    Дело вкуса. Я знаю JS, но совершенно не хочу вкатываться в nodejs. Зачем мне нода, когда и php решает те же проблемы?

    Мне лично нравиться в PHP, что есть на что опереться. Динамика развития стека средне динамичная и движется в правильном направлении, а не придумывает 100500 решений одной и той же проблемы. Есть решение - все его используют.

    Боязнь изучения другого языка в вашем случае не оправдана. Попробуйте Python/Java/PHP. Ознакомитесь где вот вам проще искать документацию, приятность синтаксиса, скорость разработки. Где вы решаете проблему из мира живого, а не из мира "Как эта штука работает".

    Я как-то хотел изучить Haskell, долго блуждал, но в итоге сложилось ощущение, что язык решает проблему для себя, а не для меня. Мне банально было неудобно всё в том языке. Даже родной редактор завершался с критической ошибкой...
    Ответ написан
    7 комментариев
  • Как защититься от sql иньекции?

    Использовать PDO
    Ответ написан
    Комментировать
  • Как сделать сайт как вертикальный слайдер?

    @architawr
    "Ok, Google" и все твои проблемы решены
    Библиотеки называюся fullpage js
    Ответ написан
    Комментировать
  • Кроп аватары - в браузере или на сервере?

    AngReload
    @AngReload
    Кратко о себе
    1. Не только. На JS и без того есть чем открыть и обработать картинки.
    https://www.npmjs.com/search?q=keywords:image%20pr...
    https://www.npmjs.com/search?q=keywords%3Aimage%20...
    Но, по соображениям безопасности, на сервере придётся проверить размеры и сжать то что пришло.
    1.1 Декодирование - нет. Обрезка - нет. А вот ресайз в канвасе плохой.
    https://habr.com/post/252175/ https://habr.com/post/302744/
    Ответ написан
    1 комментарий
  • Кроп аватары - в браузере или на сервере?

    Stalker_RED
    @Stalker_RED
    1. не только
    1.1. можно резать не только канвасом же
    2. да
    3. да

    Можно использовать сторонние сервисы. Можно на клиенте прочесть бинарник картинки, провести с ним любые преобразования какие вам нужно и собрать новый бинарник, обрезанный. Никто не запрещает вам хоть свой аналог фотошопа написать на js. Но стоимость или трудоемкость этого решения может зашкаливать, конечно.

    На практике проще будет
    1. решить для себя клиент или сервер.
    2. применить что-то из готовых библиотек по работе с иображениями. Благо, выбор довольно широкий.
    Ответ написан
    8 комментариев