• Какова суть фреймворков и библиотек?

    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 комментариев
  • Как посчитать одноименные элементы массива с помощью count() в php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Считает всегда правильно. Ключ в ассоциативном массиве должен быть уникален. В вашем случае остаётся только последняя запись.
    Ответ написан
    2 комментария
  • Как сделать так, чтоб не обманули?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Как-то вы непоследовательно делаете.
    Сначала взялись за работу, потом задумались о рисках.

    Закодировать ничего у вас не получится, не тратьте время на поиски.

    Думайте о том, как минимизировать риски.

    1. Идеальный [для вас] вариант от монтёра Мечникова: утром деньги — вечером стулья. Здесь риски переходят на вашего заказчика.

    2. Приемлемый вариант предоплата небольшими частями, хоть постранично. Либо такая же пост оплата. Опять же минимальные риски либо у вас, либо у заказчика.

    3. Вариант win-win: демонстрация вашей работы с помощью программ удаленного доступа. Предоставляете доступ заказчику к своему рабочему столу и он смотрит, если устраивает — платит, после чего получает файлы. Можно использовать TeamViewer или шаринг экрана в скайпе, или еще что-то подобное. Риски быть кинутым на деньги сведены к нулю у обоих сторон.
    Ответ написан
    1 комментарий
  • Как исправить ошибку?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Чтобы избавиться от повторных сабмитов, нужно перенаправить пользователя, чтобы он загрузил новую страницу и таким образом "перезатёр" последнее действие в браузере.
    $sql = mysql_query("INSERT INTO `db_comments` ...");
    
    header('Location: http://your.page.url/');
    exit;
    Ответ написан
    Комментировать
  • Как сохранить пробелы и отступы содержимого txt файла при выводе с помощью php?

    Stalker_RED
    @Stalker_RED
    Или с css свойством white-space: pre;
    Ответ написан
    Комментировать
  • Есть ли разница на что вешать обработчик для отправки формы - на саму форму: on submit или на кнопку отправки: on click?

    DimaLondon
    @DimaLondon
    Лучше вешать на форму (атрибут onsubmit), потому что форма отправляется не только кликом по кнопке, а и, к примеру, нажатием Enter при установленном фокусе в INPUT[type="text"].
    Ответ написан
    4 комментария